summaryrefslogtreecommitdiffstats
path: root/lib/init.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-10-06 09:42:49 +0200
committerSamy Pessé <samypesse@gmail.com>2015-10-06 09:42:49 +0200
commitce1e0e187339976fc3cae7ef70bcfdd0eaf68981 (patch)
treec71ab2b8badd7a54759790bde083cab721796d92 /lib/init.js
parentbcb224d1cb0add4285538f03956f6f6a1574e49a (diff)
parentc2775b3b63e92a7047f019a9d56851ce4fdd6c02 (diff)
downloadgitbook-ce1e0e187339976fc3cae7ef70bcfdd0eaf68981.zip
gitbook-ce1e0e187339976fc3cae7ef70bcfdd0eaf68981.tar.gz
gitbook-ce1e0e187339976fc3cae7ef70bcfdd0eaf68981.tar.bz2
Merge pull request #964 from GitbookIO/features/plugin_api
Better APIs for Plugins
Diffstat (limited to 'lib/init.js')
-rw-r--r--lib/init.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/init.js b/lib/init.js
new file mode 100644
index 0000000..2fc8016
--- /dev/null
+++ b/lib/init.js
@@ -0,0 +1,83 @@
+var _ = require('lodash');
+var Q = require('q');
+var path = require('path');
+
+var Book = require('./book');
+var fs = require('./utils/fs');
+
+// Initialize folder structure for a book
+// Read SUMMARY to created the right chapter
+function initBook(root, opts) {
+ var book = new Book(root, opts);
+ var extensionToUse = '.md';
+
+ var chaptersPaths = function(chapters) {
+ return _.reduce(chapters || [], function(accu, chapter) {
+ var o = {
+ title: chapter.title
+ };
+ if (chapter.path) o.path = chapter.path;
+
+ return accu.concat(
+ [o].concat(chaptersPaths(chapter.articles))
+ );
+ }, []);
+ };
+
+ book.log.info.ln('init book at', root);
+ return fs.mkdirp(root)
+ .then(function() {
+ book.log.info.ln('detect structure from SUMMARY (if it exists)');
+ return book.parseSummary();
+ })
+ .fail(function() {
+ return Q();
+ })
+ .then(function() {
+ var summary = book.summaryFile || 'SUMMARY.md';
+ var chapters = book.summary.chapters || [];
+ extensionToUse = path.extname(summary);
+
+ if (chapters.length === 0) {
+ chapters = [
+ {
+ title: 'Summary',
+ path: 'SUMMARY'+extensionToUse
+ },
+ {
+ title: 'Introduction',
+ path: 'README'+extensionToUse
+ }
+ ];
+ }
+
+ return Q(chaptersPaths(chapters));
+ })
+ .then(function(chapters) {
+ // Create files that don't exist
+ return Q.all(_.map(chapters, function(chapter) {
+ if (!chapter.path) return Q();
+ var absolutePath = path.resolve(book.root, chapter.path);
+
+ return fs.exists(absolutePath)
+ .then(function(exists) {
+ if(exists) {
+ book.log.info.ln('found', chapter.path);
+ return;
+ } else {
+ book.log.info.ln('create', chapter.path);
+ }
+
+ return fs.mkdirp(path.dirname(absolutePath))
+ .then(function() {
+ return fs.writeFile(absolutePath, '# '+chapter.title+'\n');
+ });
+ });
+ }));
+ })
+ .then(function() {
+ book.log.info.ln('initialization is finished');
+ });
+}
+
+module.exports = initBook;