UNPKG

ng-event-options

Version:

Enable event options (capture, passive, ...) inside angular templates, based on browser support

1 lines 25.8 kB
{"version":3,"file":"ng-event-options.mjs","sources":["../../../projects/ng-event-options/src/lib/enum/error-msg.enum.ts","../../../projects/ng-event-options/src/lib/enum/event-option.enum.ts","../../../projects/ng-event-options/src/lib/enum/global-event-target.enum.ts","../../../projects/ng-event-options/src/lib/enum/native-event-option.enum.ts","../../../projects/ng-event-options/src/lib/enum/option-symbol.enum.ts","../../../projects/ng-event-options/src/lib/helper/get-bit-value.ts","../../../projects/ng-event-options/src/lib/enum/operator-symbol.enum.ts","../../../projects/ng-event-options/src/lib/helper/throttle-event.ts","../../../projects/ng-event-options/src/lib/helper/debounce-event.ts","../../../projects/ng-event-options/src/lib/service/dom-event-options-plugin.service.ts","../../../projects/ng-event-options/src/lib/ng-event-options.module.ts","../../../projects/ng-event-options/src/public-api.ts","../../../projects/ng-event-options/src/ng-event-options.ts"],"sourcesContent":["export enum ErrorMsg {\n PassivePreventDefault = \"EventOptions: You cannot use 'passive (p)' and 'preventDefault (d)' simultaneously\",\n UnsupportedEventTarget = 'Unsupported event target |~ for event |~',\n UnsupportedOperator = 'Unsupported operator |~',\n}\n","export enum EventOption {\n Capture = 1,\n Passive = 2,\n Once = 4,\n NoZone = 8,\n Stop = 16,\n PreventDefault = 32,\n InBrowser = 64,\n}\n","export enum GlobalEventTarget {\n Window = 'window',\n Document = 'document',\n Body = 'body',\n}\n","export enum NativeEventOption {\n Capture = 'capture',\n Passive = 'passive',\n Once = 'once',\n}\n","export enum OptionSymbol {\n Capture = 'c',\n NoZone = 'n',\n Passive = 'p',\n Stop = 's',\n Once = 'o',\n PreventDefault = 'd',\n InBrowser = 'b',\n ForceSymbol = '*',\n}\n","export const getBitValue = (...values: number[]): number => {\n const len: number = values.length;\n let val: number = 0;\n\n for (let i = 0; i < len; i++) {\n val = val | values[i];\n }\n\n return val;\n};\n","export enum OperatorSymbol {\n Debounce = 'db',\n Throttle = 'th',\n}\n","export const throttleEvent = (\n callback: EventListener,\n time: number = 50,\n immediate: 0 | 1 = 0,\n): EventListener => {\n let timeout: number;\n\n return (event: Event): void => {\n if (!timeout) {\n if (immediate) {\n callback(event);\n }\n\n timeout = window.setTimeout(() => {\n timeout = 0;\n return !immediate ? callback(event) : void 0;\n }, time);\n }\n };\n};\n","export const debounceEvent = (\n callback: EventListener,\n time: number = 50,\n immediate: 0 | 1 = 0,\n): EventListener => {\n let timeout: number;\n let wait: boolean;\n\n return (event: Event): void => {\n window.clearTimeout(timeout);\n timeout = window.setTimeout(() => (immediate ? (wait = false) : callback(event)), time);\n\n if (immediate && !wait) {\n wait = true;\n callback(event);\n }\n };\n};\n","import { Inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\nimport { ErrorMsg } from '../enum/error-msg.enum';\nimport { EventOption } from '../enum/event-option.enum';\nimport { GlobalEventTarget } from '../enum/global-event-target.enum';\nimport { NativeEventOption } from '../enum/native-event-option.enum';\nimport { OptionSymbol } from '../enum/option-symbol.enum';\n\nimport { EventOptionsObject } from '../type/event-options-object';\nimport { getBitValue } from '../helper/get-bit-value';\nimport { OperatorSymbol } from '../enum/operator-symbol.enum';\nimport { throttleEvent } from '../helper/throttle-event';\nimport { debounceEvent } from '../helper/debounce-event';\n\n@Injectable()\n// EventManagerPlugin is not yet part of the public API of Angular, once it is I can remove the `addGlobalEventListener`\nexport class DomEventOptionsPlugin /*extends EventManagerPlugin*/ {\n private nativeEventObjectSupported?: boolean;\n\n private readonly nativeOptionsObjects: {\n [key: number]: AddEventListenerOptions;\n } = {};\n\n private readonly nativeOptionsSupported: {\n [O in NativeEventOption]: boolean;\n } = {\n capture: false,\n once: false,\n passive: false,\n };\n\n private readonly keyEvents: (keyof DocumentEventMap)[] = ['keydown', 'keypress', 'keyup'];\n\n private readonly blockSeparator: string = '|';\n\n private readonly operatorSeparator: string = ',';\n\n private readonly optionSeparator: string = '.';\n\n private readonly optionSymbols: OptionSymbol[] = [];\n\n private readonly operatorSymbols: OperatorSymbol[] = [];\n\n constructor(\n private readonly ngZone: NgZone,\n @Inject(DOCUMENT) private readonly doc: Document,\n @Inject(PLATFORM_ID) private readonly platformId: string,\n ) {\n this.setSymbols();\n this.checkSupport();\n }\n\n addEventListener(element: HTMLElement, eventName: string, listener: EventListener): () => void {\n const { type, options, operators } = this.getTypeOptions(eventName);\n const inBrowser: number =\n options.indexOf(OptionSymbol.InBrowser) > -1 ? EventOption.InBrowser : 0;\n\n if (inBrowser && !isPlatformBrowser(this.platformId)) {\n return (): void => void 0;\n }\n\n if (typeof listener !== 'function') {\n listener = () => void 0;\n }\n\n const passive: number = options.indexOf(OptionSymbol.Passive) > -1 ? EventOption.Passive : 0;\n const preventDefault: number =\n options.indexOf(OptionSymbol.PreventDefault) > -1 ? EventOption.PreventDefault : 0;\n\n if (passive && preventDefault) {\n throw new Error(ErrorMsg.PassivePreventDefault);\n }\n\n const stop: number = options.indexOf(OptionSymbol.Stop) > -1 ? EventOption.Stop : 0;\n const once: number = options.indexOf(OptionSymbol.Once) > -1 ? EventOption.Once : 0;\n const noZone: number = options.indexOf(OptionSymbol.NoZone) > -1 ? EventOption.NoZone : 0;\n const capture: number = options.indexOf(OptionSymbol.Capture) > -1 ? EventOption.Capture : 0;\n\n const operatorSettings: Partial<{ [OS in OperatorSymbol]: string[] }> =\n this.parseOperators(operators);\n\n const debounceParams: string[] | undefined = operatorSettings[OperatorSymbol.Debounce];\n const throttleParams: string[] | undefined = operatorSettings[OperatorSymbol.Throttle];\n\n const bitVal: number = getBitValue(capture, once, passive);\n const eventOptionsObj: EventOptionsObject = this.getEventOptionsObject(bitVal);\n const inZone: boolean = NgZone.isInAngularZone();\n\n const callback: EventListener = (event: Event) => {\n if (noZone || !inZone) {\n listener(event);\n } else {\n this.ngZone.run((): void => listener(event));\n }\n };\n\n let debounceCallback: EventListener;\n let throttleCallback: EventListener;\n\n if (debounceParams) {\n debounceCallback = debounceEvent(callback, ...debounceParams.map((p) => parseInt(p, 10)));\n }\n\n if (throttleParams) {\n throttleCallback = throttleEvent(callback, ...throttleParams.map((p) => parseInt(p, 10)));\n }\n\n const intermediateListener: EventListener = (event: Event): void => {\n if (stop) {\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n if (preventDefault) {\n event.preventDefault();\n }\n\n if (once && !this.nativeOptionsSupported[NativeEventOption.Once]) {\n element.removeEventListener(type, intermediateListener, eventOptionsObj);\n }\n\n if (debounceCallback) {\n debounceCallback(event);\n } else if (throttleCallback) {\n throttleCallback(event);\n } else {\n callback(event);\n }\n };\n\n if (inZone) {\n this.ngZone.runOutsideAngular((): void =>\n element.addEventListener(type, intermediateListener, eventOptionsObj),\n );\n } else {\n element.addEventListener(type, intermediateListener, eventOptionsObj);\n }\n\n return () =>\n this.ngZone.runOutsideAngular((): void =>\n element.removeEventListener(type, intermediateListener, eventOptionsObj),\n );\n }\n\n addGlobalEventListener(\n element: GlobalEventTarget,\n eventName: string,\n listener: EventListener,\n ): () => void {\n if (!isPlatformBrowser(this.platformId)) {\n return (): void => void 0;\n }\n\n let target: EventTarget | undefined;\n\n if (element === GlobalEventTarget.Window) {\n target = window;\n } else if (element === GlobalEventTarget.Document) {\n target = this.doc;\n } else if (element === GlobalEventTarget.Body && this.doc) {\n target = this.doc.body;\n } else {\n const replace: string[] = [element, eventName];\n throw new Error(\n ErrorMsg.UnsupportedEventTarget.replace(/\\|~/g, () => replace.shift() as string),\n );\n }\n\n return this.addEventListener(target as HTMLElement, eventName, listener);\n }\n\n supports(eventName: string): boolean {\n const { type, options } = this.getTypeOptions(eventName);\n\n if (!type) {\n return false;\n }\n\n if (options.length === 1 && this.keyEvents.indexOf(type as keyof DocumentEventMap) > -1) {\n return false;\n }\n\n const chosenOptions: OptionSymbol[] = options.split('') as OptionSymbol[];\n\n return chosenOptions.every(\n (option: OptionSymbol, index: number): boolean =>\n this.optionSymbols.indexOf(option) !== -1 && index === chosenOptions.lastIndexOf(option),\n );\n }\n\n private checkSupport(): void {\n const supportObj: AddEventListenerOptions = new Object(null);\n\n Object.keys(NativeEventOption)\n .map((optionKey) => NativeEventOption[optionKey as keyof typeof NativeEventOption])\n .forEach((nativeOption) =>\n Object.defineProperty(supportObj, nativeOption, {\n get: () => {\n this.nativeOptionsSupported[nativeOption as NativeEventOption] = true;\n },\n }),\n );\n\n try {\n window.addEventListener('test', new Function() as EventListener, supportObj);\n } catch {\n // empty\n }\n\n this.nativeEventObjectSupported = this.nativeOptionsSupported[NativeEventOption.Capture];\n }\n\n private parseOperators(operatorsStr: string): Partial<{ [OS in OperatorSymbol]: string[] }> {\n const operators: Partial<{ [OS in OperatorSymbol]: string[] }> = {};\n\n if (operatorsStr) {\n operatorsStr.split(/},?/).forEach((operatorStr) => {\n const parts: string[] = operatorStr.split('{');\n\n if (parts.length === 2) {\n const operator: OperatorSymbol = parts[0] as OperatorSymbol;\n\n if (operator && this.operatorSymbols.indexOf(operator) > -1) {\n operators[operator] = parts[1].split(this.operatorSeparator).filter((p) => p);\n } else {\n throw new Error(ErrorMsg.UnsupportedOperator.replace(/\\|~/g, operator));\n }\n }\n });\n }\n\n return operators;\n }\n\n private getEventOptionsObject(options: number): EventOptionsObject {\n if (!this.nativeEventObjectSupported) {\n return (options & EventOption.Capture) === EventOption.Capture;\n }\n\n const eventOptions: number =\n (options & EventOption.Capture) +\n (options & EventOption.Passive) +\n (options & EventOption.Once);\n\n if (eventOptions in this.nativeOptionsObjects) {\n return this.nativeOptionsObjects[eventOptions];\n }\n\n const optionsObj: EventOptionsObject = {\n capture: !!(eventOptions & EventOption.Capture),\n passive: !!(eventOptions & EventOption.Passive),\n once: !!(eventOptions & EventOption.Once),\n };\n\n this.nativeOptionsObjects[eventOptions] = optionsObj;\n\n return optionsObj;\n }\n\n private getTypeOptions(eventName: string): { type: string; options: string; operators: string } {\n let [type, options, operators]: string[] = eventName.split(this.optionSeparator);\n\n if (!options || !type) {\n return { type: '', options: '', operators: '' };\n }\n\n [options, operators] = options.split(this.blockSeparator);\n\n if (!operators) {\n operators = '';\n }\n\n type = type.trim();\n options = options.trim();\n operators = operators.trim();\n\n return { type, options, operators };\n }\n\n private setSymbols(): void {\n this.optionSymbols.length = 0;\n Object.keys(OptionSymbol).forEach((optionKey) =>\n this.optionSymbols.push(OptionSymbol[optionKey as keyof typeof OptionSymbol]),\n );\n\n this.operatorSymbols.length = 0;\n Object.keys(OperatorSymbol).forEach((operatorSymbol) =>\n this.operatorSymbols.push(OperatorSymbol[operatorSymbol as keyof typeof OperatorSymbol]),\n );\n }\n}\n","import { NgModule } from '@angular/core';\nimport { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';\nimport { DomEventOptionsPlugin } from './service/dom-event-options-plugin.service';\n\n@NgModule({\n providers: [\n {\n provide: EVENT_MANAGER_PLUGINS,\n useClass: DomEventOptionsPlugin,\n multi: true,\n },\n ],\n})\nexport class NgEventOptionsModule {}\n","/*\n * Public API Surface of ng-event-options\n */\n\nexport * from './lib/ng-event-options.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}