Compare commits
27 Commits
dba65911a6
...
main
Author | SHA1 | Date | |
---|---|---|---|
c287ffa086
|
|||
26d656896e | |||
734bbdb998 | |||
7e8a927bb3 | |||
f08b04e710 | |||
fa6c1d8b2c | |||
0c1e07b779 | |||
c615409a42 | |||
da50365380 | |||
68f5480ff1 | |||
12216ca0f7 | |||
7e407b181d | |||
4f0e911407 | |||
b447c8cf13 | |||
e212d43bf2 | |||
2bf94c0f3c | |||
3f49d8294a | |||
323b76fe98 | |||
f714bc6eaa | |||
8ad2778dd0 | |||
0d99a7da69 | |||
c049f6c44a | |||
9acbe212ad | |||
aa29cca4f4 | |||
afc0a30660 | |||
647634addc | |||
1ffd51b641 |
@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.24.4
|
FROM golang:1.24.5
|
||||||
|
|
||||||
WORKDIR /api
|
WORKDIR /api
|
||||||
|
|
||||||
|
@ -11,4 +11,7 @@ run:
|
|||||||
format:
|
format:
|
||||||
gofmt -s -w .
|
gofmt -s -w .
|
||||||
|
|
||||||
.PHONY: test format
|
clean:
|
||||||
|
rm -f *.elf
|
||||||
|
|
||||||
|
.PHONY: test format clean
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
module github.com/ngn13/website/api
|
module github.com/ngn13/website/api
|
||||||
|
|
||||||
go 1.24.0
|
go 1.24.5
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gofiber/fiber/v2 v2.52.8
|
github.com/gofiber/fiber/v2 v2.52.8
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
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=
|
||||||
@ -15,12 +13,8 @@ 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=
|
||||||
|
@ -1,2 +1 @@
|
|||||||
engine-strict=true
|
engine-strict=true
|
||||||
resolution-mode=highest
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"tabWidth": 2,
|
"tabWidth": 2,
|
||||||
"singleQuote": false,
|
"singleQuote": false,
|
||||||
"trailingComma": "es5",
|
"trailingComma": "es5",
|
||||||
"printWidth": 100,
|
"printWidth": 80,
|
||||||
"plugins": ["prettier-plugin-svelte"],
|
"plugins": ["prettier-plugin-svelte"],
|
||||||
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||||
}
|
}
|
||||||
|
49
app/package-lock.json
generated
49
app/package-lock.json
generated
@ -9,7 +9,7 @@
|
|||||||
"version": "6.3",
|
"version": "6.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dompurify": "^3.2.3",
|
"dompurify": "^3.2.3",
|
||||||
"marked": "^15.0.6",
|
"marked": "^16.0.0",
|
||||||
"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.12",
|
"version": "5.2.13",
|
||||||
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.12.tgz",
|
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.13.tgz",
|
||||||
"integrity": "sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ==",
|
"integrity": "sha512-yS2TVFmIrxjGhYaV5/iIUrJ3mJl6zjaYn0lBD70vTLnYvJeqf3cjvLXeXCUCuYinhSBoyF4DpfGla49BnIy7sQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -867,9 +867,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/kit": {
|
"node_modules/@sveltejs/kit": {
|
||||||
"version": "2.21.3",
|
"version": "2.22.5",
|
||||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.21.3.tgz",
|
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.22.5.tgz",
|
||||||
"integrity": "sha512-Bd05srNOaqP05qnytjg/KkWNlkcwEpE76s0xGSlgzL4I8pLyrK3c9+a7zMCquoiEEIZF2ecGTn6Fj/lELjaa8A==",
|
"integrity": "sha512-l5i+LcDaoymD2mg5ziptnHmzzF79+c9twJiDoLWAPKq7afMEe4mvGesJ+LVtm33A92mLzd2KUHgtGSqTrvfkvg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -884,8 +884,7 @@
|
|||||||
"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"
|
||||||
@ -894,9 +893,9 @@
|
|||||||
"node": ">=18.13"
|
"node": ">=18.13"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0",
|
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
|
||||||
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
||||||
"vite": "^5.0.3 || ^6.0.0"
|
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/vite-plugin-svelte": {
|
"node_modules/@sveltejs/vite-plugin-svelte": {
|
||||||
@ -1204,9 +1203,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esrap": {
|
"node_modules/esrap": {
|
||||||
"version": "1.4.9",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.9.tgz",
|
"resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz",
|
||||||
"integrity": "sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==",
|
"integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/sourcemap-codec": "^1.4.15"
|
"@jridgewell/sourcemap-codec": "^1.4.15"
|
||||||
@ -1385,15 +1384,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/marked": {
|
"node_modules/marked": {
|
||||||
"version": "15.0.12",
|
"version": "16.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
|
"resolved": "https://registry.npmjs.org/marked/-/marked-16.0.0.tgz",
|
||||||
"integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
|
"integrity": "sha512-MUKMXDjsD/eptB7GPzxo4xcnLS6oo7/RHimUMHEDRhUooPwmN9BEpMl7AEOJv3bmso169wHI2wUF9VQgL7zfmA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"marked": "bin/marked.js"
|
"marked": "bin/marked.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 20"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/memoizee": {
|
"node_modules/memoizee": {
|
||||||
@ -1516,9 +1515,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
"node_modules/prettier": {
|
||||||
"version": "3.5.3",
|
"version": "3.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
|
||||||
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -1650,9 +1649,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/svelte": {
|
"node_modules/svelte": {
|
||||||
"version": "5.33.19",
|
"version": "5.35.6",
|
||||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.33.19.tgz",
|
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.35.6.tgz",
|
||||||
"integrity": "sha512-udmgc1nnGeAgnfVJjOMfSOAqPAKv8N65MWN2kDuxo6BZthTaUcsLh4vP8bdZC0bMXLGn69smSZXgQOeuZBOn4Q==",
|
"integrity": "sha512-p7PVLQYrvCxJuxzGfOv/l71hVuHC6EZk5UDjbt/bndMYaBcUV5sFjDsj+PSIYvz1vcfbG6inX83/xIUeik1xGA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ampproject/remapping": "^2.3.0",
|
"@ampproject/remapping": "^2.3.0",
|
||||||
@ -1664,7 +1663,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": "^1.4.8",
|
"esrap": "^2.1.0",
|
||||||
"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",
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dompurify": "^3.2.3",
|
"dompurify": "^3.2.3",
|
||||||
"marked": "^15.0.6",
|
"marked": "^16.0.0",
|
||||||
"svelte-i18n": "^4.0.1"
|
"svelte-i18n": "^4.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,11 +13,14 @@ function api_urljoin(path = null, query = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function api_check_err(json) {
|
function api_check_err(json) {
|
||||||
if (!("error" in json)) throw new Error('API response is missing the "error" key');
|
if (!("error" in json))
|
||||||
|
throw new Error('API response is missing the "error" key');
|
||||||
|
|
||||||
if (json["error"] != "") throw new Error(`API returned an error: ${json["error"]}`);
|
if (json["error"] != "")
|
||||||
|
throw new Error(`API returned an error: ${json["error"]}`);
|
||||||
|
|
||||||
if (!("result" in json)) throw new Error('API response is missing the "result" key');
|
if (!("result" in json))
|
||||||
|
throw new Error('API response is missing the "result" key');
|
||||||
}
|
}
|
||||||
|
|
||||||
async function api_http_get(fetch, url) {
|
async function api_http_get(fetch, url) {
|
||||||
@ -39,4 +42,10 @@ 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 { api_version, api_urljoin, api_get_metrics, api_get_services, api_get_projects };
|
export {
|
||||||
|
api_version,
|
||||||
|
api_urljoin,
|
||||||
|
api_get_metrics,
|
||||||
|
api_get_services,
|
||||||
|
api_get_projects,
|
||||||
|
};
|
||||||
|
@ -5,7 +5,8 @@ function doc_urljoin(path = null, query = {}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doc_check_err(json) {
|
function doc_check_err(json) {
|
||||||
if ("error" in json) throw new Error(`Documentation server returned an error: ${json["error"]}`);
|
if ("error" in json)
|
||||||
|
throw new Error(`Documentation server returned an error: ${json["error"]}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function doc_http_get(fetch, url) {
|
async function doc_http_get(fetch, url) {
|
||||||
|
@ -18,7 +18,9 @@
|
|||||||
<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}>{$_("footer.source")}</Link>
|
<Link link={import.meta.env.WEBSITE_SOURCE_URL} bold={true}
|
||||||
|
>{$_("footer.source")}</Link
|
||||||
|
>
|
||||||
</span>
|
</span>
|
||||||
<span>/</span>
|
<span>/</span>
|
||||||
<span>
|
<span>
|
||||||
|
@ -28,7 +28,8 @@ 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"))) locale_select(l);
|
if (browser && null !== (l = localStorage.getItem("locale")))
|
||||||
|
locale_select(l);
|
||||||
else locale_select(locale_from_browser());
|
else locale_select(locale_from_browser());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,13 @@
|
|||||||
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="text-decoration-color: var(--{color()}); {is_active() ? `color: var(--${color()})` : ''}"
|
style="
|
||||||
|
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}
|
||||||
|
@ -15,9 +15,13 @@
|
|||||||
<p>{service.desc[$locale]}</p>
|
<p>{service.desc[$locale]}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="links">
|
<div class="links">
|
||||||
<Link highlight={false} link={service.clear}><Icon icon="nf-oct-link" /></Link>
|
<Link highlight={false} link={service.clear}
|
||||||
|
><Icon icon="nf-oct-link" /></Link
|
||||||
|
>
|
||||||
{#if service.onion != ""}
|
{#if service.onion != ""}
|
||||||
<Link highlight={false} link={service.onion}><Icon icon="nf-linux-tor" /></Link>
|
<Link highlight={false} link={service.onion}
|
||||||
|
><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}
|
||||||
|
@ -59,7 +59,9 @@
|
|||||||
<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">Mastodon</Link>
|
<Link icon="nf-md-mastodon" link="https://defcon.social/@ngn"
|
||||||
|
>Mastodon</Link
|
||||||
|
>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<span>
|
<span>
|
||||||
@ -72,7 +74,8 @@
|
|||||||
</span>
|
</span>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<i style="color: var(--{color()});" class="nf nf-md-speedometer_slow"></i>
|
<i style="color: var(--{color()});" class="nf nf-md-speedometer_slow"
|
||||||
|
></i>
|
||||||
{$_("home.services.speed")}
|
{$_("home.services.speed")}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -80,7 +83,8 @@
|
|||||||
{$_("home.services.security")}
|
{$_("home.services.security")}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<i style="color: var(--{color()});" class="nf nf-fa-network_wired"></i>
|
<i style="color: var(--{color()});" class="nf nf-fa-network_wired"
|
||||||
|
></i>
|
||||||
{$_("home.services.privacy")}
|
{$_("home.services.privacy")}
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -30,7 +30,11 @@
|
|||||||
|
|
||||||
function get_services() {
|
function get_services() {
|
||||||
return services.filter((s) => {
|
return services.filter((s) => {
|
||||||
return s.desc[$locale] !== "" && s.desc[$locale] !== null && s.desc[$locale] !== undefined;
|
return (
|
||||||
|
s.desc[$locale] !== "" &&
|
||||||
|
s.desc[$locale] !== null &&
|
||||||
|
s.desc[$locale] !== undefined
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,10 +52,16 @@
|
|||||||
<main>
|
<main>
|
||||||
<div class="title">
|
<div class="title">
|
||||||
{#if show_input}
|
{#if show_input}
|
||||||
<input oninput={change} type="text" placeholder={$_("services.search")} />
|
<input
|
||||||
|
oninput={change}
|
||||||
|
type="text"
|
||||||
|
placeholder={$_("services.search")}
|
||||||
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
<div>
|
<div>
|
||||||
<Link icon="nf-fa-feed" link={api_urljoin("/news/" + $locale)}>{$_("services.feed")}</Link>
|
<Link icon="nf-fa-feed" link={api_urljoin("/news/" + $locale)}
|
||||||
|
>{$_("services.feed")}</Link
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="services">
|
<div class="services">
|
||||||
|
@ -34,12 +34,15 @@
|
|||||||
--size-5: 24px;
|
--size-5: 24px;
|
||||||
--size-6: 30px;
|
--size-6: 30px;
|
||||||
|
|
||||||
--box-shadow-1: rgba(20, 20, 20, 0.19) 0px 10px 20px, rgba(30, 30, 30, 0.23) 0px 6px 6px;
|
--box-shadow-1:
|
||||||
--box-shadow-2: rgba(0, 0, 0, 0.35) 0px 30px 60px -12px inset,
|
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,
|
||||||
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: linear-gradient(rgba(11, 11, 11, 0.808), rgba(1, 1, 1, 0.96)),
|
--background:
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
color: #c9d1d9;
|
color: #c9d1d9;
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial,
|
font-family:
|
||||||
sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica,
|
||||||
|
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;
|
||||||
@ -1026,7 +1027,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.markdown-body .contains-task-list:hover .task-list-item-convert-container,
|
.markdown-body .contains-task-list:hover .task-list-item-convert-container,
|
||||||
.markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
|
.markdown-body
|
||||||
|
.contains-task-list:focus-within
|
||||||
|
.task-list-item-convert-container {
|
||||||
display: block;
|
display: block;
|
||||||
width: auto;
|
width: auto;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
|
Reference in New Issue
Block a user