diff --git a/deno.lock b/deno.lock
index 1d63253..e736f75 100644
--- a/deno.lock
+++ b/deno.lock
@@ -666,7 +666,6 @@
"https://deno.land/x/lume@v3.0.2/deps/hex.ts": "828718f24a780ff3ade8d0a8a5b57497cb31c257560ef12af99b6eb1a31e3bbd",
"https://deno.land/x/lume@v3.0.2/deps/highlight.ts": "e8f830a1137ff7e8246ce21518452b8cbf8089db409458c6d9c31040c11d8428",
"https://deno.land/x/lume@v3.0.2/deps/http.ts": "6d9add7c6fe0c0381050aa773ae8590166ccc84c5115d2cde271320c315a110d",
- "https://deno.land/x/lume@v3.0.2/deps/icons.ts": "4379e1443d982ab4f85237342d165ae54c981cdb7e06480c222d208999e21f15",
"https://deno.land/x/lume@v3.0.2/deps/init.ts": "05d45af66ebdfe63e43540618f51ece8f99d98dc49de890f10eeb43abe9ed0f3",
"https://deno.land/x/lume@v3.0.2/deps/jsonc.ts": "79f0eddc3c9e593310eb8e5918eb1506b1c7d7816e4ecb96894f634ecbe626ff",
"https://deno.land/x/lume@v3.0.2/deps/lightningcss.ts": "5f5167c6eb306ef759f0043f8f33f2eaf63c69210aa1aa837505e990ee619c46",
@@ -692,7 +691,6 @@
"https://deno.land/x/lume@v3.0.2/plugins/code_highlight.ts": "ac6327e688e9e8fbd7798bdcc5f76b46d27db3e22ea3b74f545dc3296e8a1261",
"https://deno.land/x/lume@v3.0.2/plugins/extract_date.ts": "38af8e5960d66a74a72977eb19521da4353ab32d3941e97c1526aa3b91175a9e",
"https://deno.land/x/lume@v3.0.2/plugins/feed.ts": "b07aed4cda270cfaacb26f9974dbb962f936dbfde4d770c53e478e4682c791e1",
- "https://deno.land/x/lume@v3.0.2/plugins/icons.ts": "c69428254024d694eca34f9b5c4888aedf83d2d9b38f860533952c28cc814333",
"https://deno.land/x/lume@v3.0.2/plugins/inline.ts": "737d7de09d196476b55ecbe7ddb0e651ba2d5d39ca5a418cb15ff48e124907c1",
"https://deno.land/x/lume@v3.0.2/plugins/json.ts": "5c49499e56b919ec848d4118ec97dd4fe0a323a6cc4c648dc45ab55297614c12",
"https://deno.land/x/lume@v3.0.2/plugins/lightningcss.ts": "6b5236cc78c1ae4af5b4a0037a0345797381f5043c667ae1ddeb4f67e445c7c4",
diff --git a/site.ts b/site.ts
index 89c4035..7b59c63 100644
--- a/site.ts
+++ b/site.ts
@@ -1,25 +1,25 @@
import lume from "lume/mod.ts";
-import extract_date from "lume/plugins/extract_date.ts";
-import code_highlight from "lume/plugins/code_highlight.ts";
+import extractDate from "lume/plugins/extract_date.ts";
+import codeHighlight from "lume/plugins/code_highlight.ts";
import redirects from "lume/plugins/redirects.ts";
import tailwindcss from "lume/plugins/tailwindcss.ts";
import lightningcss from "lume/plugins/lightningcss.ts";
-import resolve_urls from "lume/plugins/resolve_urls.ts";
-import slugify_urls from "lume/plugins/slugify_urls.ts";
-import check_urls from "lume/plugins/check_urls.ts";
+import resolveUrls from "lume/plugins/resolve_urls.ts";
+import slugifyUrls from "lume/plugins/slugify_urls.ts";
+import checkUrls from "lume/plugins/check_urls.ts";
import inline from "lume/plugins/inline.ts";
import feed from "lume/plugins/feed.ts";
import sitemap from "lume/plugins/sitemap.ts";
-import minify_html from "lume/plugins/minify_html.ts";
+import minifyHtml from "lume/plugins/minify_html.ts";
-const site_name = "RGBCube";
-const site_description =
+const siteName = "RGBCube";
+const siteDescription =
"The home directory and journal of RGBCube and his work.";
const author = "RGBCube";
const color = "#00FFFF";
-const path_assets = "/assets";
+const pathAssets = "/assets";
const site = lume({
src: "./site",
@@ -31,9 +31,9 @@ const site = lume({
site.data("layout", "default.vto");
-site.data("site_name", site_name);
-site.data("title", site_name);
-site.data("description", site_description);
+site.data("site_name", siteName);
+site.data("title", siteName);
+site.data("description", siteDescription);
site.data("author", author);
site.data("color", color);
@@ -69,20 +69,52 @@ site.process([".html"], (pages) => {
element.parentNode!.insertBefore(wrapper, element);
wrapper.appendChild(element);
});
+
+ document
+ .querySelectorAll(".text-content :where(h1, h2, h3, h4, h5, h6)")
+ .forEach((header) => {
+ if (header.id || header.closest("a") || header.querySelector("a")) {
+ return;
+ }
+
+ const textNormalized = header
+ .textContent!
+ .toLowerCase()
+ .replace(/[^a-z0-9\s-]/g, "")
+ .replace(/\s+/g, "-")
+ .replace(/-+/g, "-")
+ .trim();
+
+ let textUnique = textNormalized;
+ let counter = 1;
+
+ while (document.getElementById(textUnique)) {
+ counter++;
+ textUnique = `${textNormalized}-${counter}`;
+ }
+
+ header.id = textUnique;
+
+ const link = document.createElement("a");
+ link.setAttribute("href", "#" + textUnique);
+
+ header.parentNode!.insertBefore(link, header);
+ link.appendChild(header);
+ });
});
});
-site.use(extract_date());
+site.use(extractDate());
site.use(redirects());
site.use(tailwindcss());
-site.use(code_highlight());
+site.use(codeHighlight());
-site.use(resolve_urls());
-site.use(slugify_urls({
+site.use(resolveUrls());
+site.use(slugifyUrls({
extensions: "*",
}));
-site.use(check_urls({
+site.use(checkUrls({
strict: true,
throw: true,
}));
@@ -95,12 +127,12 @@ site.use(feed({
limit: Infinity,
info: {
- title: site_name,
- description: site_description,
+ title: siteName,
+ description: siteDescription,
authorName: author,
- image: `${path_assets}/icons/icon.webp`,
- icon: `${path_assets}/icons/icon.webp`,
+ image: `${pathAssets}/icons/icon.webp`,
+ icon: `${pathAssets}/icons/icon.webp`,
color,
@@ -122,7 +154,7 @@ site.use(sitemap({
site.use(lightningcss()); // TODO: LightningCSS doesn't handle inline styles.
site.use(inline());
-site.use(minify_html({
+site.use(minifyHtml({
options: {
// TODO: This breaks tailwind.
// minify_css: true,
diff --git a/site/404.vto b/site/404.vto
index 209b2ad..62f4a22 100644
--- a/site/404.vto
+++ b/site/404.vto
@@ -4,10 +4,20 @@ prevent_zoom: true
---
@@ -28,4 +38,6 @@ prevent_zoom: true
{{ set cube_face_top = cube_face }}
{{ set cube_face_bottom = cube_face }}
+{{ set cube_size = "5rem" }}
+{{ set cube_last = true }}
{{ include "cube.vto" }}
diff --git a/site/_includes/cube.vto b/site/_includes/cube.vto
index 814701c..d88bc3d 100644
--- a/site/_includes/cube.vto
+++ b/site/_includes/cube.vto
@@ -1,44 +1,43 @@
-
+{{ /if }}
-
+
{{ article.date.toISOString().slice(2, 10).replaceAll("-", " ") }}
-
{{ article.title |> md }}