tab.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /*!
  2. * Bootstrap tab.js v4.5.2 (https://getbootstrap.com/)
  3. * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  4. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  5. */
  6. (function (global, factory) {
  7. typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
  8. typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
  9. (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.jQuery, global.Util));
  10. }(this, (function ($, Util) { 'use strict';
  11. $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;
  12. Util = Util && Object.prototype.hasOwnProperty.call(Util, 'default') ? Util['default'] : Util;
  13. 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); } }
  14. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  15. /**
  16. * ------------------------------------------------------------------------
  17. * Constants
  18. * ------------------------------------------------------------------------
  19. */
  20. var NAME = 'tab';
  21. var VERSION = '4.5.2';
  22. var DATA_KEY = 'bs.tab';
  23. var EVENT_KEY = "." + DATA_KEY;
  24. var DATA_API_KEY = '.data-api';
  25. var JQUERY_NO_CONFLICT = $.fn[NAME];
  26. var EVENT_HIDE = "hide" + EVENT_KEY;
  27. var EVENT_HIDDEN = "hidden" + EVENT_KEY;
  28. var EVENT_SHOW = "show" + EVENT_KEY;
  29. var EVENT_SHOWN = "shown" + EVENT_KEY;
  30. var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
  31. var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
  32. var CLASS_NAME_ACTIVE = 'active';
  33. var CLASS_NAME_DISABLED = 'disabled';
  34. var CLASS_NAME_FADE = 'fade';
  35. var CLASS_NAME_SHOW = 'show';
  36. var SELECTOR_DROPDOWN = '.dropdown';
  37. var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
  38. var SELECTOR_ACTIVE = '.active';
  39. var SELECTOR_ACTIVE_UL = '> li > .active';
  40. var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
  41. var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
  42. var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
  43. /**
  44. * ------------------------------------------------------------------------
  45. * Class Definition
  46. * ------------------------------------------------------------------------
  47. */
  48. var Tab = /*#__PURE__*/function () {
  49. function Tab(element) {
  50. this._element = element;
  51. } // Getters
  52. var _proto = Tab.prototype;
  53. // Public
  54. _proto.show = function show() {
  55. var _this = this;
  56. if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE) || $(this._element).hasClass(CLASS_NAME_DISABLED)) {
  57. return;
  58. }
  59. var target;
  60. var previous;
  61. var listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
  62. var selector = Util.getSelectorFromElement(this._element);
  63. if (listElement) {
  64. var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
  65. previous = $.makeArray($(listElement).find(itemSelector));
  66. previous = previous[previous.length - 1];
  67. }
  68. var hideEvent = $.Event(EVENT_HIDE, {
  69. relatedTarget: this._element
  70. });
  71. var showEvent = $.Event(EVENT_SHOW, {
  72. relatedTarget: previous
  73. });
  74. if (previous) {
  75. $(previous).trigger(hideEvent);
  76. }
  77. $(this._element).trigger(showEvent);
  78. if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
  79. return;
  80. }
  81. if (selector) {
  82. target = document.querySelector(selector);
  83. }
  84. this._activate(this._element, listElement);
  85. var complete = function complete() {
  86. var hiddenEvent = $.Event(EVENT_HIDDEN, {
  87. relatedTarget: _this._element
  88. });
  89. var shownEvent = $.Event(EVENT_SHOWN, {
  90. relatedTarget: previous
  91. });
  92. $(previous).trigger(hiddenEvent);
  93. $(_this._element).trigger(shownEvent);
  94. };
  95. if (target) {
  96. this._activate(target, target.parentNode, complete);
  97. } else {
  98. complete();
  99. }
  100. };
  101. _proto.dispose = function dispose() {
  102. $.removeData(this._element, DATA_KEY);
  103. this._element = null;
  104. } // Private
  105. ;
  106. _proto._activate = function _activate(element, container, callback) {
  107. var _this2 = this;
  108. var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE);
  109. var active = activeElements[0];
  110. var isTransitioning = callback && active && $(active).hasClass(CLASS_NAME_FADE);
  111. var complete = function complete() {
  112. return _this2._transitionComplete(element, active, callback);
  113. };
  114. if (active && isTransitioning) {
  115. var transitionDuration = Util.getTransitionDurationFromElement(active);
  116. $(active).removeClass(CLASS_NAME_SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
  117. } else {
  118. complete();
  119. }
  120. };
  121. _proto._transitionComplete = function _transitionComplete(element, active, callback) {
  122. if (active) {
  123. $(active).removeClass(CLASS_NAME_ACTIVE);
  124. var dropdownChild = $(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
  125. if (dropdownChild) {
  126. $(dropdownChild).removeClass(CLASS_NAME_ACTIVE);
  127. }
  128. if (active.getAttribute('role') === 'tab') {
  129. active.setAttribute('aria-selected', false);
  130. }
  131. }
  132. $(element).addClass(CLASS_NAME_ACTIVE);
  133. if (element.getAttribute('role') === 'tab') {
  134. element.setAttribute('aria-selected', true);
  135. }
  136. Util.reflow(element);
  137. if (element.classList.contains(CLASS_NAME_FADE)) {
  138. element.classList.add(CLASS_NAME_SHOW);
  139. }
  140. if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
  141. var dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0];
  142. if (dropdownElement) {
  143. var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
  144. $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
  145. }
  146. element.setAttribute('aria-expanded', true);
  147. }
  148. if (callback) {
  149. callback();
  150. }
  151. } // Static
  152. ;
  153. Tab._jQueryInterface = function _jQueryInterface(config) {
  154. return this.each(function () {
  155. var $this = $(this);
  156. var data = $this.data(DATA_KEY);
  157. if (!data) {
  158. data = new Tab(this);
  159. $this.data(DATA_KEY, data);
  160. }
  161. if (typeof config === 'string') {
  162. if (typeof data[config] === 'undefined') {
  163. throw new TypeError("No method named \"" + config + "\"");
  164. }
  165. data[config]();
  166. }
  167. });
  168. };
  169. _createClass(Tab, null, [{
  170. key: "VERSION",
  171. get: function get() {
  172. return VERSION;
  173. }
  174. }]);
  175. return Tab;
  176. }();
  177. /**
  178. * ------------------------------------------------------------------------
  179. * Data Api implementation
  180. * ------------------------------------------------------------------------
  181. */
  182. $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
  183. event.preventDefault();
  184. Tab._jQueryInterface.call($(this), 'show');
  185. });
  186. /**
  187. * ------------------------------------------------------------------------
  188. * jQuery
  189. * ------------------------------------------------------------------------
  190. */
  191. $.fn[NAME] = Tab._jQueryInterface;
  192. $.fn[NAME].Constructor = Tab;
  193. $.fn[NAME].noConflict = function () {
  194. $.fn[NAME] = JQUERY_NO_CONFLICT;
  195. return Tab._jQueryInterface;
  196. };
  197. return Tab;
  198. })));
  199. //# sourceMappingURL=tab.js.map