import Database from "better-sqlite3";
import express from "express";
import grimm from "../grimm.js";
import {
getRubricFilters,
comparePages,
getComments,
highlightFilter,
prettyRender,
rubric
} from "../helpers.js";
const router = express.Router();
const db = new Database("./db/site.db");
db.pragma("journal_mode = DELETE");
const filters = Object.assign(getRubricFilters(rubric), highlightFilter);
const archives = () => {
const articles = db
.prepare(
`Select pagesets.pagesetID, editions.editionID, editions.lang, editions.title
From editions
Join pagesets
On editions.translates = pagesets.pagesetID
Where editions.translates Like 'latbs%'`
)
.all();
let archive = {};
for (const art of articles) {
art.slug = art.editionID.replace("latbs/", "");
art.translates = art.pagesetID.replace("latbs/", "");
if (art.translates in archive) {
archive[art.translates][art.lang] = art;
} else {
archive[art.translates] = {};
archive[art.translates][art.lang] = art;
}
}
return archive;
};
const displayPage = async (slug, res, next) => {
const page = db
.prepare(
`Select * From editions
Join pagesets
On editions.translates = pagesets.pagesetID
Where editions.editionID = ?`
)
.get(slug);
if (page === undefined) {
return next();
}
page.cache = page?.cache === 1 || page?.cache === true;
const comments = getComments(slug);
const translations = page.translates
? db
.prepare(
`Select * From editions
Join pagesets
On editions.translates = pagesets.pagesetID
Where editions.translates = ?`
)
.all(page.translates)
.sort(comparePages)
: [];
const tags =
db
.prepare(
`Select tags.tagID As tagID, tags.defaultName As defaultName
From taggings
Inner Join tags
On taggings.tag = tags.tagID
Where taggings.pageset = ?`
)
.all(page.editionID) || [];
const toSendOver = {
slug: slug,
comments: comments,
translations: translations,
tags: tags,
grimm: grimm,
tr: grimm.translator(page.lang),
baseDomain: "satyrs.eu",
qua: text => `/${page.translates}/${text}`,
archives: archives(),
compileDebug: true,
filters: filters
};
try {
toSendOver.annexe = (
await import(`../../hypertext/public/${page.translates}/annexe`)
).default;
} catch (err) {}
Object.assign(toSendOver, page);
return prettyRender(
res,
next,
`${page.translates}/${page.lang}`,
toSendOver
);
};
router.get(
"/:pageSlug([^\\.]+)",
async (req, res, next) =>
await displayPage(
"latbs/" + req.params.pageSlug.replace(/\/$/, ""),
res,
next
)
);
router.get(
"/",
async (req, res, next) => await displayPage("latbs", res, next)
);
export default router;