tab.js 7.3 KB

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