UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

49 lines (48 loc) 1.98 kB
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; } }