{"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":"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"}