]> Lady’s Gitweb - Blog/blob - build.js
e3f78dddeb30559a20ae1be74f333d07601d9b9d
[Blog] / build.js
1 #!/usr/bin/env -S deno run --allow-read --allow-write
2
3 // Copyright © 2023 Lady [@ Lady’s Computer].
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at <https://mozilla.org/MPL/2.0/>.
8
9 import hljs from "npm:highlight.js@11.8.0";
10
11 const processContent = (content) => {
12 if (content == null || Object(content) instanceof String) {
13 /* do nothing */
14 } else if (Array.isArray(content)) {
15 // The provided content is an array.
16 content.forEach(processContent);
17 } else {
18 for (const child of Array.from(content)) {
19 applyHighlighting(child);
20 }
21 }
22 };
23
24 const applyHighlighting = (node) => {
25 if (
26 node.localName == "pre" && node.childNodes.length == 1 &&
27 node.firstChild.localName == "code"
28 ) {
29 const code = node.firstChild;
30 const language = /language-(.*)/u.exec(code.getAttribute("class"))
31 ?.[1];
32 if (language) {
33 try {
34 const { value: highlight } = hljs.highlight(
35 node.firstChild.textContent,
36 { language },
37 );
38 const nodes = new DOMParser().parseFromString(
39 `<!DOCTYPE html><html><body>${highlight}</body></html>`,
40 "text/html",
41 ).documentElement.lastChild.childNodes;
42 code.setAttribute(
43 "class",
44 `hljs ${code.getAttribute("class")}`,
45 );
46 code.textContent = "";
47 for (const node of Array.from(nodes)) {
48 code.appendChild(code.ownerDocument.importNode(node, true));
49 }
50 } catch (e) {
51 console.warn(e);
52 }
53 }
54 } else if (node.nodeType == 1) {
55 Array.from(node.childNodes).forEach(applyHighlighting);
56 }
57 };
58
59 globalThis.bjørnTransformMetadata = (metadata, _type) => {
60 processContent(metadata.content);
61 processContent(metadata.summary);
62 };
63
64 globalThis.bjørnTransformFeedHTML = (document, _metadata) => {
65 const LMN = Lemon.bind({ document });
66 const h1 = document.getElementsByTagNameNS(
67 "http://www.w3.org/1999/xhtml",
68 "h1",
69 )[0];
70 const link = LMN.a.href("/")``;
71 for (const child of Array.from(h1.childNodes)) {
72 link.appendChild(child);
73 }
74 h1.appendChild(link);
75 };
76
77 await import(
78 "https://git.ladys.computer/Beorn/blob_plain/0.2.3:/build.js"
79 );
This page took 0.04511 seconds and 3 git commands to generate.