@rr0/cms
Version:
RR0 Content Management System (CMS)
64 lines (63 loc) • 2.26 kB
JavaScript
import { LinkType } from "ssg-api";
export class TimeLinkDefaultHandler {
constructor(service, urlBuilder, timeTextBuilder) {
this.service = service;
this.urlBuilder = urlBuilder;
this.timeTextBuilder = timeTextBuilder;
}
contents(context) {
const prevLink = this.prev(context);
if (prevLink) {
const urlBuilder = this.urlBuilder;
let contentUrl = urlBuilder.matchExistingTimeFile(prevLink.url.substring(1));
if (contentUrl != urlBuilder.options.rootDir) {
const text = this.service.titleFromFile(context, contentUrl, this.timeTextBuilder);
if (text) {
return { type: LinkType.prev, text, url: "/" + contentUrl };
}
}
}
}
next(context) {
let fileName = context.file.name;
if (this.isTimeFile(fileName)) {
const service = this.service;
const pos = service.files.indexOf(fileName);
if (pos >= 0) {
const nextFile = service.files[pos + 1];
if (nextFile) {
const text = service.titleFromFile(context, nextFile, this.timeTextBuilder);
return { type: LinkType.next, text, url: "/" + nextFile };
}
}
}
}
prev(context) {
let fileName = context.file.name;
if (this.isTimeFile(fileName)) {
const service = this.service;
const pos = service.files.indexOf(fileName);
if (pos >= 0) {
const prevFile = service.files[pos - 1];
if (prevFile) {
const text = service.titleFromFile(context, prevFile, this.timeTextBuilder);
if (text) {
return { type: LinkType.prev, text, url: "/" + prevFile };
}
}
}
}
}
start(context) {
if (this.isTimeFile(context.file.name)) {
return {
type: LinkType.contents,
text: "Chronologie",
url: "/time/"
};
}
}
isTimeFile(fileName) {
return fileName.startsWith("time/");
}
}