@rr0/cms
Version:
RR0 Content Management System (CMS)
37 lines (36 loc) • 1.18 kB
JavaScript
export class EventReplacer {
constructor(renderer, dataService) {
this.renderer = renderer;
this.dataService = dataService;
}
async replacement(context, original) {
const outputDoc = context.file.document;
const replacement = outputDoc.createElement("span");
const href = original.href || original.dataset.href;
await this.sourceFromFile(context, replacement, href);
return replacement;
}
async sourceFromFile(context, container, href) {
const data = await this.dataService.getFromDir(href, ["event"], ["index.json"]);
if (data.length <= 0) {
throw new Error("Could not find metadata in " + href);
}
await this.renderer.render(context, data[0], container);
}
}
/**
* Creates replacers for sources HTML in a given context.
*/
export class EventReplacerFactory {
constructor(replacer) {
this.replacer = replacer;
}
async create(context) {
const replacer = this.replacer;
return {
async replace(original) {
return replacer.replacement(context, original);
}
};
}
}