forked from NexusNull/bot-web-interface
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBotUI.js
69 lines (56 loc) · 1.53 KB
/
BotUI.js
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
/**
* Created by Nexus on 16.08.2017.
*/
class BotUI {
constructor(publisher, id, structure, parent, attachTarget) {
this.publisher = publisher;
this.id = id;
this.structure = structure;
this.parent = parent ? parent : null;
this.attachTarget = attachTarget ? attachTarget : null;
this.children = new Map();
this.cache = {};
this.dataSource = function () {
return null;
};
};
fetchData() {
this.cache = this.dataSource();
};
setDataSource(callback) {
this.dataSource = callback;
};
getData() {
return this.cache;
};
pushData(name, value) {
this.publisher.pushData(this.id, name, value);
};
createSubBotUI(structure, attachTarget) {
let botUI = this.publisher.createInterface(structure, this, attachTarget);
this.children.set(botUI.id, botUI);
return botUI;
};
getParent() {
return this.parent;
};
destroy(sub) {
let destroyed = [this.id];
for (let child of this.children) {
child[1].destroy(true);
this.children.delete(child[0])
destroyed.push(child[0]);
}
if (!sub)
this.publisher.removeInterfaces(destroyed)
return destroyed;
};
getStructure() {
return {
parent: this.parent ? this.parent.id : null,
attachTarget: this.attachTarget,
structure: this.structure
};
};
}
module.exports = BotUI;