From c6c78a16c59af13a6bf6d35ed859618033a61768 Mon Sep 17 00:00:00 2001 From: sigoden Date: Mon, 20 Feb 2023 17:23:31 +0800 Subject: [PATCH] chore: optimize ui --- assets/index.css | 8 ++- assets/index.js | 176 ++++++++++++++++++++++++++--------------------- 2 files changed, 102 insertions(+), 82 deletions(-) diff --git a/assets/index.css b/assets/index.css index 61ba3a6..a1a4908 100644 --- a/assets/index.css +++ b/assets/index.css @@ -7,6 +7,7 @@ html { body { /* prevent premature breadcrumb wrapping on mobile */ min-width: 500px; + margin: 0; } .hidden { @@ -17,7 +18,10 @@ body { display: flex; flex-wrap: wrap; align-items: center; - padding: 1em 1em 0; + padding: 0.6em 1em; + position: fixed; + width: 100%; + background-color: white; } .breadcrumb { @@ -104,7 +108,7 @@ body { } .main { - padding: 0 1em; + padding: 3em 1em 0; } .empty-folder { diff --git a/assets/index.js b/assets/index.js index 0259308..dfaa159 100644 --- a/assets/index.js +++ b/assets/index.js @@ -58,6 +58,10 @@ let $emptyFolder; * @type Element */ let $newFolder; +/** + * @type Element + */ +let $searchbar; class Uploader { /** @@ -106,7 +110,7 @@ class Uploader { const ajax = new XMLHttpRequest(); ajax.upload.addEventListener("progress", e => this.progress(e), false); ajax.addEventListener("readystatechange", () => { - if(ajax.readyState === 4) { + if (ajax.readyState === 4) { if (ajax.status >= 200 && ajax.status < 300) { this.complete(); } else { @@ -119,7 +123,7 @@ class Uploader { ajax.open("PUT", url); ajax.send(this.file); } - + progress(event) { const now = Date.now(); @@ -182,7 +186,7 @@ function addBreadcrumb(href, uri_prefix) { const name = parts[i]; if (i > 0) { if (!path.endsWith("/")) { - path += "/"; + path += "/"; } path += encodeURIComponent(name); } @@ -224,20 +228,20 @@ function renderPathsTableHead() { $pathsTableHead.insertAdjacentHTML("beforeend", ` ${headerItems.map(item => { - let svg = ``; - let order = "asc"; - if (PARAMS.sort === item.name) { - if (PARAMS.order === "asc") { - order = "desc"; - svg = `` - } else { - svg = `` - } - } - const qs = new URLSearchParams({...PARAMS, order, sort: item.name }).toString(); - const icon = `${svg}` - return `${item.text}${icon}` - }).join("\n")} + let svg = ``; + let order = "asc"; + if (PARAMS.sort === item.name) { + if (PARAMS.order === "asc") { + order = "desc"; + svg = `` + } else { + svg = `` + } + } + const qs = new URLSearchParams({ ...PARAMS, order, sort: item.name }).toString(); + const icon = `${svg}` + return `${item.text}${icon}` + }).join("\n")} Actions `); @@ -339,13 +343,13 @@ async function deletePath(index) { method: "DELETE", }); if (res.status >= 200 && res.status < 300) { - document.getElementById(`addPath${index}`).remove(); - DATA.paths[index] = null; - if (!DATA.paths.find(v => !!v)) { - $pathsTable.classList.add("hidden"); - $emptyFolder.textContent = dirEmptyNote; - $emptyFolder.classList.remove("hidden"); - } + document.getElementById(`addPath${index}`).remove(); + DATA.paths[index] = null; + if (!DATA.paths.find(v => !!v)) { + $pathsTable.classList.add("hidden"); + $emptyFolder.textContent = dirEmptyNote; + $emptyFolder.classList.remove("hidden"); + } } else { throw new Error(await res.text()) } @@ -368,7 +372,7 @@ async function movePath(index) { const fileUrlObj = new URL(fileUrl) const prefix = DATA.uri_prefix.slice(0, -1); - + const filePath = decodeURIComponent(fileUrlObj.pathname.slice(prefix.length)); let newPath = prompt("Enter new path", filePath) @@ -395,27 +399,65 @@ async function movePath(index) { } function dropzone() { - ["drag", "dragstart", "dragend", "dragover", "dragenter", "dragleave", "drop"].forEach(name => { - document.addEventListener(name, e => { - e.preventDefault(); - e.stopPropagation(); - }); + ["drag", "dragstart", "dragend", "dragover", "dragenter", "dragleave", "drop"].forEach(name => { + document.addEventListener(name, e => { + e.preventDefault(); + e.stopPropagation(); }); - document.addEventListener("drop", e => { - if (!e.dataTransfer.items[0].webkitGetAsEntry) { - const files = e.dataTransfer.files.filter(v => v.size > 0); - for (const file of files) { - new Uploader(file, []).upload(); - } - } else { - const entries = []; - const len = e.dataTransfer.items.length; - for (let i = 0; i < len; i++) { - entries.push(e.dataTransfer.items[i].webkitGetAsEntry()); - } - addFileEntries(entries, []) + }); + document.addEventListener("drop", e => { + if (!e.dataTransfer.items[0].webkitGetAsEntry) { + const files = e.dataTransfer.files.filter(v => v.size > 0); + for (const file of files) { + new Uploader(file, []).upload(); } - }); + } else { + const entries = []; + const len = e.dataTransfer.items.length; + for (let i = 0; i < len; i++) { + entries.push(e.dataTransfer.items[i].webkitGetAsEntry()); + } + addFileEntries(entries, []) + } + }); +} + +/** + * Setup searchbar + */ +function setupSearch() { + $searchbar.classList.remove("hidden"); + $searchbar.addEventListener("submit", event => { + event.preventDefault(); + const formData = new FormData($searchbar); + const q = formData.get("q"); + let href = getUrl(); + if (q) { + href += "?q=" + q; + } + location.href = href; + }); + if (PARAMS.q) { + document.getElementById('search').value = PARAMS.q; + } +} + +/** + * Setup upload + */ +function setupUpload() { + $newFolder.classList.remove("hidden"); + $newFolder.addEventListener("click", () => { + const name = prompt("Enter folder name"); + if (name) createFolder(name); + }); + document.querySelector(".upload-file").classList.remove("hidden"); + document.getElementById("file").addEventListener("change", e => { + const files = e.target.files; + for (let file of files) { + new Uploader(file, []).upload(); + } + }); } /** @@ -451,11 +493,11 @@ async function addFileEntries(entries, dirs) { function getUrl(name) { - let url = location.href.split('?')[0]; - if (!url.endsWith("/")) url += "/"; - if (!name) return url; - url += name.split("/").map(encodeURIComponent).join("/"); - return url; + let url = location.href.split('?')[0]; + if (!url.endsWith("/")) url += "/"; + if (!name) return url; + url += name.split("/").map(encodeURIComponent).join("/"); + return url; } function getSvg(path_type) { @@ -511,8 +553,8 @@ function formatPercent(percent) { } function encodedStr(rawStr) { - return rawStr.replace(/[\u00A0-\u9999<>\&]/g, function(i) { - return '&#'+i.charCodeAt(0)+';'; + return rawStr.replace(/[\u00A0-\u9999<>\&]/g, function (i) { + return '&#' + i.charCodeAt(0) + ';'; }); } @@ -523,24 +565,11 @@ function ready() { $pathsTableBody = document.querySelector(".paths-table tbody"); $uploadersTable = document.querySelector(".uploaders-table"); $emptyFolder = document.querySelector(".empty-folder"); - $searchForm = document.querySelector(".searchbar"); $newFolder = document.querySelector(".new-folder"); + $searchbar = document.querySelector(".searchbar"); if (DATA.allow_search) { - $searchForm.classList.remove("hidden"); - $searchForm.addEventListener("submit", event => { - event.preventDefault(); - const formData = new FormData($searchForm); - const q = formData.get("q"); - let href = getUrl(); - if (q) { - href += "?q=" + q; - } - location.href = href; - }); - if (PARAMS.q) { - document.getElementById('search').value = PARAMS.q; - } + setupSearch() } if (DATA.allow_archive) { @@ -553,19 +582,6 @@ function ready() { if (DATA.allow_upload) { dropzone(); - if (DATA.allow_delete) { - $newFolder.classList.remove("hidden"); - $newFolder.addEventListener("click", () => { - const name = prompt("Enter name of new folder"); - if (name) createFolder(name); - }); - } - document.querySelector(".upload-file").classList.remove("hidden"); - document.getElementById("file").addEventListener("change", e => { - const files = e.target.files; - for (let file of files) { - new Uploader(file, []).upload(); - } - }); + setupUpload(); } }