add date index

This commit is contained in:
Simon 2025-05-05 22:57:06 +02:00
parent 72f964373e
commit bc1cea780a
5 changed files with 94 additions and 5 deletions

49
main.ts
View File

@ -1,5 +1,8 @@
import { DOMParser } from "jsr:@b-fuze/deno-dom";
const ARTICLES_ID_MIN = 87;
const ARTICLES_ID_MAX = 88;
const downloadDate = new Date();
type ArticleInfo = {
@ -132,6 +135,42 @@ function renderIndex(articles: ArticleInfo[]): string {
);
}
const datesTemplate = await Deno.readTextFile("templates/dates.html");
function renderDateIndex(articles: ArticleInfo[]): string {
return datesTemplate
.slice()
.replaceAll("$downloadDate", downloadDate.toUTCString())
.replaceAll(
"$articleEntriesByDate",
articles
.toSorted((a, b) =>
new Date(a.dateAdded).getTime() -
new Date(b.dateAdded).getTime()
)
.map((article) => `
<tr>
<td>
<a href="article-${article.id}.html">
${article.title}
</a>
</td>
<td>${article.author}</td>
<td class="article-date">${
new Date(article.dateAdded).toUTCString()
}</td>
<td>${(
article.tags.map((tag) => `
<a href="categories.html#${tag}">
<span class="tag">${tag}</span>
</a>
`).join(", ")
)}</td>
</tr>
`).join(""),
);
}
const categoriesTemplate = await Deno.readTextFile("templates/categories.html");
function renderCategories(articles: ArticleInfo[]): string {
@ -176,8 +215,8 @@ function renderCategories(articles: ArticleInfo[]): string {
await Deno.mkdir("build/articles", { recursive: true });
const articlesIdMin = 1;
const articlesIdMax = 87;
const articlesIdMin = ARTICLES_ID_MIN;
const articlesIdMax = ARTICLES_ID_MAX;
const articles: ArticleInfo[] = [];
for (let id = articlesIdMin; id <= articlesIdMax; ++id) {
@ -205,6 +244,12 @@ console.log("Building index...");
const indexHtml = renderIndex(articles);
await Deno.writeTextFile("build/articles/index.html", indexHtml);
console.log("Index written to 'build/articles/index.html'!");
console.log("Building date index...");
const dateIndexHtml = renderDateIndex(articles);
await Deno.writeTextFile("build/articles/dates.html", dateIndexHtml);
console.log("Date index written to 'build/articles/dates.html'!");
console.log("Building categories...");
const categoriesHtml = renderCategories(articles);
await Deno.writeTextFile("build/articles/categories.html", categoriesHtml);

View File

@ -20,6 +20,10 @@ table {
border-collapse: collapse;
}
td {
padding: 5px;
}
td.article-date {
white-space: nowrap;
}

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="PROLETARIANREVOLUTION.NET">
<meta name="description" content="Categories">
<meta name="description" content="Articles by category">
<link rel="stylesheet" href="style.css">
</head>
<body class="index">
@ -16,6 +16,7 @@
</header>
<nav>
<a href="index.html">Index</a>
<a href="dates.html">Organized by date</a>
</nav>
<main>
<h1 id="title">

37
templates/dates.html Normal file
View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="PROLETARIANREVOLUTION.NET">
<meta name="description" content="Articles by date">
<link rel="stylesheet" href="style.css">
</head>
<body class="index">
<header>
Mirror website of
<a href="https://proletarianrevolution.net/">
PROLETARIANREVOLUTION.NET
</a>
</header>
<nav>
<a href="index.html">Index</a>
<a href="categories.html">Organized by categories</a>
</nav>
<main>
<h1 id="title">
Articles sorted by dates (first to last)
</h1>
<p>The articles were downloaded $downloadDate.</p>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Date added</th>
<th>Tags</th>
</tr>
$articleEntriesByDate
</table>
</main>
</body>
</html>

View File

@ -20,8 +20,10 @@
</h1>
<p>The articles were downloaded $downloadDate.</p>
<p>
See also the articles <a href="categories.html"
>organized by categories</a>.
See also the articles organized
<a href="categories.html">by categories</a>
or
<a href="dates.html">by dates</a>.
</p>
<table>
<tr>