flexi_generators 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/lib/generators/flexi/config/config_generator.rb +3 -3
- data/lib/generators/flexi/config/templates/field_error.rb +1 -12
- data/lib/generators/flexi/config/templates/inflector_portuguese.rb +0 -3
- data/lib/generators/flexi/config/templates/pt-BR.yml +13 -12
- data/lib/generators/flexi/install/install_generator.rb +1 -1
- data/lib/generators/flexi/install/templates/application.css +1 -1
- data/lib/generators/flexi/layout/layout_generator.rb +3 -4
- data/lib/generators/flexi/layout/templates/_navbar.html.erb +5 -6
- data/lib/generators/flexi/layout/templates/_sidebar.html.erb +13 -16
- data/lib/generators/flexi/layout/templates/_user_dropdown.html.erb +12 -11
- data/lib/generators/flexi/layout/templates/application.css +1 -1
- data/lib/generators/flexi/layout/templates/dashboard.html.erb +1 -48
- data/lib/generators/flexi/layout/templates/error_messages_helper.rb +6 -5
- data/lib/generators/flexi/layout/templates/layout.css +104 -3
- data/lib/generators/flexi/layout/templates/layout.html.erb +23 -46
- data/lib/generators/flexi/scaffold/scaffold_generator.rb +1 -1
- data/lib/generators/flexi/scaffold/templates/_form.html.erb +15 -17
- data/lib/generators/flexi/scaffold/templates/controller.rb +29 -15
- data/lib/generators/flexi/scaffold/templates/index.html.erb +25 -15
- data/lib/generators/flexi/scaffold/templates/show.html.erb +10 -11
- data/lib/twitter-bootstrap/version.rb +1 -1
- data/lib/version.rb +1 -1
- data/vendor/assets/fonts/flexi/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/fonts/flexi/glyphicons-halflings-regular.svg +229 -0
- data/vendor/assets/fonts/flexi/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/fonts/flexi/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/javascripts/flexi/bootstrap.js +1259 -1588
- data/vendor/assets/javascripts/flexi/bootstrap.min.js +5 -5
- data/vendor/assets/stylesheets/flexi/bootstrap-theme.css +347 -0
- data/vendor/assets/stylesheets/flexi/bootstrap-theme.min.css +7 -0
- data/vendor/assets/stylesheets/flexi/bootstrap.css +4696 -5078
- data/vendor/assets/stylesheets/flexi/bootstrap.min.css +7 -9
- metadata +11 -15
- data/vendor/assets/images/flexi/glyphicons-halflings-white.png +0 -0
- data/vendor/assets/images/flexi/glyphicons-halflings.png +0 -0
- data/vendor/assets/stylesheets/flexi/bootstrap-responsive.css +0 -1109
- data/vendor/assets/stylesheets/flexi/bootstrap-responsive.min.css +0 -9
Binary file
|
Binary file
|
@@ -1,139 +1,126 @@
|
|
1
|
-
|
2
|
-
*
|
3
|
-
*
|
4
|
-
*
|
5
|
-
|
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
|
-
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
|
27
|
-
* ======================================================= */
|
1
|
+
/*!
|
2
|
+
* Bootstrap v3.1.1 (http://getbootstrap.com)
|
3
|
+
* Copyright 2011-2014 Twitter, Inc.
|
4
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5
|
+
*/
|
28
6
|
|
29
|
-
|
7
|
+
if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
|
30
8
|
|
31
|
-
|
9
|
+
/* ========================================================================
|
10
|
+
* Bootstrap: transition.js v3.1.1
|
11
|
+
* http://getbootstrap.com/javascript/#transitions
|
12
|
+
* ========================================================================
|
13
|
+
* Copyright 2011-2014 Twitter, Inc.
|
14
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
15
|
+
* ======================================================================== */
|
32
16
|
|
33
|
-
var transitionEnd = (function () {
|
34
17
|
|
35
|
-
|
36
|
-
|
37
|
-
'WebkitTransition' : 'webkitTransitionEnd'
|
38
|
-
, 'MozTransition' : 'transitionend'
|
39
|
-
, 'OTransition' : 'oTransitionEnd otransitionend'
|
40
|
-
, 'transition' : 'transitionend'
|
41
|
-
}
|
42
|
-
, name
|
18
|
+
+function ($) {
|
19
|
+
'use strict';
|
43
20
|
|
44
|
-
|
45
|
-
|
46
|
-
return transEndEventNames[name]
|
47
|
-
}
|
48
|
-
}
|
21
|
+
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
22
|
+
// ============================================================
|
49
23
|
|
50
|
-
|
24
|
+
function transitionEnd() {
|
25
|
+
var el = document.createElement('bootstrap')
|
26
|
+
|
27
|
+
var transEndEventNames = {
|
28
|
+
'WebkitTransition' : 'webkitTransitionEnd',
|
29
|
+
'MozTransition' : 'transitionend',
|
30
|
+
'OTransition' : 'oTransitionEnd otransitionend',
|
31
|
+
'transition' : 'transitionend'
|
32
|
+
}
|
51
33
|
|
52
|
-
|
53
|
-
|
34
|
+
for (var name in transEndEventNames) {
|
35
|
+
if (el.style[name] !== undefined) {
|
36
|
+
return { end: transEndEventNames[name] }
|
54
37
|
}
|
38
|
+
}
|
55
39
|
|
56
|
-
|
40
|
+
return false // explicit for ie8 ( ._.)
|
41
|
+
}
|
57
42
|
|
58
|
-
|
43
|
+
// http://blog.alexmaccaw.com/css-transitions
|
44
|
+
$.fn.emulateTransitionEnd = function (duration) {
|
45
|
+
var called = false, $el = this
|
46
|
+
$(this).one($.support.transition.end, function () { called = true })
|
47
|
+
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
48
|
+
setTimeout(callback, duration)
|
49
|
+
return this
|
50
|
+
}
|
59
51
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
* ==========================================================
|
64
|
-
* Copyright 2013 Twitter, Inc.
|
65
|
-
*
|
66
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
67
|
-
* you may not use this file except in compliance with the License.
|
68
|
-
* You may obtain a copy of the License at
|
69
|
-
*
|
70
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
71
|
-
*
|
72
|
-
* Unless required by applicable law or agreed to in writing, software
|
73
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
74
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
75
|
-
* See the License for the specific language governing permissions and
|
76
|
-
* limitations under the License.
|
77
|
-
* ========================================================== */
|
52
|
+
$(function () {
|
53
|
+
$.support.transition = transitionEnd()
|
54
|
+
})
|
78
55
|
|
56
|
+
}(jQuery);
|
79
57
|
|
80
|
-
|
58
|
+
/* ========================================================================
|
59
|
+
* Bootstrap: alert.js v3.1.1
|
60
|
+
* http://getbootstrap.com/javascript/#alerts
|
61
|
+
* ========================================================================
|
62
|
+
* Copyright 2011-2014 Twitter, Inc.
|
63
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
64
|
+
* ======================================================================== */
|
81
65
|
|
82
|
-
"use strict"; // jshint ;_;
|
83
66
|
|
67
|
+
+function ($) {
|
68
|
+
'use strict';
|
84
69
|
|
85
|
-
|
86
|
-
|
70
|
+
// ALERT CLASS DEFINITION
|
71
|
+
// ======================
|
87
72
|
|
88
73
|
var dismiss = '[data-dismiss="alert"]'
|
89
|
-
|
90
|
-
|
91
|
-
|
74
|
+
var Alert = function (el) {
|
75
|
+
$(el).on('click', dismiss, this.close)
|
76
|
+
}
|
92
77
|
|
93
78
|
Alert.prototype.close = function (e) {
|
94
|
-
var $this
|
95
|
-
|
96
|
-
, $parent
|
79
|
+
var $this = $(this)
|
80
|
+
var selector = $this.attr('data-target')
|
97
81
|
|
98
82
|
if (!selector) {
|
99
83
|
selector = $this.attr('href')
|
100
|
-
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
84
|
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
101
85
|
}
|
102
86
|
|
103
|
-
$parent = $(selector)
|
87
|
+
var $parent = $(selector)
|
104
88
|
|
105
|
-
e
|
89
|
+
if (e) e.preventDefault()
|
106
90
|
|
107
|
-
|
91
|
+
if (!$parent.length) {
|
92
|
+
$parent = $this.hasClass('alert') ? $this : $this.parent()
|
93
|
+
}
|
108
94
|
|
109
|
-
$parent.trigger(e = $.Event('close'))
|
95
|
+
$parent.trigger(e = $.Event('close.bs.alert'))
|
110
96
|
|
111
97
|
if (e.isDefaultPrevented()) return
|
112
98
|
|
113
99
|
$parent.removeClass('in')
|
114
100
|
|
115
101
|
function removeElement() {
|
116
|
-
$parent
|
117
|
-
.trigger('closed')
|
118
|
-
.remove()
|
102
|
+
$parent.trigger('closed.bs.alert').remove()
|
119
103
|
}
|
120
104
|
|
121
105
|
$.support.transition && $parent.hasClass('fade') ?
|
122
|
-
$parent
|
106
|
+
$parent
|
107
|
+
.one($.support.transition.end, removeElement)
|
108
|
+
.emulateTransitionEnd(150) :
|
123
109
|
removeElement()
|
124
110
|
}
|
125
111
|
|
126
112
|
|
127
|
-
|
128
|
-
|
113
|
+
// ALERT PLUGIN DEFINITION
|
114
|
+
// =======================
|
129
115
|
|
130
116
|
var old = $.fn.alert
|
131
117
|
|
132
118
|
$.fn.alert = function (option) {
|
133
119
|
return this.each(function () {
|
134
120
|
var $this = $(this)
|
135
|
-
|
136
|
-
|
121
|
+
var data = $this.data('bs.alert')
|
122
|
+
|
123
|
+
if (!data) $this.data('bs.alert', (data = new Alert(this)))
|
137
124
|
if (typeof option == 'string') data[option].call($this)
|
138
125
|
})
|
139
126
|
}
|
@@ -141,8 +128,8 @@
|
|
141
128
|
$.fn.alert.Constructor = Alert
|
142
129
|
|
143
130
|
|
144
|
-
|
145
|
-
|
131
|
+
// ALERT NO CONFLICT
|
132
|
+
// =================
|
146
133
|
|
147
134
|
$.fn.alert.noConflict = function () {
|
148
135
|
$.fn.alert = old
|
@@ -150,99 +137,102 @@
|
|
150
137
|
}
|
151
138
|
|
152
139
|
|
153
|
-
|
154
|
-
|
140
|
+
// ALERT DATA-API
|
141
|
+
// ==============
|
155
142
|
|
156
|
-
$(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
|
143
|
+
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
|
157
144
|
|
158
|
-
}(
|
159
|
-
* bootstrap-button.js v2.3.2
|
160
|
-
* http://getbootstrap.com/2.3.2/javascript.html#buttons
|
161
|
-
* ============================================================
|
162
|
-
* Copyright 2013 Twitter, Inc.
|
163
|
-
*
|
164
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
165
|
-
* you may not use this file except in compliance with the License.
|
166
|
-
* You may obtain a copy of the License at
|
167
|
-
*
|
168
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
169
|
-
*
|
170
|
-
* Unless required by applicable law or agreed to in writing, software
|
171
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
172
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
173
|
-
* See the License for the specific language governing permissions and
|
174
|
-
* limitations under the License.
|
175
|
-
* ============================================================ */
|
145
|
+
}(jQuery);
|
176
146
|
|
147
|
+
/* ========================================================================
|
148
|
+
* Bootstrap: button.js v3.1.1
|
149
|
+
* http://getbootstrap.com/javascript/#buttons
|
150
|
+
* ========================================================================
|
151
|
+
* Copyright 2011-2014 Twitter, Inc.
|
152
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
153
|
+
* ======================================================================== */
|
177
154
|
|
178
|
-
!function ($) {
|
179
155
|
|
180
|
-
|
156
|
+
+function ($) {
|
157
|
+
'use strict';
|
181
158
|
|
182
|
-
|
183
|
-
|
184
|
-
* ============================== */
|
159
|
+
// BUTTON PUBLIC CLASS DEFINITION
|
160
|
+
// ==============================
|
185
161
|
|
186
162
|
var Button = function (element, options) {
|
187
|
-
this.$element
|
188
|
-
this.options
|
163
|
+
this.$element = $(element)
|
164
|
+
this.options = $.extend({}, Button.DEFAULTS, options)
|
165
|
+
this.isLoading = false
|
166
|
+
}
|
167
|
+
|
168
|
+
Button.DEFAULTS = {
|
169
|
+
loadingText: 'loading...'
|
189
170
|
}
|
190
171
|
|
191
172
|
Button.prototype.setState = function (state) {
|
192
|
-
var d
|
193
|
-
|
194
|
-
|
195
|
-
|
173
|
+
var d = 'disabled'
|
174
|
+
var $el = this.$element
|
175
|
+
var val = $el.is('input') ? 'val' : 'html'
|
176
|
+
var data = $el.data()
|
196
177
|
|
197
178
|
state = state + 'Text'
|
198
|
-
|
179
|
+
|
180
|
+
if (!data.resetText) $el.data('resetText', $el[val]())
|
199
181
|
|
200
182
|
$el[val](data[state] || this.options[state])
|
201
183
|
|
202
184
|
// push to event loop to allow forms to submit
|
203
|
-
setTimeout(function () {
|
204
|
-
state == 'loadingText'
|
205
|
-
|
185
|
+
setTimeout($.proxy(function () {
|
186
|
+
if (state == 'loadingText') {
|
187
|
+
this.isLoading = true
|
188
|
+
$el.addClass(d).attr(d, d)
|
189
|
+
} else if (this.isLoading) {
|
190
|
+
this.isLoading = false
|
206
191
|
$el.removeClass(d).removeAttr(d)
|
207
|
-
|
192
|
+
}
|
193
|
+
}, this), 0)
|
208
194
|
}
|
209
195
|
|
210
196
|
Button.prototype.toggle = function () {
|
211
|
-
var
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
.
|
197
|
+
var changed = true
|
198
|
+
var $parent = this.$element.closest('[data-toggle="buttons"]')
|
199
|
+
|
200
|
+
if ($parent.length) {
|
201
|
+
var $input = this.$element.find('input')
|
202
|
+
if ($input.prop('type') == 'radio') {
|
203
|
+
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
|
204
|
+
else $parent.find('.active').removeClass('active')
|
205
|
+
}
|
206
|
+
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
|
207
|
+
}
|
216
208
|
|
217
|
-
this.$element.toggleClass('active')
|
209
|
+
if (changed) this.$element.toggleClass('active')
|
218
210
|
}
|
219
211
|
|
220
212
|
|
221
|
-
|
222
|
-
|
213
|
+
// BUTTON PLUGIN DEFINITION
|
214
|
+
// ========================
|
223
215
|
|
224
216
|
var old = $.fn.button
|
225
217
|
|
226
218
|
$.fn.button = function (option) {
|
227
219
|
return this.each(function () {
|
228
|
-
var $this
|
229
|
-
|
230
|
-
|
231
|
-
|
220
|
+
var $this = $(this)
|
221
|
+
var data = $this.data('bs.button')
|
222
|
+
var options = typeof option == 'object' && option
|
223
|
+
|
224
|
+
if (!data) $this.data('bs.button', (data = new Button(this, options)))
|
225
|
+
|
232
226
|
if (option == 'toggle') data.toggle()
|
233
227
|
else if (option) data.setState(option)
|
234
228
|
})
|
235
229
|
}
|
236
230
|
|
237
|
-
$.fn.button.defaults = {
|
238
|
-
loadingText: 'loading...'
|
239
|
-
}
|
240
|
-
|
241
231
|
$.fn.button.Constructor = Button
|
242
232
|
|
243
233
|
|
244
|
-
|
245
|
-
|
234
|
+
// BUTTON NO CONFLICT
|
235
|
+
// ==================
|
246
236
|
|
247
237
|
$.fn.button.noConflict = function () {
|
248
238
|
$.fn.button = old
|
@@ -250,367 +240,364 @@
|
|
250
240
|
}
|
251
241
|
|
252
242
|
|
253
|
-
|
254
|
-
|
243
|
+
// BUTTON DATA-API
|
244
|
+
// ===============
|
255
245
|
|
256
|
-
$(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
|
246
|
+
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
|
257
247
|
var $btn = $(e.target)
|
258
248
|
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
259
249
|
$btn.button('toggle')
|
250
|
+
e.preventDefault()
|
260
251
|
})
|
261
252
|
|
262
|
-
}(
|
263
|
-
* bootstrap-carousel.js v2.3.2
|
264
|
-
* http://getbootstrap.com/2.3.2/javascript.html#carousel
|
265
|
-
* ==========================================================
|
266
|
-
* Copyright 2013 Twitter, Inc.
|
267
|
-
*
|
268
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
269
|
-
* you may not use this file except in compliance with the License.
|
270
|
-
* You may obtain a copy of the License at
|
271
|
-
*
|
272
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
273
|
-
*
|
274
|
-
* Unless required by applicable law or agreed to in writing, software
|
275
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
276
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
277
|
-
* See the License for the specific language governing permissions and
|
278
|
-
* limitations under the License.
|
279
|
-
* ========================================================== */
|
280
|
-
|
253
|
+
}(jQuery);
|
281
254
|
|
282
|
-
|
255
|
+
/* ========================================================================
|
256
|
+
* Bootstrap: carousel.js v3.1.1
|
257
|
+
* http://getbootstrap.com/javascript/#carousel
|
258
|
+
* ========================================================================
|
259
|
+
* Copyright 2011-2014 Twitter, Inc.
|
260
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
261
|
+
* ======================================================================== */
|
283
262
|
|
284
|
-
"use strict"; // jshint ;_;
|
285
263
|
|
264
|
+
+function ($) {
|
265
|
+
'use strict';
|
286
266
|
|
287
|
-
|
288
|
-
|
267
|
+
// CAROUSEL CLASS DEFINITION
|
268
|
+
// =========================
|
289
269
|
|
290
270
|
var Carousel = function (element, options) {
|
291
|
-
this.$element
|
271
|
+
this.$element = $(element)
|
292
272
|
this.$indicators = this.$element.find('.carousel-indicators')
|
293
|
-
this.options
|
273
|
+
this.options = options
|
274
|
+
this.paused =
|
275
|
+
this.sliding =
|
276
|
+
this.interval =
|
277
|
+
this.$active =
|
278
|
+
this.$items = null
|
279
|
+
|
294
280
|
this.options.pause == 'hover' && this.$element
|
295
281
|
.on('mouseenter', $.proxy(this.pause, this))
|
296
282
|
.on('mouseleave', $.proxy(this.cycle, this))
|
297
283
|
}
|
298
284
|
|
299
|
-
Carousel.
|
285
|
+
Carousel.DEFAULTS = {
|
286
|
+
interval: 5000,
|
287
|
+
pause: 'hover',
|
288
|
+
wrap: true
|
289
|
+
}
|
300
290
|
|
301
|
-
|
302
|
-
|
303
|
-
if (this.interval) clearInterval(this.interval);
|
304
|
-
this.options.interval
|
305
|
-
&& !this.paused
|
306
|
-
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
307
|
-
return this
|
308
|
-
}
|
291
|
+
Carousel.prototype.cycle = function (e) {
|
292
|
+
e || (this.paused = false)
|
309
293
|
|
310
|
-
|
311
|
-
this.$active = this.$element.find('.item.active')
|
312
|
-
this.$items = this.$active.parent().children()
|
313
|
-
return this.$items.index(this.$active)
|
314
|
-
}
|
294
|
+
this.interval && clearInterval(this.interval)
|
315
295
|
|
316
|
-
|
317
|
-
|
318
|
-
|
296
|
+
this.options.interval
|
297
|
+
&& !this.paused
|
298
|
+
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
319
299
|
|
320
|
-
|
300
|
+
return this
|
301
|
+
}
|
321
302
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
})
|
326
|
-
}
|
303
|
+
Carousel.prototype.getActiveIndex = function () {
|
304
|
+
this.$active = this.$element.find('.item.active')
|
305
|
+
this.$items = this.$active.parent().children()
|
327
306
|
|
328
|
-
|
329
|
-
|
330
|
-
}
|
307
|
+
return this.$items.index(this.$active)
|
308
|
+
}
|
331
309
|
|
332
|
-
|
333
|
-
|
310
|
+
Carousel.prototype.to = function (pos) {
|
311
|
+
var that = this
|
312
|
+
var activeIndex = this.getActiveIndex()
|
334
313
|
|
335
|
-
|
336
|
-
if (!e) this.paused = true
|
337
|
-
if (this.$element.find('.next, .prev').length && $.support.transition.end) {
|
338
|
-
this.$element.trigger($.support.transition.end)
|
339
|
-
this.cycle(true)
|
340
|
-
}
|
341
|
-
clearInterval(this.interval)
|
342
|
-
this.interval = null
|
343
|
-
return this
|
344
|
-
}
|
314
|
+
if (pos > (this.$items.length - 1) || pos < 0) return
|
345
315
|
|
346
|
-
|
347
|
-
|
348
|
-
return this.slide('next')
|
349
|
-
}
|
316
|
+
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
|
317
|
+
if (activeIndex == pos) return this.pause().cycle()
|
350
318
|
|
351
|
-
|
352
|
-
|
353
|
-
|
319
|
+
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
|
320
|
+
}
|
321
|
+
|
322
|
+
Carousel.prototype.pause = function (e) {
|
323
|
+
e || (this.paused = true)
|
324
|
+
|
325
|
+
if (this.$element.find('.next, .prev').length && $.support.transition) {
|
326
|
+
this.$element.trigger($.support.transition.end)
|
327
|
+
this.cycle(true)
|
354
328
|
}
|
355
329
|
|
356
|
-
|
357
|
-
var $active = this.$element.find('.item.active')
|
358
|
-
, $next = next || $active[type]()
|
359
|
-
, isCycling = this.interval
|
360
|
-
, direction = type == 'next' ? 'left' : 'right'
|
361
|
-
, fallback = type == 'next' ? 'first' : 'last'
|
362
|
-
, that = this
|
363
|
-
, e
|
330
|
+
this.interval = clearInterval(this.interval)
|
364
331
|
|
365
|
-
|
332
|
+
return this
|
333
|
+
}
|
366
334
|
|
367
|
-
|
335
|
+
Carousel.prototype.next = function () {
|
336
|
+
if (this.sliding) return
|
337
|
+
return this.slide('next')
|
338
|
+
}
|
368
339
|
|
369
|
-
|
340
|
+
Carousel.prototype.prev = function () {
|
341
|
+
if (this.sliding) return
|
342
|
+
return this.slide('prev')
|
343
|
+
}
|
370
344
|
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
345
|
+
Carousel.prototype.slide = function (type, next) {
|
346
|
+
var $active = this.$element.find('.item.active')
|
347
|
+
var $next = next || $active[type]()
|
348
|
+
var isCycling = this.interval
|
349
|
+
var direction = type == 'next' ? 'left' : 'right'
|
350
|
+
var fallback = type == 'next' ? 'first' : 'last'
|
351
|
+
var that = this
|
375
352
|
|
376
|
-
|
353
|
+
if (!$next.length) {
|
354
|
+
if (!this.options.wrap) return
|
355
|
+
$next = this.$element.find('.item')[fallback]()
|
356
|
+
}
|
377
357
|
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
358
|
+
if ($next.hasClass('active')) return this.sliding = false
|
359
|
+
|
360
|
+
var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
|
361
|
+
this.$element.trigger(e)
|
362
|
+
if (e.isDefaultPrevented()) return
|
363
|
+
|
364
|
+
this.sliding = true
|
365
|
+
|
366
|
+
isCycling && this.pause()
|
367
|
+
|
368
|
+
if (this.$indicators.length) {
|
369
|
+
this.$indicators.find('.active').removeClass('active')
|
370
|
+
this.$element.one('slid.bs.carousel', function () {
|
371
|
+
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
|
372
|
+
$nextIndicator && $nextIndicator.addClass('active')
|
373
|
+
})
|
374
|
+
}
|
385
375
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
this.$element.one($.support.transition.end, function () {
|
376
|
+
if ($.support.transition && this.$element.hasClass('slide')) {
|
377
|
+
$next.addClass(type)
|
378
|
+
$next[0].offsetWidth // force reflow
|
379
|
+
$active.addClass(direction)
|
380
|
+
$next.addClass(direction)
|
381
|
+
$active
|
382
|
+
.one($.support.transition.end, function () {
|
394
383
|
$next.removeClass([type, direction].join(' ')).addClass('active')
|
395
384
|
$active.removeClass(['active', direction].join(' '))
|
396
385
|
that.sliding = false
|
397
|
-
setTimeout(function () { that.$element.trigger('slid') }, 0)
|
386
|
+
setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
|
398
387
|
})
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
this.$element.trigger('slid')
|
406
|
-
}
|
407
|
-
|
408
|
-
isCycling && this.cycle()
|
409
|
-
|
410
|
-
return this
|
388
|
+
.emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
|
389
|
+
} else {
|
390
|
+
$active.removeClass('active')
|
391
|
+
$next.addClass('active')
|
392
|
+
this.sliding = false
|
393
|
+
this.$element.trigger('slid.bs.carousel')
|
411
394
|
}
|
412
395
|
|
396
|
+
isCycling && this.cycle()
|
397
|
+
|
398
|
+
return this
|
413
399
|
}
|
414
400
|
|
415
401
|
|
416
|
-
|
417
|
-
|
402
|
+
// CAROUSEL PLUGIN DEFINITION
|
403
|
+
// ==========================
|
418
404
|
|
419
405
|
var old = $.fn.carousel
|
420
406
|
|
421
407
|
$.fn.carousel = function (option) {
|
422
408
|
return this.each(function () {
|
423
|
-
var $this
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
409
|
+
var $this = $(this)
|
410
|
+
var data = $this.data('bs.carousel')
|
411
|
+
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
412
|
+
var action = typeof option == 'string' ? option : options.slide
|
413
|
+
|
414
|
+
if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
|
428
415
|
if (typeof option == 'number') data.to(option)
|
429
416
|
else if (action) data[action]()
|
430
417
|
else if (options.interval) data.pause().cycle()
|
431
418
|
})
|
432
419
|
}
|
433
420
|
|
434
|
-
$.fn.carousel.defaults = {
|
435
|
-
interval: 5000
|
436
|
-
, pause: 'hover'
|
437
|
-
}
|
438
|
-
|
439
421
|
$.fn.carousel.Constructor = Carousel
|
440
422
|
|
441
423
|
|
442
|
-
|
443
|
-
|
424
|
+
// CAROUSEL NO CONFLICT
|
425
|
+
// ====================
|
444
426
|
|
445
427
|
$.fn.carousel.noConflict = function () {
|
446
428
|
$.fn.carousel = old
|
447
429
|
return this
|
448
430
|
}
|
449
431
|
|
450
|
-
/* CAROUSEL DATA-API
|
451
|
-
* ================= */
|
452
432
|
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
433
|
+
// CAROUSEL DATA-API
|
434
|
+
// =================
|
435
|
+
|
436
|
+
$(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
|
437
|
+
var $this = $(this), href
|
438
|
+
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
439
|
+
var options = $.extend({}, $target.data(), $this.data())
|
440
|
+
var slideIndex = $this.attr('data-slide-to')
|
441
|
+
if (slideIndex) options.interval = false
|
458
442
|
|
459
443
|
$target.carousel(options)
|
460
444
|
|
461
445
|
if (slideIndex = $this.attr('data-slide-to')) {
|
462
|
-
$target.data('carousel').
|
446
|
+
$target.data('bs.carousel').to(slideIndex)
|
463
447
|
}
|
464
448
|
|
465
449
|
e.preventDefault()
|
466
450
|
})
|
467
451
|
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
475
|
-
* you may not use this file except in compliance with the License.
|
476
|
-
* You may obtain a copy of the License at
|
477
|
-
*
|
478
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
479
|
-
*
|
480
|
-
* Unless required by applicable law or agreed to in writing, software
|
481
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
482
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
483
|
-
* See the License for the specific language governing permissions and
|
484
|
-
* limitations under the License.
|
485
|
-
* ============================================================ */
|
452
|
+
$(window).on('load', function () {
|
453
|
+
$('[data-ride="carousel"]').each(function () {
|
454
|
+
var $carousel = $(this)
|
455
|
+
$carousel.carousel($carousel.data())
|
456
|
+
})
|
457
|
+
})
|
486
458
|
|
459
|
+
}(jQuery);
|
487
460
|
|
488
|
-
|
461
|
+
/* ========================================================================
|
462
|
+
* Bootstrap: collapse.js v3.1.1
|
463
|
+
* http://getbootstrap.com/javascript/#collapse
|
464
|
+
* ========================================================================
|
465
|
+
* Copyright 2011-2014 Twitter, Inc.
|
466
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
467
|
+
* ======================================================================== */
|
489
468
|
|
490
|
-
"use strict"; // jshint ;_;
|
491
469
|
|
470
|
+
+function ($) {
|
471
|
+
'use strict';
|
492
472
|
|
493
|
-
|
494
|
-
|
473
|
+
// COLLAPSE PUBLIC CLASS DEFINITION
|
474
|
+
// ================================
|
495
475
|
|
496
476
|
var Collapse = function (element, options) {
|
497
|
-
this.$element
|
498
|
-
this.options
|
477
|
+
this.$element = $(element)
|
478
|
+
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
479
|
+
this.transitioning = null
|
499
480
|
|
500
|
-
if (this.options.parent)
|
501
|
-
|
502
|
-
|
481
|
+
if (this.options.parent) this.$parent = $(this.options.parent)
|
482
|
+
if (this.options.toggle) this.toggle()
|
483
|
+
}
|
503
484
|
|
504
|
-
|
485
|
+
Collapse.DEFAULTS = {
|
486
|
+
toggle: true
|
505
487
|
}
|
506
488
|
|
507
|
-
Collapse.prototype = {
|
489
|
+
Collapse.prototype.dimension = function () {
|
490
|
+
var hasWidth = this.$element.hasClass('width')
|
491
|
+
return hasWidth ? 'width' : 'height'
|
492
|
+
}
|
508
493
|
|
509
|
-
|
494
|
+
Collapse.prototype.show = function () {
|
495
|
+
if (this.transitioning || this.$element.hasClass('in')) return
|
510
496
|
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
}
|
497
|
+
var startEvent = $.Event('show.bs.collapse')
|
498
|
+
this.$element.trigger(startEvent)
|
499
|
+
if (startEvent.isDefaultPrevented()) return
|
515
500
|
|
516
|
-
|
517
|
-
var dimension
|
518
|
-
, scroll
|
519
|
-
, actives
|
520
|
-
, hasData
|
501
|
+
var actives = this.$parent && this.$parent.find('> .panel > .in')
|
521
502
|
|
522
|
-
|
503
|
+
if (actives && actives.length) {
|
504
|
+
var hasData = actives.data('bs.collapse')
|
505
|
+
if (hasData && hasData.transitioning) return
|
506
|
+
actives.collapse('hide')
|
507
|
+
hasData || actives.data('bs.collapse', null)
|
508
|
+
}
|
523
509
|
|
524
|
-
|
525
|
-
scroll = $.camelCase(['scroll', dimension].join('-'))
|
526
|
-
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
|
510
|
+
var dimension = this.dimension()
|
527
511
|
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
hasData || actives.data('collapse', null)
|
533
|
-
}
|
512
|
+
this.$element
|
513
|
+
.removeClass('collapse')
|
514
|
+
.addClass('collapsing')
|
515
|
+
[dimension](0)
|
534
516
|
|
535
|
-
|
536
|
-
this.transition('addClass', $.Event('show'), 'shown')
|
537
|
-
$.support.transition && this.$element[dimension](this.$element[0][scroll])
|
538
|
-
}
|
517
|
+
this.transitioning = 1
|
539
518
|
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
this.
|
546
|
-
this.$element
|
519
|
+
var complete = function () {
|
520
|
+
this.$element
|
521
|
+
.removeClass('collapsing')
|
522
|
+
.addClass('collapse in')
|
523
|
+
[dimension]('auto')
|
524
|
+
this.transitioning = 0
|
525
|
+
this.$element.trigger('shown.bs.collapse')
|
547
526
|
}
|
548
527
|
|
549
|
-
|
550
|
-
var dimension = this.dimension()
|
528
|
+
if (!$.support.transition) return complete.call(this)
|
551
529
|
|
552
|
-
|
553
|
-
.removeClass('collapse')
|
554
|
-
[dimension](size || 'auto')
|
555
|
-
[0].offsetWidth
|
530
|
+
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
556
531
|
|
557
|
-
|
532
|
+
this.$element
|
533
|
+
.one($.support.transition.end, $.proxy(complete, this))
|
534
|
+
.emulateTransitionEnd(350)
|
535
|
+
[dimension](this.$element[0][scrollSize])
|
536
|
+
}
|
558
537
|
|
559
|
-
|
560
|
-
|
538
|
+
Collapse.prototype.hide = function () {
|
539
|
+
if (this.transitioning || !this.$element.hasClass('in')) return
|
561
540
|
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
if (startEvent.type == 'show') that.reset()
|
566
|
-
that.transitioning = 0
|
567
|
-
that.$element.trigger(completeEvent)
|
568
|
-
}
|
541
|
+
var startEvent = $.Event('hide.bs.collapse')
|
542
|
+
this.$element.trigger(startEvent)
|
543
|
+
if (startEvent.isDefaultPrevented()) return
|
569
544
|
|
570
|
-
|
545
|
+
var dimension = this.dimension()
|
571
546
|
|
572
|
-
|
547
|
+
this.$element
|
548
|
+
[dimension](this.$element[dimension]())
|
549
|
+
[0].offsetHeight
|
573
550
|
|
574
|
-
|
551
|
+
this.$element
|
552
|
+
.addClass('collapsing')
|
553
|
+
.removeClass('collapse')
|
554
|
+
.removeClass('in')
|
575
555
|
|
576
|
-
|
556
|
+
this.transitioning = 1
|
577
557
|
|
578
|
-
|
579
|
-
|
580
|
-
|
558
|
+
var complete = function () {
|
559
|
+
this.transitioning = 0
|
560
|
+
this.$element
|
561
|
+
.trigger('hidden.bs.collapse')
|
562
|
+
.removeClass('collapsing')
|
563
|
+
.addClass('collapse')
|
581
564
|
}
|
582
565
|
|
583
|
-
|
584
|
-
|
585
|
-
|
566
|
+
if (!$.support.transition) return complete.call(this)
|
567
|
+
|
568
|
+
this.$element
|
569
|
+
[dimension](0)
|
570
|
+
.one($.support.transition.end, $.proxy(complete, this))
|
571
|
+
.emulateTransitionEnd(350)
|
572
|
+
}
|
586
573
|
|
574
|
+
Collapse.prototype.toggle = function () {
|
575
|
+
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
587
576
|
}
|
588
577
|
|
589
578
|
|
590
|
-
|
591
|
-
|
579
|
+
// COLLAPSE PLUGIN DEFINITION
|
580
|
+
// ==========================
|
592
581
|
|
593
582
|
var old = $.fn.collapse
|
594
583
|
|
595
584
|
$.fn.collapse = function (option) {
|
596
585
|
return this.each(function () {
|
597
|
-
var $this
|
598
|
-
|
599
|
-
|
600
|
-
|
586
|
+
var $this = $(this)
|
587
|
+
var data = $this.data('bs.collapse')
|
588
|
+
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
589
|
+
|
590
|
+
if (!data && options.toggle && option == 'show') option = !option
|
591
|
+
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
601
592
|
if (typeof option == 'string') data[option]()
|
602
593
|
})
|
603
594
|
}
|
604
595
|
|
605
|
-
$.fn.collapse.defaults = {
|
606
|
-
toggle: true
|
607
|
-
}
|
608
|
-
|
609
596
|
$.fn.collapse.Constructor = Collapse
|
610
597
|
|
611
598
|
|
612
|
-
|
613
|
-
|
599
|
+
// COLLAPSE NO CONFLICT
|
600
|
+
// ====================
|
614
601
|
|
615
602
|
$.fn.collapse.noConflict = function () {
|
616
603
|
$.fn.collapse = old
|
@@ -618,162 +605,151 @@
|
|
618
605
|
}
|
619
606
|
|
620
607
|
|
621
|
-
|
622
|
-
|
608
|
+
// COLLAPSE DATA-API
|
609
|
+
// =================
|
623
610
|
|
624
|
-
$(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
625
|
-
var $this
|
626
|
-
|
611
|
+
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
|
612
|
+
var $this = $(this), href
|
613
|
+
var target = $this.attr('data-target')
|
627
614
|
|| e.preventDefault()
|
628
615
|
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
|
629
|
-
|
630
|
-
$
|
631
|
-
$
|
616
|
+
var $target = $(target)
|
617
|
+
var data = $target.data('bs.collapse')
|
618
|
+
var option = data ? 'toggle' : $this.data()
|
619
|
+
var parent = $this.attr('data-parent')
|
620
|
+
var $parent = parent && $(parent)
|
621
|
+
|
622
|
+
if (!data || !data.transitioning) {
|
623
|
+
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
|
624
|
+
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
|
625
|
+
}
|
626
|
+
|
627
|
+
$target.collapse(option)
|
632
628
|
})
|
633
629
|
|
634
|
-
}(
|
635
|
-
* bootstrap-dropdown.js v2.3.2
|
636
|
-
* http://getbootstrap.com/2.3.2/javascript.html#dropdowns
|
637
|
-
* ============================================================
|
638
|
-
* Copyright 2013 Twitter, Inc.
|
639
|
-
*
|
640
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
641
|
-
* you may not use this file except in compliance with the License.
|
642
|
-
* You may obtain a copy of the License at
|
643
|
-
*
|
644
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
645
|
-
*
|
646
|
-
* Unless required by applicable law or agreed to in writing, software
|
647
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
648
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
649
|
-
* See the License for the specific language governing permissions and
|
650
|
-
* limitations under the License.
|
651
|
-
* ============================================================ */
|
652
|
-
|
653
|
-
|
654
|
-
!function ($) {
|
655
|
-
|
656
|
-
"use strict"; // jshint ;_;
|
657
|
-
|
658
|
-
|
659
|
-
/* DROPDOWN CLASS DEFINITION
|
660
|
-
* ========================= */
|
661
|
-
|
662
|
-
var toggle = '[data-toggle=dropdown]'
|
663
|
-
, Dropdown = function (element) {
|
664
|
-
var $el = $(element).on('click.dropdown.data-api', this.toggle)
|
665
|
-
$('html').on('click.dropdown.data-api', function () {
|
666
|
-
$el.parent().removeClass('open')
|
667
|
-
})
|
668
|
-
}
|
630
|
+
}(jQuery);
|
669
631
|
|
670
|
-
|
632
|
+
/* ========================================================================
|
633
|
+
* Bootstrap: dropdown.js v3.1.1
|
634
|
+
* http://getbootstrap.com/javascript/#dropdowns
|
635
|
+
* ========================================================================
|
636
|
+
* Copyright 2011-2014 Twitter, Inc.
|
637
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
638
|
+
* ======================================================================== */
|
671
639
|
|
672
|
-
constructor: Dropdown
|
673
640
|
|
674
|
-
|
675
|
-
|
676
|
-
, $parent
|
677
|
-
, isActive
|
641
|
+
+function ($) {
|
642
|
+
'use strict';
|
678
643
|
|
679
|
-
|
644
|
+
// DROPDOWN CLASS DEFINITION
|
645
|
+
// =========================
|
680
646
|
|
681
|
-
|
647
|
+
var backdrop = '.dropdown-backdrop'
|
648
|
+
var toggle = '[data-toggle=dropdown]'
|
649
|
+
var Dropdown = function (element) {
|
650
|
+
$(element).on('click.bs.dropdown', this.toggle)
|
651
|
+
}
|
682
652
|
|
683
|
-
|
653
|
+
Dropdown.prototype.toggle = function (e) {
|
654
|
+
var $this = $(this)
|
684
655
|
|
685
|
-
|
656
|
+
if ($this.is('.disabled, :disabled')) return
|
686
657
|
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
658
|
+
var $parent = getParent($this)
|
659
|
+
var isActive = $parent.hasClass('open')
|
660
|
+
|
661
|
+
clearMenus()
|
662
|
+
|
663
|
+
if (!isActive) {
|
664
|
+
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
|
665
|
+
// if mobile we use a backdrop because click events don't delegate
|
666
|
+
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
|
693
667
|
}
|
694
668
|
|
695
|
-
|
669
|
+
var relatedTarget = { relatedTarget: this }
|
670
|
+
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
|
696
671
|
|
697
|
-
return
|
698
|
-
}
|
672
|
+
if (e.isDefaultPrevented()) return
|
699
673
|
|
700
|
-
|
701
|
-
|
702
|
-
,
|
703
|
-
, $active
|
704
|
-
, $parent
|
705
|
-
, isActive
|
706
|
-
, index
|
674
|
+
$parent
|
675
|
+
.toggleClass('open')
|
676
|
+
.trigger('shown.bs.dropdown', relatedTarget)
|
707
677
|
|
708
|
-
|
678
|
+
$this.focus()
|
679
|
+
}
|
709
680
|
|
710
|
-
|
681
|
+
return false
|
682
|
+
}
|
711
683
|
|
712
|
-
|
713
|
-
|
684
|
+
Dropdown.prototype.keydown = function (e) {
|
685
|
+
if (!/(38|40|27)/.test(e.keyCode)) return
|
714
686
|
|
715
|
-
|
687
|
+
var $this = $(this)
|
716
688
|
|
717
|
-
|
689
|
+
e.preventDefault()
|
690
|
+
e.stopPropagation()
|
718
691
|
|
719
|
-
|
692
|
+
if ($this.is('.disabled, :disabled')) return
|
720
693
|
|
721
|
-
|
722
|
-
|
723
|
-
return $this.click()
|
724
|
-
}
|
694
|
+
var $parent = getParent($this)
|
695
|
+
var isActive = $parent.hasClass('open')
|
725
696
|
|
726
|
-
|
697
|
+
if (!isActive || (isActive && e.keyCode == 27)) {
|
698
|
+
if (e.which == 27) $parent.find(toggle).focus()
|
699
|
+
return $this.click()
|
700
|
+
}
|
727
701
|
|
728
|
-
|
702
|
+
var desc = ' li:not(.divider):visible a'
|
703
|
+
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
|
729
704
|
|
730
|
-
|
705
|
+
if (!$items.length) return
|
731
706
|
|
732
|
-
|
733
|
-
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
734
|
-
if (!~index) index = 0
|
707
|
+
var index = $items.index($items.filter(':focus'))
|
735
708
|
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
}
|
709
|
+
if (e.keyCode == 38 && index > 0) index-- // up
|
710
|
+
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
711
|
+
if (!~index) index = 0
|
740
712
|
|
713
|
+
$items.eq(index).focus()
|
741
714
|
}
|
742
715
|
|
743
|
-
function clearMenus() {
|
744
|
-
$(
|
716
|
+
function clearMenus(e) {
|
717
|
+
$(backdrop).remove()
|
745
718
|
$(toggle).each(function () {
|
746
|
-
getParent($(this))
|
719
|
+
var $parent = getParent($(this))
|
720
|
+
var relatedTarget = { relatedTarget: this }
|
721
|
+
if (!$parent.hasClass('open')) return
|
722
|
+
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
723
|
+
if (e.isDefaultPrevented()) return
|
724
|
+
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
747
725
|
})
|
748
726
|
}
|
749
727
|
|
750
728
|
function getParent($this) {
|
751
729
|
var selector = $this.attr('data-target')
|
752
|
-
, $parent
|
753
730
|
|
754
731
|
if (!selector) {
|
755
732
|
selector = $this.attr('href')
|
756
|
-
selector = selector &&
|
733
|
+
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
757
734
|
}
|
758
735
|
|
759
|
-
$parent = selector && $(selector)
|
760
|
-
|
761
|
-
if (!$parent || !$parent.length) $parent = $this.parent()
|
736
|
+
var $parent = selector && $(selector)
|
762
737
|
|
763
|
-
return $parent
|
738
|
+
return $parent && $parent.length ? $parent : $this.parent()
|
764
739
|
}
|
765
740
|
|
766
741
|
|
767
|
-
|
768
|
-
|
742
|
+
// DROPDOWN PLUGIN DEFINITION
|
743
|
+
// ==========================
|
769
744
|
|
770
745
|
var old = $.fn.dropdown
|
771
746
|
|
772
747
|
$.fn.dropdown = function (option) {
|
773
748
|
return this.each(function () {
|
774
749
|
var $this = $(this)
|
775
|
-
|
776
|
-
|
750
|
+
var data = $this.data('bs.dropdown')
|
751
|
+
|
752
|
+
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
|
777
753
|
if (typeof option == 'string') data[option].call($this)
|
778
754
|
})
|
779
755
|
}
|
@@ -781,8 +757,8 @@
|
|
781
757
|
$.fn.dropdown.Constructor = Dropdown
|
782
758
|
|
783
759
|
|
784
|
-
|
785
|
-
|
760
|
+
// DROPDOWN NO CONFLICT
|
761
|
+
// ====================
|
786
762
|
|
787
763
|
$.fn.dropdown.noConflict = function () {
|
788
764
|
$.fn.dropdown = old
|
@@ -790,237 +766,230 @@
|
|
790
766
|
}
|
791
767
|
|
792
768
|
|
793
|
-
|
794
|
-
|
769
|
+
// APPLY TO STANDARD DROPDOWN ELEMENTS
|
770
|
+
// ===================================
|
795
771
|
|
796
772
|
$(document)
|
797
|
-
.on('click.dropdown.data-api', clearMenus)
|
798
|
-
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
799
|
-
.on('click.dropdown.data-api'
|
800
|
-
.on('keydown.dropdown.data-api', toggle + ', [role=menu]'
|
801
|
-
|
802
|
-
}(window.jQuery);
|
803
|
-
/* =========================================================
|
804
|
-
* bootstrap-modal.js v2.3.2
|
805
|
-
* http://getbootstrap.com/2.3.2/javascript.html#modals
|
806
|
-
* =========================================================
|
807
|
-
* Copyright 2013 Twitter, Inc.
|
808
|
-
*
|
809
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
810
|
-
* you may not use this file except in compliance with the License.
|
811
|
-
* You may obtain a copy of the License at
|
812
|
-
*
|
813
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
814
|
-
*
|
815
|
-
* Unless required by applicable law or agreed to in writing, software
|
816
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
817
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
818
|
-
* See the License for the specific language governing permissions and
|
819
|
-
* limitations under the License.
|
820
|
-
* ========================================================= */
|
821
|
-
|
822
|
-
|
823
|
-
!function ($) {
|
824
|
-
|
825
|
-
"use strict"; // jshint ;_;
|
826
|
-
|
827
|
-
|
828
|
-
/* MODAL CLASS DEFINITION
|
829
|
-
* ====================== */
|
773
|
+
.on('click.bs.dropdown.data-api', clearMenus)
|
774
|
+
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
775
|
+
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
776
|
+
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
|
830
777
|
|
831
|
-
|
832
|
-
this.options = options
|
833
|
-
this.$element = $(element)
|
834
|
-
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
|
835
|
-
this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
|
836
|
-
}
|
778
|
+
}(jQuery);
|
837
779
|
|
838
|
-
|
780
|
+
/* ========================================================================
|
781
|
+
* Bootstrap: modal.js v3.1.1
|
782
|
+
* http://getbootstrap.com/javascript/#modals
|
783
|
+
* ========================================================================
|
784
|
+
* Copyright 2011-2014 Twitter, Inc.
|
785
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
786
|
+
* ======================================================================== */
|
839
787
|
|
840
|
-
constructor: Modal
|
841
788
|
|
842
|
-
|
843
|
-
|
844
|
-
}
|
789
|
+
+function ($) {
|
790
|
+
'use strict';
|
845
791
|
|
846
|
-
|
847
|
-
|
848
|
-
, e = $.Event('show')
|
792
|
+
// MODAL CLASS DEFINITION
|
793
|
+
// ======================
|
849
794
|
|
850
|
-
|
795
|
+
var Modal = function (element, options) {
|
796
|
+
this.options = options
|
797
|
+
this.$element = $(element)
|
798
|
+
this.$backdrop =
|
799
|
+
this.isShown = null
|
851
800
|
|
852
|
-
|
801
|
+
if (this.options.remote) {
|
802
|
+
this.$element
|
803
|
+
.find('.modal-content')
|
804
|
+
.load(this.options.remote, $.proxy(function () {
|
805
|
+
this.$element.trigger('loaded.bs.modal')
|
806
|
+
}, this))
|
807
|
+
}
|
808
|
+
}
|
853
809
|
|
854
|
-
|
810
|
+
Modal.DEFAULTS = {
|
811
|
+
backdrop: true,
|
812
|
+
keyboard: true,
|
813
|
+
show: true
|
814
|
+
}
|
855
815
|
|
856
|
-
|
816
|
+
Modal.prototype.toggle = function (_relatedTarget) {
|
817
|
+
return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
|
818
|
+
}
|
857
819
|
|
858
|
-
|
859
|
-
|
820
|
+
Modal.prototype.show = function (_relatedTarget) {
|
821
|
+
var that = this
|
822
|
+
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
|
860
823
|
|
861
|
-
|
862
|
-
that.$element.appendTo(document.body) //don't move modals dom position
|
863
|
-
}
|
824
|
+
this.$element.trigger(e)
|
864
825
|
|
865
|
-
|
826
|
+
if (this.isShown || e.isDefaultPrevented()) return
|
866
827
|
|
867
|
-
|
868
|
-
that.$element[0].offsetWidth // force reflow
|
869
|
-
}
|
828
|
+
this.isShown = true
|
870
829
|
|
871
|
-
|
872
|
-
.addClass('in')
|
873
|
-
.attr('aria-hidden', false)
|
830
|
+
this.escape()
|
874
831
|
|
875
|
-
|
832
|
+
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
|
876
833
|
|
877
|
-
|
878
|
-
|
879
|
-
that.$element.focus().trigger('shown')
|
834
|
+
this.backdrop(function () {
|
835
|
+
var transition = $.support.transition && that.$element.hasClass('fade')
|
880
836
|
|
881
|
-
|
837
|
+
if (!that.$element.parent().length) {
|
838
|
+
that.$element.appendTo(document.body) // don't move modals dom position
|
882
839
|
}
|
883
840
|
|
884
|
-
|
885
|
-
|
841
|
+
that.$element
|
842
|
+
.show()
|
843
|
+
.scrollTop(0)
|
886
844
|
|
887
|
-
|
845
|
+
if (transition) {
|
846
|
+
that.$element[0].offsetWidth // force reflow
|
847
|
+
}
|
888
848
|
|
889
|
-
|
849
|
+
that.$element
|
850
|
+
.addClass('in')
|
851
|
+
.attr('aria-hidden', false)
|
890
852
|
|
891
|
-
|
853
|
+
that.enforceFocus()
|
892
854
|
|
893
|
-
|
855
|
+
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
|
894
856
|
|
895
|
-
|
857
|
+
transition ?
|
858
|
+
that.$element.find('.modal-dialog') // wait for modal to slide in
|
859
|
+
.one($.support.transition.end, function () {
|
860
|
+
that.$element.focus().trigger(e)
|
861
|
+
})
|
862
|
+
.emulateTransitionEnd(300) :
|
863
|
+
that.$element.focus().trigger(e)
|
864
|
+
})
|
865
|
+
}
|
896
866
|
|
897
|
-
|
867
|
+
Modal.prototype.hide = function (e) {
|
868
|
+
if (e) e.preventDefault()
|
898
869
|
|
899
|
-
|
870
|
+
e = $.Event('hide.bs.modal')
|
900
871
|
|
901
|
-
|
902
|
-
.removeClass('in')
|
903
|
-
.attr('aria-hidden', true)
|
872
|
+
this.$element.trigger(e)
|
904
873
|
|
905
|
-
|
906
|
-
this.hideWithTransition() :
|
907
|
-
this.hideModal()
|
908
|
-
}
|
874
|
+
if (!this.isShown || e.isDefaultPrevented()) return
|
909
875
|
|
910
|
-
|
911
|
-
var that = this
|
912
|
-
$(document).on('focusin.modal', function (e) {
|
913
|
-
if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
|
914
|
-
that.$element.focus()
|
915
|
-
}
|
916
|
-
})
|
917
|
-
}
|
876
|
+
this.isShown = false
|
918
877
|
|
919
|
-
|
920
|
-
var that = this
|
921
|
-
if (this.isShown && this.options.keyboard) {
|
922
|
-
this.$element.on('keyup.dismiss.modal', function ( e ) {
|
923
|
-
e.which == 27 && that.hide()
|
924
|
-
})
|
925
|
-
} else if (!this.isShown) {
|
926
|
-
this.$element.off('keyup.dismiss.modal')
|
927
|
-
}
|
928
|
-
}
|
878
|
+
this.escape()
|
929
879
|
|
930
|
-
|
931
|
-
var that = this
|
932
|
-
, timeout = setTimeout(function () {
|
933
|
-
that.$element.off($.support.transition.end)
|
934
|
-
that.hideModal()
|
935
|
-
}, 500)
|
880
|
+
$(document).off('focusin.bs.modal')
|
936
881
|
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
}
|
882
|
+
this.$element
|
883
|
+
.removeClass('in')
|
884
|
+
.attr('aria-hidden', true)
|
885
|
+
.off('click.dismiss.bs.modal')
|
942
886
|
|
943
|
-
|
944
|
-
|
945
|
-
this
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
})
|
950
|
-
}
|
887
|
+
$.support.transition && this.$element.hasClass('fade') ?
|
888
|
+
this.$element
|
889
|
+
.one($.support.transition.end, $.proxy(this.hideModal, this))
|
890
|
+
.emulateTransitionEnd(300) :
|
891
|
+
this.hideModal()
|
892
|
+
}
|
951
893
|
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
894
|
+
Modal.prototype.enforceFocus = function () {
|
895
|
+
$(document)
|
896
|
+
.off('focusin.bs.modal') // guard against infinite focus loop
|
897
|
+
.on('focusin.bs.modal', $.proxy(function (e) {
|
898
|
+
if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
|
899
|
+
this.$element.focus()
|
900
|
+
}
|
901
|
+
}, this))
|
902
|
+
}
|
956
903
|
|
957
|
-
|
958
|
-
|
959
|
-
|
904
|
+
Modal.prototype.escape = function () {
|
905
|
+
if (this.isShown && this.options.keyboard) {
|
906
|
+
this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
|
907
|
+
e.which == 27 && this.hide()
|
908
|
+
}, this))
|
909
|
+
} else if (!this.isShown) {
|
910
|
+
this.$element.off('keyup.dismiss.bs.modal')
|
911
|
+
}
|
912
|
+
}
|
960
913
|
|
961
|
-
|
962
|
-
|
914
|
+
Modal.prototype.hideModal = function () {
|
915
|
+
var that = this
|
916
|
+
this.$element.hide()
|
917
|
+
this.backdrop(function () {
|
918
|
+
that.removeBackdrop()
|
919
|
+
that.$element.trigger('hidden.bs.modal')
|
920
|
+
})
|
921
|
+
}
|
963
922
|
|
964
|
-
|
965
|
-
|
923
|
+
Modal.prototype.removeBackdrop = function () {
|
924
|
+
this.$backdrop && this.$backdrop.remove()
|
925
|
+
this.$backdrop = null
|
926
|
+
}
|
966
927
|
|
967
|
-
|
968
|
-
|
969
|
-
$.proxy(this.$element[0].focus, this.$element[0])
|
970
|
-
: $.proxy(this.hide, this)
|
971
|
-
)
|
928
|
+
Modal.prototype.backdrop = function (callback) {
|
929
|
+
var animate = this.$element.hasClass('fade') ? 'fade' : ''
|
972
930
|
|
973
|
-
|
931
|
+
if (this.isShown && this.options.backdrop) {
|
932
|
+
var doAnimate = $.support.transition && animate
|
974
933
|
|
975
|
-
|
934
|
+
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
|
935
|
+
.appendTo(document.body)
|
976
936
|
|
977
|
-
|
937
|
+
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
|
938
|
+
if (e.target !== e.currentTarget) return
|
939
|
+
this.options.backdrop == 'static'
|
940
|
+
? this.$element[0].focus.call(this.$element[0])
|
941
|
+
: this.hide.call(this)
|
942
|
+
}, this))
|
978
943
|
|
979
|
-
|
980
|
-
this.$backdrop.one($.support.transition.end, callback) :
|
981
|
-
callback()
|
944
|
+
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
|
982
945
|
|
983
|
-
|
984
|
-
this.$backdrop.removeClass('in')
|
946
|
+
this.$backdrop.addClass('in')
|
985
947
|
|
986
|
-
|
987
|
-
this.$backdrop.one($.support.transition.end, callback) :
|
988
|
-
callback()
|
948
|
+
if (!callback) return
|
989
949
|
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
950
|
+
doAnimate ?
|
951
|
+
this.$backdrop
|
952
|
+
.one($.support.transition.end, callback)
|
953
|
+
.emulateTransitionEnd(150) :
|
954
|
+
callback()
|
955
|
+
|
956
|
+
} else if (!this.isShown && this.$backdrop) {
|
957
|
+
this.$backdrop.removeClass('in')
|
958
|
+
|
959
|
+
$.support.transition && this.$element.hasClass('fade') ?
|
960
|
+
this.$backdrop
|
961
|
+
.one($.support.transition.end, callback)
|
962
|
+
.emulateTransitionEnd(150) :
|
963
|
+
callback()
|
964
|
+
|
965
|
+
} else if (callback) {
|
966
|
+
callback()
|
967
|
+
}
|
994
968
|
}
|
995
969
|
|
996
970
|
|
997
|
-
|
998
|
-
|
971
|
+
// MODAL PLUGIN DEFINITION
|
972
|
+
// =======================
|
999
973
|
|
1000
974
|
var old = $.fn.modal
|
1001
975
|
|
1002
|
-
$.fn.modal = function (option) {
|
976
|
+
$.fn.modal = function (option, _relatedTarget) {
|
1003
977
|
return this.each(function () {
|
1004
|
-
var $this
|
1005
|
-
|
1006
|
-
|
1007
|
-
if (!data) $this.data('modal', (data = new Modal(this, options)))
|
1008
|
-
if (typeof option == 'string') data[option]()
|
1009
|
-
else if (options.show) data.show()
|
1010
|
-
})
|
1011
|
-
}
|
978
|
+
var $this = $(this)
|
979
|
+
var data = $this.data('bs.modal')
|
980
|
+
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
1012
981
|
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
982
|
+
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
|
983
|
+
if (typeof option == 'string') data[option](_relatedTarget)
|
984
|
+
else if (options.show) data.show(_relatedTarget)
|
985
|
+
})
|
1017
986
|
}
|
1018
987
|
|
1019
988
|
$.fn.modal.Constructor = Modal
|
1020
989
|
|
1021
990
|
|
1022
|
-
|
1023
|
-
|
991
|
+
// MODAL NO CONFLICT
|
992
|
+
// =================
|
1024
993
|
|
1025
994
|
$.fn.modal.noConflict = function () {
|
1026
995
|
$.fn.modal = old
|
@@ -1028,644 +997,676 @@
|
|
1028
997
|
}
|
1029
998
|
|
1030
999
|
|
1031
|
-
|
1032
|
-
|
1000
|
+
// MODAL DATA-API
|
1001
|
+
// ==============
|
1033
1002
|
|
1034
|
-
$(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
|
1035
|
-
var $this
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1003
|
+
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
|
1004
|
+
var $this = $(this)
|
1005
|
+
var href = $this.attr('href')
|
1006
|
+
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
|
1007
|
+
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
|
1039
1008
|
|
1040
|
-
e.preventDefault()
|
1009
|
+
if ($this.is('a')) e.preventDefault()
|
1041
1010
|
|
1042
1011
|
$target
|
1043
|
-
.modal(option)
|
1012
|
+
.modal(option, this)
|
1044
1013
|
.one('hide', function () {
|
1045
|
-
$this.focus()
|
1014
|
+
$this.is(':visible') && $this.focus()
|
1046
1015
|
})
|
1047
1016
|
})
|
1048
1017
|
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
* http://getbootstrap.com/2.3.2/javascript.html#tooltips
|
1053
|
-
* Inspired by the original jQuery.tipsy by Jason Frame
|
1054
|
-
* ===========================================================
|
1055
|
-
* Copyright 2013 Twitter, Inc.
|
1056
|
-
*
|
1057
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
1058
|
-
* you may not use this file except in compliance with the License.
|
1059
|
-
* You may obtain a copy of the License at
|
1060
|
-
*
|
1061
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
1062
|
-
*
|
1063
|
-
* Unless required by applicable law or agreed to in writing, software
|
1064
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
1065
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1066
|
-
* See the License for the specific language governing permissions and
|
1067
|
-
* limitations under the License.
|
1068
|
-
* ========================================================== */
|
1018
|
+
$(document)
|
1019
|
+
.on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
|
1020
|
+
.on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
|
1069
1021
|
|
1022
|
+
}(jQuery);
|
1070
1023
|
|
1071
|
-
|
1024
|
+
/* ========================================================================
|
1025
|
+
* Bootstrap: tooltip.js v3.1.1
|
1026
|
+
* http://getbootstrap.com/javascript/#tooltip
|
1027
|
+
* Inspired by the original jQuery.tipsy by Jason Frame
|
1028
|
+
* ========================================================================
|
1029
|
+
* Copyright 2011-2014 Twitter, Inc.
|
1030
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1031
|
+
* ======================================================================== */
|
1072
1032
|
|
1073
|
-
"use strict"; // jshint ;_;
|
1074
1033
|
|
1034
|
+
+function ($) {
|
1035
|
+
'use strict';
|
1075
1036
|
|
1076
|
-
|
1077
|
-
|
1037
|
+
// TOOLTIP PUBLIC CLASS DEFINITION
|
1038
|
+
// ===============================
|
1078
1039
|
|
1079
1040
|
var Tooltip = function (element, options) {
|
1041
|
+
this.type =
|
1042
|
+
this.options =
|
1043
|
+
this.enabled =
|
1044
|
+
this.timeout =
|
1045
|
+
this.hoverState =
|
1046
|
+
this.$element = null
|
1047
|
+
|
1080
1048
|
this.init('tooltip', element, options)
|
1081
1049
|
}
|
1082
1050
|
|
1083
|
-
Tooltip.
|
1051
|
+
Tooltip.DEFAULTS = {
|
1052
|
+
animation: true,
|
1053
|
+
placement: 'top',
|
1054
|
+
selector: false,
|
1055
|
+
template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
1056
|
+
trigger: 'hover focus',
|
1057
|
+
title: '',
|
1058
|
+
delay: 0,
|
1059
|
+
html: false,
|
1060
|
+
container: false
|
1061
|
+
}
|
1084
1062
|
|
1085
|
-
|
1063
|
+
Tooltip.prototype.init = function (type, element, options) {
|
1064
|
+
this.enabled = true
|
1065
|
+
this.type = type
|
1066
|
+
this.$element = $(element)
|
1067
|
+
this.options = this.getOptions(options)
|
1086
1068
|
|
1087
|
-
|
1088
|
-
var eventIn
|
1089
|
-
, eventOut
|
1090
|
-
, triggers
|
1091
|
-
, trigger
|
1092
|
-
, i
|
1069
|
+
var triggers = this.options.trigger.split(' ')
|
1093
1070
|
|
1094
|
-
|
1095
|
-
|
1096
|
-
this.options = this.getOptions(options)
|
1097
|
-
this.enabled = true
|
1071
|
+
for (var i = triggers.length; i--;) {
|
1072
|
+
var trigger = triggers[i]
|
1098
1073
|
|
1099
|
-
|
1074
|
+
if (trigger == 'click') {
|
1075
|
+
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
1076
|
+
} else if (trigger != 'manual') {
|
1077
|
+
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
|
1078
|
+
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
|
1100
1079
|
|
1101
|
-
|
1102
|
-
|
1103
|
-
if (trigger == 'click') {
|
1104
|
-
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
1105
|
-
} else if (trigger != 'manual') {
|
1106
|
-
eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
|
1107
|
-
eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
|
1108
|
-
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
1109
|
-
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
1110
|
-
}
|
1080
|
+
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
1081
|
+
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
1111
1082
|
}
|
1112
|
-
|
1113
|
-
this.options.selector ?
|
1114
|
-
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
1115
|
-
this.fixTitle()
|
1116
1083
|
}
|
1117
1084
|
|
1118
|
-
|
1119
|
-
|
1085
|
+
this.options.selector ?
|
1086
|
+
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
1087
|
+
this.fixTitle()
|
1088
|
+
}
|
1120
1089
|
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
, hide: options.delay
|
1125
|
-
}
|
1126
|
-
}
|
1090
|
+
Tooltip.prototype.getDefaults = function () {
|
1091
|
+
return Tooltip.DEFAULTS
|
1092
|
+
}
|
1127
1093
|
|
1128
|
-
|
1094
|
+
Tooltip.prototype.getOptions = function (options) {
|
1095
|
+
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
1096
|
+
|
1097
|
+
if (options.delay && typeof options.delay == 'number') {
|
1098
|
+
options.delay = {
|
1099
|
+
show: options.delay,
|
1100
|
+
hide: options.delay
|
1101
|
+
}
|
1129
1102
|
}
|
1130
1103
|
|
1131
|
-
|
1132
|
-
|
1133
|
-
, options = {}
|
1134
|
-
, self
|
1104
|
+
return options
|
1105
|
+
}
|
1135
1106
|
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1107
|
+
Tooltip.prototype.getDelegateOptions = function () {
|
1108
|
+
var options = {}
|
1109
|
+
var defaults = this.getDefaults()
|
1139
1110
|
|
1140
|
-
|
1111
|
+
this._options && $.each(this._options, function (key, value) {
|
1112
|
+
if (defaults[key] != value) options[key] = value
|
1113
|
+
})
|
1141
1114
|
|
1142
|
-
|
1115
|
+
return options
|
1116
|
+
}
|
1143
1117
|
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
if (self.hoverState == 'in') self.show()
|
1148
|
-
}, self.options.delay.show)
|
1149
|
-
}
|
1118
|
+
Tooltip.prototype.enter = function (obj) {
|
1119
|
+
var self = obj instanceof this.constructor ?
|
1120
|
+
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
1150
1121
|
|
1151
|
-
|
1152
|
-
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
1122
|
+
clearTimeout(self.timeout)
|
1153
1123
|
|
1154
|
-
|
1155
|
-
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
1124
|
+
self.hoverState = 'in'
|
1156
1125
|
|
1157
|
-
|
1158
|
-
this.timeout = setTimeout(function() {
|
1159
|
-
if (self.hoverState == 'out') self.hide()
|
1160
|
-
}, self.options.delay.hide)
|
1161
|
-
}
|
1126
|
+
if (!self.options.delay || !self.options.delay.show) return self.show()
|
1162
1127
|
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
, actualHeight
|
1168
|
-
, placement
|
1169
|
-
, tp
|
1170
|
-
, e = $.Event('show')
|
1171
|
-
|
1172
|
-
if (this.hasContent() && this.enabled) {
|
1173
|
-
this.$element.trigger(e)
|
1174
|
-
if (e.isDefaultPrevented()) return
|
1175
|
-
$tip = this.tip()
|
1176
|
-
this.setContent()
|
1177
|
-
|
1178
|
-
if (this.options.animation) {
|
1179
|
-
$tip.addClass('fade')
|
1180
|
-
}
|
1128
|
+
self.timeout = setTimeout(function () {
|
1129
|
+
if (self.hoverState == 'in') self.show()
|
1130
|
+
}, self.options.delay.show)
|
1131
|
+
}
|
1181
1132
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1133
|
+
Tooltip.prototype.leave = function (obj) {
|
1134
|
+
var self = obj instanceof this.constructor ?
|
1135
|
+
obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
|
1185
1136
|
|
1186
|
-
|
1187
|
-
.detach()
|
1188
|
-
.css({ top: 0, left: 0, display: 'block' })
|
1137
|
+
clearTimeout(self.timeout)
|
1189
1138
|
|
1190
|
-
|
1139
|
+
self.hoverState = 'out'
|
1191
1140
|
|
1192
|
-
|
1141
|
+
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
1193
1142
|
|
1194
|
-
|
1195
|
-
|
1143
|
+
self.timeout = setTimeout(function () {
|
1144
|
+
if (self.hoverState == 'out') self.hide()
|
1145
|
+
}, self.options.delay.hide)
|
1146
|
+
}
|
1196
1147
|
|
1197
|
-
|
1198
|
-
|
1199
|
-
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
|
1200
|
-
break
|
1201
|
-
case 'top':
|
1202
|
-
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
|
1203
|
-
break
|
1204
|
-
case 'left':
|
1205
|
-
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
|
1206
|
-
break
|
1207
|
-
case 'right':
|
1208
|
-
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
|
1209
|
-
break
|
1210
|
-
}
|
1148
|
+
Tooltip.prototype.show = function () {
|
1149
|
+
var e = $.Event('show.bs.' + this.type)
|
1211
1150
|
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1151
|
+
if (this.hasContent() && this.enabled) {
|
1152
|
+
this.$element.trigger(e)
|
1153
|
+
|
1154
|
+
if (e.isDefaultPrevented()) return
|
1155
|
+
var that = this;
|
1216
1156
|
|
1217
|
-
, applyPlacement: function(offset, placement){
|
1218
1157
|
var $tip = this.tip()
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1158
|
+
|
1159
|
+
this.setContent()
|
1160
|
+
|
1161
|
+
if (this.options.animation) $tip.addClass('fade')
|
1162
|
+
|
1163
|
+
var placement = typeof this.options.placement == 'function' ?
|
1164
|
+
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
1165
|
+
this.options.placement
|
1166
|
+
|
1167
|
+
var autoToken = /\s?auto?\s?/i
|
1168
|
+
var autoPlace = autoToken.test(placement)
|
1169
|
+
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
|
1225
1170
|
|
1226
1171
|
$tip
|
1227
|
-
.
|
1172
|
+
.detach()
|
1173
|
+
.css({ top: 0, left: 0, display: 'block' })
|
1228
1174
|
.addClass(placement)
|
1229
|
-
.addClass('in')
|
1230
1175
|
|
1231
|
-
|
1232
|
-
|
1176
|
+
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
1177
|
+
|
1178
|
+
var pos = this.getPosition()
|
1179
|
+
var actualWidth = $tip[0].offsetWidth
|
1180
|
+
var actualHeight = $tip[0].offsetHeight
|
1181
|
+
|
1182
|
+
if (autoPlace) {
|
1183
|
+
var $parent = this.$element.parent()
|
1184
|
+
|
1185
|
+
var orgPlacement = placement
|
1186
|
+
var docScroll = document.documentElement.scrollTop || document.body.scrollTop
|
1187
|
+
var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
|
1188
|
+
var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
|
1189
|
+
var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
|
1190
|
+
|
1191
|
+
placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
|
1192
|
+
placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
|
1193
|
+
placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
|
1194
|
+
placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
|
1195
|
+
placement
|
1233
1196
|
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1197
|
+
$tip
|
1198
|
+
.removeClass(orgPlacement)
|
1199
|
+
.addClass(placement)
|
1237
1200
|
}
|
1238
1201
|
|
1239
|
-
|
1240
|
-
delta = 0
|
1202
|
+
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
1241
1203
|
|
1242
|
-
|
1243
|
-
|
1244
|
-
offset.left = 0
|
1245
|
-
$tip.offset(offset)
|
1246
|
-
actualWidth = $tip[0].offsetWidth
|
1247
|
-
actualHeight = $tip[0].offsetHeight
|
1248
|
-
}
|
1204
|
+
this.applyPlacement(calculatedOffset, placement)
|
1205
|
+
this.hoverState = null
|
1249
1206
|
|
1250
|
-
|
1251
|
-
|
1252
|
-
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
1207
|
+
var complete = function() {
|
1208
|
+
that.$element.trigger('shown.bs.' + that.type)
|
1253
1209
|
}
|
1254
1210
|
|
1255
|
-
|
1211
|
+
$.support.transition && this.$tip.hasClass('fade') ?
|
1212
|
+
$tip
|
1213
|
+
.one($.support.transition.end, complete)
|
1214
|
+
.emulateTransitionEnd(150) :
|
1215
|
+
complete()
|
1256
1216
|
}
|
1217
|
+
}
|
1257
1218
|
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1219
|
+
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
1220
|
+
var replace
|
1221
|
+
var $tip = this.tip()
|
1222
|
+
var width = $tip[0].offsetWidth
|
1223
|
+
var height = $tip[0].offsetHeight
|
1224
|
+
|
1225
|
+
// manually read margins because getBoundingClientRect includes difference
|
1226
|
+
var marginTop = parseInt($tip.css('margin-top'), 10)
|
1227
|
+
var marginLeft = parseInt($tip.css('margin-left'), 10)
|
1228
|
+
|
1229
|
+
// we must check for NaN for ie 8/9
|
1230
|
+
if (isNaN(marginTop)) marginTop = 0
|
1231
|
+
if (isNaN(marginLeft)) marginLeft = 0
|
1232
|
+
|
1233
|
+
offset.top = offset.top + marginTop
|
1234
|
+
offset.left = offset.left + marginLeft
|
1235
|
+
|
1236
|
+
// $.fn.offset doesn't round pixel values
|
1237
|
+
// so we use setOffset directly with our own function B-0
|
1238
|
+
$.offset.setOffset($tip[0], $.extend({
|
1239
|
+
using: function (props) {
|
1240
|
+
$tip.css({
|
1241
|
+
top: Math.round(props.top),
|
1242
|
+
left: Math.round(props.left)
|
1243
|
+
})
|
1244
|
+
}
|
1245
|
+
}, offset), 0)
|
1263
1246
|
|
1264
|
-
|
1265
|
-
var $tip = this.tip()
|
1266
|
-
, title = this.getTitle()
|
1247
|
+
$tip.addClass('in')
|
1267
1248
|
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1249
|
+
// check to see if placing tip in new offset caused the tip to resize itself
|
1250
|
+
var actualWidth = $tip[0].offsetWidth
|
1251
|
+
var actualHeight = $tip[0].offsetHeight
|
1271
1252
|
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1253
|
+
if (placement == 'top' && actualHeight != height) {
|
1254
|
+
replace = true
|
1255
|
+
offset.top = offset.top + height - actualHeight
|
1256
|
+
}
|
1276
1257
|
|
1277
|
-
|
1278
|
-
|
1258
|
+
if (/bottom|top/.test(placement)) {
|
1259
|
+
var delta = 0
|
1279
1260
|
|
1280
|
-
|
1261
|
+
if (offset.left < 0) {
|
1262
|
+
delta = offset.left * -2
|
1263
|
+
offset.left = 0
|
1281
1264
|
|
1282
|
-
|
1283
|
-
var timeout = setTimeout(function () {
|
1284
|
-
$tip.off($.support.transition.end).detach()
|
1285
|
-
}, 500)
|
1265
|
+
$tip.offset(offset)
|
1286
1266
|
|
1287
|
-
$tip.
|
1288
|
-
|
1289
|
-
$tip.detach()
|
1290
|
-
})
|
1267
|
+
actualWidth = $tip[0].offsetWidth
|
1268
|
+
actualHeight = $tip[0].offsetHeight
|
1291
1269
|
}
|
1292
1270
|
|
1293
|
-
|
1294
|
-
|
1295
|
-
|
1271
|
+
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
|
1272
|
+
} else {
|
1273
|
+
this.replaceArrow(actualHeight - height, actualHeight, 'top')
|
1274
|
+
}
|
1296
1275
|
|
1297
|
-
|
1276
|
+
if (replace) $tip.offset(offset)
|
1277
|
+
}
|
1298
1278
|
|
1299
|
-
|
1300
|
-
|
1279
|
+
Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
|
1280
|
+
this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
|
1281
|
+
}
|
1301
1282
|
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
1306
|
-
}
|
1307
|
-
}
|
1283
|
+
Tooltip.prototype.setContent = function () {
|
1284
|
+
var $tip = this.tip()
|
1285
|
+
var title = this.getTitle()
|
1308
1286
|
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1287
|
+
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
1288
|
+
$tip.removeClass('fade in top bottom left right')
|
1289
|
+
}
|
1312
1290
|
|
1313
|
-
|
1314
|
-
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1318
|
-
|
1291
|
+
Tooltip.prototype.hide = function () {
|
1292
|
+
var that = this
|
1293
|
+
var $tip = this.tip()
|
1294
|
+
var e = $.Event('hide.bs.' + this.type)
|
1295
|
+
|
1296
|
+
function complete() {
|
1297
|
+
if (that.hoverState != 'in') $tip.detach()
|
1298
|
+
that.$element.trigger('hidden.bs.' + that.type)
|
1319
1299
|
}
|
1320
1300
|
|
1321
|
-
|
1322
|
-
var title
|
1323
|
-
, $e = this.$element
|
1324
|
-
, o = this.options
|
1301
|
+
this.$element.trigger(e)
|
1325
1302
|
|
1326
|
-
|
1327
|
-
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
1303
|
+
if (e.isDefaultPrevented()) return
|
1328
1304
|
|
1329
|
-
|
1330
|
-
}
|
1305
|
+
$tip.removeClass('in')
|
1331
1306
|
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1307
|
+
$.support.transition && this.$tip.hasClass('fade') ?
|
1308
|
+
$tip
|
1309
|
+
.one($.support.transition.end, complete)
|
1310
|
+
.emulateTransitionEnd(150) :
|
1311
|
+
complete()
|
1335
1312
|
|
1336
|
-
|
1337
|
-
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
|
1338
|
-
}
|
1313
|
+
this.hoverState = null
|
1339
1314
|
|
1340
|
-
|
1341
|
-
|
1342
|
-
this.hide()
|
1343
|
-
this.$element = null
|
1344
|
-
this.options = null
|
1345
|
-
}
|
1346
|
-
}
|
1315
|
+
return this
|
1316
|
+
}
|
1347
1317
|
|
1348
|
-
|
1349
|
-
|
1318
|
+
Tooltip.prototype.fixTitle = function () {
|
1319
|
+
var $e = this.$element
|
1320
|
+
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
1321
|
+
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
1350
1322
|
}
|
1323
|
+
}
|
1351
1324
|
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
1325
|
+
Tooltip.prototype.hasContent = function () {
|
1326
|
+
return this.getTitle()
|
1327
|
+
}
|
1355
1328
|
|
1356
|
-
|
1357
|
-
|
1358
|
-
}
|
1329
|
+
Tooltip.prototype.getPosition = function () {
|
1330
|
+
var el = this.$element[0]
|
1331
|
+
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
|
1332
|
+
width: el.offsetWidth,
|
1333
|
+
height: el.offsetHeight
|
1334
|
+
}, this.$element.offset())
|
1335
|
+
}
|
1359
1336
|
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1337
|
+
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
1338
|
+
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
1339
|
+
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
1340
|
+
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
1341
|
+
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
1342
|
+
}
|
1343
|
+
|
1344
|
+
Tooltip.prototype.getTitle = function () {
|
1345
|
+
var title
|
1346
|
+
var $e = this.$element
|
1347
|
+
var o = this.options
|
1364
1348
|
|
1365
|
-
|
1366
|
-
|
1349
|
+
title = $e.attr('data-original-title')
|
1350
|
+
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
1351
|
+
|
1352
|
+
return title
|
1353
|
+
}
|
1354
|
+
|
1355
|
+
Tooltip.prototype.tip = function () {
|
1356
|
+
return this.$tip = this.$tip || $(this.options.template)
|
1357
|
+
}
|
1358
|
+
|
1359
|
+
Tooltip.prototype.arrow = function () {
|
1360
|
+
return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
|
1361
|
+
}
|
1362
|
+
|
1363
|
+
Tooltip.prototype.validate = function () {
|
1364
|
+
if (!this.$element[0].parentNode) {
|
1365
|
+
this.hide()
|
1366
|
+
this.$element = null
|
1367
|
+
this.options = null
|
1367
1368
|
}
|
1369
|
+
}
|
1370
|
+
|
1371
|
+
Tooltip.prototype.enable = function () {
|
1372
|
+
this.enabled = true
|
1373
|
+
}
|
1374
|
+
|
1375
|
+
Tooltip.prototype.disable = function () {
|
1376
|
+
this.enabled = false
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
Tooltip.prototype.toggleEnabled = function () {
|
1380
|
+
this.enabled = !this.enabled
|
1381
|
+
}
|
1382
|
+
|
1383
|
+
Tooltip.prototype.toggle = function (e) {
|
1384
|
+
var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
|
1385
|
+
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
1386
|
+
}
|
1368
1387
|
|
1388
|
+
Tooltip.prototype.destroy = function () {
|
1389
|
+
clearTimeout(this.timeout)
|
1390
|
+
this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
|
1369
1391
|
}
|
1370
1392
|
|
1371
1393
|
|
1372
|
-
|
1373
|
-
|
1394
|
+
// TOOLTIP PLUGIN DEFINITION
|
1395
|
+
// =========================
|
1374
1396
|
|
1375
1397
|
var old = $.fn.tooltip
|
1376
1398
|
|
1377
|
-
$.fn.tooltip = function (
|
1399
|
+
$.fn.tooltip = function (option) {
|
1378
1400
|
return this.each(function () {
|
1379
|
-
var $this
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1401
|
+
var $this = $(this)
|
1402
|
+
var data = $this.data('bs.tooltip')
|
1403
|
+
var options = typeof option == 'object' && option
|
1404
|
+
|
1405
|
+
if (!data && option == 'destroy') return
|
1406
|
+
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
1383
1407
|
if (typeof option == 'string') data[option]()
|
1384
1408
|
})
|
1385
1409
|
}
|
1386
1410
|
|
1387
1411
|
$.fn.tooltip.Constructor = Tooltip
|
1388
1412
|
|
1389
|
-
$.fn.tooltip.defaults = {
|
1390
|
-
animation: true
|
1391
|
-
, placement: 'top'
|
1392
|
-
, selector: false
|
1393
|
-
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
|
1394
|
-
, trigger: 'hover focus'
|
1395
|
-
, title: ''
|
1396
|
-
, delay: 0
|
1397
|
-
, html: false
|
1398
|
-
, container: false
|
1399
|
-
}
|
1400
|
-
|
1401
1413
|
|
1402
|
-
|
1403
|
-
|
1414
|
+
// TOOLTIP NO CONFLICT
|
1415
|
+
// ===================
|
1404
1416
|
|
1405
1417
|
$.fn.tooltip.noConflict = function () {
|
1406
1418
|
$.fn.tooltip = old
|
1407
1419
|
return this
|
1408
1420
|
}
|
1409
1421
|
|
1410
|
-
}(
|
1411
|
-
/* ===========================================================
|
1412
|
-
* bootstrap-popover.js v2.3.2
|
1413
|
-
* http://getbootstrap.com/2.3.2/javascript.html#popovers
|
1414
|
-
* ===========================================================
|
1415
|
-
* Copyright 2013 Twitter, Inc.
|
1416
|
-
*
|
1417
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
1418
|
-
* you may not use this file except in compliance with the License.
|
1419
|
-
* You may obtain a copy of the License at
|
1420
|
-
*
|
1421
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
1422
|
-
*
|
1423
|
-
* Unless required by applicable law or agreed to in writing, software
|
1424
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
1425
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1426
|
-
* See the License for the specific language governing permissions and
|
1427
|
-
* limitations under the License.
|
1428
|
-
* =========================================================== */
|
1429
|
-
|
1422
|
+
}(jQuery);
|
1430
1423
|
|
1431
|
-
|
1424
|
+
/* ========================================================================
|
1425
|
+
* Bootstrap: popover.js v3.1.1
|
1426
|
+
* http://getbootstrap.com/javascript/#popovers
|
1427
|
+
* ========================================================================
|
1428
|
+
* Copyright 2011-2014 Twitter, Inc.
|
1429
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1430
|
+
* ======================================================================== */
|
1432
1431
|
|
1433
|
-
"use strict"; // jshint ;_;
|
1434
1432
|
|
1433
|
+
+function ($) {
|
1434
|
+
'use strict';
|
1435
1435
|
|
1436
|
-
|
1437
|
-
|
1436
|
+
// POPOVER PUBLIC CLASS DEFINITION
|
1437
|
+
// ===============================
|
1438
1438
|
|
1439
1439
|
var Popover = function (element, options) {
|
1440
1440
|
this.init('popover', element, options)
|
1441
1441
|
}
|
1442
1442
|
|
1443
|
+
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
1443
1444
|
|
1444
|
-
|
1445
|
-
|
1445
|
+
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
1446
|
+
placement: 'right',
|
1447
|
+
trigger: 'click',
|
1448
|
+
content: '',
|
1449
|
+
template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
1450
|
+
})
|
1446
1451
|
|
1447
|
-
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
|
1448
1452
|
|
1449
|
-
|
1453
|
+
// NOTE: POPOVER EXTENDS tooltip.js
|
1454
|
+
// ================================
|
1450
1455
|
|
1451
|
-
|
1452
|
-
var $tip = this.tip()
|
1453
|
-
, title = this.getTitle()
|
1454
|
-
, content = this.getContent()
|
1456
|
+
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
|
1455
1457
|
|
1456
|
-
|
1457
|
-
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
|
1458
|
+
Popover.prototype.constructor = Popover
|
1458
1459
|
|
1459
|
-
|
1460
|
-
|
1460
|
+
Popover.prototype.getDefaults = function () {
|
1461
|
+
return Popover.DEFAULTS
|
1462
|
+
}
|
1461
1463
|
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1464
|
+
Popover.prototype.setContent = function () {
|
1465
|
+
var $tip = this.tip()
|
1466
|
+
var title = this.getTitle()
|
1467
|
+
var content = this.getContent()
|
1465
1468
|
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
|
1469
|
+
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
|
1470
|
+
$tip.find('.popover-content')[ // we use append for html objects to maintain js events
|
1471
|
+
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
|
1472
|
+
](content)
|
1470
1473
|
|
1471
|
-
|
1472
|
-
|| $e.attr('data-content')
|
1474
|
+
$tip.removeClass('fade top bottom left right in')
|
1473
1475
|
|
1474
|
-
|
1475
|
-
|
1476
|
+
// IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
|
1477
|
+
// this manually by checking the contents.
|
1478
|
+
if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
|
1479
|
+
}
|
1476
1480
|
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1480
|
-
}
|
1481
|
-
return this.$tip
|
1482
|
-
}
|
1481
|
+
Popover.prototype.hasContent = function () {
|
1482
|
+
return this.getTitle() || this.getContent()
|
1483
|
+
}
|
1483
1484
|
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1485
|
+
Popover.prototype.getContent = function () {
|
1486
|
+
var $e = this.$element
|
1487
|
+
var o = this.options
|
1487
1488
|
|
1488
|
-
|
1489
|
+
return $e.attr('data-content')
|
1490
|
+
|| (typeof o.content == 'function' ?
|
1491
|
+
o.content.call($e[0]) :
|
1492
|
+
o.content)
|
1493
|
+
}
|
1494
|
+
|
1495
|
+
Popover.prototype.arrow = function () {
|
1496
|
+
return this.$arrow = this.$arrow || this.tip().find('.arrow')
|
1497
|
+
}
|
1489
1498
|
|
1499
|
+
Popover.prototype.tip = function () {
|
1500
|
+
if (!this.$tip) this.$tip = $(this.options.template)
|
1501
|
+
return this.$tip
|
1502
|
+
}
|
1490
1503
|
|
1491
|
-
|
1492
|
-
|
1504
|
+
|
1505
|
+
// POPOVER PLUGIN DEFINITION
|
1506
|
+
// =========================
|
1493
1507
|
|
1494
1508
|
var old = $.fn.popover
|
1495
1509
|
|
1496
1510
|
$.fn.popover = function (option) {
|
1497
1511
|
return this.each(function () {
|
1498
|
-
var $this
|
1499
|
-
|
1500
|
-
|
1501
|
-
|
1512
|
+
var $this = $(this)
|
1513
|
+
var data = $this.data('bs.popover')
|
1514
|
+
var options = typeof option == 'object' && option
|
1515
|
+
|
1516
|
+
if (!data && option == 'destroy') return
|
1517
|
+
if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
|
1502
1518
|
if (typeof option == 'string') data[option]()
|
1503
1519
|
})
|
1504
1520
|
}
|
1505
1521
|
|
1506
1522
|
$.fn.popover.Constructor = Popover
|
1507
1523
|
|
1508
|
-
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
|
1509
|
-
placement: 'right'
|
1510
|
-
, trigger: 'click'
|
1511
|
-
, content: ''
|
1512
|
-
, template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
|
1513
|
-
})
|
1514
|
-
|
1515
1524
|
|
1516
|
-
|
1517
|
-
|
1525
|
+
// POPOVER NO CONFLICT
|
1526
|
+
// ===================
|
1518
1527
|
|
1519
1528
|
$.fn.popover.noConflict = function () {
|
1520
1529
|
$.fn.popover = old
|
1521
1530
|
return this
|
1522
1531
|
}
|
1523
1532
|
|
1524
|
-
}(
|
1525
|
-
/* =============================================================
|
1526
|
-
* bootstrap-scrollspy.js v2.3.2
|
1527
|
-
* http://getbootstrap.com/2.3.2/javascript.html#scrollspy
|
1528
|
-
* =============================================================
|
1529
|
-
* Copyright 2013 Twitter, Inc.
|
1530
|
-
*
|
1531
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
1532
|
-
* you may not use this file except in compliance with the License.
|
1533
|
-
* You may obtain a copy of the License at
|
1534
|
-
*
|
1535
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
1536
|
-
*
|
1537
|
-
* Unless required by applicable law or agreed to in writing, software
|
1538
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
1539
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1540
|
-
* See the License for the specific language governing permissions and
|
1541
|
-
* limitations under the License.
|
1542
|
-
* ============================================================== */
|
1533
|
+
}(jQuery);
|
1543
1534
|
|
1535
|
+
/* ========================================================================
|
1536
|
+
* Bootstrap: scrollspy.js v3.1.1
|
1537
|
+
* http://getbootstrap.com/javascript/#scrollspy
|
1538
|
+
* ========================================================================
|
1539
|
+
* Copyright 2011-2014 Twitter, Inc.
|
1540
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1541
|
+
* ======================================================================== */
|
1544
1542
|
|
1545
|
-
!function ($) {
|
1546
1543
|
|
1547
|
-
|
1544
|
+
+function ($) {
|
1545
|
+
'use strict';
|
1548
1546
|
|
1549
|
-
|
1550
|
-
|
1551
|
-
* ========================== */
|
1547
|
+
// SCROLLSPY CLASS DEFINITION
|
1548
|
+
// ==========================
|
1552
1549
|
|
1553
1550
|
function ScrollSpy(element, options) {
|
1554
|
-
var
|
1555
|
-
|
1556
|
-
|
1557
|
-
this.
|
1558
|
-
this.$
|
1559
|
-
this
|
1551
|
+
var href
|
1552
|
+
var process = $.proxy(this.process, this)
|
1553
|
+
|
1554
|
+
this.$element = $(element).is('body') ? $(window) : $(element)
|
1555
|
+
this.$body = $('body')
|
1556
|
+
this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
|
1557
|
+
this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
|
1558
|
+
this.selector = (this.options.target
|
1560
1559
|
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|
1561
1560
|
|| '') + ' .nav li > a'
|
1562
|
-
this
|
1561
|
+
this.offsets = $([])
|
1562
|
+
this.targets = $([])
|
1563
|
+
this.activeTarget = null
|
1564
|
+
|
1563
1565
|
this.refresh()
|
1564
1566
|
this.process()
|
1565
1567
|
}
|
1566
1568
|
|
1567
|
-
ScrollSpy.
|
1569
|
+
ScrollSpy.DEFAULTS = {
|
1570
|
+
offset: 10
|
1571
|
+
}
|
1568
1572
|
|
1569
|
-
|
1573
|
+
ScrollSpy.prototype.refresh = function () {
|
1574
|
+
var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
|
1570
1575
|
|
1571
|
-
|
1572
|
-
|
1573
|
-
, $targets
|
1576
|
+
this.offsets = $([])
|
1577
|
+
this.targets = $([])
|
1574
1578
|
|
1575
|
-
|
1576
|
-
|
1579
|
+
var self = this
|
1580
|
+
var $targets = this.$body
|
1581
|
+
.find(this.selector)
|
1582
|
+
.map(function () {
|
1583
|
+
var $el = $(this)
|
1584
|
+
var href = $el.data('target') || $el.attr('href')
|
1585
|
+
var $href = /^#./.test(href) && $(href)
|
1577
1586
|
|
1578
|
-
$
|
1579
|
-
.
|
1580
|
-
.
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
.each(function () {
|
1590
|
-
self.offsets.push(this[0])
|
1591
|
-
self.targets.push(this[1])
|
1592
|
-
})
|
1593
|
-
}
|
1587
|
+
return ($href
|
1588
|
+
&& $href.length
|
1589
|
+
&& $href.is(':visible')
|
1590
|
+
&& [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
|
1591
|
+
})
|
1592
|
+
.sort(function (a, b) { return a[0] - b[0] })
|
1593
|
+
.each(function () {
|
1594
|
+
self.offsets.push(this[0])
|
1595
|
+
self.targets.push(this[1])
|
1596
|
+
})
|
1597
|
+
}
|
1594
1598
|
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
if (scrollTop >= maxScroll) {
|
1605
|
-
return activeTarget != (i = targets.last()[0])
|
1606
|
-
&& this.activate ( i )
|
1607
|
-
}
|
1599
|
+
ScrollSpy.prototype.process = function () {
|
1600
|
+
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
|
1601
|
+
var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
|
1602
|
+
var maxScroll = scrollHeight - this.$scrollElement.height()
|
1603
|
+
var offsets = this.offsets
|
1604
|
+
var targets = this.targets
|
1605
|
+
var activeTarget = this.activeTarget
|
1606
|
+
var i
|
1608
1607
|
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
1613
|
-
&& this.activate( targets[i] )
|
1614
|
-
}
|
1615
|
-
}
|
1608
|
+
if (scrollTop >= maxScroll) {
|
1609
|
+
return activeTarget != (i = targets.last()[0]) && this.activate(i)
|
1610
|
+
}
|
1616
1611
|
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1612
|
+
if (activeTarget && scrollTop <= offsets[0]) {
|
1613
|
+
return activeTarget != (i = targets[0]) && this.activate(i)
|
1614
|
+
}
|
1620
1615
|
|
1621
|
-
|
1616
|
+
for (i = offsets.length; i--;) {
|
1617
|
+
activeTarget != targets[i]
|
1618
|
+
&& scrollTop >= offsets[i]
|
1619
|
+
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
|
1620
|
+
&& this.activate( targets[i] )
|
1621
|
+
}
|
1622
|
+
}
|
1622
1623
|
|
1623
|
-
|
1624
|
-
|
1625
|
-
.removeClass('active')
|
1624
|
+
ScrollSpy.prototype.activate = function (target) {
|
1625
|
+
this.activeTarget = target
|
1626
1626
|
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1627
|
+
$(this.selector)
|
1628
|
+
.parentsUntil(this.options.target, '.active')
|
1629
|
+
.removeClass('active')
|
1630
1630
|
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1631
|
+
var selector = this.selector +
|
1632
|
+
'[data-target="' + target + '"],' +
|
1633
|
+
this.selector + '[href="' + target + '"]'
|
1634
1634
|
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1635
|
+
var active = $(selector)
|
1636
|
+
.parents('li')
|
1637
|
+
.addClass('active')
|
1638
1638
|
|
1639
|
-
|
1640
|
-
|
1639
|
+
if (active.parent('.dropdown-menu').length) {
|
1640
|
+
active = active
|
1641
|
+
.closest('li.dropdown')
|
1642
|
+
.addClass('active')
|
1643
|
+
}
|
1641
1644
|
|
1645
|
+
active.trigger('activate.bs.scrollspy')
|
1642
1646
|
}
|
1643
1647
|
|
1644
1648
|
|
1645
|
-
|
1646
|
-
|
1649
|
+
// SCROLLSPY PLUGIN DEFINITION
|
1650
|
+
// ===========================
|
1647
1651
|
|
1648
1652
|
var old = $.fn.scrollspy
|
1649
1653
|
|
1650
1654
|
$.fn.scrollspy = function (option) {
|
1651
1655
|
return this.each(function () {
|
1652
|
-
var $this
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
+
var $this = $(this)
|
1657
|
+
var data = $this.data('bs.scrollspy')
|
1658
|
+
var options = typeof option == 'object' && option
|
1659
|
+
|
1660
|
+
if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
|
1656
1661
|
if (typeof option == 'string') data[option]()
|
1657
1662
|
})
|
1658
1663
|
}
|
1659
1664
|
|
1660
1665
|
$.fn.scrollspy.Constructor = ScrollSpy
|
1661
1666
|
|
1662
|
-
$.fn.scrollspy.defaults = {
|
1663
|
-
offset: 10
|
1664
|
-
}
|
1665
|
-
|
1666
1667
|
|
1667
|
-
|
1668
|
-
|
1668
|
+
// SCROLLSPY NO CONFLICT
|
1669
|
+
// =====================
|
1669
1670
|
|
1670
1671
|
$.fn.scrollspy.noConflict = function () {
|
1671
1672
|
$.fn.scrollspy = old
|
@@ -1673,8 +1674,8 @@
|
|
1673
1674
|
}
|
1674
1675
|
|
1675
1676
|
|
1676
|
-
|
1677
|
-
|
1677
|
+
// SCROLLSPY DATA-API
|
1678
|
+
// ==================
|
1678
1679
|
|
1679
1680
|
$(window).on('load', function () {
|
1680
1681
|
$('[data-spy="scroll"]').each(function () {
|
@@ -1683,125 +1684,108 @@
|
|
1683
1684
|
})
|
1684
1685
|
})
|
1685
1686
|
|
1686
|
-
}(
|
1687
|
-
* bootstrap-tab.js v2.3.2
|
1688
|
-
* http://getbootstrap.com/2.3.2/javascript.html#tabs
|
1689
|
-
* ========================================================
|
1690
|
-
* Copyright 2013 Twitter, Inc.
|
1691
|
-
*
|
1692
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
1693
|
-
* you may not use this file except in compliance with the License.
|
1694
|
-
* You may obtain a copy of the License at
|
1695
|
-
*
|
1696
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
1697
|
-
*
|
1698
|
-
* Unless required by applicable law or agreed to in writing, software
|
1699
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
1700
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1701
|
-
* See the License for the specific language governing permissions and
|
1702
|
-
* limitations under the License.
|
1703
|
-
* ======================================================== */
|
1687
|
+
}(jQuery);
|
1704
1688
|
|
1689
|
+
/* ========================================================================
|
1690
|
+
* Bootstrap: tab.js v3.1.1
|
1691
|
+
* http://getbootstrap.com/javascript/#tabs
|
1692
|
+
* ========================================================================
|
1693
|
+
* Copyright 2011-2014 Twitter, Inc.
|
1694
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1695
|
+
* ======================================================================== */
|
1705
1696
|
|
1706
|
-
!function ($) {
|
1707
1697
|
|
1708
|
-
|
1698
|
+
+function ($) {
|
1699
|
+
'use strict';
|
1709
1700
|
|
1710
|
-
|
1711
|
-
|
1712
|
-
* ==================== */
|
1701
|
+
// TAB CLASS DEFINITION
|
1702
|
+
// ====================
|
1713
1703
|
|
1714
1704
|
var Tab = function (element) {
|
1715
1705
|
this.element = $(element)
|
1716
1706
|
}
|
1717
1707
|
|
1718
|
-
Tab.prototype = {
|
1708
|
+
Tab.prototype.show = function () {
|
1709
|
+
var $this = this.element
|
1710
|
+
var $ul = $this.closest('ul:not(.dropdown-menu)')
|
1711
|
+
var selector = $this.data('target')
|
1712
|
+
|
1713
|
+
if (!selector) {
|
1714
|
+
selector = $this.attr('href')
|
1715
|
+
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
1716
|
+
}
|
1719
1717
|
|
1720
|
-
|
1718
|
+
if ($this.parent('li').hasClass('active')) return
|
1721
1719
|
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1725
|
-
|
1726
|
-
, previous
|
1727
|
-
, $target
|
1728
|
-
, e
|
1720
|
+
var previous = $ul.find('.active:last a')[0]
|
1721
|
+
var e = $.Event('show.bs.tab', {
|
1722
|
+
relatedTarget: previous
|
1723
|
+
})
|
1729
1724
|
|
1730
|
-
|
1731
|
-
selector = $this.attr('href')
|
1732
|
-
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
1733
|
-
}
|
1725
|
+
$this.trigger(e)
|
1734
1726
|
|
1735
|
-
|
1727
|
+
if (e.isDefaultPrevented()) return
|
1736
1728
|
|
1737
|
-
|
1729
|
+
var $target = $(selector)
|
1738
1730
|
|
1739
|
-
|
1731
|
+
this.activate($this.parent('li'), $ul)
|
1732
|
+
this.activate($target, $target.parent(), function () {
|
1733
|
+
$this.trigger({
|
1734
|
+
type: 'shown.bs.tab',
|
1740
1735
|
relatedTarget: previous
|
1741
1736
|
})
|
1737
|
+
})
|
1738
|
+
}
|
1742
1739
|
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1740
|
+
Tab.prototype.activate = function (element, container, callback) {
|
1741
|
+
var $active = container.find('> .active')
|
1742
|
+
var transition = callback
|
1743
|
+
&& $.support.transition
|
1744
|
+
&& $active.hasClass('fade')
|
1748
1745
|
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
})
|
1755
|
-
})
|
1756
|
-
}
|
1746
|
+
function next() {
|
1747
|
+
$active
|
1748
|
+
.removeClass('active')
|
1749
|
+
.find('> .dropdown-menu > .active')
|
1750
|
+
.removeClass('active')
|
1757
1751
|
|
1758
|
-
|
1759
|
-
var $active = container.find('> .active')
|
1760
|
-
, transition = callback
|
1761
|
-
&& $.support.transition
|
1762
|
-
&& $active.hasClass('fade')
|
1763
|
-
|
1764
|
-
function next() {
|
1765
|
-
$active
|
1766
|
-
.removeClass('active')
|
1767
|
-
.find('> .dropdown-menu > .active')
|
1768
|
-
.removeClass('active')
|
1769
|
-
|
1770
|
-
element.addClass('active')
|
1771
|
-
|
1772
|
-
if (transition) {
|
1773
|
-
element[0].offsetWidth // reflow for transition
|
1774
|
-
element.addClass('in')
|
1775
|
-
} else {
|
1776
|
-
element.removeClass('fade')
|
1777
|
-
}
|
1752
|
+
element.addClass('active')
|
1778
1753
|
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1754
|
+
if (transition) {
|
1755
|
+
element[0].offsetWidth // reflow for transition
|
1756
|
+
element.addClass('in')
|
1757
|
+
} else {
|
1758
|
+
element.removeClass('fade')
|
1784
1759
|
}
|
1785
1760
|
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1761
|
+
if (element.parent('.dropdown-menu')) {
|
1762
|
+
element.closest('li.dropdown').addClass('active')
|
1763
|
+
}
|
1789
1764
|
|
1790
|
-
|
1765
|
+
callback && callback()
|
1791
1766
|
}
|
1767
|
+
|
1768
|
+
transition ?
|
1769
|
+
$active
|
1770
|
+
.one($.support.transition.end, next)
|
1771
|
+
.emulateTransitionEnd(150) :
|
1772
|
+
next()
|
1773
|
+
|
1774
|
+
$active.removeClass('in')
|
1792
1775
|
}
|
1793
1776
|
|
1794
1777
|
|
1795
|
-
|
1796
|
-
|
1778
|
+
// TAB PLUGIN DEFINITION
|
1779
|
+
// =====================
|
1797
1780
|
|
1798
1781
|
var old = $.fn.tab
|
1799
1782
|
|
1800
1783
|
$.fn.tab = function ( option ) {
|
1801
1784
|
return this.each(function () {
|
1802
1785
|
var $this = $(this)
|
1803
|
-
|
1804
|
-
|
1786
|
+
var data = $this.data('bs.tab')
|
1787
|
+
|
1788
|
+
if (!data) $this.data('bs.tab', (data = new Tab(this)))
|
1805
1789
|
if (typeof option == 'string') data[option]()
|
1806
1790
|
})
|
1807
1791
|
}
|
@@ -1809,8 +1793,8 @@
|
|
1809
1793
|
$.fn.tab.Constructor = Tab
|
1810
1794
|
|
1811
1795
|
|
1812
|
-
|
1813
|
-
|
1796
|
+
// TAB NO CONFLICT
|
1797
|
+
// ===============
|
1814
1798
|
|
1815
1799
|
$.fn.tab.noConflict = function () {
|
1816
1800
|
$.fn.tab = old
|
@@ -1818,440 +1802,128 @@
|
|
1818
1802
|
}
|
1819
1803
|
|
1820
1804
|
|
1821
|
-
|
1822
|
-
|
1805
|
+
// TAB DATA-API
|
1806
|
+
// ============
|
1823
1807
|
|
1824
|
-
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
1808
|
+
$(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
1825
1809
|
e.preventDefault()
|
1826
1810
|
$(this).tab('show')
|
1827
1811
|
})
|
1828
1812
|
|
1829
|
-
}(
|
1830
|
-
* bootstrap-typeahead.js v2.3.2
|
1831
|
-
* http://getbootstrap.com/2.3.2/javascript.html#typeahead
|
1832
|
-
* =============================================================
|
1833
|
-
* Copyright 2013 Twitter, Inc.
|
1834
|
-
*
|
1835
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
1836
|
-
* you may not use this file except in compliance with the License.
|
1837
|
-
* You may obtain a copy of the License at
|
1838
|
-
*
|
1839
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
1840
|
-
*
|
1841
|
-
* Unless required by applicable law or agreed to in writing, software
|
1842
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
1843
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
1844
|
-
* See the License for the specific language governing permissions and
|
1845
|
-
* limitations under the License.
|
1846
|
-
* ============================================================ */
|
1847
|
-
|
1813
|
+
}(jQuery);
|
1848
1814
|
|
1849
|
-
|
1815
|
+
/* ========================================================================
|
1816
|
+
* Bootstrap: affix.js v3.1.1
|
1817
|
+
* http://getbootstrap.com/javascript/#affix
|
1818
|
+
* ========================================================================
|
1819
|
+
* Copyright 2011-2014 Twitter, Inc.
|
1820
|
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1821
|
+
* ======================================================================== */
|
1850
1822
|
|
1851
|
-
"use strict"; // jshint ;_;
|
1852
1823
|
|
1824
|
+
+function ($) {
|
1825
|
+
'use strict';
|
1853
1826
|
|
1854
|
-
|
1855
|
-
|
1827
|
+
// AFFIX CLASS DEFINITION
|
1828
|
+
// ======================
|
1856
1829
|
|
1857
|
-
var
|
1858
|
-
this
|
1859
|
-
this
|
1860
|
-
|
1861
|
-
|
1862
|
-
this.highlighter = this.options.highlighter || this.highlighter
|
1863
|
-
this.updater = this.options.updater || this.updater
|
1864
|
-
this.source = this.options.source
|
1865
|
-
this.$menu = $(this.options.menu)
|
1866
|
-
this.shown = false
|
1867
|
-
this.listen()
|
1868
|
-
}
|
1869
|
-
|
1870
|
-
Typeahead.prototype = {
|
1871
|
-
|
1872
|
-
constructor: Typeahead
|
1873
|
-
|
1874
|
-
, select: function () {
|
1875
|
-
var val = this.$menu.find('.active').attr('data-value')
|
1876
|
-
this.$element
|
1877
|
-
.val(this.updater(val))
|
1878
|
-
.change()
|
1879
|
-
return this.hide()
|
1880
|
-
}
|
1881
|
-
|
1882
|
-
, updater: function (item) {
|
1883
|
-
return item
|
1884
|
-
}
|
1885
|
-
|
1886
|
-
, show: function () {
|
1887
|
-
var pos = $.extend({}, this.$element.position(), {
|
1888
|
-
height: this.$element[0].offsetHeight
|
1889
|
-
})
|
1890
|
-
|
1891
|
-
this.$menu
|
1892
|
-
.insertAfter(this.$element)
|
1893
|
-
.css({
|
1894
|
-
top: pos.top + pos.height
|
1895
|
-
, left: pos.left
|
1896
|
-
})
|
1897
|
-
.show()
|
1898
|
-
|
1899
|
-
this.shown = true
|
1900
|
-
return this
|
1901
|
-
}
|
1902
|
-
|
1903
|
-
, hide: function () {
|
1904
|
-
this.$menu.hide()
|
1905
|
-
this.shown = false
|
1906
|
-
return this
|
1907
|
-
}
|
1908
|
-
|
1909
|
-
, lookup: function (event) {
|
1910
|
-
var items
|
1911
|
-
|
1912
|
-
this.query = this.$element.val()
|
1913
|
-
|
1914
|
-
if (!this.query || this.query.length < this.options.minLength) {
|
1915
|
-
return this.shown ? this.hide() : this
|
1916
|
-
}
|
1917
|
-
|
1918
|
-
items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
|
1919
|
-
|
1920
|
-
return items ? this.process(items) : this
|
1921
|
-
}
|
1922
|
-
|
1923
|
-
, process: function (items) {
|
1924
|
-
var that = this
|
1925
|
-
|
1926
|
-
items = $.grep(items, function (item) {
|
1927
|
-
return that.matcher(item)
|
1928
|
-
})
|
1929
|
-
|
1930
|
-
items = this.sorter(items)
|
1931
|
-
|
1932
|
-
if (!items.length) {
|
1933
|
-
return this.shown ? this.hide() : this
|
1934
|
-
}
|
1935
|
-
|
1936
|
-
return this.render(items.slice(0, this.options.items)).show()
|
1937
|
-
}
|
1938
|
-
|
1939
|
-
, matcher: function (item) {
|
1940
|
-
return ~item.toLowerCase().indexOf(this.query.toLowerCase())
|
1941
|
-
}
|
1942
|
-
|
1943
|
-
, sorter: function (items) {
|
1944
|
-
var beginswith = []
|
1945
|
-
, caseSensitive = []
|
1946
|
-
, caseInsensitive = []
|
1947
|
-
, item
|
1948
|
-
|
1949
|
-
while (item = items.shift()) {
|
1950
|
-
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
|
1951
|
-
else if (~item.indexOf(this.query)) caseSensitive.push(item)
|
1952
|
-
else caseInsensitive.push(item)
|
1953
|
-
}
|
1954
|
-
|
1955
|
-
return beginswith.concat(caseSensitive, caseInsensitive)
|
1956
|
-
}
|
1957
|
-
|
1958
|
-
, highlighter: function (item) {
|
1959
|
-
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
|
1960
|
-
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
|
1961
|
-
return '<strong>' + match + '</strong>'
|
1962
|
-
})
|
1963
|
-
}
|
1964
|
-
|
1965
|
-
, render: function (items) {
|
1966
|
-
var that = this
|
1967
|
-
|
1968
|
-
items = $(items).map(function (i, item) {
|
1969
|
-
i = $(that.options.item).attr('data-value', item)
|
1970
|
-
i.find('a').html(that.highlighter(item))
|
1971
|
-
return i[0]
|
1972
|
-
})
|
1973
|
-
|
1974
|
-
items.first().addClass('active')
|
1975
|
-
this.$menu.html(items)
|
1976
|
-
return this
|
1977
|
-
}
|
1978
|
-
|
1979
|
-
, next: function (event) {
|
1980
|
-
var active = this.$menu.find('.active').removeClass('active')
|
1981
|
-
, next = active.next()
|
1982
|
-
|
1983
|
-
if (!next.length) {
|
1984
|
-
next = $(this.$menu.find('li')[0])
|
1985
|
-
}
|
1986
|
-
|
1987
|
-
next.addClass('active')
|
1988
|
-
}
|
1989
|
-
|
1990
|
-
, prev: function (event) {
|
1991
|
-
var active = this.$menu.find('.active').removeClass('active')
|
1992
|
-
, prev = active.prev()
|
1993
|
-
|
1994
|
-
if (!prev.length) {
|
1995
|
-
prev = this.$menu.find('li').last()
|
1996
|
-
}
|
1997
|
-
|
1998
|
-
prev.addClass('active')
|
1999
|
-
}
|
2000
|
-
|
2001
|
-
, listen: function () {
|
2002
|
-
this.$element
|
2003
|
-
.on('focus', $.proxy(this.focus, this))
|
2004
|
-
.on('blur', $.proxy(this.blur, this))
|
2005
|
-
.on('keypress', $.proxy(this.keypress, this))
|
2006
|
-
.on('keyup', $.proxy(this.keyup, this))
|
2007
|
-
|
2008
|
-
if (this.eventSupported('keydown')) {
|
2009
|
-
this.$element.on('keydown', $.proxy(this.keydown, this))
|
2010
|
-
}
|
2011
|
-
|
2012
|
-
this.$menu
|
2013
|
-
.on('click', $.proxy(this.click, this))
|
2014
|
-
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
|
2015
|
-
.on('mouseleave', 'li', $.proxy(this.mouseleave, this))
|
2016
|
-
}
|
2017
|
-
|
2018
|
-
, eventSupported: function(eventName) {
|
2019
|
-
var isSupported = eventName in this.$element
|
2020
|
-
if (!isSupported) {
|
2021
|
-
this.$element.setAttribute(eventName, 'return;')
|
2022
|
-
isSupported = typeof this.$element[eventName] === 'function'
|
2023
|
-
}
|
2024
|
-
return isSupported
|
2025
|
-
}
|
2026
|
-
|
2027
|
-
, move: function (e) {
|
2028
|
-
if (!this.shown) return
|
2029
|
-
|
2030
|
-
switch(e.keyCode) {
|
2031
|
-
case 9: // tab
|
2032
|
-
case 13: // enter
|
2033
|
-
case 27: // escape
|
2034
|
-
e.preventDefault()
|
2035
|
-
break
|
2036
|
-
|
2037
|
-
case 38: // up arrow
|
2038
|
-
e.preventDefault()
|
2039
|
-
this.prev()
|
2040
|
-
break
|
2041
|
-
|
2042
|
-
case 40: // down arrow
|
2043
|
-
e.preventDefault()
|
2044
|
-
this.next()
|
2045
|
-
break
|
2046
|
-
}
|
2047
|
-
|
2048
|
-
e.stopPropagation()
|
2049
|
-
}
|
2050
|
-
|
2051
|
-
, keydown: function (e) {
|
2052
|
-
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
|
2053
|
-
this.move(e)
|
2054
|
-
}
|
2055
|
-
|
2056
|
-
, keypress: function (e) {
|
2057
|
-
if (this.suppressKeyPressRepeat) return
|
2058
|
-
this.move(e)
|
2059
|
-
}
|
1830
|
+
var Affix = function (element, options) {
|
1831
|
+
this.options = $.extend({}, Affix.DEFAULTS, options)
|
1832
|
+
this.$window = $(window)
|
1833
|
+
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
|
1834
|
+
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
|
2060
1835
|
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
case 16: // shift
|
2066
|
-
case 17: // ctrl
|
2067
|
-
case 18: // alt
|
2068
|
-
break
|
2069
|
-
|
2070
|
-
case 9: // tab
|
2071
|
-
case 13: // enter
|
2072
|
-
if (!this.shown) return
|
2073
|
-
this.select()
|
2074
|
-
break
|
2075
|
-
|
2076
|
-
case 27: // escape
|
2077
|
-
if (!this.shown) return
|
2078
|
-
this.hide()
|
2079
|
-
break
|
2080
|
-
|
2081
|
-
default:
|
2082
|
-
this.lookup()
|
2083
|
-
}
|
1836
|
+
this.$element = $(element)
|
1837
|
+
this.affixed =
|
1838
|
+
this.unpin =
|
1839
|
+
this.pinnedOffset = null
|
2084
1840
|
|
2085
|
-
|
2086
|
-
e.preventDefault()
|
1841
|
+
this.checkPosition()
|
2087
1842
|
}
|
2088
1843
|
|
2089
|
-
|
2090
|
-
this.focused = true
|
2091
|
-
}
|
2092
|
-
|
2093
|
-
, blur: function (e) {
|
2094
|
-
this.focused = false
|
2095
|
-
if (!this.mousedover && this.shown) this.hide()
|
2096
|
-
}
|
2097
|
-
|
2098
|
-
, click: function (e) {
|
2099
|
-
e.stopPropagation()
|
2100
|
-
e.preventDefault()
|
2101
|
-
this.select()
|
2102
|
-
this.$element.focus()
|
2103
|
-
}
|
2104
|
-
|
2105
|
-
, mouseenter: function (e) {
|
2106
|
-
this.mousedover = true
|
2107
|
-
this.$menu.find('.active').removeClass('active')
|
2108
|
-
$(e.currentTarget).addClass('active')
|
2109
|
-
}
|
2110
|
-
|
2111
|
-
, mouseleave: function (e) {
|
2112
|
-
this.mousedover = false
|
2113
|
-
if (!this.focused && this.shown) this.hide()
|
2114
|
-
}
|
1844
|
+
Affix.RESET = 'affix affix-top affix-bottom'
|
2115
1845
|
|
1846
|
+
Affix.DEFAULTS = {
|
1847
|
+
offset: 0
|
2116
1848
|
}
|
2117
1849
|
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2123
|
-
|
2124
|
-
$.fn.typeahead = function (option) {
|
2125
|
-
return this.each(function () {
|
2126
|
-
var $this = $(this)
|
2127
|
-
, data = $this.data('typeahead')
|
2128
|
-
, options = typeof option == 'object' && option
|
2129
|
-
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
|
2130
|
-
if (typeof option == 'string') data[option]()
|
2131
|
-
})
|
1850
|
+
Affix.prototype.getPinnedOffset = function () {
|
1851
|
+
if (this.pinnedOffset) return this.pinnedOffset
|
1852
|
+
this.$element.removeClass(Affix.RESET).addClass('affix')
|
1853
|
+
var scrollTop = this.$window.scrollTop()
|
1854
|
+
var position = this.$element.offset()
|
1855
|
+
return (this.pinnedOffset = position.top - scrollTop)
|
2132
1856
|
}
|
2133
1857
|
|
2134
|
-
|
2135
|
-
|
2136
|
-
, items: 8
|
2137
|
-
, menu: '<ul class="typeahead dropdown-menu"></ul>'
|
2138
|
-
, item: '<li><a href="#"></a></li>'
|
2139
|
-
, minLength: 1
|
1858
|
+
Affix.prototype.checkPositionWithEventLoop = function () {
|
1859
|
+
setTimeout($.proxy(this.checkPosition, this), 1)
|
2140
1860
|
}
|
2141
1861
|
|
2142
|
-
|
2143
|
-
|
2144
|
-
|
2145
|
-
/* TYPEAHEAD NO CONFLICT
|
2146
|
-
* =================== */
|
2147
|
-
|
2148
|
-
$.fn.typeahead.noConflict = function () {
|
2149
|
-
$.fn.typeahead = old
|
2150
|
-
return this
|
2151
|
-
}
|
2152
|
-
|
2153
|
-
|
2154
|
-
/* TYPEAHEAD DATA-API
|
2155
|
-
* ================== */
|
2156
|
-
|
2157
|
-
$(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
|
2158
|
-
var $this = $(this)
|
2159
|
-
if ($this.data('typeahead')) return
|
2160
|
-
$this.typeahead($this.data())
|
2161
|
-
})
|
2162
|
-
|
2163
|
-
}(window.jQuery);
|
2164
|
-
/* ==========================================================
|
2165
|
-
* bootstrap-affix.js v2.3.2
|
2166
|
-
* http://getbootstrap.com/2.3.2/javascript.html#affix
|
2167
|
-
* ==========================================================
|
2168
|
-
* Copyright 2013 Twitter, Inc.
|
2169
|
-
*
|
2170
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
2171
|
-
* you may not use this file except in compliance with the License.
|
2172
|
-
* You may obtain a copy of the License at
|
2173
|
-
*
|
2174
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
2175
|
-
*
|
2176
|
-
* Unless required by applicable law or agreed to in writing, software
|
2177
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
2178
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
2179
|
-
* See the License for the specific language governing permissions and
|
2180
|
-
* limitations under the License.
|
2181
|
-
* ========================================================== */
|
2182
|
-
|
1862
|
+
Affix.prototype.checkPosition = function () {
|
1863
|
+
if (!this.$element.is(':visible')) return
|
2183
1864
|
|
2184
|
-
|
1865
|
+
var scrollHeight = $(document).height()
|
1866
|
+
var scrollTop = this.$window.scrollTop()
|
1867
|
+
var position = this.$element.offset()
|
1868
|
+
var offset = this.options.offset
|
1869
|
+
var offsetTop = offset.top
|
1870
|
+
var offsetBottom = offset.bottom
|
2185
1871
|
|
2186
|
-
|
1872
|
+
if (this.affixed == 'top') position.top += scrollTop
|
2187
1873
|
|
1874
|
+
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
1875
|
+
if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
|
1876
|
+
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
|
2188
1877
|
|
2189
|
-
|
2190
|
-
|
1878
|
+
var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
|
1879
|
+
offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
|
1880
|
+
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
|
2191
1881
|
|
2192
|
-
|
2193
|
-
this.
|
2194
|
-
this.$window = $(window)
|
2195
|
-
.on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
|
2196
|
-
.on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
|
2197
|
-
this.$element = $(element)
|
2198
|
-
this.checkPosition()
|
2199
|
-
}
|
1882
|
+
if (this.affixed === affix) return
|
1883
|
+
if (this.unpin) this.$element.css('top', '')
|
2200
1884
|
|
2201
|
-
|
2202
|
-
|
1885
|
+
var affixType = 'affix' + (affix ? '-' + affix : '')
|
1886
|
+
var e = $.Event(affixType + '.bs.affix')
|
2203
1887
|
|
2204
|
-
|
2205
|
-
, scrollTop = this.$window.scrollTop()
|
2206
|
-
, position = this.$element.offset()
|
2207
|
-
, offset = this.options.offset
|
2208
|
-
, offsetBottom = offset.bottom
|
2209
|
-
, offsetTop = offset.top
|
2210
|
-
, reset = 'affix affix-top affix-bottom'
|
2211
|
-
, affix
|
2212
|
-
|
2213
|
-
if (typeof offset != 'object') offsetBottom = offsetTop = offset
|
2214
|
-
if (typeof offsetTop == 'function') offsetTop = offset.top()
|
2215
|
-
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
|
2216
|
-
|
2217
|
-
affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
|
2218
|
-
false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
|
2219
|
-
'bottom' : offsetTop != null && scrollTop <= offsetTop ?
|
2220
|
-
'top' : false
|
1888
|
+
this.$element.trigger(e)
|
2221
1889
|
|
2222
|
-
if (
|
1890
|
+
if (e.isDefaultPrevented()) return
|
2223
1891
|
|
2224
1892
|
this.affixed = affix
|
2225
|
-
this.unpin = affix == 'bottom' ?
|
1893
|
+
this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
|
1894
|
+
|
1895
|
+
this.$element
|
1896
|
+
.removeClass(Affix.RESET)
|
1897
|
+
.addClass(affixType)
|
1898
|
+
.trigger($.Event(affixType.replace('affix', 'affixed')))
|
2226
1899
|
|
2227
|
-
|
1900
|
+
if (affix == 'bottom') {
|
1901
|
+
this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
|
1902
|
+
}
|
2228
1903
|
}
|
2229
1904
|
|
2230
1905
|
|
2231
|
-
|
2232
|
-
|
1906
|
+
// AFFIX PLUGIN DEFINITION
|
1907
|
+
// =======================
|
2233
1908
|
|
2234
1909
|
var old = $.fn.affix
|
2235
1910
|
|
2236
1911
|
$.fn.affix = function (option) {
|
2237
1912
|
return this.each(function () {
|
2238
|
-
var $this
|
2239
|
-
|
2240
|
-
|
2241
|
-
|
1913
|
+
var $this = $(this)
|
1914
|
+
var data = $this.data('bs.affix')
|
1915
|
+
var options = typeof option == 'object' && option
|
1916
|
+
|
1917
|
+
if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
|
2242
1918
|
if (typeof option == 'string') data[option]()
|
2243
1919
|
})
|
2244
1920
|
}
|
2245
1921
|
|
2246
1922
|
$.fn.affix.Constructor = Affix
|
2247
1923
|
|
2248
|
-
$.fn.affix.defaults = {
|
2249
|
-
offset: 0
|
2250
|
-
}
|
2251
|
-
|
2252
1924
|
|
2253
|
-
|
2254
|
-
|
1925
|
+
// AFFIX NO CONFLICT
|
1926
|
+
// =================
|
2255
1927
|
|
2256
1928
|
$.fn.affix.noConflict = function () {
|
2257
1929
|
$.fn.affix = old
|
@@ -2259,22 +1931,21 @@
|
|
2259
1931
|
}
|
2260
1932
|
|
2261
1933
|
|
2262
|
-
|
2263
|
-
|
1934
|
+
// AFFIX DATA-API
|
1935
|
+
// ==============
|
2264
1936
|
|
2265
1937
|
$(window).on('load', function () {
|
2266
1938
|
$('[data-spy="affix"]').each(function () {
|
2267
1939
|
var $spy = $(this)
|
2268
|
-
|
1940
|
+
var data = $spy.data()
|
2269
1941
|
|
2270
1942
|
data.offset = data.offset || {}
|
2271
1943
|
|
2272
|
-
data.offsetBottom
|
2273
|
-
data.offsetTop
|
1944
|
+
if (data.offsetBottom) data.offset.bottom = data.offsetBottom
|
1945
|
+
if (data.offsetTop) data.offset.top = data.offsetTop
|
2274
1946
|
|
2275
1947
|
$spy.affix(data)
|
2276
1948
|
})
|
2277
1949
|
})
|
2278
1950
|
|
2279
|
-
|
2280
|
-
}(window.jQuery);
|
1951
|
+
}(jQuery);
|