{"version":3,"file":"on.mjs","sourceRoot":"","sources":["../../src/on.ts"],"names":[],"mappings":"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","sourcesContent":["import { Handle, EventObject } from './interfaces';\nimport { createHandle, createCompositeHandle } from './lang';\nimport Evented, { CustomEventTypes } from './Evented';\n\nexport interface EventCallback<O = EventObject<string>> {\n\t(event: O): void;\n}\n\nexport interface EventEmitter {\n\ton(event: string, listener: EventCallback): EventEmitter;\n\tremoveListener(event: string, listener: EventCallback): EventEmitter;\n}\n\ninterface DOMEventObject extends EventObject {\n\tbubbles: boolean;\n\tcancelable: boolean;\n}\n\n/**\n * Provides a normalized mechanism for dispatching events for event emitters, Evented objects, or DOM nodes.\n * @param target The target to emit the event from\n * @param event The event object to emit\n * @return Boolean indicating if preventDefault was called on the event object (only relevant for DOM events;\n *     always false for other event emitters)\n */\nexport function emit<\n\tM extends CustomEventTypes,\n\tT,\n\tO extends EventObject<T> = EventObject<T>,\n\tK extends keyof M = keyof M\n>(target: Evented<M, T, O>, event: M[K]): boolean;\nexport function emit<T, O extends EventObject<T> = EventObject<T>>(target: Evented<any, T, O>, event: O): boolean;\nexport function emit<O extends EventObject<string> = EventObject<string>>(\n\ttarget: EventTarget | EventEmitter,\n\tevent: O\n): boolean;\nexport function emit(target: any, event: EventObject<any>): boolean {\n\tif (\n\t\ttarget.dispatchEvent /* includes window and document */ &&\n\t\t((target.ownerDocument && target.ownerDocument.createEvent) /* matches nodes */ ||\n\t\t(target.document && target.document.createEvent) /* matches window */ ||\n\t\t\ttarget.createEvent) /* matches document */\n\t) {\n\t\tconst nativeEvent = (target.ownerDocument || target.document || target).createEvent('HTMLEvents');\n\t\tnativeEvent.initEvent(\n\t\t\tevent.type,\n\t\t\tBoolean((<DOMEventObject>event).bubbles),\n\t\t\tBoolean((<DOMEventObject>event).cancelable)\n\t\t);\n\n\t\tfor (let key in event) {\n\t\t\tif (!(key in nativeEvent)) {\n\t\t\t\tnativeEvent[key] = (<any>event)[key];\n\t\t\t}\n\t\t}\n\n\t\treturn target.dispatchEvent(nativeEvent);\n\t}\n\n\tif (target.emit) {\n\t\tif (target.removeListener) {\n\t\t\t// Node.js EventEmitter\n\t\t\ttarget.emit(event.type, event);\n\t\t\treturn false;\n\t\t} else if (target.on) {\n\t\t\t// Dojo Evented or similar\n\t\t\ttarget.emit(event);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tthrow new Error('Target must be an event emitter');\n}\n\n/**\n * Provides a normalized mechanism for listening to events from event emitters, Evented objects, or DOM nodes.\n * @param target Target to listen for event on\n * @param type Event event type(s) to listen for; may a string or an array of strings\n * @param listener Callback to handle the event when it fires\n * @param capture Whether the listener should be registered in the capture phase (DOM events only)\n * @return A handle which will remove the listener when destroy is called\n */\nexport default function on<\n\tM extends CustomEventTypes,\n\tT,\n\tK extends keyof M = keyof M,\n\tO extends EventObject<T> = EventObject<T>\n>(target: Evented<M, T, O>, type: K | K[], listener: EventCallback<M[K]>): Handle;\nexport default function on<T, O extends EventObject<T> = EventObject<T>>(\n\ttarget: Evented<any, T, O>,\n\ttype: T | T[],\n\tlistener: EventCallback<O>\n): Handle;\nexport default function on(target: EventEmitter, type: string | string[], listener: EventCallback): Handle;\nexport default function on(\n\ttarget: EventTarget,\n\ttype: string | string[],\n\tlistener: EventCallback,\n\tcapture?: boolean\n): Handle;\nexport default function on(target: any, type: any, listener: any, capture?: boolean): Handle {\n\tif (Array.isArray(type)) {\n\t\tlet handles: Handle[] = type.map(function(type: string): Handle {\n\t\t\treturn on(target, type, listener, capture);\n\t\t});\n\n\t\treturn createCompositeHandle(...handles);\n\t}\n\n\tconst callback = function(this: any) {\n\t\tlistener.apply(this, arguments);\n\t};\n\n\t// DOM EventTarget\n\tif (target.addEventListener && target.removeEventListener) {\n\t\ttarget.addEventListener(type, callback, capture);\n\t\treturn createHandle(function() {\n\t\t\ttarget.removeEventListener(type, callback, capture);\n\t\t});\n\t}\n\n\tif (target.on) {\n\t\t// EventEmitter\n\t\tif (target.removeListener) {\n\t\t\ttarget.on(type, callback);\n\t\t\treturn createHandle(function() {\n\t\t\t\ttarget.removeListener(type, callback);\n\t\t\t});\n\t\t} else if (target.emit) {\n\t\t\t// Evented\n\t\t\treturn target.on(type, listener);\n\t\t}\n\t}\n\n\tthrow new TypeError('Unknown event emitter object');\n}\n\n/**\n * Provides a mechanism for listening to the next occurrence of an event from event\n * emitters, Evented objects, or DOM nodes.\n * @param target Target to listen for event on\n * @param type Event event type(s) to listen for; may be a string or an array of strings\n * @param listener Callback to handle the event when it fires\n * @param capture Whether the listener should be registered in the capture phase (DOM events only)\n * @return A handle which will remove the listener when destroy is called\n */\nexport function once<\n\tM extends CustomEventTypes,\n\tT,\n\tK extends keyof M = keyof M,\n\tO extends EventObject<T> = EventObject<T>\n>(target: Evented<M, T, O>, type: K | K[], listener: EventCallback<M[K]>): Handle;\nexport function once<T, O extends EventObject<T> = EventObject<T>>(\n\ttarget: Evented<any, T, O>,\n\ttype: T | T[],\n\tlistener: EventCallback<O>\n): Handle;\nexport function once(target: EventTarget, type: string | string[], listener: EventCallback, capture?: boolean): Handle;\nexport function once(target: EventEmitter, type: string | string[], listener: EventCallback): Handle;\nexport function once(target: any, type: any, listener: any, capture?: boolean): Handle {\n\t// FIXME\n\t// tslint:disable-next-line:no-var-keyword\n\tvar handle = on(\n\t\ttarget,\n\t\ttype,\n\t\tfunction(this: any) {\n\t\t\thandle.destroy();\n\t\t\treturn listener.apply(this, arguments);\n\t\t},\n\t\tcapture\n\t);\n\n\treturn handle;\n}\n\nexport interface PausableHandle extends Handle {\n\tpause(): void;\n\tresume(): void;\n}\n\n/**\n * Provides a mechanism for creating pausable listeners for events from event emitters, Evented objects, or DOM nodes.\n * @param target Target to listen for event on\n * @param type Event event type(s) to listen for; may a string or an array of strings\n * @param listener Callback to handle the event when it fires\n * @param capture Whether the listener should be registered in the capture phase (DOM events only)\n * @return A handle with additional pause and resume methods; the listener will never fire when paused\n */\nexport function pausable<\n\tM extends CustomEventTypes,\n\tT,\n\tK extends keyof M = keyof M,\n\tO extends EventObject<T> = EventObject<T>\n>(target: Evented<M, T, O>, type: K | K[], listener: EventCallback<M[K]>): PausableHandle;\nexport function pausable<T, O extends EventObject<T> = EventObject<T>>(\n\ttarget: Evented<any, T, O>,\n\ttype: T | T[],\n\tlistener: EventCallback<O>\n): PausableHandle;\nexport function pausable(\n\ttarget: EventTarget,\n\ttype: string | string[],\n\tlistener: EventCallback,\n\tcapture?: boolean\n): PausableHandle;\nexport function pausable(target: EventEmitter, type: string | string[], listener: EventCallback): PausableHandle;\nexport function pausable(target: any, type: any, listener: any, capture?: boolean): PausableHandle {\n\tlet paused: boolean;\n\n\tconst handle = <PausableHandle>on(\n\t\ttarget,\n\t\ttype,\n\t\tfunction(this: any) {\n\t\t\tif (!paused) {\n\t\t\t\treturn listener.apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tcapture\n\t);\n\n\thandle.pause = function() {\n\t\tpaused = true;\n\t};\n\n\thandle.resume = function() {\n\t\tpaused = false;\n\t};\n\n\treturn handle;\n}\n"]}