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