diff options
Diffstat (limited to 'packages/gitbook/src/models/glossary.js')
-rw-r--r-- | packages/gitbook/src/models/glossary.js | 162 |
1 files changed, 71 insertions, 91 deletions
diff --git a/packages/gitbook/src/models/glossary.js b/packages/gitbook/src/models/glossary.js index e269b14..f958f63 100644 --- a/packages/gitbook/src/models/glossary.js +++ b/packages/gitbook/src/models/glossary.js @@ -1,109 +1,89 @@ -const Immutable = require('immutable'); +const { Record, OrderedMap } = require('immutable'); -const error = require('../utils/error'); const File = require('./file'); const GlossaryEntry = require('./glossaryEntry'); -const parsers = require('../parsers'); -const Glossary = Immutable.Record({ - file: File(), - entries: Immutable.OrderedMap() -}); - -Glossary.prototype.getFile = function() { - return this.get('file'); -}; - -Glossary.prototype.getEntries = function() { - return this.get('entries'); -}; - -/** - Return an entry by its name - - @param {String} name - @return {GlossaryEntry} -*/ -Glossary.prototype.getEntry = function(name) { - const entries = this.getEntries(); - const id = GlossaryEntry.nameToID(name); - - return entries.get(id); +const DEFAULTS = { + file: new File(), + entries: OrderedMap() }; -/** - Render glossary as text - - @return {Promise<String>} -*/ -Glossary.prototype.toText = function(parser) { - const file = this.getFile(); - const entries = this.getEntries(); - - parser = parser ? parsers.getByExt(parser) : file.getParser(); - - if (!parser) { - throw error.FileNotParsableError({ - filename: file.getPath() - }); +class Glossary extends Record(DEFAULTS) { + getFile() { + return this.get('file'); } - return parser.renderGlossary(entries.toJS()); -}; - - -/** - Add/Replace an entry to a glossary - - @param {Glossary} glossary - @param {GlossaryEntry} entry - @return {Glossary} -*/ -Glossary.addEntry = function addEntry(glossary, entry) { - const id = entry.getID(); - let entries = glossary.getEntries(); - - entries = entries.set(id, entry); - return glossary.set('entries', entries); -}; + getEntries() { + return this.get('entries'); + } -/** - Add/Replace an entry to a glossary by name/description + /** + * Set file linked to the glossary. + * @param {File} file + * @return {Readme} + */ + setFile(file) { + return this.merge({ file }); + } - @param {Glossary} glossary - @param {GlossaryEntry} entry - @return {Glossary} -*/ -Glossary.addEntryByName = function addEntryByName(glossary, name, description) { - const entry = new GlossaryEntry({ - name, - description - }); + /** + * Return an entry by its name. + * @param {String} name + * @return {GlossaryEntry} + */ + getEntry(name) { + const { entries } = this; + const id = GlossaryEntry.nameToID(name); - return Glossary.addEntry(glossary, entry); -}; + return entries.get(id); + } -/** - Create a glossary from a list of entries + /** + * Add/Replace an entry to a glossary. + * @param {GlossaryEntry} entry + * @return {Glossary} + */ + addEntry(entry) { + const id = entry.getID(); + let { entries } = this; + + entries = entries.set(id, entry); + return this.set('entries', entries); + } - @param {String} filename - @param {Array|List} entries - @return {Glossary} -*/ -Glossary.createFromEntries = function createFromEntries(file, entries) { - entries = entries.map(function(entry) { - if (!(entry instanceof GlossaryEntry)) { - entry = new GlossaryEntry(entry); - } + /** + * Add/Replace an entry to a glossary by name/description. + * @param {GlossaryEntry} entry + * @return {Glossary} + */ + addEntryByName(name, description) { + const entry = new GlossaryEntry({ + name, + description + }); - return [entry.getID(), entry]; - }); + return this.addEntry(entry); + } - return new Glossary({ - file, - entries: Immutable.OrderedMap(entries) - }); -}; + /** + * Create a glossary from a list of entries. + * + * @param {Array|List} entries + * @return {Glossary} + */ + static createFromEntries(entries) { + entries = entries.map((entry) => { + if (!(entry instanceof GlossaryEntry)) { + entry = new GlossaryEntry(entry); + } + + return [entry.id, entry]; + }); + return new Glossary({ + entries: OrderedMap(entries) + }); + } +} module.exports = Glossary; |