!function($){"use strict";var Tab=function(element){this.element=$(element)} Tab.prototype={constructor:Tab,show:function(){var $this=this.element,$ul=$this.closest('ul:not(.dropdown-menu)'),selector=$this.attr('data-target'),previous,$target,e if(!selector){selector=$this.attr('href') selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')} if($this.parent('li').hasClass('active'))return previous=$ul.find('.active:last a')[0] e=$.Event('show',{relatedTarget:previous}) $this.trigger(e) if(e.isDefaultPrevented())return $target=$(selector) this.activate($this.parent('li'),$ul) this.activate($target,$target.parent(),function(){$this.trigger({type:'shown',relatedTarget:previous})})},activate:function(element,container,callback){var $active=container.find('> .active'),transition=callback&&$.support.transition&&$active.hasClass('fade') function next(){$active.removeClass('active').find('> .dropdown-menu > .active').removeClass('active') element.addClass('active') if(transition){element[0].offsetWidth element.addClass('in')}else{element.removeClass('fade')} if(element.parent('.dropdown-menu')){element.closest('li.dropdown').addClass('active')} callback&&callback()} transition?$active.one($.support.transition.end,next):next() $active.removeClass('in')}} var old=$.fn.tab $.fn.tab=function(option){return this.each(function(){var $this=$(this),data=$this.data('tab') if(!data)$this.data('tab',(data=new Tab(this))) if(typeof option=='string')data[option]()})} $.fn.tab.Constructor=Tab $.fn.tab.noConflict=function(){$.fn.tab=old return this} $(document).on('click.tab.data-api','[data-toggle="tab"], [data-toggle="pill"]',function(e){e.preventDefault() $(this).tab('show')})}(window.jQuery);