@rr0/cms
Version:
RR0 Content Management System (CMS)
49 lines (48 loc) • 1.98 kB
JavaScript
export class PeopleReplacer {
constructor(service, renderer) {
this.service = service;
this.renderer = renderer;
}
async replacement(context, element) {
const title = element.title;
const peopleContent = element.textContent;
let peopleStr = peopleContent;
if (title) {
peopleStr = title;
}
const leftParent = peopleStr.indexOf("(");
if (leftParent > 0) {
peopleStr = peopleStr.substring(0, leftParent).trim();
}
peopleStr = peopleStr.trim().replaceAll("\n", "").replace(/ /g, " ");
let people = this.service.cache.get(peopleStr);
if (!people) {
people = this.service.createFromTitle(peopleStr);
}
let url = people.dirName;
let replacement;
const currentFileName = context.file.name;
const dirName = currentFileName.substring(0, currentFileName.indexOf("/index"));
if (url && url !== dirName) {
// const urlAbsolute = UrlUtil.absolute(url)
const peopleList = await this.service.getFromDir(url);
const pseudoPeopleList = [];
const allCountries = new Set();
const occupations = new Set;
const peopl = peopleList[0] || people;
replacement = this.renderer.renderLink(context, peopl, pseudoPeopleList, allCountries, occupations, [], peopleContent);
}
else {
const span = context.file.document.createElement("span");
span.className = "peopl"; // People not found
span.textContent = peopleStr;
replacement = span;
}
if (people.pseudonyms.includes(peopleContent)) {
replacement.classList.add("pseudonym");
}
replacement.translate = false; // Don't translate names
context.debug("\tReplacing people", element.outerHTML, "with", replacement.outerHTML);
return replacement;
}
}