UNPKG

17.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"EventGroup.js","sourceRoot":"../src/","sources":["EventGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import { assign } from './object';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * @internal\n */\nexport interface IEventRecord {\n target: any;\n eventName: string;\n parent: any;\n callback: (args?: any) => void;\n elementCallback?: (...args: any[]) => void;\n objectCallback?: (args?: any) => void;\n options?: boolean | AddEventListenerOptions;\n}\n\n/**\n * @internal\n */\nexport interface IEventRecordsByName {\n [eventName: string]: IEventRecordList;\n}\n\n/**\n * @internal\n */\nexport interface IEventRecordList {\n [id: string]: IEventRecord[] | number;\n count: number;\n}\n\n/**\n * @internal\n */\nexport interface IDeclaredEventsByName {\n [eventName: string]: boolean;\n}\n\n/** An instance of EventGroup allows anything with a handle to it to trigger events on it.\n * If the target is an HTMLElement, the event will be attached to the element and can be\n * triggered as usual (like clicking for onClick).\n * The event can be triggered by calling EventGroup.raise() here. If the target is an\n * HTMLElement, the event gets raised and is handled by the browser. Otherwise, it gets\n * handled here in EventGroup, and the handler is called in the context of the parent\n * (which is passed in in the constructor).\n *\n * @public\n * {@docCategory EventGroup}\n */\nexport class EventGroup {\n private static _uniqueId: number = 0;\n private _parent: any;\n private _eventRecords: IEventRecord[];\n private _id: number = EventGroup._uniqueId++;\n private _isDisposed: boolean;\n\n /** For IE8, bubbleEvent is ignored here and must be dealt with by the handler.\n * Events raised here by default have bubbling set to false and cancelable set to true.\n * This applies also to built-in events being raised manually here on HTMLElements,\n * which may lead to unexpected behavior if it differs from the defaults.\n *\n */\n public static raise(target: any, eventName: string, eventArgs?: any, bubbleEvent?: boolean): boolean | undefined {\n let retVal;\n\n if (EventGroup._isElement(target)) {\n if (typeof document !== 'undefined' && document.createEvent) {\n let ev = document.createEvent('HTMLEvents');\n\n ev.initEvent(eventName, bubbleEvent || false, true);\n\n assign(ev, eventArgs);\n\n retVal = target.dispatchEvent(ev);\n } else if (typeof document !== 'undefined' && (document as any).createEventObject) {\n // IE8\n let evObj = (document as any).createEventObject(eventArgs);\n // cannot set cancelBubble on evObj, fireEvent will overwrite it\n target.fireEvent('on' + eventName, evObj);\n }\n } else {\n while (target && retVal !== false) {\n let events = <IEventRecordsByName>target.__events__;\n let eventRecords = events ? events[eventName] : null;\n\n if (eventRecords) {\n for (let id in eventRecords) {\n if (eventRecords.hasOwnProperty(id)) {\n let eventRecordList = <IEventRecord[]>eventRecords[id];\n\n for (let listIndex = 0; retVal !== false && listIndex < eventRecordList.length; listIndex++) {\n let record = eventRecordList[listIndex];\n\n if (record.objectCallback) {\n retVal = record.objectCallback.call(record.parent, eventArgs);\n }\n }\n }\n }\n }\n\n // If the target has a parent, bubble the event up.\n target = bubbleEvent ? target.parent : null;\n }\n }\n\n return retVal;\n }\n\n public static isObserved(target: any, eventName: string): boolean {\n let events = target && <IEventRecordsByName>target.__events__;\n\n return !!events && !!events[eventName];\n }\n\n /** Check to see if the target has declared support of the given event. */\n public static isDeclared(target: any, eventName: string): boolean {\n let declaredEvents = target && <IDeclaredEventsByName>target.__declaredEvents;\n\n return !!declaredEvents && !!declaredEvents[eventName];\n }\n\n public static stopPropagation(event: any): void {\n if (event.stopPropagation) {\n event.stopPropagation();\n } else {\n // IE8\n event.cancelBubble = true;\n }\n }\n\n private static _isElement(target: HTMLElement): boolean {\n return (\n !!target && (!!target.addEventListener || (typeof HTMLElement !== 'undefined' && target instanceof HTMLElement))\n );\n }\n\n /** parent: the context in which events attached to non-HTMLElements are called */\n public constructor(parent: any) {\n this._parent = parent;\n this._eventRecords = [];\n }\n\n public dispose(): void {\n if (!this._isDisposed) {\n this._isDisposed = true;\n\n this.off();\n this._parent = null;\n }\n }\n\n /** On the target, attach a set of events, where the events object is a name to function mapping. */\n public onAll(target: any, events: { [key: string]: (args?: any) => void }, useCapture?: boolean): void {\n for (let eventName in events) {\n if (events.hasOwnProperty(eventName)) {\n this.on(target, eventName, events[eventName], useCapture);\n }\n }\n }\n\n /**\n * On the target, attach an event whose handler will be called in the context of the parent\n * of this instance of EventGroup.\n */\n public on(\n target: any,\n eventName: string,\n callback: (args?: any) => void,\n options?: boolean | AddEventListenerOptions,\n ): void {\n if (eventName.indexOf(',') > -1) {\n let events = eventName.split(/[ ,]+/);\n\n for (let i = 0; i < events.length; i++) {\n this.on(target, events[i], callback, options);\n }\n } else {\n let parent = this._parent;\n let eventRecord: IEventRecord = {\n target: target,\n eventName: eventName,\n parent: parent,\n callback: callback,\n options,\n };\n\n // Initialize and wire up the record on the target, so that it can call the callback if the event fires.\n let events = <IEventRecordsByName>(target.__events__ = target.__events__ || {});\n events[eventName] =\n events[eventName] ||\n <IEventRecordList>{\n count: 0,\n };\n events[eventName][this._id] = events[eventName][this._id] || [];\n (<IEventRecord[]>events[eventName][this._id]).push(eventRecord);\n events[eventName].count++;\n\n if (EventGroup._isElement(target)) {\n let processElementEvent = (...args: any[]) => {\n if (this._isDisposed) {\n return;\n }\n\n let result;\n try {\n result = callback.apply(parent, args);\n if (result === false && args[0]) {\n let e = args[0];\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n e.cancelBubble = true;\n }\n } catch (e) {\n // ignore\n }\n\n return result;\n };\n\n eventRecord.elementCallback = processElementEvent;\n\n if (target.addEventListener) {\n (<EventTarget>target).addEventListener(eventName, processElementEvent, options);\n } else if (target.attachEvent) {\n // IE8\n target.attachEvent('on' + eventName, processElementEvent);\n }\n } else {\n let processObjectEvent = (...args: any[]) => {\n if (this._isDisposed) {\n return;\n }\n\n return callback.apply(parent, args);\n };\n\n eventRecord.objectCallback = processObjectEvent;\n }\n\n // Remember the record locally, so that it can be removed.\n this._eventRecords.push(eventRecord);\n }\n }\n\n public off(\n target?: any,\n eventName?: string,\n callback?: (args?: any) => void,\n options?: boolean | AddEventListenerOptions,\n ): void {\n for (let i = 0; i < this._eventRecords.length; i++) {\n let eventRecord = this._eventRecords[i];\n if (\n (!target || target === eventRecord.target) &&\n (!eventName || eventName === eventRecord.eventName) &&\n (!callback || callback === eventRecord.callback) &&\n (typeof options !== 'boolean' || options === eventRecord.options)\n ) {\n let events = <IEventRecordsByName>eventRecord.target.__events__;\n let targetArrayLookup = events[eventRecord.eventName];\n let targetArray = targetArrayLookup ? <IEventRecord[]>targetArrayLookup[this._id] : null;\n\n // We may have already target's entries, so check for null.\n if (targetArray) {\n if (targetArray.length === 1 || !callback) {\n targetArrayLookup.count -= targetArray.length;\n delete events[eventRecord.eventName][this._id];\n } else {\n targetArrayLookup.count--;\n targetArray.splice(targetArray.indexOf(eventRecord), 1);\n }\n\n if (!targetArrayLookup.count) {\n delete events[eventRecord.eventName];\n }\n }\n\n if (eventRecord.elementCallback) {\n if (eventRecord.target.removeEventListener) {\n eventRecord.target.removeEventListener(\n eventRecord.eventName,\n eventRecord.elementCallback,\n eventRecord.options,\n );\n } else if (eventRecord.target.detachEvent) {\n // IE8\n eventRecord.target.detachEvent('on' + eventRecord.eventName, eventRecord.elementCallback);\n }\n }\n\n this._eventRecords.splice(i--, 1);\n }\n }\n }\n\n /** Trigger the given event in the context of this instance of EventGroup. */\n public raise(eventName: string, eventArgs?: any, bubbleEvent?: boolean): boolean | undefined {\n return EventGroup.raise(this._parent, eventName, eventArgs, bubbleEvent);\n }\n\n /** Declare an event as being supported by this instance of EventGroup. */\n public declare(event: string | string[]): void {\n let declaredEvents = (this._parent.__declaredEvents = this._parent.__declaredEvents || {});\n\n if (typeof event === 'string') {\n declaredEvents[event] = true;\n } else {\n for (let i = 0; i < event.length; i++) {\n declaredEvents[event[i]] = true;\n }\n }\n }\n}\n"]}
\No newline at end of file