Migrate some scripts to Alpine
This commit is contained in:
parent
aa5759d6f5
commit
85c11bc02a
10 changed files with 408 additions and 428 deletions
351
astro.config.mjs
351
astro.config.mjs
|
|
@ -3,184 +3,183 @@ import tailwindIntegration from "@astrojs/tailwind";
|
|||
import htaccessIntegration from "astro-htaccess";
|
||||
import { AI_BOTS } from "./src/data/ai_bots";
|
||||
|
||||
import alpinejs from "@astrojs/alpinejs";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://badmanners.xyz",
|
||||
integrations: [
|
||||
tailwindIntegration({
|
||||
applyBaseStyles: false,
|
||||
}),
|
||||
htaccessIntegration({
|
||||
generateHtaccessFile: import.meta.env.APACHE_CONFIG === "true",
|
||||
customRules: [
|
||||
// Block AI bots
|
||||
"<IfModule mod_rewrite.c>",
|
||||
" RewriteEngine on",
|
||||
" RewriteBase /",
|
||||
` RewriteCond %{HTTP_USER_AGENT} ${AI_BOTS.map((bot) => `^${bot}$`).join("|")} [NC]`,
|
||||
" RewriteRule ^ – [F]",
|
||||
"</IfModule>",
|
||||
],
|
||||
redirects: [
|
||||
{
|
||||
match: /^\/@\/(aryion|ekas?(portal)?)\b/,
|
||||
url: "https://aryion.com/g4/user/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/blog\b/,
|
||||
url: "https://gallery.badmanners.xyz/blog",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(blue[_-]?sky|bsky)\b/,
|
||||
url: "https://bsky.app/profile/badmanners.xyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(buymeacoffee|buy_me_a_coffee|buy-me-a-coffee|bmac)\b/,
|
||||
url: "https://www.buymeacoffee.com/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/carrd\b/,
|
||||
url: "https://badmanners.carrd.co",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/code[_-]?berg\b/,
|
||||
url: "https://codeberg.org/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/discord\b/,
|
||||
url: "/#discord",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/e[_-]?mail\b/,
|
||||
url: "/#e-mail",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(fur[_-]?affinity|fa)\b/,
|
||||
url: "https://www.furaffinity.net/user/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(gallery|stor(y|ies)|games?)\b/,
|
||||
url: "https://gallery.badmanners.xyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(git[_-]?hub|gh)\b/,
|
||||
url: "https://github.com/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/git[_-]?lab\b/,
|
||||
url: "https://gitlab.com/Bad_Manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(git[_-]?gud|sapp?hire)\b/,
|
||||
url: "https://gitgud.io/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(google|g[_-]?mail)\b/,
|
||||
url: "/#gmail",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(gpg|pgp)\b/,
|
||||
url: "/gpg.pub",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/gum[_-]?road\b/,
|
||||
url: "https://badmanners.gumroad.com",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(ink[_-]?bunny|ib)\b/,
|
||||
url: "https://inkbunny.net/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/itaku\b/,
|
||||
url: "https://itaku.ee/profile/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/itch\b/,
|
||||
url: "https://bad-manners.itch.io",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/keybase\b/,
|
||||
url: "https://keybase.io/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/keyoxide\b/,
|
||||
url: "https://keyoxide.org/aspe:keyoxide.org:UWYBVFCBFXTVUF2U6FS6AYJHLU",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/ko[._-]?fi\b/,
|
||||
url: "https://ko-fi.com/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(mastodon|meow[._-]?social|gulp[._-]?cafe)\b/,
|
||||
url: "https://meow.social/@BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/neo[_-]?cities\b/,
|
||||
url: "https://badmanners.neocities.org",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/picarto\b/,
|
||||
url: "https://www.picarto.tv/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/pillow[_-]?fort\b/,
|
||||
url: "https://www.pillowfort.social/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/pronouns?\b/,
|
||||
url: "https://pronouns.cc/@BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/redd\.?it\b/,
|
||||
url: "https://www.reddit.com/user/BadManners_",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/resetera\b/,
|
||||
url: "https://www.resetera.com/members/bad-manners.181209/",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/signal\b/,
|
||||
url: "https://signal.me/#eu/ytt_rk0fFmAB2JAW-x2PbUiJyc_H3kYmfL_Pq4QNh5QIDsiFtjdFHaqFRs1D36tB",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(so[_-]?furry|sf)\b/,
|
||||
url: "https://bad-manners.sofurry.com",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/ssh\b/,
|
||||
url: "/ssh.pub",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/steam(community|powered)?\b/,
|
||||
url: "https://steamcommunity.com/id/badmanners_",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/subscribe[_-]?star\b/,
|
||||
url: "https://subscribestar.adult/bad-manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(telegram|t\.me)\b/,
|
||||
url: "https://t.me/bad_manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/tumblr\b/,
|
||||
url: "https://www.tumblr.com/badmannersxyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/twitch\b/,
|
||||
url: "https://www.twitch.tv/bad__manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/weasyl\b/,
|
||||
url: "https://www.weasyl.com/~badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(you[_-]?tube|youtu\.be|yt)\b/,
|
||||
url: "https://www.youtube.com/@BadMannersXYZ",
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
integrations: [tailwindIntegration({
|
||||
applyBaseStyles: false,
|
||||
}), htaccessIntegration({
|
||||
generateHtaccessFile: import.meta.env.APACHE_CONFIG === "true",
|
||||
customRules: [
|
||||
// Block AI bots
|
||||
"<IfModule mod_rewrite.c>",
|
||||
" RewriteEngine on",
|
||||
" RewriteBase /",
|
||||
` RewriteCond %{HTTP_USER_AGENT} ${AI_BOTS.map((bot) => `^${bot}$`).join("|")} [NC]`,
|
||||
" RewriteRule ^ – [F]",
|
||||
"</IfModule>",
|
||||
],
|
||||
redirects: [
|
||||
{
|
||||
match: /^\/@\/(aryion|ekas?(portal)?)\b/,
|
||||
url: "https://aryion.com/g4/user/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/blog\b/,
|
||||
url: "https://gallery.badmanners.xyz/blog",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(blue[_-]?sky|bsky)\b/,
|
||||
url: "https://bsky.app/profile/badmanners.xyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(buymeacoffee|buy_me_a_coffee|buy-me-a-coffee|bmac)\b/,
|
||||
url: "https://www.buymeacoffee.com/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/carrd\b/,
|
||||
url: "https://badmanners.carrd.co",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/code[_-]?berg\b/,
|
||||
url: "https://codeberg.org/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/discord\b/,
|
||||
url: "/#discord",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/e[_-]?mail\b/,
|
||||
url: "/#e-mail",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(fur[_-]?affinity|fa)\b/,
|
||||
url: "https://www.furaffinity.net/user/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(gallery|stor(y|ies)|games?)\b/,
|
||||
url: "https://gallery.badmanners.xyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(git[_-]?hub|gh)\b/,
|
||||
url: "https://github.com/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/git[_-]?lab\b/,
|
||||
url: "https://gitlab.com/Bad_Manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(git[_-]?gud|sapp?hire)\b/,
|
||||
url: "https://gitgud.io/BadMannersXYZ",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(google|g[_-]?mail)\b/,
|
||||
url: "/#gmail",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(gpg|pgp)\b/,
|
||||
url: "/gpg.pub",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/gum[_-]?road\b/,
|
||||
url: "https://badmanners.gumroad.com",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(ink[_-]?bunny|ib)\b/,
|
||||
url: "https://inkbunny.net/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/itaku\b/,
|
||||
url: "https://itaku.ee/profile/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/itch\b/,
|
||||
url: "https://bad-manners.itch.io",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/keybase\b/,
|
||||
url: "https://keybase.io/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/keyoxide\b/,
|
||||
url: "https://keyoxide.org/aspe:keyoxide.org:UWYBVFCBFXTVUF2U6FS6AYJHLU",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/ko[._-]?fi\b/,
|
||||
url: "https://ko-fi.com/badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(mastodon|meow[._-]?social|gulp[._-]?cafe)\b/,
|
||||
url: "https://meow.social/@BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/neo[_-]?cities\b/,
|
||||
url: "https://badmanners.neocities.org",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/picarto\b/,
|
||||
url: "https://www.picarto.tv/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/pillow[_-]?fort\b/,
|
||||
url: "https://www.pillowfort.social/BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/pronouns?\b/,
|
||||
url: "https://pronouns.cc/@BadManners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/redd\.?it\b/,
|
||||
url: "https://www.reddit.com/user/BadManners_",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/resetera\b/,
|
||||
url: "https://www.resetera.com/members/bad-manners.181209/",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/signal\b/,
|
||||
url: "https://signal.me/#eu/ytt_rk0fFmAB2JAW-x2PbUiJyc_H3kYmfL_Pq4QNh5QIDsiFtjdFHaqFRs1D36tB",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(so[_-]?furry|sf)\b/,
|
||||
url: "https://bad-manners.sofurry.com",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/ssh\b/,
|
||||
url: "/ssh.pub",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/steam(community|powered)?\b/,
|
||||
url: "https://steamcommunity.com/id/badmanners_",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/subscribe[_-]?star\b/,
|
||||
url: "https://subscribestar.adult/bad-manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(telegram|t\.me)\b/,
|
||||
url: "https://t.me/bad_manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/tumblr\b/,
|
||||
url: "https://www.tumblr.com/badmannersxyz",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/twitch\b/,
|
||||
url: "https://www.twitch.tv/bad__manners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/weasyl\b/,
|
||||
url: "https://www.weasyl.com/~badmanners",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/(you[_-]?tube|youtu\.be|yt)\b/,
|
||||
url: "https://www.youtube.com/@BadMannersXYZ",
|
||||
},
|
||||
],
|
||||
}), alpinejs()],
|
||||
build: {
|
||||
assets: "assets",
|
||||
},
|
||||
|
|
@ -196,4 +195,4 @@ export default defineConfig({
|
|||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
181
package-lock.json
generated
181
package-lock.json
generated
|
|
@ -1,17 +1,20 @@
|
|||
{
|
||||
"name": "badmanners.xyz",
|
||||
"version": "2.1.15",
|
||||
"version": "2.1.16",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "badmanners.xyz",
|
||||
"version": "2.1.15",
|
||||
"version": "2.1.16",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@astrojs/alpinejs": "^0.4.0",
|
||||
"@astrojs/check": "^0.9.3",
|
||||
"@astrojs/rss": "^4.0.7",
|
||||
"@astrojs/tailwind": "^5.1.0",
|
||||
"@types/alpinejs": "^3.13.10",
|
||||
"alpinejs": "^3.14.1",
|
||||
"astro": "^4.15.5",
|
||||
"astro-htaccess": "^0.2.0",
|
||||
"astro-loading-indicator": "^0.6.0",
|
||||
|
|
@ -78,6 +81,16 @@
|
|||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/alpinejs": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/alpinejs/-/alpinejs-0.4.0.tgz",
|
||||
"integrity": "sha512-68BY1CA0XuielLW3WdX2sfh9F4sSTnFqQ//IE9AditbiYJ77HJDb4uZx07pTFDtr1jOMU7lCvH+iS9gmNafM1g==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@types/alpinejs": "^3.0.0",
|
||||
"alpinejs": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/check": {
|
||||
"version": "0.9.3",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.3.tgz",
|
||||
|
|
@ -1647,9 +1660,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz",
|
||||
"integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
|
||||
"integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -1660,9 +1673,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-android-arm64": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz",
|
||||
"integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
|
||||
"integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -1673,9 +1686,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz",
|
||||
"integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
|
||||
"integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -1686,9 +1699,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz",
|
||||
"integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
|
||||
"integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -1699,9 +1712,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz",
|
||||
"integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
|
||||
"integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -1712,9 +1725,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz",
|
||||
"integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
|
||||
"integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
|
|
@ -1725,9 +1738,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz",
|
||||
"integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
|
||||
"integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -1738,9 +1751,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz",
|
||||
"integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
|
||||
"integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -1751,9 +1764,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz",
|
||||
"integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
|
||||
"integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
|
|
@ -1764,9 +1777,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz",
|
||||
"integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
|
||||
"integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
|
|
@ -1777,9 +1790,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz",
|
||||
"integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
|
||||
"integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
|
|
@ -1790,9 +1803,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz",
|
||||
"integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
|
||||
"integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -1803,9 +1816,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz",
|
||||
"integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
|
||||
"integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -1816,9 +1829,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz",
|
||||
"integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
|
||||
"integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
|
|
@ -1829,9 +1842,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz",
|
||||
"integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
|
||||
"integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
|
|
@ -1842,9 +1855,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz",
|
||||
"integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
|
||||
"integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
|
@ -1949,6 +1962,12 @@
|
|||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@types/alpinejs": {
|
||||
"version": "3.13.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.10.tgz",
|
||||
"integrity": "sha512-ah53tF6mWuuwerpDE7EHwbZErNDJQlsLISPqJhYj2RZ9nuTYbRknSkqebUd3igkhLIZKkPa7IiXjSn9qsU9O2w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/babel__core": {
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
|
||||
|
|
@ -2151,6 +2170,21 @@
|
|||
"integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vue/reactivity": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
|
||||
"integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/shared": "3.1.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/shared": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
|
||||
"integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.12.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
|
||||
|
|
@ -2189,6 +2223,15 @@
|
|||
"url": "https://github.com/sponsors/epoberezkin"
|
||||
}
|
||||
},
|
||||
"node_modules/alpinejs": {
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.1.tgz",
|
||||
"integrity": "sha512-ICar8UsnRZAYvv/fCNfNeKMXNoXGUfwHrjx7LqXd08zIP95G2d9bAOuaL97re+1mgt/HojqHsfdOLo/A5LuWgQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "~3.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/ansi-align": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
|
||||
|
|
@ -6032,9 +6075,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/rollup": {
|
||||
"version": "4.21.3",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz",
|
||||
"integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==",
|
||||
"version": "4.22.4",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
|
||||
"integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/estree": "1.0.5"
|
||||
|
|
@ -6047,22 +6090,22 @@
|
|||
"npm": ">=8.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@rollup/rollup-android-arm-eabi": "4.21.3",
|
||||
"@rollup/rollup-android-arm64": "4.21.3",
|
||||
"@rollup/rollup-darwin-arm64": "4.21.3",
|
||||
"@rollup/rollup-darwin-x64": "4.21.3",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.21.3",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.21.3",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.21.3",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.21.3",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.21.3",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.21.3",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.21.3",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.21.3",
|
||||
"@rollup/rollup-linux-x64-musl": "4.21.3",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.21.3",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.21.3",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.21.3",
|
||||
"@rollup/rollup-android-arm-eabi": "4.22.4",
|
||||
"@rollup/rollup-android-arm64": "4.22.4",
|
||||
"@rollup/rollup-darwin-arm64": "4.22.4",
|
||||
"@rollup/rollup-darwin-x64": "4.22.4",
|
||||
"@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
|
||||
"@rollup/rollup-linux-arm-musleabihf": "4.22.4",
|
||||
"@rollup/rollup-linux-arm64-gnu": "4.22.4",
|
||||
"@rollup/rollup-linux-arm64-musl": "4.22.4",
|
||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
|
||||
"@rollup/rollup-linux-riscv64-gnu": "4.22.4",
|
||||
"@rollup/rollup-linux-s390x-gnu": "4.22.4",
|
||||
"@rollup/rollup-linux-x64-gnu": "4.22.4",
|
||||
"@rollup/rollup-linux-x64-musl": "4.22.4",
|
||||
"@rollup/rollup-win32-arm64-msvc": "4.22.4",
|
||||
"@rollup/rollup-win32-ia32-msvc": "4.22.4",
|
||||
"@rollup/rollup-win32-x64-msvc": "4.22.4",
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "badmanners.xyz",
|
||||
"type": "module",
|
||||
"version": "2.1.15",
|
||||
"version": "2.1.16",
|
||||
"scripts": {
|
||||
"postinstall": "astro sync",
|
||||
"dev": "astro dev",
|
||||
|
|
@ -15,9 +15,12 @@
|
|||
"deploy-lftp": "dotenv tsx scripts/deploy-lftp.ts --"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/alpinejs": "^0.4.0",
|
||||
"@astrojs/check": "^0.9.3",
|
||||
"@astrojs/rss": "^4.0.7",
|
||||
"@astrojs/tailwind": "^5.1.0",
|
||||
"@types/alpinejs": "^3.13.10",
|
||||
"alpinejs": "^3.14.1",
|
||||
"astro": "^4.15.5",
|
||||
"astro-htaccess": "^0.2.0",
|
||||
"astro-loading-indicator": "^0.6.0",
|
||||
|
|
|
|||
|
|
@ -3,99 +3,56 @@ import AgeRestrictedScriptInline from "./AgeRestrictedScriptInline.astro";
|
|||
import { IconTriangleExclamation } from "./icons";
|
||||
---
|
||||
|
||||
<div
|
||||
id="modal-age-restricted"
|
||||
class="fixed inset-0 bg-stone-50 dark:bg-zinc-900"
|
||||
role="dialog"
|
||||
aria-labelledby="title-age-restricted"
|
||||
hidden
|
||||
>
|
||||
<div class="mx-auto flex min-h-screen max-w-3xl flex-col items-center justify-center text-center tracking-tight">
|
||||
<div class="text-bm-500 dark:text-bm-400">
|
||||
<IconTriangleExclamation width="3rem" height="3rem" />
|
||||
</div>
|
||||
<div
|
||||
id="title-age-restricted"
|
||||
class="pb-3 pt-2 text-3xl font-normal text-stone-700 sm:pb-4 sm:pt-2 dark:text-zinc-50"
|
||||
>
|
||||
Age verification
|
||||
</div>
|
||||
<div
|
||||
class="mx-6 mb-4 max-w-xl border-b border-stone-300 pb-4 text-xl font-medium text-stone-700 dark:border-zinc-300 dark:text-zinc-50"
|
||||
>
|
||||
You must be 18+ to access this page.
|
||||
</div>
|
||||
<p class="px-8 text-lg font-normal leading-snug text-stone-700 sm:max-w-2xl dark:text-zinc-50">
|
||||
By confirming that you are at least 18 years old, your selection will be saved to your browser to prevent this
|
||||
screen from appearing in the future.
|
||||
</p>
|
||||
<div
|
||||
id="age-verification-button-list"
|
||||
class="flex w-full max-w-md flex-col-reverse justify-evenly gap-y-5 px-6 pt-5 font-medium sm:max-w-2xl sm:flex-row"
|
||||
hidden
|
||||
>
|
||||
<button
|
||||
data-modal-reject
|
||||
id="age-verification-reject"
|
||||
class="rounded bg-stone-400 py-3 text-lg text-stone-900 hover:bg-stone-500 hover:text-stone-50 focus:bg-stone-500 focus:text-stone-50 sm:px-9 dark:bg-zinc-300 dark:text-zinc-900 dark:hover:bg-zinc-600 dark:hover:text-zinc-50 dark:focus:bg-zinc-600 dark:focus:text-zinc-50"
|
||||
<template x-if="!ageVerified">
|
||||
<div
|
||||
id="modal-age-restricted"
|
||||
class="fixed inset-0 z-10 bg-stone-50 dark:bg-zinc-900"
|
||||
role="dialog"
|
||||
aria-labelledby="title-age-restricted"
|
||||
>
|
||||
<div class="mx-auto flex min-h-screen max-w-3xl flex-col items-center justify-center text-center tracking-tight">
|
||||
<div class="text-bm-500 dark:text-bm-400">
|
||||
<IconTriangleExclamation width="3rem" height="3rem" />
|
||||
</div>
|
||||
<div
|
||||
id="title-age-restricted"
|
||||
class="pb-3 pt-2 text-3xl font-normal text-stone-700 sm:pb-4 sm:pt-2 dark:text-zinc-50"
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
data-modal-accept
|
||||
id="age-verification-accept"
|
||||
class="rounded bg-bm-500 py-3 text-lg text-stone-900 hover:bg-stone-500 hover:text-stone-50 focus:bg-stone-500 focus:text-stone-50 sm:px-9 dark:bg-bm-400 dark:text-zinc-900 dark:hover:bg-zinc-600 dark:hover:text-zinc-50 dark:focus:bg-zinc-600 dark:focus:text-zinc-50"
|
||||
Age verification
|
||||
</div>
|
||||
<div
|
||||
class="mx-6 mb-4 max-w-xl border-b border-stone-300 pb-4 text-xl font-medium text-stone-700 dark:border-zinc-300 dark:text-zinc-50"
|
||||
>
|
||||
I'm at least 18 years old
|
||||
</button>
|
||||
You must be 18+ to access this page.
|
||||
</div>
|
||||
<p class="px-8 text-lg font-normal leading-snug text-stone-700 sm:max-w-2xl dark:text-zinc-50">
|
||||
By confirming that you are at least 18 years old, your selection will be saved to your browser to prevent this
|
||||
screen from appearing in the future.
|
||||
</p>
|
||||
<div
|
||||
id="age-verification-button-list"
|
||||
class="flex w-full max-w-md flex-col-reverse justify-evenly gap-y-5 px-6 pt-5 font-medium sm:max-w-2xl sm:flex-row"
|
||||
hidden
|
||||
>
|
||||
<button
|
||||
data-modal-reject
|
||||
id="age-verification-reject"
|
||||
class="rounded bg-stone-400 py-3 text-lg text-stone-900 hover:bg-stone-500 hover:text-stone-50 focus:bg-stone-500 focus:text-stone-50 sm:px-9 dark:bg-zinc-300 dark:text-zinc-900 dark:hover:bg-zinc-600 dark:hover:text-zinc-50 dark:focus:bg-zinc-600 dark:focus:text-zinc-50"
|
||||
@click="location.href = 'about:blank'"
|
||||
>
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
data-modal-accept
|
||||
id="age-verification-accept"
|
||||
class="rounded bg-bm-500 py-3 text-lg text-stone-900 hover:bg-stone-500 hover:text-stone-50 focus:bg-stone-500 focus:text-stone-50 sm:px-9 dark:bg-bm-400 dark:text-zinc-900 dark:hover:bg-zinc-600 dark:hover:text-zinc-50 dark:focus:bg-zinc-600 dark:focus:text-zinc-50"
|
||||
@click="localStorage.ageVerified = 'true'; ageVerified = true"
|
||||
>
|
||||
I'm at least 18 years old
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<AgeRestrictedScriptInline />
|
||||
|
||||
<script>
|
||||
const ageRestrictedModalSetup = () => {
|
||||
const modal = document.querySelector<HTMLElementTagNameMap["div"]>("div#modal-age-restricted");
|
||||
// Not an age-restricted page
|
||||
if (!modal) {
|
||||
return;
|
||||
}
|
||||
if (modal !== document.querySelector("body>div#modal-age-restricted")) {
|
||||
throw new Error("#modal-age-restricted must be a direct child of the body element!");
|
||||
}
|
||||
const addAgeVerifiedQueryToLinks = () =>
|
||||
document.body.querySelectorAll<HTMLElementTagNameMap["a"]>("a[href][data-age-restricted]").forEach((el) => {
|
||||
let newHref = new URL(el.href);
|
||||
newHref.searchParams.set("ageVerified", "true");
|
||||
el.href = newHref.toString();
|
||||
});
|
||||
if (localStorage.ageVerified === "true") {
|
||||
addAgeVerifiedQueryToLinks();
|
||||
} else {
|
||||
const rejectButton = modal.querySelector<HTMLElementTagNameMap["button"]>("button[data-modal-reject]")!;
|
||||
const onRejectButtonClick = (e: MouseEvent) => {
|
||||
e.preventDefault();
|
||||
location.href = "about:blank";
|
||||
};
|
||||
rejectButton.addEventListener("click", onRejectButtonClick);
|
||||
modal.querySelector<HTMLElementTagNameMap["button"]>("button[data-modal-accept]")!.addEventListener(
|
||||
"click",
|
||||
(e: MouseEvent) => {
|
||||
e.preventDefault();
|
||||
rejectButton.removeEventListener("click", onRejectButtonClick);
|
||||
localStorage.ageVerified = "true";
|
||||
document.body.style.overflow = "auto";
|
||||
document.querySelectorAll("body>:not(#modal-age-restricted)").forEach((el) => el.removeAttribute("inert"));
|
||||
modal.hidden = true;
|
||||
addAgeVerifiedQueryToLinks();
|
||||
},
|
||||
{ once: true },
|
||||
);
|
||||
modal.querySelector<HTMLElementTagNameMap["div"]>("div#age-verification-button-list")!.hidden = false;
|
||||
rejectButton.focus();
|
||||
}
|
||||
};
|
||||
|
||||
ageRestrictedModalSetup();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
---
|
||||
---
|
||||
|
||||
<script is:inline>(a=>{let b="body>",c="#modal-age-restricted",d="true",e="ageVerified",f="searchParams",g=localStorage,h=new URL(location),i=x=>a.querySelectorAll(x),j=i(b+c)[0];h[f].get(e)==d&&(g[e]=d,h[f].delete(e),history.replaceState({},"",h));j&&g[e]!=d&&((a.body.style.overflow="hidden"),i(b+":not("+c+")").forEach(x=>x.setAttribute("inert",d)),(j.hidden=!1))})(document)</script>
|
||||
<script is:inline>(()=>{let a="true",b="ageVerified",c="searchParams",d=localStorage,e=new URL(location);e[c].get(b)==a&&(d[b]=a,e[c].delete(b),history.replaceState({},"",e))})()</script>
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
---
|
||||
import DarkModeScriptInline from "./DarkModeScriptInline.astro";
|
||||
---
|
||||
|
||||
<DarkModeScriptInline />
|
||||
|
||||
<script>
|
||||
type ColorScheme = "auto" | "dark" | "light" | undefined;
|
||||
|
||||
const colorSchemeSetup = () => {
|
||||
let colorScheme: ColorScheme = localStorage.colorScheme;
|
||||
if (!colorScheme || colorScheme === "auto") {
|
||||
colorScheme = matchMedia("(prefers-color-scheme:dark)").matches ? "dark" : "light";
|
||||
}
|
||||
const toggleColorScheme = (e: MouseEvent) => {
|
||||
e.preventDefault();
|
||||
if (colorScheme === "dark") {
|
||||
colorScheme = "light";
|
||||
document.body.classList.remove("dark");
|
||||
} else {
|
||||
colorScheme = "dark";
|
||||
document.body.classList.add("dark");
|
||||
}
|
||||
localStorage.colorScheme = colorScheme;
|
||||
};
|
||||
document.querySelectorAll<HTMLElementTagNameMap["button"]>("button[data-dark-mode]").forEach((button) => {
|
||||
button.addEventListener("click", toggleColorScheme);
|
||||
button.hidden = false;
|
||||
});
|
||||
};
|
||||
|
||||
colorSchemeSetup();
|
||||
</script>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
---
|
||||
---
|
||||
|
||||
<script is:inline>let g=document,f=a=>{var b="dark",c="colorScheme",d=localStorage,e=d[c];(e=="auto"||!e?matchMedia("(prefers-color-scheme:dark)").matches:e==b)&&a.body.classList.add(b)};g.addEventListener('astro:before-swap',e=>f(e.newDocument));f(g)</script>
|
||||
<script is:inline>let g=document,f=a=>{var b="dark",c=localStorage,d=c.colorScheme;(d!="light"&&(d==b||matchMedia("(prefers-color-scheme:dark)").matches))&&a.body.classList.add(b)};g.addEventListener('astro:before-swap',e=>f(e.newDocument));f(g)</script>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
import { ViewTransitions } from "astro:transitions";
|
||||
import LoadingIndicator from "astro-loading-indicator/component";
|
||||
import DarkModeScript from "@components/DarkModeScript.astro";
|
||||
import DarkModeScriptInline from "@components/DarkModeScriptInline.astro";
|
||||
import NavHeader from "@components/NavHeader.astro";
|
||||
import { IconSun, IconMoon } from "@components/icons";
|
||||
import AgeRestrictedModal from "@components/AgeRestrictedModal.astro";
|
||||
|
|
@ -36,9 +36,24 @@ const title = pageTitle ? `${pageTitle} | Bad Manners` : "Bad Manners";
|
|||
<slot name="head" />
|
||||
<ViewTransitions />
|
||||
<LoadingIndicator color="#3b82f6" height="0.25rem" threshold={false} />
|
||||
<script>
|
||||
import Alpine from "alpinejs";
|
||||
document.addEventListener("astro:after-preparation", () => {
|
||||
Alpine.stopObservingMutations();
|
||||
});
|
||||
document.addEventListener("astro:page-load", () => {
|
||||
document.dispatchEvent(new Event("alpine:init"));
|
||||
Alpine.initTree(document.documentElement);
|
||||
Alpine.startObservingMutations();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex min-h-screen flex-col">
|
||||
<body
|
||||
:class="ageVerified ? 'overflow-auto' : 'overflow-hidden'"
|
||||
x-effect="darkMode ? $el.classList.add('dark') : $el.classList.remove('dark')"
|
||||
x-data="{ darkMode: localStorage.colorScheme != 'light' && (localStorage.colorScheme == 'dark' || matchMedia('(prefers-color-scheme:dark)').matches), ageVerified: new URL(location).searchParams.get('ageVerified') == 'true' || localStorage.ageVerified == 'true' }"
|
||||
>
|
||||
<div class="flex min-h-screen flex-col" x-bind:inert="!ageVerified">
|
||||
<div
|
||||
id="bg"
|
||||
class="fixed h-screen w-screen bg-radial from-bm-300 to-bm-500 dark:from-green-800 dark:to-green-950 print:hidden"
|
||||
|
|
@ -59,25 +74,26 @@ const title = pageTitle ? `${pageTitle} | Bad Manners` : "Bad Manners";
|
|||
transition:persist
|
||||
>
|
||||
<div class="flex items-center">
|
||||
<span id="copyright"
|
||||
>© <time datetime="2023">2023</time>–<time datetime={new Date().getFullYear().toString()}
|
||||
>{new Date().getFullYear()}</time
|
||||
<span id="copyright" class="mr-2"
|
||||
>© <time datetime="2023">2023</time>–<time
|
||||
x-data="{ currentYear: new Date().getFullYear() }"
|
||||
x-text="currentYear"
|
||||
x-bind:datetime="currentYear"
|
||||
datetime={new Date().getFullYear().toString()}>{new Date().getFullYear()}</time
|
||||
> Bad Manners</span
|
||||
>
|
||||
<span class="print:hidden" aria-hidden="true"> | </span>
|
||||
<a
|
||||
href="/licenses.toml"
|
||||
rel="license"
|
||||
class="transition-colors hover:text-white hover:underline focus:text-white focus:underline motion-reduce:transition-none dark:hover:text-bm-300 dark:focus:text-bm-300 print:hidden"
|
||||
class="border-l border-l-black pl-2 transition-colors hover:text-white hover:underline focus:text-white focus:underline motion-reduce:transition-none dark:border-l-white dark:hover:text-bm-300 dark:focus:text-bm-300 print:hidden"
|
||||
>
|
||||
Licenses
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
data-dark-mode
|
||||
x-on:click="darkMode = !darkMode; localStorage.colorScheme = darkMode ? 'dark' : 'light'"
|
||||
class="mt-2 p-2 transition-colors hover:text-green-700 focus:text-green-700 motion-reduce:transition-none dark:hover:text-bm-300 dark:focus:text-bm-300 print:hidden"
|
||||
aria-labelledby="label-toggle-dark-mode"
|
||||
hidden
|
||||
>
|
||||
<IconSun width="1.5rem" height="1.5rem" class="hidden dark:block" />
|
||||
<IconMoon width="1.5rem" height="1.5rem" class="block dark:hidden" />
|
||||
|
|
@ -86,7 +102,7 @@ const title = pageTitle ? `${pageTitle} | Bad Manners` : "Bad Manners";
|
|||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
<DarkModeScript transition:persist />
|
||||
<DarkModeScriptInline transition:persist />
|
||||
<AgeRestrictedModal transition:persist />
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
>
|
||||
{
|
||||
Astro.site ? (
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="permalink"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -97,7 +97,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
</li>
|
||||
) : null
|
||||
}
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="gallery"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -112,7 +112,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">Gallery on https://gallery.badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="gallery-feed"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -127,7 +127,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">Gallery feed</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="pronouns"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -143,7 +143,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-pronoun hidden">they/them/their/theirs/themself</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="e-mail"
|
||||
class="u-email contact-link group"
|
||||
|
|
@ -159,7 +159,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">me@badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="bluesky"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -173,7 +173,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">@badmanners.xyz on Bluesky</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="codeberg"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -187,7 +187,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Codeberg</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<button
|
||||
id="discord"
|
||||
class="text-link group block w-full py-2 transition-colors motion-reduce:transition-none"
|
||||
|
|
@ -202,7 +202,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners on Discord</p>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="eka-s-portal"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -216,7 +216,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Eka's Portal</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="fur-affinity"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -230,7 +230,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Fur Affinity</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="gitgud"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -244,7 +244,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadMannersXYZ on GitGud</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="github"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -258,7 +258,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadMannersXYZ on GitHub</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="gitlab"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -272,7 +272,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">Bad_Manners on GitLab</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="google"
|
||||
class="u-email contact-link group"
|
||||
|
|
@ -288,7 +288,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">google@badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="gpg"
|
||||
class="u-key contact-link group"
|
||||
|
|
@ -304,7 +304,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">GPG public key</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="inkbunny"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -318,7 +318,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Inkbunny</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="itaku"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -332,7 +332,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners on Itaku</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="itch"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -346,7 +346,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">Bad Manners on Itch.io</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="keybase"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -360,7 +360,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners on Keybase</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="keyoxide"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -374,7 +374,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-uid sr-only select-none">aspe:keyoxide.org:UWYBVFCBFXTVUF2U6FS6AYJHLU</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="ko-fi"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -388,7 +388,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners on Ko-fi</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="mastodon"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -402,7 +402,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">@BadManners@meow.social on Mastodon</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="neocities"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -416,7 +416,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners.neocities.org on Neocities</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="picarto"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -430,7 +430,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Picarto</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="signal"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -444,7 +444,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners.10 on Signal</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="sofurry"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -458,7 +458,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">Bad Manners on SoFurry</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="ssh"
|
||||
class="u-key contact-link group"
|
||||
|
|
@ -474,7 +474,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="sr-only select-none">SSH public key</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="steam"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -488,7 +488,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">badmanners_ on Steam</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="subscribestar"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -502,7 +502,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">Bad Manners on SubscribeStar</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="telegram"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -516,7 +516,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">@bad_manners on Telegram</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="twitch"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -530,7 +530,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">bad__manners on Twitch</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="weasyl"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -544,7 +544,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
<p class="p-nickname sr-only select-none">BadManners on Weasyl</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li data-link>
|
||||
<a
|
||||
id="youtube"
|
||||
class="u-url contact-link group"
|
||||
|
|
@ -580,14 +580,6 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
return;
|
||||
}
|
||||
|
||||
// Validate links
|
||||
indexLinks.querySelectorAll("li > :not(a, button)").forEach((el) => {
|
||||
console.warn("Element with unknown type found in #links list:", el);
|
||||
});
|
||||
indexLinks.querySelectorAll("li > :is(a, button):not([aria-label])").forEach((el) => {
|
||||
console.warn("Element with missing aria-label found in #links list:", el);
|
||||
});
|
||||
|
||||
// Instantiate hover tooltips
|
||||
const tooltipItems = document.querySelectorAll<HTMLElement>("[title][data-tooltip]");
|
||||
tooltipItems.forEach((el) => el.setAttribute("data-tooltip", el.title));
|
||||
|
|
@ -599,9 +591,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
|
||||
// Add functionality to custom clipboard items
|
||||
if ("clipboard" in navigator) {
|
||||
const customClipboardItems = indexLinks.querySelectorAll<HTMLElementTagNameMap["a" | "button"]>(
|
||||
"li > :is(a, button)[data-clipboard]",
|
||||
);
|
||||
const customClipboardItems = document.querySelectorAll<HTMLElement>("ul#links li[data-link] [data-clipboard]");
|
||||
if (!customClipboardItems.length) {
|
||||
console.warn("Missing custom clipboard elements in #links list.");
|
||||
}
|
||||
|
|
@ -633,8 +623,8 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
element.addEventListener("click", onClickElement);
|
||||
});
|
||||
} else {
|
||||
const customClipboardButtons = indexLinks.querySelectorAll<HTMLElementTagNameMap["button"]>(
|
||||
"li > button[data-clipboard][disabled]",
|
||||
const customClipboardButtons = document.querySelectorAll<HTMLElementTagNameMap["button"]>(
|
||||
"ul#links li[data-link] button[data-clipboard]",
|
||||
);
|
||||
customClipboardButtons.forEach((element) => {
|
||||
element.removeAttribute("disabled");
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@
|
|||
@apply border-r-stone-800 dark:border-r-zinc-900;
|
||||
}
|
||||
|
||||
/* Alpine.js */
|
||||
[x-cloak] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
@layer components {
|
||||
.text-link {
|
||||
@apply text-stone-800 hover:text-bm-500 focus:text-bm-500 dark:text-zinc-300 dark:hover:text-bm-400 dark:focus:text-bm-400;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue