{"version":3,"sources":["event-handler.js"],"names":["getjQuery","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","element","uid","concat","getElementEvents","bootstrapHandler","fn","handler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","selector","domElements","querySelectorAll","target","this","parentNode","_step","_iterator","_createForOfIteratorHelper","s","n","done","domElement","value","err","e","f","findHandler","events","callable","delegationSelector","arguments","length","undefined","Object","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","handlers","_normalizeParameters2","_slicedToArray","relatedTarget","contains","call","previousFunction","replace","addEventListener","removeHandler","removeEventListener","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","_i","_Object$entries","entries","_Object$entries$_i","handlerKey","includes","on","one","_normalizeParameters4","inNamespace","isNamespace","startsWith","keys","_i2","_Object$keys","slice","_i3","_Object$entries2","_Object$entries2$_i","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","$","Event","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","cancelable","preventDefault","dispatchEvent","obj","_i4","_Object$entries3","_loop","_Object$entries3$_i","key","_unused","defineProperty","configurable","get"],"mappings":"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","file":"event-handler.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n"]}