summaryrefslogtreecommitdiff
path: root/client/assets/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/assets/index.js')
-rw-r--r--client/assets/index.js117
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