-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
42 lines (35 loc) · 1.06 KB
/
index.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
module.exports = {
subscribers: {},
on: function (eventName, callback) {
(this.subscribers[eventName] = this.subscribers[eventName] || []).push(
callback
);
return this;
},
off: function (id) {
for (var eventName in this.subscribers) {
var eventSubscribers = this.subscribers[eventName];
for (var i = 0; i < eventSubscribers.length; i++) {
if (eventSubscribers[i] === id) {
eventSubscribers.splice(i, 1);
}
}
}
},
all: function(callback){
return this.on('*', callback);
},
trigger: function (eventName, data, source) {
var eventPrefix = eventName.split(':')[0];
var eventSubscribers = (this.subscribers[eventName] || [])
.concat(this.subscribers['*'] || [])
.concat(this.subscribers[eventPrefix + ':*'] || []);
for (var i = 0; i < eventSubscribers.length; i++) {
eventSubscribers[i](eventName, data, source, eventSubscribers);
}
},
// backward-compatibility alias for trigger
send: function() {
return this.trigger.apply(this, arguments);
}
};