diff --git a/package-lock.json b/package-lock.json index c882d2e..fe7a2f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "@types/range-parser": "^1.2.6", "discord-api-types": "^0.37.61", "sass": "^1.57.1", - "svelte": "^3.55.1", + "svelte": "^4.2.15", "svelte-preprocess": "^5.1.3", "tslib": "^2.6.2", "vite": "^4.5.0" @@ -46,6 +46,19 @@ "node": ">=v21" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", @@ -70,12 +83,54 @@ "node": ">=18.14.1" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "2.4.6", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", @@ -199,6 +254,12 @@ "@types/express": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/express": { "version": "4.17.14", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", @@ -292,6 +353,18 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -310,6 +383,15 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -334,6 +416,15 @@ "form-data": "^4.0.0" } }, + "node_modules/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -466,6 +557,19 @@ "fsevents": "~2.3.2" } }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -562,6 +666,19 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -603,6 +720,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -705,6 +831,15 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -1077,6 +1212,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1091,6 +1235,12 @@ "node": ">=6" } }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, "node_modules/magic-string": { "version": "0.30.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", @@ -1103,6 +1253,12 @@ "node": ">=12" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1348,6 +1504,17 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1685,12 +1852,28 @@ } }, "node_modules/svelte": { - "version": "3.55.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", - "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", + "version": "4.2.15", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.15.tgz", + "integrity": "sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==", "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, "engines": { - "node": ">= 8" + "node": ">=16" } }, "node_modules/svelte-hmr": { diff --git a/package.json b/package.json index 15f91f9..937ebef 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "@types/range-parser": "^1.2.6", "discord-api-types": "^0.37.61", "sass": "^1.57.1", - "svelte": "^3.55.1", + "svelte": "^4.2.15", "svelte-preprocess": "^5.1.3", "tslib": "^2.6.2", "vite": "^4.5.0" diff --git a/src/download.html b/src/download.html deleted file mode 100644 index dd0847a..0000000 --- a/src/download.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - $FileId - - - - - - - - - - - - - - - -
-
-

- $FileName -

-

- $FileSize  —  uploaded by $Uploader -

- - - - - -
-
-
- - - diff --git a/src/style/_base.scss b/src/style/_base.scss deleted file mode 100644 index 7aceb3d..0000000 --- a/src/style/_base.scss +++ /dev/null @@ -1,85 +0,0 @@ -/* - could probably replace this with fonts served directly - from the server but it's fine for now -*/ - -@import url("/static/assets/fonts/inconsolata.css"); -@import url("/static/assets/fonts/source_sans.css"); -@import url("/static/assets/fonts/fira_code.css"); - -$FallbackFonts: - -apple-system, - system-ui, - BlinkMacSystemFont, - "Segoe UI", - Roboto, - sans-serif; - -%normal { - font-family: "Source Sans Pro", $FallbackFonts -} - -/* - everything that's not a span - and/or has the normal class - (it's just in case) -*/ - -*:not(span), .normal { @extend %normal; } - -/* - for code blocks / terminal -*/ - -.monospace { - font-family: "Fira Code", monospace -} - -/* - colors -*/ - -$Background: #252525; -/* hsl(210,12.9,24.3) */ -$darkish: rgb(54, 62, 70); - -/* - then other stuff -*/ - -body { - background-color: rgb(30, 33, 36); // this is here so that - // pulling down to refresh - // on mobile looks good -} - -#appContent { - background-color: $Background -} - -/* - scrollbars -*/ - -* { - /* nice scrollbars aren't needed on mobile so */ - @media screen and (min-width:500px) { - - &::-webkit-scrollbar { - width:5px; - } - - &::-webkit-scrollbar-track { - background-color:#222222; - } - - &::-webkit-scrollbar-thumb { - background-color:#333; - - &:hover { - background-color:#373737; - } - } - - } -} \ No newline at end of file diff --git a/src/style/app.scss b/src/style/app.scss deleted file mode 100644 index 886c792..0000000 --- a/src/style/app.scss +++ /dev/null @@ -1,41 +0,0 @@ -@use "base"; -@use "app/topbar"; -@use "app/pulldown"; -@use "app/uploads"; - -.menuBtn { - text-decoration:none; - font-size:16px; - transition-duration: 100ms; - - color:#555555; - background-color: #00000000; - border:none; - margin:0 0 0 0; - cursor:pointer; - - position:relative; - top:-1px; - - &:hover { - color:slategray; - transition-duration: 100ms; - } -} - -#appContent { - position:absolute; - left:0px; - top:40px; - width:100%; - height: calc( 100% - 40px ); - background-image: linear-gradient(#333,base.$Background); - - @media screen and (max-width:500px) { - background-image: linear-gradient(#303030,base.$Background); - } -} - -.number { - font-family: "Inconsolata", monospace; -} \ No newline at end of file diff --git a/src/style/app/pulldown.scss b/src/style/app/pulldown.scss deleted file mode 100644 index 86458dc..0000000 --- a/src/style/app/pulldown.scss +++ /dev/null @@ -1,49 +0,0 @@ -@use "../base"; -@use "pulldown/help"; -@use "pulldown/accounts"; -@use "pulldown/files"; -@use "pulldown/modals"; - -#overlay, .modalContainer { - position:absolute; - left:0px; - height: 100%; - width:100%; - top:0px; - border:none; - outline:none; - background-color:rgba(170, 170, 170, 0.25); - - z-index: 1000; -} - -.pulldown { - position: absolute; - width: 300px; - height: 400px; - background-color: #222222; - color: #dddddd; - - top:0px; - left:50%; - transform:translateX(-50%); - - @media screen and (max-width: 500px) { - width: 100%; - height: 100%; - } - - p, h1, h2 { - margin:0px; - } - - z-index: 1001; -} - -.pulldown_display { - position:absolute; - left:0px; - top:0px; - width:100%; - height:100%; -} \ No newline at end of file diff --git a/src/style/app/pulldown/accounts.scss b/src/style/app/pulldown/accounts.scss deleted file mode 100644 index 2961dbf..0000000 --- a/src/style/app/pulldown/accounts.scss +++ /dev/null @@ -1,225 +0,0 @@ -.pulldown_display[data-name=accounts] { - .notLoggedIn { - .container_div { - position:absolute; - top:50%; - transform:translateY(-50%); - width:100%; - text-align:center; - - h1 { - font-weight:600; - font-size:24px; - - @media screen and (max-width:500px) { - font-size:30px; - } - } - - .flavor { - font-size:14px; - - /* good enoough */ - - @media screen and (max-width:500px) { - font-size:16px; - } - - color:#999999; - margin: 0 0 10px 0; - } - - button { - cursor:pointer; - background-color:#393939; - color:#DDDDDD; - border:none; - outline:none; - padding:5px; - transition-duration: 250ms; - /*overflow:clip;*/ - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - - &:hover { - transition-duration: 250ms; - background-color:#434343; - color: #ffffff; - } - - flex-basis:50%; - flex-grow:1; - } - - button.flavor { - - padding: 0; - background: none; - - } - - input[type=text],input[type=password] { - border:none; - border-radius:0; - width:100%; - padding:5px; - background-color:#333333; - color:#dddddd; - outline:none; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - } - - .pwError { - div { - border:none; - border-radius:0; - width:100%; - padding:5px; - background-color:#663333; - color:#dddddd; - outline:none; - font-size:14px; - text-align:left; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - } - } - - .lgBtnContainer { - display:flex; - position:relative; - left:20px; - width:calc( 100% - 40px ); - gap:10px; - overflow:clip; - } - - .fields { - display:flex; - flex-direction:column; - position:relative; - left:20px; - width:calc( 100% - 40px ); - gap:5px; - overflow:clip; - } - - /* - a { - text-decoration: none; - color:#999999; - font-size:14px; - - @media screen and (max-width:500px) { - font-size:16px; - } - - &::after { - content:" ➜"; - font-size:0px; - opacity: 0; - transition-duration:250ms; - } - - &:hover { - &::after { - font-size:13px; - opacity: 1; - transition-duration:250ms; - } - } - } - */ - } - - } - - .loggedIn { - position:absolute; - - /* - left:10px; - top:10px; - */ - - left:0px; - top:0px; - width:calc( 100% - 20px ); - height:calc( 100% - 20px ); - padding:10px; - - overflow-y:auto; - - h1 { - font-weight:600; - font-size:20px; - color: #AAAAAA; - - @media screen and (max-width:500px) { - font-size:24px; - } - - .monospace { - font-size:18px; - @media screen and (max-width:500px) { - font-size:22px; - } - } - } - - .category { - - p { - text-align:left; - } - } - } -} - -@keyframes bounce { - 0% { - top: 0.25em; - }/* - 25% { - top: 0.25em; - } - 75% { - top: -0.25em; - }*/ - 100% { - top: -0.25em; - } -} - -.loader { - i { - font-style: normal; - position: relative; - - animation-name: bounce; - animation-duration: 500ms; - animation-iteration-count: infinite; - animation-direction: alternate; - top:0.25em; - - &:nth-of-type(1) { - animation-delay: 0ms; - } - &:nth-of-type(2) { - animation-delay: 125ms; - } - &:nth-of-type(3) { - animation-delay: 250ms; - } - } -} \ No newline at end of file diff --git a/src/style/app/pulldown/files.scss b/src/style/app/pulldown/files.scss deleted file mode 100644 index 8c68557..0000000 --- a/src/style/app/pulldown/files.scss +++ /dev/null @@ -1,160 +0,0 @@ -.pulldown_display[data-name=files] { - .notLoggedIn { - position:absolute; - top:50%; - left:0px; - transform:translateY(-50%); - width:100%; - text-align:center; - - .flavor { - font-size:16px; - color:#999999; - margin: 0 0 10px 0; - } - - button { - --col: #999999; - - background-color: #232323; - color:var(--col); - font-size:14px; - border:1px solid var(--col); - padding:2px 20px 2px 20px; - cursor:pointer; - transition-duration:250ms; - - &:hover { - background-color:#333333; - transition-duration:250ms; - --col:#BBBBBB; - } - } - } - - .loggedIn { - display: flex; - flex-direction: column; - max-height:100%; - overflow:hidden; - - .searchBar { - transition-duration:150ms; - background-color:#212121; - width:100%; - padding:8px; - color:#dddddd; - border:none; - border-bottom: 1px solid #aaaaaa; - outline: none; - border-radius:0px; - font-size:14px; - - &:focus { - transition-duration:150ms; - border-bottom: 1px solid #dddddd; - } - - @media screen and (max-width: 500px) { - padding:12px; - font-size:16px; - } - } - - .fileList { - overflow-y:auto; - overflow-x:hidden; - padding:5px 0; - - .flFile { - padding: 3px 8px; - position:relative; - - @media screen and (max-width: 500px) { - padding:7px 12px; - } - - .detail { - color:#777777; - font-size:14px; - position:relative; - - @media screen and (max-width: 500px) { - font-size:16px; - } - - img { - width: 14px; - height: 14px; - - /* this is shit but it's the best way i can think of to do this */ - /* other than flexbox but i don't feel like doing that rn */ - - position:relative; - top:2px; - } - } - - h2 { - font-size:18px; - text-overflow:ellipsis; - overflow:hidden; - font-weight:600; - - @media screen and (max-width: 500px) { - font-size:20px; - } - } - - p, h2 { - margin:0 0 0 0; - white-space: nowrap; - } - - button { - background-color:#00000000; - border:none; - outline:none; - cursor:pointer; - - &.hitbox { - position:absolute; - left:0px; - top:0px; - height:100%; - width:100%; - z-index:10; - } - - &.more { - min-height:100%; - width:auto; - aspect-ratio: 1 / 1; - z-index:11; - position:relative; - - img { - margin:auto; - } - } - } - - .flexCont { - display: flex; - - .fileInfo { - width:100%; - min-width:0; - } - } - - @media screen and (min-width:500px) { - &:hover { - background-color: #252525; - } - } - - } - } - } -} \ No newline at end of file diff --git a/src/style/app/pulldown/help.scss b/src/style/app/pulldown/help.scss deleted file mode 100644 index 9d59cca..0000000 --- a/src/style/app/pulldown/help.scss +++ /dev/null @@ -1,22 +0,0 @@ -.pulldown_display[data-name=help] { - - overflow-y:auto; - - .faqGroup { - padding:6px 10px 4px 10px; - - h2 { - font-weight: 400; - color:#DDDDDD; - font-size:16px; - margin:0 0 0 0; - } - - p { - color:#999999; - font-size:16px; - margin:0 0 0 0; - } - } - -} \ No newline at end of file diff --git a/src/style/app/pulldown/modals.scss b/src/style/app/pulldown/modals.scss deleted file mode 100644 index 17bf30d..0000000 --- a/src/style/app/pulldown/modals.scss +++ /dev/null @@ -1,115 +0,0 @@ -.optPicker { - - button, .inp { - position:relative; - width:100%; - height:50px; - background-color: #222222; - border:none; - border-bottom:1px solid #AAAAAA; - transition-duration:150ms; - - img { - position:absolute; - left:13px; - top:50%; - transform:translateY(-50%); - } - - p,input { - text-align:left; - position:absolute; - top:50%; - left:50px; - color:#DDDDDD; - transform:translateY(-50%); - font-size:14px; - background-color:#00000000; - border:none; - - span { - color:#777777; - font-size:12px; - } - } - - input { - height:100%; - width:calc(100% - 50px); - outline:none; /* bad idea but i don't even care anymore */ - margin:0px; - padding:0px; - } - - @media screen and (max-width:500px) { - height:70px; - p,input { - font-size:16px; - left:70px; - - span { - font-size:14px; - } - } - - input { - width:calc( 100% - 70px ); - } - - img { - width:30px; - height:30px; - left:20px; - } - } - - } - - button { - cursor:pointer; - - &:hover { - transition-duration:150ms; - background-color: #252525; - } - } - - .category { - border-bottom: 1px solid #AAAAAA; - - p { - color: #AAAAAA; - font-size: 14px; - margin: 10px 0px 3px 0px; - text-align:center; - - @media screen and (max-width:500px) { - font-size:16px; - } - } - } - -} - -.mdHitbox { - position:absolute; - width:100%; - height:100%; - top:0%; - left:0%; - cursor:pointer; - z-index: 0; - border:none; - background-color: #00000000; - outline:none; -} - -.modal { - position:absolute; - background-color:#222222; - width:100%; - transform:translateY(-100%); - top:100%; - left:0%; - z-index: 1; -} diff --git a/src/style/app/topbar.scss b/src/style/app/topbar.scss deleted file mode 100644 index 8016dc7..0000000 --- a/src/style/app/topbar.scss +++ /dev/null @@ -1,21 +0,0 @@ -@use "../base"; - -#topbar { - position:absolute; - left:0px; - top:0px; - - width:100%; - height:40px; - - /* hsl(210,9.1,12.9) */ - background-color: rgb(30, 33, 36); - - display:flex; - flex-direction: row; - justify-content: center; - align-items: center; - - column-gap:5px; - -} \ No newline at end of file diff --git a/src/style/app/uploader/add_new_files.scss b/src/style/app/uploader/add_new_files.scss deleted file mode 100644 index 5e9db3a..0000000 --- a/src/style/app/uploader/add_new_files.scss +++ /dev/null @@ -1,115 +0,0 @@ -#uploadWindow { - #add_new_files { - background-color:#191919; - border: 1px solid gray; - padding: 0px 0px 10px 0px; - - p { - font-family: "Fira Code", monospace; - text-align: left; - margin: 0px 0px 0px 10px; - font-size: 30px; - - span { - position:relative; - - &.add_files_txt { - font-size:16px; - top:-4px; - left:10px; - - @media screen and (max-width:500px) { - font-size:20px; - top:-6px; - left:10px; - } - } - } - - @media screen and (max-width:500px) { - font-size: 40px; - - span.add_files_txt { - font-size:20px; - top:-6px; - left:10px; - } - } - } - - #file_add_btns { - width:calc( 100% - 20px ); - margin:auto; - position:relative; - display:flex; - flex-direction:row; - column-gap:10px; - - button, input[type=text], input[type=submit] { - background-color:#333333; - color:#DDDDDD; - border:none; - border-radius: 0px; - outline:none; - padding:5px; - - flex-basis:50%; - flex-grow:1; - transition-duration:250ms; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - } - - button, input[type=submit] { - cursor:pointer; - - &:hover { - @media screen and (min-width: 500px) { - transition-duration:250ms; - flex-basis: 60%; - } - background-color:#393939; - color: #ffffff; - } - } - - .fileUpload { - width:100%; - height:100px; - position:relative; - - background-color:#262626; - transition-duration:250ms; - - input[type=file] { - opacity: 0; - position:absolute; - left:0px; - top:0px; - width:100%; - height:100%; - cursor:pointer; - } - - p { - position:absolute; - top:50%; - transform:translateY(-50%); - font-size:12px; - width:100%; - text-align:center; - padding:0px; - margin: 0px; - } - - &:hover { - transition-duration:250ms; - background-color:#292929; - } - } - } - } -} \ No newline at end of file diff --git a/src/style/app/uploader/file.scss b/src/style/app/uploader/file.scss deleted file mode 100644 index 9b0a813..0000000 --- a/src/style/app/uploader/file.scss +++ /dev/null @@ -1,59 +0,0 @@ -// should probably start using mixins for thingss like this - -#uploadWindow { - .file { - background-color:#191919; - border: 1px solid gray; - padding: 10px; - overflow:clip; - position:relative; - - h2 { - font-size: 16px; - margin: 0px; - font-weight:600; - width:calc( 100% - 20px ); - } - - input[type=text] { - background-color:#333333; - color:#DDDDDD; - border:none; - outline:none; - padding:5px; - position:relative; - - width:100%; - transition-duration:250ms; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - } - - .buttonContainer { - display:flex; - column-gap:10px; - - button { - flex-basis: 50%; - flex-grow: 1; - padding:5px; - } - } - - .uploadingContainer { - color: #AAAAAA; - } - - .hitbox { - opacity:0; - position:absolute; - left:0px; - top:0px; - height:100%; - width:100%; - } - } -} diff --git a/src/style/app/uploads.scss b/src/style/app/uploads.scss deleted file mode 100644 index ee53f35..0000000 --- a/src/style/app/uploads.scss +++ /dev/null @@ -1,86 +0,0 @@ -@use "uploader/add_new_files"; -@use "uploader/file"; - -#uploadWindow { - position:absolute; - left:50%; - top:50%; - transform:translate(-50%,-50%); - padding:10px 15px 10px 15px; - display:flex; - flex-direction: column; - - width:350px; - @media screen and (min-width:500px) { - max-height: calc( 100% - 80px ); - } - - background-color:#222222; - color:#ddd; - - h1, p, a { - margin: 0px; - font-size: 14px; - } - - h1 > button { - background-color: #0000 !important; - padding: 0; - margin-top: 5px; - - img { - color: #666666; - } - - &:hover { - img { color: #DDD; } - } - } - - a { - color:#999; - } - - h1 { - font-weight:600; - font-size: 25px; - } - - .uploadContainer { - overflow:auto; - } - - button, input[type=submit] { - cursor:pointer; - background-color:#393939; - color:#DDDDDD; - border:none; - outline:none; - padding:5px; - transition-duration: 250ms; - /*overflow:clip;*/ - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - - &:hover { - transition-duration: 250ms; - background-color:#434343; - color: #ffffff; - } - } - - @media screen and (max-width: 500px) { - width: calc( 100% - 20px ); - height: calc( 100% - 20px ); - border-radius:0px; - background-color:#00000000; - - transform:none; - left:10px; - top:10px; - padding:0px; - } -} \ No newline at end of file diff --git a/src/style/downloads.scss b/src/style/downloads.scss deleted file mode 100644 index 81ff36e..0000000 --- a/src/style/downloads.scss +++ /dev/null @@ -1,26 +0,0 @@ -// probably dont need to import the entire -// uploads css file -// so i might just make a separate file with mixins -// and import them - -@use "app/uploads"; -@use "base"; - -#appContent { - position:absolute; - left:0px; - top:0px; - width:100%; - height:100%; - background-image: linear-gradient(#333,base.$Background); - - @media screen and (max-width:500px) { - background-image: linear-gradient(#303030,base.$Background); - } -} - -#uploadWindow { - img, video, audio { - width:100%; - } -} \ No newline at end of file diff --git a/src/style/themes/classy.scss b/src/style/themes/classy.scss deleted file mode 100644 index 7bdd382..0000000 --- a/src/style/themes/classy.scss +++ /dev/null @@ -1,168 +0,0 @@ -#uploadWindow { - color: #FFFFFF -} - -body { - background-color:#DDDDDD; -} - -#appContent { - background: darkgray; - @media screen and (max-width:500px) { - background:white; - } -} - -#uploadWindow { - background: white; - - color:black; - - h1, p, a { - margin: 0px; - font-size: 14px; - } - - a { - color:rgb(153, 153, 153); - } - - h1 { - font-weight:600; - font-size: 25px; - text-align:center; - - @media screen and (max-width:500px) { - font-size: 30px; - } - } - - & > p:nth-of-type(1) { - text-align:center; - font-style: italic; - font-weight:600; - font-size: 16px; - color:black !important; - @media screen and (max-width:500px) { - font-size: 21px; - } - } - - button { - cursor:pointer; - color:black; - border:none; - outline:none; - padding:5px; - background: #AAAAAA; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - - &:hover { - outline: 1px solid #333333; - color: black; - background-color:#AAAAAA; - } - } - - & > button:nth-last-of-type(1) { - background-color:#66AAFF; - &:hover { - background-color:#66AAFF; - } - } - - #add_new_files { - background-color: #AAAAAA66; - border:1px solid #AAAAAA; - - #file_add_btns { - button, input[type=text] { - transition-duration:0s; - - @media screen and (max-width: 500px) { - font-size:16px; - padding:10px; - } - } - - input[type=text] { - font-family: "Fira Code", monospace; - background-color:#AAAAAA; - color:black; - } - - button { - cursor:pointer; - background-color:#AAAAAA; - color: black; - - &:hover { - flex-basis: 50%; - transition-duration:0s; - background-color:#AAAAAA; - color: black; - outline: 1px solid #333333; - } - } - - .fileUpload { - background-color:#AAAAAA; - transition-duration:250ms; - - &:hover { - transition-duration:0s; - background-color:#AAAAAA; - } - } - } - } - - .file { - background-color: #AAAAAA66; - border: 1px solid #AAAAAA; - - input[type=text] { - font-family: "Fira Code", monospace; - background-color:#AAAAAA; - color:black; - } - } - -} - -* { - /* nice scrollbars aren't needed on mobile so */ - @media screen and (min-width:500px) { - - &::-webkit-scrollbar { - width:5px; - } - - &::-webkit-scrollbar-track { - background-color:#AAAAAA; - } - - &::-webkit-scrollbar-thumb { - background-color:#DDDDDD; - - &:hover { - background-color:#FFFFFF; - } - } - - } -} - -#topbar { - background-color: #DDDDDD; -} - -.error { - .code { - color: black; - } -} \ No newline at end of file diff --git a/src/svelte/App.svelte b/src/svelte/App.svelte index c864eb4..54d2792 100644 --- a/src/svelte/App.svelte +++ b/src/svelte/App.svelte @@ -1,22 +1,4 @@ - -
- - - -
\ No newline at end of file +
diff --git a/src/svelte/elem/PulldownManager.svelte b/src/svelte/elem/PulldownManager.svelte deleted file mode 100644 index 7a12cc3..0000000 --- a/src/svelte/elem/PulldownManager.svelte +++ /dev/null @@ -1,49 +0,0 @@ - - - -{#if $pulldownOpen} -
- -
- - - {/if} - - - - - - - -
-
\ No newline at end of file diff --git a/src/svelte/elem/UploadWindow.svelte b/src/svelte/elem/UploadWindow.svelte deleted file mode 100644 index 91d073b..0000000 --- a/src/svelte/elem/UploadWindow.svelte +++ /dev/null @@ -1,378 +0,0 @@ - - -
-

- monofile - {#if notificationPermission === "default"} - - {/if} -

-

- {$serverStats?.version ? `v${$serverStats?.version}` : "•••"}  —  Discord based file sharing -

- -
- - - -
- {#each Object.entries(uploads) as upload (upload[0])} - -
-
-

- {typeof upload[1].file == "string" ? upload[1].file : upload[1].file.name} - {@html typeof upload[1].file == "string" ? "clone" : `upload (${bytes(upload[1].file.size)})`} -

- - {#if upload[1].maximized && !uploadInProgress} -
-
- -
-
- - -
-
- {:else if !uploadInProgress} - - -
- {:else} -
- - -
- {/if} - {/if} -
- {/if} -
-
-
- {/each} -
- - {#if uploadInProgress == false} - - {#if $serverStats?.accounts?.requiredForUpload ? !!$account?.username : true} - -
- {#if Object.keys(uploads).length > 0} - -
- {/if} - {:else} -

- Please log in to upload files. -

-
- {/if} - {/if} - -

- Hosting {$serverStats?.files ?? "•••"} - files — Maximum filesize is - - { - $serverStats?.maxDiscordFiles - ? bytes($serverStats.maxDiscordFileSize * $serverStats.maxDiscordFiles) - : "•••" - } -
-

-

- Made with {Math.floor(Math.random() * 10) == 0 ? "🐟" : "❤"} by - - - - - - - Etcetera - — - source -

-
-
diff --git a/src/svelte/elem/prompts/OptionPicker.svelte b/src/svelte/elem/prompts/OptionPicker.svelte deleted file mode 100644 index bf45376..0000000 --- a/src/svelte/elem/prompts/OptionPicker.svelte +++ /dev/null @@ -1,80 +0,0 @@ - - -{#if activeModal} -
- - -
-{/if} \ No newline at end of file diff --git a/src/svelte/elem/prompts/account.ts b/src/svelte/elem/prompts/account.ts deleted file mode 100644 index dadccae..0000000 --- a/src/svelte/elem/prompts/account.ts +++ /dev/null @@ -1,331 +0,0 @@ -import { fetchAccountData, account, refreshNeeded } from "../stores" -import { get } from "svelte/store"; -import type OptionPicker from "./OptionPicker.svelte"; - -export function deleteAccount(optPicker: OptionPicker) { - optPicker.picker("What should we do with your files?",[ - { - name: "Delete my files", - icon: "/static/assets/icons/admin/delete_file.svg", - description: "Your files will be permanently deleted", - id: true - }, - { - name: "Do nothing", - icon: "/static/assets/icons/file.svg", - description: "Your files will not be affected", - id: false - } - ]).then((exp) => { - if (exp) { - let deleteFiles = exp.selected - - optPicker.picker(`Enter your username to continue.`,[ - { - name: "Enter your username", - icon: "/static/assets/icons/person.svg", - inputSettings: {}, - id:"username" - }, - { - name: `Delete account ${deleteFiles ? "& files" : ""}`, - icon: "/static/assets/icons/delete_account.svg", - description: `This cannot be undone.`, - id: true - } - ]).then((fin) => { - if (fin && fin.selected) { - if (fin.username != (get(account)||{}).username) { - optPicker.picker("Incorrect username. Please try again.",[]) - return - } - - fetch(`/auth/delete_account`,{method:"POST", body:JSON.stringify({ - deleteFiles - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - - } - }) - } - }) -} - -export function userChange(optPicker: OptionPicker) { - optPicker.picker("Change username",[ - { - name: "New username", - icon: "/static/assets/icons/person.svg", - id: "username", - inputSettings: {} - }, - { - name: "Update username", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/auth/change_username`,{method:"POST", body:JSON.stringify({ - username:exp.username - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - } - }) -} - -export function forgotPassword(optPicker: OptionPicker) { - optPicker.picker("Forgot your password?",[ - { - name: "Username", - icon: "/static/assets/icons/person.svg", - id: "user", - inputSettings: {} - }, - { - name: "OK", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/auth/request_emergency_login`,{method:"POST", body:JSON.stringify({ - account:exp.user - })}).then((response) => { - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } else { - optPicker.picker(`Please follow the instructions sent to your inbox.`,[]) - } - }) - } - }) -} - -export function emailPotentialRemove(optPicker: OptionPicker) { - optPicker.picker("What would you like to do?",[ - { - name: "Set a new email", - icon: "/static/assets/icons/change_email.svg", - description: "", - id: "set" - }, - { - name: "Disconnect email", - icon: "/static/assets/icons/disconnect_email.svg", - description: "", - id: "disconnect" - } - ]).then((exp) => { - if (exp && exp.selected) { - switch (exp.selected) { - case "set": - emailChange(optPicker); - break - case "disconnect": - fetch("/auth/remove_email", {method: "POST"}).then((response) => { - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - } - } - }) -} - -export function emailChange(optPicker: OptionPicker) { - optPicker.picker("Change email",[ - { - name: "New email", - icon: "/static/assets/icons/mail.svg", - id: "email", - inputSettings: {} - }, - { - name: "Request email change", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/auth/request_email_change`,{method:"POST", body:JSON.stringify({ - email:exp.email - })}).then((response) => { - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } else { - optPicker.picker(`Please continue to your inbox at ${exp.email.split("@")[1]} and click on the attached link.`,[]) - } - }) - } - }) -} - -export function pwdChng(optPicker: OptionPicker) { - optPicker.picker("Change password",[ - { - name: "New password", - icon: "/static/assets/icons/change_password.svg", - id: "password", - inputSettings: { - password: true - } - }, - { - name: "Update password", - icon: "/static/assets/icons/update.svg", - description: "This will log you out of all sessions", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/auth/change_password`,{method:"POST", body:JSON.stringify({ - password:exp.password - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - } - }) -} - -export function customcss(optPicker: OptionPicker) { - optPicker.picker("Set custom CSS",[ - { - name: "Enter a file ID", - icon: "/static/assets/icons/file.svg", - id: "fileid", - inputSettings: {} - }, - { - name: "OK", - icon: "/static/assets/icons/update.svg", - description: "Refresh to apply changes", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/api/v1/account/customization/css`, { - method: "PUT", - body: JSON.stringify({ - fileId: exp.fileid, - }), - }).then((response) => { - if (response.status != 200) { - optPicker.picker( - `${response.status} ${ - response.headers.get("x-backup-status-message") || - response.statusText || - "" - }`, - [] - ) - } - - fetchAccountData() - refreshNeeded.set(true) - }) - } - }) -} - - -export function embedColor(optPicker: OptionPicker) { - optPicker.picker("Set embed color",[ - { - name: "FFFFFF", - icon: "/static/assets/icons/pound.svg", - id: "color", - inputSettings: {} - }, - { - name: "OK", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/api/v1/account/customization/embed/color`, { - method: "POST", - body: JSON.stringify({ - color: exp.color, - }), - }).then((response) => { - if (response.status != 200) { - optPicker.picker( - `${response.status} ${ - response.headers.get("x-backup-status-message") || - response.statusText || - "" - }`, - [] - ) - } - - fetchAccountData() - }) - } - }) -} - - -export function embedSize(optPicker: OptionPicker) { - optPicker.picker("Set embed image size",[ - { - name: "Large", - icon: "/static/assets/icons/image.svg", - description: "", - id: true - }, - { - name: "Small", - icon: "/static/assets/icons/small_image.svg", - description: "", - id: false - } - ]).then((exp) => { - if (exp && exp.selected !== null) { - fetch(`/api/v1/account/customization/embed/size`, { - method: "POST", - body: JSON.stringify({ - largeImage: exp.selected, - }), - }).then((response) => { - if (response.status != 200) { - optPicker.picker( - `${response.status} ${ - response.headers.get("x-backup-status-message") || - response.statusText || - "" - }`, - [] - ) - } - - fetchAccountData() - }) - } - }) -} diff --git a/src/svelte/elem/prompts/admin.ts b/src/svelte/elem/prompts/admin.ts deleted file mode 100644 index 3b71701..0000000 --- a/src/svelte/elem/prompts/admin.ts +++ /dev/null @@ -1,231 +0,0 @@ -import { fetchAccountData, fetchFilePointers, account } from "../stores" -import { get } from "svelte/store"; -import type OptionPicker from "./OptionPicker.svelte"; - -export function pwdReset(optPicker: OptionPicker) { - optPicker.picker("Reset password",[ - { - name: "Target user", - icon: "/static/assets/icons/person.svg", - id: "target", - inputSettings: {} - }, - { - name: "New password", - icon: "/static/assets/icons/change_password.svg", - id: "password", - inputSettings: { - password: true - } - }, - { - name: "Update password", - icon: "/static/assets/icons/update.svg", - description: "This will log the target user out of all sessions", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/admin/reset`,{method:"POST", body:JSON.stringify({ - target: exp.target, - password:exp.password - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - }) - } - }) -} - -export function chgOwner(optPicker: OptionPicker) { - optPicker.picker("Transfer file ownership",[ - { - name: "File ID", - icon: "/static/assets/icons/file.svg", - id: "file", - inputSettings: {} - }, - { - name: "New owner", - icon: "/static/assets/icons/person.svg", - id: "owner", - inputSettings: {} - }, - { - name: "Transfer file ownership", - icon: "/static/assets/icons/update.svg", - description: "This will transfer the file to this user", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/admin/transfer`,{method:"POST", body:JSON.stringify({ - owner: exp.owner, - target: exp.file - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - }) - } - }) -} - -export function chgId(optPicker: OptionPicker) { - optPicker.picker("Change file ID",[ - { - name: "Target file", - icon: "/static/assets/icons/file.svg", - id: "file", - inputSettings: {} - }, - { - name: "New ID", - icon: "/static/assets/icons/admin/change_file_id.svg", - id: "new", - inputSettings: {} - }, - { - name: "Update", - icon: "/static/assets/icons/update.svg", - description: "File will not be available at its old ID", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/admin/idchange`,{method:"POST", body:JSON.stringify({ - target: exp.file, - new: exp.new - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - }) - } - }) -} - -export function delFile(optPicker: OptionPicker) { - optPicker.picker("Delete file",[ - { - name: "File ID", - icon: "/static/assets/icons/file.svg", - id: "file", - inputSettings: {} - }, - { - name: "Delete", - icon: "/static/assets/icons/admin/delete_file.svg", - description: "This can't be undone", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/admin/delete`,{method:"POST", body:JSON.stringify({ - target: exp.file - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - }) - } - }) -} - -export function elevateUser(optPicker: OptionPicker) { - optPicker.picker("Elevate user",[ - { - name: "Username", - icon: "/static/assets/icons/person.svg", - id: "user", - inputSettings: {} - }, - { - name: "Elevate to admin", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/admin/elevate`,{method:"POST", body:JSON.stringify({ - target: exp.user - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - }) - } - }) -} - -// im really lazy so i just stole this from account.js - -export function deleteAccount(optPicker: OptionPicker) { - optPicker.picker("What should we do with the target account's files?",[ - { - name: "Delete files", - icon: "/static/assets/icons/admin/delete_file.svg", - description: "Files will be permanently deleted", - id: true - }, - { - name: "Do nothing", - icon: "/static/assets/icons/file.svg", - description: "Files will not be affected", - id: false - } - ]).then((exp) => { - if (exp) { - let deleteFiles = exp.selected - - optPicker.picker(`Enter the target account's username to continue.`,[ - { - name: "Enter account username", - icon: "/static/assets/icons/person.svg", - inputSettings: {}, - id:"username" - }, - { - name: "Optional reason", - icon: "/static/assets/icons/more.svg", - inputSettings: {}, - id:"reason" - }, - { - name: `Delete account ${deleteFiles ? "& its files" : ""}`, - icon: "/static/assets/icons/delete_account.svg", - description: `This cannot be undone.`, - id: true - } - ]).then((fin) => { - if (fin && fin.selected) { - fetch(`/admin/delete_account`,{method:"POST", body:JSON.stringify({ - target: fin.username, - reason: fin.reason, - deleteFiles - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - - } - }) - } - }) -} \ No newline at end of file diff --git a/src/svelte/elem/prompts/uploads.ts b/src/svelte/elem/prompts/uploads.ts deleted file mode 100644 index 6fca833..0000000 --- a/src/svelte/elem/prompts/uploads.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { fetchAccountData, fetchFilePointers, account } from "../stores" -import { get } from "svelte/store"; -import type OptionPicker from "./OptionPicker.svelte" -import type { FilePointer } from "../../../server/lib/files"; - -export let options = { - FV: [ - { - name: "Public", - icon: "/static/assets/icons/public.svg", - description: "Everyone can view your uploads", - id: "public" - }, - { - name: "Anonymous", - icon: "/static/assets/icons/anonymous.svg", - description: "Your username will be hidden", - id: "anonymous" - }, - { - name: "Private", - icon: "/static/assets/icons/private.svg", - description: "Nobody but you can view your uploads", - id: "private" - } - ], - FV2: [ - { - name: "Public", - icon: "/static/assets/icons/public.svg", - description: "Everyone can view this file", - id: "public" - }, - { - name: "Anonymous", - icon: "/static/assets/icons/anonymous.svg", - description: "Your username will be hidden", - id: "anonymous" - }, - { - name: "Private", - icon: "/static/assets/icons/private.svg", - description: "Nobody but you can view this file", - id: "private" - } - ], - AYS: [ - { - name: "Yes", - icon: "/static/assets/icons/update.svg", - id: true - } - ] -} - -export function dfv(optPicker: OptionPicker) { - optPicker.picker("Default file visibility",options.FV).then((exp) => { - if (exp && exp.selected) { - fetch(`/auth/dfv`,{method:"POST", body:JSON.stringify({ - defaultFileVisibility: exp.selected - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - } - }) -} - -export function update_all_files(optPicker: OptionPicker) { - optPicker.picker("You sure?",[ - { - name: "Yeah", - icon: "/static/assets/icons/update.svg", - description: `This will make all of your files ${get(account)?.defaultFileVisibility || "public"}`, - id: true - } - ]).then((exp) => { - if (exp && exp.selected) { - fetch(`/files/manage`,{method:"POST", body:JSON.stringify({ - target:get(account)?.files, - action: "changeFileVisibility", - - value: get(account)?.defaultFileVisibility - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchAccountData() - }) - } - }) -} - -export function fileOptions(optPicker: OptionPicker, file: FilePointer & {id:string}) { - optPicker.picker(file.filename,[ - { - name: file.tag ? "Remove tag" : "Tag file", - icon: `/static/assets/icons/${file.tag ? "tag_remove" : "tag"}.svg`, - description: file.tag || `File has no tag`, - id: "tag" - }, - { - name: "Change file visibility", - icon: `/static/assets/icons/${file.visibility||"public"}.svg`, - description: `File is currently ${file.visibility||"public"}`, - id: "changeFileVisibility" - }, - { - name: "Delete file", - icon: `/static/assets/icons/admin/delete_file.svg`, - description: ``, - id: "delete" - } - ]).then((exp) => { - - if (exp && exp.selected) { - - switch( exp.selected ) { - - case "delete": - - fetch(`/files/manage`,{method:"POST", body:JSON.stringify({ - target: [ file.id ], - action: "delete", - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchFilePointers(); - }) - - break; - - case "changeFileVisibility": - - optPicker.picker("Set file visibility", options.FV2).then((exp) => { - - if (exp && exp.selected) { - - fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ - target: [ file.id ], - action: "changeFileVisibility", - - value: exp.selected - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchFilePointers(); - }) - - } - - }) - - break; - - case "tag": - - if (file.tag) { - fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ - target: [ file.id ], - action: "setTag" - })}).then(fetchFilePointers) - return - } - - optPicker.picker("Enter a tag (max 30char)",[ - { - name: "Tag name", - icon: "/static/assets/icons/tag.svg", - id: "tag", - inputSettings: {} - }, - { - name: "OK", - icon: "/static/assets/icons/update.svg", - description: "", - id: true - } - ]).then((exp) => { - - if (exp && exp.selected) { - - fetch(`/files/manage`, {method: "POST", body: JSON.stringify({ - target: [ file.id ], - action: "setTag", - - value: exp.tag || null - })}).then((response) => { - - if (response.status != 200) { - optPicker.picker(`${response.status} ${response.headers.get("x-backup-status-message") || response.statusText || ""}`,[]) - } - - fetchFilePointers(); - }) - - } - - }) - - break - - } - - } - - }) -} \ No newline at end of file diff --git a/src/svelte/elem/pulldowns/Accounts.svelte b/src/svelte/elem/pulldowns/Accounts.svelte deleted file mode 100644 index 5fd9121..0000000 --- a/src/svelte/elem/pulldowns/Accounts.svelte +++ /dev/null @@ -1,243 +0,0 @@ - - - - - {#if $account} -
-

- Hey there, @{$account.username} -

- -
- -
-

Account

-
- - - - - - - - {#if !$account.admin} - - {/if} - -
-

Uploads

-
- - - - - -
-

Customization

-
- - - - - - - - {#if $refreshNeeded} - - {/if} - -
-

Sessions

-
- - - - - - {#if $account.admin} - -
-

Admin

-
- - - - - - - - - - - - - - {/if} -


{$account.id}

-
-
- {:else} -
-
-

monofile accounts

-

Gain control of your uploads.

- - {#if targetAction} - -
- {#if !$serverStats?.accounts.registrationEnabled && targetAction == "create"} -
-
-

Account registration has been disabled by this instance's owner

-
-
- {/if} - - {#if authError} -
-
-

{authError.status} {authError.message}

-
-
- {/if} - - - - - - {#if targetAction == "login"} - - {/if} - -
- - {:else} - -
- - -
- - {/if} -
-
- {/if} -
\ No newline at end of file diff --git a/src/svelte/elem/pulldowns/Files.svelte b/src/svelte/elem/pulldowns/Files.svelte deleted file mode 100644 index e607820..0000000 --- a/src/svelte/elem/pulldowns/Files.svelte +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - {#if $account?.username}
- - -
- - {#each $files.filter(f => f&&(f.filename.toLowerCase().includes(query.toLowerCase()) || f.id.toLowerCase().includes(query.toLowerCase()) || f.tag?.includes(query.toLowerCase()))) as file (file.id)} -
- -
-
-

{file.filename}

-

- {file.visibility||"public"}  - {file.id}  —  {file.mime.split(";")[0]} - {#if file.reserved} -
- uploading  - Uploading... - {/if} - {#if file.tag} -
- tag  - {file.tag} - {/if} -

-
- -
-
- {/each} -
-
- {:else} -
-
-

Log in to view uploads

- -
-
- {/if} - - \ No newline at end of file diff --git a/src/svelte/elem/pulldowns/Help.svelte b/src/svelte/elem/pulldowns/Help.svelte deleted file mode 100644 index 104af4a..0000000 --- a/src/svelte/elem/pulldowns/Help.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - {#each faq as question} -
-

{question.question}

-

{question.answer}

-
- {/each} -
\ No newline at end of file diff --git a/src/svelte/elem/pulldowns/Pulldown.svelte b/src/svelte/elem/pulldowns/Pulldown.svelte deleted file mode 100644 index 600e461..0000000 --- a/src/svelte/elem/pulldowns/Pulldown.svelte +++ /dev/null @@ -1,14 +0,0 @@ - -
- -
\ No newline at end of file diff --git a/src/svelte/elem/stores.ts b/src/svelte/elem/stores.ts deleted file mode 100644 index 8fd4785..0000000 --- a/src/svelte/elem/stores.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { writable } from "svelte/store" -//import type Pulldown from "./pulldowns/Pulldown.svelte" -import type { SvelteComponent } from "svelte" -import type { Account } from "../../server/lib/accounts" -import type { ClientConfiguration } from "../../server/lib/config" -import type { FilePointer } from "../../server/lib/files" - -export let refreshNeeded = writable(false) -export let pulldownManager = writable() -export let account = writable< - (Account & { sessionCount: number; sessionExpires: number }) | undefined ->() -export let serverStats = writable() -export let files = writable<(FilePointer & { id: string })[]>([]) - -export let fetchAccountData = function () { - fetch("/auth/me") - .then(async (response) => { - if (response.status == 200) { - account.set(await response.json()) - } else { - account.set(undefined) - } - }) - .catch((err) => { - console.error(err) - }) -} - -export let fetchFilePointers = function () { - fetch("/files/list", { cache: "no-cache" }) - .then(async (response) => { - if (response.status == 200) { - files.set(await response.json()) - } else { - files.set([]) - } - }) - .catch((err) => { - console.error(err) - }) -} - -export let refresh_stats = () => { - fetch("/server") - .then(async (data) => { - serverStats.set(await data.json()) - }) - .catch((err) => { - console.error(err) - }) -} - -fetchAccountData() diff --git a/src/svelte/elem/transition/_void.ts b/src/svelte/elem/transition/_void.ts deleted file mode 100644 index 4178d1e..0000000 --- a/src/svelte/elem/transition/_void.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { circIn, circOut } from "svelte/easing" - -export function _void( - node: HTMLElement, - options?: { duration?:number, easingFunc?: (a:number)=>number, prop?:string, rTarg?: "height"|"width"} -) { - const { duration = 300, easingFunc = circIn, prop, rTarg } = options ?? {} - let rect = node.getBoundingClientRect() - - return { - duration, - css: (t: number) => { - let eased = easingFunc(t) - return ` - white-space: nowrap; - ${prop||"height"}: ${(eased)*(rect[rTarg || (prop && prop in rect) ? prop as keyof Omit : "height"])}px; - padding: 0px; - opacity:${eased}; - overflow: clip; - ` - } - } -} \ No newline at end of file diff --git a/src/svelte/elem/transition/padding_scaleY.ts b/src/svelte/elem/transition/padding_scaleY.ts deleted file mode 100644 index 8c88c24..0000000 --- a/src/svelte/elem/transition/padding_scaleY.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { circIn, circOut } from "svelte/easing" - -function padding_scaleY(node: HTMLElement, options?: { duration?: number, easingFunc?: (a: number) => number, padY?: number, padX?: number, op?: boolean }) { - const { duration = 300, easingFunc = circOut, padY, padX, op } = options ?? {} - let rect = node.getBoundingClientRect() - - return { - duration, - css: (t:number) => { - let eased = easingFunc(t) - - return ` - height: ${eased*(rect.height-(padY||0))}px; - ${padX&&padY ? `padding: ${(eased)*(padY)}px ${(padX)}px;` : ""} - ${op ? `opacity: ${eased};` : ""} - ` - } - } -} - -export {padding_scaleY} \ No newline at end of file diff --git a/src/svelte/elem/uploader/AttachmentZone.svelte b/src/svelte/elem/uploader/AttachmentZone.svelte deleted file mode 100644 index 0a22b59..0000000 --- a/src/svelte/elem/uploader/AttachmentZone.svelte +++ /dev/null @@ -1,72 +0,0 @@ - - - - -
-

- +add files -

- {#if uploadType == UploadTypes.None} -
- - -
- {:else} - {#if uploadType == UploadTypes.Files} -
-
-

click/tap to browse
or drag files into this box

- -
-
- {:else if uploadType == UploadTypes.Clone} -
- - -
- {/if} - {/if} -
\ No newline at end of file