]> Lady’s Gitweb - Blog/blob - build.js
a9d2bafc0bb5f624d5654dd3a7f950586e1e5657
[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 } else if (node.nodeType == 3) {
57 node.textContent = node.textContent.replaceAll(":—", ":\u2060—");
58 }
59 };
60
61 globalThis.bjørnTransformMetadata = (metadata, _type) => {
62 processContent(metadata.content);
63 processContent(metadata.summary);
64 };
65
66 globalThis.bjørnTransformFeedHTML = (document, _metadata) => {
67 const LMN = Lemon.bind({ document });
68 const h1 = document.getElementsByTagNameNS(
69 "http://www.w3.org/1999/xhtml",
70 "h1",
71 )[0];
72 const link = LMN.a.href("/")``;
73 for (const child of Array.from(h1.childNodes)) {
74 link.appendChild(child);
75 }
76 h1.appendChild(link);
77 };
78
79 await import(
80 "https://git.ladys.computer/Beorn/blob_plain/0.2.3:/build.js"
81 );
This page took 0.094841 seconds and 3 git commands to generate.