summaryrefslogtreecommitdiffstats
path: root/packages/gitbook/src/models/glossary.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook/src/models/glossary.js')
-rw-r--r--packages/gitbook/src/models/glossary.js162
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;