hikaru-coffee
Advanced tools
Comparing version 1.2.0 to 1.2.1
@@ -118,2 +118,3 @@ // Generated by CoffeeScript 2.3.1 | ||
"templates": {}, | ||
"assets": [], | ||
"pages": [], | ||
@@ -157,6 +158,6 @@ "posts": [], | ||
this.renderer.register([".njk", ".j2"], null, function(data, ctx) { | ||
var njkRender, template; | ||
var template; | ||
// For template you must give a render function. | ||
template = nunjucks.compile(data["text"], njkEnv, data["srcPath"]); | ||
njkRender = function(ctx) { | ||
return data["content"] = function(ctx) { | ||
return new Promise(function(resolve, reject) { | ||
@@ -171,3 +172,2 @@ return template.render(ctx, function(err, res) { | ||
}; | ||
return njkRender; | ||
}); | ||
@@ -174,0 +174,0 @@ markedConfig = Object.assign({ |
// Generated by CoffeeScript 2.3.1 | ||
(function() { | ||
var Router, Translator, dateStrCompare, fm, fse, getAbsPathFn, getURLFn, glob, isCurrentPathFn, moment, path, yaml; | ||
var Router, dateStrCompare, fm, fse, getAbsPathFn, getURLFn, glob, isCurrentPathFn, moment, path, yaml; | ||
@@ -17,4 +17,2 @@ path = require("path"); | ||
Translator = require("./translator"); | ||
({dateStrCompare, getAbsPathFn, getURLFn, isCurrentPathFn} = require("./utils")); | ||
@@ -28,5 +26,16 @@ | ||
this.writeData = this.writeData.bind(this); | ||
this.routeThemeAssets = this.routeThemeAssets.bind(this); | ||
this.routeTemplates = this.routeTemplates.bind(this); | ||
this.routeSrcs = this.routeSrcs.bind(this); | ||
this.loadThemeAssets = this.loadThemeAssets.bind(this); | ||
this.loadTemplates = this.loadTemplates.bind(this); | ||
this.loadSrcs = this.loadSrcs.bind(this); | ||
this.renderAssets = this.renderAssets.bind(this); | ||
this.renderTemplates = this.renderTemplates.bind(this); | ||
this.renderPosts = this.renderPosts.bind(this); | ||
this.renderPages = this.renderPages.bind(this); | ||
this.generateData = this.generateData.bind(this); | ||
this.generatePosts = this.generatePosts.bind(this); | ||
this.generatePages = this.generatePages.bind(this); | ||
this.saveAssets = this.saveAssets.bind(this); | ||
this.savePosts = this.savePosts.bind(this); | ||
this.savePages = this.savePages.bind(this); | ||
this.saveData = this.saveData.bind(this); | ||
this.route = this.route.bind(this); | ||
@@ -69,2 +78,3 @@ this.logger = logger; | ||
"srcPath": srcPath, | ||
"srcDir": srcDir, | ||
"text": raw, | ||
@@ -84,3 +94,3 @@ "raw": raw | ||
routeThemeAssets() { | ||
loadThemeAssets() { | ||
return this.matchFiles(path.join("**", "*"), { | ||
@@ -91,3 +101,3 @@ "nodir": true, | ||
}).then((themeSrcs) => { | ||
return themeSrcs.filter(function(srcPath) { | ||
return Promise.all(themeSrcs.filter(function(srcPath) { | ||
// Asset is in sub dir. | ||
@@ -97,11 +107,9 @@ return path.dirname(srcPath) !== "."; | ||
return this.readData(this.site["themeSrcDir"], srcPath).then((data) => { | ||
return this.renderer.render(data, null); | ||
}).then((data) => { | ||
return this.writeData(this.site["themeSrcDir"], data); | ||
return this.site["assets"].push(data); | ||
}); | ||
}); | ||
})); | ||
}); | ||
} | ||
routeTemplates() { | ||
loadTemplates() { | ||
return this.matchFiles("*", { | ||
@@ -114,3 +122,4 @@ "nodir": true, | ||
return this.readData(this.site["themeSrcDir"], srcPath).then((data) => { | ||
return this.site["templates"][path.basename(srcPath, path.extname(srcPath))] = this.renderer.render(data, null); | ||
data["key"] = path.basename(srcPath, path.extname(srcPath)); | ||
return this.site["templates"][data["key"]] = data; | ||
}); | ||
@@ -121,3 +130,3 @@ })); | ||
routeSrcs() { | ||
loadSrcs() { | ||
return this.matchFiles(path.join("**", "*"), { | ||
@@ -128,129 +137,182 @@ "nodir": true, | ||
}).then((srcs) => { | ||
var j, len, renderedPromises, srcPath; | ||
renderedPromises = []; | ||
for (j = 0, len = srcs.length; j < len; j++) { | ||
srcPath = srcs[j]; | ||
((srcPath) => { | ||
return renderedPromises.push(this.readData(this.site["srcDir"], srcPath).then((data) => { | ||
var parsed; | ||
if (typeof data["raw"] === "string") { | ||
parsed = fm(data["raw"]); | ||
data["text"] = parsed["body"]; | ||
data = Object.assign(data, parsed["attributes"]); | ||
if (data["text"] !== data["raw"]) { | ||
if (data["title"] != null) { | ||
data["title"] = data["title"].toString(); | ||
return Promise.all(srcs.map((srcPath) => { | ||
return this.readData(this.site["srcDir"], srcPath).then((data) => { | ||
var parsed; | ||
if (typeof data["raw"] === "string") { | ||
parsed = fm(data["raw"]); | ||
data["text"] = parsed["body"]; | ||
data = Object.assign(data, parsed["attributes"]); | ||
if (data["text"] !== data["raw"]) { | ||
if (data["title"] != null) { | ||
data["title"] = data["title"].toString(); | ||
} | ||
if (data["layout"] === "post") { | ||
return this.site["posts"].push(data); | ||
} else { | ||
// Need load templates first. | ||
if (!(data["layout"] in this.site["templates"])) { | ||
data["layout"] = "page"; | ||
} | ||
return this.renderer.render(data, null); | ||
return this.site["pages"].push(data); | ||
} | ||
} else { | ||
return this.site["assets"].push(data); | ||
} | ||
this.renderer.render(data, null).then((data) => { | ||
return this.writeData(this.site["srcDir"], data); | ||
}); | ||
return null; | ||
})); | ||
})(srcPath); | ||
} | ||
}); | ||
})); | ||
}); | ||
} | ||
renderAssets() { | ||
return Promise.all(this.site["assets"].map((asset) => { | ||
return this.renderer.render(asset); | ||
})); | ||
} | ||
renderTemplates() { | ||
return Promise.all(Object.values(this.site["templates"]).map((template) => { | ||
return this.renderer.render(template); | ||
})); | ||
} | ||
renderPosts() { | ||
return Promise.all(this.site["posts"].map((post) => { | ||
return this.renderer.render(post); | ||
})); | ||
} | ||
renderPages() { | ||
return Promise.all(this.site["pages"].map((page) => { | ||
return this.renderer.render(page); | ||
})); | ||
} | ||
generateData(p) { | ||
var err, lang, language; | ||
lang = p["language"] || this.site["siteConfig"]["language"]; | ||
if (!(lang in this.translator.list())) { | ||
try { | ||
language = yaml.safeLoad(fse.readFileSync(path.join(this.site["themeDir"], "languages", `${lang}.yml`))); | ||
this.translator.register(lang, language); | ||
} catch (error) { | ||
err = error; | ||
null; | ||
} | ||
return Promise.all(renderedPromises); | ||
} | ||
p = this.generator.generate(p, this.site["posts"], { | ||
"site": this.site, | ||
"siteConfig": this.site["siteConfig"], | ||
"themeConfig": this.site["themeConfig"], | ||
"moment": moment, | ||
"getURL": getURLFn(this.site["siteConfig"]["baseURL"], this.site["siteConfig"]["rootDir"]), | ||
"getAbsPath": getAbsPathFn(this.site["siteConfig"]["rootDir"]), | ||
"isCurrentPath": isCurrentPathFn(this.site["siteConfig"]["rootDir"], p["docPath"]), | ||
"__": this.translator.getTranslateFn(lang) | ||
}); | ||
if (!(p instanceof Array)) { | ||
return [p]; | ||
} | ||
return p; | ||
} | ||
generateAll(ps) { | ||
var err, generated, j, lang, language, len, p; | ||
generatePosts() { | ||
var generated, i, j, k, len, p, ref, ref1, results; | ||
this.site["posts"].sort(dateStrCompare); | ||
generated = []; | ||
for (j = 0, len = ps.length; j < len; j++) { | ||
p = ps[j]; | ||
lang = p["language"] || this.site["siteConfig"]["language"]; | ||
if (!(lang in this.translator.list())) { | ||
try { | ||
language = yaml.safeLoad(fse.readFileSync(path.join(this.site["themeDir"], "languages", `${lang}.yml`))); | ||
this.translator.register(lang, language); | ||
} catch (error) { | ||
err = error; | ||
null; | ||
} | ||
ref = this.site["posts"]; | ||
for (j = 0, len = ref.length; j < len; j++) { | ||
p = ref[j]; | ||
p = this.generateData(p); | ||
generated.concat(p); | ||
} | ||
this.site["posts"] = generated; | ||
results = []; | ||
for (i = k = 0, ref1 = this.site["posts"].length; (0 <= ref1 ? k < ref1 : k > ref1); i = 0 <= ref1 ? ++k : --k) { | ||
if (i > 0) { | ||
this.site["posts"][i]["next"] = this.site["posts"][i - 1]; | ||
} | ||
p = this.generator.generate(p, this.site["posts"], { | ||
"site": this.site, | ||
"siteConfig": this.site["siteConfig"], | ||
"themeConfig": this.site["themeConfig"], | ||
"moment": moment, | ||
"getURL": getURLFn(this.site["siteConfig"]["baseURL"], this.site["siteConfig"]["rootDir"]), | ||
"getAbsPath": getAbsPathFn(this.site["siteConfig"]["rootDir"]), | ||
"isCurrentPath": isCurrentPathFn(this.site["siteConfig"]["rootDir"], p["docPath"]), | ||
"__": this.translator.getTranslateFn(lang) | ||
}); | ||
if (!(p instanceof Array)) { | ||
generated.push(p); | ||
if (i < this.site["posts"].length - 1) { | ||
results.push(this.site["posts"][i]["prev"] = this.site["posts"][i + 1]); | ||
} else { | ||
generated = generated.concat(p); | ||
results.push(void 0); | ||
} | ||
} | ||
return generated; | ||
return results; | ||
} | ||
generatePages() { | ||
var generated, j, len, p, ref; | ||
generated = []; | ||
ref = this.site["pages"]; | ||
for (j = 0, len = ref.length; j < len; j++) { | ||
p = ref[j]; | ||
p = this.generateData(p); | ||
generated.concat(p); | ||
} | ||
return this.site["pages"] = generated; | ||
} | ||
saveAssets() { | ||
return this.site["assets"].map((asset) => { | ||
this.writeData(asset["srcDir"], asset); | ||
return asset; | ||
}); | ||
} | ||
savePosts() { | ||
return this.site["posts"].map((post) => { | ||
this.site["templates"][post["layout"]]["content"](post).then((content) => { | ||
post["content"] = content; | ||
return this.writeData(this.site["srcDir"], post); | ||
}); | ||
return post; | ||
}); | ||
} | ||
savePages() { | ||
return this.site["pages"].map((page) => { | ||
this.site["templates"][page["layout"]]["content"](page).then((content) => { | ||
page["content"] = content; | ||
return this.writeData(this.site["srcDir"], page); | ||
}); | ||
return page; | ||
}); | ||
} | ||
saveData() { | ||
return this.site["data"].map((data) => { | ||
this.writeData(null, data); | ||
return data; | ||
}); | ||
} | ||
route() { | ||
this.routeThemeAssets(); | ||
return this.routeTemplates().then(() => { | ||
return this.routeSrcs(); | ||
}).then(async(renderedPages) => { | ||
var data, fn, i, j, k, l, len, len1, len2, len3, len4, len5, m, n, o, p, page, post, q, ref, ref1, ref2, ref3, ref4, ref5, results; | ||
for (j = 0, len = renderedPages.length; j < len; j++) { | ||
p = renderedPages[j]; | ||
if (p == null) { | ||
continue; | ||
} | ||
if (p["layout"] === "post") { | ||
this.site["posts"].push(p); | ||
} else { | ||
if (!(p["layout"] in this.site["templates"])) { | ||
p["layout"] = "page"; | ||
} | ||
this.site["pages"].push(p); | ||
} | ||
} | ||
// Posts. | ||
this.site["posts"].sort(dateStrCompare); | ||
return Promise.all([ | ||
this.loadThemeAssets(), | ||
this.loadTemplates().then(() => { | ||
return this.loadSrcs(); | ||
}) | ||
]).then(() => { | ||
this.renderAssets().then(() => { | ||
return this.saveAssets(); | ||
}); | ||
return Promise.all([this.renderTemplates(), this.renderPosts(), this.renderPages()]); | ||
}).then(() => { | ||
var fn, j, k, len, len1, ref, ref1; | ||
ref = this.store["beforeGenerating"]; | ||
// Custum route. | ||
for (k = 0, len1 = ref.length; k < len1; k++) { | ||
fn = ref[k]; | ||
for (j = 0, len = ref.length; j < len; j++) { | ||
fn = ref[j]; | ||
this.site = fn(this.site); | ||
} | ||
this.site["posts"] = this.generateAll(this.site["posts"]); | ||
for (i = l = 0, ref1 = this.site["posts"].length; (0 <= ref1 ? l < ref1 : l > ref1); i = 0 <= ref1 ? ++l : --l) { | ||
if (i > 0) { | ||
this.site["posts"][i]["next"] = this.site["posts"][i - 1]; | ||
} | ||
if (i < this.site["posts"].length - 1) { | ||
this.site["posts"][i]["prev"] = this.site["posts"][i + 1]; | ||
} | ||
} | ||
// Pages. | ||
this.site["pages"] = this.generateAll(this.site["pages"]); | ||
ref2 = this.store["afterGenerating"]; | ||
for (m = 0, len2 = ref2.length; m < len2; m++) { | ||
fn = ref2[m]; | ||
this.generatePosts(); | ||
this.generatePages(); | ||
ref1 = this.store["afterGenerating"]; | ||
for (k = 0, len1 = ref1.length; k < len1; k++) { | ||
fn = ref1[k]; | ||
this.site = fn(this.site); | ||
} | ||
ref3 = this.site["pages"]; | ||
for (n = 0, len3 = ref3.length; n < len3; n++) { | ||
page = ref3[n]; | ||
page["content"] = (await this.site["templates"][page["layout"]](page)); | ||
this.writeData(this.site["srcDir"], page); | ||
} | ||
ref4 = this.site["posts"]; | ||
// Merge post and template last. | ||
for (o = 0, len4 = ref4.length; o < len4; o++) { | ||
post = ref4[o]; | ||
post["content"] = (await this.site["templates"][post["layout"]](post)); | ||
this.writeData(this.site["srcDir"], post); | ||
} | ||
ref5 = this.site["data"]; | ||
results = []; | ||
for (q = 0, len5 = ref5.length; q < len5; q++) { | ||
data = ref5[q]; | ||
results.push(this.writeData(this.site["srcDir"], data)); | ||
} | ||
return results; | ||
this.savePosts(); | ||
this.savePages(); | ||
return this.saveData(); | ||
}); | ||
@@ -257,0 +319,0 @@ } |
{ | ||
"name": "hikaru-coffee", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "A static site generator that generates routes based on directories naturally.", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
92807
1188