@rr0/cms
Version:
RR0 Content Management System (CMS)
40 lines (39 loc) • 1.97 kB
JavaScript
import { DomReplaceCommand } from "ssg-api";
/**
* Determine page language and ddd links to page language variants,
*/
export class LanguageReplaceCommand extends DomReplaceCommand {
constructor() {
super("#alternate", undefined);
}
async createReplacer(context) {
const doc = context.file.document;
return new class {
async replace(original) {
if (!original.hasChildNodes()) {
const inputFile = context.file;
const langInfo = inputFile.lang;
const variants = langInfo.variants;
const foundLang = langInfo.lang;
const pageLang = variants.includes("en") ?
foundLang ? foundLang : "fr" : variants.includes("fr") ?
foundLang ? foundLang : "en"
: "fr";
context.file.document.documentElement.lang = inputFile.lang.lang = pageLang;
const langVariants = variants.length == 1 && variants[0] == "" ? [pageLang == "fr" ? "en" : "fr"] : variants;
const fileName = inputFile.name;
for (let i = 0; i < langVariants.length; i++) {
const langVariant = langVariants[i];
const altLink = doc.createElement("a");
altLink.href = "/" + fileName.replace((foundLang ? "_" + foundLang : "") + ".", `${variants[i] == "" ? "" : "_" + langVariant}.`);
const altText = langVariant === "en" ? "English version" : "Version française";
altLink.textContent = Buffer.from(altText, "utf-8").toString();
original.appendChild(altLink);
context.debug("Added translation link", original.outerHTML, "in", fileName);
}
}
return original;
}
};
}
}