hikaru-coffee
Version:
A static site generator that generates routes based on directories naturally.
70 lines (63 loc) • 1.88 kB
JavaScript
// Generated by CoffeeScript 2.3.1
(function() {
var Renderer, path,
indexOf = [].indexOf;
path = require("path");
module.exports = Renderer = class Renderer {
constructor(logger, skipRenderList) {
// fn: param data, ctx, return Promise
this.register = this.register.bind(this);
this.render = this.render.bind(this);
this.logger = logger;
this.store = {};
this.skipRenderList = skipRenderList || [];
}
register(srcExt, docExt, fn) {
var i, len, s;
if (!(fn instanceof Function)) {
return;
}
if (srcExt instanceof Array) {
for (i = 0, len = srcExt.length; i < len; i++) {
s = srcExt[i];
this.store[s] = {
"srcExt": s,
"docExt": docExt,
"fn": fn
};
}
return;
}
return this.store[srcExt] = {
"srcExt": srcExt,
"docExt": docExt,
"fn": fn
};
}
render(data, ctx) {
var basename, dirname, docExt, ref, srcExt;
srcExt = path.extname(data["srcPath"]);
if (srcExt in this.store && (ref = data["srcPath"], indexOf.call(this.skipRenderList, ref) < 0)) {
docExt = this.store[srcExt]["docExt"];
if (docExt != null) {
dirname = path.dirname(data["srcPath"]);
basename = path.basename(data["srcPath"], srcExt);
data["docPath"] = path.join(dirname, `${basename}${docExt}`);
} else {
data["docPath"] = data["srcPath"];
}
return this.store[srcExt]["fn"](data, ctx);
}
return new Promise(function(resolve, reject) {
var err;
try {
data["docPath"] = data["srcPath"];
return resolve(data);
} catch (error) {
err = error;
return reject(err);
}
});
}
};
}).call(this);