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

button.js.map « dist « js - github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e7e94b95900fdf443383269d7d4d18ef00853f95 (plain)
1
{"version":3,"file":"button.js","sources":["../src/util/index.js","../src/button/button.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","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { jQuery as $ } from '../util/index'\nimport Data from '../dom/data'\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ClassName = {\n  ACTIVE: 'active',\n  BUTTON: 'btn',\n  FOCUS: 'focus'\n}\n\nconst Selector = {\n  DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n  DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n  INPUT: 'input:not([type=\"hidden\"])',\n  ACTIVE: '.active',\n  BUTTON: '.btn'\n}\n\nconst Event = {\n  CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`,\n  FOCUS_DATA_API: `focus${EVENT_KEY}${DATA_API_KEY}`,\n  BLUR_DATA_API: `blur${EVENT_KEY}${DATA_API_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n  constructor(element) {\n    this._element = element\n    Data.setData(element, DATA_KEY, this)\n  }\n\n  // Getters\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  // Public\n\n  toggle() {\n    let triggerChangeEvent = true\n    let addAriaPressed = true\n\n    const rootElement = SelectorEngine.closest(\n      this._element,\n      Selector.DATA_TOGGLE\n    )\n\n    if (rootElement) {\n      const input = SelectorEngine.findOne(Selector.INPUT, this._element)\n\n      if (input) {\n        if (input.type === 'radio') {\n          if (input.checked &&\n            this._element.classList.contains(ClassName.ACTIVE)) {\n            triggerChangeEvent = false\n          } else {\n            const activeElement = SelectorEngine.findOne(Selector.ACTIVE, rootElement)\n\n            if (activeElement) {\n              activeElement.classList.remove(ClassName.ACTIVE)\n            }\n          }\n        }\n\n        if (triggerChangeEvent) {\n          if (input.hasAttribute('disabled') ||\n            rootElement.hasAttribute('disabled') ||\n            input.classList.contains('disabled') ||\n            rootElement.classList.contains('disabled')) {\n            return\n          }\n\n          input.checked = !this._element.classList.contains(ClassName.ACTIVE)\n          EventHandler.trigger(input, 'change')\n        }\n\n        input.focus()\n        addAriaPressed = false\n      }\n    }\n\n    if (addAriaPressed) {\n      this._element.setAttribute('aria-pressed',\n        !this._element.classList.contains(ClassName.ACTIVE))\n    }\n\n    if (triggerChangeEvent) {\n      this._element.classList.toggle(ClassName.ACTIVE)\n    }\n  }\n\n  dispose() {\n    Data.removeData(this._element, DATA_KEY)\n    this._element = null\n  }\n\n  // Static\n\n  static _jQueryInterface(config) {\n    return this.each(function () {\n      let data = Data.getData(this, DATA_KEY)\n\n      if (!data) {\n        data = new Button(this)\n      }\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n\n  static _getInstance(element) {\n    return Data.getData(element, DATA_KEY)\n  }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, event => {\n  event.preventDefault()\n\n  let button = event.target\n  if (!button.classList.contains(ClassName.BUTTON)) {\n    button = SelectorEngine.closest(button, Selector.BUTTON)\n  }\n\n  let data = Data.getData(button, DATA_KEY)\n  if (!data) {\n    data = new Button(button)\n  }\n\n  data.toggle()\n})\n\nEventHandler.on(document, Event.FOCUS_DATA_API, Selector.DATA_TOGGLE_CARROT, event => {\n  const button = SelectorEngine.closest(event.target, Selector.BUTTON)\n\n  if (button) {\n    button.classList.add(ClassName.FOCUS)\n  }\n})\n\nEventHandler.on(document, Event.BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, event => {\n  const button = SelectorEngine.closest(event.target, Selector.BUTTON)\n\n  if (button) {\n    button.classList.remove(ClassName.FOCUS)\n  }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .button to jQuery only if jQuery is present\n */\n/* istanbul ignore if */\nif (typeof $ !== 'undefined') {\n  const JQUERY_NO_CONFLICT = $.fn[NAME]\n  $.fn[NAME] = Button._jQueryInterface\n  $.fn[NAME].Constructor = Button\n\n  $.fn[NAME].noConflict = () => {\n    $.fn[NAME] = JQUERY_NO_CONFLICT\n    return Button._jQueryInterface\n  }\n}\n\nexport default Button\n"],"names":["window","jQuery","NAME","VERSION","DATA_KEY","EVENT_KEY","DATA_API_KEY","ClassName","ACTIVE","BUTTON","FOCUS","Selector","DATA_TOGGLE_CARROT","DATA_TOGGLE","INPUT","Event","CLICK_DATA_API","FOCUS_DATA_API","BLUR_DATA_API","Button","element","_element","Data","setData","toggle","triggerChangeEvent","addAriaPressed","rootElement","SelectorEngine","closest","input","findOne","type","checked","classList","contains","activeElement","remove","hasAttribute","EventHandler","trigger","focus","setAttribute","dispose","removeData","_jQueryInterface","config","each","data","getData","_getInstance","on","document","event","preventDefault","button","target","add","$","JQUERY_NO_CONFLICT","fn","Constructor","noConflict"],"mappings":"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"}