diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/decodeGlobal.js | 3 | ||||
-rw-r--r-- | lib/api/decodePage.js | 28 | ||||
-rw-r--r-- | lib/fs/mock.js | 10 | ||||
-rw-r--r-- | lib/json/index.js | 13 | ||||
-rw-r--r-- | lib/output/website/createTemplateEngine.js | 39 | ||||
-rw-r--r-- | lib/output/website/onAsset.js | 2 | ||||
-rw-r--r-- | lib/templating/themesLoader.js | 2 |
7 files changed, 70 insertions, 27 deletions
diff --git a/lib/api/decodeGlobal.js b/lib/api/decodeGlobal.js index 1b0b135..118afb2 100644 --- a/lib/api/decodeGlobal.js +++ b/lib/api/decodeGlobal.js @@ -1,7 +1,8 @@ var decodeConfig = require('./decodeConfig'); /** - Decode changes from a JS API to a output object + Decode changes from a JS API to a output object. + Only the configuration can be edited by plugin's hooks @param {Output} output @param {Object} result: result from API diff --git a/lib/api/decodePage.js b/lib/api/decodePage.js index 5cce56c..e0b7d1e 100644 --- a/lib/api/decodePage.js +++ b/lib/api/decodePage.js @@ -1,6 +1,7 @@ /** - Decode changes from a JS API to a page object + Decode changes from a JS API to a page object. + Only the content can be edited by plugin's hooks. @param {Output} output @param {Page} page: page instance to edit @@ -8,7 +9,30 @@ @return {Page} */ function decodePage(output, page, result) { - // todo + var originalContent = page.getContent(); + + // No returned value + // Existing content will be used + if (!result) { + return page; + } + + // GitBook 3 + // Use returned page.content if different from original content + if (result.content != originalContent) { + return page.set('content', result.content); + } + + // GitBook 2 compatibility + // Finally, use page.sections + if (result.sections) { + return page.set('content', + result.sections.map(function(section) { + return section.content; + }).join('\n') + ); + } + return page; } diff --git a/lib/fs/mock.js b/lib/fs/mock.js index 6c2670b..2149e1d 100644 --- a/lib/fs/mock.js +++ b/lib/fs/mock.js @@ -7,20 +7,14 @@ var FS = require('../models/fs'); var error = require('../utils/error'); /** - Create a fake filesystem for testing books + Create a fake filesystem for unit testing GitBook. - @param {Map<String:File>} + @param {Map<String:String|Map>} */ function createMockFS(files) { files = Immutable.fromJS(files); var mtime = new Date(); - /** - Get a file by resolving its path - - @param {String} - @return {String|Map|null} - */ function getFile(filePath) { var parts = path.normalize(filePath).split('/'); return parts.reduce(function(list, part, i) { diff --git a/lib/json/index.js b/lib/json/index.js index 92b105a..e58beee 100644 --- a/lib/json/index.js +++ b/lib/json/index.js @@ -1,9 +1,10 @@ module.exports = { - encodeBookWithPage: require('./encodeBookWithPage'), - encodeBook: require('./encodeBook'), - encodeFile: require('./encodeFile'), - encodePage: require('./encodePage'), - encodeSummary: require('./encodeSummary'), - encodeReadme: require('./encodeReadme') + encodeBookWithPage: require('./encodeBookWithPage'), + encodeBook: require('./encodeBook'), + encodeFile: require('./encodeFile'), + encodePage: require('./encodePage'), + encodeSummary: require('./encodeSummary'), + encodeSummaryArticle: require('./encodeSummaryArticle'), + encodeReadme: require('./encodeReadme') }; diff --git a/lib/output/website/createTemplateEngine.js b/lib/output/website/createTemplateEngine.js index 06e9192..2c2ac8d 100644 --- a/lib/output/website/createTemplateEngine.js +++ b/lib/output/website/createTemplateEngine.js @@ -2,18 +2,19 @@ var path = require('path'); var nunjucks = require('nunjucks'); var DoExtension = require('nunjucks-do')(nunjucks); -var TEMPLATES_FOLDER = require('../../constants/templatesFolder'); - -var Templating = require('../../templating'); +var JSONUtils = require('../../json'); +var LocationUtils = require('../../utils/location'); var TemplateEngine = require('../../models/templateEngine'); +var templatesFolder = require('../../constants/templatesFolder'); var defaultFilters = require('../../constants/defaultFilters'); +var Templating = require('../../templating'); var listSearchPaths = require('./listSearchPaths'); /** Directory for a theme with the templates */ function templateFolder(dir) { - return path.join(dir, TEMPLATES_FOLDER); + return path.join(dir, templatesFolder); } /** @@ -28,6 +29,7 @@ function createTemplateEngine(output, currentFile) { var state = output.getState(); var i18n = state.getI18n(); var config = book.getConfig(); + var summary = book.getSummary(); // Search paths for templates var searchPaths = listSearchPaths(output); @@ -43,11 +45,28 @@ function createTemplateEngine(output, currentFile) { loader: loader, filters: defaultFilters.merge({ - t: function(s) { + /** + Translate a sentence + */ + t: function t(s) { return i18n.t(language, s); }, + + /** + Resolve an absolute file path into a + relative path + */ resolveFile: function(s) { - return s; + // Convert /test.png -> test.png + s = LocationUtils.toAbsolute(s, '', ''); + + // Convert to relative + s = LocationUtils.relative( + this.resolve('.') + '/', + this.book.resolve(name) + ); + + return LocationUtils.normalize(s); }, resolveAsset: function(s) { return s; @@ -58,8 +77,14 @@ function createTemplateEngine(output, currentFile) { contentURL: function(s) { return s; }, + + /** + Return an article by its path + */ getArticleByPath: function(s) { - return undefined; + var article = summary.getByPath(s); + if (!article) return undefined; + return JSONUtils.encodeSummaryArticle(article); } }), diff --git a/lib/output/website/onAsset.js b/lib/output/website/onAsset.js index 169db56..1311c95 100644 --- a/lib/output/website/onAsset.js +++ b/lib/output/website/onAsset.js @@ -2,7 +2,7 @@ var path = require('path'); var fs = require('../../utils/fs'); /** - Copy an asset to the outptu folder + Copy an asset to the output folder @param {Output} output @param {Page} page diff --git a/lib/templating/themesLoader.js b/lib/templating/themesLoader.js index 2b436a4..69c3879 100644 --- a/lib/templating/themesLoader.js +++ b/lib/templating/themesLoader.js @@ -5,9 +5,7 @@ var path = require('path'); var PathUtils = require('../utils/path'); -/** -*/ var ThemesLoader = nunjucks.Loader.extend({ init: function(searchPaths) { this.searchPaths = Immutable.List(searchPaths) |