diff2html/scripts/build-website.ts
2019-12-22 17:58:47 +00:00

54 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import * as fs from "fs";
import * as hogan from "hogan.js";
type OptionsType = {
all: object;
[page: string]: object;
};
const templatesRoot = "website/templates";
const pagesRoot = `${templatesRoot}/pages`;
const options: OptionsType = {
all: {
demoUrl: "demo.html?diff=https://github.com/rtfpessoa/diff2html/pull/106"
},
demo: {
extraClass: "template-index-min"
}
};
function readFile(filePath: string): string {
try {
return fs.readFileSync(filePath, "utf8");
} catch (_ignore) {}
return "";
}
function writeFile(filePath: string, content: string): void {
return fs.writeFileSync(filePath, content);
}
const websitePages = fs.readdirSync(pagesRoot);
const template = hogan.compile(readFile(`${templatesRoot}/template.mustache`));
websitePages.map(page => {
const baseOptions = { ...(options.all || {}), ...(options[page] || {}) };
const pagePartialTemplate = hogan.compile(readFile(`${pagesRoot}/${page}/${page}.partial.mustache`));
const pageAssetsTemplate = hogan.compile(readFile(`${pagesRoot}/${page}/${page}-assets.partial.mustache`));
const pageScriptsTemplate = hogan.compile(readFile(`${pagesRoot}/${page}/${page}-scripts.partial.mustache`));
const pagePartial = pagePartialTemplate.render(baseOptions);
const pageAssets = pageAssetsTemplate.render(baseOptions);
const pageScripts = pageScriptsTemplate.render(baseOptions);
const pageOptions = { ...baseOptions, assets: pageAssets, scripts: pageScripts, content: pagePartial };
const pageHtml = template.render(pageOptions);
writeFile(`docs/${page}.html`, pageHtml);
});