basant307/AI_Governance_Project
048
1import Emitter from '../emitter.mjs';2import define from '../define/index.mjs';3import * as is from '../is.mjs';4import Selector from '../selector/index.mjs';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( ele, listener, eventObj ){15 let selector = listener.qualifier;16 17 if( selector != null ){18 return ele !== eventObj.target && is.element( eventObj.target ) && selector.matches( eventObj.target );19 }20 21 return true;22 },23 addEventFields: function( ele, evt ){24 evt.cy = ele.cy();25 evt.target = ele;26 },27 callbackContext: function( ele, listener, eventObj ){28 return listener.qualifier != null ? eventObj.target : ele;29 },30 beforeEmit: function( context, listener/*, eventObj*/ ){31 if( listener.conf && listener.conf.once ){32 listener.conf.onceCollection.removeListener( listener.event, listener.qualifier, listener.callback );33 }34 },35 bubble: function(){36 return true;37 },38 parent: function( ele ){39 return ele.isChild() ? ele.parent() : ele.cy();40 }41};42 43let argSelector = function( arg ){44 if( is.string(arg) ){45 return new Selector( arg );46 } else {47 return arg;48 }49};50 51let elesfn = ({52 createEmitter: function(){53 for( let i = 0; i < this.length; i++ ){54 let ele = this[i];55 let _p = ele._private;56 57 if( !_p.emitter ){58 _p.emitter = new Emitter( emitterOptions, ele );59 }60 }61 62 return this;63 },64 65 emitter: function(){66 return this._private.emitter;67 },68 69 on: function( events, selector, callback ){70 let argSel = argSelector(selector);71 72 for( let i = 0; i < this.length; i++ ){73 let ele = this[i];74 75 ele.emitter().on( events, argSel, callback );76 }77 78 return this;79 },80 81 removeListener: function( events, selector, callback ){82 let argSel = argSelector(selector);83 84 for( let i = 0; i < this.length; i++ ){85 let ele = this[i];86 87 ele.emitter().removeListener( events, argSel, callback );88 }89 90 return this;91 },92 93 removeAllListeners: function(){94 for( let i = 0; i < this.length; i++ ){95 let ele = this[i];96 97 ele.emitter().removeAllListeners();98 }99 100 return this;101 },102 103 one: function( events, selector, callback ){104 let argSel = argSelector(selector);105 106 for( let i = 0; i < this.length; i++ ){107 let ele = this[i];108 109 ele.emitter().one( events, argSel, callback );110 }111 112 return this;113 },114 115 once: function( events, selector, callback ){116 let argSel = argSelector(selector);117 118 for( let i = 0; i < this.length; i++ ){119 let ele = this[i];120 121 ele.emitter().on( events, argSel, callback, {122 once: true,123 onceCollection: this124 } );125 }126 },127 128 emit: function( events, extraParams ){129 for( let i = 0; i < this.length; i++ ){130 let ele = this[i];131 132 ele.emitter().emit( events, extraParams );133 }134 135 return this;136 },137 138 emitAndNotify: function( event, extraParams ){ // for internal use only139 if( this.length === 0 ){ return; } // empty collections don't need to notify anything140 141 // notify renderer142 this.cy().notify( event, this );143 144 this.emit( event, extraParams );145 146 return this;147 }148});149 150define.eventAliasesOn( elesfn );151 152export default elesfn;153 