UNPKG

@actualwave/event-dispatcher

Version:

EventDispatcher is a JavaScript class that adds events support to custom objects.

3 lines (2 loc) 3.29 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.EventDispatcher={})}(this,function(e){"use strict";const t=e=>"object"==typeof e&&null!==e;class s{constructor(e,t=null){this.type=e,this.data=t,this.defaultPrevented=!1}toJSON(){return{type:this.type,data:this.data}}isDefaultPrevented(){return this.defaultPrevented}preventDefault(){this.defaultPrevented=!0}}const i=(e,i)=>{let n=e;return t(e)||(n=new s(String(e),i)),n};var n,r,o=(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const s=(e=>(t,s)=>Boolean(t&&e.call(t,s)))(Object.prototype.hasOwnProperty);t.hasOwn=s,t.default=s}(n={exports:{}},n.exports),n.exports),l=(r=o)&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r;o.hasOwn;class a{constructor(e,t,s){this.index=-1,this.immediatelyStopped=!1,this.stopImmediatePropagation=(()=>{this.immediatelyStopped=!0}),this.listeners=e,this.onStopped=t,this.onComplete=s}run(e,t){let s;const{listeners:i}=this;for(this.augmentEvent(e),this.index=0;this.index<i.length&&!this.immediatelyStopped;this.index++)(s=i[this.index]).call(t,e);this.clearEvent(e),this.onComplete(this)}augmentEvent(e){const t=e;t.stopPropagation=this.onStopped,t.stopImmediatePropagation=this.stopImmediatePropagation}clearEvent(e){const t=e;delete t.stopPropagation,delete t.stopImmediatePropagation}listenerRemoved(e,t){e===this.listeners&&t<=this.index&&this.index--}}class h{constructor(){this._listeners={},this._runners=[],this.removeRunner=(e=>{this._runners.splice(this._runners.indexOf(e),1)})}createList(e,t){const s=parseInt(t,10),i=this.getPrioritiesByKey(e),n=String(s);let r;return l(i,n)?r=i[n]:(r=[],i[n]=r),r}getPrioritiesByKey(e){let t;return l(this._listeners,e)?t=this._listeners[e]:(t={},this._listeners[e]=t),t}add(e,t,s){const i=this.createList(e,s);i.indexOf(t)<0&&i.push(t)}has(e){let t,s=!1;const i=this.getPrioritiesByKey(e);if(i)for(t in i)if(l(i,t)){s=!0;break}return s}remove(e,t){const s=this.getPrioritiesByKey(e);if(s){const e=Object.getOwnPropertyNames(s),{length:i}=e;for(let n=0;n<i;n++){const i=e[n],r=s[i],o=r.indexOf(t);o>=0&&(r.splice(o,1),r.length||delete s[i],this._runners.forEach(e=>{e.listenerRemoved(r,o)}))}}}removeAll(e){delete this._listeners[e]}createRunner(e,t){const s=new a(e,t,this.removeRunner);return this._runners.push(s),s}call(e,t){const s=this.getPrioritiesByKey(e.type);let i=!1;const n=()=>{i=!0};if(s){const r=Object.getOwnPropertyNames(s).sort((e,t)=>e-t),{length:o}=r;for(let l=0;l<o&&!i;l++){const i=s[r[l]];if(i){const s=this.createRunner(i,n);if(s.run(e,t),s.immediatelyStopped)break}}}}}class c{constructor(e=null){this._eventPreprocessor=e,this._listeners=new h}addEventListener(e,t,s=0){this._listeners.add(e,t,-s||0)}hasEventListener(e){return this._listeners.has(e)}removeEventListener(e,t){this._listeners.remove(e,t)}removeAllEventListeners(e){this._listeners.removeAll(e)}dispatchEvent(e,t){let s=i(e,t);this._eventPreprocessor&&(s=this._eventPreprocessor.call(this,s)),this._listeners.call(s)}}e.default=c,e.Event=s,e.EventDispatcher=c,e.createEventDispatcher=(e=>new c(e)),e.getEvent=i,e.isObject=t,Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=event-dispatcher.min.js.map