{"version":3,"file":"ivent.min.js","sources":["../src/utils/make-event-uid.js","../src/utils/get-element-events.js","../src/utils/parse-event-name.js","../src/utils/normalize-parameters.js","../src/methods/off.js","../src/utils/hydrate-obj.js","../src/utils/handlers.js","../src/methods/trigger.js","../src/methods/on.js","../src/methods/one.js","../src/utils/get-jquery.js"],"sourcesContent":["let uidEvent = 1;\n\nexport default function makeEventUid(element, uid) {\n // eslint-disable-next-line no-plusplus\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++;\n}\n","import makeEventUid from './make-event-uid';\n\nconst eventRegistry = {}; // Events storage\n\nexport default function getElementEvents(element) {\n const uid = makeEventUid(element);\n\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n\n return eventRegistry[uid];\n}\n","const 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]);\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout',\n pointerenter: 'pointerover',\n pointerleave: 'pointerout',\n};\n\nexport default function parseEventName(name) {\n // Get the native events from namespaced events ('click.ghostkit.button' --> 'click')\n const eventName = name.replace(stripNameRegex, '');\n\n return {\n event: customEvents[eventName] || eventName,\n originalEvent: eventName,\n namespace: name.replace(namespaceRegex, '') || false,\n isNative: nativeEvents.has(eventName),\n };\n}\n","import parseEventName from './parse-event-name';\n\nexport default function normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: Bootstrap tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n\n const parsedEvent = parseEventName(originalTypeEvent);\n let typeEvent = parsedEvent.event;\n\n if (!parsedEvent.isNative) {\n typeEvent = originalTypeEvent;\n }\n\n return [isDelegated, callable, typeEvent, parsedEvent];\n}\n","/* eslint-disable no-restricted-syntax */\nimport getElementEvents from '../utils/get-element-events';\nimport normalizeParameters from '../utils/normalize-parameters';\n// eslint-disable-next-line import/no-cycle\nimport { removeHandler, removeNamespacedHandlers } from '../utils/handlers';\n\nconst stripUidRegex = /::\\d+$/;\n\nexport default function off(element, event, handler, delegationFunction) {\n if (typeof event !== 'string' || !element) {\n return;\n }\n\n event.split(' ').forEach((originalTypeEvent) => {\n const [isDelegated, callable, typeEvent, parsedEvent] = normalizeParameters(\n originalTypeEvent,\n handler,\n delegationFunction\n );\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, evt] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n if (!parsedEvent.namespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, evt.callable, evt.delegationSelector);\n }\n }\n });\n}\n","export default function hydrateObj(obj, meta = {}) {\n // eslint-disable-next-line no-restricted-syntax\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","/* eslint-disable no-restricted-syntax */\n\n// eslint-disable-next-line import/no-cycle\nimport off from '../methods/off';\n\nimport hydrateObj from './hydrate-obj';\nimport makeEventUid from './make-event-uid';\nimport getElementEvents from './get-element-events';\nimport normalizeParameters from './normalize-parameters';\n\nfunction iventHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element });\n\n if (handler.oneOff) {\n // eslint-disable-next-line no-use-before-define\n off(element, event.type, fn);\n }\n\n return fn.apply(element, [event]);\n };\n}\n\nfunction iventDelegationHandler(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 // eslint-disable-next-line no-restricted-syntax\n for (const domElement of domElements) {\n if (domElement !== target) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n hydrateObj(event, { delegateTarget: target });\n\n if (handler.oneOff) {\n // eslint-disable-next-line no-use-before-define\n off(element, event.type, selector, fn);\n }\n\n return fn.apply(target, [event]);\n }\n }\n\n return false;\n };\n}\n\nexport function findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(\n (event) => event.callable === callable && event.delegationSelector === delegationSelector\n );\n}\n\nexport function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n // eslint-disable-next-line prefer-const\n let [isDelegated, callable, typeEvent, parsedEvent] = normalizeParameters(\n originalTypeEvent,\n handler,\n delegationFunction\n );\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 (parsedEvent.event !== parsedEvent.originalEvent) {\n const wrapFunction = (fn) => {\n return function (event) {\n if (\n !event.relatedTarget ||\n (event.relatedTarget !== event.delegateTarget &&\n !event.delegateTarget.contains(event.relatedTarget))\n ) {\n return fn.call(this, event);\n }\n\n return false;\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, parsedEvent.namespace);\n const fn = isDelegated\n ? iventDelegationHandler(element, handler, callable)\n : iventHandler(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 // Add support for custom event handler `ready` for DOMContentLoaded.\n if (element === document && typeEvent === 'ready' && !isDelegated) {\n typeEvent = 'DOMContentLoaded';\n\n if (document.readyState !== 'loading') {\n fn(new CustomEvent('ready'));\n return;\n }\n }\n\n element.addEventListener(typeEvent, fn, isDelegated);\n}\n\nexport function 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\nexport function 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","import getjQuery from '../utils/get-jquery';\nimport hydrateObj from '../utils/hydrate-obj';\nimport parseEventName from '../utils/parse-event-name';\n\nexport default function trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n\n const $ = getjQuery();\n const parsedEvent = parseEventName(event);\n\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n\n if (parsedEvent.namespace && $) {\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","import { addHandler } from '../utils/handlers';\n\nexport default function on(element, event, handler, delegationFunction) {\n if (typeof event !== 'string' || !element) {\n return;\n }\n\n event.split(' ').forEach((originalTypeEvent) => {\n addHandler(element, originalTypeEvent, handler, delegationFunction, false);\n });\n}\n","import { addHandler } from '../utils/handlers';\n\nexport default function one(element, event, handler, delegationFunction) {\n if (typeof event !== 'string' || !element) {\n return;\n }\n\n event.split(' ').forEach((originalTypeEvent) => {\n addHandler(element, originalTypeEvent, handler, delegationFunction, true);\n });\n}\n","export default function getjQuery() {\n if (window.jQuery) {\n return window.jQuery;\n }\n\n return null;\n}\n"],"names":["uidEvent","makeEventUid","element","uid","eventRegistry","getElementEvents","nativeEvents","Set","namespaceRegex","stripNameRegex","customEvents","mouseenter","mouseleave","pointerenter","pointerleave","parseEventName","name","eventName","replace","event","originalEvent","namespace","isNative","has","normalizeParameters","originalTypeEvent","handler","delegationFunction","isDelegated","callable","parsedEvent","typeEvent","stripUidRegex","off","split","forEach","events","storeElementEvent","isNamespace","startsWith","elementEvent","Object","keys","removeNamespacedHandlers","slice","keyHandlers","evt","entries","handlerKey","includes","removeHandler","delegationSelector","length","hydrateObj","obj","meta","key","value","defineProperty","configurable","get","findHandler","values","find","addHandler","oneOff","wrapFunction","fn","relatedTarget","delegateTarget","contains","call","this","handlers","previousFunction","selector","domElements","querySelectorAll","target","parentNode","domElement","type","apply","iventDelegationHandler","iventHandler","document","readyState","addEventListener","CustomEvent","removeEventListener","Boolean","exports","on","one","trigger","args","$","window","jQuery","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","Event","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","cancelable","preventDefault","dispatchEvent"],"mappings":";;;;;6OAAA,IAAIA,EAAW,EAEA,SAASC,EAAaC,EAASC,GAE5C,OAAQA,GAAQ,GAAEA,MAAQH,OAAiBE,EAAQF,UAAYA,GACjE,CCHA,MAAMI,EAAgB,CAAA,EAEP,SAASC,EAAiBH,GACvC,MAAMC,EAAMF,EAAaC,GAKzB,OAHAA,EAAQF,SAAWG,EACnBC,EAAcD,GAAOC,EAAcD,IAAQ,CAAA,EAEpCC,EAAcD,EACvB,CCXA,MAAMG,EAAe,IAAIC,IAAI,CAC3B,QACA,WACA,UACA,YACA,cACA,aACA,iBACA,YACA,WACA,YACA,cACA,YACA,UACA,WACA,QACA,oBACA,aACA,YACA,WACA,cACA,cACA,cACA,YACA,eACA,gBACA,eACA,gBACA,aACA,QACA,OACA,SACA,QACA,SACA,SACA,UACA,WACA,OACA,SACA,eACA,SACA,OACA,mBACA,mBACA,QACA,QACA,WAEIC,EAAiB,qBACjBC,EAAiB,OACjBC,EAAe,CACnBC,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cAGD,SAASC,EAAeC,GAErC,MAAMC,EAAYD,EAAKE,QAAQT,EAAgB,IAE/C,MAAO,CACLU,MAAOT,EAAaO,IAAcA,EAClCG,cAAeH,EACfI,UAAWL,EAAKE,QAAQV,EAAgB,MAAO,EAC/Cc,SAAUhB,EAAaiB,IAAIN,GAE/B,CCjEe,SAASO,EAAoBC,EAAmBC,EAASC,GACtE,MAAMC,EAAiC,iBAAZF,EAErBG,EAAWD,EAAcD,EAAqBD,GAAWC,EAEzDG,EAAcf,EAAeU,GACnC,IAAIM,EAAYD,EAAYX,MAM5B,OAJKW,EAAYR,WACfS,EAAYN,GAGP,CAACG,EAAaC,EAAUE,EAAWD,EAC5C,CCTA,MAAME,EAAgB,SAEP,SAASC,EAAI/B,EAASiB,EAAOO,EAASC,GAC9B,iBAAVR,GAAuBjB,GAIlCiB,EAAMe,MAAM,KAAKC,SAASV,IACxB,MAAOG,EAAaC,EAAUE,EAAWD,GAAeN,EACtDC,EACAC,EACAC,GAEIS,EAAS/B,EAAiBH,GAC1BmC,EAAoBD,EAAOL,IAAc,CAAA,EACzCO,EAAcb,EAAkBc,WAAW,KAEjD,QAAwB,IAAbV,EAAX,CAUA,GAAIS,EACF,IAAK,MAAME,KAAgBC,OAAOC,KAAKN,GACrCO,EAAyBzC,EAASkC,EAAQI,EAAcf,EAAkBmB,MAAM,IAIpF,IAAK,MAAOC,EAAaC,KAAQL,OAAOM,QAAQV,GAAoB,CAClE,MAAMW,EAAaH,EAAY3B,QAAQc,EAAe,IAEjDF,EAAYT,YAAaI,EAAkBwB,SAASD,IACvDE,EAAchD,EAASkC,EAAQL,EAAWe,EAAIjB,SAAUiB,EAAIK,mBAEhE,CAdA,KARA,CAEE,IAAKV,OAAOC,KAAKL,GAAmBe,OAClC,OAGFF,EAAchD,EAASkC,EAAQL,EAAWF,EAAUD,EAAcF,EAAU,KAE9E,CAcA,GAEJ,CC/Ce,SAAS2B,EAAWC,EAAKC,EAAO,IAE7C,IAAK,MAAOC,EAAKC,KAAUhB,OAAOM,QAAQQ,GACxC,IACED,EAAIE,GAAOC,CACb,CAAE,MACAhB,OAAOiB,eAAeJ,EAAKE,EAAK,CAC9BG,cAAc,EACdC,IAAGA,IACMH,GAGb,CAGF,OAAOH,CACT,CCkCO,SAASO,EAAYzB,EAAQP,EAAUsB,EAAqB,MACjE,OAAOV,OAAOqB,OAAO1B,GAAQ2B,MAC1B5C,GAAUA,EAAMU,WAAaA,GAAYV,EAAMgC,qBAAuBA,GAE3E,CAEO,SAASa,EAAW9D,EAASuB,EAAmBC,EAASC,EAAoBsC,GAElF,IAAKrC,EAAaC,EAAUE,EAAWD,GAAeN,EACpDC,EACAC,EACAC,GAKF,GAAIG,EAAYX,QAAUW,EAAYV,cAAe,CACnD,MAAM8C,EAAgBC,GACb,SAAUhD,GACf,QACGA,EAAMiD,eACNjD,EAAMiD,gBAAkBjD,EAAMkD,iBAC5BlD,EAAMkD,eAAeC,SAASnD,EAAMiD,iBAEhCD,EAAGI,KAAKC,KAAMrD,IAO3BU,EAAWqC,EAAarC,EAC1B,CAEA,MAAMO,EAAS/B,EAAiBH,GAC1BuE,EAAWrC,EAAOL,KAAeK,EAAOL,GAAa,CAAA,GACrD2C,EAAmBb,EAAYY,EAAU5C,EAAUD,EAAcF,EAAU,MAEjF,GAAIgD,EAGF,YAFAA,EAAiBT,OAASS,EAAiBT,QAAUA,GAKvD,MAAM9D,EAAMF,EAAa4B,EAAUC,EAAYT,WACzC8C,EAAKvC,EAxEb,SAAgC1B,EAASyE,EAAUR,GACjD,OAAO,SAASzC,EAAQP,GACtB,MAAMyD,EAAc1E,EAAQ2E,iBAAiBF,GAE7C,IAAK,IAAIG,OAAEA,GAAW3D,EAAO2D,GAAUA,IAAWN,KAAMM,EAASA,EAAOC,WAEtE,IAAK,MAAMC,KAAcJ,EACvB,GAAII,IAAeF,EAYnB,OAPAzB,EAAWlC,EAAO,CAAEkD,eAAgBS,IAEhCpD,EAAQuC,QAEVhC,EAAI/B,EAASiB,EAAM8D,KAAMN,EAAUR,GAG9BA,EAAGe,MAAMJ,EAAQ,CAAC3D,IAI7B,OAAO,EAEX,CAgDMgE,CAAuBjF,EAASwB,EAASG,GAtF/C,SAAsB3B,EAASiE,GAC7B,OAAO,SAASzC,EAAQP,GAQtB,OAPAkC,EAAWlC,EAAO,CAAEkD,eAAgBnE,IAEhCwB,EAAQuC,QAEVhC,EAAI/B,EAASiB,EAAM8D,KAAMd,GAGpBA,EAAGe,MAAMhF,EAAS,CAACiB,IAE9B,CA4EMiE,CAAalF,EAAS2B,GAE1BsC,EAAGhB,mBAAqBvB,EAAcF,EAAU,KAChDyC,EAAGtC,SAAWA,EACdsC,EAAGF,OAASA,EACZE,EAAGnE,SAAWG,EACdsE,EAAStE,GAAOgE,EAGZjE,IAAYmF,UAA0B,UAAdtD,GAA0BH,IACpDG,EAAY,mBAEgB,YAAxBsD,SAASC,YAMfpF,EAAQqF,iBAAiBxD,EAAWoC,EAAIvC,GALpCuC,EAAG,IAAIqB,YAAY,SAMzB,CAEO,SAAStC,EAAchD,EAASkC,EAAQL,EAAWL,EAASyB,GACjE,MAAMgB,EAAKN,EAAYzB,EAAOL,GAAYL,EAASyB,GAE9CgB,IAILjE,EAAQuF,oBAAoB1D,EAAWoC,EAAIuB,QAAQvC,WAC5Cf,EAAOL,GAAWoC,EAAGnE,UAC9B,CAEO,SAAS2C,EAAyBzC,EAASkC,EAAQL,EAAWV,GACnE,MAAMgB,EAAoBD,EAAOL,IAAc,CAAA,EAE/C,IAAK,MAAOiB,EAAY7B,KAAUsB,OAAOM,QAAQV,GAC3CW,EAAWC,SAAS5B,IACtB6B,EAAchD,EAASkC,EAAQL,EAAWZ,EAAMU,SAAUV,EAAMgC,mBAGtE,CChGAwC,EAAA1D,IAAAA,EAAA0D,EAAAC,GCvCe,SAAY1F,EAASiB,EAAOO,EAASC,GAC7B,iBAAVR,GAAuBjB,GAIlCiB,EAAMe,MAAM,KAAKC,SAASV,IACxBuC,EAAW9D,EAASuB,EAAmBC,EAASC,GAAoB,EAAM,GAE9E,ED+BAgE,EAAAE,IEvCe,SAAa3F,EAASiB,EAAOO,EAASC,GAC9B,iBAAVR,GAAuBjB,GAIlCiB,EAAMe,MAAM,KAAKC,SAASV,IACxBuC,EAAW9D,EAASuB,EAAmBC,EAASC,GAAoB,EAAK,GAE7E,EF+BAgE,EAAAG,QArCe,SAAiB5F,EAASiB,EAAO4E,GAC9C,GAAqB,iBAAV5E,IAAuBjB,EAChC,OAAO,KAGT,MAAM8F,EGRFC,OAAOC,OACFD,OAAOC,OAGT,KHOP,IAAIC,EAAc,KACdC,GAAU,EACVC,GAAiB,EACjBC,GAAmB,EALHvF,EAAeI,GAOnBE,WAAa2E,IAC3BG,EAAcH,EAAEO,MAAMpF,EAAO4E,GAE7BC,EAAE9F,GAAS4F,QAAQK,GACnBC,GAAWD,EAAYK,uBACvBH,GAAkBF,EAAYM,gCAC9BH,EAAmBH,EAAYO,sBAGjC,MAAM5D,EAAMO,EAAW,IAAIkD,MAAMpF,EAAO,CAAEiF,UAASO,YAAY,IAASZ,GAcxE,OAZIO,GACFxD,EAAI8D,iBAGFP,GACFnG,EAAQ2G,cAAc/D,GAGpBA,EAAIwD,kBAAoBH,GAC1BA,EAAYS,iBAGP9D,CACT,CAAA"}