forked from phcode-dev/phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEventDispatcher.js
More file actions
1 lines (1 loc) · 4.27 KB
/
EventDispatcher.js
File metadata and controls
1 lines (1 loc) · 4.27 KB
1
!function(){let globalObject={};function defineRequire(){globalObject.EventDispatcher.requireDefined=!0,define(function(require,exports,module){exports.makeEventDispatcher=globalObject.EventDispatcher.makeEventDispatcher,exports.triggerWithArray=globalObject.EventDispatcher.triggerWithArray,exports.on_duringInit=globalObject.EventDispatcher.on_duringInit,exports.markDeprecated=globalObject.EventDispatcher.markDeprecated,exports.setLeakThresholdForEvent=globalObject.EventDispatcher.setLeakThresholdForEvent})}if("undefined"!=typeof window?globalObject=window:"undefined"!=typeof self?globalObject=self:"undefined"!=typeof global&&(globalObject=global),globalObject.EventDispatcher)return void(globalObject.define&&!globalObject.EventDispatcher.requireDefined&&defineRequire());let LEAK_WARNING_THRESHOLD=15,eventSpecificThreshold={};function splitNs(eventStr){var dot=eventStr.indexOf(".");return-1===dot?{eventName:eventStr}:{eventName:eventStr.substring(0,dot),ns:eventStr.substring(dot)}}function setLeakThresholdForEvent(eventName,threshold){let currentThreshold;threshold>(eventSpecificThreshold[eventName]||LEAK_WARNING_THRESHOLD)&&(eventSpecificThreshold[eventName]=threshold)}var on=function(events,fn){var eventsList=events.split(/\s+/).map(splitNs),i;if(!fn)throw new Error("EventListener.on() called with no listener fn for event '"+events+"'");if(this._deprecatedEvents)for(i=0;i<eventsList.length;i++){var deprecation=this._deprecatedEvents[eventsList[i].eventName];if(deprecation){var message="Registering for deprecated event '"+eventsList[i].eventName+"'.";"string"==typeof deprecation&&(message+=" Instead, use "+deprecation+"."),console.warn(message,(new Error).stack)}}for(i=0;i<eventsList.length;i++){var eventName=eventsList[i].eventName;this._eventHandlers||(this._eventHandlers={}),this._eventHandlers[eventName]||(this._eventHandlers[eventName]=[]),eventsList[i].handler=fn,this._eventHandlers[eventName].push(eventsList[i]);let leakThreshold=eventSpecificThreshold[eventName]||LEAK_WARNING_THRESHOLD;this._eventHandlers[eventName].length>leakThreshold&&console.error("Possible memory leak: "+this._eventHandlers[eventName].length+" '"+eventName+"' listeners attached to",this)}return this},off=function(events,fn){if(!this._eventHandlers)return this;var eventsList=events.split(/\s+/).map(splitNs),i,removeAllMatches=function(eventRec,eventName){var handlerList=this._eventHandlers[eventName],k;if(handlerList){for(k=handlerList.length-1;k>=0;k--)if(!eventRec.ns||eventRec.ns===handlerList[k].ns){var handler=handlerList[k].handler;fn&&fn!==handler&&fn._eventOnceWrapper!==handler||handlerList.splice(k,1)}handlerList.length||delete this._eventHandlers[eventName]}}.bind(this),doRemove=function(eventRec){if(eventRec.eventName)removeAllMatches(eventRec,eventRec.eventName);else for(let eventName in this._eventHandlers)removeAllMatches(eventRec,eventName)}.bind(this);for(i=0;i<eventsList.length;i++)doRemove(eventsList[i]);return this},one=function(events,fn){return fn._eventOnceWrapper||(fn._eventOnceWrapper=function(event){event.target.off(event.type,fn._eventOnceWrapper),fn.apply(this,arguments)}),this.on(events,fn._eventOnceWrapper)},trigger=function(eventName){let handlerList=this._eventHandlers&&this._eventHandlers[eventName];if(!handlerList)return;let event={type:eventName,target:this},i;handlerList=handlerList.slice();var applyArgs=Array.prototype.slice.call(arguments,1);for(applyArgs.unshift(event),i=0;i<handlerList.length;i++)try{handlerList[i].handler.apply(null,applyArgs)}catch(err){console.error("Exception in '"+eventName+"' listener on",this,String(err),err.stack)}};function makeEventDispatcher(obj){obj.on=on,obj.off=off,obj.one=one,obj.trigger=trigger,obj._EventDispatcher=!0}function triggerWithArray(dispatcher,eventName,argsArray){var triggerArgs=[eventName].concat(argsArray);dispatcher.trigger.apply(dispatcher,triggerArgs)}function on_duringInit(futureDispatcher,events,fn){on.call(futureDispatcher,events,fn)}function markDeprecated(obj,eventName,insteadStr){obj._deprecatedEvents||(obj._deprecatedEvents={}),obj._deprecatedEvents[eventName]=insteadStr||!0}globalObject.EventDispatcher={makeEventDispatcher:makeEventDispatcher,triggerWithArray:triggerWithArray,on_duringInit:on_duringInit,markDeprecated:markDeprecated,setLeakThresholdForEvent:setLeakThresholdForEvent},globalObject.define&&defineRequire()}();