| /* ======================================================================== |
| * Bootstrap: tab.js v3.3.6 |
| * http://getbootstrap.com/javascript/#tabs |
| * ======================================================================== |
| * Copyright 2011-2015 Twitter, Inc. |
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
| * ======================================================================== */ |
| |
| |
| +function ($) { |
| 'use strict'; |
| |
| // TAB CLASS DEFINITION |
| // ==================== |
| |
| var Tab = function (element) { |
| // jscs:disable requireDollarBeforejQueryAssignment |
| this.element = $(element) |
| // jscs:enable requireDollarBeforejQueryAssignment |
| } |
| |
| Tab.VERSION = '3.3.6' |
| |
| Tab.TRANSITION_DURATION = 150 |
| |
| Tab.prototype.show = function () { |
| var $this = this.element |
| var $ul = $this.closest('ul:not(.dropdown-menu)') |
| var selector = $this.data('target') |
| |
| if (!selector) { |
| selector = $this.attr('href') |
| selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 |
| } |
| |
| if ($this.parent('li').hasClass('active')) return |
| |
| var $previous = $ul.find('.active:last a') |
| var hideEvent = $.Event('hide.bs.tab', { |
| relatedTarget: $this[0] |
| }) |
| var showEvent = $.Event('show.bs.tab', { |
| relatedTarget: $previous[0] |
| }) |
| |
| $previous.trigger(hideEvent) |
| $this.trigger(showEvent) |
| |
| if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return |
| |
| var $target = $(selector) |
| |
| this.activate($this.closest('li'), $ul) |
| this.activate($target, $target.parent(), function () { |
| $previous.trigger({ |
| type: 'hidden.bs.tab', |
| relatedTarget: $this[0] |
| }) |
| $this.trigger({ |
| type: 'shown.bs.tab', |
| relatedTarget: $previous[0] |
| }) |
| }) |
| } |
| |
| Tab.prototype.activate = function (element, container, callback) { |
| var $active = container.find('> .active') |
| var transition = callback |
| && $.support.transition |
| && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) |
| |
| function next() { |
| $active |
| .removeClass('active') |
| .find('> .dropdown-menu > .active') |
| .removeClass('active') |
| .end() |
| .find('[data-toggle="tab"]') |
| .attr('aria-expanded', false) |
| |
| element |
| .addClass('active') |
| .find('[data-toggle="tab"]') |
| .attr('aria-expanded', true) |
| |
| if (transition) { |
| element[0].offsetWidth // reflow for transition |
| element.addClass('in') |
| } else { |
| element.removeClass('fade') |
| } |
| |
| if (element.parent('.dropdown-menu').length) { |
| element |
| .closest('li.dropdown') |
| .addClass('active') |
| .end() |
| .find('[data-toggle="tab"]') |
| .attr('aria-expanded', true) |
| } |
| |
| callback && callback() |
| } |
| |
| $active.length && transition ? |
| $active |
| .one('bsTransitionEnd', next) |
| .emulateTransitionEnd(Tab.TRANSITION_DURATION) : |
| next() |
| |
| $active.removeClass('in') |
| } |
| |
| |
| // TAB PLUGIN DEFINITION |
| // ===================== |
| |
| function Plugin(option) { |
| return this.each(function () { |
| var $this = $(this) |
| var data = $this.data('bs.tab') |
| |
| if (!data) $this.data('bs.tab', (data = new Tab(this))) |
| if (typeof option == 'string') data[option]() |
| }) |
| } |
| |
| var old = $.fn.tab |
| |
| $.fn.tab = Plugin |
| $.fn.tab.Constructor = Tab |
| |
| |
| // TAB NO CONFLICT |
| // =============== |
| |
| $.fn.tab.noConflict = function () { |
| $.fn.tab = old |
| return this |
| } |
| |
| |
| // TAB DATA-API |
| // ============ |
| |
| var clickHandler = function (e) { |
| e.preventDefault() |
| Plugin.call($(this), 'show') |
| } |
| |
| $(document) |
| .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) |
| .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) |
| |
| }(jQuery); |