diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2014-04-04 10:59:13 -0700 |
---|---|---|
committer | Aaron O'Mullan <aaron.omullan@gmail.com> | 2014-04-04 10:59:13 -0700 |
commit | d475affd3bb1255d82ff810bc8ef5ac8ac2f6f3a (patch) | |
tree | 060f11df6d7ccc24e222d35cf1ce2354f0fd6b02 /lib/generate/index.js | |
parent | fe3de93e06d5cc6fd757ee68013e1ec77f708018 (diff) | |
parent | 5cae311edf62e5c86edd9083a8d927730710c2f9 (diff) | |
download | gitbook-d475affd3bb1255d82ff810bc8ef5ac8ac2f6f3a.zip gitbook-d475affd3bb1255d82ff810bc8ef5ac8ac2f6f3a.tar.gz gitbook-d475affd3bb1255d82ff810bc8ef5ac8ac2f6f3a.tar.bz2 |
Merge pull request #25 from GitbookIO/feature/generators
Feature/generators
Diffstat (limited to 'lib/generate/index.js')
-rw-r--r-- | lib/generate/index.js | 98 |
1 files changed, 40 insertions, 58 deletions
diff --git a/lib/generate/index.js b/lib/generate/index.js index ee5ffc4..95f325c 100644 --- a/lib/generate/index.js +++ b/lib/generate/index.js @@ -5,12 +5,24 @@ var path = require("path"); var fs = require("./fs"); var parse = require("../parse"); -var template = require("./template"); -var generate = function(root, output, options) { - var files, summary, navigation, tpl; +var generators = { + "site": require("./generator_site"), + "json": require("./generator_json") +}; + +var generate = function(options) { + var generator = null; + var files; options = _.defaults(options || {}, { + // Folders to use + input: null, + output: null, + + // Output generator + generator: "site", + // Book title, keyword, description title: null, description: "Book generated using GitBook", @@ -20,20 +32,24 @@ var generate = function(root, output, options) { githubHost: 'https://github.com/' }); - if (!options.github || !options.title) { - return Q.reject(new Error("Need options.github and options.title")); + if (!options.github || !options.title || !options.input || !options.output) { + return Q.reject(new Error("Need options: github, title, input, output")); + } + + if (!generators[options.generator]) { + return Q.reject(new Error("Invalid generator (availables are: "+_.keys(generators).join(", "))); } // Clean output folder - return fs.remove(output) + return fs.remove(options.output) .then(function() { - return fs.mkdirp(output); + return fs.mkdirp(options.output); }) // List all files in the repository .then(function() { - return fs.list(root); + return fs.list(options.input); }) // Check repository is valid @@ -47,32 +63,18 @@ var generate = function(root, output, options) { // Get summary .then(function() { - return fs.readFile(path.join(root, "SUMMARY.md"), "utf-8") + return fs.readFile(path.join(options.input, "SUMMARY.md"), "utf-8") .then(function(_summary) { - summary = parse.summary(_summary); + options.summary = parse.summary(_summary); // Parse navigation - navigation = parse.navigation(summary); + options.navigation = parse.navigation(options.summary); }); }) - // Create template + // Create the generator .then(function() { - tpl = template({ - root: root, - output: output, - locals: { - title: options.title, - description: options.description, - - githubAuthor: options.github.split("/")[0], - githubId: options.github, - githubHost: options.githubHost, - - summary: summary, - allNavigation: navigation - } - }); + generator = new generators[options.generator](options); }) // Copy file and replace markdown file @@ -81,49 +83,29 @@ var generate = function(root, output, options) { _.chain(files) .map(function(file) { if (!file) return; - var _html = file.replace(".md", ".html"); - // Folder if (file[file.length -1] == "/") { - return fs.mkdirp( - path.join(output, file) - ); - } - - // Markdown file (only from the summary) - else if (path.extname(file) == ".md" && navigation[_html] != null) { - return tpl(file, file.replace(".md", ".html")); - } - - // Copy file - else { - return fs.copy( - path.join(root, file), - path.join(output, file) - ); + return Q(generator.transferFolder(file)); + } else if (path.extname(file) == ".md" && options.navigation[file] != null) { + return fs.readFile(path.join(options.input, file), "utf-8") + .then(function(content) { + return Q(generator.convertFile(content, file)); + }); + } else { + return Q(generator.transferFile(file)); } }) .value() ); }) - // Symlink index.html to README.html - .then(function() { - return fs.symlink( - path.join(output, 'README.html'), - path.join(output, 'index.html') - ); - }) - - // Copy assets + // Finish gneration .then(function() { - return fs.copy( - path.join(__dirname, "../../assets/static"), - path.join(output, "gitbook") - ); + return generator.finish(); }); }; module.exports = { + generators: generators, folder: generate }; |