UNPKG

2.19 kBJavaScriptView Raw
1import Emitter from '../emitter';
2import define from '../define';
3import * as is from '../is';
4import Selector from '../selector';
5
6let emitterOptions = {
7 qualifierCompare: function( selector1, selector2 ){
8 if( selector1 == null || selector2 == null ){
9 return selector1 == null && selector2 == null;
10 } else {
11 return selector1.sameText( selector2 );
12 }
13 },
14 eventMatches: function( cy, listener, eventObj ){
15 let selector = listener.qualifier;
16
17 if( selector != null ){
18 return cy !== eventObj.target && is.element( eventObj.target ) && selector.matches( eventObj.target );
19 }
20
21 return true;
22 },
23 addEventFields: function( cy, evt ){
24 evt.cy = cy;
25 evt.target = cy;
26 },
27 callbackContext: function( cy, listener, eventObj ){
28 return listener.qualifier != null ? eventObj.target : cy;
29 }
30};
31
32let argSelector = function( arg ){
33 if( is.string(arg) ){
34 return new Selector( arg );
35 } else {
36 return arg;
37 }
38};
39
40let elesfn = ({
41 createEmitter: function(){
42 let _p = this._private;
43
44 if( !_p.emitter ){
45 _p.emitter = new Emitter( emitterOptions, this );
46 }
47
48 return this;
49 },
50
51 emitter: function(){
52 return this._private.emitter;
53 },
54
55 on: function( events, selector, callback ){
56 this.emitter().on( events, argSelector(selector), callback );
57
58 return this;
59 },
60
61 removeListener: function( events, selector, callback ){
62 this.emitter().removeListener( events, argSelector(selector), callback );
63
64 return this;
65 },
66
67 removeAllListeners: function(){
68 this.emitter().removeAllListeners();
69
70 return this;
71 },
72
73 one: function( events, selector, callback ){
74 this.emitter().one( events, argSelector(selector), callback );
75
76 return this;
77 },
78
79 once: function( events, selector, callback ){
80 this.emitter().one( events, argSelector(selector), callback );
81
82 return this;
83 },
84
85 emit: function( events, extraParams ){
86 this.emitter().emit( events, extraParams );
87
88 return this;
89 },
90
91 emitAndNotify: function( event, eles ){
92 this.emit( event );
93
94 this.notify( event, eles );
95
96 return this;
97 }
98});
99
100define.eventAliasesOn( elesfn );
101
102export default elesfn;