1 | import Emitter from '../emitter';
|
2 | import define from '../define';
|
3 | import * as is from '../is';
|
4 | import Selector from '../selector';
|
5 |
|
6 | let 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 |
|
32 | let argSelector = function( arg ){
|
33 | if( is.string(arg) ){
|
34 | return new Selector( arg );
|
35 | } else {
|
36 | return arg;
|
37 | }
|
38 | };
|
39 |
|
40 | let 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 |
|
100 | define.eventAliasesOn( elesfn );
|
101 |
|
102 | export default elesfn;
|