diff options
Diffstat (limited to 'lib/models/book.js')
-rw-r--r-- | lib/models/book.js | 364 |
1 files changed, 0 insertions, 364 deletions
diff --git a/lib/models/book.js b/lib/models/book.js deleted file mode 100644 index f774ee8..0000000 --- a/lib/models/book.js +++ /dev/null @@ -1,364 +0,0 @@ -var path = require('path'); -var Immutable = require('immutable'); - -var Logger = require('../utils/logger'); - -var FS = require('./fs'); -var Config = require('./config'); -var Readme = require('./readme'); -var Summary = require('./summary'); -var Glossary = require('./glossary'); -var Languages = require('./languages'); -var Ignore = require('./ignore'); - -var Book = Immutable.Record({ - // Logger for outptu message - logger: Logger(), - - // Filesystem binded to the book scope to read files/directories - fs: FS(), - - // Ignore files parser - ignore: Ignore(), - - // Structure files - config: Config(), - readme: Readme(), - summary: Summary(), - glossary: Glossary(), - languages: Languages(), - - // ID of the language for language books - language: String(), - - // List of children, if multilingual (String -> Book) - books: Immutable.OrderedMap() -}); - -Book.prototype.getLogger = function() { - return this.get('logger'); -}; - -Book.prototype.getFS = function() { - return this.get('fs'); -}; - -Book.prototype.getIgnore = function() { - return this.get('ignore'); -}; - -Book.prototype.getConfig = function() { - return this.get('config'); -}; - -Book.prototype.getReadme = function() { - return this.get('readme'); -}; - -Book.prototype.getSummary = function() { - return this.get('summary'); -}; - -Book.prototype.getGlossary = function() { - return this.get('glossary'); -}; - -Book.prototype.getLanguages = function() { - return this.get('languages'); -}; - -Book.prototype.getBooks = function() { - return this.get('books'); -}; - -Book.prototype.getLanguage = function() { - return this.get('language'); -}; - -/** - Return FS instance to access the content - - @return {FS} -*/ -Book.prototype.getContentFS = function() { - var fs = this.getFS(); - var config = this.getConfig(); - var rootFolder = config.getValue('root'); - - if (rootFolder) { - return FS.reduceScope(fs, rootFolder); - } - - return fs; -}; - -/** - Return root of the book - - @return {String} -*/ -Book.prototype.getRoot = function() { - var fs = this.getFS(); - return fs.getRoot(); -}; - -/** - Return root for content of the book - - @return {String} -*/ -Book.prototype.getContentRoot = function() { - var fs = this.getContentFS(); - return fs.getRoot(); -}; - -/** - Check if a file is ignore (should not being parsed, etc) - - @param {String} ref - @return {Page|undefined} -*/ -Book.prototype.isFileIgnored = function(filename) { - var ignore = this.getIgnore(); - var language = this.getLanguage(); - - // Ignore is always relative to the root of the main book - if (language) { - filename = path.join(language, filename); - } - - return ignore.isFileIgnored(filename); -}; - -/** - Check if a content file is ignore (should not being parsed, etc) - - @param {String} ref - @return {Page|undefined} -*/ -Book.prototype.isContentFileIgnored = function(filename) { - var config = this.getConfig(); - var rootFolder = config.getValue('root'); - - if (rootFolder) { - filename = path.join(rootFolder, filename); - } - - return this.isFileIgnored(filename); -}; - -/** - Return a page from a book by its path - - @param {String} ref - @return {Page|undefined} -*/ -Book.prototype.getPage = function(ref) { - return this.getPages().get(ref); -}; - -/** - Is this book the parent of language's books - - @return {Boolean} -*/ -Book.prototype.isMultilingual = function() { - return (this.getLanguages().getCount() > 0); -}; - -/** - Return true if book is associated to a language - - @return {Boolean} -*/ -Book.prototype.isLanguageBook = function() { - return Boolean(this.getLanguage()); -}; - -/** - Return a languages book - - @param {String} language - @return {Book} -*/ -Book.prototype.getLanguageBook = function(language) { - var books = this.getBooks(); - return books.get(language); -}; - -/** - Add a new language book - - @param {String} language - @param {Book} book - @return {Book} -*/ -Book.prototype.addLanguageBook = function(language, book) { - var books = this.getBooks(); - books = books.set(language, book); - - return this.set('books', books); -}; - -/** - Set the summary for this book - - @param {Summary} - @return {Book} -*/ -Book.prototype.setSummary = function(summary) { - return this.set('summary', summary); -}; - -/** - Set the readme for this book - - @param {Readme} - @return {Book} -*/ -Book.prototype.setReadme = function(readme) { - return this.set('readme', readme); -}; - -/** - Set the configuration for this book - - @param {Config} - @return {Book} -*/ -Book.prototype.setConfig = function(config) { - return this.set('config', config); -}; - -/** - Set the ignore instance for this book - - @param {Ignore} - @return {Book} -*/ -Book.prototype.setIgnore = function(ignore) { - return this.set('ignore', ignore); -}; - -/** - Change log level - - @param {String} level - @return {Book} -*/ -Book.prototype.setLogLevel = function(level) { - this.getLogger().setLevel(level); - return this; -}; - -/** - Create a book using a filesystem - - @param {FS} fs - @return {Book} -*/ -Book.createForFS = function createForFS(fs) { - return new Book({ - fs: fs - }); -}; - -/** - Infers the default extension for files - @return {String} -*/ -Book.prototype.getDefaultExt = function() { - // Inferring sources - var clues = [ - this.getReadme(), - this.getSummary(), - this.getGlossary() - ]; - - // List their extensions - var exts = clues.map(function (clue) { - var file = clue.getFile(); - if (file.exists()) { - return file.getParser().getExtensions().first(); - } else { - return null; - } - }); - // Adds the general default extension - exts.push('.md'); - - // Choose the first non null - return exts.find(function (e) { return e !== null; }); -}; - -/** - Infer the default path for a Readme. - @param {Boolean} [absolute=false] False for a path relative to - this book's content root - @return {String} -*/ -Book.prototype.getDefaultReadmePath = function(absolute) { - var defaultPath = 'README'+this.getDefaultExt(); - if (absolute) { - return path.join(this.getContentRoot(), defaultPath); - } else { - return defaultPath; - } -}; - -/** - Infer the default path for a Summary. - @param {Boolean} [absolute=false] False for a path relative to - this book's content root - @return {String} -*/ -Book.prototype.getDefaultSummaryPath = function(absolute) { - var defaultPath = 'SUMMARY'+this.getDefaultExt(); - if (absolute) { - return path.join(this.getContentRoot(), defaultPath); - } else { - return defaultPath; - } -}; - -/** - Infer the default path for a Glossary. - @param {Boolean} [absolute=false] False for a path relative to - this book's content root - @return {String} -*/ -Book.prototype.getDefaultGlossaryPath = function(absolute) { - var defaultPath = 'GLOSSARY'+this.getDefaultExt(); - if (absolute) { - return path.join(this.getContentRoot(), defaultPath); - } else { - return defaultPath; - } -}; - -/** - Create a language book from a parent - - @param {Book} parent - @param {String} language - @return {Book} -*/ -Book.createFromParent = function createFromParent(parent, language) { - var ignore = parent.getIgnore(); - var config = parent.getConfig(); - - // Set language in configuration - config = config.setValue('language', language); - - return new Book({ - // Inherits config. logegr and list of ignored files - logger: parent.getLogger(), - config: config, - ignore: ignore, - - language: language, - fs: FS.reduceScope(parent.getContentFS(), language) - }); -}; - -module.exports = Book; |