1 Commits

Author SHA1 Message Date
5abbbf6677 Update dependency @sveltejs/vite-plugin-svelte to v6
Some checks failed
renovate/artifacts Artifact file update failure
2025-07-10 17:05:01 +00:00
18 changed files with 62 additions and 93 deletions

View File

@ -1,4 +1,4 @@
FROM golang:1.24.5 FROM golang:1.24.4
WORKDIR /api WORKDIR /api

View File

@ -11,7 +11,4 @@ run:
format: format:
gofmt -s -w . gofmt -s -w .
clean: .PHONY: test format
rm -f *.elf
.PHONY: test format clean

View File

@ -1,6 +1,6 @@
module github.com/ngn13/website/api module github.com/ngn13/website/api
go 1.24.5 go 1.24.0
require ( require (
github.com/gofiber/fiber/v2 v2.52.8 github.com/gofiber/fiber/v2 v2.52.8

View File

@ -1,5 +1,7 @@
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/gofiber/fiber/v2 v2.52.6 h1:Rfp+ILPiYSvvVuIPvxrBns+HJp8qGLDnLJawAu27XVI=
github.com/gofiber/fiber/v2 v2.52.6/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
github.com/gofiber/fiber/v2 v2.52.8 h1:xl4jJQ0BV5EJTA2aWiKw/VddRpHrKeZLF0QPUxqn0x4= github.com/gofiber/fiber/v2 v2.52.8 h1:xl4jJQ0BV5EJTA2aWiKw/VddRpHrKeZLF0QPUxqn0x4=
github.com/gofiber/fiber/v2 v2.52.8/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/fiber/v2 v2.52.8/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
@ -13,8 +15,12 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A=
github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/ngn13/ortam v0.0.0-20250412195317-e76e62a7a305 h1:1YxtSMwR14PklXNlZxIqcmfpiq2+G98YNmhSuz7GKCQ=
github.com/ngn13/ortam v0.0.0-20250412195317-e76e62a7a305/go.mod h1:MSJZ4ZstrLvVEvivbp9hhup+iL8rvtpgKcYaF3DSOKk=
github.com/ngn13/ortam v0.0.0-20250421004351-8dea81680817 h1:WkHM4w51N5jCsWcDVcPsXz3zhi/kCfNp/VGh2uPjwsk= github.com/ngn13/ortam v0.0.0-20250421004351-8dea81680817 h1:WkHM4w51N5jCsWcDVcPsXz3zhi/kCfNp/VGh2uPjwsk=
github.com/ngn13/ortam v0.0.0-20250421004351-8dea81680817/go.mod h1:MSJZ4ZstrLvVEvivbp9hhup+iL8rvtpgKcYaF3DSOKk= github.com/ngn13/ortam v0.0.0-20250421004351-8dea81680817/go.mod h1:MSJZ4ZstrLvVEvivbp9hhup+iL8rvtpgKcYaF3DSOKk=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=

View File

@ -1 +1,2 @@
engine-strict=true engine-strict=true
resolution-mode=highest

View File

@ -3,7 +3,7 @@
"tabWidth": 2, "tabWidth": 2,
"singleQuote": false, "singleQuote": false,
"trailingComma": "es5", "trailingComma": "es5",
"printWidth": 80, "printWidth": 100,
"plugins": ["prettier-plugin-svelte"], "plugins": ["prettier-plugin-svelte"],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
} }

45
app/package-lock.json generated
View File

@ -9,7 +9,7 @@
"version": "6.3", "version": "6.3",
"dependencies": { "dependencies": {
"dompurify": "^3.2.3", "dompurify": "^3.2.3",
"marked": "^16.0.0", "marked": "^15.0.6",
"svelte-i18n": "^4.0.1" "svelte-i18n": "^4.0.1"
}, },
"devDependencies": { "devDependencies": {
@ -851,9 +851,9 @@
} }
}, },
"node_modules/@sveltejs/adapter-node": { "node_modules/@sveltejs/adapter-node": {
"version": "5.2.13", "version": "5.2.12",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.13.tgz", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.12.tgz",
"integrity": "sha512-yS2TVFmIrxjGhYaV5/iIUrJ3mJl6zjaYn0lBD70vTLnYvJeqf3cjvLXeXCUCuYinhSBoyF4DpfGla49BnIy7sQ==", "integrity": "sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -867,9 +867,9 @@
} }
}, },
"node_modules/@sveltejs/kit": { "node_modules/@sveltejs/kit": {
"version": "2.22.5", "version": "2.22.0",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.5.tgz", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.0.tgz",
"integrity": "sha512-l5i+LcDaoymD2mg5ziptnHmzzF79+c9twJiDoLWAPKq7afMEe4mvGesJ+LVtm33A92mLzd2KUHgtGSqTrvfkvg==", "integrity": "sha512-DJm0UxVgzXq+1MUfiJK4Ridk7oIQsIets6JwHiEl97sI6nXScfXe+BeqNhzB7jQIVBb3BM51U4hNk8qQxRXBAA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -884,7 +884,8 @@
"mrmime": "^2.0.0", "mrmime": "^2.0.0",
"sade": "^1.8.1", "sade": "^1.8.1",
"set-cookie-parser": "^2.6.0", "set-cookie-parser": "^2.6.0",
"sirv": "^3.0.0" "sirv": "^3.0.0",
"vitefu": "^1.0.6"
}, },
"bin": { "bin": {
"svelte-kit": "svelte-kit.js" "svelte-kit": "svelte-kit.js"
@ -1203,9 +1204,9 @@
} }
}, },
"node_modules/esrap": { "node_modules/esrap": {
"version": "2.1.0", "version": "1.4.9",
"resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.9.tgz",
"integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", "integrity": "sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15" "@jridgewell/sourcemap-codec": "^1.4.15"
@ -1384,15 +1385,15 @@
} }
}, },
"node_modules/marked": { "node_modules/marked": {
"version": "16.0.0", "version": "15.0.12",
"resolved": "https://registry.npmjs.org/marked/-/marked-16.0.0.tgz", "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
"integrity": "sha512-MUKMXDjsD/eptB7GPzxo4xcnLS6oo7/RHimUMHEDRhUooPwmN9BEpMl7AEOJv3bmso169wHI2wUF9VQgL7zfmA==", "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"marked": "bin/marked.js" "marked": "bin/marked.js"
}, },
"engines": { "engines": {
"node": ">= 20" "node": ">= 18"
} }
}, },
"node_modules/memoizee": { "node_modules/memoizee": {
@ -1515,9 +1516,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.6.2", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
@ -1649,9 +1650,9 @@
} }
}, },
"node_modules/svelte": { "node_modules/svelte": {
"version": "5.35.6", "version": "5.34.7",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.35.6.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.34.7.tgz",
"integrity": "sha512-p7PVLQYrvCxJuxzGfOv/l71hVuHC6EZk5UDjbt/bndMYaBcUV5sFjDsj+PSIYvz1vcfbG6inX83/xIUeik1xGA==", "integrity": "sha512-5PEg+QQKce4t1qiOtVUhUS3AQRTtxJyGBTpxLcNWnr0Ve8q4r06bMo0Gv8uhtCPWlztZHoi3Ye7elLhu+PCTMg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.3.0", "@ampproject/remapping": "^2.3.0",
@ -1663,7 +1664,7 @@
"axobject-query": "^4.1.0", "axobject-query": "^4.1.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"esm-env": "^1.2.1", "esm-env": "^1.2.1",
"esrap": "^2.1.0", "esrap": "^1.4.8",
"is-reference": "^3.0.3", "is-reference": "^3.0.3",
"locate-character": "^3.0.0", "locate-character": "^3.0.0",
"magic-string": "^0.30.11", "magic-string": "^0.30.11",

View File

@ -13,7 +13,7 @@
"@sveltejs/adapter-auto": "^6.0.0", "@sveltejs/adapter-auto": "^6.0.0",
"@sveltejs/adapter-node": "^5.2.11", "@sveltejs/adapter-node": "^5.2.11",
"@sveltejs/kit": "^2.15.1", "@sveltejs/kit": "^2.15.1",
"@sveltejs/vite-plugin-svelte": "^4.0.3", "@sveltejs/vite-plugin-svelte": "^6.0.0",
"prettier": "^3.4.2", "prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.2", "prettier-plugin-svelte": "^3.3.2",
"svelte": "^5.16.0", "svelte": "^5.16.0",
@ -22,7 +22,7 @@
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"dompurify": "^3.2.3", "dompurify": "^3.2.3",
"marked": "^16.0.0", "marked": "^15.0.6",
"svelte-i18n": "^4.0.1" "svelte-i18n": "^4.0.1"
} }
} }

View File

@ -13,14 +13,11 @@ function api_urljoin(path = null, query = {}) {
} }
function api_check_err(json) { function api_check_err(json) {
if (!("error" in json)) if (!("error" in json)) throw new Error('API response is missing the "error" key');
throw new Error('API response is missing the "error" key');
if (json["error"] != "") if (json["error"] != "") throw new Error(`API returned an error: ${json["error"]}`);
throw new Error(`API returned an error: ${json["error"]}`);
if (!("result" in json)) if (!("result" in json)) throw new Error('API response is missing the "result" key');
throw new Error('API response is missing the "result" key');
} }
async function api_http_get(fetch, url) { async function api_http_get(fetch, url) {
@ -42,10 +39,4 @@ async function api_get_projects(fetch) {
return await api_http_get(fetch, api_urljoin("/projects")); return await api_http_get(fetch, api_urljoin("/projects"));
} }
export { export { api_version, api_urljoin, api_get_metrics, api_get_services, api_get_projects };
api_version,
api_urljoin,
api_get_metrics,
api_get_services,
api_get_projects,
};

View File

@ -5,8 +5,7 @@ function doc_urljoin(path = null, query = {}) {
} }
function doc_check_err(json) { function doc_check_err(json) {
if ("error" in json) if ("error" in json) throw new Error(`Documentation server returned an error: ${json["error"]}`);
throw new Error(`Documentation server returned an error: ${json["error"]}`);
} }
async function doc_http_get(fetch, url) { async function doc_http_get(fetch, url) {

View File

@ -18,9 +18,7 @@
<footer style="border-top: solid 2px var(--{color()});"> <footer style="border-top: solid 2px var(--{color()});">
<div class="links"> <div class="links">
<span> <span>
<Link link={import.meta.env.WEBSITE_SOURCE_URL} bold={true} <Link link={import.meta.env.WEBSITE_SOURCE_URL} bold={true}>{$_("footer.source")}</Link>
>{$_("footer.source")}</Link
>
</span> </span>
<span>/</span> <span>/</span>
<span> <span>

View File

@ -28,8 +28,7 @@ function locale_from_browser() {
function locale_select(l = null) { function locale_select(l = null) {
if (l === null) { if (l === null) {
if (browser && null !== (l = localStorage.getItem("locale"))) if (browser && null !== (l = localStorage.getItem("locale"))) locale_select(l);
locale_select(l);
else locale_select(locale_from_browser()); else locale_select(locale_from_browser());
return; return;
} }

View File

@ -3,13 +3,14 @@
import { page } from "$app/stores"; import { page } from "$app/stores";
export let link; export let link;
function is_active() {
return $page.url.pathname == link;
}
</script> </script>
<a <a
style=" style="text-decoration-color: var(--{color()}); {is_active() ? `color: var(--${color()})` : ''}"
text-decoration-color: var(--{color()});
{$page.url.pathname === link ? `color: var(--${color()});` : ''}
"
data-sveltekit-preload-data data-sveltekit-preload-data
on:click={click} on:click={click}
href={link} href={link}

View File

@ -15,13 +15,9 @@
<p>{service.desc[$locale]}</p> <p>{service.desc[$locale]}</p>
</div> </div>
<div class="links"> <div class="links">
<Link highlight={false} link={service.clear} <Link highlight={false} link={service.clear}><Icon icon="nf-oct-link" /></Link>
><Icon icon="nf-oct-link" /></Link
>
{#if service.onion != ""} {#if service.onion != ""}
<Link highlight={false} link={service.onion} <Link highlight={false} link={service.onion}><Icon icon="nf-linux-tor" /></Link>
><Icon icon="nf-linux-tor" /></Link
>
{/if} {/if}
{#if service.i2p != ""} {#if service.i2p != ""}
<Link highlight={false} link={service.i2p} <Link highlight={false} link={service.i2p}

View File

@ -59,9 +59,7 @@
<Link icon="nf-md-email" link="mailto:ngn@ngn.tf">Email</Link> <Link icon="nf-md-email" link="mailto:ngn@ngn.tf">Email</Link>
</li> </li>
<li> <li>
<Link icon="nf-md-mastodon" link="https://defcon.social/@ngn" <Link icon="nf-md-mastodon" link="https://defcon.social/@ngn">Mastodon</Link>
>Mastodon</Link
>
</li> </li>
</ul> </ul>
<span> <span>
@ -74,8 +72,7 @@
</span> </span>
<ul> <ul>
<li> <li>
<i style="color: var(--{color()});" class="nf nf-md-speedometer_slow" <i style="color: var(--{color()});" class="nf nf-md-speedometer_slow"></i>
></i>
{$_("home.services.speed")} {$_("home.services.speed")}
</li> </li>
<li> <li>
@ -83,8 +80,7 @@
{$_("home.services.security")} {$_("home.services.security")}
</li> </li>
<li> <li>
<i style="color: var(--{color()});" class="nf nf-fa-network_wired" <i style="color: var(--{color()});" class="nf nf-fa-network_wired"></i>
></i>
{$_("home.services.privacy")} {$_("home.services.privacy")}
</li> </li>
<li> <li>

View File

@ -30,11 +30,7 @@
function get_services() { function get_services() {
return services.filter((s) => { return services.filter((s) => {
return ( return s.desc[$locale] !== "" && s.desc[$locale] !== null && s.desc[$locale] !== undefined;
s.desc[$locale] !== "" &&
s.desc[$locale] !== null &&
s.desc[$locale] !== undefined
);
}); });
} }
@ -52,16 +48,10 @@
<main> <main>
<div class="title"> <div class="title">
{#if show_input} {#if show_input}
<input <input oninput={change} type="text" placeholder={$_("services.search")} />
oninput={change}
type="text"
placeholder={$_("services.search")}
/>
{/if} {/if}
<div> <div>
<Link icon="nf-fa-feed" link={api_urljoin("/news/" + $locale)} <Link icon="nf-fa-feed" link={api_urljoin("/news/" + $locale)}>{$_("services.feed")}</Link>
>{$_("services.feed")}</Link
>
</div> </div>
</div> </div>
<div class="services"> <div class="services">

View File

@ -34,15 +34,12 @@
--size-5: 24px; --size-5: 24px;
--size-6: 30px; --size-6: 30px;
--box-shadow-1: --box-shadow-1: rgba(20, 20, 20, 0.19) 0px 10px 20px, rgba(30, 30, 30, 0.23) 0px 6px 6px;
rgba(20, 20, 20, 0.19) 0px 10px 20px, rgba(30, 30, 30, 0.23) 0px 6px 6px; --box-shadow-2: rgba(0, 0, 0, 0.35) 0px 30px 60px -12px inset,
--box-shadow-2:
rgba(0, 0, 0, 0.35) 0px 30px 60px -12px inset,
rgba(20, 20, 20, 0.3) 0px 18px 36px -18px inset; rgba(20, 20, 20, 0.3) 0px 18px 36px -18px inset;
--text-shadow: 3px 2px 8px rgba(50, 50, 50, 0.8); --text-shadow: 3px 2px 8px rgba(50, 50, 50, 0.8);
--background: --background: linear-gradient(rgba(11, 11, 11, 0.808), rgba(1, 1, 1, 0.96)),
linear-gradient(rgba(11, 11, 11, 0.808), rgba(1, 1, 1, 0.96)),
url("/assets/banner.png"); url("/assets/banner.png");
--profile-size: 220px; --profile-size: 220px;
} }

View File

@ -5,9 +5,8 @@
margin: 0; margin: 0;
color: #c9d1d9; color: #c9d1d9;
background-color: #000; background-color: #000;
font-family: font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial,
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
font-size: 16px; font-size: 16px;
line-height: 1.5; line-height: 1.5;
word-wrap: break-word; word-wrap: break-word;
@ -1027,9 +1026,7 @@
} }
.markdown-body .contains-task-list:hover .task-list-item-convert-container, .markdown-body .contains-task-list:hover .task-list-item-convert-container,
.markdown-body .markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
.contains-task-list:focus-within
.task-list-item-convert-container {
display: block; display: block;
width: auto; width: auto;
height: 24px; height: 24px;