-
Notifications
You must be signed in to change notification settings - Fork 37
/
event-manager.js
85 lines (76 loc) · 2.11 KB
/
event-manager.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
define( [], function(){
var EventManager = function( object ) {
var _listeners = [],
_target = this,
_this = this;
this.dispatch = function( eventName, eventData ) {
var e;
if( typeof( eventName ) !== "object" ){
e = {
type: eventName + "",
target: _target,
data: eventData,
};
}
else {
e = eventName;
eventName = e.type;
} //if
e.currentTarget = _target;
if( _listeners[ eventName ] ) {
var theseListeners = _listeners[ eventName ].slice();
for( var i=0, l=theseListeners.length; i<l; ++i ){
theseListeners[ i ]( e );
} //for
} //if
}; //dispatch
this.listen = function( eventName, listener ) {
if( typeof( eventName ) === "object" ){
for( var i in eventName ){
if( eventName.hasOwnProperty( i ) ){
_this.listen( i, eventName[ i ] );
} //if
} //for
}
else {
if ( !_listeners[ eventName ] ) {
_listeners[ eventName ] = [];
}
_listeners[ eventName ].push( listener );
} //if
}; //listen
this.unlisten = function( eventName, listener ) {
if( typeof( eventName ) === "object" ){
for( var i in eventName ){
if( eventName.hasOwnProperty( i ) ){
_this.unlisten( i, eventName[ i ] );
} //if
} //for
}
else {
var theseListeners = _listeners[ eventName ];
if ( theseListeners ) {
if ( listener ) {
var idx = theseListeners.indexOf( listener );
if ( idx > -1 ) {
theseListeners.splice( idx, 1 );
} //if
}
else {
_listeners[ eventName ] = [];
}
} //if
} //if
}; //unlisten
this.apply = function( object ) {
object.listen = _this.listen;
object.unlisten = _this.unlisten;
object.dispatch = _this.dispatch;
_target = object;
}; //apply
if( object ) {
this.apply( object );
} //if
}; //EventManager
return EventManager;
});