mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-20 09:33:21 +00:00
It should generate index for languages
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
|
||||
describe('GitBook', function() {
|
||||
it('should correctly export', function() {
|
||||
require('../');
|
||||
});
|
||||
});
|
||||
@@ -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,5 +1,6 @@
|
||||
|
||||
module.exports = {
|
||||
encodeOutput: require('./encodeOutput'),
|
||||
encodeBookWithPage: require('./encodeBookWithPage'),
|
||||
encodeBook: require('./encodeBook'),
|
||||
encodeFile: require('./encodeFile'),
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user