mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-24 11:26:31 +00:00
Fix resolution of theme's templates
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
|
||||
module.exports = '_layouts';
|
||||
@@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
generate: require('./generateBook'),
|
||||
JSONGenerator: require('./json'),
|
||||
WebsiteGenerator: require('./website'),
|
||||
EbookGenerator: require('./ebook')
|
||||
};
|
||||
|
||||
@@ -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,6 +1,6 @@
|
||||
|
||||
module.exports = {
|
||||
name: 'json',
|
||||
name: 'website',
|
||||
Options: require('./options'),
|
||||
onPage: require('./onPage')
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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')
|
||||
});
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user