diff options
-rw-r--r-- | lib/constants/pluginAssetsFolder.js | 2 | ||||
-rw-r--r-- | lib/models/fs.js | 7 | ||||
-rw-r--r-- | lib/models/page.js | 9 | ||||
-rw-r--r-- | lib/output/website/createTemplateEngine.js | 27 | ||||
-rw-r--r-- | lib/output/website/index.js | 4 | ||||
-rw-r--r-- | lib/output/website/onAsset.js | 6 | ||||
-rw-r--r-- | lib/output/website/onFinish.js | 0 | ||||
-rw-r--r-- | lib/output/website/onInit.js | 53 | ||||
-rw-r--r-- | lib/output/website/onPage.js | 8 | ||||
-rw-r--r-- | lib/output/website/options.js | 7 |
10 files changed, 110 insertions, 13 deletions
diff --git a/lib/constants/pluginAssetsFolder.js b/lib/constants/pluginAssetsFolder.js new file mode 100644 index 0000000..cd44722 --- /dev/null +++ b/lib/constants/pluginAssetsFolder.js @@ -0,0 +1,2 @@ + +module.exports = '_assets'; diff --git a/lib/models/fs.js b/lib/models/fs.js index 2400ff2..c74f3cd 100644 --- a/lib/models/fs.js +++ b/lib/models/fs.js @@ -182,7 +182,7 @@ FS.prototype.listAllFiles = function(folder) { var isDirectory = pathIsFolder(file); if (!isDirectory) { - return out.push(file); + return out.push(path.join(folder, file)); } return that.listAllFiles(path.join(folder, file)) @@ -190,11 +190,6 @@ FS.prototype.listAllFiles = function(folder) { return out.concat(inner); }); }, Immutable.List()); - }) - .then(function(files) { - return files.map(function(file) { - return path.join(folder, file); - }); }); }; diff --git a/lib/models/page.js b/lib/models/page.js index 0a9cf38..ffb9601 100644 --- a/lib/models/page.js +++ b/lib/models/page.js @@ -32,6 +32,15 @@ Page.prototype.getDir = function() { }; /** + Return path of the page + + @return {String} +*/ +Page.prototype.getPath = function() { + return this.getFile().getPath(); +}; + +/** Create a page for a file @param {File} file diff --git a/lib/output/website/createTemplateEngine.js b/lib/output/website/createTemplateEngine.js index 5c5acee..e661509 100644 --- a/lib/output/website/createTemplateEngine.js +++ b/lib/output/website/createTemplateEngine.js @@ -18,10 +18,11 @@ function templateFolder(dir) { /** Create templating engine to render themes - @param {Output} + @param {Output} output + @param {String} currentFile @return {TemplateEngine} */ -function createTemplateEngine(output) { +function createTemplateEngine(output, currentFile) { var searchPaths = listSearchPaths(output); // Search paths for templates @@ -31,6 +32,28 @@ function createTemplateEngine(output) { return TemplateEngine.create({ loader: loader, + + filters: { + t: function(s) { + return s; + }, + resolveFile: function(s) { + return s; + }, + resolveAsset: function(s) { + return s; + }, + fileExists: function() { + return false; + }, + contentURL: function(s) { + return s; + }, + getArticleByPath: function(s) { + return undefined; + } + }, + extensions: { 'DoExtension': new DoExtension() } diff --git a/lib/output/website/index.js b/lib/output/website/index.js index bb01ed6..9c5614e 100644 --- a/lib/output/website/index.js +++ b/lib/output/website/index.js @@ -2,5 +2,7 @@ module.exports = { name: 'website', Options: require('./options'), - onPage: require('./onPage') + onInit: require('./onInit'), + onPage: require('./onPage'), + onAsset: require('./onAsset') }; diff --git a/lib/output/website/onAsset.js b/lib/output/website/onAsset.js index 8659ca6..169db56 100644 --- a/lib/output/website/onAsset.js +++ b/lib/output/website/onAsset.js @@ -17,7 +17,11 @@ function onAsset(output, asset) { var filePath = path.resolve(rootFolder, asset); var outputPath = path.resolve(outputFolder, asset); - return fs.copy(filePath, outputPath); + return fs.ensure(outputPath) + .then(function() { + return fs.copy(filePath, outputPath); + }) + .thenResolve(output); } module.exports = onAsset; diff --git a/lib/output/website/onFinish.js b/lib/output/website/onFinish.js new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/lib/output/website/onFinish.js diff --git a/lib/output/website/onInit.js b/lib/output/website/onInit.js new file mode 100644 index 0000000..632c6d6 --- /dev/null +++ b/lib/output/website/onInit.js @@ -0,0 +1,53 @@ +var path = require('path'); + +var ASSET_FOLDER = require('../../constants/pluginAssetsFolder'); +var Promise = require('../../utils/promise'); +var fs = require('../../utils/fs'); + +/** + Initialize the generator +*/ +function onInit(output) { + return Promise(output) + .then(copyPluginAssets) + .thenResolve(output); +} + + +/** + Copy all assets from plugins + + @param {Output} + @return {Promise} +*/ +function copyPluginAssets(output) { + var options = output.getOptions(); + var plugins = output.getPlugins(); + var logger = output.getLogger(); + + var outputRoot = options.get('root'); + var assetOutputFolder = path.join(outputRoot, 'gitbook'); + var prefix = options.get('prefix'); + + return Promise.forEach(plugins, function(plugin) { + var pluginRoot = plugin.getPath(); + var assetFolder = path.join(pluginRoot, ASSET_FOLDER, prefix); + + if (!fs.existsSync(assetFolder)) { + return; + } + + logger.debug.ln('copy assets from theme', assetFolder); + return fs.copyDir( + assetFolder, + assetOutputFolder, + { + deleteFirst: false, + overwrite: true, + confirm: true + } + ); + }); +} + +module.exports = onInit; diff --git a/lib/output/website/onPage.js b/lib/output/website/onPage.js index b6856b3..aedb8c0 100644 --- a/lib/output/website/onPage.js +++ b/lib/output/website/onPage.js @@ -14,13 +14,19 @@ var createTemplateEngine = require('./createTemplateEngine'); function onPage(output, page) { var options = output.getOptions(); var prefix = options.get('prefix'); - var engine = createTemplateEngine(output); + var engine = createTemplateEngine(output, page.getPath()); return Modifiers.modifyHTML(page, getModifiers(output, page)) .then(function(resultPage) { // Generate the context var context = JSONUtils.encodeBookWithPage(output.getBook(), resultPage); + context.template = { + getJSContext: function() { + return {}; + } + }; + // Render the theme return Templating.renderFile(engine, prefix + '/page.html', context) diff --git a/lib/output/website/options.js b/lib/output/website/options.js index eca8a8d..ac9cdad 100644 --- a/lib/output/website/options.js +++ b/lib/output/website/options.js @@ -2,10 +2,13 @@ var Immutable = require('immutable'); var Options = Immutable.Record({ // Root folder for the output - root: String(), + root: String(), // Prefix for generation - prefix: String('website') + prefix: String('website'), + + // Use directory index url instead of "index.html" + directoryIndex: Boolean(true) }); module.exports = Options; |