It should generate index for languages

This commit is contained in:
Samy Pessé
2016-04-29 13:04:54 +02:00
parent 9955fa8c29
commit 3ea4e334bf
8 changed files with 91 additions and 42 deletions
+6
View File
@@ -0,0 +1,6 @@
describe('GitBook', function() {
it('should correctly export', function() {
require('../');
});
});
+22
View File
@@ -0,0 +1,22 @@
var encodeBook = require('./encodeBook');
/**
Encode an output to JSON
@param {Output}
@return {Object}
*/
function encodeOutputToJson(output) {
var book = output.getBook();
var generator = output.getGenerator();
var result = encodeBook(book);
result.output = {
name: generator
};
return result;
}
module.exports = encodeOutputToJson;
+1
View File
@@ -1,5 +1,6 @@
module.exports = {
encodeOutput: require('./encodeOutput'),
encodeBookWithPage: require('./encodeBookWithPage'),
encodeBook: require('./encodeBook'),
encodeFile: require('./encodeFile'),
+27
View File
@@ -25,5 +25,32 @@ describe('WebsiteGenerator', function() {
expect(folder).toHaveFile('test/page.html');
});
});
pit('should generate a multilingual book', function() {
return generateMock(WebsiteGenerator, {
'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)',
'en': {
'README.md': 'Hello'
},
'fr': {
'README.md': 'Bonjour'
}
})
.then(function(folder) {
// It should generate languages
expect(folder).toHaveFile('en/index.html');
expect(folder).toHaveFile('fr/index.html');
// Should not copy languages as assets
expect(folder).not.toHaveFile('en/README.md');
expect(folder).not.toHaveFile('fr/README.md');
// Should copy assets only once
expect(folder).toHaveFile('gitbook/style.css');
expect(folder).not.toHaveFile('en/gitbook/style.css');
expect(folder).toHaveFile('index.html');
});
});
});
+6 -5
View File
@@ -21,7 +21,7 @@ var generatePages = require('./generatePages');
@return {Promise<Output>}
*/
function processOutput(generator, startOutput) {
return Pormise(startOutput)
return Promise(startOutput)
.then(preparePlugins)
.then(preparePages)
.then(prepareAssets)
@@ -81,10 +81,11 @@ function processOutput(generator, startOutput) {
var outputRoot = output.getRoot();
var plugins = output.getPlugins();
var state = output.getState();
var options = output.getOptions();
return Promise.forEach(books, function(langBook, language) {
return Promise.forEach(books, function(langBook) {
// Inherits plugins list, options and state
var langOptions = options.set('root', path.join(outputRoot, language));
var langOptions = options.set('root', path.join(outputRoot, langBook.getLanguage()));
var langOutput = new Output({
book: langBook,
options: langOptions,
@@ -155,7 +156,8 @@ function generateBook(generator, book, options) {
var state = generator.State? generator.State({}) : Immutable.Map();
var start = Date.now();
return Promise(
return processOutput(
generator,
new Output({
book: book,
options: options,
@@ -163,7 +165,6 @@ function generateBook(generator, book, options) {
generator: generator.name
})
)
.then(processOutput)
.then(function(output) {
var logger = output.getLogger();
var end = Date.now();
+23 -3
View File
@@ -1,15 +1,35 @@
var Promise = require('../../utils/promise');
var JSONUtils = require('../../json');
var Templating = require('../../templating');
var writeFile = require('../helper/writeFile');
var createTemplateEngine = require('./createTemplateEngine');
/**
Finish the generation
Finish the generation, write the languages index
@param {Output}
@return {Output}
*/
function onFinish(output) {
// todo: render language index
var book = output.getBook();
var options = output.getOptions();
var prefix = options.get('prefix');
return Promise(output);
if (!book.isMultilingual()) {
return Promise(output);
}
var filePath = 'index.html';
var engine = createTemplateEngine(output, filePath);
var context = JSONUtils.encodeOutput(output);
// Render the theme
return Templating.renderFile(engine, prefix + '/languages.html', context)
// Write it to the disk
.then(function(html) {
return writeFile(output, filePath, html);
});
}
module.exports = onFinish;
+6 -6
View File
@@ -11,9 +11,9 @@ var Immutable = require('immutable');
function reduce(arr, iter, base) {
arr = Immutable.Iterable.isIterable(arr)? arr : Immutable.List(arr);
return arr.reduce(function(prev, elem, i) {
return arr.reduce(function(prev, elem, key) {
return prev.then(function(val) {
return iter(val, elem, i);
return iter(val, elem, key);
});
}, Q(base));
}
@@ -26,8 +26,8 @@ function reduce(arr, iter, base) {
@return {Promise}
*/
function forEach(arr, iter) {
return reduce(arr, function(val, el) {
return iter(el);
return reduce(arr, function(val, el, key) {
return iter(el, key);
});
}
@@ -39,8 +39,8 @@ function forEach(arr, iter) {
@return {Promise}
*/
function serie(arr, iter, base) {
return reduce(arr, function(before, item, i) {
return Q(iter(item, i))
return reduce(arr, function(before, item, key) {
return Q(iter(item, key))
.then(function(r) {
before.push(r);
return before;
-28
View File
@@ -1,28 +0,0 @@
var path = require('path');
var gitbook = require('./lib');
var Output = require('./lib/output');
var NodeFS = require('./lib/fs/node');
var BASE_PATH = path.join(__dirname); //, 'docs');
// Create a filesystem to read the book
var fs = NodeFS(BASE_PATH);
// Create a book instance
var book = gitbook.Book.createForFS(fs);
// Parse the book
gitbook.Parse.parseBook(book)
.then(function(_book) {
return Output.generate(Output.WebsiteGenerator, _book, {
root: path.join(__dirname, '_book')
});
})
.then(function(pages) {
//console.log('parsed', pages);
}, function(err) {
console.log('error:', err.stack);
});