You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.4 KiB
144 lines
3.4 KiB
/* ======================================================== |
|
* bootstrap-tab.js v2.3.2 |
|
* http://twitter.github.com/bootstrap/javascript.html#tabs |
|
* ======================================================== |
|
* Copyright 2012 Twitter, Inc. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* ======================================================== */ |
|
|
|
|
|
!function ($) { |
|
|
|
"use strict"; // jshint ;_; |
|
|
|
|
|
/* TAB CLASS DEFINITION |
|
* ==================== */ |
|
|
|
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]*$)/, '') //strip for ie7 |
|
} |
|
|
|
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 // reflow for transition |
|
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') |
|
} |
|
} |
|
|
|
|
|
/* TAB PLUGIN DEFINITION |
|
* ===================== */ |
|
|
|
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 |
|
|
|
|
|
/* TAB NO CONFLICT |
|
* =============== */ |
|
|
|
$.fn.tab.noConflict = function () { |
|
$.fn.tab = old |
|
return this |
|
} |
|
|
|
|
|
/* TAB DATA-API |
|
* ============ */ |
|
|
|
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { |
|
e.preventDefault() |
|
$(this).tab('show') |
|
}) |
|
|
|
}(window.jQuery); |