var path = require('path'); var Immutable = require('immutable'); var Ignore = require('ignore'); 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 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() }); 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.getPages = function() { return this.get('pages'); }; /** 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(); }; /** 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(); return ignore.filter([filename]).length == 0; }; /** 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); }; /** Create a book using a filesystem @param {FS} fs @return {Book} */ Book.createForFS = function createForFS(fs) { return new Book({ fs: fs }); }; module.exports = Book;