0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-01 13:24:25 +01:00
Bootstrap/js/dist/button.js.map

1 line
15 KiB
Plaintext

{"version":3,"file":"button.js","sources":["../src/util/index.js","../src/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 Data.setData(button, DATA_KEY, data)\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\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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"}