File size: 2,187 Bytes
bc20498
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
100
101
102
103
import Emitter from '../emitter';
import define from '../define';
import * as is from '../is';
import Selector from '../selector';

let emitterOptions = {
  qualifierCompare: function( selector1, selector2 ){
    if( selector1 == null || selector2 == null ){
      return selector1 == null && selector2 == null;
    } else {
      return selector1.sameText( selector2 );
    }
  },
  eventMatches: function( cy, listener, eventObj ){
    let selector = listener.qualifier;

    if( selector != null ){
      return cy !== eventObj.target && is.element( eventObj.target ) && selector.matches( eventObj.target );
    }

    return true;
  },
  addEventFields: function( cy, evt ){
    evt.cy = cy;
    evt.target = cy;
  },
  callbackContext: function( cy, listener, eventObj ){
    return listener.qualifier != null ? eventObj.target : cy;
  }
};

let argSelector = function( arg ){
  if( is.string(arg) ){
    return new Selector( arg );
  } else {
    return arg;
  }
};

let elesfn = ({
  createEmitter: function(){
    let _p = this._private;

    if( !_p.emitter ){
      _p.emitter = new Emitter( emitterOptions, this );
    }

    return this;
  },

  emitter: function(){
    return this._private.emitter;
  },

  on: function( events, selector, callback ){
    this.emitter().on( events, argSelector(selector), callback );

    return this;
  },

  removeListener: function( events, selector, callback ){
    this.emitter().removeListener( events, argSelector(selector), callback );

    return this;
  },

  removeAllListeners: function(){
    this.emitter().removeAllListeners();

    return this;
  },

  one: function( events, selector, callback ){
    this.emitter().one( events, argSelector(selector), callback );

    return this;
  },

  once: function( events, selector, callback ){
    this.emitter().one( events, argSelector(selector), callback );

    return this;
  },

  emit: function( events, extraParams ){
    this.emitter().emit( events, extraParams );

    return this;
  },

  emitAndNotify: function( event, eles ){
    this.emit( event );

    this.notify( event, eles );

    return this;
  }
});

define.eventAliasesOn( elesfn );

export default elesfn;