diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-10-06 09:42:49 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-10-06 09:42:49 +0200 |
commit | ce1e0e187339976fc3cae7ef70bcfdd0eaf68981 (patch) | |
tree | c71ab2b8badd7a54759790bde083cab721796d92 /lib/init.js | |
parent | bcb224d1cb0add4285538f03956f6f6a1574e49a (diff) | |
parent | c2775b3b63e92a7047f019a9d56851ce4fdd6c02 (diff) | |
download | gitbook-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.js | 83 |
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; |