diff options
Diffstat (limited to 'client/assets/index.js')
-rw-r--r-- | client/assets/index.js | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/client/assets/index.js b/client/assets/index.js new file mode 100644 index 0000000..520c7f0 --- /dev/null +++ b/client/assets/index.js @@ -0,0 +1,117 @@ +document.addEventListener('DOMContentLoaded', async () => { + const urlParams = new URLSearchParams(window.location.search); + const fileId = urlParams.get('id'); + const key = urlParams.get('key'); + + if (fileId && key) { + displayFileDetails(fileId, key); + } else { + document.getElementById('upload__form').style.display = 'block'; + setupUploadForm(); + } +}); + +const baseUrl = window.location.origin; + +async function displayFileDetails(fileId, key) { + try { + const response = await fetch(`${baseUrl}/get/${fileId}?key=${key}`, { + method: 'GET', + }); + + const fileDetails = document.getElementById('file__details'); + const fileNameElement = document.getElementById('file__name'); + const fileSizeElement = document.getElementById('file__size'); + const downloadButton = document.getElementById('download__btn'); + const copyButton = document.getElementById('copy__btn'); + + if (!response.ok) { + fileDetails.textContent = `Error: ${response.statusText}`; + fileDetails.style.display = 'flex'; + return; + } + + const contentType = response.headers.get('Content-Type'); + + if (contentType && contentType.includes('application/json')) { + const result = await response.json(); + const downloadUrl = `${baseUrl}/download/${fileId}?key=${key}`; + const pageUrl = `${baseUrl}/?id=${fileId}&key=${key}`; + fileNameElement.textContent = `${result.fileName}`; + fileSizeElement.textContent = `${result.fileSize}`; + downloadButton.innerHTML = `<a href="${downloadUrl}">Download</a>`; + copyButton.onclick = () => { + navigator.clipboard.writeText(pageUrl); + copyButton.textContent = 'Copied!'; + }; + } else { + const result = await response.text(); + fileDetails.textContent = result; + } + + fileDetails.style.display = 'flex'; + } catch (error) { + console.error('Error:', error); + document.getElementById('file__details').textContent = 'An error occurred. Please try again.'; + document.getElementById('file__details').style.display = 'flex'; + } +} + +function setupUploadForm() { + const fileInput = document.querySelector('.upload__input'); + const overlayText = document.querySelector('.upload__input__overlay__text'); + + fileInput.addEventListener('change', () => { + if (fileInput.files.length > 0) { + overlayText.textContent = fileInput.files[0].name; + } else { + overlayText.textContent = 'Choose a file or drag it here'; + } + }); + + document.getElementById('upload__form').addEventListener('submit', async (event) => { + event.preventDefault(); + + const file = fileInput.files[0]; + + if (!file) { + console.log('No file selected.'); + return; + } + + const formData = new FormData(); + formData.append('file', file); + + try { + const response = await fetch(`${baseUrl}/upload`, { + method: 'POST', + body: formData + }); + + const uploadResult = document.getElementById('upload__result'); + + if (!response.ok) { + uploadResult.textContent = `Error: ${response.statusText}`; + uploadResult.classList.add('upload__result__visible'); + return; + } + + const contentType = response.headers.get('Content-Type'); + + if (contentType && contentType.includes('application/json')) { + const result = await response.json(); + const pageUrl = `${baseUrl}/?id=${result.id}&key=${result.key}`; + window.location.href = pageUrl; + } else { + const result = await response.text(); + uploadResult.textContent = result; + } + + uploadResult.classList.add('upload__result__visible'); + } catch (error) { + console.error('Error:', error); + document.getElementById('upload__result').textContent = 'An error occurred. Please try again.'; + document.getElementById('upload__result').classList.add('upload__result__visible'); + } + }); +}
\ No newline at end of file |