Welcome to mirror list, hosted at ThFree Co, Russian Federation.

selectorengine.js.map « dom « dist « js - github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 314d298360d3d5120e1a3fccbba0aa320bd6ce7f (plain)
1
{"version":3,"file":"selectorengine.js","sources":["../../src/util/index.js","../../src/dom/polyfill.js","../../src/dom/selectorEngine.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\nconst { jQuery } = window\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => ({}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase())\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n  do {\n    // eslint-disable-next-line no-bitwise\n    prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getSelectorFromElement = element => {\n  let selector = element.getAttribute('data-target')\n\n  if (!selector || selector === '#') {\n    const hrefAttr = element.getAttribute('href')\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n  }\n\n  try {\n    return document.querySelector(selector) ? selector : null\n  } catch (error) {\n    return null\n  }\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = parseFloat(transitionDuration)\n  const floatTransitionDelay = parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  const evt = document.createEvent('HTMLEvents')\n\n  evt.initEvent(TRANSITION_END, true, true)\n  element.dispatchEvent(evt)\n}\n\nconst isElement = obj => (obj[0] || obj).nodeType\n\nconst emulateTransitionEnd = (element, duration) => {\n  let called = false\n  const durationPadding = 5\n  const emulatedDuration = duration + durationPadding\n  function listener() {\n    called = true\n    element.removeEventListener(TRANSITION_END, listener)\n  }\n\n  element.addEventListener(TRANSITION_END, listener)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(element)\n    }\n  }, emulatedDuration)\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes)\n    .forEach(property => {\n      const expectedTypes = configTypes[property]\n      const value = config[property]\n      const valueType = value && isElement(value) ?\n        'element' :\n        toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new Error(\n          `${componentName.toUpperCase()}: ` +\n          `Option \"${property}\" provided type \"${valueType}\" ` +\n          `but expected type \"${expectedTypes}\".`)\n      }\n    })\n}\n\nconst makeArray = nodeList => {\n  if (!nodeList) {\n    return []\n  }\n\n  return [].slice.call(nodeList)\n}\n\nconst isVisible = element => {\n  if (!element) {\n    return false\n  }\n\n  if (element.style && element.parentNode && element.parentNode.style) {\n    return element.style.display !== 'none' &&\n      element.parentNode.style.display !== 'none' &&\n      element.style.visibility !== 'hidden'\n  }\n\n  return false\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\n// eslint-disable-next-line no-empty-function\nconst noop = () => function () {}\n\nconst reflow = element => element.offsetHeight\n\nexport {\n  jQuery,\n  TRANSITION_END,\n  getUID,\n  getSelectorFromElement,\n  getTransitionDurationFromElement,\n  triggerTransitionEnd,\n  isElement,\n  emulateTransitionEnd,\n  typeCheckConfig,\n  makeArray,\n  isVisible,\n  findShadowRoot,\n  noop,\n  reflow\n}\n","/* istanbul ignore file */\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/polyfill.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getUID } from '../util/index'\n\nlet { matches, closest } = Element.prototype\nlet find = Element.prototype.querySelectorAll\nlet findOne = Element.prototype.querySelector\nlet createCustomEvent = (eventName, params) => {\n  const cEvent = new CustomEvent(eventName, params)\n\n  return cEvent\n}\n\nif (typeof window.CustomEvent !== 'function') {\n  createCustomEvent = (eventName, params) => {\n    params = params || { bubbles: false, cancelable: false, detail: null }\n\n    const evt = document.createEvent('CustomEvent')\n\n    evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail)\n    return evt\n  }\n}\n\nconst workingDefaultPrevented = (() => {\n  const e = document.createEvent('CustomEvent')\n\n  e.initEvent('Bootstrap', true, true)\n  e.preventDefault()\n  return e.defaultPrevented\n})()\n\nif (!workingDefaultPrevented) {\n  const origPreventDefault = Event.prototype.preventDefault\n\n  Event.prototype.preventDefault = function () {\n    if (!this.cancelable) {\n      return\n    }\n\n    origPreventDefault.call(this)\n    Object.defineProperty(this, 'defaultPrevented', {\n      get() {\n        return true\n      },\n      configurable: true\n    })\n  }\n}\n\n// MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached\nconst defaultPreventedPreservedOnDispatch = (() => {\n  const e = createCustomEvent('Bootstrap', {\n    cancelable: true\n  })\n\n  const element = document.createElement('div')\n  element.addEventListener('Bootstrap', () => null)\n\n  e.preventDefault()\n  element.dispatchEvent(e)\n  return e.defaultPrevented\n})()\n\nif (!matches) {\n  matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector\n}\n\nif (!closest) {\n  closest = function (selector) {\n    let element = this\n\n    do {\n      if (matches.call(element, selector)) {\n        return element\n      }\n\n      element = element.parentElement || element.parentNode\n    } while (element !== null && element.nodeType === 1)\n\n    return null\n  }\n}\n\nconst scopeSelectorRegex = /:scope\\b/\nconst supportScopeQuery = (() => {\n  const element = document.createElement('div')\n\n  try {\n    element.querySelectorAll(':scope *')\n  } catch (error) {\n    return false\n  }\n\n  return true\n})()\n\nif (!supportScopeQuery) {\n  find = function (selector) {\n    if (!scopeSelectorRegex.test(selector)) {\n      return this.querySelectorAll(selector)\n    }\n\n    const hasId = Boolean(this.id)\n\n    if (!hasId) {\n      this.id = getUID('scope')\n    }\n\n    let nodeList = null\n    try {\n      selector = selector.replace(scopeSelectorRegex, `#${this.id}`)\n      nodeList = this.querySelectorAll(selector)\n    } finally {\n      if (!hasId) {\n        this.removeAttribute('id')\n      }\n    }\n\n    return nodeList\n  }\n\n  findOne = function (selector) {\n    if (!scopeSelectorRegex.test(selector)) {\n      return this.querySelector(selector)\n    }\n\n    const matches = find.call(this, selector)\n\n    if (typeof matches[0] !== 'undefined') {\n      return matches[0]\n    }\n\n    return null\n  }\n}\n\nexport {\n  createCustomEvent,\n  find,\n  findOne,\n  matches,\n  closest,\n  defaultPreventedPreservedOnDispatch\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dom/selectorEngine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { find as findFn, findOne, matches, closest } from './polyfill'\nimport { makeArray } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n  matches(element, selector) {\n    return matches.call(element, selector)\n  },\n\n  find(selector, element = document.documentElement) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    return findFn.call(element, selector)\n  },\n\n  findOne(selector, element = document.documentElement) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    return findOne.call(element, selector)\n  },\n\n  children(element, selector) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    const children = makeArray(element.children)\n\n    return children.filter(child => this.matches(child, selector))\n  },\n\n  parents(element, selector) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    const parents = []\n    let ancestor = element.parentNode\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (this.matches(ancestor, selector)) {\n        parents.push(ancestor)\n      }\n\n      ancestor = ancestor.parentNode\n    }\n\n    return parents\n  },\n\n  closest(element, selector) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    return closest.call(element, selector)\n  },\n\n  prev(element, selector) {\n    if (typeof selector !== 'string') {\n      return null\n    }\n\n    const siblings = []\n    let previous = element.previousSibling\n\n    while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) {\n      if (this.matches(previous, selector)) {\n        siblings.push(previous)\n      }\n\n      previous = previous.previousSibling\n    }\n\n    return siblings\n  }\n}\n\nexport default SelectorEngine\n"],"names":["MAX_UID","window","jQuery","getUID","prefix","Math","random","document","getElementById","makeArray","nodeList","slice","call","Element","prototype","matches","closest","find","querySelectorAll","findOne","querySelector","createCustomEvent","eventName","params","cEvent","CustomEvent","bubbles","cancelable","detail","evt","createEvent","initCustomEvent","workingDefaultPrevented","e","initEvent","preventDefault","defaultPrevented","origPreventDefault","Event","Object","defineProperty","get","configurable","defaultPreventedPreservedOnDispatch","element","createElement","addEventListener","dispatchEvent","msMatchesSelector","webkitMatchesSelector","selector","parentElement","parentNode","nodeType","scopeSelectorRegex","supportScopeQuery","error","test","hasId","Boolean","id","replace","removeAttribute","NODE_TEXT","SelectorEngine","documentElement","findFn","children","filter","child","parents","ancestor","Node","ELEMENT_NODE","push","prev","siblings","previous","previousSibling"],"mappings":"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"}