beanstalkd_view 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1737 @@
1
+ /* ===================================================
2
+ * bootstrap-transition.js v2.0.2
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
+ !function( $ ) {
21
+
22
+ $(function () {
23
+
24
+ "use strict"
25
+
26
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27
+ * ======================================================= */
28
+
29
+ $.support.transition = (function () {
30
+ var thisBody = document.body || document.documentElement
31
+ , thisStyle = thisBody.style
32
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
33
+
34
+ return support && {
35
+ end: (function () {
36
+ var transitionEnd = "TransitionEnd"
37
+ if ( $.browser.webkit ) {
38
+ transitionEnd = "webkitTransitionEnd"
39
+ } else if ( $.browser.mozilla ) {
40
+ transitionEnd = "transitionend"
41
+ } else if ( $.browser.opera ) {
42
+ transitionEnd = "oTransitionEnd"
43
+ }
44
+ return transitionEnd
45
+ }())
46
+ }
47
+ })()
48
+
49
+ })
50
+
51
+ }( window.jQuery );
52
+ /* =========================================================
53
+ * bootstrap-modal.js v2.0.2
54
+ * http://twitter.github.com/bootstrap/javascript.html#modals
55
+ * =========================================================
56
+ * Copyright 2012 Twitter, Inc.
57
+ *
58
+ * Licensed under the Apache License, Version 2.0 (the "License");
59
+ * you may not use this file except in compliance with the License.
60
+ * You may obtain a copy of the License at
61
+ *
62
+ * http://www.apache.org/licenses/LICENSE-2.0
63
+ *
64
+ * Unless required by applicable law or agreed to in writing, software
65
+ * distributed under the License is distributed on an "AS IS" BASIS,
66
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
67
+ * See the License for the specific language governing permissions and
68
+ * limitations under the License.
69
+ * ========================================================= */
70
+
71
+
72
+ !function( $ ){
73
+
74
+ "use strict"
75
+
76
+ /* MODAL CLASS DEFINITION
77
+ * ====================== */
78
+
79
+ var Modal = function ( content, options ) {
80
+ this.options = options
81
+ this.$element = $(content)
82
+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
83
+ }
84
+
85
+ Modal.prototype = {
86
+
87
+ constructor: Modal
88
+
89
+ , toggle: function () {
90
+ return this[!this.isShown ? 'show' : 'hide']()
91
+ }
92
+
93
+ , show: function () {
94
+ var that = this
95
+
96
+ if (this.isShown) return
97
+
98
+ $('body').addClass('modal-open')
99
+
100
+ this.isShown = true
101
+ this.$element.trigger('show')
102
+
103
+ escape.call(this)
104
+ backdrop.call(this, function () {
105
+ var transition = $.support.transition && that.$element.hasClass('fade')
106
+
107
+ !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
108
+
109
+ that.$element
110
+ .show()
111
+
112
+ if (transition) {
113
+ that.$element[0].offsetWidth // force reflow
114
+ }
115
+
116
+ that.$element.addClass('in')
117
+
118
+ transition ?
119
+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
120
+ that.$element.trigger('shown')
121
+
122
+ })
123
+ }
124
+
125
+ , hide: function ( e ) {
126
+ e && e.preventDefault()
127
+
128
+ if (!this.isShown) return
129
+
130
+ var that = this
131
+ this.isShown = false
132
+
133
+ $('body').removeClass('modal-open')
134
+
135
+ escape.call(this)
136
+
137
+ this.$element
138
+ .trigger('hide')
139
+ .removeClass('in')
140
+
141
+ $.support.transition && this.$element.hasClass('fade') ?
142
+ hideWithTransition.call(this) :
143
+ hideModal.call(this)
144
+ }
145
+
146
+ }
147
+
148
+
149
+ /* MODAL PRIVATE METHODS
150
+ * ===================== */
151
+
152
+ function hideWithTransition() {
153
+ var that = this
154
+ , timeout = setTimeout(function () {
155
+ that.$element.off($.support.transition.end)
156
+ hideModal.call(that)
157
+ }, 500)
158
+
159
+ this.$element.one($.support.transition.end, function () {
160
+ clearTimeout(timeout)
161
+ hideModal.call(that)
162
+ })
163
+ }
164
+
165
+ function hideModal( that ) {
166
+ this.$element
167
+ .hide()
168
+ .trigger('hidden')
169
+
170
+ backdrop.call(this)
171
+ }
172
+
173
+ function backdrop( callback ) {
174
+ var that = this
175
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
176
+
177
+ if (this.isShown && this.options.backdrop) {
178
+ var doAnimate = $.support.transition && animate
179
+
180
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
181
+ .appendTo(document.body)
182
+
183
+ if (this.options.backdrop != 'static') {
184
+ this.$backdrop.click($.proxy(this.hide, this))
185
+ }
186
+
187
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
188
+
189
+ this.$backdrop.addClass('in')
190
+
191
+ doAnimate ?
192
+ this.$backdrop.one($.support.transition.end, callback) :
193
+ callback()
194
+
195
+ } else if (!this.isShown && this.$backdrop) {
196
+ this.$backdrop.removeClass('in')
197
+
198
+ $.support.transition && this.$element.hasClass('fade')?
199
+ this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
200
+ removeBackdrop.call(this)
201
+
202
+ } else if (callback) {
203
+ callback()
204
+ }
205
+ }
206
+
207
+ function removeBackdrop() {
208
+ this.$backdrop.remove()
209
+ this.$backdrop = null
210
+ }
211
+
212
+ function escape() {
213
+ var that = this
214
+ if (this.isShown && this.options.keyboard) {
215
+ $(document).on('keyup.dismiss.modal', function ( e ) {
216
+ e.which == 27 && that.hide()
217
+ })
218
+ } else if (!this.isShown) {
219
+ $(document).off('keyup.dismiss.modal')
220
+ }
221
+ }
222
+
223
+
224
+ /* MODAL PLUGIN DEFINITION
225
+ * ======================= */
226
+
227
+ $.fn.modal = function ( option ) {
228
+ return this.each(function () {
229
+ var $this = $(this)
230
+ , data = $this.data('modal')
231
+ , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
232
+ if (!data) $this.data('modal', (data = new Modal(this, options)))
233
+ if (typeof option == 'string') data[option]()
234
+ else if (options.show) data.show()
235
+ })
236
+ }
237
+
238
+ $.fn.modal.defaults = {
239
+ backdrop: true
240
+ , keyboard: true
241
+ , show: true
242
+ }
243
+
244
+ $.fn.modal.Constructor = Modal
245
+
246
+
247
+ /* MODAL DATA-API
248
+ * ============== */
249
+
250
+ $(function () {
251
+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
252
+ var $this = $(this), href
253
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
254
+ , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
255
+
256
+ e.preventDefault()
257
+ $target.modal(option)
258
+ })
259
+ })
260
+
261
+ }( window.jQuery );
262
+ /* ============================================================
263
+ * bootstrap-dropdown.js v2.0.2
264
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
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"
285
+
286
+ /* DROPDOWN CLASS DEFINITION
287
+ * ========================= */
288
+
289
+ var toggle = '[data-toggle="dropdown"]'
290
+ , Dropdown = function ( element ) {
291
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
292
+ $('html').on('click.dropdown.data-api', function () {
293
+ $el.parent().removeClass('open')
294
+ })
295
+ }
296
+
297
+ Dropdown.prototype = {
298
+
299
+ constructor: Dropdown
300
+
301
+ , toggle: function ( e ) {
302
+ var $this = $(this)
303
+ , selector = $this.attr('data-target')
304
+ , $parent
305
+ , isActive
306
+
307
+ if (!selector) {
308
+ selector = $this.attr('href')
309
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
310
+ }
311
+
312
+ $parent = $(selector)
313
+ $parent.length || ($parent = $this.parent())
314
+
315
+ isActive = $parent.hasClass('open')
316
+
317
+ clearMenus()
318
+ !isActive && $parent.toggleClass('open')
319
+
320
+ return false
321
+ }
322
+
323
+ }
324
+
325
+ function clearMenus() {
326
+ $(toggle).parent().removeClass('open')
327
+ }
328
+
329
+
330
+ /* DROPDOWN PLUGIN DEFINITION
331
+ * ========================== */
332
+
333
+ $.fn.dropdown = function ( option ) {
334
+ return this.each(function () {
335
+ var $this = $(this)
336
+ , data = $this.data('dropdown')
337
+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))
338
+ if (typeof option == 'string') data[option].call($this)
339
+ })
340
+ }
341
+
342
+ $.fn.dropdown.Constructor = Dropdown
343
+
344
+
345
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
346
+ * =================================== */
347
+
348
+ $(function () {
349
+ $('html').on('click.dropdown.data-api', clearMenus)
350
+ $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
351
+ })
352
+
353
+ }( window.jQuery );
354
+ /* =============================================================
355
+ * bootstrap-scrollspy.js v2.0.2
356
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
357
+ * =============================================================
358
+ * Copyright 2012 Twitter, Inc.
359
+ *
360
+ * Licensed under the Apache License, Version 2.0 (the "License");
361
+ * you may not use this file except in compliance with the License.
362
+ * You may obtain a copy of the License at
363
+ *
364
+ * http://www.apache.org/licenses/LICENSE-2.0
365
+ *
366
+ * Unless required by applicable law or agreed to in writing, software
367
+ * distributed under the License is distributed on an "AS IS" BASIS,
368
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
369
+ * See the License for the specific language governing permissions and
370
+ * limitations under the License.
371
+ * ============================================================== */
372
+
373
+ !function ( $ ) {
374
+
375
+ "use strict"
376
+
377
+ /* SCROLLSPY CLASS DEFINITION
378
+ * ========================== */
379
+
380
+ function ScrollSpy( element, options) {
381
+ var process = $.proxy(this.process, this)
382
+ , $element = $(element).is('body') ? $(window) : $(element)
383
+ , href
384
+ this.options = $.extend({}, $.fn.scrollspy.defaults, options)
385
+ this.$scrollElement = $element.on('scroll.scroll.data-api', process)
386
+ this.selector = (this.options.target
387
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
388
+ || '') + ' .nav li > a'
389
+ this.$body = $('body').on('click.scroll.data-api', this.selector, process)
390
+ this.refresh()
391
+ this.process()
392
+ }
393
+
394
+ ScrollSpy.prototype = {
395
+
396
+ constructor: ScrollSpy
397
+
398
+ , refresh: function () {
399
+ this.targets = this.$body
400
+ .find(this.selector)
401
+ .map(function () {
402
+ var href = $(this).attr('href')
403
+ return /^#\w/.test(href) && $(href).length ? href : null
404
+ })
405
+
406
+ this.offsets = $.map(this.targets, function (id) {
407
+ return $(id).position().top
408
+ })
409
+ }
410
+
411
+ , process: function () {
412
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
413
+ , offsets = this.offsets
414
+ , targets = this.targets
415
+ , activeTarget = this.activeTarget
416
+ , i
417
+
418
+ for (i = offsets.length; i--;) {
419
+ activeTarget != targets[i]
420
+ && scrollTop >= offsets[i]
421
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
422
+ && this.activate( targets[i] )
423
+ }
424
+ }
425
+
426
+ , activate: function (target) {
427
+ var active
428
+
429
+ this.activeTarget = target
430
+
431
+ this.$body
432
+ .find(this.selector).parent('.active')
433
+ .removeClass('active')
434
+
435
+ active = this.$body
436
+ .find(this.selector + '[href="' + target + '"]')
437
+ .parent('li')
438
+ .addClass('active')
439
+
440
+ if ( active.parent('.dropdown-menu') ) {
441
+ active.closest('li.dropdown').addClass('active')
442
+ }
443
+ }
444
+
445
+ }
446
+
447
+
448
+ /* SCROLLSPY PLUGIN DEFINITION
449
+ * =========================== */
450
+
451
+ $.fn.scrollspy = function ( option ) {
452
+ return this.each(function () {
453
+ var $this = $(this)
454
+ , data = $this.data('scrollspy')
455
+ , options = typeof option == 'object' && option
456
+ if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
457
+ if (typeof option == 'string') data[option]()
458
+ })
459
+ }
460
+
461
+ $.fn.scrollspy.Constructor = ScrollSpy
462
+
463
+ $.fn.scrollspy.defaults = {
464
+ offset: 10
465
+ }
466
+
467
+
468
+ /* SCROLLSPY DATA-API
469
+ * ================== */
470
+
471
+ $(function () {
472
+ $('[data-spy="scroll"]').each(function () {
473
+ var $spy = $(this)
474
+ $spy.scrollspy($spy.data())
475
+ })
476
+ })
477
+
478
+ }( window.jQuery );
479
+ /* ========================================================
480
+ * bootstrap-tab.js v2.0.2
481
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
482
+ * ========================================================
483
+ * Copyright 2012 Twitter, Inc.
484
+ *
485
+ * Licensed under the Apache License, Version 2.0 (the "License");
486
+ * you may not use this file except in compliance with the License.
487
+ * You may obtain a copy of the License at
488
+ *
489
+ * http://www.apache.org/licenses/LICENSE-2.0
490
+ *
491
+ * Unless required by applicable law or agreed to in writing, software
492
+ * distributed under the License is distributed on an "AS IS" BASIS,
493
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
494
+ * See the License for the specific language governing permissions and
495
+ * limitations under the License.
496
+ * ======================================================== */
497
+
498
+
499
+ !function( $ ){
500
+
501
+ "use strict"
502
+
503
+ /* TAB CLASS DEFINITION
504
+ * ==================== */
505
+
506
+ var Tab = function ( element ) {
507
+ this.element = $(element)
508
+ }
509
+
510
+ Tab.prototype = {
511
+
512
+ constructor: Tab
513
+
514
+ , show: function () {
515
+ var $this = this.element
516
+ , $ul = $this.closest('ul:not(.dropdown-menu)')
517
+ , selector = $this.attr('data-target')
518
+ , previous
519
+ , $target
520
+
521
+ if (!selector) {
522
+ selector = $this.attr('href')
523
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
524
+ }
525
+
526
+ if ( $this.parent('li').hasClass('active') ) return
527
+
528
+ previous = $ul.find('.active a').last()[0]
529
+
530
+ $this.trigger({
531
+ type: 'show'
532
+ , relatedTarget: previous
533
+ })
534
+
535
+ $target = $(selector)
536
+
537
+ this.activate($this.parent('li'), $ul)
538
+ this.activate($target, $target.parent(), function () {
539
+ $this.trigger({
540
+ type: 'shown'
541
+ , relatedTarget: previous
542
+ })
543
+ })
544
+ }
545
+
546
+ , activate: function ( element, container, callback) {
547
+ var $active = container.find('> .active')
548
+ , transition = callback
549
+ && $.support.transition
550
+ && $active.hasClass('fade')
551
+
552
+ function next() {
553
+ $active
554
+ .removeClass('active')
555
+ .find('> .dropdown-menu > .active')
556
+ .removeClass('active')
557
+
558
+ element.addClass('active')
559
+
560
+ if (transition) {
561
+ element[0].offsetWidth // reflow for transition
562
+ element.addClass('in')
563
+ } else {
564
+ element.removeClass('fade')
565
+ }
566
+
567
+ if ( element.parent('.dropdown-menu') ) {
568
+ element.closest('li.dropdown').addClass('active')
569
+ }
570
+
571
+ callback && callback()
572
+ }
573
+
574
+ transition ?
575
+ $active.one($.support.transition.end, next) :
576
+ next()
577
+
578
+ $active.removeClass('in')
579
+ }
580
+ }
581
+
582
+
583
+ /* TAB PLUGIN DEFINITION
584
+ * ===================== */
585
+
586
+ $.fn.tab = function ( option ) {
587
+ return this.each(function () {
588
+ var $this = $(this)
589
+ , data = $this.data('tab')
590
+ if (!data) $this.data('tab', (data = new Tab(this)))
591
+ if (typeof option == 'string') data[option]()
592
+ })
593
+ }
594
+
595
+ $.fn.tab.Constructor = Tab
596
+
597
+
598
+ /* TAB DATA-API
599
+ * ============ */
600
+
601
+ $(function () {
602
+ $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
603
+ e.preventDefault()
604
+ $(this).tab('show')
605
+ })
606
+ })
607
+
608
+ }( window.jQuery );
609
+ /* ===========================================================
610
+ * bootstrap-tooltip.js v2.0.2
611
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
612
+ * Inspired by the original jQuery.tipsy by Jason Frame
613
+ * ===========================================================
614
+ * Copyright 2012 Twitter, Inc.
615
+ *
616
+ * Licensed under the Apache License, Version 2.0 (the "License");
617
+ * you may not use this file except in compliance with the License.
618
+ * You may obtain a copy of the License at
619
+ *
620
+ * http://www.apache.org/licenses/LICENSE-2.0
621
+ *
622
+ * Unless required by applicable law or agreed to in writing, software
623
+ * distributed under the License is distributed on an "AS IS" BASIS,
624
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
625
+ * See the License for the specific language governing permissions and
626
+ * limitations under the License.
627
+ * ========================================================== */
628
+
629
+ !function( $ ) {
630
+
631
+ "use strict"
632
+
633
+ /* TOOLTIP PUBLIC CLASS DEFINITION
634
+ * =============================== */
635
+
636
+ var Tooltip = function ( element, options ) {
637
+ this.init('tooltip', element, options)
638
+ }
639
+
640
+ Tooltip.prototype = {
641
+
642
+ constructor: Tooltip
643
+
644
+ , init: function ( type, element, options ) {
645
+ var eventIn
646
+ , eventOut
647
+
648
+ this.type = type
649
+ this.$element = $(element)
650
+ this.options = this.getOptions(options)
651
+ this.enabled = true
652
+
653
+ if (this.options.trigger != 'manual') {
654
+ eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
655
+ eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
656
+ this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
657
+ this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
658
+ }
659
+
660
+ this.options.selector ?
661
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
662
+ this.fixTitle()
663
+ }
664
+
665
+ , getOptions: function ( options ) {
666
+ options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
667
+
668
+ if (options.delay && typeof options.delay == 'number') {
669
+ options.delay = {
670
+ show: options.delay
671
+ , hide: options.delay
672
+ }
673
+ }
674
+
675
+ return options
676
+ }
677
+
678
+ , enter: function ( e ) {
679
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
680
+
681
+ if (!self.options.delay || !self.options.delay.show) {
682
+ self.show()
683
+ } else {
684
+ self.hoverState = 'in'
685
+ setTimeout(function() {
686
+ if (self.hoverState == 'in') {
687
+ self.show()
688
+ }
689
+ }, self.options.delay.show)
690
+ }
691
+ }
692
+
693
+ , leave: function ( e ) {
694
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
695
+
696
+ if (!self.options.delay || !self.options.delay.hide) {
697
+ self.hide()
698
+ } else {
699
+ self.hoverState = 'out'
700
+ setTimeout(function() {
701
+ if (self.hoverState == 'out') {
702
+ self.hide()
703
+ }
704
+ }, self.options.delay.hide)
705
+ }
706
+ }
707
+
708
+ , show: function () {
709
+ var $tip
710
+ , inside
711
+ , pos
712
+ , actualWidth
713
+ , actualHeight
714
+ , placement
715
+ , tp
716
+
717
+ if (this.hasContent() && this.enabled) {
718
+ $tip = this.tip()
719
+ this.setContent()
720
+
721
+ if (this.options.animation) {
722
+ $tip.addClass('fade')
723
+ }
724
+
725
+ placement = typeof this.options.placement == 'function' ?
726
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
727
+ this.options.placement
728
+
729
+ inside = /in/.test(placement)
730
+
731
+ $tip
732
+ .remove()
733
+ .css({ top: 0, left: 0, display: 'block' })
734
+ .appendTo(inside ? this.$element : document.body)
735
+
736
+ pos = this.getPosition(inside)
737
+
738
+ actualWidth = $tip[0].offsetWidth
739
+ actualHeight = $tip[0].offsetHeight
740
+
741
+ switch (inside ? placement.split(' ')[1] : placement) {
742
+ case 'bottom':
743
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
744
+ break
745
+ case 'top':
746
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
747
+ break
748
+ case 'left':
749
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
750
+ break
751
+ case 'right':
752
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
753
+ break
754
+ }
755
+
756
+ $tip
757
+ .css(tp)
758
+ .addClass(placement)
759
+ .addClass('in')
760
+ }
761
+ }
762
+
763
+ , setContent: function () {
764
+ var $tip = this.tip()
765
+ $tip.find('.tooltip-inner').html(this.getTitle())
766
+ $tip.removeClass('fade in top bottom left right')
767
+ }
768
+
769
+ , hide: function () {
770
+ var that = this
771
+ , $tip = this.tip()
772
+
773
+ $tip.removeClass('in')
774
+
775
+ function removeWithAnimation() {
776
+ var timeout = setTimeout(function () {
777
+ $tip.off($.support.transition.end).remove()
778
+ }, 500)
779
+
780
+ $tip.one($.support.transition.end, function () {
781
+ clearTimeout(timeout)
782
+ $tip.remove()
783
+ })
784
+ }
785
+
786
+ $.support.transition && this.$tip.hasClass('fade') ?
787
+ removeWithAnimation() :
788
+ $tip.remove()
789
+ }
790
+
791
+ , fixTitle: function () {
792
+ var $e = this.$element
793
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
794
+ $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
795
+ }
796
+ }
797
+
798
+ , hasContent: function () {
799
+ return this.getTitle()
800
+ }
801
+
802
+ , getPosition: function (inside) {
803
+ return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
804
+ width: this.$element[0].offsetWidth
805
+ , height: this.$element[0].offsetHeight
806
+ })
807
+ }
808
+
809
+ , getTitle: function () {
810
+ var title
811
+ , $e = this.$element
812
+ , o = this.options
813
+
814
+ title = $e.attr('data-original-title')
815
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
816
+
817
+ title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
818
+
819
+ return title
820
+ }
821
+
822
+ , tip: function () {
823
+ return this.$tip = this.$tip || $(this.options.template)
824
+ }
825
+
826
+ , validate: function () {
827
+ if (!this.$element[0].parentNode) {
828
+ this.hide()
829
+ this.$element = null
830
+ this.options = null
831
+ }
832
+ }
833
+
834
+ , enable: function () {
835
+ this.enabled = true
836
+ }
837
+
838
+ , disable: function () {
839
+ this.enabled = false
840
+ }
841
+
842
+ , toggleEnabled: function () {
843
+ this.enabled = !this.enabled
844
+ }
845
+
846
+ , toggle: function () {
847
+ this[this.tip().hasClass('in') ? 'hide' : 'show']()
848
+ }
849
+
850
+ }
851
+
852
+
853
+ /* TOOLTIP PLUGIN DEFINITION
854
+ * ========================= */
855
+
856
+ $.fn.tooltip = function ( option ) {
857
+ return this.each(function () {
858
+ var $this = $(this)
859
+ , data = $this.data('tooltip')
860
+ , options = typeof option == 'object' && option
861
+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
862
+ if (typeof option == 'string') data[option]()
863
+ })
864
+ }
865
+
866
+ $.fn.tooltip.Constructor = Tooltip
867
+
868
+ $.fn.tooltip.defaults = {
869
+ animation: true
870
+ , delay: 0
871
+ , selector: false
872
+ , placement: 'top'
873
+ , trigger: 'hover'
874
+ , title: ''
875
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
876
+ }
877
+
878
+ }( window.jQuery );
879
+ /* ===========================================================
880
+ * bootstrap-popover.js v2.0.2
881
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
882
+ * ===========================================================
883
+ * Copyright 2012 Twitter, Inc.
884
+ *
885
+ * Licensed under the Apache License, Version 2.0 (the "License");
886
+ * you may not use this file except in compliance with the License.
887
+ * You may obtain a copy of the License at
888
+ *
889
+ * http://www.apache.org/licenses/LICENSE-2.0
890
+ *
891
+ * Unless required by applicable law or agreed to in writing, software
892
+ * distributed under the License is distributed on an "AS IS" BASIS,
893
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
894
+ * See the License for the specific language governing permissions and
895
+ * limitations under the License.
896
+ * =========================================================== */
897
+
898
+
899
+ !function( $ ) {
900
+
901
+ "use strict"
902
+
903
+ var Popover = function ( element, options ) {
904
+ this.init('popover', element, options)
905
+ }
906
+
907
+ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
908
+ ========================================== */
909
+
910
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
911
+
912
+ constructor: Popover
913
+
914
+ , setContent: function () {
915
+ var $tip = this.tip()
916
+ , title = this.getTitle()
917
+ , content = this.getContent()
918
+
919
+ $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
920
+ $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
921
+
922
+ $tip.removeClass('fade top bottom left right in')
923
+ }
924
+
925
+ , hasContent: function () {
926
+ return this.getTitle() || this.getContent()
927
+ }
928
+
929
+ , getContent: function () {
930
+ var content
931
+ , $e = this.$element
932
+ , o = this.options
933
+
934
+ content = $e.attr('data-content')
935
+ || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
936
+
937
+ content = content.toString().replace(/(^\s*|\s*$)/, "")
938
+
939
+ return content
940
+ }
941
+
942
+ , tip: function() {
943
+ if (!this.$tip) {
944
+ this.$tip = $(this.options.template)
945
+ }
946
+ return this.$tip
947
+ }
948
+
949
+ })
950
+
951
+
952
+ /* POPOVER PLUGIN DEFINITION
953
+ * ======================= */
954
+
955
+ $.fn.popover = function ( option ) {
956
+ return this.each(function () {
957
+ var $this = $(this)
958
+ , data = $this.data('popover')
959
+ , options = typeof option == 'object' && option
960
+ if (!data) $this.data('popover', (data = new Popover(this, options)))
961
+ if (typeof option == 'string') data[option]()
962
+ })
963
+ }
964
+
965
+ $.fn.popover.Constructor = Popover
966
+
967
+ $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
968
+ placement: 'right'
969
+ , content: ''
970
+ , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
971
+ })
972
+
973
+ }( window.jQuery );
974
+ /* ==========================================================
975
+ * bootstrap-alert.js v2.0.2
976
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
977
+ * ==========================================================
978
+ * Copyright 2012 Twitter, Inc.
979
+ *
980
+ * Licensed under the Apache License, Version 2.0 (the "License");
981
+ * you may not use this file except in compliance with the License.
982
+ * You may obtain a copy of the License at
983
+ *
984
+ * http://www.apache.org/licenses/LICENSE-2.0
985
+ *
986
+ * Unless required by applicable law or agreed to in writing, software
987
+ * distributed under the License is distributed on an "AS IS" BASIS,
988
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
989
+ * See the License for the specific language governing permissions and
990
+ * limitations under the License.
991
+ * ========================================================== */
992
+
993
+
994
+ !function( $ ){
995
+
996
+ "use strict"
997
+
998
+ /* ALERT CLASS DEFINITION
999
+ * ====================== */
1000
+
1001
+ var dismiss = '[data-dismiss="alert"]'
1002
+ , Alert = function ( el ) {
1003
+ $(el).on('click', dismiss, this.close)
1004
+ }
1005
+
1006
+ Alert.prototype = {
1007
+
1008
+ constructor: Alert
1009
+
1010
+ , close: function ( e ) {
1011
+ var $this = $(this)
1012
+ , selector = $this.attr('data-target')
1013
+ , $parent
1014
+
1015
+ if (!selector) {
1016
+ selector = $this.attr('href')
1017
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1018
+ }
1019
+
1020
+ $parent = $(selector)
1021
+ $parent.trigger('close')
1022
+
1023
+ e && e.preventDefault()
1024
+
1025
+ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
1026
+
1027
+ $parent
1028
+ .trigger('close')
1029
+ .removeClass('in')
1030
+
1031
+ function removeElement() {
1032
+ $parent
1033
+ .trigger('closed')
1034
+ .remove()
1035
+ }
1036
+
1037
+ $.support.transition && $parent.hasClass('fade') ?
1038
+ $parent.on($.support.transition.end, removeElement) :
1039
+ removeElement()
1040
+ }
1041
+
1042
+ }
1043
+
1044
+
1045
+ /* ALERT PLUGIN DEFINITION
1046
+ * ======================= */
1047
+
1048
+ $.fn.alert = function ( option ) {
1049
+ return this.each(function () {
1050
+ var $this = $(this)
1051
+ , data = $this.data('alert')
1052
+ if (!data) $this.data('alert', (data = new Alert(this)))
1053
+ if (typeof option == 'string') data[option].call($this)
1054
+ })
1055
+ }
1056
+
1057
+ $.fn.alert.Constructor = Alert
1058
+
1059
+
1060
+ /* ALERT DATA-API
1061
+ * ============== */
1062
+
1063
+ $(function () {
1064
+ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
1065
+ })
1066
+
1067
+ }( window.jQuery );
1068
+ /* ============================================================
1069
+ * bootstrap-button.js v2.0.2
1070
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
1071
+ * ============================================================
1072
+ * Copyright 2012 Twitter, Inc.
1073
+ *
1074
+ * Licensed under the Apache License, Version 2.0 (the "License");
1075
+ * you may not use this file except in compliance with the License.
1076
+ * You may obtain a copy of the License at
1077
+ *
1078
+ * http://www.apache.org/licenses/LICENSE-2.0
1079
+ *
1080
+ * Unless required by applicable law or agreed to in writing, software
1081
+ * distributed under the License is distributed on an "AS IS" BASIS,
1082
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1083
+ * See the License for the specific language governing permissions and
1084
+ * limitations under the License.
1085
+ * ============================================================ */
1086
+
1087
+ !function( $ ){
1088
+
1089
+ "use strict"
1090
+
1091
+ /* BUTTON PUBLIC CLASS DEFINITION
1092
+ * ============================== */
1093
+
1094
+ var Button = function ( element, options ) {
1095
+ this.$element = $(element)
1096
+ this.options = $.extend({}, $.fn.button.defaults, options)
1097
+ }
1098
+
1099
+ Button.prototype = {
1100
+
1101
+ constructor: Button
1102
+
1103
+ , setState: function ( state ) {
1104
+ var d = 'disabled'
1105
+ , $el = this.$element
1106
+ , data = $el.data()
1107
+ , val = $el.is('input') ? 'val' : 'html'
1108
+
1109
+ state = state + 'Text'
1110
+ data.resetText || $el.data('resetText', $el[val]())
1111
+
1112
+ $el[val](data[state] || this.options[state])
1113
+
1114
+ // push to event loop to allow forms to submit
1115
+ setTimeout(function () {
1116
+ state == 'loadingText' ?
1117
+ $el.addClass(d).attr(d, d) :
1118
+ $el.removeClass(d).removeAttr(d)
1119
+ }, 0)
1120
+ }
1121
+
1122
+ , toggle: function () {
1123
+ var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
1124
+
1125
+ $parent && $parent
1126
+ .find('.active')
1127
+ .removeClass('active')
1128
+
1129
+ this.$element.toggleClass('active')
1130
+ }
1131
+
1132
+ }
1133
+
1134
+
1135
+ /* BUTTON PLUGIN DEFINITION
1136
+ * ======================== */
1137
+
1138
+ $.fn.button = function ( option ) {
1139
+ return this.each(function () {
1140
+ var $this = $(this)
1141
+ , data = $this.data('button')
1142
+ , options = typeof option == 'object' && option
1143
+ if (!data) $this.data('button', (data = new Button(this, options)))
1144
+ if (option == 'toggle') data.toggle()
1145
+ else if (option) data.setState(option)
1146
+ })
1147
+ }
1148
+
1149
+ $.fn.button.defaults = {
1150
+ loadingText: 'loading...'
1151
+ }
1152
+
1153
+ $.fn.button.Constructor = Button
1154
+
1155
+
1156
+ /* BUTTON DATA-API
1157
+ * =============== */
1158
+
1159
+ $(function () {
1160
+ $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
1161
+ var $btn = $(e.target)
1162
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
1163
+ $btn.button('toggle')
1164
+ })
1165
+ })
1166
+
1167
+ }( window.jQuery );
1168
+ /* =============================================================
1169
+ * bootstrap-collapse.js v2.0.2
1170
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
1171
+ * =============================================================
1172
+ * Copyright 2012 Twitter, Inc.
1173
+ *
1174
+ * Licensed under the Apache License, Version 2.0 (the "License");
1175
+ * you may not use this file except in compliance with the License.
1176
+ * You may obtain a copy of the License at
1177
+ *
1178
+ * http://www.apache.org/licenses/LICENSE-2.0
1179
+ *
1180
+ * Unless required by applicable law or agreed to in writing, software
1181
+ * distributed under the License is distributed on an "AS IS" BASIS,
1182
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1183
+ * See the License for the specific language governing permissions and
1184
+ * limitations under the License.
1185
+ * ============================================================ */
1186
+
1187
+ !function( $ ){
1188
+
1189
+ "use strict"
1190
+
1191
+ var Collapse = function ( element, options ) {
1192
+ this.$element = $(element)
1193
+ this.options = $.extend({}, $.fn.collapse.defaults, options)
1194
+
1195
+ if (this.options["parent"]) {
1196
+ this.$parent = $(this.options["parent"])
1197
+ }
1198
+
1199
+ this.options.toggle && this.toggle()
1200
+ }
1201
+
1202
+ Collapse.prototype = {
1203
+
1204
+ constructor: Collapse
1205
+
1206
+ , dimension: function () {
1207
+ var hasWidth = this.$element.hasClass('width')
1208
+ return hasWidth ? 'width' : 'height'
1209
+ }
1210
+
1211
+ , show: function () {
1212
+ var dimension = this.dimension()
1213
+ , scroll = $.camelCase(['scroll', dimension].join('-'))
1214
+ , actives = this.$parent && this.$parent.find('.in')
1215
+ , hasData
1216
+
1217
+ if (actives && actives.length) {
1218
+ hasData = actives.data('collapse')
1219
+ actives.collapse('hide')
1220
+ hasData || actives.data('collapse', null)
1221
+ }
1222
+
1223
+ this.$element[dimension](0)
1224
+ this.transition('addClass', 'show', 'shown')
1225
+ this.$element[dimension](this.$element[0][scroll])
1226
+
1227
+ }
1228
+
1229
+ , hide: function () {
1230
+ var dimension = this.dimension()
1231
+ this.reset(this.$element[dimension]())
1232
+ this.transition('removeClass', 'hide', 'hidden')
1233
+ this.$element[dimension](0)
1234
+ }
1235
+
1236
+ , reset: function ( size ) {
1237
+ var dimension = this.dimension()
1238
+
1239
+ this.$element
1240
+ .removeClass('collapse')
1241
+ [dimension](size || 'auto')
1242
+ [0].offsetWidth
1243
+
1244
+ this.$element[size ? 'addClass' : 'removeClass']('collapse')
1245
+
1246
+ return this
1247
+ }
1248
+
1249
+ , transition: function ( method, startEvent, completeEvent ) {
1250
+ var that = this
1251
+ , complete = function () {
1252
+ if (startEvent == 'show') that.reset()
1253
+ that.$element.trigger(completeEvent)
1254
+ }
1255
+
1256
+ this.$element
1257
+ .trigger(startEvent)
1258
+ [method]('in')
1259
+
1260
+ $.support.transition && this.$element.hasClass('collapse') ?
1261
+ this.$element.one($.support.transition.end, complete) :
1262
+ complete()
1263
+ }
1264
+
1265
+ , toggle: function () {
1266
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
1267
+ }
1268
+
1269
+ }
1270
+
1271
+ /* COLLAPSIBLE PLUGIN DEFINITION
1272
+ * ============================== */
1273
+
1274
+ $.fn.collapse = function ( option ) {
1275
+ return this.each(function () {
1276
+ var $this = $(this)
1277
+ , data = $this.data('collapse')
1278
+ , options = typeof option == 'object' && option
1279
+ if (!data) $this.data('collapse', (data = new Collapse(this, options)))
1280
+ if (typeof option == 'string') data[option]()
1281
+ })
1282
+ }
1283
+
1284
+ $.fn.collapse.defaults = {
1285
+ toggle: true
1286
+ }
1287
+
1288
+ $.fn.collapse.Constructor = Collapse
1289
+
1290
+
1291
+ /* COLLAPSIBLE DATA-API
1292
+ * ==================== */
1293
+
1294
+ $(function () {
1295
+ $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
1296
+ var $this = $(this), href
1297
+ , target = $this.attr('data-target')
1298
+ || e.preventDefault()
1299
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
1300
+ , option = $(target).data('collapse') ? 'toggle' : $this.data()
1301
+ $(target).collapse(option)
1302
+ })
1303
+ })
1304
+
1305
+ }( window.jQuery );
1306
+ /* ==========================================================
1307
+ * bootstrap-carousel.js v2.0.2
1308
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
1309
+ * ==========================================================
1310
+ * Copyright 2012 Twitter, Inc.
1311
+ *
1312
+ * Licensed under the Apache License, Version 2.0 (the "License");
1313
+ * you may not use this file except in compliance with the License.
1314
+ * You may obtain a copy of the License at
1315
+ *
1316
+ * http://www.apache.org/licenses/LICENSE-2.0
1317
+ *
1318
+ * Unless required by applicable law or agreed to in writing, software
1319
+ * distributed under the License is distributed on an "AS IS" BASIS,
1320
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1321
+ * See the License for the specific language governing permissions and
1322
+ * limitations under the License.
1323
+ * ========================================================== */
1324
+
1325
+
1326
+ !function( $ ){
1327
+
1328
+ "use strict"
1329
+
1330
+ /* CAROUSEL CLASS DEFINITION
1331
+ * ========================= */
1332
+
1333
+ var Carousel = function (element, options) {
1334
+ this.$element = $(element)
1335
+ this.options = $.extend({}, $.fn.carousel.defaults, options)
1336
+ this.options.slide && this.slide(this.options.slide)
1337
+ this.options.pause == 'hover' && this.$element
1338
+ .on('mouseenter', $.proxy(this.pause, this))
1339
+ .on('mouseleave', $.proxy(this.cycle, this))
1340
+ }
1341
+
1342
+ Carousel.prototype = {
1343
+
1344
+ cycle: function () {
1345
+ this.interval = setInterval($.proxy(this.next, this), this.options.interval)
1346
+ return this
1347
+ }
1348
+
1349
+ , to: function (pos) {
1350
+ var $active = this.$element.find('.active')
1351
+ , children = $active.parent().children()
1352
+ , activePos = children.index($active)
1353
+ , that = this
1354
+
1355
+ if (pos > (children.length - 1) || pos < 0) return
1356
+
1357
+ if (this.sliding) {
1358
+ return this.$element.one('slid', function () {
1359
+ that.to(pos)
1360
+ })
1361
+ }
1362
+
1363
+ if (activePos == pos) {
1364
+ return this.pause().cycle()
1365
+ }
1366
+
1367
+ return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
1368
+ }
1369
+
1370
+ , pause: function () {
1371
+ clearInterval(this.interval)
1372
+ this.interval = null
1373
+ return this
1374
+ }
1375
+
1376
+ , next: function () {
1377
+ if (this.sliding) return
1378
+ return this.slide('next')
1379
+ }
1380
+
1381
+ , prev: function () {
1382
+ if (this.sliding) return
1383
+ return this.slide('prev')
1384
+ }
1385
+
1386
+ , slide: function (type, next) {
1387
+ var $active = this.$element.find('.active')
1388
+ , $next = next || $active[type]()
1389
+ , isCycling = this.interval
1390
+ , direction = type == 'next' ? 'left' : 'right'
1391
+ , fallback = type == 'next' ? 'first' : 'last'
1392
+ , that = this
1393
+
1394
+ this.sliding = true
1395
+
1396
+ isCycling && this.pause()
1397
+
1398
+ $next = $next.length ? $next : this.$element.find('.item')[fallback]()
1399
+
1400
+ if ($next.hasClass('active')) return
1401
+
1402
+ if (!$.support.transition && this.$element.hasClass('slide')) {
1403
+ this.$element.trigger('slide')
1404
+ $active.removeClass('active')
1405
+ $next.addClass('active')
1406
+ this.sliding = false
1407
+ this.$element.trigger('slid')
1408
+ } else {
1409
+ $next.addClass(type)
1410
+ $next[0].offsetWidth // force reflow
1411
+ $active.addClass(direction)
1412
+ $next.addClass(direction)
1413
+ this.$element.trigger('slide')
1414
+ this.$element.one($.support.transition.end, function () {
1415
+ $next.removeClass([type, direction].join(' ')).addClass('active')
1416
+ $active.removeClass(['active', direction].join(' '))
1417
+ that.sliding = false
1418
+ setTimeout(function () { that.$element.trigger('slid') }, 0)
1419
+ })
1420
+ }
1421
+
1422
+ isCycling && this.cycle()
1423
+
1424
+ return this
1425
+ }
1426
+
1427
+ }
1428
+
1429
+
1430
+ /* CAROUSEL PLUGIN DEFINITION
1431
+ * ========================== */
1432
+
1433
+ $.fn.carousel = function ( option ) {
1434
+ return this.each(function () {
1435
+ var $this = $(this)
1436
+ , data = $this.data('carousel')
1437
+ , options = typeof option == 'object' && option
1438
+ if (!data) $this.data('carousel', (data = new Carousel(this, options)))
1439
+ if (typeof option == 'number') data.to(option)
1440
+ else if (typeof option == 'string' || (option = options.slide)) data[option]()
1441
+ else data.cycle()
1442
+ })
1443
+ }
1444
+
1445
+ $.fn.carousel.defaults = {
1446
+ interval: 5000
1447
+ , pause: 'hover'
1448
+ }
1449
+
1450
+ $.fn.carousel.Constructor = Carousel
1451
+
1452
+
1453
+ /* CAROUSEL DATA-API
1454
+ * ================= */
1455
+
1456
+ $(function () {
1457
+ $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
1458
+ var $this = $(this), href
1459
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1460
+ , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
1461
+ $target.carousel(options)
1462
+ e.preventDefault()
1463
+ })
1464
+ })
1465
+
1466
+ }( window.jQuery );
1467
+ /* =============================================================
1468
+ * bootstrap-typeahead.js v2.0.2
1469
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
1470
+ * =============================================================
1471
+ * Copyright 2012 Twitter, Inc.
1472
+ *
1473
+ * Licensed under the Apache License, Version 2.0 (the "License");
1474
+ * you may not use this file except in compliance with the License.
1475
+ * You may obtain a copy of the License at
1476
+ *
1477
+ * http://www.apache.org/licenses/LICENSE-2.0
1478
+ *
1479
+ * Unless required by applicable law or agreed to in writing, software
1480
+ * distributed under the License is distributed on an "AS IS" BASIS,
1481
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1482
+ * See the License for the specific language governing permissions and
1483
+ * limitations under the License.
1484
+ * ============================================================ */
1485
+
1486
+ !function( $ ){
1487
+
1488
+ "use strict"
1489
+
1490
+ var Typeahead = function ( element, options ) {
1491
+ this.$element = $(element)
1492
+ this.options = $.extend({}, $.fn.typeahead.defaults, options)
1493
+ this.matcher = this.options.matcher || this.matcher
1494
+ this.sorter = this.options.sorter || this.sorter
1495
+ this.highlighter = this.options.highlighter || this.highlighter
1496
+ this.$menu = $(this.options.menu).appendTo('body')
1497
+ this.source = this.options.source
1498
+ this.shown = false
1499
+ this.listen()
1500
+ }
1501
+
1502
+ Typeahead.prototype = {
1503
+
1504
+ constructor: Typeahead
1505
+
1506
+ , select: function () {
1507
+ var val = this.$menu.find('.active').attr('data-value')
1508
+ this.$element.val(val)
1509
+ this.$element.change();
1510
+ return this.hide()
1511
+ }
1512
+
1513
+ , show: function () {
1514
+ var pos = $.extend({}, this.$element.offset(), {
1515
+ height: this.$element[0].offsetHeight
1516
+ })
1517
+
1518
+ this.$menu.css({
1519
+ top: pos.top + pos.height
1520
+ , left: pos.left
1521
+ })
1522
+
1523
+ this.$menu.show()
1524
+ this.shown = true
1525
+ return this
1526
+ }
1527
+
1528
+ , hide: function () {
1529
+ this.$menu.hide()
1530
+ this.shown = false
1531
+ return this
1532
+ }
1533
+
1534
+ , lookup: function (event) {
1535
+ var that = this
1536
+ , items
1537
+ , q
1538
+
1539
+ this.query = this.$element.val()
1540
+
1541
+ if (!this.query) {
1542
+ return this.shown ? this.hide() : this
1543
+ }
1544
+
1545
+ items = $.grep(this.source, function (item) {
1546
+ if (that.matcher(item)) return item
1547
+ })
1548
+
1549
+ items = this.sorter(items)
1550
+
1551
+ if (!items.length) {
1552
+ return this.shown ? this.hide() : this
1553
+ }
1554
+
1555
+ return this.render(items.slice(0, this.options.items)).show()
1556
+ }
1557
+
1558
+ , matcher: function (item) {
1559
+ return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1560
+ }
1561
+
1562
+ , sorter: function (items) {
1563
+ var beginswith = []
1564
+ , caseSensitive = []
1565
+ , caseInsensitive = []
1566
+ , item
1567
+
1568
+ while (item = items.shift()) {
1569
+ if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1570
+ else if (~item.indexOf(this.query)) caseSensitive.push(item)
1571
+ else caseInsensitive.push(item)
1572
+ }
1573
+
1574
+ return beginswith.concat(caseSensitive, caseInsensitive)
1575
+ }
1576
+
1577
+ , highlighter: function (item) {
1578
+ return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
1579
+ return '<strong>' + match + '</strong>'
1580
+ })
1581
+ }
1582
+
1583
+ , render: function (items) {
1584
+ var that = this
1585
+
1586
+ items = $(items).map(function (i, item) {
1587
+ i = $(that.options.item).attr('data-value', item)
1588
+ i.find('a').html(that.highlighter(item))
1589
+ return i[0]
1590
+ })
1591
+
1592
+ items.first().addClass('active')
1593
+ this.$menu.html(items)
1594
+ return this
1595
+ }
1596
+
1597
+ , next: function (event) {
1598
+ var active = this.$menu.find('.active').removeClass('active')
1599
+ , next = active.next()
1600
+
1601
+ if (!next.length) {
1602
+ next = $(this.$menu.find('li')[0])
1603
+ }
1604
+
1605
+ next.addClass('active')
1606
+ }
1607
+
1608
+ , prev: function (event) {
1609
+ var active = this.$menu.find('.active').removeClass('active')
1610
+ , prev = active.prev()
1611
+
1612
+ if (!prev.length) {
1613
+ prev = this.$menu.find('li').last()
1614
+ }
1615
+
1616
+ prev.addClass('active')
1617
+ }
1618
+
1619
+ , listen: function () {
1620
+ this.$element
1621
+ .on('blur', $.proxy(this.blur, this))
1622
+ .on('keypress', $.proxy(this.keypress, this))
1623
+ .on('keyup', $.proxy(this.keyup, this))
1624
+
1625
+ if ($.browser.webkit || $.browser.msie) {
1626
+ this.$element.on('keydown', $.proxy(this.keypress, this))
1627
+ }
1628
+
1629
+ this.$menu
1630
+ .on('click', $.proxy(this.click, this))
1631
+ .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1632
+ }
1633
+
1634
+ , keyup: function (e) {
1635
+ switch(e.keyCode) {
1636
+ case 40: // down arrow
1637
+ case 38: // up arrow
1638
+ break
1639
+
1640
+ case 9: // tab
1641
+ case 13: // enter
1642
+ if (!this.shown) return
1643
+ this.select()
1644
+ break
1645
+
1646
+ case 27: // escape
1647
+ if (!this.shown) return
1648
+ this.hide()
1649
+ break
1650
+
1651
+ default:
1652
+ this.lookup()
1653
+ }
1654
+
1655
+ e.stopPropagation()
1656
+ e.preventDefault()
1657
+ }
1658
+
1659
+ , keypress: function (e) {
1660
+ if (!this.shown) return
1661
+
1662
+ switch(e.keyCode) {
1663
+ case 9: // tab
1664
+ case 13: // enter
1665
+ case 27: // escape
1666
+ e.preventDefault()
1667
+ break
1668
+
1669
+ case 38: // up arrow
1670
+ e.preventDefault()
1671
+ this.prev()
1672
+ break
1673
+
1674
+ case 40: // down arrow
1675
+ e.preventDefault()
1676
+ this.next()
1677
+ break
1678
+ }
1679
+
1680
+ e.stopPropagation()
1681
+ }
1682
+
1683
+ , blur: function (e) {
1684
+ var that = this
1685
+ setTimeout(function () { that.hide() }, 150)
1686
+ }
1687
+
1688
+ , click: function (e) {
1689
+ e.stopPropagation()
1690
+ e.preventDefault()
1691
+ this.select()
1692
+ }
1693
+
1694
+ , mouseenter: function (e) {
1695
+ this.$menu.find('.active').removeClass('active')
1696
+ $(e.currentTarget).addClass('active')
1697
+ }
1698
+
1699
+ }
1700
+
1701
+
1702
+ /* TYPEAHEAD PLUGIN DEFINITION
1703
+ * =========================== */
1704
+
1705
+ $.fn.typeahead = function ( option ) {
1706
+ return this.each(function () {
1707
+ var $this = $(this)
1708
+ , data = $this.data('typeahead')
1709
+ , options = typeof option == 'object' && option
1710
+ if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1711
+ if (typeof option == 'string') data[option]()
1712
+ })
1713
+ }
1714
+
1715
+ $.fn.typeahead.defaults = {
1716
+ source: []
1717
+ , items: 8
1718
+ , menu: '<ul class="typeahead dropdown-menu"></ul>'
1719
+ , item: '<li><a href="#"></a></li>'
1720
+ }
1721
+
1722
+ $.fn.typeahead.Constructor = Typeahead
1723
+
1724
+
1725
+ /* TYPEAHEAD DATA-API
1726
+ * ================== */
1727
+
1728
+ $(function () {
1729
+ $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1730
+ var $this = $(this)
1731
+ if ($this.data('typeahead')) return
1732
+ e.preventDefault()
1733
+ $this.typeahead($this.data())
1734
+ })
1735
+ })
1736
+
1737
+ }( window.jQuery );