diff options
Diffstat (limited to 'lib/generate/index.js')
-rw-r--r-- | lib/generate/index.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/generate/index.js b/lib/generate/index.js new file mode 100644 index 0000000..fff3ca9 --- /dev/null +++ b/lib/generate/index.js @@ -0,0 +1,93 @@ +var Q = require("q"); +var _ = require("lodash"); +var path = require("path"); +var glob = require("glob"); +var fs = require("./fs"); +var parse = require("../parse"); +var template = require("./template"); + +var generate = function(root, output, options) { + var files, summary, tpl; + + options = _.defaults(options || {}, { + // Book title + title: null, + + // Origin github repository id + github: null + }); + + if (!options.github) return Q.reject(new Error("Need options.github for specifing the github origin")); + + // List all files in the repository + return Q.nfcall(glob, "**/*", { + cwd: root, + mark: true + }) + + // Check repository is valid + .then(function(_files) { + files = _files; + + if (!_.contains(files, "SUMMARY.md") || !_.contains(files, "README.md")) { + return Q.reject(new Error("Invalid gitbook repository, need SUMMARY.md and README.md")); + } + }) + + // Get summary + .then(function() { + return fs.readFile(path.join(root, "SUMMARY.md"), "utf-8") + .then(function(_summary) { + summary = parse.summary(_summary); + }); + }) + + // Create template + .then(function() { + tpl = template({ + root: root, + output: output, + locals: { + githubId: options.github, + title: options.title, + summary: summary + } + }) + }) + + // Copy file and replace markdown file + .then(function() { + console.log(files, summary); + return Q.all( + _.chain(files) + .map(function(file) { + if (!file) return; + + // Folder + if (file[file.length -1] == "/") { + return fs.mkdirp( + path.join(output, file) + ); + } + + // Markdown file + else if (path.extname(file) == ".md") { + return tpl(file, file.replace(".md", ".html")); + } + + // Copy file + else { + return fs.copy( + path.join(root, file), + path.join(output, file) + ); + } + }) + .value() + ) + }) +}; + +module.exports = { + folder: generate +}
\ No newline at end of file |