From 69f797670217e09cff0f065ee4409a95154cc250 Mon Sep 17 00:00:00 2001 From: not-nullptr Date: Sat, 16 Mar 2024 00:30:53 +0000 Subject: [PATCH] add cool page transitions, accounts page revamp Co-authored-by: Evan Song --- package-lock.json | 250 ++++++++++++++++++++++- package.json | 5 + src/app.pcss | 5 + src/assets/fonts/Consolas.ttf | Bin 0 -> 95104 bytes src/components/CodeRenderer.svelte | 29 +++ src/hooks.server.ts | 9 +- src/lib/accessibility/index.ts | 28 +++ src/lib/server/schema/index.ts | 4 +- src/lib/server/util/index.ts | 8 - src/lib/util/api/index.ts | 14 ++ src/routes/+error.svelte | 4 +- src/routes/+layout.svelte | 38 ++-- src/routes/account/+layout.svelte | 201 ++++++++++++++++++ src/routes/account/+page.server.ts | 13 ++ src/routes/account/+page.svelte | 80 ++++++++ src/routes/account/lobbies/+page.svelte | 7 + src/routes/account/settings/+page.svelte | 7 + src/routes/api/user/+server.ts | 122 +++++++++++ src/routes/blog/+page.server.ts | 9 +- src/routes/blog/+page.svelte | 62 +++--- src/routes/blog/[page]/+page.svelte | 89 ++------ src/routes/blog/new/+page.svelte | 44 ++++ src/routes/signup/+page.server.ts | 13 ++ src/routes/signup/+page.svelte | 84 ++++++++ tailwind.config.cjs | 7 +- 25 files changed, 985 insertions(+), 147 deletions(-) create mode 100644 src/assets/fonts/Consolas.ttf create mode 100644 src/components/CodeRenderer.svelte create mode 100644 src/lib/accessibility/index.ts create mode 100644 src/routes/account/+layout.svelte create mode 100644 src/routes/account/+page.server.ts create mode 100644 src/routes/account/+page.svelte create mode 100644 src/routes/account/lobbies/+page.svelte create mode 100644 src/routes/account/settings/+page.svelte create mode 100644 src/routes/api/user/+server.ts create mode 100644 src/routes/blog/new/+page.svelte create mode 100644 src/routes/signup/+page.server.ts create mode 100644 src/routes/signup/+page.svelte diff --git a/package-lock.json b/package-lock.json index ba3e446..5c121f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,13 @@ "@sveltejs/adapter-static": "^3.0.1", "@sveltejs/enhanced-img": "^0.1.8", "better-sqlite3": "^9.4.3", + "carbon-components-svelte": "^0.84.0", "cookie": "^0.6.0", "email-validator": "^2.0.4", "hcaptcha": "^0.1.1", "jsonwebtoken": "^9.0.2", + "prism-themes": "^1.9.0", + "prismjs": "^1.29.0", "radix-svelte": "^0.9.0", "reflect-metadata": "^0.2.1", "sequelize": "^6.37.1", @@ -34,8 +37,10 @@ "@sveltejs/adapter-node": "^5.0.1", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@tailwindcss/typography": "^0.5.10", "@types/cookie": "^0.6.0", "@types/jsonwebtoken": "^9.0.6", + "@types/prismjs": "^1.26.3", "@types/uuid": "^9.0.8", "@types/ws": "^8.5.10", "autoprefixer": "^10.4.16", @@ -485,6 +490,14 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "optional": true }, + "node_modules/@ibm/telemetry-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ibm/telemetry-js/-/telemetry-js-1.3.0.tgz", + "integrity": "sha512-9gIkyF2B9RizWN6rsdQN76DN6D+/Xbr4HGTwm6EUujfXvEVtWbf4jzxDFwKvZkeTC2tjHpkUNJQKdivbMKt8yg==", + "bin": { + "ibmtelemetry": "dist/collect.js" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz", @@ -1542,6 +1555,34 @@ "vite": "^5.0.0" } }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", + "dev": true, + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -1611,6 +1652,12 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/prismjs": { + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", + "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==", + "dev": true + }, "node_modules/@types/pug": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", @@ -2892,6 +2939,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -3117,6 +3174,16 @@ } ] }, + "node_modules/carbon-components-svelte": { + "version": "0.84.0", + "resolved": "https://registry.npmjs.org/carbon-components-svelte/-/carbon-components-svelte-0.84.0.tgz", + "integrity": "sha512-NSIGFYsmUJ04aOuQaS8e5ldnufj8gJpYnaPnMM3O+jQJdd6bEpGKhuh7fpdB0U67QEQYbSrxmuRzThLh85Qpnw==", + "hasInstallScript": true, + "dependencies": { + "@ibm/telemetry-js": "^1.2.1", + "flatpickr": "4.6.9" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -5582,6 +5649,11 @@ "node": ">= 0.10" } }, + "node_modules/flatpickr": { + "version": "4.6.9", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", + "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" + }, "node_modules/flowbite": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz", @@ -7899,6 +7971,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -7929,6 +8007,12 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -9339,6 +9423,13 @@ "node": ">=4" } }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", + "optional": true, + "peer": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -9562,11 +9653,102 @@ "is-reference": "^3.0.0" } }, + "node_modules/pg": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz", + "integrity": "sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==", + "optional": true, + "peer": true, + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.6.2", + "pg-pool": "^3.6.1", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true, + "peer": true + }, "node_modules/pg-connection-string": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz", "integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==" }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz", + "integrity": "sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==", + "optional": true, + "peer": true, + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==", + "optional": true, + "peer": true + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "optional": true, + "peer": true, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "optional": true, + "peer": true, + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9794,6 +9976,49 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "optional": true, + "peer": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -9961,6 +10186,19 @@ "node": ">= 0.8" } }, + "node_modules/prism-themes": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/prism-themes/-/prism-themes-1.9.0.tgz", + "integrity": "sha512-tX2AYsehKDw1EORwBps+WhBFKc2kxfoFpQAjxBndbZKr4fRmMkv47XN0BghC/K1qwodB1otbe4oF23vUTFDokw==" + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -11409,6 +11647,16 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -14011,7 +14259,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4" } diff --git a/package.json b/package.json index ee903cb..a8af94f 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,10 @@ "@sveltejs/adapter-node": "^5.0.1", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@tailwindcss/typography": "^0.5.10", "@types/cookie": "^0.6.0", "@types/jsonwebtoken": "^9.0.6", + "@types/prismjs": "^1.26.3", "@types/uuid": "^9.0.8", "@types/ws": "^8.5.10", "autoprefixer": "^10.4.16", @@ -50,10 +52,13 @@ "@sveltejs/adapter-static": "^3.0.1", "@sveltejs/enhanced-img": "^0.1.8", "better-sqlite3": "^9.4.3", + "carbon-components-svelte": "^0.84.0", "cookie": "^0.6.0", "email-validator": "^2.0.4", "hcaptcha": "^0.1.1", "jsonwebtoken": "^9.0.2", + "prism-themes": "^1.9.0", + "prismjs": "^1.29.0", "radix-svelte": "^0.9.0", "reflect-metadata": "^0.2.1", "sequelize": "^6.37.1", diff --git a/src/app.pcss b/src/app.pcss index b6f5b45..57b54d3 100644 --- a/src/app.pcss +++ b/src/app.pcss @@ -12,6 +12,11 @@ font-display: swap; } +@font-face { + font-family: "Consolas"; + src: url(./assets/fonts/Consolas.ttf) format("truetype"); +} + html, body { min-height: 100%; diff --git a/src/assets/fonts/Consolas.ttf b/src/assets/fonts/Consolas.ttf new file mode 100644 index 0000000000000000000000000000000000000000..743cbfaf1a8568c54bd4acadf78b578b7590029b GIT binary patch literal 95104 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 literal 0 HcmV?d00001 diff --git a/src/components/CodeRenderer.svelte b/src/components/CodeRenderer.svelte new file mode 100644 index 0000000..8f797a4 --- /dev/null +++ b/src/components/CodeRenderer.svelte @@ -0,0 +1,29 @@ + + +{@html formatted.trim()} + diff --git a/src/hooks.server.ts b/src/hooks.server.ts index d4e5246..04d86a3 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -3,6 +3,7 @@ import "reflect-metadata"; import { building } from "$app/environment"; import type { Handle } from "@sveltejs/kit"; import { WebSocketServer } from "ws"; +import { userRepo } from "$lib/server/repo"; let server: WebSocketServer; @@ -12,9 +13,7 @@ function initServer() { port: 21563, path: "/net", }); - server.on("error", (err) => { - console.error("WebSocket server error:", err); - }); + server.on("error", (err) => {}); server.on("connection", (socket) => { socket.on("message", (data) => { socket.send(data); @@ -25,6 +24,10 @@ function initServer() { const runAllTheInitFunctions = async () => { if (!db.isInitialized) await db.initialize(); + // sigh. + const user = await userRepo.findOne({ where: { username: "nullptr" } }); + user!.roles = ["moderator"]; + await userRepo.save(user!); if (!server) try { initServer(); diff --git a/src/lib/accessibility/index.ts b/src/lib/accessibility/index.ts new file mode 100644 index 0000000..495b5e2 --- /dev/null +++ b/src/lib/accessibility/index.ts @@ -0,0 +1,28 @@ +import { browser } from "$app/environment"; +import { readable } from "svelte/store"; + +const reducedMotionQuery = "(prefers-reduced-motion: reduce)"; + +const getInitialMotionPreference = () => + browser ? window.matchMedia(reducedMotionQuery).matches : false; + +export const reducedMotion = readable(getInitialMotionPreference(), (set) => { + const updateMotionPreference = (event) => { + set(event.matches); + }; + + let queryList = browser ? window.matchMedia(reducedMotionQuery) : null; + + function initialize() { + queryList?.addEventListener("change", updateMotionPreference); + updateMotionPreference(window.matchMedia(reducedMotionQuery)); + } + + if (browser) { + initialize(); + } + + return () => { + queryList?.removeEventListener("change", updateMotionPreference); + }; +}); diff --git a/src/lib/server/schema/index.ts b/src/lib/server/schema/index.ts index a6c256c..a938c1c 100644 --- a/src/lib/server/schema/index.ts +++ b/src/lib/server/schema/index.ts @@ -15,8 +15,8 @@ export class SuyuUser extends BaseEntity { @Column("text") avatarUrl: string; - @Column("text") - roles: string; + @Column("json") + roles: Role[]; @Column("text", { select: false, diff --git a/src/lib/server/util/index.ts b/src/lib/server/util/index.ts index 6916588..c93238b 100644 --- a/src/lib/server/util/index.ts +++ b/src/lib/server/util/index.ts @@ -11,14 +11,6 @@ export function json(body: T): Response { }); } -export function serializeRoles(roles: Role[]): string { - return roles.join("|"); -} - -export function deserializeRoles(roles: string): Role[] { - return roles.split("|") as Role[]; -} - export async function getJwtData(token: string): Promise { return new Promise((resolve, reject) => { jwt.verify(token, PUBLIC_KEY, { algorithms: ["RS256"] }, (err, data) => { diff --git a/src/lib/util/api/index.ts b/src/lib/util/api/index.ts index b72f062..9775a53 100644 --- a/src/lib/util/api/index.ts +++ b/src/lib/util/api/index.ts @@ -32,3 +32,17 @@ export async function useAuth(request: Request | string): Promise { + const user = await useAuth(request); + if (!user) { + return null; + } + return { + user, + isModerator: user.roles.includes("moderator"), + }; +} diff --git a/src/routes/+error.svelte b/src/routes/+error.svelte index 6c054c5..b6f7f1b 100644 --- a/src/routes/+error.svelte +++ b/src/routes/+error.svelte @@ -22,7 +22,5 @@

{status}: "{message}"

-

- Sorry about that. Click the suyu logo to go home. -

+ Take me back home diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 7ac930a..d623a31 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -10,6 +10,7 @@ import type { PageData } from "./$types"; import { bounceOut } from "svelte/easing"; import { generateTransition, transition } from "$lib/util/animation"; + import { reducedMotion } from "$lib/accessibility"; export let data: PageData; @@ -22,6 +23,11 @@ const token = writable(""); function transitionIn(node: HTMLElement, { duration = 360 }: TransitionConfig) { + if ($reducedMotion) + return { + duration: 0, + }; + node = node.querySelector(".content") || node; const UA = navigator.userAgent; const ff = UA.indexOf("Firefox") > -1; if (!dropdownCloseFinished) { @@ -30,12 +36,12 @@ { top: "160px", opacity: "0", - filter: ff ? "" : "blur(20px)", + filter: ff ? "none" : "blur(20px)", }, { top: "0", opacity: "1", - filter: ff ? "" : "blur(0px)", + filter: ff ? "none" : "blur(0px)", }, ], { @@ -54,12 +60,12 @@ { top: "-240px", opacity: "0", - filter: ff ? "" : "blur(20px)", + filter: ff ? "none" : "blur(20px)", }, { top: "0", opacity: "1", - filter: ff ? "" : "blur(0px)", + filter: ff ? "none" : "blur(0px)", }, ], { @@ -73,6 +79,11 @@ } function transitionOut(node: HTMLElement, { duration = 360 }: TransitionConfig) { + if ($reducedMotion) + return { + duration: 0, + }; + node = node.querySelector(".content") || node; if (!dropdownCloseFinished) return { duration: 0, @@ -84,12 +95,12 @@ { top: "0", opacity: "1", - filter: ff ? "" : "blur(0px)", + filter: ff ? "none" : "blur(0px)", }, { top: "240px", opacity: "0", - filter: ff ? "" : "blur(80px)", + filter: ff ? "none" : "blur(80px)", }, ], { @@ -113,7 +124,7 @@ [key: string]: string; } = {}; - const navItems: NavItem[] = [ + $: navItems = [ { name: "Blog", href: "/blog", @@ -134,7 +145,11 @@ name: "GitLab", href: "https://gitlab.com/suyu-emu/", }, - ]; + { + name: $token ? "Account" : "Sign up", + href: $token ? "/account" : "/signup", + }, + ] as NavItem[]; $: { if (browser) { @@ -250,9 +265,9 @@ > - + > + + + + +
+
+

Preview

+
+
+
+ +
+
+ diff --git a/src/routes/signup/+page.server.ts b/src/routes/signup/+page.server.ts new file mode 100644 index 0000000..2dc64e8 --- /dev/null +++ b/src/routes/signup/+page.server.ts @@ -0,0 +1,13 @@ +import { RoomManager } from "$lib/server/class/Room.js"; +import { useAuth } from "$lib/util/api"; + +export async function load(opts) { + const apiKey = opts.cookies.get("token"); + const user = await useAuth(apiKey || "unused"); + const rooms = RoomManager.getRooms().map((r) => r.toJSON()); + return { + user: { ...user }, + rooms, + token: apiKey, + }; +} diff --git a/src/routes/signup/+page.svelte b/src/routes/signup/+page.svelte new file mode 100644 index 0000000..5b5a2b0 --- /dev/null +++ b/src/routes/signup/+page.svelte @@ -0,0 +1,84 @@ + + +
diff --git a/tailwind.config.cjs b/tailwind.config.cjs index 0566ee1..ceb2f0e 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -1,14 +1,15 @@ /** @type {import('tailwindcss').Config}*/ const config = { content: [ - "./src/**/*.{html,js,svelte,ts}", - "./node_modules/flowbite-svelte-icons/**/*.{html,js,svelte,ts}",], + "./src/**/*.{html,js,svelte,ts}", + "./node_modules/flowbite-svelte-icons/**/*.{html,js,svelte,ts}", + ], theme: { extend: {}, }, - plugins: [], + plugins: [require("@tailwindcss/typography")], }; module.exports = config;