@rr0/cms
Version:
RR0 Content Management System (CMS)
75 lines (74 loc) • 2.63 kB
JavaScript
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 = ", ";
}
}
}