@rr0/cms
Version:
RR0 Content Management System (CMS)
67 lines (66 loc) • 3.22 kB
JavaScript
import { AbstractDataService, EventDataFactory, RR0EventFactory } from "@rr0/data";
import { RR0ContextImpl } from "../RR0Context.js";
import { StringUtil } from "../util/index.js";
export class TimeService extends AbstractDataService {
constructor(dataService, options, timePathRegex = TimeService.defaultRegex) {
super(dataService, new EventDataFactory(new RR0EventFactory(), ["birth", "death", "image", "book", "article", "sighting", "nationality", "move", "occupation"], options.files), options.files);
this.options = options;
this.timePathRegex = timePathRegex;
}
parseFileName(fileName) {
return this.timePathRegex.exec(fileName);
}
titleFromFile(context, fileName, timeTextBuilder) {
let title;
const timeContext = this.contextFromFileName(context, fileName);
if (timeContext) {
const pageContext = new RR0ContextImpl(context.locale, timeContext, context.config, context.people, context.file, context.messages, context.cms);
title = timeTextBuilder.build(pageContext);
title = StringUtil.capitalizeFirstLetter(title);
}
return title;
}
contextFromFileName(context, fileName = context.file.name) {
let timeContext;
let elems;
if (fileName.endsWith("index.html")) {
while ((elems = fileName.split("/")).length < 6) {
fileName = elems.slice(0, elems.length - 1).join("/") + "/0/index.html";
}
}
const timeExec = this.parseFileName(fileName);
if (timeExec && timeExec.length > 5) {
const pageContext = context.clone();
timeContext = pageContext.time;
const m = parseInt(timeExec[2], 10);
const c = parseInt(timeExec[3], 10);
const d = parseInt(timeExec[4], 10);
const u = parseInt(timeExec[5], 10);
const year = (timeExec[1] ? -1 : 1) * (m * 1000 + c * 100 + d * 10 + u);
timeContext.setYear(year);
const monthStr = timeExec[6];
timeContext.setMonth(monthStr ? parseInt(monthStr, 10) : undefined);
const dayStr = timeExec[7];
timeContext.setDayOfMonth(dayStr ? parseInt(dayStr, 10) : undefined);
timeContext.setHour(undefined);
timeContext.setMinutes(undefined);
}
return timeContext;
}
setContextFromFile(context, filePath) {
const time = context.time;
time.reset();
const newTimeContext = this.contextFromFileName(context, filePath);
if (newTimeContext) {
time.setYear(newTimeContext.getYear());
time.setMonth(newTimeContext.getMonth());
time.setDayOfMonth(newTimeContext.getDayOfMonth());
// context.time.from = context.time
}
// TODO: Set people + parent context if filePath under people root dir
// TODO: Set place + parent context if filePath under place root dir
// TODO: Set place + parent context if filePath under org root dir
return newTimeContext;
}
}
TimeService.defaultRegex = /time\/(-)?(\d)\/(\d)\/(\d)\/(\d)\/?(\d{2})?\/?(\d{2})?\/?(index(_[a-z]{2})?.html)?/;