h2ocube_rails_assets 0.0.19 → 0.0.20

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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +1 -0
  4. data/Vendorfile +196 -0
  5. data/h2ocube_rails_assets.gemspec +3 -4
  6. data/lib/h2ocube_rails_assets.rb +8 -6
  7. data/test/jquery_test.rb +1 -1
  8. data/test/turbolinks_test.rb +1 -3
  9. data/vendor/assets/images/jquery.fancybox/fancybox_loading.gif +0 -0
  10. data/vendor/assets/images/jquery.fancybox/fancybox_loading@2x.gif +0 -0
  11. data/vendor/assets/images/jquery.fancybox/fancybox_sprite@2x.png +0 -0
  12. data/vendor/assets/javascripts/backbone.js +4 -1571
  13. data/vendor/assets/javascripts/bootstrap.js +6 -2276
  14. data/vendor/assets/javascripts/highcharts.js +272 -15281
  15. data/vendor/assets/javascripts/jasny-bootstrap.js +7 -3060
  16. data/vendor/assets/javascripts/jquery/1.10.js +6 -9807
  17. data/vendor/assets/javascripts/jquery/1.8.js +2 -9472
  18. data/vendor/assets/javascripts/jquery/1.9.js +5 -9597
  19. data/vendor/assets/javascripts/jquery/2.0.js +5 -8841
  20. data/vendor/assets/javascripts/jquery.cookie.js +26 -23
  21. data/vendor/assets/javascripts/jquery.fancybox.js +46 -1983
  22. data/vendor/assets/javascripts/jquery.fileupload.js +1329 -4
  23. data/vendor/assets/javascripts/jquery.iframe-transport.js +24 -4
  24. data/vendor/assets/javascripts/jquery.js +1 -1
  25. data/vendor/assets/javascripts/jquery.lazyload.js +3 -216
  26. data/vendor/assets/javascripts/jquery.mobile.js +7 -11092
  27. data/vendor/assets/javascripts/jquery.pnotify.js +29 -903
  28. data/vendor/assets/javascripts/jquery.timeago.coffee +2 -4
  29. data/vendor/assets/javascripts/jquery.turbolinks.coffee +40 -51
  30. data/vendor/assets/javascripts/jquery.ui/jquery.ui.accordion.js +4 -572
  31. data/vendor/assets/javascripts/jquery.ui/jquery.ui.autocomplete.js +4 -610
  32. data/vendor/assets/javascripts/jquery.ui/jquery.ui.button.js +4 -419
  33. data/vendor/assets/javascripts/jquery.ui/jquery.ui.core.js +4 -320
  34. data/vendor/assets/javascripts/jquery.ui/jquery.ui.datepicker.js +5 -2050
  35. data/vendor/assets/javascripts/jquery.ui/jquery.ui.dialog.js +4 -808
  36. data/vendor/assets/javascripts/jquery.ui/jquery.ui.draggable.js +4 -933
  37. data/vendor/assets/javascripts/jquery.ui/jquery.ui.droppable.js +4 -372
  38. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-blind.js +4 -82
  39. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-bounce.js +4 -113
  40. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-clip.js +4 -67
  41. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-drop.js +4 -65
  42. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-explode.js +4 -97
  43. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-fade.js +4 -30
  44. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-fold.js +4 -76
  45. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-highlight.js +4 -50
  46. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-pulsate.js +4 -63
  47. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-scale.js +4 -318
  48. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-shake.js +4 -74
  49. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-slide.js +4 -64
  50. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect-transfer.js +4 -47
  51. data/vendor/assets/javascripts/jquery.ui/jquery.ui.effect.js +4 -1289
  52. data/vendor/assets/javascripts/jquery.ui/jquery.ui.menu.js +4 -621
  53. data/vendor/assets/javascripts/jquery.ui/jquery.ui.mouse.js +4 -169
  54. data/vendor/assets/javascripts/jquery.ui/jquery.ui.position.js +4 -497
  55. data/vendor/assets/javascripts/jquery.ui/jquery.ui.progressbar.js +4 -145
  56. data/vendor/assets/javascripts/jquery.ui/jquery.ui.resizable.js +4 -968
  57. data/vendor/assets/javascripts/jquery.ui/jquery.ui.selectable.js +4 -277
  58. data/vendor/assets/javascripts/jquery.ui/jquery.ui.slider.js +4 -672
  59. data/vendor/assets/javascripts/jquery.ui/jquery.ui.sortable.js +4 -1282
  60. data/vendor/assets/javascripts/jquery.ui/jquery.ui.spinner.js +4 -493
  61. data/vendor/assets/javascripts/jquery.ui/jquery.ui.tabs.js +4 -846
  62. data/vendor/assets/javascripts/jquery.ui/jquery.ui.tooltip.js +4 -402
  63. data/vendor/assets/javascripts/jquery.ui/jquery.ui.widget.js +4 -521
  64. data/vendor/assets/javascripts/jquery.validate.js +2 -1207
  65. data/vendor/assets/javascripts/lazyload.js +4 -391
  66. data/vendor/assets/javascripts/sammy.js +5 -2117
  67. data/vendor/assets/javascripts/underscore.js +4 -1224
  68. data/vendor/assets/javascripts/zepto.js +1 -1564
  69. data/vendor/assets/stylesheets/bootstrap.responsive.css +2 -1102
  70. data/vendor/assets/stylesheets/bootstrap.scss +2 -6151
  71. data/vendor/assets/stylesheets/jasny-bootstrap.responsive.css +2 -1263
  72. data/vendor/assets/stylesheets/jasny-bootstrap.scss +2 -7591
  73. data/vendor/assets/stylesheets/jquery.fancybox.scss +27 -2
  74. data/vendor/assets/stylesheets/jquery.mobile.scss +2 -3356
  75. data/vendor/assets/stylesheets/jquery.ui.scss +2 -1184
  76. metadata +43 -19
  77. data/vendor/assets/images/jquery.mobile/ajax-loader.gif +0 -0
  78. data/vendor/assets/images/jquery.mobile/icons-18-black.png +0 -0
  79. data/vendor/assets/images/jquery.mobile/icons-18-white.png +0 -0
  80. data/vendor/assets/images/jquery.mobile/icons-36-black.png +0 -0
  81. data/vendor/assets/images/jquery.mobile/icons-36-white.png +0 -0
  82. data/vendor/assets/javascripts/_jquery.fileupload.js +0 -1164
  83. data/vendor/assets/javascripts/zepto/fx_methods.js +0 -71
@@ -1,3060 +1,7 @@
1
- /* ===================================================
2
- * bootstrap-transition.js v2.3.1
3
- * http://twitter.github.com/bootstrap/javascript.html#transitions
4
- * ===================================================
5
- * Copyright 2012 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- * ========================================================== */
19
-
20
-
21
- !function ($) {
22
-
23
- "use strict"; // jshint ;_;
24
-
25
-
26
- /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27
- * ======================================================= */
28
-
29
- $(function () {
30
-
31
- $.support.transition = (function () {
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
- }())
51
-
52
- return transitionEnd && {
53
- end: transitionEnd
54
- }
55
-
56
- })()
57
-
58
- })
59
-
60
- }(window.jQuery);/* ==========================================================
61
- * bootstrap-alert.js v2.3.1
62
- * http://twitter.github.com/bootstrap/javascript.html#alerts
63
- * ==========================================================
64
- * Copyright 2012 Twitter, Inc.
65
- *
66
- * Licensed under the Apache License, Version 2.0 (the "License");
67
- * you may not use this file except in compliance with the License.
68
- * You may obtain a copy of the License at
69
- *
70
- * http://www.apache.org/licenses/LICENSE-2.0
71
- *
72
- * Unless required by applicable law or agreed to in writing, software
73
- * distributed under the License is distributed on an "AS IS" BASIS,
74
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
75
- * See the License for the specific language governing permissions and
76
- * limitations under the License.
77
- * ========================================================== */
78
-
79
-
80
- !function ($) {
81
-
82
- "use strict"; // jshint ;_;
83
-
84
-
85
- /* ALERT CLASS DEFINITION
86
- * ====================== */
87
-
88
- var dismiss = '[data-dismiss="alert"]'
89
- , Alert = function (el) {
90
- $(el).on('click', dismiss, this.close)
91
- }
92
-
93
- Alert.prototype.close = function (e) {
94
- var $this = $(this)
95
- , selector = $this.attr('data-target')
96
- , $parent
97
-
98
- if (!selector) {
99
- selector = $this.attr('href')
100
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
101
- }
102
-
103
- $parent = $(selector)
104
-
105
- e && e.preventDefault()
106
-
107
- $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
108
-
109
- $parent.trigger(e = $.Event('close'))
110
-
111
- if (e.isDefaultPrevented()) return
112
-
113
- $parent.removeClass('in')
114
-
115
- function removeElement() {
116
- $parent
117
- .trigger('closed')
118
- .remove()
119
- }
120
-
121
- $.support.transition && $parent.hasClass('fade') ?
122
- $parent.on($.support.transition.end, removeElement) :
123
- removeElement()
124
- }
125
-
126
-
127
- /* ALERT PLUGIN DEFINITION
128
- * ======================= */
129
-
130
- var old = $.fn.alert
131
-
132
- $.fn.alert = function (option) {
133
- return this.each(function () {
134
- var $this = $(this)
135
- , data = $this.data('alert')
136
- if (!data) $this.data('alert', (data = new Alert(this)))
137
- if (typeof option == 'string') data[option].call($this)
138
- })
139
- }
140
-
141
- $.fn.alert.Constructor = Alert
142
-
143
-
144
- /* ALERT NO CONFLICT
145
- * ================= */
146
-
147
- $.fn.alert.noConflict = function () {
148
- $.fn.alert = old
149
- return this
150
- }
151
-
152
-
153
- /* ALERT DATA-API
154
- * ============== */
155
-
156
- $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
157
-
158
- }(window.jQuery);/* ============================================================
159
- * bootstrap-button.js v2.3.1
160
- * http://twitter.github.com/bootstrap/javascript.html#buttons
161
- * ============================================================
162
- * Copyright 2012 Twitter, Inc.
163
- *
164
- * Licensed under the Apache License, Version 2.0 (the "License");
165
- * you may not use this file except in compliance with the License.
166
- * You may obtain a copy of the License at
167
- *
168
- * http://www.apache.org/licenses/LICENSE-2.0
169
- *
170
- * Unless required by applicable law or agreed to in writing, software
171
- * distributed under the License is distributed on an "AS IS" BASIS,
172
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
173
- * See the License for the specific language governing permissions and
174
- * limitations under the License.
175
- * ============================================================ */
176
-
177
-
178
- !function ($) {
179
-
180
- "use strict"; // jshint ;_;
181
-
182
-
183
- /* BUTTON PUBLIC CLASS DEFINITION
184
- * ============================== */
185
-
186
- var Button = function (element, options) {
187
- this.$element = $(element)
188
- this.options = $.extend({}, $.fn.button.defaults, options)
189
- }
190
-
191
- Button.prototype.setState = function (state) {
192
- var d = 'disabled'
193
- , $el = this.$element
194
- , data = $el.data()
195
- , val = $el.is('input') ? 'val' : 'html'
196
-
197
- state = state + 'Text'
198
- data.resetText || $el.data('resetText', $el[val]())
199
-
200
- $el[val](data[state] || this.options[state])
201
-
202
- // push to event loop to allow forms to submit
203
- setTimeout(function () {
204
- state == 'loadingText' ?
205
- $el.addClass(d).attr(d, d) :
206
- $el.removeClass(d).removeAttr(d)
207
- }, 0)
208
- }
209
-
210
- Button.prototype.toggle = function () {
211
- var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
212
-
213
- $parent && $parent
214
- .find('.active')
215
- .removeClass('active')
216
-
217
- this.$element.toggleClass('active')
218
- }
219
-
220
-
221
- /* BUTTON PLUGIN DEFINITION
222
- * ======================== */
223
-
224
- var old = $.fn.button
225
-
226
- $.fn.button = function (option) {
227
- return this.each(function () {
228
- var $this = $(this)
229
- , data = $this.data('button')
230
- , options = typeof option == 'object' && option
231
- if (!data) $this.data('button', (data = new Button(this, options)))
232
- if (option == 'toggle') data.toggle()
233
- else if (option) data.setState(option)
234
- })
235
- }
236
-
237
- $.fn.button.defaults = {
238
- loadingText: 'loading...'
239
- }
240
-
241
- $.fn.button.Constructor = Button
242
-
243
-
244
- /* BUTTON NO CONFLICT
245
- * ================== */
246
-
247
- $.fn.button.noConflict = function () {
248
- $.fn.button = old
249
- return this
250
- }
251
-
252
-
253
- /* BUTTON DATA-API
254
- * =============== */
255
-
256
- $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
257
- var $btn = $(e.target)
258
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
259
- $btn.button('toggle')
260
- })
261
-
262
- }(window.jQuery);/* ==========================================================
263
- * bootstrap-carousel.js v2.3.1
264
- * http://twitter.github.com/bootstrap/javascript.html#carousel
265
- * ==========================================================
266
- * Copyright 2012 Twitter, Inc.
267
- *
268
- * Licensed under the Apache License, Version 2.0 (the "License");
269
- * you may not use this file except in compliance with the License.
270
- * You may obtain a copy of the License at
271
- *
272
- * http://www.apache.org/licenses/LICENSE-2.0
273
- *
274
- * Unless required by applicable law or agreed to in writing, software
275
- * distributed under the License is distributed on an "AS IS" BASIS,
276
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
277
- * See the License for the specific language governing permissions and
278
- * limitations under the License.
279
- * ========================================================== */
280
-
281
-
282
- !function ($) {
283
-
284
- "use strict"; // jshint ;_;
285
-
286
-
287
- /* CAROUSEL CLASS DEFINITION
288
- * ========================= */
289
-
290
- var Carousel = function (element, options) {
291
- this.$element = $(element)
292
- this.$indicators = this.$element.find('.carousel-indicators')
293
- this.options = options
294
- this.options.pause == 'hover' && this.$element
295
- .on('mouseenter', $.proxy(this.pause, this))
296
- .on('mouseleave', $.proxy(this.cycle, this))
297
- }
298
-
299
- Carousel.prototype = {
300
-
301
- cycle: function (e) {
302
- if (!e) this.paused = false
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
- }
309
-
310
- , getActiveIndex: function () {
311
- this.$active = this.$element.find('.item.active')
312
- this.$items = this.$active.parent().children()
313
- return this.$items.index(this.$active)
314
- }
315
-
316
- , to: function (pos) {
317
- var activeIndex = this.getActiveIndex()
318
- , that = this
319
-
320
- if (pos > (this.$items.length - 1) || pos < 0) return
321
-
322
- if (this.sliding) {
323
- return this.$element.one('slid', function () {
324
- that.to(pos)
325
- })
326
- }
327
-
328
- if (activeIndex == pos) {
329
- return this.pause().cycle()
330
- }
331
-
332
- return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
333
- }
334
-
335
- , pause: function (e) {
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
- }
345
-
346
- , next: function () {
347
- if (this.sliding) return
348
- return this.slide('next')
349
- }
350
-
351
- , prev: function () {
352
- if (this.sliding) return
353
- return this.slide('prev')
354
- }
355
-
356
- , slide: function (type, next) {
357
- var $active = this.$element.find('.item.active')
358
- , $next = next || $active[type]()
359
- , isCycling = this.interval
360
- , direction = type == 'next' ? 'left' : 'right'
361
- , fallback = type == 'next' ? 'first' : 'last'
362
- , that = this
363
- , e
364
-
365
- this.sliding = true
366
-
367
- isCycling && this.pause()
368
-
369
- $next = $next.length ? $next : this.$element.find('.item')[fallback]()
370
-
371
- e = $.Event('slide', {
372
- relatedTarget: $next[0]
373
- , direction: direction
374
- })
375
-
376
- if ($next.hasClass('active')) return
377
-
378
- if (this.$indicators.length) {
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
- }
385
-
386
- if ($.support.transition && this.$element.hasClass('slide')) {
387
- this.$element.trigger(e)
388
- if (e.isDefaultPrevented()) return
389
- $next.addClass(type)
390
- $next[0].offsetWidth // force reflow
391
- $active.addClass(direction)
392
- $next.addClass(direction)
393
- this.$element.one($.support.transition.end, function () {
394
- $next.removeClass([type, direction].join(' ')).addClass('active')
395
- $active.removeClass(['active', direction].join(' '))
396
- that.sliding = false
397
- setTimeout(function () { that.$element.trigger('slid') }, 0)
398
- })
399
- } else {
400
- this.$element.trigger(e)
401
- if (e.isDefaultPrevented()) return
402
- $active.removeClass('active')
403
- $next.addClass('active')
404
- this.sliding = false
405
- this.$element.trigger('slid')
406
- }
407
-
408
- isCycling && this.cycle()
409
-
410
- return this
411
- }
412
-
413
- }
414
-
415
-
416
- /* CAROUSEL PLUGIN DEFINITION
417
- * ========================== */
418
-
419
- var old = $.fn.carousel
420
-
421
- $.fn.carousel = function (option) {
422
- return this.each(function () {
423
- var $this = $(this)
424
- , data = $this.data('carousel')
425
- , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
426
- , action = typeof option == 'string' ? option : options.slide
427
- if (!data) $this.data('carousel', (data = new Carousel(this, options)))
428
- if (typeof option == 'number') data.to(option)
429
- else if (action) data[action]()
430
- else if (options.interval) data.pause().cycle()
431
- })
432
- }
433
-
434
- $.fn.carousel.defaults = {
435
- interval: 5000
436
- , pause: 'hover'
437
- }
438
-
439
- $.fn.carousel.Constructor = Carousel
440
-
441
-
442
- /* CAROUSEL NO CONFLICT
443
- * ==================== */
444
-
445
- $.fn.carousel.noConflict = function () {
446
- $.fn.carousel = old
447
- return this
448
- }
449
-
450
- /* CAROUSEL DATA-API
451
- * ================= */
452
-
453
- $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
454
- var $this = $(this), href
455
- , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
456
- , options = $.extend({}, $target.data(), $this.data())
457
- , slideIndex
458
-
459
- $target.carousel(options)
460
-
461
- if (slideIndex = $this.attr('data-slide-to')) {
462
- $target.data('carousel').pause().to(slideIndex).cycle()
463
- }
464
-
465
- e.preventDefault()
466
- })
467
-
468
- }(window.jQuery);/* =============================================================
469
- * bootstrap-collapse.js v2.3.1
470
- * http://twitter.github.com/bootstrap/javascript.html#collapse
471
- * =============================================================
472
- * Copyright 2012 Twitter, Inc.
473
- *
474
- * Licensed under the Apache License, Version 2.0 (the "License");
475
- * you may not use this file except in compliance with the License.
476
- * You may obtain a copy of the License at
477
- *
478
- * http://www.apache.org/licenses/LICENSE-2.0
479
- *
480
- * Unless required by applicable law or agreed to in writing, software
481
- * distributed under the License is distributed on an "AS IS" BASIS,
482
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
483
- * See the License for the specific language governing permissions and
484
- * limitations under the License.
485
- * ============================================================ */
486
-
487
-
488
- !function ($) {
489
-
490
- "use strict"; // jshint ;_;
491
-
492
-
493
- /* COLLAPSE PUBLIC CLASS DEFINITION
494
- * ================================ */
495
-
496
- var Collapse = function (element, options) {
497
- this.$element = $(element)
498
- this.options = $.extend({}, $.fn.collapse.defaults, options)
499
-
500
- if (this.options.parent) {
501
- this.$parent = $(this.options.parent)
502
- }
503
-
504
- this.options.toggle && this.toggle()
505
- }
506
-
507
- Collapse.prototype = {
508
-
509
- constructor: Collapse
510
-
511
- , dimension: function () {
512
- var hasWidth = this.$element.hasClass('width')
513
- return hasWidth ? 'width' : 'height'
514
- }
515
-
516
- , show: function () {
517
- var dimension
518
- , scroll
519
- , actives
520
- , hasData
521
-
522
- if (this.transitioning || this.$element.hasClass('in')) return
523
-
524
- dimension = this.dimension()
525
- scroll = $.camelCase(['scroll', dimension].join('-'))
526
- actives = this.$parent && this.$parent.find('> .accordion-group > .in')
527
-
528
- if (actives && actives.length) {
529
- hasData = actives.data('collapse')
530
- if (hasData && hasData.transitioning) return
531
- actives.collapse('hide')
532
- hasData || actives.data('collapse', null)
533
- }
534
-
535
- this.$element[dimension](0)
536
- this.transition('addClass', $.Event('show'), 'shown')
537
- $.support.transition && this.$element[dimension](this.$element[0][scroll])
538
- }
539
-
540
- , hide: function () {
541
- var dimension
542
- if (this.transitioning || !this.$element.hasClass('in')) return
543
- dimension = this.dimension()
544
- this.reset(this.$element[dimension]())
545
- this.transition('removeClass', $.Event('hide'), 'hidden')
546
- this.$element[dimension](0)
547
- }
548
-
549
- , reset: function (size) {
550
- var dimension = this.dimension()
551
-
552
- this.$element
553
- .removeClass('collapse')
554
- [dimension](size || 'auto')
555
- [0].offsetWidth
556
-
557
- this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
558
-
559
- return this
560
- }
561
-
562
- , transition: function (method, startEvent, completeEvent) {
563
- var that = this
564
- , complete = function () {
565
- if (startEvent.type == 'show') that.reset()
566
- that.transitioning = 0
567
- that.$element.trigger(completeEvent)
568
- }
569
-
570
- this.$element.trigger(startEvent)
571
-
572
- if (startEvent.isDefaultPrevented()) return
573
-
574
- this.transitioning = 1
575
-
576
- this.$element[method]('in')
577
-
578
- $.support.transition && this.$element.hasClass('collapse') ?
579
- this.$element.one($.support.transition.end, complete) :
580
- complete()
581
- }
582
-
583
- , toggle: function () {
584
- this[this.$element.hasClass('in') ? 'hide' : 'show']()
585
- }
586
-
587
- }
588
-
589
-
590
- /* COLLAPSE PLUGIN DEFINITION
591
- * ========================== */
592
-
593
- var old = $.fn.collapse
594
-
595
- $.fn.collapse = function (option) {
596
- return this.each(function () {
597
- var $this = $(this)
598
- , data = $this.data('collapse')
599
- , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
600
- if (!data) $this.data('collapse', (data = new Collapse(this, options)))
601
- if (typeof option == 'string') data[option]()
602
- })
603
- }
604
-
605
- $.fn.collapse.defaults = {
606
- toggle: true
607
- }
608
-
609
- $.fn.collapse.Constructor = Collapse
610
-
611
-
612
- /* COLLAPSE NO CONFLICT
613
- * ==================== */
614
-
615
- $.fn.collapse.noConflict = function () {
616
- $.fn.collapse = old
617
- return this
618
- }
619
-
620
-
621
- /* COLLAPSE DATA-API
622
- * ================= */
623
-
624
- $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
625
- var $this = $(this), href
626
- , target = $this.attr('data-target')
627
- || e.preventDefault()
628
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
629
- , option = $(target).data('collapse') ? 'toggle' : $this.data()
630
- $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
631
- $(target).collapse(option)
632
- })
633
-
634
- }(window.jQuery);/* ============================================================
635
- * bootstrap-dropdown.js v2.3.1
636
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
637
- * ============================================================
638
- * Copyright 2012 Twitter, Inc.
639
- *
640
- * Licensed under the Apache License, Version 2.0 (the "License");
641
- * you may not use this file except in compliance with the License.
642
- * You may obtain a copy of the License at
643
- *
644
- * http://www.apache.org/licenses/LICENSE-2.0
645
- *
646
- * Unless required by applicable law or agreed to in writing, software
647
- * distributed under the License is distributed on an "AS IS" BASIS,
648
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
649
- * See the License for the specific language governing permissions and
650
- * limitations under the License.
651
- * ============================================================ */
652
-
653
-
654
- !function ($) {
655
-
656
- "use strict"; // jshint ;_;
657
-
658
-
659
- /* DROPDOWN CLASS DEFINITION
660
- * ========================= */
661
-
662
- var toggle = '[data-toggle=dropdown]'
663
- , Dropdown = function (element) {
664
- var $el = $(element).on('click.dropdown.data-api', this.toggle)
665
- $('html').on('click.dropdown.data-api', function () {
666
- $el.parent().removeClass('open')
667
- })
668
- }
669
-
670
- Dropdown.prototype = {
671
-
672
- constructor: Dropdown
673
-
674
- , toggle: function (e) {
675
- var $this = $(this)
676
- , $parent
677
- , isActive
678
-
679
- if ($this.is('.disabled, :disabled')) return
680
-
681
- $parent = getParent($this)
682
-
683
- isActive = $parent.hasClass('open')
684
-
685
- clearMenus()
686
-
687
- if (!isActive) {
688
- $parent.toggleClass('open')
689
- }
690
-
691
- $this.focus()
692
-
693
- return false
694
- }
695
-
696
- , keydown: function (e) {
697
- var $this
698
- , $items
699
- , $active
700
- , $parent
701
- , isActive
702
- , index
703
-
704
- if (!/(38|40|27)/.test(e.keyCode)) return
705
-
706
- $this = $(this)
707
-
708
- e.preventDefault()
709
- e.stopPropagation()
710
-
711
- if ($this.is('.disabled, :disabled')) return
712
-
713
- $parent = getParent($this)
714
-
715
- isActive = $parent.hasClass('open')
716
-
717
- if (!isActive || (isActive && e.keyCode == 27)) {
718
- if (e.which == 27) $parent.find(toggle).focus()
719
- return $this.click()
720
- }
721
-
722
- $items = $('[role=menu] li:not(.divider):visible a', $parent)
723
-
724
- if (!$items.length) return
725
-
726
- index = $items.index($items.filter(':focus'))
727
-
728
- if (e.keyCode == 38 && index > 0) index-- // up
729
- if (e.keyCode == 40 && index < $items.length - 1) index++ // down
730
- if (!~index) index = 0
731
-
732
- $items
733
- .eq(index)
734
- .focus()
735
- }
736
-
737
- }
738
-
739
- function clearMenus() {
740
- $(toggle).each(function () {
741
- getParent($(this)).removeClass('open')
742
- })
743
- }
744
-
745
- function getParent($this) {
746
- var selector = $this.attr('data-target')
747
- , $parent
748
-
749
- if (!selector) {
750
- selector = $this.attr('href')
751
- selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
752
- }
753
-
754
- $parent = selector && $(selector)
755
-
756
- if (!$parent || !$parent.length) $parent = $this.parent()
757
-
758
- return $parent
759
- }
760
-
761
-
762
- /* DROPDOWN PLUGIN DEFINITION
763
- * ========================== */
764
-
765
- var old = $.fn.dropdown
766
-
767
- $.fn.dropdown = function (option) {
768
- return this.each(function () {
769
- var $this = $(this)
770
- , data = $this.data('dropdown')
771
- if (!data) $this.data('dropdown', (data = new Dropdown(this)))
772
- if (typeof option == 'string') data[option].call($this)
773
- })
774
- }
775
-
776
- $.fn.dropdown.Constructor = Dropdown
777
-
778
-
779
- /* DROPDOWN NO CONFLICT
780
- * ==================== */
781
-
782
- $.fn.dropdown.noConflict = function () {
783
- $.fn.dropdown = old
784
- return this
785
- }
786
-
787
-
788
- /* APPLY TO STANDARD DROPDOWN ELEMENTS
789
- * =================================== */
790
-
791
- $(document)
792
- .on('click.dropdown.data-api', clearMenus)
793
- .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
794
- .on('click.dropdown-menu', function (e) { e.stopPropagation() })
795
- .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
796
- .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
797
-
798
- }(window.jQuery);
799
- /* =========================================================
800
- * bootstrap-modal.js v2.3.1
801
- * http://twitter.github.com/bootstrap/javascript.html#modals
802
- * =========================================================
803
- * Copyright 2012 Twitter, Inc.
804
- *
805
- * Licensed under the Apache License, Version 2.0 (the "License");
806
- * you may not use this file except in compliance with the License.
807
- * You may obtain a copy of the License at
808
- *
809
- * http://www.apache.org/licenses/LICENSE-2.0
810
- *
811
- * Unless required by applicable law or agreed to in writing, software
812
- * distributed under the License is distributed on an "AS IS" BASIS,
813
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
814
- * See the License for the specific language governing permissions and
815
- * limitations under the License.
816
- * ========================================================= */
817
-
818
-
819
- !function ($) {
820
-
821
- "use strict"; // jshint ;_;
822
-
823
-
824
- /* MODAL CLASS DEFINITION
825
- * ====================== */
826
-
827
- var Modal = function (element, options) {
828
- this.options = options
829
- this.$element = $(element)
830
- .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
831
- this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
832
- }
833
-
834
- Modal.prototype = {
835
-
836
- constructor: Modal
837
-
838
- , toggle: function () {
839
- return this[!this.isShown ? 'show' : 'hide']()
840
- }
841
-
842
- , show: function () {
843
- var that = this
844
- , e = $.Event('show')
845
-
846
- this.$element.trigger(e)
847
-
848
- if (this.isShown || e.isDefaultPrevented()) return
849
-
850
- this.isShown = true
851
-
852
- this.escape()
853
-
854
- this.backdrop(function () {
855
- var transition = $.support.transition && that.$element.hasClass('fade')
856
-
857
- if (!that.$element.parent().length) {
858
- that.$element.appendTo(document.body) //don't move modals dom position
859
- }
860
-
861
- that.$element.show()
862
-
863
- if (transition) {
864
- that.$element[0].offsetWidth // force reflow
865
- }
866
-
867
- that.$element
868
- .addClass('in')
869
- .attr('aria-hidden', false)
870
-
871
- that.enforceFocus()
872
-
873
- transition ?
874
- that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
875
- that.$element.focus().trigger('shown')
876
-
877
- })
878
- }
879
-
880
- , hide: function (e) {
881
- e && e.preventDefault()
882
-
883
- var that = this
884
-
885
- e = $.Event('hide')
886
-
887
- this.$element.trigger(e)
888
-
889
- if (!this.isShown || e.isDefaultPrevented()) return
890
-
891
- this.isShown = false
892
-
893
- this.escape()
894
-
895
- $(document).off('focusin.modal')
896
-
897
- this.$element
898
- .removeClass('in')
899
- .attr('aria-hidden', true)
900
-
901
- $.support.transition && this.$element.hasClass('fade') ?
902
- this.hideWithTransition() :
903
- this.hideModal()
904
- }
905
-
906
- , enforceFocus: function () {
907
- var that = this
908
- $(document).on('focusin.modal', function (e) {
909
- if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
910
- that.$element.focus()
911
- }
912
- })
913
- }
914
-
915
- , escape: function () {
916
- var that = this
917
- if (this.isShown && this.options.keyboard) {
918
- this.$element.on('keyup.dismiss.modal', function ( e ) {
919
- e.which == 27 && that.hide()
920
- })
921
- } else if (!this.isShown) {
922
- this.$element.off('keyup.dismiss.modal')
923
- }
924
- }
925
-
926
- , hideWithTransition: function () {
927
- var that = this
928
- , timeout = setTimeout(function () {
929
- that.$element.off($.support.transition.end)
930
- that.hideModal()
931
- }, 500)
932
-
933
- this.$element.one($.support.transition.end, function () {
934
- clearTimeout(timeout)
935
- that.hideModal()
936
- })
937
- }
938
-
939
- , hideModal: function () {
940
- var that = this
941
- this.$element.hide()
942
- this.backdrop(function () {
943
- that.removeBackdrop()
944
- that.$element.trigger('hidden')
945
- })
946
- }
947
-
948
- , removeBackdrop: function () {
949
- this.$backdrop && this.$backdrop.remove()
950
- this.$backdrop = null
951
- }
952
-
953
- , backdrop: function (callback) {
954
- var that = this
955
- , animate = this.$element.hasClass('fade') ? 'fade' : ''
956
-
957
- if (this.isShown && this.options.backdrop) {
958
- var doAnimate = $.support.transition && animate
959
-
960
- this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
961
- .appendTo(document.body)
962
-
963
- this.$backdrop.click(
964
- this.options.backdrop == 'static' ?
965
- $.proxy(this.$element[0].focus, this.$element[0])
966
- : $.proxy(this.hide, this)
967
- )
968
-
969
- if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
970
-
971
- this.$backdrop.addClass('in')
972
-
973
- if (!callback) return
974
-
975
- doAnimate ?
976
- this.$backdrop.one($.support.transition.end, callback) :
977
- callback()
978
-
979
- } else if (!this.isShown && this.$backdrop) {
980
- this.$backdrop.removeClass('in')
981
-
982
- $.support.transition && this.$element.hasClass('fade')?
983
- this.$backdrop.one($.support.transition.end, callback) :
984
- callback()
985
-
986
- } else if (callback) {
987
- callback()
988
- }
989
- }
990
- }
991
-
992
-
993
- /* MODAL PLUGIN DEFINITION
994
- * ======================= */
995
-
996
- var old = $.fn.modal
997
-
998
- $.fn.modal = function (option) {
999
- return this.each(function () {
1000
- var $this = $(this)
1001
- , data = $this.data('modal')
1002
- , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
1003
- if (!data) $this.data('modal', (data = new Modal(this, options)))
1004
- if (typeof option == 'string') data[option]()
1005
- else if (options.show) data.show()
1006
- })
1007
- }
1008
-
1009
- $.fn.modal.defaults = {
1010
- backdrop: true
1011
- , keyboard: true
1012
- , show: true
1013
- }
1014
-
1015
- $.fn.modal.Constructor = Modal
1016
-
1017
-
1018
- /* MODAL NO CONFLICT
1019
- * ================= */
1020
-
1021
- $.fn.modal.noConflict = function () {
1022
- $.fn.modal = old
1023
- return this
1024
- }
1025
-
1026
-
1027
- /* MODAL DATA-API
1028
- * ============== */
1029
-
1030
- $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1031
- var $this = $(this)
1032
- , href = $this.attr('href')
1033
- , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1034
- , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1035
-
1036
- e.preventDefault()
1037
-
1038
- $target
1039
- .modal(option)
1040
- .one('hide', function () {
1041
- $this.focus()
1042
- })
1043
- })
1044
-
1045
- }(window.jQuery);
1046
- /* ===========================================================
1047
- * bootstrap-tooltip.js v2.3.1
1048
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
1049
- * Inspired by the original jQuery.tipsy by Jason Frame
1050
- * ===========================================================
1051
- * Copyright 2012 Twitter, Inc.
1052
- *
1053
- * Licensed under the Apache License, Version 2.0 (the "License");
1054
- * you may not use this file except in compliance with the License.
1055
- * You may obtain a copy of the License at
1056
- *
1057
- * http://www.apache.org/licenses/LICENSE-2.0
1058
- *
1059
- * Unless required by applicable law or agreed to in writing, software
1060
- * distributed under the License is distributed on an "AS IS" BASIS,
1061
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1062
- * See the License for the specific language governing permissions and
1063
- * limitations under the License.
1064
- * ========================================================== */
1065
-
1066
-
1067
- !function ($) {
1068
-
1069
- "use strict"; // jshint ;_;
1070
-
1071
-
1072
- /* TOOLTIP PUBLIC CLASS DEFINITION
1073
- * =============================== */
1074
-
1075
- var Tooltip = function (element, options) {
1076
- this.init('tooltip', element, options)
1077
- }
1078
-
1079
- Tooltip.prototype = {
1080
-
1081
- constructor: Tooltip
1082
-
1083
- , init: function (type, element, options) {
1084
- var eventIn
1085
- , eventOut
1086
- , triggers
1087
- , trigger
1088
- , i
1089
-
1090
- this.type = type
1091
- this.$element = $(element)
1092
- this.options = this.getOptions(options)
1093
- this.enabled = true
1094
-
1095
- triggers = this.options.trigger.split(' ')
1096
-
1097
- for (i = triggers.length; i--;) {
1098
- trigger = triggers[i]
1099
- if (trigger == 'click') {
1100
- this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1101
- } else if (trigger != 'manual') {
1102
- eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1103
- eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1104
- this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1105
- this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1106
- }
1107
- }
1108
-
1109
- this.options.selector ?
1110
- (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1111
- this.fixTitle()
1112
- }
1113
-
1114
- , getOptions: function (options) {
1115
- options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1116
-
1117
- if (options.delay && typeof options.delay == 'number') {
1118
- options.delay = {
1119
- show: options.delay
1120
- , hide: options.delay
1121
- }
1122
- }
1123
-
1124
- return options
1125
- }
1126
-
1127
- , enter: function (e) {
1128
- var defaults = $.fn[this.type].defaults
1129
- , options = {}
1130
- , self
1131
-
1132
- this._options && $.each(this._options, function (key, value) {
1133
- if (defaults[key] != value) options[key] = value
1134
- }, this)
1135
-
1136
- self = $(e.currentTarget)[this.type](options).data(this.type)
1137
-
1138
- if (!self.options.delay || !self.options.delay.show) return self.show()
1139
-
1140
- clearTimeout(this.timeout)
1141
- self.hoverState = 'in'
1142
- this.timeout = setTimeout(function() {
1143
- if (self.hoverState == 'in') self.show()
1144
- }, self.options.delay.show)
1145
- }
1146
-
1147
- , leave: function (e) {
1148
- var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1149
-
1150
- if (this.timeout) clearTimeout(this.timeout)
1151
- if (!self.options.delay || !self.options.delay.hide) return self.hide()
1152
-
1153
- self.hoverState = 'out'
1154
- this.timeout = setTimeout(function() {
1155
- if (self.hoverState == 'out') self.hide()
1156
- }, self.options.delay.hide)
1157
- }
1158
-
1159
- , show: function () {
1160
- var $tip
1161
- , pos
1162
- , actualWidth
1163
- , actualHeight
1164
- , placement
1165
- , tp
1166
- , e = $.Event('show')
1167
-
1168
- if (this.hasContent() && this.enabled) {
1169
- this.$element.trigger(e)
1170
- if (e.isDefaultPrevented()) return
1171
- $tip = this.tip()
1172
- this.setContent()
1173
-
1174
- if (this.options.animation) {
1175
- $tip.addClass('fade')
1176
- }
1177
-
1178
- placement = typeof this.options.placement == 'function' ?
1179
- this.options.placement.call(this, $tip[0], this.$element[0]) :
1180
- this.options.placement
1181
-
1182
- $tip
1183
- .detach()
1184
- .css({ top: 0, left: 0, display: 'block' })
1185
-
1186
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1187
-
1188
- pos = this.getPosition()
1189
-
1190
- actualWidth = $tip[0].offsetWidth
1191
- actualHeight = $tip[0].offsetHeight
1192
-
1193
- switch (placement) {
1194
- case 'bottom':
1195
- tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1196
- break
1197
- case 'top':
1198
- tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1199
- break
1200
- case 'left':
1201
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1202
- break
1203
- case 'right':
1204
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1205
- break
1206
- }
1207
-
1208
- this.applyPlacement(tp, placement)
1209
- this.$element.trigger('shown')
1210
- }
1211
- }
1212
-
1213
- , applyPlacement: function(offset, placement){
1214
- var $tip = this.tip()
1215
- , width = $tip[0].offsetWidth
1216
- , height = $tip[0].offsetHeight
1217
- , actualWidth
1218
- , actualHeight
1219
- , delta
1220
- , replace
1221
-
1222
- $tip
1223
- .offset(offset)
1224
- .addClass(placement)
1225
- .addClass('in')
1226
-
1227
- actualWidth = $tip[0].offsetWidth
1228
- actualHeight = $tip[0].offsetHeight
1229
-
1230
- if (placement == 'top' && actualHeight != height) {
1231
- offset.top = offset.top + height - actualHeight
1232
- replace = true
1233
- }
1234
-
1235
- if (placement == 'bottom' || placement == 'top') {
1236
- delta = 0
1237
-
1238
- if (offset.left < 0){
1239
- delta = offset.left * -2
1240
- offset.left = 0
1241
- $tip.offset(offset)
1242
- actualWidth = $tip[0].offsetWidth
1243
- actualHeight = $tip[0].offsetHeight
1244
- }
1245
-
1246
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1247
- } else {
1248
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
1249
- }
1250
-
1251
- if (replace) $tip.offset(offset)
1252
- }
1253
-
1254
- , replaceArrow: function(delta, dimension, position){
1255
- this
1256
- .arrow()
1257
- .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1258
- }
1259
-
1260
- , setContent: function () {
1261
- var $tip = this.tip()
1262
- , title = this.getTitle()
1263
-
1264
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1265
- $tip.removeClass('fade in top bottom left right')
1266
- }
1267
-
1268
- , hide: function () {
1269
- var that = this
1270
- , $tip = this.tip()
1271
- , e = $.Event('hide')
1272
-
1273
- this.$element.trigger(e)
1274
- if (e.isDefaultPrevented()) return
1275
-
1276
- $tip.removeClass('in')
1277
-
1278
- function removeWithAnimation() {
1279
- var timeout = setTimeout(function () {
1280
- $tip.off($.support.transition.end).detach()
1281
- }, 500)
1282
-
1283
- $tip.one($.support.transition.end, function () {
1284
- clearTimeout(timeout)
1285
- $tip.detach()
1286
- })
1287
- }
1288
-
1289
- $.support.transition && this.$tip.hasClass('fade') ?
1290
- removeWithAnimation() :
1291
- $tip.detach()
1292
-
1293
- this.$element.trigger('hidden')
1294
-
1295
- return this
1296
- }
1297
-
1298
- , fixTitle: function () {
1299
- var $e = this.$element
1300
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1301
- $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1302
- }
1303
- }
1304
-
1305
- , hasContent: function () {
1306
- return this.getTitle()
1307
- }
1308
-
1309
- , getPosition: function () {
1310
- var el = this.$element[0]
1311
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1312
- width: el.offsetWidth
1313
- , height: el.offsetHeight
1314
- }, this.$element.offset())
1315
- }
1316
-
1317
- , getTitle: function () {
1318
- var title
1319
- , $e = this.$element
1320
- , o = this.options
1321
-
1322
- title = $e.attr('data-original-title')
1323
- || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1324
-
1325
- return title
1326
- }
1327
-
1328
- , tip: function () {
1329
- return this.$tip = this.$tip || $(this.options.template)
1330
- }
1331
-
1332
- , arrow: function(){
1333
- return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1334
- }
1335
-
1336
- , validate: function () {
1337
- if (!this.$element[0].parentNode) {
1338
- this.hide()
1339
- this.$element = null
1340
- this.options = null
1341
- }
1342
- }
1343
-
1344
- , enable: function () {
1345
- this.enabled = true
1346
- }
1347
-
1348
- , disable: function () {
1349
- this.enabled = false
1350
- }
1351
-
1352
- , toggleEnabled: function () {
1353
- this.enabled = !this.enabled
1354
- }
1355
-
1356
- , toggle: function (e) {
1357
- var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1358
- self.tip().hasClass('in') ? self.hide() : self.show()
1359
- }
1360
-
1361
- , destroy: function () {
1362
- this.hide().$element.off('.' + this.type).removeData(this.type)
1363
- }
1364
-
1365
- }
1366
-
1367
-
1368
- /* TOOLTIP PLUGIN DEFINITION
1369
- * ========================= */
1370
-
1371
- var old = $.fn.tooltip
1372
-
1373
- $.fn.tooltip = function ( option ) {
1374
- return this.each(function () {
1375
- var $this = $(this)
1376
- , data = $this.data('tooltip')
1377
- , options = typeof option == 'object' && option
1378
- if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1379
- if (typeof option == 'string') data[option]()
1380
- })
1381
- }
1382
-
1383
- $.fn.tooltip.Constructor = Tooltip
1384
-
1385
- $.fn.tooltip.defaults = {
1386
- animation: true
1387
- , placement: 'top'
1388
- , selector: false
1389
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1390
- , trigger: 'hover focus'
1391
- , title: ''
1392
- , delay: 0
1393
- , html: false
1394
- , container: false
1395
- }
1396
-
1397
-
1398
- /* TOOLTIP NO CONFLICT
1399
- * =================== */
1400
-
1401
- $.fn.tooltip.noConflict = function () {
1402
- $.fn.tooltip = old
1403
- return this
1404
- }
1405
-
1406
- }(window.jQuery);
1407
- /* ===========================================================
1408
- * bootstrap-popover.js v2.3.1
1409
- * http://twitter.github.com/bootstrap/javascript.html#popovers
1410
- * ===========================================================
1411
- * Copyright 2012 Twitter, Inc.
1412
- *
1413
- * Licensed under the Apache License, Version 2.0 (the "License");
1414
- * you may not use this file except in compliance with the License.
1415
- * You may obtain a copy of the License at
1416
- *
1417
- * http://www.apache.org/licenses/LICENSE-2.0
1418
- *
1419
- * Unless required by applicable law or agreed to in writing, software
1420
- * distributed under the License is distributed on an "AS IS" BASIS,
1421
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1422
- * See the License for the specific language governing permissions and
1423
- * limitations under the License.
1424
- * =========================================================== */
1425
-
1426
-
1427
- !function ($) {
1428
-
1429
- "use strict"; // jshint ;_;
1430
-
1431
-
1432
- /* POPOVER PUBLIC CLASS DEFINITION
1433
- * =============================== */
1434
-
1435
- var Popover = function (element, options) {
1436
- this.init('popover', element, options)
1437
- }
1438
-
1439
-
1440
- /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1441
- ========================================== */
1442
-
1443
- Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1444
-
1445
- constructor: Popover
1446
-
1447
- , setContent: function () {
1448
- var $tip = this.tip()
1449
- , title = this.getTitle()
1450
- , content = this.getContent()
1451
-
1452
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1453
- $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1454
-
1455
- $tip.removeClass('fade top bottom left right in')
1456
- }
1457
-
1458
- , hasContent: function () {
1459
- return this.getTitle() || this.getContent()
1460
- }
1461
-
1462
- , getContent: function () {
1463
- var content
1464
- , $e = this.$element
1465
- , o = this.options
1466
-
1467
- content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1468
- || $e.attr('data-content')
1469
-
1470
- return content
1471
- }
1472
-
1473
- , tip: function () {
1474
- if (!this.$tip) {
1475
- this.$tip = $(this.options.template)
1476
- }
1477
- return this.$tip
1478
- }
1479
-
1480
- , destroy: function () {
1481
- this.hide().$element.off('.' + this.type).removeData(this.type)
1482
- }
1483
-
1484
- })
1485
-
1486
-
1487
- /* POPOVER PLUGIN DEFINITION
1488
- * ======================= */
1489
-
1490
- var old = $.fn.popover
1491
-
1492
- $.fn.popover = function (option) {
1493
- return this.each(function () {
1494
- var $this = $(this)
1495
- , data = $this.data('popover')
1496
- , options = typeof option == 'object' && option
1497
- if (!data) $this.data('popover', (data = new Popover(this, options)))
1498
- if (typeof option == 'string') data[option]()
1499
- })
1500
- }
1501
-
1502
- $.fn.popover.Constructor = Popover
1503
-
1504
- $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1505
- placement: 'right'
1506
- , trigger: 'click'
1507
- , content: ''
1508
- , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1509
- })
1510
-
1511
-
1512
- /* POPOVER NO CONFLICT
1513
- * =================== */
1514
-
1515
- $.fn.popover.noConflict = function () {
1516
- $.fn.popover = old
1517
- return this
1518
- }
1519
-
1520
- }(window.jQuery);
1521
- /* =============================================================
1522
- * bootstrap-scrollspy.js v2.3.1
1523
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1524
- * =============================================================
1525
- * Copyright 2012 Twitter, Inc.
1526
- *
1527
- * Licensed under the Apache License, Version 2.0 (the "License");
1528
- * you may not use this file except in compliance with the License.
1529
- * You may obtain a copy of the License at
1530
- *
1531
- * http://www.apache.org/licenses/LICENSE-2.0
1532
- *
1533
- * Unless required by applicable law or agreed to in writing, software
1534
- * distributed under the License is distributed on an "AS IS" BASIS,
1535
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1536
- * See the License for the specific language governing permissions and
1537
- * limitations under the License.
1538
- * ============================================================== */
1539
-
1540
-
1541
- !function ($) {
1542
-
1543
- "use strict"; // jshint ;_;
1544
-
1545
-
1546
- /* SCROLLSPY CLASS DEFINITION
1547
- * ========================== */
1548
-
1549
- function ScrollSpy(element, options) {
1550
- var process = $.proxy(this.process, this)
1551
- , $element = $(element).is('body') ? $(window) : $(element)
1552
- , href
1553
- this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1554
- this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1555
- this.selector = (this.options.target
1556
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1557
- || '') + ' .nav li > a'
1558
- this.$body = $('body')
1559
- this.refresh()
1560
- this.process()
1561
- }
1562
-
1563
- ScrollSpy.prototype = {
1564
-
1565
- constructor: ScrollSpy
1566
-
1567
- , refresh: function () {
1568
- var self = this
1569
- , $targets
1570
-
1571
- this.offsets = $([])
1572
- this.targets = $([])
1573
-
1574
- $targets = this.$body
1575
- .find(this.selector)
1576
- .map(function () {
1577
- var $el = $(this)
1578
- , href = $el.data('target') || $el.attr('href')
1579
- , $href = /^#\w/.test(href) && $(href)
1580
- return ( $href
1581
- && $href.length
1582
- && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
1583
- })
1584
- .sort(function (a, b) { return a[0] - b[0] })
1585
- .each(function () {
1586
- self.offsets.push(this[0])
1587
- self.targets.push(this[1])
1588
- })
1589
- }
1590
-
1591
- , process: function () {
1592
- var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1593
- , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1594
- , maxScroll = scrollHeight - this.$scrollElement.height()
1595
- , offsets = this.offsets
1596
- , targets = this.targets
1597
- , activeTarget = this.activeTarget
1598
- , i
1599
-
1600
- if (scrollTop >= maxScroll) {
1601
- return activeTarget != (i = targets.last()[0])
1602
- && this.activate ( i )
1603
- }
1604
-
1605
- for (i = offsets.length; i--;) {
1606
- activeTarget != targets[i]
1607
- && scrollTop >= offsets[i]
1608
- && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1609
- && this.activate( targets[i] )
1610
- }
1611
- }
1612
-
1613
- , activate: function (target) {
1614
- var active
1615
- , selector
1616
-
1617
- this.activeTarget = target
1618
-
1619
- $(this.selector)
1620
- .parent('.active')
1621
- .removeClass('active')
1622
-
1623
- selector = this.selector
1624
- + '[data-target="' + target + '"],'
1625
- + this.selector + '[href="' + target + '"]'
1626
-
1627
- active = $(selector)
1628
- .parent('li')
1629
- .addClass('active')
1630
-
1631
- if (active.parent('.dropdown-menu').length) {
1632
- active = active.closest('li.dropdown').addClass('active')
1633
- }
1634
-
1635
- active.trigger('activate')
1636
- }
1637
-
1638
- }
1639
-
1640
-
1641
- /* SCROLLSPY PLUGIN DEFINITION
1642
- * =========================== */
1643
-
1644
- var old = $.fn.scrollspy
1645
-
1646
- $.fn.scrollspy = function (option) {
1647
- return this.each(function () {
1648
- var $this = $(this)
1649
- , data = $this.data('scrollspy')
1650
- , options = typeof option == 'object' && option
1651
- if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1652
- if (typeof option == 'string') data[option]()
1653
- })
1654
- }
1655
-
1656
- $.fn.scrollspy.Constructor = ScrollSpy
1657
-
1658
- $.fn.scrollspy.defaults = {
1659
- offset: 10
1660
- }
1661
-
1662
-
1663
- /* SCROLLSPY NO CONFLICT
1664
- * ===================== */
1665
-
1666
- $.fn.scrollspy.noConflict = function () {
1667
- $.fn.scrollspy = old
1668
- return this
1669
- }
1670
-
1671
-
1672
- /* SCROLLSPY DATA-API
1673
- * ================== */
1674
-
1675
- $(window).on('load', function () {
1676
- $('[data-spy="scroll"]').each(function () {
1677
- var $spy = $(this)
1678
- $spy.scrollspy($spy.data())
1679
- })
1680
- })
1681
-
1682
- }(window.jQuery);/* ========================================================
1683
- * bootstrap-tab.js v2.3.1
1684
- * http://twitter.github.com/bootstrap/javascript.html#tabs
1685
- * ========================================================
1686
- * Copyright 2012 Twitter, Inc.
1687
- *
1688
- * Licensed under the Apache License, Version 2.0 (the "License");
1689
- * you may not use this file except in compliance with the License.
1690
- * You may obtain a copy of the License at
1691
- *
1692
- * http://www.apache.org/licenses/LICENSE-2.0
1693
- *
1694
- * Unless required by applicable law or agreed to in writing, software
1695
- * distributed under the License is distributed on an "AS IS" BASIS,
1696
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1697
- * See the License for the specific language governing permissions and
1698
- * limitations under the License.
1699
- * ======================================================== */
1700
-
1701
-
1702
- !function ($) {
1703
-
1704
- "use strict"; // jshint ;_;
1705
-
1706
-
1707
- /* TAB CLASS DEFINITION
1708
- * ==================== */
1709
-
1710
- var Tab = function (element) {
1711
- this.element = $(element)
1712
- }
1713
-
1714
- Tab.prototype = {
1715
-
1716
- constructor: Tab
1717
-
1718
- , show: function () {
1719
- var $this = this.element
1720
- , $ul = $this.closest('ul:not(.dropdown-menu)')
1721
- , selector = $this.attr('data-target')
1722
- , previous
1723
- , $target
1724
- , e
1725
-
1726
- if (!selector) {
1727
- selector = $this.attr('href')
1728
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1729
- }
1730
-
1731
- if ( $this.parent('li').hasClass('active') ) return
1732
-
1733
- previous = $ul.find('.active:last a')[0]
1734
-
1735
- e = $.Event('show', {
1736
- relatedTarget: previous
1737
- })
1738
-
1739
- $this.trigger(e)
1740
-
1741
- if (e.isDefaultPrevented()) return
1742
-
1743
- $target = $(selector)
1744
-
1745
- this.activate($this.parent('li'), $ul)
1746
- this.activate($target, $target.parent(), function () {
1747
- $this.trigger({
1748
- type: 'shown'
1749
- , relatedTarget: previous
1750
- })
1751
- })
1752
- }
1753
-
1754
- , activate: function ( element, container, callback) {
1755
- var $active = container.find('> .active')
1756
- , transition = callback
1757
- && $.support.transition
1758
- && $active.hasClass('fade')
1759
-
1760
- function next() {
1761
- $active
1762
- .removeClass('active')
1763
- .find('> .dropdown-menu > .active')
1764
- .removeClass('active')
1765
-
1766
- element.addClass('active')
1767
-
1768
- if (transition) {
1769
- element[0].offsetWidth // reflow for transition
1770
- element.addClass('in')
1771
- } else {
1772
- element.removeClass('fade')
1773
- }
1774
-
1775
- if ( element.parent('.dropdown-menu') ) {
1776
- element.closest('li.dropdown').addClass('active')
1777
- }
1778
-
1779
- callback && callback()
1780
- }
1781
-
1782
- transition ?
1783
- $active.one($.support.transition.end, next) :
1784
- next()
1785
-
1786
- $active.removeClass('in')
1787
- }
1788
- }
1789
-
1790
-
1791
- /* TAB PLUGIN DEFINITION
1792
- * ===================== */
1793
-
1794
- var old = $.fn.tab
1795
-
1796
- $.fn.tab = function ( option ) {
1797
- return this.each(function () {
1798
- var $this = $(this)
1799
- , data = $this.data('tab')
1800
- if (!data) $this.data('tab', (data = new Tab(this)))
1801
- if (typeof option == 'string') data[option]()
1802
- })
1803
- }
1804
-
1805
- $.fn.tab.Constructor = Tab
1806
-
1807
-
1808
- /* TAB NO CONFLICT
1809
- * =============== */
1810
-
1811
- $.fn.tab.noConflict = function () {
1812
- $.fn.tab = old
1813
- return this
1814
- }
1815
-
1816
-
1817
- /* TAB DATA-API
1818
- * ============ */
1819
-
1820
- $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1821
- e.preventDefault()
1822
- $(this).tab('show')
1823
- })
1824
-
1825
- }(window.jQuery);/* =============================================================
1826
- * bootstrap-typeahead.js v2.3.1-j6
1827
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
1828
- * =============================================================
1829
- * Copyright 2012 Twitter, Inc.
1830
- *
1831
- * Licensed under the Apache License, Version 2.0 (the "License");
1832
- * you may not use this file except in compliance with the License.
1833
- * You may obtain a copy of the License at
1834
- *
1835
- * http://www.apache.org/licenses/LICENSE-2.0
1836
- *
1837
- * Unless required by applicable law or agreed to in writing, software
1838
- * distributed under the License is distributed on an "AS IS" BASIS,
1839
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1840
- * See the License for the specific language governing permissions and
1841
- * limitations under the License.
1842
- * ============================================================ */
1843
-
1844
-
1845
- !function($){
1846
-
1847
- "use strict"; // jshint ;_;
1848
-
1849
-
1850
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
1851
- * ================================= */
1852
-
1853
- var Typeahead = function (element, options) {
1854
- this.$element = $(element)
1855
- this.options = $.extend({}, $.fn.typeahead.defaults, options)
1856
- if (this.options.target) this.$target = $(this.options.target)
1857
- this.matcher = this.options.matcher || this.matcher
1858
- this.sorter = this.options.sorter || this.sorter
1859
- this.highlighter = this.options.highlighter || this.highlighter
1860
- this.updater = this.options.updater || this.updater
1861
- this.source = this.options.source
1862
- this.strict = this.options.strict
1863
- this.$menu = $(this.options.menu)
1864
- this.shown = false
1865
-
1866
- if (typeof this.source == 'string') {
1867
- this.url = this.source
1868
- this.source = this.searchAjax
1869
- }
1870
-
1871
- if (element.nodeName == 'SELECT') this.replaceSelect()
1872
-
1873
- this.text = this.$element.val()
1874
-
1875
- this.$element
1876
- .attr('data-text', this.value)
1877
- .attr('autocomplete', "off")
1878
-
1879
- if (typeof this.$target != 'undefined') this.$element.attr('data-value', this.$target.val())
1880
- else if (typeof this.$element.attr('data-value') == 'undefined') this.$element.attr('data-value', this.strict ? '' : this.value)
1881
-
1882
- this.$menu.css('min-width', this.$element.width() + 12)
1883
-
1884
- this.listen()
1885
- }
1886
-
1887
- Typeahead.prototype = {
1888
-
1889
- constructor: Typeahead
1890
-
1891
- , replaceSelect: function () {
1892
- this.$target = this.$element
1893
- this.$element = $('<input type="text" />')
1894
-
1895
- this.source = {}
1896
- this.strict = true
1897
-
1898
- var options = this.$target.find('option')
1899
- var $option;
1900
- for (var i=0; i<options.length; i++) {
1901
- $option = $(options[i]);
1902
- if ($option.val() === '') {
1903
- this.$element.attr('placeholder', $option.html());
1904
- continue;
1905
- }
1906
-
1907
- this.source[$option.val()] = $option.html()
1908
- if (this.$target.val() == $option.val()) this.$element.val($option.html())
1909
- }
1910
-
1911
- var attr = this.$target[0].attributes
1912
- for (i=0; i<attr.length; i++) {
1913
- if (attr[i].nodeName != 'type' && attr[i].nodeName != 'name' && attr[i].nodeName != 'id' && attr[i].nodeName != 'data-provide' && !attr[i].nodeName.match(/^on/)) {
1914
- this.$element.attr(attr[i].nodeName, attr[i].nodeValue)
1915
- }
1916
- }
1917
-
1918
- this.$element.insertAfter(this.$target)
1919
- if (this.$target.attr('autofocus')) this.$element.trigger('focus').select()
1920
- this.$target.attr('autofocus', false)
1921
- this.$target.hide()
1922
- }
1923
-
1924
- , destroyReplacement: function () {
1925
- // Detroy replacement element, so it doesn't mess up the browsers autofill on refresh
1926
- if (typeof this.$target != 'undefined' && this.$target[0].nodeName == 'SELECT') {
1927
- this.$element.replaceWith('');
1928
- }
1929
- }
1930
-
1931
- , select: function () {
1932
- var li = this.$menu.find('.active')
1933
- , val = li.attr('data-value')
1934
- , text = li.find('.item-text').length > 0 ? li.find('.item-text').text() : li.text()
1935
-
1936
- val = this.updater(val, 'value')
1937
- text = this.updater(text, 'text')
1938
-
1939
- this.$element
1940
- .val(text)
1941
- .attr('data-value', val)
1942
-
1943
- this.text = text
1944
-
1945
- if (typeof this.$target != 'undefined') {
1946
- this.$target
1947
- .val(val)
1948
- .trigger('change')
1949
- }
1950
-
1951
- this.$element.trigger('change')
1952
-
1953
- return this.hide()
1954
- }
1955
-
1956
- , updater: function (text, type) {
1957
- return text
1958
- }
1959
-
1960
- , show: function () {
1961
- var pos = $.extend({}, this.$element.position(), {
1962
- height: this.$element[0].offsetHeight
1963
- })
1964
-
1965
- this.$menu
1966
- .insertAfter(this.$element)
1967
- .css({
1968
- top: pos.top + pos.height
1969
- , left: pos.left
1970
- })
1971
- .show()
1972
-
1973
- this.shown = true
1974
- return this
1975
- }
1976
-
1977
- , hide: function () {
1978
- this.$menu.hide()
1979
- this.shown = false
1980
- return this
1981
- }
1982
-
1983
- , lookup: function (event) {
1984
- var items
1985
-
1986
- this.query = this.$element.val()
1987
-
1988
- if (!this.query || this.query.length < this.options.minLength) {
1989
- return this.shown ? this.hide() : this
1990
- }
1991
-
1992
- items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1993
-
1994
- return items ? this.process(items) : this
1995
- }
1996
-
1997
- , process: function (items) {
1998
- return $.isArray(items) ? this.processArray(items) : this.processObject(items)
1999
- }
2000
-
2001
- , processArray: function (items) {
2002
- var that = this
2003
-
2004
- items = $.grep(items, function (item) {
2005
- return that.matcher(item)
2006
- })
2007
-
2008
- items = this.sorter(items)
2009
-
2010
- if (!items.length) {
2011
- return this.shown ? this.hide() : this
2012
- }
2013
-
2014
- return this.render(items.slice(0, this.options.items)).show()
2015
- }
2016
-
2017
- , processObject: function (itemsIn) {
2018
- var that = this
2019
- , items = {}
2020
- , i = 0
2021
-
2022
- $.each(itemsIn, function (key, item) {
2023
- if (that.matcher(item)) items[key] = item
2024
- })
2025
-
2026
- items = this.sorter(items)
2027
-
2028
- if ($.isEmptyObject(items)) {
2029
- return this.shown ? this.hide() : this
2030
- }
2031
-
2032
- $.each(items, function(key, item) {
2033
- if (i++ >= that.options.items) delete items[key]
2034
- })
2035
-
2036
- return this.render(items).show()
2037
- }
2038
-
2039
- , searchAjax: function (query, process) {
2040
- var that = this
2041
-
2042
- if (this.ajaxTimeout) clearTimeout(this.ajaxTimeout)
2043
-
2044
- this.ajaxTimeout = setTimeout(function () {
2045
- if (that.ajaxTimeout) clearTimeout(that.ajaxTimeout)
2046
-
2047
- if (query === "") {
2048
- that.hide()
2049
- return
2050
- }
2051
-
2052
- $.get(that.url, {'q': query, 'limit': that.options.items }, function (items) {
2053
- if (typeof items == 'string') items = JSON.parse(items)
2054
- process(items)
2055
- })
2056
- }, this.options.ajaxdelay)
2057
- }
2058
-
2059
- , matcher: function (item) {
2060
- return ~item.toLowerCase().indexOf(this.query.toLowerCase())
2061
- }
2062
-
2063
- , sorter: function (items) {
2064
- return $.isArray(items) ? this.sortArray(items) : this.sortObject(items)
2065
- }
2066
-
2067
- , sortArray: function (items) {
2068
- var beginswith = []
2069
- , caseSensitive = []
2070
- , caseInsensitive = []
2071
- , item
2072
-
2073
- while (item = items.shift()) {
2074
- if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
2075
- else if (~item.indexOf(this.query)) caseSensitive.push(item)
2076
- else caseInsensitive.push(item)
2077
- }
2078
-
2079
- return beginswith.concat(caseSensitive, caseInsensitive)
2080
- }
2081
-
2082
- , sortObject: function (items) {
2083
- var sorted = {}
2084
- , key;
2085
-
2086
- for (key in items) {
2087
- if (!items[key].toLowerCase().indexOf(this.query.toLowerCase())) {
2088
- sorted[key] = items[key];
2089
- delete items[key]
2090
- }
2091
- }
2092
-
2093
- for (key in items) {
2094
- if (~items[key].indexOf(this.query)) {
2095
- sorted[key] = items[key];
2096
- delete items[key]
2097
- }
2098
- }
2099
-
2100
- for (key in items) {
2101
- sorted[key] = items[key]
2102
- }
2103
-
2104
- return sorted
2105
- }
2106
-
2107
- , highlighter: function (item) {
2108
- var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
2109
- return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
2110
- return '<strong>' + match + '</strong>'
2111
- })
2112
- }
2113
-
2114
- , render: function (items) {
2115
- var that = this
2116
- , list = $([])
2117
-
2118
- $.map(items, function (item, value) {
2119
- if (list.length >= that.options.items) return
2120
-
2121
- var li
2122
- , a
2123
-
2124
- if ($.isArray(items)) value = item
2125
-
2126
- li = $(that.options.item)
2127
- a = li.find('a').length ? li.find('a') : li
2128
- a.html(that.highlighter(item))
2129
-
2130
- li.attr('data-value', value)
2131
- if (li.find('a').length === 0) li.addClass('dropdown-header')
2132
-
2133
- list.push(li[0])
2134
- })
2135
-
2136
- list.not('.dropdown-header').first().addClass('active')
2137
-
2138
- this.$menu.html(list)
2139
-
2140
- return this
2141
- }
2142
-
2143
- , next: function (event) {
2144
- var active = this.$menu.find('.active').removeClass('active')
2145
- , next = active.nextAll('li:not(.dropdown-header)').first()
2146
-
2147
- if (!next.length) {
2148
- next = $(this.$menu.find('li:not(.dropdown-header)')[0])
2149
- }
2150
-
2151
- next.addClass('active')
2152
- }
2153
-
2154
- , prev: function (event) {
2155
- var active = this.$menu.find('.active').removeClass('active')
2156
- , prev = active.prevAll('li:not(.dropdown-header)').first()
2157
-
2158
- if (!prev.length) {
2159
- prev = this.$menu.find('li:not(.dropdown-header)').last()
2160
- }
2161
-
2162
- prev.addClass('active')
2163
- }
2164
-
2165
- , listen: function () {
2166
- this.$element
2167
- .on('focus', $.proxy(this.focus, this))
2168
- .on('blur', $.proxy(this.blur, this))
2169
- .on('change', $.proxy(this.change, this))
2170
- .on('keypress', $.proxy(this.keypress, this))
2171
- .on('keyup', $.proxy(this.keyup, this))
2172
-
2173
- if (this.eventSupported('keydown')) {
2174
- this.$element.on('keydown', $.proxy(this.keydown, this))
2175
- }
2176
-
2177
- this.$menu
2178
- .on('click', $.proxy(this.click, this))
2179
- .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
2180
- .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
2181
-
2182
- $(window).on('unload', $.proxy(this.destroyReplacement, this))
2183
- }
2184
-
2185
- , eventSupported: function(eventName) {
2186
- var isSupported = eventName in this.$element
2187
- if (!isSupported) {
2188
- this.$element.setAttribute(eventName, 'return;')
2189
- isSupported = typeof this.$element[eventName] === 'function'
2190
- }
2191
- return isSupported
2192
- }
2193
-
2194
- , move: function (e) {
2195
- if (!this.shown) return
2196
-
2197
- switch(e.keyCode) {
2198
- case 9: // tab
2199
- case 13: // enter
2200
- case 27: // escape
2201
- e.preventDefault()
2202
- break
2203
-
2204
- case 38: // up arrow
2205
- e.preventDefault()
2206
- this.prev()
2207
- break
2208
-
2209
- case 40: // down arrow
2210
- e.preventDefault()
2211
- this.next()
2212
- break
2213
- }
2214
-
2215
- e.stopPropagation()
2216
- }
2217
-
2218
- , keydown: function (e) {
2219
- this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
2220
- this.move(e)
2221
- }
2222
-
2223
- , keypress: function (e) {
2224
- if (this.suppressKeyPressRepeat) return
2225
- this.move(e)
2226
- }
2227
-
2228
- , keyup: function (e) {
2229
- switch(e.keyCode) {
2230
- case 40: // down arrow
2231
- case 38: // up arrow
2232
- case 16: // shift
2233
- case 17: // ctrl
2234
- case 18: // alt
2235
- break
2236
-
2237
- case 9: // tab
2238
- case 13: // enter
2239
- if (!this.shown) return
2240
- this.select()
2241
- break
2242
-
2243
- case 27: // escape
2244
- if (!this.shown) return
2245
- this.hide()
2246
- break
2247
-
2248
- default:
2249
- this.lookup()
2250
- }
2251
-
2252
- e.stopPropagation()
2253
- e.preventDefault()
2254
- }
2255
-
2256
- , change: function (e) {
2257
- var value
2258
-
2259
- if (this.$element.val() != this.text) {
2260
- value = this.$element.val() === '' || this.strict ? '' : this.$element.val()
2261
-
2262
- this.$element.val(value)
2263
- this.$element.attr('data-value', value)
2264
- this.text = value
2265
- if (typeof this.$target != 'undefined') this.$target.val(value)
2266
- }
2267
- }
2268
-
2269
- , focus: function (e) {
2270
- this.focused = true
2271
- }
2272
-
2273
- , blur: function (e) {
2274
- this.focused = false
2275
- if (!this.mousedover && this.shown) this.hide()
2276
- }
2277
-
2278
- , click: function (e) {
2279
- e.stopPropagation()
2280
- e.preventDefault()
2281
- this.select()
2282
- this.$element.focus()
2283
- }
2284
-
2285
- , mouseenter: function (e) {
2286
- this.mousedover = true
2287
- this.$menu.find('.active').removeClass('active')
2288
- $(e.currentTarget).addClass('active')
2289
- }
2290
-
2291
- , mouseleave: function (e) {
2292
- this.mousedover = false
2293
- if (!this.focused && this.shown) this.hide()
2294
- }
2295
-
2296
- }
2297
-
2298
-
2299
- /* TYPEAHEAD PLUGIN DEFINITION
2300
- * =========================== */
2301
-
2302
- var old = $.fn.typeahead
2303
-
2304
- $.fn.typeahead = function (option) {
2305
- return this.each(function () {
2306
- var $this = $(this)
2307
- , data = $this.data('typeahead')
2308
- , options = typeof option == 'object' && option
2309
- if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
2310
- if (typeof option == 'string') data[option]()
2311
- })
2312
- }
2313
-
2314
- $.fn.typeahead.defaults = {
2315
- source: []
2316
- , items: 8
2317
- , menu: '<ul class="typeahead dropdown-menu"></ul>'
2318
- , item: '<li><a href="#"></a></li>'
2319
- , ajaxdelay: 400
2320
- , minLength: 1
2321
- }
2322
-
2323
- $.fn.typeahead.Constructor = Typeahead
2324
-
2325
-
2326
- /* TYPEAHEAD NO CONFLICT
2327
- * =================== */
2328
-
2329
- $.fn.typeahead.noConflict = function () {
2330
- $.fn.typeahead = old
2331
- return this
2332
- }
2333
-
2334
-
2335
- /* TYPEAHEAD DATA-API
2336
- * ================== */
2337
-
2338
- $(document)
2339
- .off('focus.typeahead.data-api') // overwriting Twitter's typeahead
2340
- .on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
2341
- var $this = $(this)
2342
- if ($this.data('typeahead')) return
2343
- if ($this.is('select')) $this.attr('autofocus', true)
2344
- e.preventDefault()
2345
- $this.typeahead($this.data())
2346
- })
2347
-
2348
- }(window.jQuery);
2349
- /* ===========================================================
2350
- * bootstrap-inputmask.js j2
2351
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
2352
- * Based on Masked Input plugin by Josh Bush (digitalbush.com)
2353
- * ===========================================================
2354
- * Copyright 2012 Jasny BV, Netherlands.
2355
- *
2356
- * Licensed under the Apache License, Version 2.0 (the "License")
2357
- * you may not use this file except in compliance with the License.
2358
- * You may obtain a copy of the License at
2359
- *
2360
- * http://www.apache.org/licenses/LICENSE-2.0
2361
- *
2362
- * Unless required by applicable law or agreed to in writing, software
2363
- * distributed under the License is distributed on an "AS IS" BASIS,
2364
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2365
- * See the License for the specific language governing permissions and
2366
- * limitations under the License.
2367
- * ========================================================== */
2368
-
2369
- !function ($) {
2370
-
2371
- "use strict"; // jshint ;_;
2372
-
2373
- var isIphone = (window.orientation !== undefined),
2374
- isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
2375
-
2376
-
2377
- /* INPUTMASK PUBLIC CLASS DEFINITION
2378
- * ================================= */
2379
-
2380
- var Inputmask = function (element, options) {
2381
- if (isAndroid) return // No support because caret positioning doesn't work on Android
2382
-
2383
- this.$element = $(element)
2384
- this.options = $.extend({}, $.fn.inputmask.defaults, options)
2385
- this.mask = String(options.mask)
2386
-
2387
- this.init()
2388
- this.listen()
2389
-
2390
- this.checkVal() //Perform initial check for existing values
2391
- }
2392
-
2393
- Inputmask.prototype = {
2394
-
2395
- init: function() {
2396
- var defs = this.options.definitions
2397
- var len = this.mask.length
2398
-
2399
- this.tests = []
2400
- this.partialPosition = this.mask.length
2401
- this.firstNonMaskPos = null
2402
-
2403
- $.each(this.mask.split(""), $.proxy(function(i, c) {
2404
- if (c == '?') {
2405
- len--
2406
- this.partialPosition = i
2407
- } else if (defs[c]) {
2408
- this.tests.push(new RegExp(defs[c]))
2409
- if(this.firstNonMaskPos === null)
2410
- this.firstNonMaskPos = this.tests.length - 1
2411
- } else {
2412
- this.tests.push(null)
2413
- }
2414
- }, this))
2415
-
2416
- this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
2417
- if (c != '?') return defs[c] ? this.options.placeholder : c
2418
- }, this))
2419
-
2420
- this.focusText = this.$element.val()
2421
-
2422
- this.$element.data("rawMaskFn", $.proxy(function() {
2423
- return $.map(this.buffer, function(c, i) {
2424
- return this.tests[i] && c != this.options.placeholder ? c : null
2425
- }).join('')
2426
- }, this))
2427
- },
2428
-
2429
- listen: function() {
2430
- if (this.$element.attr("readonly")) return
2431
-
2432
- var pasteEventName = (navigator.userAgent.match(/msie/i) ? 'paste' : 'input') + ".mask"
2433
-
2434
- this.$element
2435
- .on("unmask", $.proxy(this.unmask, this))
2436
-
2437
- .on("focus.mask", $.proxy(this.focusEvent, this))
2438
- .on("blur.mask", $.proxy(this.blurEvent, this))
2439
-
2440
- .on("keydown.mask", $.proxy(this.keydownEvent, this))
2441
- .on("keypress.mask", $.proxy(this.keypressEvent, this))
2442
-
2443
- .on(pasteEventName, $.proxy(this.pasteEvent, this))
2444
- },
2445
-
2446
- //Helper Function for Caret positioning
2447
- caret: function(begin, end) {
2448
- if (this.$element.length === 0) return
2449
- if (typeof begin == 'number') {
2450
- end = (typeof end == 'number') ? end : begin
2451
- return this.$element.each(function() {
2452
- if (this.setSelectionRange) {
2453
- this.setSelectionRange(begin, end)
2454
- } else if (this.createTextRange) {
2455
- var range = this.createTextRange()
2456
- range.collapse(true)
2457
- range.moveEnd('character', end)
2458
- range.moveStart('character', begin)
2459
- range.select()
2460
- }
2461
- })
2462
- } else {
2463
- if (this.$element[0].setSelectionRange) {
2464
- begin = this.$element[0].selectionStart
2465
- end = this.$element[0].selectionEnd
2466
- } else if (document.selection && document.selection.createRange) {
2467
- var range = document.selection.createRange()
2468
- begin = 0 - range.duplicate().moveStart('character', -100000)
2469
- end = begin + range.text.length
2470
- }
2471
- return {
2472
- begin: begin,
2473
- end: end
2474
- }
2475
- }
2476
- },
2477
-
2478
- seekNext: function(pos) {
2479
- var len = this.mask.length
2480
- while (++pos <= len && !this.tests[pos]);
2481
-
2482
- return pos
2483
- },
2484
-
2485
- seekPrev: function(pos) {
2486
- while (--pos >= 0 && !this.tests[pos]);
2487
-
2488
- return pos
2489
- },
2490
-
2491
- shiftL: function(begin,end) {
2492
- var len = this.mask.length
2493
-
2494
- if(begin<0) return
2495
-
2496
- for (var i = begin,j = this.seekNext(end); i < len; i++) {
2497
- if (this.tests[i]) {
2498
- if (j < len && this.tests[i].test(this.buffer[j])) {
2499
- this.buffer[i] = this.buffer[j]
2500
- this.buffer[j] = this.options.placeholder
2501
- } else
2502
- break
2503
- j = this.seekNext(j)
2504
- }
2505
- }
2506
- this.writeBuffer()
2507
- this.caret(Math.max(this.firstNonMaskPos, begin))
2508
- },
2509
-
2510
- shiftR: function(pos) {
2511
- var len = this.mask.length
2512
-
2513
- for (var i = pos, c = this.options.placeholder; i < len; i++) {
2514
- if (this.tests[i]) {
2515
- var j = this.seekNext(i)
2516
- var t = this.buffer[i]
2517
- this.buffer[i] = c
2518
- if (j < len && this.tests[j].test(t))
2519
- c = t
2520
- else
2521
- break
2522
- }
2523
- }
2524
- },
2525
-
2526
- unmask: function() {
2527
- this.$element
2528
- .unbind(".mask")
2529
- .removeData("inputmask")
2530
- },
2531
-
2532
- focusEvent: function() {
2533
- this.focusText = this.$element.val()
2534
- var len = this.mask.length
2535
- var pos = this.checkVal()
2536
- this.writeBuffer()
2537
-
2538
- var that = this
2539
- var moveCaret = function() {
2540
- if (pos == len)
2541
- that.caret(0, pos)
2542
- else
2543
- that.caret(pos)
2544
- }
2545
-
2546
- if ($.browser.msie)
2547
- moveCaret()
2548
- else
2549
- setTimeout(moveCaret, 0)
2550
- },
2551
-
2552
- blurEvent: function() {
2553
- this.checkVal()
2554
- if (this.$element.val() != this.focusText)
2555
- this.$element.trigger('change')
2556
- },
2557
-
2558
- keydownEvent: function(e) {
2559
- var k=e.which
2560
-
2561
- //backspace, delete, and escape get special treatment
2562
- if (k == 8 || k == 46 || (isIphone && k == 127)) {
2563
- var pos = this.caret(),
2564
- begin = pos.begin,
2565
- end = pos.end
2566
-
2567
- if (end-begin === 0) {
2568
- begin = k!=46 ? this.seekPrev(begin) : (end=this.seekNext(begin-1))
2569
- end = k==46 ? this.seekNext(end) : end
2570
- }
2571
- this.clearBuffer(begin, end)
2572
- this.shiftL(begin,end-1)
2573
-
2574
- return false
2575
- } else if (k == 27) {//escape
2576
- this.$element.val(this.focusText)
2577
- this.caret(0, this.checkVal())
2578
- return false
2579
- }
2580
- },
2581
-
2582
- keypressEvent: function(e) {
2583
- var len = this.mask.length
2584
-
2585
- var k = e.which,
2586
- pos = this.caret()
2587
-
2588
- if (e.ctrlKey || e.altKey || e.metaKey || k<32) {//Ignore
2589
- return true
2590
- } else if (k) {
2591
- if (pos.end - pos.begin !== 0) {
2592
- this.clearBuffer(pos.begin, pos.end)
2593
- this.shiftL(pos.begin, pos.end-1)
2594
- }
2595
-
2596
- var p = this.seekNext(pos.begin - 1)
2597
- if (p < len) {
2598
- var c = String.fromCharCode(k)
2599
- if (this.tests[p].test(c)) {
2600
- this.shiftR(p)
2601
- this.buffer[p] = c
2602
- this.writeBuffer()
2603
- var next = this.seekNext(p)
2604
- this.caret(next)
2605
- }
2606
- }
2607
- return false
2608
- }
2609
- },
2610
-
2611
- pasteEvent: function() {
2612
- var that = this
2613
-
2614
- setTimeout(function() {
2615
- that.caret(that.checkVal(true))
2616
- }, 0)
2617
- },
2618
-
2619
- clearBuffer: function(start, end) {
2620
- var len = this.mask.length
2621
-
2622
- for (var i = start; i < end && i < len; i++) {
2623
- if (this.tests[i])
2624
- this.buffer[i] = this.options.placeholder
2625
- }
2626
- },
2627
-
2628
- writeBuffer: function() {
2629
- return this.$element.val(this.buffer.join('')).val()
2630
- },
2631
-
2632
- checkVal: function(allow) {
2633
- var len = this.mask.length
2634
- //try to place characters where they belong
2635
- var test = this.$element.val()
2636
- var lastMatch = -1
2637
-
2638
- for (var i = 0, pos = 0; i < len; i++) {
2639
- if (this.tests[i]) {
2640
- this.buffer[i] = this.options.placeholder
2641
- while (pos++ < test.length) {
2642
- var c = test.charAt(pos - 1)
2643
- if (this.tests[i].test(c)) {
2644
- this.buffer[i] = c
2645
- lastMatch = i
2646
- break
2647
- }
2648
- }
2649
- if (pos > test.length)
2650
- break
2651
- } else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
2652
- pos++
2653
- lastMatch = i
2654
- }
2655
- }
2656
- if (!allow && lastMatch + 1 < this.partialPosition) {
2657
- this.$element.val("")
2658
- this.clearBuffer(0, len)
2659
- } else if (allow || lastMatch + 1 >= this.partialPosition) {
2660
- this.writeBuffer()
2661
- if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
2662
- }
2663
- return (this.partialPosition ? i : this.firstNonMaskPos)
2664
- }
2665
- }
2666
-
2667
-
2668
- /* INPUTMASK PLUGIN DEFINITION
2669
- * =========================== */
2670
-
2671
- $.fn.inputmask = function (options) {
2672
- return this.each(function () {
2673
- var $this = $(this)
2674
- , data = $this.data('inputmask')
2675
- if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
2676
- })
2677
- }
2678
-
2679
- $.fn.inputmask.defaults = {
2680
- mask: "",
2681
- placeholder: "_",
2682
- definitions: {
2683
- '9': "[0-9]",
2684
- 'a': "[A-Za-z]",
2685
- '?': "[A-Za-z0-9]",
2686
- '*': "."
2687
- }
2688
- }
2689
-
2690
- $.fn.inputmask.Constructor = Inputmask
2691
-
2692
-
2693
- /* INPUTMASK DATA-API
2694
- * ================== */
2695
-
2696
- $(document).on('focus.inputmask.data-api', '[data-mask]', function (e) {
2697
- var $this = $(this)
2698
- if ($this.data('inputmask')) return
2699
- e.preventDefault()
2700
- $this.inputmask($this.data())
2701
- })
2702
-
2703
- }(window.jQuery);
2704
- /* ============================================================
2705
- * bootstrap-rowlink.js j1
2706
- * http://jasny.github.com/bootstrap/javascript.html#rowlink
2707
- * ============================================================
2708
- * Copyright 2012 Jasny BV, Netherlands.
2709
- *
2710
- * Licensed under the Apache License, Version 2.0 (the "License");
2711
- * you may not use this file except in compliance with the License.
2712
- * You may obtain a copy of the License at
2713
- *
2714
- * http://www.apache.org/licenses/LICENSE-2.0
2715
- *
2716
- * Unless required by applicable law or agreed to in writing, software
2717
- * distributed under the License is distributed on an "AS IS" BASIS,
2718
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2719
- * See the License for the specific language governing permissions and
2720
- * limitations under the License.
2721
- * ============================================================ */
2722
-
2723
- !function ($) {
2724
-
2725
- "use strict"; // jshint ;_;
2726
-
2727
- var Rowlink = function (element, options) {
2728
- options = $.extend({}, $.fn.rowlink.defaults, options)
2729
- var tr = element.nodeName.toLowerCase() == 'tr' ? $(element) : $(element).find('tr:has(td)')
2730
-
2731
- tr.each(function() {
2732
- var link = $(this).find(options.target).first()
2733
- if (!link.length) return
2734
-
2735
- var href = link.attr('href')
2736
-
2737
- $(this).find('td').not('.nolink').click(function() {
2738
- window.location = href;
2739
- })
2740
-
2741
- $(this).addClass('rowlink')
2742
- link.replaceWith(link.html())
2743
- })
2744
- }
2745
-
2746
-
2747
- /* ROWLINK PLUGIN DEFINITION
2748
- * =========================== */
2749
-
2750
- $.fn.rowlink = function (options) {
2751
- return this.each(function () {
2752
- var $this = $(this)
2753
- , data = $this.data('rowlink')
2754
- if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
2755
- })
2756
- }
2757
-
2758
- $.fn.rowlink.defaults = {
2759
- target: "a"
2760
- }
2761
-
2762
- $.fn.rowlink.Constructor = Rowlink
2763
-
2764
-
2765
- /* ROWLINK DATA-API
2766
- * ================== */
2767
-
2768
- $(function () {
2769
- $('[data-provide="rowlink"],[data-provides="rowlink"]').each(function () {
2770
- $(this).rowlink($(this).data())
2771
- })
2772
- })
2773
-
2774
- }(window.jQuery);
2775
- /* ===========================================================
2776
- * bootstrap-fileupload.js j2
2777
- * http://jasny.github.com/bootstrap/javascript.html#fileupload
2778
- * ===========================================================
2779
- * Copyright 2012 Jasny BV, Netherlands.
2780
- *
2781
- * Licensed under the Apache License, Version 2.0 (the "License")
2782
- * you may not use this file except in compliance with the License.
2783
- * You may obtain a copy of the License at
2784
- *
2785
- * http://www.apache.org/licenses/LICENSE-2.0
2786
- *
2787
- * Unless required by applicable law or agreed to in writing, software
2788
- * distributed under the License is distributed on an "AS IS" BASIS,
2789
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2790
- * See the License for the specific language governing permissions and
2791
- * limitations under the License.
2792
- * ========================================================== */
2793
-
2794
- !function ($) {
2795
-
2796
- "use strict"; // jshint ;_
2797
-
2798
- /* FILEUPLOAD PUBLIC CLASS DEFINITION
2799
- * ================================= */
2800
-
2801
- var Fileupload = function (element, options) {
2802
- this.$element = $(element)
2803
- this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
2804
-
2805
- this.$input = this.$element.find(':file')
2806
- if (this.$input.length === 0) return
2807
-
2808
- this.name = this.$input.attr('name') || options.name
2809
-
2810
- this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
2811
- if (this.$hidden.length === 0) {
2812
- this.$hidden = $('<input type="hidden" />')
2813
- this.$element.prepend(this.$hidden)
2814
- }
2815
-
2816
- this.$preview = this.$element.find('.fileupload-preview')
2817
- var height = this.$preview.css('height')
2818
- if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
2819
-
2820
- this.original = {
2821
- 'exists': this.$element.hasClass('fileupload-exists'),
2822
- 'preview': this.$preview.html(),
2823
- 'hiddenVal': this.$hidden.val()
2824
- }
2825
-
2826
- this.$remove = this.$element.find('[data-dismiss="fileupload"]')
2827
-
2828
- this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
2829
-
2830
- this.listen()
2831
- }
2832
-
2833
- Fileupload.prototype = {
2834
-
2835
- listen: function() {
2836
- this.$input.on('change.fileupload', $.proxy(this.change, this))
2837
- $(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
2838
- if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
2839
- },
2840
-
2841
- change: function(e, invoked) {
2842
- if (invoked === 'clear') return
2843
-
2844
- var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
2845
-
2846
- if (!file) {
2847
- this.clear()
2848
- return
2849
- }
2850
-
2851
- this.$hidden.val('')
2852
- this.$hidden.attr('name', '')
2853
- this.$input.attr('name', this.name)
2854
-
2855
- if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
2856
- var reader = new FileReader()
2857
- var preview = this.$preview
2858
- var element = this.$element
2859
-
2860
- reader.onload = function(e) {
2861
- preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
2862
- element.addClass('fileupload-exists').removeClass('fileupload-new')
2863
- }
2864
-
2865
- reader.readAsDataURL(file)
2866
- } else {
2867
- this.$preview.text(file.name)
2868
- this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
2869
- }
2870
- },
2871
-
2872
- clear: function(e) {
2873
- this.$hidden.val('')
2874
- this.$hidden.attr('name', this.name)
2875
- this.$input.attr('name', '')
2876
-
2877
- //ie8+ doesn't support changing the value of input with type=file so clone instead
2878
- if (navigator.userAgent.match(/msie/i)){
2879
- var inputClone = this.$input.clone(true);
2880
- this.$input.after(inputClone);
2881
- this.$input.remove();
2882
- this.$input = inputClone;
2883
- }else{
2884
- this.$input.val('')
2885
- }
2886
-
2887
- this.$preview.html('')
2888
- this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
2889
-
2890
- if (e) {
2891
- this.$input.trigger('change', [ 'clear' ])
2892
- e.preventDefault()
2893
- }
2894
- },
2895
-
2896
- reset: function(e) {
2897
- this.clear()
2898
-
2899
- this.$hidden.val(this.original.hiddenVal)
2900
- this.$preview.html(this.original.preview)
2901
-
2902
- if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
2903
- else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
2904
- },
2905
-
2906
- trigger: function(e) {
2907
- this.$input.trigger('click')
2908
- e.preventDefault()
2909
- }
2910
- }
2911
-
2912
-
2913
- /* FILEUPLOAD PLUGIN DEFINITION
2914
- * =========================== */
2915
-
2916
- $.fn.fileupload = function (options) {
2917
- return this.each(function () {
2918
- var $this = $(this)
2919
- , data = $this.data('fileupload')
2920
- if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
2921
- if (typeof options == 'string') data[options]()
2922
- })
2923
- }
2924
-
2925
- $.fn.fileupload.Constructor = Fileupload
2926
-
2927
-
2928
- /* FILEUPLOAD DATA-API
2929
- * ================== */
2930
-
2931
- $(document).on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
2932
- var $this = $(this)
2933
- if ($this.data('fileupload')) return
2934
- $this.fileupload($this.data())
2935
-
2936
- var $target = $(e.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');
2937
- if ($target.length > 0) {
2938
- $target.trigger('click.fileupload')
2939
- e.preventDefault()
2940
- }
2941
- })
2942
-
2943
- }(window.jQuery);
2944
- /* ==========================================================
2945
- * bootstrap-affix.js v2.3.1
2946
- * http://twitter.github.com/bootstrap/javascript.html#affix
2947
- * ==========================================================
2948
- * Copyright 2012 Twitter, Inc.
2949
- *
2950
- * Licensed under the Apache License, Version 2.0 (the "License");
2951
- * you may not use this file except in compliance with the License.
2952
- * You may obtain a copy of the License at
2953
- *
2954
- * http://www.apache.org/licenses/LICENSE-2.0
2955
- *
2956
- * Unless required by applicable law or agreed to in writing, software
2957
- * distributed under the License is distributed on an "AS IS" BASIS,
2958
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2959
- * See the License for the specific language governing permissions and
2960
- * limitations under the License.
2961
- * ========================================================== */
2962
-
2963
-
2964
- !function ($) {
2965
-
2966
- "use strict"; // jshint ;_;
2967
-
2968
-
2969
- /* AFFIX CLASS DEFINITION
2970
- * ====================== */
2971
-
2972
- var Affix = function (element, options) {
2973
- this.options = $.extend({}, $.fn.affix.defaults, options)
2974
- this.$window = $(window)
2975
- .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
2976
- .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
2977
- this.$element = $(element)
2978
- this.checkPosition()
2979
- }
2980
-
2981
- Affix.prototype.checkPosition = function () {
2982
- if (!this.$element.is(':visible')) return
2983
-
2984
- var scrollHeight = $(document).height()
2985
- , scrollTop = this.$window.scrollTop()
2986
- , position = this.$element.offset()
2987
- , offset = this.options.offset
2988
- , offsetBottom = offset.bottom
2989
- , offsetTop = offset.top
2990
- , reset = 'affix affix-top affix-bottom'
2991
- , affix
2992
-
2993
- if (typeof offset != 'object') offsetBottom = offsetTop = offset
2994
- if (typeof offsetTop == 'function') offsetTop = offset.top()
2995
- if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
2996
-
2997
- affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
2998
- false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
2999
- 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
3000
- 'top' : false
3001
-
3002
- if (this.affixed === affix) return
3003
-
3004
- this.affixed = affix
3005
- this.unpin = affix == 'bottom' ? position.top - scrollTop : null
3006
-
3007
- this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
3008
- }
3009
-
3010
-
3011
- /* AFFIX PLUGIN DEFINITION
3012
- * ======================= */
3013
-
3014
- var old = $.fn.affix
3015
-
3016
- $.fn.affix = function (option) {
3017
- return this.each(function () {
3018
- var $this = $(this)
3019
- , data = $this.data('affix')
3020
- , options = typeof option == 'object' && option
3021
- if (!data) $this.data('affix', (data = new Affix(this, options)))
3022
- if (typeof option == 'string') data[option]()
3023
- })
3024
- }
3025
-
3026
- $.fn.affix.Constructor = Affix
3027
-
3028
- $.fn.affix.defaults = {
3029
- offset: 0
3030
- }
3031
-
3032
-
3033
- /* AFFIX NO CONFLICT
3034
- * ================= */
3035
-
3036
- $.fn.affix.noConflict = function () {
3037
- $.fn.affix = old
3038
- return this
3039
- }
3040
-
3041
-
3042
- /* AFFIX DATA-API
3043
- * ============== */
3044
-
3045
- $(window).on('load', function () {
3046
- $('[data-spy="affix"]').each(function () {
3047
- var $spy = $(this)
3048
- , data = $spy.data()
3049
-
3050
- data.offset = data.offset || {}
3051
-
3052
- data.offsetBottom && (data.offset.bottom = data.offsetBottom)
3053
- data.offsetTop && (data.offset.top = data.offsetTop)
3054
-
3055
- $spy.affix(data)
3056
- })
3057
- })
3058
-
3059
-
3060
- }(window.jQuery);
1
+ /*!
2
+ * Bootstrap.js by @fat & @mdo extended by @ArnoldDaniels
3
+ * Copyright 2012 Twitter, Inc.
4
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
5
+ */
6
+ !function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.options.target&&(this.$target=e(this.options.target)),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.strict=this.options.strict,this.$menu=e(this.options.menu),this.shown=!1,typeof this.source=="string"&&(this.url=this.source,this.source=this.searchAjax),t.nodeName=="SELECT"&&this.replaceSelect(),this.text=this.$element.val(),this.$element.attr("data-text",this.value).attr("autocomplete","off"),typeof this.$target!="undefined"?this.$element.attr("data-value",this.$target.val()):typeof this.$element.attr("data-value")=="undefined"&&this.$element.attr("data-value",this.strict?"":this.value),this.$menu.css("min-width",this.$element.width()+12),this.listen()};t.prototype={constructor:t,replaceSelect:function(){this.$target=this.$element,this.$element=e('<input type="text" />'),this.source={},this.strict=!0;var t=this.$target.find("option"),n;for(var r=0;r<t.length;r++){n=e(t[r]);if(n.val()===""){this.$element.attr("placeholder",n.html());continue}this.source[n.val()]=n.html(),this.$target.val()==n.val()&&this.$element.val(n.html())}var i=this.$target[0].attributes;for(r=0;r<i.length;r++)i[r].nodeName!="type"&&i[r].nodeName!="name"&&i[r].nodeName!="id"&&i[r].nodeName!="data-provide"&&!i[r].nodeName.match(/^on/)&&this.$element.attr(i[r].nodeName,i[r].nodeValue);this.$element.insertAfter(this.$target),this.$target.attr("autofocus")&&this.$element.trigger("focus").select(),this.$target.attr("autofocus",!1),this.$target.hide()},destroyReplacement:function(){typeof this.$target!="undefined"&&this.$target[0].nodeName=="SELECT"&&this.$element.replaceWith("")},select:function(){var e=this.$menu.find(".active"),t=e.attr("data-value"),n=e.find(".item-text").length>0?e.find(".item-text").text():e.text();return t=this.updater(t,"value"),n=this.updater(n,"text"),this.$element.val(n).attr("data-value",t),this.text=n,typeof this.$target!="undefined"&&this.$target.val(t).trigger("change"),this.$element.trigger("change"),this.hide()},updater:function(e,t){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){return e.isArray(t)?this.processArray(t):this.processObject(t)},processArray:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},processObject:function(t){var n=this,r={},i=0;return e.each(t,function(e,t){n.matcher(t)&&(r[e]=t)}),r=this.sorter(r),e.isEmptyObject(r)?this.shown?this.hide():this:(e.each(r,function(e,t){i++>=n.options.items&&delete r[e]}),this.render(r).show())},searchAjax:function(t,n){var r=this;this.ajaxTimeout&&clearTimeout(this.ajaxTimeout),this.ajaxTimeout=setTimeout(function(){r.ajaxTimeout&&clearTimeout(r.ajaxTimeout);if(t===""){r.hide();return}e.get(r.url,{q:t,limit:r.options.items},function(e){typeof e=="string"&&(e=JSON.parse(e)),n(e)})},this.options.ajaxdelay)},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(t){return e.isArray(t)?this.sortArray(t):this.sortObject(t)},sortArray:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},sortObject:function(e){var t={},n;for(n in e)e[n].toLowerCase().indexOf(this.query.toLowerCase())||(t[n]=e[n],delete e[n]);for(n in e)~e[n].indexOf(this.query)&&(t[n]=e[n],delete e[n]);for(n in e)t[n]=e[n];return t},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this,r=e([]);return e.map(t,function(i,s){if(r.length>=n.options.items)return;var o,u;e.isArray(t)&&(s=i),o=e(n.options.item),u=o.find("a").length?o.find("a"):o,u.html(n.highlighter(i)),o.attr("data-value",s),o.find("a").length===0&&o.addClass("dropdown-header"),r.push(o[0])}),r.not(".dropdown-header").first().addClass("active"),this.$menu.html(r),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.nextAll("li:not(.dropdown-header)").first();r.length||(r=e(this.$menu.find("li:not(.dropdown-header)")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prevAll("li:not(.dropdown-header)").first();n.length||(n=this.$menu.find("li:not(.dropdown-header)").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("change",e.proxy(this.change,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this)),e(window).on("unload",e.proxy(this.destroyReplacement,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},change:function(e){var t;this.$element.val()!=this.text&&(t=this.$element.val()===""||this.strict?"":this.$element.val(),this.$element.val(t),this.$element.attr("data-value",t),this.text=t,typeof this.$target!="undefined"&&this.$target.val(t))},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',ajaxdelay:400,minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).off("focus.typeahead.data-api").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.is("select")&&n.attr("autofocus",!0),t.preventDefault(),n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=window.orientation!==undefined,n=navigator.userAgent.toLowerCase().indexOf("android")>-1,r=function(t,r){if(n)return;this.$element=e(t),this.options=e.extend({},e.fn.inputmask.defaults,r),this.mask=String(r.mask),this.init(),this.listen(),this.checkVal()};r.prototype={init:function(){var t=this.options.definitions,n=this.mask.length;this.tests=[],this.partialPosition=this.mask.length,this.firstNonMaskPos=null,e.each(this.mask.split(""),e.proxy(function(e,r){r=="?"?(n--,this.partialPosition=e):t[r]?(this.tests.push(new RegExp(t[r])),this.firstNonMaskPos===null&&(this.firstNonMaskPos=this.tests.length-1)):this.tests.push(null)},this)),this.buffer=e.map(this.mask.split(""),e.proxy(function(e,n){if(e!="?")return t[e]?this.options.placeholder:e},this)),this.focusText=this.$element.val(),this.$element.data("rawMaskFn",e.proxy(function(){return e.map(this.buffer,function(e,t){return this.tests[t]&&e!=this.options.placeholder?e:null}).join("")},this))},listen:function(){if(this.$element.attr("readonly"))return;var t=(navigator.userAgent.match(/msie/i)?"paste":"input")+".mask";this.$element.on("unmask",e.proxy(this.unmask,this)).on("focus.mask",e.proxy(this.focusEvent,this)).on("blur.mask",e.proxy(this.blurEvent,this)).on("keydown.mask",e.proxy(this.keydownEvent,this)).on("keypress.mask",e.proxy(this.keypressEvent,this)).on(t,e.proxy(this.pasteEvent,this))},caret:function(e,t){if(this.$element.length===0)return;if(typeof e=="number")return t=typeof t=="number"?t:e,this.$element.each(function(){if(this.setSelectionRange)this.setSelectionRange(e,t);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}});if(this.$element[0].setSelectionRange)e=this.$element[0].selectionStart,t=this.$element[0].selectionEnd;else if(document.selection&&document.selection.createRange){var n=document.selection.createRange();e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length}return{begin:e,end:t}},seekNext:function(e){var t=this.mask.length;while(++e<=t&&!this.tests[e]);return e},seekPrev:function(e){while(--e>=0&&!this.tests[e]);return e},shiftL:function(e,t){var n=this.mask.length;if(e<0)return;for(var r=e,i=this.seekNext(t);r<n;r++)if(this.tests[r]){if(!(i<n&&this.tests[r].test(this.buffer[i])))break;this.buffer[r]=this.buffer[i],this.buffer[i]=this.options.placeholder,i=this.
7
+ seekNext(i)}this.writeBuffer(),this.caret(Math.max(this.firstNonMaskPos,e))},shiftR:function(e){var t=this.mask.length;for(var n=e,r=this.options.placeholder;n<t;n++)if(this.tests[n]){var i=this.seekNext(n),s=this.buffer[n];this.buffer[n]=r;if(!(i<t&&this.tests[i].test(s)))break;r=s}},unmask:function(){this.$element.unbind(".mask").removeData("inputmask")},focusEvent:function(){this.focusText=this.$element.val();var t=this.mask.length,n=this.checkVal();this.writeBuffer();var r=this,i=function(){n==t?r.caret(0,n):r.caret(n)};e.browser.msie?i():setTimeout(i,0)},blurEvent:function(){this.checkVal(),this.$element.val()!=this.focusText&&this.$element.trigger("change")},keydownEvent:function(e){var n=e.which;if(n==8||n==46||t&&n==127){var r=this.caret(),i=r.begin,s=r.end;return s-i===0&&(i=n!=46?this.seekPrev(i):s=this.seekNext(i-1),s=n==46?this.seekNext(s):s),this.clearBuffer(i,s),this.shiftL(i,s-1),!1}if(n==27)return this.$element.val(this.focusText),this.caret(0,this.checkVal()),!1},keypressEvent:function(e){var t=this.mask.length,n=e.which,r=this.caret();if(e.ctrlKey||e.altKey||e.metaKey||n<32)return!0;if(n){r.end-r.begin!==0&&(this.clearBuffer(r.begin,r.end),this.shiftL(r.begin,r.end-1));var i=this.seekNext(r.begin-1);if(i<t){var s=String.fromCharCode(n);if(this.tests[i].test(s)){this.shiftR(i),this.buffer[i]=s,this.writeBuffer();var o=this.seekNext(i);this.caret(o)}}return!1}},pasteEvent:function(){var e=this;setTimeout(function(){e.caret(e.checkVal(!0))},0)},clearBuffer:function(e,t){var n=this.mask.length;for(var r=e;r<t&&r<n;r++)this.tests[r]&&(this.buffer[r]=this.options.placeholder)},writeBuffer:function(){return this.$element.val(this.buffer.join("")).val()},checkVal:function(e){var t=this.mask.length,n=this.$element.val(),r=-1;for(var i=0,s=0;i<t;i++)if(this.tests[i]){this.buffer[i]=this.options.placeholder;while(s++<n.length){var o=n.charAt(s-1);if(this.tests[i].test(o)){this.buffer[i]=o,r=i;break}}if(s>n.length)break}else this.buffer[i]==n.charAt(s)&&i!=this.partialPosition&&(s++,r=i);if(!e&&r+1<this.partialPosition)this.$element.val(""),this.clearBuffer(0,t);else if(e||r+1>=this.partialPosition)this.writeBuffer(),e||this.$element.val(this.$element.val().substring(0,r+1));return this.partialPosition?i:this.firstNonMaskPos}},e.fn.inputmask=function(t){return this.each(function(){var n=e(this),i=n.data("inputmask");i||n.data("inputmask",i=new r(this,t))})},e.fn.inputmask.defaults={mask:"",placeholder:"_",definitions:{9:"[0-9]",a:"[A-Za-z]","?":"[A-Za-z0-9]","*":"."}},e.fn.inputmask.Constructor=r,e(document).on("focus.inputmask.data-api","[data-mask]",function(t){var n=e(this);if(n.data("inputmask"))return;t.preventDefault(),n.inputmask(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){n=e.extend({},e.fn.rowlink.defaults,n);var r=t.nodeName.toLowerCase()=="tr"?e(t):e(t).find("tr:has(td)");r.each(function(){var t=e(this).find(n.target).first();if(!t.length)return;var r=t.attr("href");e(this).find("td").not(".nolink").click(function(){window.location=r}),e(this).addClass("rowlink"),t.replaceWith(t.html())})};e.fn.rowlink=function(n){return this.each(function(){var r=e(this),i=r.data("rowlink");i||r.data("rowlink",i=new t(this,n))})},e.fn.rowlink.defaults={target:"a"},e.fn.rowlink.Constructor=t,e(function(){e('[data-provide="rowlink"],[data-provides="rowlink"]').each(function(){e(this).rowlink(e(this).data())})})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.type=this.$element.data("uploadtype")||(this.$element.find(".thumbnail").length>0?"image":"file"),this.$input=this.$element.find(":file");if(this.$input.length===0)return;this.name=this.$input.attr("name")||n.name,this.$hidden=this.$element.find('input[type=hidden][name="'+this.name+'"]'),this.$hidden.length===0&&(this.$hidden=e('<input type="hidden" />'),this.$element.prepend(this.$hidden)),this.$preview=this.$element.find(".fileupload-preview");var r=this.$preview.css("height");this.$preview.css("display")!="inline"&&r!="0px"&&r!="none"&&this.$preview.css("line-height",r),this.original={exists:this.$element.hasClass("fileupload-exists"),preview:this.$preview.html(),hiddenVal:this.$hidden.val()},this.$remove=this.$element.find('[data-dismiss="fileupload"]'),this.$element.find('[data-trigger="fileupload"]').on("click.fileupload",e.proxy(this.trigger,this)),this.listen()};t.prototype={listen:function(){this.$input.on("change.fileupload",e.proxy(this.change,this)),e(this.$input[0].form).on("reset.fileupload",e.proxy(this.reset,this)),this.$remove&&this.$remove.on("click.fileupload",e.proxy(this.clear,this))},change:function(e,t){if(t==="clear")return;var n=e.target.files!==undefined?e.target.files[0]:e.target.value?{name:e.target.value.replace(/^.+\\/,"")}:null;if(!n){this.clear();return}this.$hidden.val(""),this.$hidden.attr("name",""),this.$input.attr("name",this.name);if(this.type==="image"&&this.$preview.length>0&&(typeof n.type!="undefined"?n.type.match("image.*"):n.name.match(/\.(gif|png|jpe?g)$/i))&&typeof FileReader!="undefined"){var r=new FileReader,i=this.$preview,s=this.$element;r.onload=function(e){i.html('<img src="'+e.target.result+'" '+(i.css("max-height")!="none"?'style="max-height: '+i.css("max-height")+';"':"")+" />"),s.addClass("fileupload-exists").removeClass("fileupload-new")},r.readAsDataURL(n)}else this.$preview.text(n.name),this.$element.addClass("fileupload-exists").removeClass("fileupload-new")},clear:function(e){this.$hidden.val(""),this.$hidden.attr("name",this.name),this.$input.attr("name","");if(navigator.userAgent.match(/msie/i)){var t=this.$input.clone(!0);this.$input.after(t),this.$input.remove(),this.$input=t}else this.$input.val("");this.$preview.html(""),this.$element.addClass("fileupload-new").removeClass("fileupload-exists"),e&&(this.$input.trigger("change",["clear"]),e.preventDefault())},reset:function(e){this.clear(),this.$hidden.val(this.original.hiddenVal),this.$preview.html(this.original.preview),this.original.exists?this.$element.addClass("fileupload-exists").removeClass("fileupload-new"):this.$element.addClass("fileupload-new").removeClass("fileupload-exists")},trigger:function(e){this.$input.trigger("click"),e.preventDefault()}},e.fn.fileupload=function(n){return this.each(function(){var r=e(this),i=r.data("fileupload");i||r.data("fileupload",i=new t(this,n)),typeof n=="string"&&i[n]()})},e.fn.fileupload.Constructor=t,e(document).on("click.fileupload.data-api",'[data-provides="fileupload"]',function(t){var n=e(this);if(n.data("fileupload"))return;n.fileupload(n.data());var r=e(t.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');r.length>0&&(r.trigger("click.fileupload"),t.preventDefault())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);