-
Notifications
You must be signed in to change notification settings - Fork 0
/
base.js
99 lines (62 loc) · 1.82 KB
/
base.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
const Path = require('path');
const Configuration = require(Path.join(__dirname, 'configuration.js'));
class ObjectBase extends Object {
constructor(inp) {
super(inp);
Object.assign(this, inp);
this['_op'] = {};
this['_op']['handlers'] = {};
}
onGet(/* ... */) {
if (arguments.length > 1) {
// two arguments: a target key and a callback.
let key = arguments[0];
let callback = arguments[1];
return this.setTargetedGetter(key, callback);
} else {
// one argument: just a callback.
let callback = arguments[0];
return this.setGlobalGetter(callback);
}
}
onSet(/* ... */) {
if (arguments.length > 1) {
// two arguments: a target key and a callback.
let key = arguments[0];
let callback = arguments[1];
return this.setTargetedSetter(key, callback);
} else {
// one argument: just a callback.
let callback = arguments[0];
return this.setGlobalSetter(callback);
}
}
setTargetedGetter(key, callback) {
this.initHandlers(key);
if (Configuration.singleCallbackPerAction) {
this['_op']['handlers'][key]['get'] = [callback];
} else {
this['_op']['handlers'][key]['get'].push(callback);
}
}
setTargetedSetter(key, callback) {
this.initHandlers(key);
if (Configuration.singleCallbackPerAction) {
this['_op']['handlers'][key]['set'] = [callback];
} else {
this['_op']['handlers'][key]['set'].push(callback);
} else {
let data = this['_op']['handlers'][key]['set'];
this['_op']['handlers'][key]['set'] = [callback];
}
}
initHandlers(key, force) {
if (!this['_op']['handlers'][key] || !!force) {
this['_op']['handlers'][key] = {
get: [],
set: [],
};
}
}
}
module.exports = ObjectBase;