comparison static/bootstrap/js/tab.js @ 149:d29e2f337b00

Updated to Bootstrap 3.0.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 12 Dec 2013 21:54:04 -0800
parents
children
comparison
equal deleted inserted replaced
148:f02e049d6546 149:d29e2f337b00
1 /* ========================================================================
2 * Bootstrap: tab.js v3.0.3
3 * http://getbootstrap.com/javascript/#tabs
4 * ========================================================================
5 * Copyright 2013 Twitter, Inc.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ======================================================================== */
19
20
21 +function ($) { "use strict";
22
23 // TAB CLASS DEFINITION
24 // ====================
25
26 var Tab = function (element) {
27 this.element = $(element)
28 }
29
30 Tab.prototype.show = function () {
31 var $this = this.element
32 var $ul = $this.closest('ul:not(.dropdown-menu)')
33 var selector = $this.data('target')
34
35 if (!selector) {
36 selector = $this.attr('href')
37 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
38 }
39
40 if ($this.parent('li').hasClass('active')) return
41
42 var previous = $ul.find('.active:last a')[0]
43 var e = $.Event('show.bs.tab', {
44 relatedTarget: previous
45 })
46
47 $this.trigger(e)
48
49 if (e.isDefaultPrevented()) return
50
51 var $target = $(selector)
52
53 this.activate($this.parent('li'), $ul)
54 this.activate($target, $target.parent(), function () {
55 $this.trigger({
56 type: 'shown.bs.tab'
57 , relatedTarget: previous
58 })
59 })
60 }
61
62 Tab.prototype.activate = function (element, container, callback) {
63 var $active = container.find('> .active')
64 var transition = callback
65 && $.support.transition
66 && $active.hasClass('fade')
67
68 function next() {
69 $active
70 .removeClass('active')
71 .find('> .dropdown-menu > .active')
72 .removeClass('active')
73
74 element.addClass('active')
75
76 if (transition) {
77 element[0].offsetWidth // reflow for transition
78 element.addClass('in')
79 } else {
80 element.removeClass('fade')
81 }
82
83 if (element.parent('.dropdown-menu')) {
84 element.closest('li.dropdown').addClass('active')
85 }
86
87 callback && callback()
88 }
89
90 transition ?
91 $active
92 .one($.support.transition.end, next)
93 .emulateTransitionEnd(150) :
94 next()
95
96 $active.removeClass('in')
97 }
98
99
100 // TAB PLUGIN DEFINITION
101 // =====================
102
103 var old = $.fn.tab
104
105 $.fn.tab = function ( option ) {
106 return this.each(function () {
107 var $this = $(this)
108 var data = $this.data('bs.tab')
109
110 if (!data) $this.data('bs.tab', (data = new Tab(this)))
111 if (typeof option == 'string') data[option]()
112 })
113 }
114
115 $.fn.tab.Constructor = Tab
116
117
118 // TAB NO CONFLICT
119 // ===============
120
121 $.fn.tab.noConflict = function () {
122 $.fn.tab = old
123 return this
124 }
125
126
127 // TAB DATA-API
128 // ============
129
130 $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
131 e.preventDefault()
132 $(this).tab('show')
133 })
134
135 }(jQuery);