sourceapproutesmain.js

import Database from "better-sqlite3";
import express from "express";

import gazetteer from "../gazetteer.js";
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 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 toSendOver = {
		slug: slug,
		comments: comments,
		translations: translations,

		gazetteer: gazetteer,
		grimm: grimm,
		tr: grimm.translator(page.lang),

		baseDomain: "satyrs.eu",

		qua: text => `/${page.translates}/${text}`, // Short for “qualify”
		compileDebug: true,
		filters: filters
	};

	try {
		toSendOver.annexe = (
			await import(`../../hypertext/public/${page.translates}/annexe.js`)
		).default;
	} catch (e) {}

	Object.assign(toSendOver, page);

	return prettyRender(
		res,
		next,
		`${page.translates}/${page.lang}`,
		toSendOver
	);
};

router.get("/:pageSlug([^\\.]+)", async (req, res, next) =>
	await displayPage(req.params.pageSlug.replace(/\/$/, ""), res, next)
);

/* GET home page. */
router.get("/", async (req, res, next) => await displayPage("index", res, next));

export default router;