UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

1 lines 16.8 kB
{"version":3,"file":"event.cjs","names":["MC","_interopRequireWildcard","require","MH","_cssAlter","_misc","_xMap","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","callEventListener","handler","event","isFunction","_event$currentTarget","currentTarget","self","_event$currentTarget2","handleEvent","exports","addEventListenerTo","target","eventType","options","transformEventType","getEventHandlerData","thirdArg","wrappedHandler","supports","getBrowserSupport","isNonPrimitive","_optionsArg","_options$capture","capture","once","_options","removeEventListenerFrom","setEventHandlerData","_wrappedHandler","_thirdArg","addEventListener","data","removeEventListener","deleteEventHandlerData","preventSelect","S_SELECTSTART","preventDefault","isElement","addClasses","PREFIX_NO_SELECT","undoPreventSelect","removeClasses","browserEventSupport","_pointer","passive","signal","optTest","opt","thisOpt","AbortController","dummyHandler","dummyElement","createElement","e__ignored","registeredEventHandlerData","newXWeakMap","newXMapGetter","newMap","getEventOptionsStr","finalOptions","isObject","copyExistingKeys","stringify","_registeredEventHandl","optionsStr","_registeredEventHandl2","deleteKey","prune","sGet","startsWith","S_POINTER","strReplace","S_MOUSE"],"sources":["../../../src/ts/utils/event.ts"],"sourcesContent":["/**\n * @module Utils\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport { addClasses, removeClasses } from \"@lisn/utils/css-alter\";\nimport { copyExistingKeys } from \"@lisn/utils/misc\";\n\nimport { XMap, newXMapGetter, newXWeakMap } from \"@lisn/modules/x-map\";\n\n/**\n * Calls the given event listener, which could be a function that's callable\n * directly, or an object that has a `handleEvent` function property.\n *\n * @category Events: Generic\n */\nexport const callEventListener = (\n handler: EventListenerOrEventListenerObject,\n event: Event,\n) => {\n if (MH.isFunction(handler)) {\n handler.call(event.currentTarget ?? self, event);\n } else {\n handler.handleEvent.call(event.currentTarget ?? self, event);\n }\n};\n\n/**\n * Adds an event listener for the given event name to the given target.\n *\n * Like {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener | EventTarget:addEventListener}\n * but it handles `options` object in case the browser does not support those.\n * Does not support the `signal` option unless browser natively supports that.\n *\n * @returns `true` if successfully added, or `false` if the same handler has\n * already been added by us, or if the handler is not a valid event listener.\n *\n * @category Events: Generic\n */\nexport const addEventListenerTo = (\n target: EventTarget,\n eventType: string,\n handler: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n): boolean => {\n options ??= false;\n eventType = transformEventType(eventType);\n if (getEventHandlerData(target, eventType, handler, options)) {\n // already added\n return false;\n }\n\n let thirdArg = options;\n let wrappedHandler = handler;\n\n // If the user passed an options object but the browser only supports a\n // boolen for 'useCapture', then handle this.\n const supports = getBrowserSupport();\n if (MH.isNonPrimitive(options)) {\n if (!supports._optionsArg) {\n thirdArg = options.capture ?? false;\n }\n\n if (options.once && !supports._options.once) {\n // Remove the handler once it's called once\n wrappedHandler = (event) => {\n removeEventListenerFrom(target, eventType, handler, options);\n callEventListener(handler, event);\n };\n }\n }\n\n setEventHandlerData(target, eventType, handler, options, {\n _wrappedHandler: wrappedHandler,\n _thirdArg: thirdArg,\n });\n\n target.addEventListener(eventType, wrappedHandler, thirdArg);\n return true;\n};\n\n/**\n * Removes an event listener that has been added using\n * {@link addEventListenerTo}.\n *\n * **IMPORTANT:** If you have added a listener using the built-in\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener | EventTarget:addEventListener},\n * then you should use\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener | EventTarget:removeEventListener},\n * to remove it, not this function.\n *\n * @returns `true` if successfully removed, or `false` if the handler has not\n * been added by us.\n *\n * @category Events: Generic\n */\nexport const removeEventListenerFrom = (\n target: EventTarget,\n eventType: string,\n handler: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => {\n options ??= false;\n eventType = transformEventType(eventType);\n const data = getEventHandlerData(target, eventType, handler, options);\n\n if (!data) {\n return false;\n }\n\n target.removeEventListener(eventType, data._wrappedHandler, data._thirdArg);\n deleteEventHandlerData(target, eventType, handler, options);\n return true;\n};\n\n/**\n * @ignore\n * @internal\n */\nexport const preventSelect = (target: EventTarget) => {\n addEventListenerTo(target, MC.S_SELECTSTART, MH.preventDefault);\n if (MH.isElement(target)) {\n addClasses(target, MC.PREFIX_NO_SELECT);\n }\n};\n\n/**\n * @ignore\n * @internal\n */\nexport const undoPreventSelect = (target: EventTarget) => {\n removeEventListenerFrom(target, MC.S_SELECTSTART, MH.preventDefault);\n if (MH.isElement(target)) {\n removeClasses(target, MC.PREFIX_NO_SELECT);\n }\n};\n\n/**\n * @ignore\n * @internal\n */\nexport const getBrowserSupport = (): BrowserEventSupport => {\n if (browserEventSupport) {\n // already detected\n return browserEventSupport;\n }\n\n const supports = {\n _pointer: false,\n _optionsArg: false,\n _options: {\n capture: false,\n passive: false,\n once: false,\n signal: false,\n },\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#safely_detecting_option_support\n const optTest = {};\n let opt: keyof typeof supports._options;\n for (opt in supports._options) {\n const thisOpt = opt;\n MH.defineProperty(optTest, thisOpt, {\n get: () => {\n supports._options[thisOpt] = true;\n if (thisOpt === \"signal\") {\n return new AbortController().signal;\n }\n return false;\n },\n });\n }\n\n const dummyHandler = () => {}; // TypeScript does not accept null\n const dummyElement = MH.createElement(\"div\");\n try {\n dummyElement.addEventListener(\"testOptionSupport\", dummyHandler, optTest);\n dummyElement.removeEventListener(\n \"testOptionSupport\",\n dummyHandler,\n optTest,\n );\n supports._optionsArg = true;\n } catch (e__ignored) {\n //\n }\n\n supports._pointer = \"onpointerup\" in dummyElement;\n\n browserEventSupport = supports;\n return supports;\n};\n\n// --------------------\n\ntype EventHandlerData = {\n _wrappedHandler: EventListenerOrEventListenerObject;\n _thirdArg: boolean | AddEventListenerOptions;\n};\n\nlet browserEventSupport: BrowserEventSupport;\n\nconst registeredEventHandlerData = newXWeakMap<\n EventTarget,\n XMap<\n string, // event type\n XMap<\n EventListenerOrEventListenerObject, // user-supplied handler\n Map<\n string, // str repr of options\n EventHandlerData\n >\n >\n >\n>(newXMapGetter(newXMapGetter(() => MH.newMap())));\n\n// detect browser features, see below\ntype BrowserEventSupport = {\n _pointer: boolean;\n _optionsArg: boolean;\n _options: {\n capture: boolean;\n passive: boolean;\n once: boolean;\n signal: boolean;\n };\n};\n\nconst getEventOptionsStr = (\n options: boolean | AddEventListenerOptions,\n): string => {\n const finalOptions: AddEventListenerOptions = {\n capture: false,\n passive: false,\n once: false,\n };\n\n if (options === false || options === true) {\n finalOptions.capture = options;\n } else if (MH.isObject(options)) {\n copyExistingKeys(options, finalOptions);\n }\n\n return MH.stringify(finalOptions);\n};\n\nconst getEventHandlerData = (\n target: EventTarget,\n eventType: string,\n handler: EventListenerOrEventListenerObject,\n options: boolean | AddEventListenerOptions,\n) => {\n const optionsStr = getEventOptionsStr(options);\n return registeredEventHandlerData\n .get(target)\n ?.get(eventType)\n ?.get(handler)\n ?.get(optionsStr);\n};\n\nconst deleteEventHandlerData = (\n target: EventTarget,\n eventType: string,\n handler: EventListenerOrEventListenerObject,\n options: boolean | AddEventListenerOptions,\n) => {\n const optionsStr = getEventOptionsStr(options);\n MH.deleteKey(\n registeredEventHandlerData.get(target)?.get(eventType)?.get(handler),\n optionsStr,\n );\n registeredEventHandlerData.prune(target, eventType, handler);\n};\n\nconst setEventHandlerData = (\n target: EventTarget,\n eventType: string,\n handler: EventListenerOrEventListenerObject,\n options: boolean | AddEventListenerOptions,\n data: EventHandlerData,\n) => {\n const optionsStr = getEventOptionsStr(options);\n registeredEventHandlerData\n .sGet(target)\n .sGet(eventType)\n .sGet(handler)\n .set(optionsStr, data);\n};\n\nconst transformEventType = (eventType: string) => {\n const supports = getBrowserSupport();\n if (eventType.startsWith(MC.S_POINTER) && !supports._pointer) {\n // TODO maybe log a warning message is it's not supported, e.g. there's no\n // mousecancel\n return MH.strReplace(eventType, MC.S_POINTER, MC.S_MOUSE);\n }\n\n return eventType;\n};\n"],"mappings":"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","ignoreList":[]}