summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/models/book.js2
-rw-r--r--lib/models/fs.js3
-rw-r--r--lib/models/languages.js26
-rw-r--r--lib/parse/__tests__/parseBook.js16
-rw-r--r--lib/parse/parseBook.js2
-rw-r--r--lib/plugins/findForBook.js1
6 files changed, 44 insertions, 6 deletions
diff --git a/lib/models/book.js b/lib/models/book.js
index 030223f..8f8ab74 100644
--- a/lib/models/book.js
+++ b/lib/models/book.js
@@ -248,7 +248,7 @@ Book.createFromParent = function createFromParent(parent, language) {
logger: parent.getLogger(),
ignore: Ignore().add(ignore),
language: language,
- fs: FS.reduceScope(parent.getFS(), language)
+ fs: FS.reduceScope(parent.getContentFS(), language)
});
};
diff --git a/lib/models/fs.js b/lib/models/fs.js
index f124da8..ab65dd5 100644
--- a/lib/models/fs.js
+++ b/lib/models/fs.js
@@ -33,7 +33,8 @@ FS.prototype.getRoot = function() {
*/
FS.prototype.isInScope = function(filename) {
var rootPath = this.getRoot();
- filename = path.resolve(rootPath, filename);
+ filename = path.join(rootPath, filename);
+
return PathUtil.isInRoot(rootPath, filename);
};
diff --git a/lib/models/languages.js b/lib/models/languages.js
index c64857f..6c19cba 100644
--- a/lib/models/languages.js
+++ b/lib/models/languages.js
@@ -1,6 +1,7 @@
var Immutable = require('immutable');
var File = require('./file');
+var Language = require('./language');
var Languages = Immutable.Record({
file: File(),
@@ -34,4 +35,29 @@ Languages.prototype.getLanguage = function(lang) {
return this.getList().get(lang);
};
+
+/**
+ Create a languages list from a JS object
+
+ @param {File}
+ @param {Array}
+ @return {Language}
+*/
+Languages.createFromList = function(file, langs) {
+ var list = Immutable.OrderedMap();
+
+ langs.forEach(function(lang) {
+ lang = Language({
+ title: lang.title,
+ path: lang.path
+ });
+ list = list.set(lang.getID(), lang);
+ });
+
+ return Languages({
+ file: file,
+ list: list
+ });
+}
+
module.exports = Languages;
diff --git a/lib/parse/__tests__/parseBook.js b/lib/parse/__tests__/parseBook.js
index 441b7c0..735ba57 100644
--- a/lib/parse/__tests__/parseBook.js
+++ b/lib/parse/__tests__/parseBook.js
@@ -4,16 +4,26 @@ var createMockFS = require('../../fs/mock');
describe('parseBook', function() {
var parseBook = require('../parseBook');
- pit('should parse glossary if exists', function() {
+ pit('should parse multilingual book', function() {
var fs = createMockFS({
- 'README.md': 'Hello World',
- 'GLOSSARY.md': '# Glossary\n\n## Hello\nDescription for hello'
+ 'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)',
+ 'en': {
+ 'README.md': 'Hello'
+ },
+ 'fr': {
+ 'README.md': 'Bonjour'
+ }
});
var book = Book.createForFS(fs);
return parseBook(book)
.then(function(resultBook) {
+ var languages = resultBook.getLanguages();
+ var books = resultBook.getBooks();
+ expect(resultBook.isMultilingual()).toBe(true);
+ expect(languages.getList().size).toBe(2);
+ expect(books.size).toBe(2);
});
});
});
diff --git a/lib/parse/parseBook.js b/lib/parse/parseBook.js
index 7dfa1eb..69cd66e 100644
--- a/lib/parse/parseBook.js
+++ b/lib/parse/parseBook.js
@@ -62,7 +62,7 @@ function parseBook(book) {
.then(parseConfig)
.then(parseLanguages)
.then(function(resultBook) {
- if (book.isMultilingual()) {
+ if (resultBook.isMultilingual()) {
return parseMultilingualBook(resultBook);
} else {
return parseBookContent(resultBook);
diff --git a/lib/plugins/findForBook.js b/lib/plugins/findForBook.js
index 75a4988..af0c1ee 100644
--- a/lib/plugins/findForBook.js
+++ b/lib/plugins/findForBook.js
@@ -14,6 +14,7 @@ function findForBook(book) {
return Promise.all([
findInstalled(path.resolve(__dirname, '../..')),
findInstalled(book.getRoot())
+ // todo: list for parent of multilingual
])
.then(function(results) {
return Immutable.List(results)