From 3b9813a6805a866f69a576e48ee5bc32c01b2ec1 Mon Sep 17 00:00:00 2001 From: Spacelord Date: Mon, 15 May 2023 18:49:02 +0200 Subject: [PATCH] current state --- allowedStaticPaths.json | 3 +- package-lock.json | 351 +++++++++++++++++- package.json | 6 +- src/frontend/dashboard.eta.html | 2 +- src/frontend/errors/400.eta.html | 8 + src/frontend/manage/categoryManager.eta.html | 74 ++-- .../manage/imports/jsonImport.eta.html | 45 +++ src/frontend/manage/startpage.eta.html | 11 +- src/frontend/partials/controls.eta.html | 42 ++- src/frontend/partials/controlsFoot.eta.html | 4 +- src/frontend/partials/foot.eta.html | 1 - src/frontend/partials/head.eta.html | 1 + src/routes/api/v1/categories.ts | 109 ++++++ src/routes/api/v1/index.ts | 3 +- src/routes/frontend/manage/categoryManager.ts | 53 +-- .../frontend/manage/import/jsonImport.ts | 102 +++++ src/routes/frontend/manage/index.ts | 4 +- src/sass/dashboard-mod.scss | 5 + static/css/dashboard-mod.css | 6 + static/css/dashboard-mod.css.map | 1 + static/css/dashboard.css | 28 ++ static/js/editCategory.js | 128 ++++++- static/js/formHandler.js | 57 +++ 23 files changed, 937 insertions(+), 107 deletions(-) create mode 100644 src/frontend/errors/400.eta.html create mode 100644 src/frontend/manage/imports/jsonImport.eta.html create mode 100644 src/routes/api/v1/categories.ts create mode 100644 src/routes/frontend/manage/import/jsonImport.ts create mode 100644 src/sass/dashboard-mod.scss create mode 100644 static/css/dashboard-mod.css create mode 100644 static/css/dashboard-mod.css.map create mode 100644 static/js/formHandler.js diff --git a/allowedStaticPaths.json b/allowedStaticPaths.json index 006c273..f538aee 100644 --- a/allowedStaticPaths.json +++ b/allowedStaticPaths.json @@ -10,7 +10,8 @@ "/@popperjs/core/dist/umd/popper.min.js", "/@popperjs/core/dist/umd/popper.min.js.map", "/bootstrap/dist/js/bootstrap.bundle.min.js.map", - "/bootstrap-icons/font/fonts/bootstrap-icons.woff" + "/bootstrap-icons/font/fonts/bootstrap-icons.woff", + "/tsparticles-confetti/tsparticles.confetti.bundle.min.js" ], "debugMode": false } diff --git a/package-lock.json b/package-lock.json index b87ea47..c348345 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "jquery": "^3.6.4", "lodash": "^4.17.21", "prisma": "^4.13.0", - "signale": "^1.4.0" + "signale": "^1.4.0", + "tsparticles-confetti": "^2.9.3" }, "devDependencies": { "@types/express": "^4.17.17", @@ -32,6 +33,7 @@ "eslint-config-prettier": "^8.8.0", "prisma-dbml-generator": "^0.10.0", "prisma-docs-generator": "^0.7.0", + "sass": "^1.62.1", "typescript": "^5.0.4" } }, @@ -958,6 +960,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/archiver": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", @@ -1097,6 +1112,15 @@ } ] }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -1342,6 +1366,33 @@ } } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -2304,6 +2355,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2686,6 +2751,12 @@ "node": ">=10" } }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2760,6 +2831,18 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", @@ -4633,6 +4716,18 @@ "node": ">=10" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -4787,6 +4882,23 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sass": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", + "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -4992,6 +5104,15 @@ "node": ">=8" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -5322,6 +5443,234 @@ "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", "dev": true }, + "node_modules/tsparticles-confetti": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-confetti/-/tsparticles-confetti-2.9.3.tgz", + "integrity": "sha512-+w35tEgfCHHuu9kDVM5tcXV9nXS0KNzJXldfDaVeMUh/SQs3Hv7d2ZaeC6CnxEVDfioTPv2EFAV0V/dwHgL+Kg==", + "dependencies": { + "tsparticles-engine": "^2.9.3", + "tsparticles-move-base": "^2.9.3", + "tsparticles-plugin-emitters": "^2.9.3", + "tsparticles-plugin-motion": "^2.9.3", + "tsparticles-shape-cards": "^2.9.3", + "tsparticles-shape-circle": "^2.9.3", + "tsparticles-shape-heart": "^2.9.3", + "tsparticles-shape-image": "^2.9.3", + "tsparticles-shape-polygon": "^2.9.3", + "tsparticles-shape-square": "^2.9.3", + "tsparticles-shape-star": "^2.9.3", + "tsparticles-shape-text": "^2.9.3", + "tsparticles-updater-angle": "^2.9.3", + "tsparticles-updater-color": "^2.9.3", + "tsparticles-updater-life": "^2.9.3", + "tsparticles-updater-opacity": "^2.9.3", + "tsparticles-updater-out-modes": "^2.9.3", + "tsparticles-updater-roll": "^2.9.3", + "tsparticles-updater-size": "^2.9.3", + "tsparticles-updater-tilt": "^2.9.3", + "tsparticles-updater-wobble": "^2.9.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + } + }, + "node_modules/tsparticles-engine": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-engine/-/tsparticles-engine-2.9.3.tgz", + "integrity": "sha512-iAD8LyRH//kx10fDMm6AfQV6dRHs1ZacUUHqVwfutcqM4x1IV2ygpjk0X87LKCnBxYeIMG78+tlxXpnpwUccOg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "hasInstallScript": true + }, + "node_modules/tsparticles-move-base": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-move-base/-/tsparticles-move-base-2.9.3.tgz", + "integrity": "sha512-6/uO7N9HbVJokG8sjPF8YjJzkcnwELoZEkaiABX0mGxdICYCyjpjOdOfwF7UCf8Ctqh2/kxQjv4fk0Aj2Z3nag==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-plugin-emitters": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-plugin-emitters/-/tsparticles-plugin-emitters-2.9.3.tgz", + "integrity": "sha512-G0rs7lL9xjbFGkWr+XDsDpyghTjiHq7oPAZyUe0c/3p0JETwQgZ63/egluYU1p3uWJj34KjgjHD3GZqjyfI95Q==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-plugin-motion": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-plugin-motion/-/tsparticles-plugin-motion-2.9.3.tgz", + "integrity": "sha512-VUDhNO5PTCkub392FPFDEri1hTpUFJDFMUuLF537gUlpft57lgEtTetoNCyR/6q9gLl2M/jcMZgiQkFqLa1Qgg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-cards": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-cards/-/tsparticles-shape-cards-2.9.3.tgz", + "integrity": "sha512-1agei5hqZ6xsn8UAEnCvlGZcoTTgy9Dle2sDpFBR17KxRmtJkD/XgtQrDv9xWiB6JIG5FiLpGXDGR65KgeEKyA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-circle": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-circle/-/tsparticles-shape-circle-2.9.3.tgz", + "integrity": "sha512-d+PjFELhoCzPf2G+XKIew3Ho/Ql2fHzY0TrrIKVHzHufqWdQCWrhxNri2v0POLJFkcIYqvFThxM23I/cyKPgQw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-heart": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-heart/-/tsparticles-shape-heart-2.9.3.tgz", + "integrity": "sha512-AsRbzKYIB5rLyXU3vBS4uDthCSCwb9KMdRI2OV3sawPxtWAprYnjtTDDAhnz8ETxbw0E0lNMoDf6qYioTlRwJQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-image/-/tsparticles-shape-image-2.9.3.tgz", + "integrity": "sha512-yV3FAcqJ91EYG59OJ1SmShbogVs/uyk12u6LFTJnD2pmfdNwTeGpKMr3Cus5xJHQwJnFWufwkpOlBUxw55J/5g==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-polygon": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-polygon/-/tsparticles-shape-polygon-2.9.3.tgz", + "integrity": "sha512-qw580qr2VQveN1Q3kllhieW4GzB3t8fjlIRKZ0QG05npCG+ewBdXbD5G/9yfjGa1fTwCbHCfLoAFojjV15MBmg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-square": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-square/-/tsparticles-shape-square-2.9.3.tgz", + "integrity": "sha512-VjRNALTt34arsN2UAxaWa43gvdaQQbk7OluLB912u1UzLFbdCccE/sr7pjyLqYaf6F+ndnjnzVygNb/kRxX1uQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-star": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-star/-/tsparticles-shape-star-2.9.3.tgz", + "integrity": "sha512-/nJdrHEq05dcVwLK+8i+QD3do+RNWrSvU1efVsOMzgLajH5s2mlSfyFcUSCQrmnmP7d6MpYZpbxa2KnpDSfW8g==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-shape-text": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-shape-text/-/tsparticles-shape-text-2.9.3.tgz", + "integrity": "sha512-V9U8VE2am1JWabiHAhTzAg0uG8j92BnfwmgRfWjg/w4eMFF2uyyBHQDHIFzhZFDbDbqIxttXngkfivAqRdUzhw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-angle": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-angle/-/tsparticles-updater-angle-2.9.3.tgz", + "integrity": "sha512-Z8VLOw2UUxrvV3YH44My5kmeBUcJUHTSCMRUIqFvgvxDs0Q/g2eVWkr1L+Crpw6PE5FJMdDGWRjWwxMwNdVfuQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-color": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-color/-/tsparticles-updater-color-2.9.3.tgz", + "integrity": "sha512-eBJ7ZNsG3uCQlpfEf2FocsHLlMnd/vgWPZtOr2Iu7KA2OR3zy7u62D/oiRZkZEWtjhh5GlPrsy7njo6oToRBNQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-life": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-life/-/tsparticles-updater-life-2.9.3.tgz", + "integrity": "sha512-VUeWBCLKoLd69+C9CFHjVG0SaqCbMgQqag6NIGMqTmaaZNFcn1H8rheIG9NU70UOTsYRMPfwmZK1SKnqAK6jQQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-opacity": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-opacity/-/tsparticles-updater-opacity-2.9.3.tgz", + "integrity": "sha512-ON5t2qeegnm+MsmaF6ZvhUmKLzk/zXozsw9Dsgw8iJYX8WmQmp2VC72COTzADW495ovwGjBiR1KFelM/GVfHgg==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-out-modes": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-out-modes/-/tsparticles-updater-out-modes-2.9.3.tgz", + "integrity": "sha512-LEcAIeK8b3ovLGuuTob1L3o57XodqRuvDjtUT2TiNIC6cf3QMAnqujwAyvBLJrYAuwr7rG1fXEEt9tovFYg+tw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-roll": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-roll/-/tsparticles-updater-roll-2.9.3.tgz", + "integrity": "sha512-I/9vB1wA3RKwfeRPlw7nrxUW8uxcajwba+gxFEcIDx2C+OA2UVIuGzOQE59O2sppqLqwrcLOm3ayTt5se1qbpw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-size": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-size/-/tsparticles-updater-size-2.9.3.tgz", + "integrity": "sha512-6qQ8T+7wt/B4BD5K1LWEXrfan+h2utSY1zNhE1cTcAQUDrrU06g/tfMkbrpMdduu6RWwGtoC4OsciCnBuiLEYQ==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-tilt": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-tilt/-/tsparticles-updater-tilt-2.9.3.tgz", + "integrity": "sha512-x1EDyvBfqgBh1021lohf2shn+V6U9WhMasGD+fKugwRxNZ0nAe5DK0wop/26L2MUIb+AbIg2sXPdxuv1zE7G7w==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, + "node_modules/tsparticles-updater-wobble": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/tsparticles-updater-wobble/-/tsparticles-updater-wobble-2.9.3.tgz", + "integrity": "sha512-/Doid0P/OjaO9cUzD/Z3j0GNA+8X3DUvVsOo/5mPt914PJBbcWYGpweE8u75ZPcHe9OM5u6CHFMf3PMurCEBCw==", + "dependencies": { + "tsparticles-engine": "^2.9.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index eefcc18..36422db 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "dist/index.js", "scripts": { - "build": "tsc", + "build": "tsc && sass src/sass/dashboard-mod.scss static/css/dashboard-mod.css", "prestart": "npm run build", "start": "node .", "test": "echo \"Error: no test specified\" && exit 1" @@ -29,7 +29,8 @@ "jquery": "^3.6.4", "lodash": "^4.17.21", "prisma": "^4.13.0", - "signale": "^1.4.0" + "signale": "^1.4.0", + "tsparticles-confetti": "^2.9.3" }, "devDependencies": { "@types/express": "^4.17.17", @@ -40,6 +41,7 @@ "eslint-config-prettier": "^8.8.0", "prisma-dbml-generator": "^0.10.0", "prisma-docs-generator": "^0.7.0", + "sass": "^1.62.1", "typescript": "^5.0.4" } } diff --git a/src/frontend/dashboard.eta.html b/src/frontend/dashboard.eta.html index 3b652cc..897ef48 100644 --- a/src/frontend/dashboard.eta.html +++ b/src/frontend/dashboard.eta.html @@ -23,7 +23,7 @@ - +

Recent items

diff --git a/src/frontend/errors/400.eta.html b/src/frontend/errors/400.eta.html new file mode 100644 index 0000000..5466cd8 --- /dev/null +++ b/src/frontend/errors/400.eta.html @@ -0,0 +1,8 @@ +<%~ E.includeFile("../partials/head.eta.html", {"title": "Error 400"}) %> <%~ E.includeFile("../partials/controls.eta.html", {"active": "error_400"}) %> + +
+ +

Bad Request!

+
+ +<%~ E.includeFile("../partials/controlsFoot.eta.html") %> <%~ E.includeFile("../partials/foot.eta.html") %> diff --git a/src/frontend/manage/categoryManager.eta.html b/src/frontend/manage/categoryManager.eta.html index 0629273..8eb4739 100644 --- a/src/frontend/manage/categoryManager.eta.html +++ b/src/frontend/manage/categoryManager.eta.html @@ -1,5 +1,23 @@ <%~ E.includeFile("../partials/head.eta.html", {"title": "Settings - Category"}) %> <%~ E.includeFile("../partials/controls.eta.html", {"active": "SETT_CAT"}) %> + + + +

Categories

@@ -17,8 +35,8 @@

Create a new category

- + + +
+
+
+ Loading... +
+
+
+ @@ -47,8 +72,8 @@

Edit a category

- + + - - + @@ -86,10 +108,12 @@ <% it.items.forEach(function(user){ %> - - + - + <% }) %> diff --git a/src/frontend/manage/imports/jsonImport.eta.html b/src/frontend/manage/imports/jsonImport.eta.html new file mode 100644 index 0000000..2f36dfd --- /dev/null +++ b/src/frontend/manage/imports/jsonImport.eta.html @@ -0,0 +1,45 @@ +<%~ E.includeFile("../../partials/head.eta.html", {"title": "Importer - JSON" }) %> <%~ E.includeFile("../../partials/controls.eta.html", {"active": "SETT_IMPORT_JSON" }) %> + +

JSON Import

+Upload a JSON file to import into the database. The JSON file must have the following columns: + +The following columns are optional: + +It should be formated as a list of objects, like this: +
+[
+	{
+		"name": "Item 1",
+		"amount": 1,
+		"manufacturer": "Manufacturer 1",
+		"category": "Category 1",
+		"sku": "SKU 1",
+		"comment": "Comment 1"
+	},
+	{
+		"name": "Item 2",
+		"amount": 2,
+		"manufacturer": "Manufacturer 2",
+		"category": "Category 2",
+		"sku": "SKU 2",
+		"comment": "Comment 2"
+	}
+]
+
+ + +
+ + + + +<%~ E.includeFile("../../partials/controlsFoot.eta.html") %> <%~ E.includeFile("../../partials/foot.eta.html") %> diff --git a/src/frontend/manage/startpage.eta.html b/src/frontend/manage/startpage.eta.html index 092a7df..d6da456 100644 --- a/src/frontend/manage/startpage.eta.html +++ b/src/frontend/manage/startpage.eta.html @@ -1,7 +1,7 @@ <%~ E.includeFile("../partials/head.eta.html", {"title": "Settings"}) %> <%~ E.includeFile("../partials/controls.eta.html", {"active": "SETT"}) %>

Manage your AssetFlow instance

- +
- + +

Import data via CSV

+ +
+

+

Import data via JSON

+
+
diff --git a/src/frontend/partials/controls.eta.html b/src/frontend/partials/controls.eta.html index 742e064..ed57b33 100644 --- a/src/frontend/partials/controls.eta.html +++ b/src/frontend/partials/controls.eta.html @@ -1,5 +1,19 @@ +
+ +
- \ No newline at end of file + + \ No newline at end of file diff --git a/src/frontend/partials/foot.eta.html b/src/frontend/partials/foot.eta.html index 4e495a4..8ba1720 100644 --- a/src/frontend/partials/foot.eta.html +++ b/src/frontend/partials/foot.eta.html @@ -1,4 +1,3 @@ - +
# Name Description Action
<%= user.id %><%= user.name %><%= user.name %> <%= user.description %> + + +