hikaru-coffee
Version:
A static site generator that generates routes based on directories naturally.
38 lines (34 loc) • 1.13 kB
text/coffeescript
path = require("path")
module.exports =
class Renderer
constructor: (logger, skipRenderList) ->
= logger
= {}
= skipRenderList or []
# fn: param data, ctx, return Promise
register: (srcExt, docExt, fn) =>
if fn not instanceof Function
return
if srcExt instanceof Array
for s in srcExt
[s] = {"srcExt": s, "docExt": docExt, "fn": fn}
return
[srcExt] = {"srcExt": srcExt, "docExt": docExt, "fn": fn}
render: (data, ctx) =>
srcExt = path.extname(data["srcPath"])
if srcExt of and data["srcPath"] not in
docExt = [srcExt]["docExt"]
if docExt?
dirname = path.dirname(data["srcPath"])
basename = path.basename(data["srcPath"], srcExt)
data["docPath"] = path.join(dirname, "#{basename}#{docExt}")
else
data["docPath"] = data["srcPath"]
return [srcExt]["fn"](data, ctx)
return new Promise((resolve, reject) ->
try
data["docPath"] = data["srcPath"]
resolve(data)
catch err
reject(err)
)