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;