diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-05-11 14:45:54 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-05-11 14:45:54 +0200 |
commit | 961d43f085036263edfe064c2107ab27ad62d8fa (patch) | |
tree | 49c845d9d9e11e0abaf94094a4aab263921216bb | |
parent | 7bd49606e3aceb4078258c6693f53bc129eb5b93 (diff) | |
download | gitbook-961d43f085036263edfe064c2107ab27ad62d8fa.zip gitbook-961d43f085036263edfe064c2107ab27ad62d8fa.tar.gz gitbook-961d43f085036263edfe064c2107ab27ad62d8fa.tar.bz2 |
Fix #1293: replace block shortcuts when including files
-rw-r--r-- | lib/output/createTemplateEngine.js | 3 | ||||
-rw-r--r-- | lib/templating/__tests__/replaceShortcuts.js | 27 | ||||
-rw-r--r-- | lib/templating/conrefsLoader.js | 17 | ||||
-rw-r--r-- | lib/templating/index.js | 11 | ||||
-rw-r--r-- | lib/templating/listShortcuts.js | 5 | ||||
-rw-r--r-- | lib/templating/render.js | 2 | ||||
-rw-r--r-- | lib/templating/replaceShortcuts.js | 6 |
7 files changed, 42 insertions, 29 deletions
diff --git a/lib/output/createTemplateEngine.js b/lib/output/createTemplateEngine.js index 37b3c27..8cf320e 100644 --- a/lib/output/createTemplateEngine.js +++ b/lib/output/createTemplateEngine.js @@ -28,7 +28,8 @@ function createTemplateEngine(output) { filters = defaultFilters.merge(filters); // Create loader - var loader = new Templating.ConrefsLoader(rootFolder, logger); + var transformFn = Templating.replaceShortcuts.bind(null, blocks); + var loader = new Templating.ConrefsLoader(rootFolder, transformFn, logger); // Create API context var context = Api.encodeGlobal(output); diff --git a/lib/templating/__tests__/replaceShortcuts.js b/lib/templating/__tests__/replaceShortcuts.js index bd94f29..216a1c8 100644 --- a/lib/templating/__tests__/replaceShortcuts.js +++ b/lib/templating/__tests__/replaceShortcuts.js @@ -1,27 +1,26 @@ -var TemplateEngine = require('../../models/templateEngine'); +var Immutable = require('immutable'); + var TemplateBlock = require('../../models/templateBlock'); var replaceShortcuts = require('../replaceShortcuts'); describe('replaceShortcuts', function() { - var engine = TemplateEngine.create({ - blocks:[ - TemplateBlock.create('math', { - shortcuts: { - start: '$$', - end: '$$', - parsers: ['markdown'] - } - }) - ] - }); + var blocks = Immutable.List([ + TemplateBlock.create('math', { + shortcuts: { + start: '$$', + end: '$$', + parsers: ['markdown'] + } + }) + ]); it('should correctly replace inline matches by block', function() { - var content = replaceShortcuts(engine, 'test.md', 'Hello $$a = b$$'); + var content = replaceShortcuts(blocks, 'test.md', 'Hello $$a = b$$'); expect(content).toBe('Hello {% math %}a = b{% endmath %}'); }); it('should correctly replace block matches', function() { - var content = replaceShortcuts(engine, 'test.md', 'Hello\n$$\na = b\n$$\n'); + var content = replaceShortcuts(blocks, 'test.md', 'Hello\n$$\na = b\n$$\n'); expect(content).toBe('Hello\n{% math %}\na = b\n{% endmath %}\n'); }); }); diff --git a/lib/templating/conrefsLoader.js b/lib/templating/conrefsLoader.js index c3e5048..cdf0c30 100644 --- a/lib/templating/conrefsLoader.js +++ b/lib/templating/conrefsLoader.js @@ -12,12 +12,18 @@ var PathUtils = require('../utils/path'); - relative url ("./test.md") - absolute url ("/test.md") - git url ("") + + + @param {String} rootFolder + @param {Function(filePath, source)} transformFn (optional) + @param {Logger} logger (optional) */ var ConrefsLoader = nunjucks.Loader.extend({ async: true, - init: function(rootFolder, logger) { + init: function(rootFolder, transformFn, logger) { this.rootFolder = rootFolder; + this.transformFn = transformFn; this.logger = logger; this.git = new Git(); }, @@ -34,9 +40,16 @@ var ConrefsLoader = nunjucks.Loader.extend({ if (that.logger) that.logger.debug.ln('resolve from git', sourceURL, 'to', filepath); } - // Read file from absolute path + // Read file from absolute path return fs.readFile(filepath) .then(function(source) { + if (that.transformFn) { + return that.transformFn(filepath, source); + } + + return source; + }) + .then(function(source) { return { src: source.toString('utf8'), path: filepath diff --git a/lib/templating/index.js b/lib/templating/index.js index a33965d..bd74aca 100644 --- a/lib/templating/index.js +++ b/lib/templating/index.js @@ -1,9 +1,10 @@ module.exports = { - render: require('./render'), - renderFile: require('./renderFile'), - postRender: require('./postRender'), + render: require('./render'), + renderFile: require('./renderFile'), + postRender: require('./postRender'), + replaceShortcuts: require('./replaceShortcuts'), - ConrefsLoader: require('./conrefsLoader'), - ThemesLoader: require('./themesLoader') + ConrefsLoader: require('./conrefsLoader'), + ThemesLoader: require('./themesLoader') }; diff --git a/lib/templating/listShortcuts.js b/lib/templating/listShortcuts.js index 12d09ad..b5fe793 100644 --- a/lib/templating/listShortcuts.js +++ b/lib/templating/listShortcuts.js @@ -5,12 +5,11 @@ var parsers = require('../parsers'); Return a list of all shortcuts that can apply to a file for a TemplatEngine - @param {TemplateEngine} engine + @param {List<TemplateBlock>} engine @param {String} filePath @return {List<TemplateShortcut>} */ -function listShortcuts(engine, filePath) { - var blocks = engine.getBlocks(); +function listShortcuts(blocks, filePath) { var parser = parsers.getForFile(filePath); if (!parser) { diff --git a/lib/templating/render.js b/lib/templating/render.js index 584890a..a20548b 100644 --- a/lib/templating/render.js +++ b/lib/templating/render.js @@ -22,7 +22,7 @@ function renderTemplate(engine, filePath, content, context) { var env = engine.toNunjucks(blocks); // Replace shortcuts from plugin's blocks - content = replaceShortcuts(engine, filePath, content); + content = replaceShortcuts(engine.getBlocks(), filePath, content); return timing.measure( 'template.render', diff --git a/lib/templating/replaceShortcuts.js b/lib/templating/replaceShortcuts.js index 66ddff3..acdd1b9 100644 --- a/lib/templating/replaceShortcuts.js +++ b/lib/templating/replaceShortcuts.js @@ -26,13 +26,13 @@ function applyShortcut(content, shortcut) { /** Replace shortcuts from blocks in a string - @param {TemplateEngine} engine + @param {List<TemplateBlock>} engine @param {String} filePath @param {String} content @return {String} */ -function replaceShortcuts(engine, filePath, content) { - var shortcuts = listShortcuts(engine, filePath); +function replaceShortcuts(blocks, filePath, content) { + var shortcuts = listShortcuts(blocks, filePath); return shortcuts.reduce(applyShortcut, content); } |