hikaru-coffee
Version:
A static site generator that generates routes based on directories naturally.
81 lines (71 loc) • 2.35 kB
JavaScript
// Generated by CoffeeScript 2.3.1
(function() {
var Promise, Renderer, colors, path,
indexOf = [].indexOf;
path = require("path");
colors = require("colors/safe");
Promise = require("bluebird");
Renderer = class Renderer {
constructor(logger, skipRenderList) {
// fn: param file, ctx, return Promise
this.register = this.register.bind(this);
this.render = this.render.bind(this);
this.logger = logger;
this._ = {};
this.skipRenderList = skipRenderList || [];
}
register(srcExt, docExt, fn) {
var i, len, s;
if (!(fn instanceof Function)) {
throw new TypeError("fn must be a Function!");
return;
}
if (srcExt instanceof Array) {
for (i = 0, len = srcExt.length; i < len; i++) {
s = srcExt[i];
this._[s] = {
"srcExt": s,
"docExt": docExt,
"fn": fn
};
}
return;
}
return this._[srcExt] = {
"srcExt": srcExt,
"docExt": docExt,
"fn": fn
};
}
render(file, ctx) {
var basename, dirname, docExt, ref, srcExt;
srcExt = path.extname(file["srcPath"]);
if (srcExt in this._ && (ref = file["srcPath"], indexOf.call(this.skipRenderList, ref) < 0)) {
docExt = this._[srcExt]["docExt"];
if (docExt != null) {
dirname = path.dirname(file["srcPath"]);
basename = path.basename(file["srcPath"], srcExt);
file["docPath"] = path.join(dirname, `${basename}${docExt}`);
this.logger.debug(`Hikaru is rendering \`${colors.cyan(file["srcPath"])}\` to \`${colors.cyan(file["docPath"])}\`...`);
} else {
file["docPath"] = file["srcPath"];
this.logger.debug(`Hikaru is rendering \`${colors.cyan(file["srcPath"])}\`...`);
}
return this._[srcExt]["fn"](file, ctx);
}
return new Promise((resolve, reject) => {
var err;
try {
file["docPath"] = file["srcPath"];
this.logger.debug(`Hikaru is rendering \`${colors.cyan(file["srcPath"])}\`...`);
file["content"] = file["raw"];
return resolve(file);
} catch (error) {
err = error;
return reject(err);
}
});
}
};
module.exports = Renderer;
}).call(this);