diff options
Diffstat (limited to 'assets/javascripts/bootstrap/tab.js')
-rw-r--r-- | assets/javascripts/bootstrap/tab.js | 215 |
1 files changed, 151 insertions, 64 deletions
diff --git a/assets/javascripts/bootstrap/tab.js b/assets/javascripts/bootstrap/tab.js index 95451ca..7a8eb79 100644 --- a/assets/javascripts/bootstrap/tab.js +++ b/assets/javascripts/bootstrap/tab.js @@ -1,16 +1,102 @@ /*! - * Bootstrap tab.js v4.5.2 (https://getbootstrap.com/) + * Bootstrap tab.js v5.0.0-alpha1 (https://getbootstrap.com/) * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : - typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.jQuery, global.Util)); -}(this, (function ($, Util) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js')) : + typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/selector-engine.js'], factory) : + (global = global || self, global.Tab = factory(global.Data, global.EventHandler, global.SelectorEngine)); +}(this, (function (Data, EventHandler, SelectorEngine) { 'use strict'; - $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $; - Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util; + Data = Data && Object.prototype.hasOwnProperty.call(Data, 'default') ? Data['default'] : Data; + EventHandler = EventHandler && Object.prototype.hasOwnProperty.call(EventHandler, 'default') ? EventHandler['default'] : EventHandler; + SelectorEngine = SelectorEngine && Object.prototype.hasOwnProperty.call(SelectorEngine, 'default') ? SelectorEngine['default'] : SelectorEngine; + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v5.0.0-alpha1): util/index.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + var MILLISECONDS_MULTIPLIER = 1000; + var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + + var getSelector = function getSelector(element) { + var selector = element.getAttribute('data-target'); + + if (!selector || selector === '#') { + var hrefAttr = element.getAttribute('href'); + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; + } + + return selector; + }; + + var getElementFromSelector = function getElementFromSelector(element) { + var selector = getSelector(element); + return selector ? document.querySelector(selector) : null; + }; + + var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) { + if (!element) { + return 0; + } // Get transition-duration of the element + + + var _window$getComputedSt = window.getComputedStyle(element), + transitionDuration = _window$getComputedSt.transitionDuration, + transitionDelay = _window$getComputedSt.transitionDelay; + + var floatTransitionDuration = parseFloat(transitionDuration); + var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found + + if (!floatTransitionDuration && !floatTransitionDelay) { + return 0; + } // If multiple durations are defined, take the first + + + transitionDuration = transitionDuration.split(',')[0]; + transitionDelay = transitionDelay.split(',')[0]; + return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; + }; + + var triggerTransitionEnd = function triggerTransitionEnd(element) { + element.dispatchEvent(new Event(TRANSITION_END)); + }; + + var emulateTransitionEnd = function emulateTransitionEnd(element, duration) { + var called = false; + var durationPadding = 5; + var emulatedDuration = duration + durationPadding; + + function listener() { + called = true; + element.removeEventListener(TRANSITION_END, listener); + } + + element.addEventListener(TRANSITION_END, listener); + setTimeout(function () { + if (!called) { + triggerTransitionEnd(element); + } + }, emulatedDuration); + }; + + var reflow = function reflow(element) { + return element.offsetHeight; + }; + + var getjQuery = function getjQuery() { + var _window = window, + jQuery = _window.jQuery; + + if (jQuery && !document.body.hasAttribute('data-no-jquery')) { + return jQuery; + } + + return null; + }; function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } @@ -22,11 +108,10 @@ */ var NAME = 'tab'; - var VERSION = '4.5.2'; + var VERSION = '5.0.0-alpha1'; var DATA_KEY = 'bs.tab'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $.fn[NAME]; var EVENT_HIDE = "hide" + EVENT_KEY; var EVENT_HIDDEN = "hidden" + EVENT_KEY; var EVENT_SHOW = "show" + EVENT_KEY; @@ -40,10 +125,10 @@ var SELECTOR_DROPDOWN = '.dropdown'; var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; var SELECTOR_ACTIVE = '.active'; - var SELECTOR_ACTIVE_UL = '> li > .active'; + var SELECTOR_ACTIVE_UL = ':scope > li > .active'; var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'; var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; - var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'; + var SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'; /** * ------------------------------------------------------------------------ * Class Definition @@ -53,6 +138,7 @@ var Tab = /*#__PURE__*/function () { function Tab(element) { this._element = element; + Data.setData(this._element, DATA_KEY, this); } // Getters @@ -62,53 +148,46 @@ _proto.show = function show() { var _this = this; - if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE) || $(this._element).hasClass(CLASS_NAME_DISABLED)) { + if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE) || this._element.classList.contains(CLASS_NAME_DISABLED)) { return; } - var target; var previous; - var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]; - var selector = Util.getSelectorFromElement(this._element); + var target = getElementFromSelector(this._element); + + var listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP); if (listElement) { var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; - previous = $.makeArray($(listElement).find(itemSelector)); + previous = SelectorEngine.find(itemSelector, listElement); previous = previous[previous.length - 1]; } - var hideEvent = $.Event(EVENT_HIDE, { - relatedTarget: this._element - }); - var showEvent = $.Event(EVENT_SHOW, { - relatedTarget: previous - }); + var hideEvent = null; if (previous) { - $(previous).trigger(hideEvent); + hideEvent = EventHandler.trigger(previous, EVENT_HIDE, { + relatedTarget: this._element + }); } - $(this._element).trigger(showEvent); + var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { + relatedTarget: previous + }); - if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { + if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) { return; } - if (selector) { - target = document.querySelector(selector); - } - this._activate(this._element, listElement); var complete = function complete() { - var hiddenEvent = $.Event(EVENT_HIDDEN, { + EventHandler.trigger(previous, EVENT_HIDDEN, { relatedTarget: _this._element }); - var shownEvent = $.Event(EVENT_SHOWN, { + EventHandler.trigger(_this._element, EVENT_SHOWN, { relatedTarget: previous }); - $(previous).trigger(hiddenEvent); - $(_this._element).trigger(shownEvent); }; if (target) { @@ -119,7 +198,7 @@ }; _proto.dispose = function dispose() { - $.removeData(this._element, DATA_KEY); + Data.removeData(this._element, DATA_KEY); this._element = null; } // Private ; @@ -127,17 +206,19 @@ _proto._activate = function _activate(element, container, callback) { var _this2 = this; - var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE); + var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE); var active = activeElements[0]; - var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE); + var isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE); var complete = function complete() { return _this2._transitionComplete(element, active, callback); }; if (active && isTransitioning) { - var transitionDuration = Util.getTransitionDurationFromElement(active); - $(active).removeClass(CLASS_NAME_SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + var transitionDuration = getTransitionDurationFromElement(active); + active.classList.remove(CLASS_NAME_SHOW); + EventHandler.one(active, TRANSITION_END, complete); + emulateTransitionEnd(active, transitionDuration); } else { complete(); } @@ -145,11 +226,11 @@ _proto._transitionComplete = function _transitionComplete(element, active, callback) { if (active) { - $(active).removeClass(CLASS_NAME_ACTIVE); - var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0]; + active.classList.remove(CLASS_NAME_ACTIVE); + var dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode); if (dropdownChild) { - $(dropdownChild).removeClass(CLASS_NAME_ACTIVE); + dropdownChild.classList.remove(CLASS_NAME_ACTIVE); } if (active.getAttribute('role') === 'tab') { @@ -157,24 +238,25 @@ } } - $(element).addClass(CLASS_NAME_ACTIVE); + element.classList.add(CLASS_NAME_ACTIVE); if (element.getAttribute('role') === 'tab') { element.setAttribute('aria-selected', true); } - Util.reflow(element); + reflow(element); if (element.classList.contains(CLASS_NAME_FADE)) { element.classList.add(CLASS_NAME_SHOW); } - if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) { - var dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]; + if (element.parentNode && element.parentNode.classList.contains(CLASS_NAME_DROPDOWN_MENU)) { + var dropdownElement = element.closest(SELECTOR_DROPDOWN); if (dropdownElement) { - var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)); - $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE); + SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE).forEach(function (dropdown) { + return dropdown.classList.add(CLASS_NAME_ACTIVE); + }); } element.setAttribute('aria-expanded', true); @@ -186,15 +268,9 @@ } // Static ; - Tab._jQueryInterface = function _jQueryInterface(config) { + Tab.jQueryInterface = function jQueryInterface(config) { return this.each(function () { - var $this = $(this); - var data = $this.data(DATA_KEY); - - if (!data) { - data = new Tab(this); - $this.data(DATA_KEY, data); - } + var data = Data.getData(this, DATA_KEY) || new Tab(this); if (typeof config === 'string') { if (typeof data[config] === 'undefined') { @@ -206,6 +282,10 @@ }); }; + Tab.getInstance = function getInstance(element) { + return Data.getData(element, DATA_KEY); + }; + _createClass(Tab, null, [{ key: "VERSION", get: function get() { @@ -222,24 +302,31 @@ */ - $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { + EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault(); - - Tab._jQueryInterface.call($(this), 'show'); + var data = Data.getData(this, DATA_KEY) || new Tab(this); + data.show(); }); + var $ = getjQuery(); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ + * add .tab to jQuery only if jQuery is present */ - $.fn[NAME] = Tab._jQueryInterface; - $.fn[NAME].Constructor = Tab; + /* istanbul ignore if */ - $.fn[NAME].noConflict = function () { - $.fn[NAME] = JQUERY_NO_CONFLICT; - return Tab._jQueryInterface; - }; + if ($) { + var JQUERY_NO_CONFLICT = $.fn[NAME]; + $.fn[NAME] = Tab.jQueryInterface; + $.fn[NAME].Constructor = Tab; + + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Tab.jQueryInterface; + }; + } return Tab; |