diff --git a/assets/style2.css b/assets/style2.css index 8f12cc7..d11f24d 100644 --- a/assets/style2.css +++ b/assets/style2.css @@ -13,7 +13,7 @@ body { margin: 0; } -header, section, main { +header, section, main, article { padding: 16px max(calc(50vw - 300px), 16px); } @@ -101,7 +101,6 @@ kbd { box-shadow: 1px 1px #2f2f2f; } - article h1, article h2, article h3, article h4 { padding-top: 0; } diff --git a/blog/feed.xml b/blog/feed.xml new file mode 100644 index 0000000..f6767f5 --- /dev/null +++ b/blog/feed.xml @@ -0,0 +1,18 @@ + + + + + + celery rss + https://celery.eu.org/blog/feed.xml + rss feed for celery.eu.org + + Hello, world! + hello.md + https://celery.eu.org/blog/hello.md +

Hello, world!

+

This is a test blog entry for my new blog system.

+
+ 2024-10-09T21:36:44.914Z +
+
\ No newline at end of file diff --git a/rss.xsl b/blog/feed.xsl similarity index 95% rename from rss.xsl rename to blog/feed.xsl index e117b0f..829efea 100644 --- a/rss.xsl +++ b/blog/feed.xsl @@ -31,11 +31,11 @@

diff --git a/blog/genfeed.ts b/blog/genfeed.ts new file mode 100644 index 0000000..4eeb42a --- /dev/null +++ b/blog/genfeed.ts @@ -0,0 +1,93 @@ +import { Marked } from "npm:marked@11.1.1"; +import hljs from "npm:highlight.js@11.5.1"; +import { markedHighlight } from "npm:marked-highlight@2.1.0"; + +const marked = new Marked( + markedHighlight({ + langPrefix: 'hljs language-', + highlight(code: string, lang: string) { + const language = hljs.getLanguage(lang) ? lang : 'plaintext'; + return hljs.highlight(code, { language }).value; + }, + }) +) + +type Item = { + path: string, + title: string, + content: string, + mtime: Date, +} + +const renderMarkdown = (item: Item) => ` + + + + ${item.title} + + + + + + + +
+

${item.title}

+
+
+ ${marked.parse(item.content.split("\n").slice(2).join("\n"))} +
+ +`.trim(); + +const renderIndex = (entries: Array) => { + const a = [...entries]; + a.sort((a, b) => +b.mtime - +a.mtime); + return renderMarkdown({ + title: "index", + mtime: new Date(), + path: "/index.html", + content: "\n\n" + a.map(i => `- [${i.title}](${i.path})`).join("\n"), + }); +} + +const renderItem = (item: Item) => ` + + ${item.title} + ${item.path} + https://celery.eu.org/blog/${item.path} + ${marked.parse(item.content)} + ${item.mtime.toISOString()} + +`.trim(); + +const renderFeed = (entries: Array) => ` + + + + + + celery rss + https://celery.eu.org/blog/feed.xml + rss feed for celery.eu.org +${entries.map(renderItem)} + +`.trim(); + +const fileNames = [...Deno.readDirSync(".")].filter(i => i.name.endsWith(".md") && i.isFile).map(i => i.name); +const files: Array = fileNames.map(i => { + const stat = Deno.statSync(i); + const text = Deno.readTextFileSync(i); + return { + title: text.split("\n")[0].slice("# ".length), + mtime: stat.mtime!, + content: text, + path: i, + } +}); + +Deno.writeTextFileSync("feed.xml", renderFeed(files)); +Deno.writeTextFileSync("index.html", renderIndex(files)); +for (const file of files) { + Deno.writeTextFileSync(file.path.replace(/\.md$/, ".html"), renderMarkdown(file)); +} diff --git a/blog/hello.html b/blog/hello.html new file mode 100644 index 0000000..23aac74 --- /dev/null +++ b/blog/hello.html @@ -0,0 +1,20 @@ + + + + Hello, world! + + + + + + + +
+

Hello, world!

+
+
+

This is a test blog entry for my new blog system.

+ +
+ + \ No newline at end of file diff --git a/blog/hello.md b/blog/hello.md new file mode 100644 index 0000000..4bf335d --- /dev/null +++ b/blog/hello.md @@ -0,0 +1,3 @@ +# Hello, world! + +This is a test blog entry for my new blog system. diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..ae3cca4 --- /dev/null +++ b/blog/index.html @@ -0,0 +1,22 @@ + + + + index + + + + + + + +
+

index

+
+ + + \ No newline at end of file diff --git a/rss.xml b/rss-old.xml similarity index 100% rename from rss.xml rename to rss-old.xml diff --git a/rss.css b/rss.css deleted file mode 100644 index 8b13789..0000000 --- a/rss.css +++ /dev/null @@ -1 +0,0 @@ -