summaryrefslogtreecommitdiff
path: root/public/static/scripts
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-06-23 19:34:35 +0500
committerilotterytea <iltsu@alright.party>2025-06-23 19:34:35 +0500
commit7b50348c8c0366f0ae83ffcf9a0caea9c2b0498a (patch)
tree6940bbd8cff094468a9dfd0eac998ab33e5b2106 /public/static/scripts
parent2762007f636d5e9c2abb186a7f857c2491db3dd5 (diff)
feat: favorite button
Diffstat (limited to 'public/static/scripts')
-rw-r--r--public/static/scripts/favorites.js93
-rw-r--r--public/static/scripts/tabs.js56
2 files changed, 149 insertions, 0 deletions
diff --git a/public/static/scripts/favorites.js b/public/static/scripts/favorites.js
new file mode 100644
index 0000000..0986d63
--- /dev/null
+++ b/public/static/scripts/favorites.js
@@ -0,0 +1,93 @@
+function saveFavoriteFiles(files) {
+ localStorage.setItem('favorite-files', JSON.stringify(files));
+}
+
+function getFavoriteFiles() {
+ const files = JSON.parse(localStorage.getItem('favorite-files') ?? '[]');
+ return files;
+}
+
+function addFavoriteFile(f) {
+ if (isFavoriteFile(f)) {
+ return;
+ }
+
+ const files = getFavoriteFiles();
+ files.push(f);
+ saveFavoriteFiles(files);
+}
+
+function removeFavoriteFile(f) {
+ if (!isFavoriteFile(f)) {
+ return;
+ }
+
+ let files = getFavoriteFiles();
+ files = files.filter((x) => x.id != f.id);
+ saveFavoriteFiles(files);
+}
+
+function isFavoriteFile(f) {
+ const files = getFavoriteFiles();
+ return files.find((x) => x.id == f.id) != undefined;
+}
+
+window.addEventListener('load', () => {
+ const tabs = document.getElementById('file-tab-buttons');
+ if (tabs != null) {
+ const addIcon = document.createElement('img');
+ addIcon.src = '/static/img/icons/star-gray.png';
+ addIcon.alt = 'Favorite';
+
+ const delIcon = document.createElement('img');
+ delIcon.src = '/static/img/icons/star.png';
+ delIcon.alt = 'Unfavorite';
+
+ const btn = document.createElement('button');
+
+ const file = {
+ id: document.getElementById('file-id').innerText,
+ mime: document.getElementById('file-mime').innerText,
+ extension: document.getElementById('file-extension').innerText,
+ size: document.getElementById('file-size').innerText
+ };
+
+ btn.addEventListener('click', (e) => {
+ if (isFavoriteFile(file)) {
+ removeFavoriteFile(file);
+ } else {
+ addFavoriteFile(file);
+ }
+
+ btn.innerHTML = '';
+
+ const isf = isFavoriteFile(file);
+
+ btn.appendChild(isf ? delIcon : addIcon);
+ btn.title = isf ? 'Unfavorite this file' : 'Favorite file';
+ });
+
+ const isf = isFavoriteFile(file);
+
+ btn.appendChild(isf ? delIcon : addIcon);
+ btn.title = isf ? 'Unfavorite this file' : 'Favorite file';
+
+ tabs.appendChild(btn);
+ }
+
+ const files = document.getElementById('favorite-files');
+ if (files != null) {
+ const data = getFavoriteFiles();
+ if (data.length > 0) {
+ files.parentElement.style.display = 'flex';
+ files.innerHTML = '';
+ enableTab('favorite-files');
+ } else {
+ disableTab('favorite-files');
+ }
+ data.forEach((x) => {
+ const html = addUploadedFile(x);
+ files.innerHTML += html;
+ });
+ }
+}); \ No newline at end of file
diff --git a/public/static/scripts/tabs.js b/public/static/scripts/tabs.js
new file mode 100644
index 0000000..fb8d598
--- /dev/null
+++ b/public/static/scripts/tabs.js
@@ -0,0 +1,56 @@
+function displayTab(category, id) {
+ const tabs = document.querySelectorAll(`#${category} .tab`);
+ tabs.forEach((tab) => {
+ let tabId = tab.getAttribute('id');
+ tabId = tabId.substring(0, tabId.length - 4);
+
+ tab.setAttribute('show-disabled', tabId != id);
+
+ const content = document.getElementById(tabId);
+ if (content) {
+ let display = 'flex';
+ if (content.classList.contains('grid')) {
+ display = 'grid';
+ }
+ content.style.display = tabId == id ? display : 'none';
+ }
+ });
+}
+
+function enableTab(id) {
+ document.getElementById(`${id}-tab`).style.display = 'flex';
+}
+
+function disableTab(id) {
+ document.getElementById(`${id}-tab`).style.display = 'none';
+}
+
+function hideTab(id) {
+ disableTab(id);
+ document.getElementById(id).style.display = 'none';
+}
+
+function showTab(id) {
+ enableTab(id);
+ const content = document.getElementById(id);
+ if (content) {
+ content.style.display = content.classList.contains('grid') ? 'grid' : 'flex';
+ }
+}
+
+window.addEventListener('load', () => {
+ const categories = document.querySelectorAll('.tab-category');
+
+ categories.forEach((c) => {
+ const category = c.getAttribute('id');
+ const tabs = document.querySelectorAll(`#${category} .tab>button`);
+ tabs.forEach((tab) => {
+ let id = tab.parentElement.getAttribute('id');
+ id = id.substring(0, id.length - 4);
+
+ tab.addEventListener('click', () => displayTab(category, id));
+
+ console.log(id);
+ });
+ });
+}); \ No newline at end of file