Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
/* ========================================================
2
 * bootstrap-tab.js v2.3.2
3
 * http://twitter.github.com/bootstrap/javascript.html#tabs
4
 * ========================================================
5
 * Copyright 2012 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 ($) {
22
 
23
  "use strict"; // jshint ;_;
24
 
25
 
26
 /* TAB CLASS DEFINITION
27
  * ==================== */
28
 
29
  var Tab = function (element) {
30
    this.element = $(element)
31
  }
32
 
33
  Tab.prototype = {
34
 
35
    constructor: Tab
36
 
37
  , show: function () {
38
      var $this = this.element
39
        , $ul = $this.closest('ul:not(.dropdown-menu)')
40
        , selector = $this.attr('data-target')
41
        , previous
42
        , $target
43
        , e
44
 
45
      if (!selector) {
46
        selector = $this.attr('href')
47
        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
48
      }
49
 
50
      if ( $this.parent('li').hasClass('active') ) return
51
 
52
      previous = $ul.find('.active:last a')[0]
53
 
54
      e = $.Event('show', {
55
        relatedTarget: previous
56
      })
57
 
58
      $this.trigger(e)
59
 
60
      if (e.isDefaultPrevented()) return
61
 
62
      $target = $(selector)
63
 
64
      this.activate($this.parent('li'), $ul)
65
      this.activate($target, $target.parent(), function () {
66
        $this.trigger({
67
          type: 'shown'
68
        , relatedTarget: previous
69
        })
70
      })
71
    }
72
 
73
  , activate: function ( element, container, callback) {
74
      var $active = container.find('> .active')
75
        , transition = callback
76
            && $.support.transition
77
            && $active.hasClass('fade')
78
 
79
      function next() {
80
        $active
81
          .removeClass('active')
82
          .find('> .dropdown-menu > .active')
83
          .removeClass('active')
84
 
85
        element.addClass('active')
86
 
87
        if (transition) {
88
          element[0].offsetWidth // reflow for transition
89
          element.addClass('in')
90
        } else {
91
          element.removeClass('fade')
92
        }
93
 
94
        if ( element.parent('.dropdown-menu') ) {
95
          element.closest('li.dropdown').addClass('active')
96
        }
97
 
98
        callback && callback()
99
      }
100
 
101
      transition ?
102
        $active.one($.support.transition.end, next) :
103
        next()
104
 
105
      $active.removeClass('in')
106
    }
107
  }
108
 
109
 
110
 /* TAB PLUGIN DEFINITION
111
  * ===================== */
112
 
113
  var old = $.fn.tab
114
 
115
  $.fn.tab = function ( option ) {
116
    return this.each(function () {
117
      var $this = $(this)
118
        , data = $this.data('tab')
119
      if (!data) $this.data('tab', (data = new Tab(this)))
120
      if (typeof option == 'string') data[option]()
121
    })
122
  }
123
 
124
  $.fn.tab.Constructor = Tab
125
 
126
 
127
 /* TAB NO CONFLICT
128
  * =============== */
129
 
130
  $.fn.tab.noConflict = function () {
131
    $.fn.tab = old
132
    return this
133
  }
134
 
135
 
136
 /* TAB DATA-API
137
  * ============ */
138
 
139
  $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
140
    e.preventDefault()
141
    $(this).tab('show')
142
  })
143
 
144
}(window.jQuery);