summaryrefslogtreecommitdiffstats
path: root/lib/generate/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/generate/index.js')
-rw-r--r--lib/generate/index.js98
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
};