summaryrefslogtreecommitdiffstats
path: root/lib/templating
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-05-11 14:45:54 +0200
committerSamy Pesse <samypesse@gmail.com>2016-05-11 14:45:54 +0200
commit961d43f085036263edfe064c2107ab27ad62d8fa (patch)
tree49c845d9d9e11e0abaf94094a4aab263921216bb /lib/templating
parent7bd49606e3aceb4078258c6693f53bc129eb5b93 (diff)
downloadgitbook-961d43f085036263edfe064c2107ab27ad62d8fa.zip
gitbook-961d43f085036263edfe064c2107ab27ad62d8fa.tar.gz
gitbook-961d43f085036263edfe064c2107ab27ad62d8fa.tar.bz2
Fix #1293: replace block shortcuts when including files
Diffstat (limited to 'lib/templating')
-rw-r--r--lib/templating/__tests__/replaceShortcuts.js27
-rw-r--r--lib/templating/conrefsLoader.js17
-rw-r--r--lib/templating/index.js11
-rw-r--r--lib/templating/listShortcuts.js5
-rw-r--r--lib/templating/render.js2
-rw-r--r--lib/templating/replaceShortcuts.js6
6 files changed, 40 insertions, 28 deletions
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);
}