Fix resolution of theme's templates

This commit is contained in:
Samy Pessé
2016-04-25 15:36:18 +02:00
parent 4552ccd7d7
commit 0c2dc06cb7
9 changed files with 53 additions and 19 deletions
+2
View File
@@ -0,0 +1,2 @@
module.exports = '_layouts';
+1
View File
@@ -1,5 +1,6 @@
module.exports = {
generate: require('./generateBook'),
JSONGenerator: require('./json'),
WebsiteGenerator: require('./website'),
EbookGenerator: require('./ebook')
};
+16 -1
View File
@@ -1,7 +1,18 @@
var path = require('path');
var TEMPLATES_FOLDER = require('../../constants/templatesFolder');
var Templating = require('../../templating');
var TemplateEngine = require('../../models/templateEngine');
var listSearchPaths = require('./listSearchPaths');
/**
Directory for a theme with the templates
*/
function templateFolder(dir) {
return path.join(dir, TEMPLATES_FOLDER);
}
/**
Create templating engine to render themes
@@ -10,7 +21,11 @@ var listSearchPaths = require('./listSearchPaths');
*/
function createTemplateEngine(output) {
var searchPaths = listSearchPaths(output);
var loader = new Templating.ThemesLoader(searchPaths);
// Search paths for templates
var tplSearchPaths = searchPaths.map(templateFolder);
var loader = new Templating.ThemesLoader(tplSearchPaths);
return new TemplateEngine({
loader: loader
+1 -1
View File
@@ -1,6 +1,6 @@
module.exports = {
name: 'json',
name: 'website',
Options: require('./options'),
onPage: require('./onPage')
};
+3 -1
View File
@@ -12,6 +12,8 @@ var createTemplateEngine = require('./createTemplateEngine');
@param {Page} page
*/
function onPage(output, page) {
var options = output.getOptions();
var prefix = options.get('prefix');
var engine = createTemplateEngine(output);
return Modifiers.modifyHTML(page, getModifiers(output, page))
@@ -20,7 +22,7 @@ function onPage(output, page) {
var context = JSONUtils.encodeBookWithPage(output.getBook(), resultPage);
// Render the theme
return Templating.renderFile(engine, 'website/page.html', context)
return Templating.renderFile(engine, prefix + '/page.html', context)
// Write it to the disk
.then(function(html) {
+4 -1
View File
@@ -2,7 +2,10 @@ var Immutable = require('immutable');
var Options = Immutable.Record({
// Root folder for the output
root: String()
root: String(),
// Prefix for generation
prefix: String('website')
});
module.exports = Options;
+1 -1
View File
@@ -8,7 +8,7 @@ var replaceShortcuts = require('./replaceShortcuts');
@param {TemplateEngine} engine
@param {String} filePath
@param {String} content
@param {Object} ctx
@param {Object} context
@return {Promise<String>}
*/
function renderTemplate(engine, filePath, content, context) {
+24 -13
View File
@@ -1,27 +1,38 @@
var Promise = require('../utils/promise');
var replaceShortcuts = require('./replaceShortcuts');
var error = require('../utils/error');
var render = require('./render');
/**
Render a template
@param {TemplateEngine} engine
@param {String} filePath
@param {String} content
@param {Object} ctx
@param {Object} context
@return {Promise<String>}
*/
function renderTemplateFile(engine, filePath, content, context) {
context = context || {};
var env = engine.toNunjucks();
function renderTemplateFile(engine, filePath, context) {
var loader = engine.getLoader();
content = replaceShortcuts(engine, filePath, content);
return Promise()
.then(function() {
if (!loader.async) {
return loader.getSource(filePath);
}
var deferred = Promise.defer();
loader.getSource(filePath, deferred.makeNodeResolver());
return deferred.promise;
})
.then(function(result) {
if (!result) {
throw error.TemplateError(new Error('Not found'), {
filename: filePath
});
}
return render(engine, result.path, result.src, context);
});
return Promise.nfcall(
env.render.bind(env),
content,
context
);
}
module.exports = renderTemplateFile;
+1 -1
View File
@@ -16,7 +16,7 @@ var book = gitbook.Book.createForFS(fs);
// Parse the book
gitbook.Parse.parseBook(book)
.then(function(_book) {
return Output.generate(Output.JSONGenerator, _book, {
return Output.generate(Output.WebsiteGenerator, _book, {
root: path.join(__dirname, '_book')
});
})