diff options
author | Samy Pessé <samypesse@gmail.com> | 2014-11-01 15:00:13 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2014-11-01 15:00:13 +0100 |
commit | 002d685ebb53b7cdf786191688c4077cd0a6d846 (patch) | |
tree | abe9220702d7fecdd27b7dd80e37eaf02a5b8d1d /lib/parse | |
parent | 1e4632080b64c7f100c3886454fedab70c7d8909 (diff) | |
download | gitbook-002d685ebb53b7cdf786191688c4077cd0a6d846.zip gitbook-002d685ebb53b7cdf786191688c4077cd0a6d846.tar.gz gitbook-002d685ebb53b7cdf786191688c4077cd0a6d846.tar.bz2 |
Adapt include in page parsing to works on clientside
Diffstat (limited to 'lib/parse')
-rw-r--r-- | lib/parse/include.js | 42 | ||||
-rw-r--r-- | lib/parse/includer.js | 15 | ||||
-rw-r--r-- | lib/parse/index.js | 3 | ||||
-rw-r--r-- | lib/parse/page.js | 2 |
4 files changed, 21 insertions, 41 deletions
diff --git a/lib/parse/include.js b/lib/parse/include.js index 5fba2be..483b184 100644 --- a/lib/parse/include.js +++ b/lib/parse/include.js @@ -1,48 +1,12 @@ var _ = require('lodash'); -var fs = require('graceful-fs'); -var path = require('path'); - - -// Include helper -function importInclude(name, paths) { - return paths - .map(function(folder) { - // Try including snippet from FS - try { - var fname = path.join(folder, name); - // Trim trailing newlines/space of imported snippets - return fs.readFileSync(fname, 'utf8').trimRight(); - } catch(err) {} - }) - .filter(Boolean)[0]; -} - -function includer(ctx, folders) { - return function(key) { - key = key.trim(); - return ctx[key] || importInclude(key, folders); - }; -} - -module.exports = function(markdown, folder, ctx) { - // List of folders to search for includes - var folders = []; - - // Handle folder arg (string or array) - if(_.isString(folder)) { - folders = [folder]; - } else if(_.isArray(folder)) { - folders = folder; - } - - // variable context - ctx = ctx || {}; +module.exports = function(markdown, includer) { // Memoized include function (to cache lookups) - var _include = _.memoize(includer(ctx, folders)); + var _include = _.memoize(includer); return markdown.replace(/{{([\s\S]+?)}}/g, function(match, key) { // If fails leave content as is + key = key.trim(); return _include(key) || match; }); }; diff --git a/lib/parse/includer.js b/lib/parse/includer.js new file mode 100644 index 0000000..f7f20e0 --- /dev/null +++ b/lib/parse/includer.js @@ -0,0 +1,15 @@ +// Return a fs inclduer +module.exports = function(ctx, folders, resolveFile, readFile) { + return function(name) { + return ctx[name] || + folders.map(function(folder) { + // Try including snippet from FS + try { + var fname = resolveFile(folder, name); + // Trim trailing newlines/space of imported snippets + return readFile(fname, 'utf8').trimRight(); + } catch(err) {} + }) + .filter(Boolean)[0]; + } +}; diff --git a/lib/parse/index.js b/lib/parse/index.js index c8c15e6..23471af 100644 --- a/lib/parse/index.js +++ b/lib/parse/index.js @@ -6,5 +6,6 @@ module.exports = { lex: require('./lex'), progress: require('./progress'), navigation: require('./navigation'), - readme: require('./readme') + readme: require('./readme'), + includer: require('./includer') }; diff --git a/lib/parse/page.js b/lib/parse/page.js index e694f1c..56899fd 100644 --- a/lib/parse/page.js +++ b/lib/parse/page.js @@ -51,7 +51,7 @@ function parsePage(src, options) { options = options || {}; // Lex if not already lexed - return (_.isArray(src) ? src : lex(include(src, [options.dir, options.includes_dir], options.variables))) + return (_.isArray(src) ? src : lex(include(src, options.includer || function() { return undefined; }))) .map(function(section) { // Transform given type if(section.type === 'exercise') { |