@rr0/cms
Version:
RR0 Content Management System (CMS)
51 lines (50 loc) • 1.86 kB
JavaScript
/**
* Convert meta <link> to HTML <nav> links.
*/
export class MetaLinkReplaceCommand {
constructor(defaultHandler) {
this.defaultHandler = defaultHandler;
}
async execute(context) {
var _a, _b, _c, _d;
const file = context.file;
const dom = file.dom;
const doc = file.document;
const ul = doc.querySelector("nav ul");
if (!ul) {
context.error("Could not find nav list in " + context.file.name);
return;
}
const relStart = file.links.start || ((_a = this.defaultHandler) === null || _a === void 0 ? void 0 : _a.start(context));
if (relStart) {
ul.appendChild(this.linkItem(context, relStart));
}
const relContents = file.links.contents || ((_b = this.defaultHandler) === null || _b === void 0 ? void 0 : _b.contents(context));
if (relContents) {
ul.appendChild(this.linkItem(context, relContents));
}
const relPrev = file.links.prev || ((_c = this.defaultHandler) === null || _c === void 0 ? void 0 : _c.prev(context));
if (relPrev) {
ul.appendChild(this.linkItem(context, relPrev));
}
const relNext = file.links.next || ((_d = this.defaultHandler) === null || _d === void 0 ? void 0 : _d.next(context));
if (relNext) {
ul.appendChild(this.linkItem(context, relNext));
}
file.dom = dom;
}
async contentStepEnd() {
// NOP
}
linkItem(context, link) {
const doc = context.file.document;
const a = doc.createElement("a");
a.className = link.type;
a.textContent = link.text;
a.href = link.url;
const li = doc.createElement("li");
li.appendChild(a);
li.title = context.messages.nav[link.type];
return li;
}
}