[ADD] doc: new documentation, with training tutorials, and new scaffolding
[odoo/odoo.git] / doc / _themes / odoodoc / static / bootstrap / js / tab.js
1 /* ========================================================================
2  * Bootstrap: tab.js v3.2.0
3  * http://getbootstrap.com/javascript/#tabs
4  * ========================================================================
5  * Copyright 2011-2014 Twitter, Inc.
6  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7  * ======================================================================== */
8
9
10 +function ($) {
11   'use strict';
12
13   // TAB CLASS DEFINITION
14   // ====================
15
16   var Tab = function (element) {
17     this.element = $(element)
18   }
19
20   Tab.VERSION = '3.2.0'
21
22   Tab.prototype.show = function () {
23     var $this    = this.element
24     var $ul      = $this.closest('ul:not(.dropdown-menu)')
25     var selector = $this.data('target')
26
27     if (!selector) {
28       selector = $this.attr('href')
29       selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
30     }
31
32     if ($this.parent('li').hasClass('active')) return
33
34     var previous = $ul.find('.active:last a')[0]
35     var e        = $.Event('show.bs.tab', {
36       relatedTarget: previous
37     })
38
39     $this.trigger(e)
40
41     if (e.isDefaultPrevented()) return
42
43     var $target = $(selector)
44
45     this.activate($this.closest('li'), $ul)
46     this.activate($target, $target.parent(), function () {
47       $this.trigger({
48         type: 'shown.bs.tab',
49         relatedTarget: previous
50       })
51     })
52   }
53
54   Tab.prototype.activate = function (element, container, callback) {
55     var $active    = container.find('> .active')
56     var transition = callback
57       && $.support.transition
58       && $active.hasClass('fade')
59
60     function next() {
61       $active
62         .removeClass('active')
63         .find('> .dropdown-menu > .active')
64         .removeClass('active')
65
66       element.addClass('active')
67
68       if (transition) {
69         element[0].offsetWidth // reflow for transition
70         element.addClass('in')
71       } else {
72         element.removeClass('fade')
73       }
74
75       if (element.parent('.dropdown-menu')) {
76         element.closest('li.dropdown').addClass('active')
77       }
78
79       callback && callback()
80     }
81
82     transition ?
83       $active
84         .one('bsTransitionEnd', next)
85         .emulateTransitionEnd(150) :
86       next()
87
88     $active.removeClass('in')
89   }
90
91
92   // TAB PLUGIN DEFINITION
93   // =====================
94
95   function Plugin(option) {
96     return this.each(function () {
97       var $this = $(this)
98       var data  = $this.data('bs.tab')
99
100       if (!data) $this.data('bs.tab', (data = new Tab(this)))
101       if (typeof option == 'string') data[option]()
102     })
103   }
104
105   var old = $.fn.tab
106
107   $.fn.tab             = Plugin
108   $.fn.tab.Constructor = Tab
109
110
111   // TAB NO CONFLICT
112   // ===============
113
114   $.fn.tab.noConflict = function () {
115     $.fn.tab = old
116     return this
117   }
118
119
120   // TAB DATA-API
121   // ============
122
123   $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
124     e.preventDefault()
125     Plugin.call($(this), 'show')
126   })
127
128 }(jQuery);