blob: f958f6306a07cfe6bfa08fc8c32f989cf8915eeb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
const { Record, OrderedMap } = require('immutable');
const File = require('./file');
const GlossaryEntry = require('./glossaryEntry');
const DEFAULTS = {
file: new File(),
entries: OrderedMap()
};
class Glossary extends Record(DEFAULTS) {
getFile() {
return this.get('file');
}
getEntries() {
return this.get('entries');
}
/**
* Set file linked to the glossary.
* @param {File} file
* @return {Readme}
*/
setFile(file) {
return this.merge({ file });
}
/**
* Return an entry by its name.
* @param {String} name
* @return {GlossaryEntry}
*/
getEntry(name) {
const { entries } = this;
const id = GlossaryEntry.nameToID(name);
return entries.get(id);
}
/**
* 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);
}
/**
* 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 this.addEntry(entry);
}
/**
* 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;
|