UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

75 lines (74 loc) 2.63 kB
import { TimeContext } from "@rr0/time"; /** * Render a case summary for a RR0 web page. */ export class SourceRenderer { constructor(timeTextBuilder) { this.timeTextBuilder = timeTextBuilder; } render(context, source) { const sourceEl = context.file.document.createElement("span"); sourceEl.className = "source"; this.renderContent(context, source, sourceEl); return sourceEl; } renderContent(context, source, container) { const doc = context.file.document; const sourceContext = context.clone(); const authors = source.authors; if ((authors === null || authors === void 0 ? void 0 : authors.length) > 0) { let sep = ""; for (const author of authors) { const peopleTag = doc.createElement("span"); peopleTag.className = "people"; peopleTag.textContent = author; container.append(sep, peopleTag); sep = " & "; // Will be escaped as & } container.append(` : `); } const pubItems = []; const title = source.title; if (title) { if (source.url) { // Online source? const sourceLink = doc.createElement("a"); sourceLink.innerHTML = title; sourceLink.href = source.url; pubItems.push(sourceLink); } else { pubItems.push(title); } } const publication = source.publication; if (publication) { const publisher = publication.publisher; if (publisher) { const copyright = doc.createElement("i"); copyright.textContent = publisher; pubItems.push(copyright); } let timeValue = publication.time; if (timeValue) { sourceContext.time.reset(); if (timeValue instanceof TimeContext) { if (timeValue.isDefined()) { Object.assign(sourceContext.time, timeValue); } } else { sourceContext.time.updateFromStr(timeValue); } pubItems.push(this.timeTextBuilder.build(sourceContext)); } if (source.index) { pubItems.push(source.index.toString()); } } let sep = ""; for (const pubItem of pubItems) { container.append(sep, pubItem); sep = ", "; } } }