95 | Enter the variable name to query and press the Get button, the value will appear in the field if successful. If you wish to auto-query, check the box. Enter a custom time in ms or leave it blank for the default refresh time of 5 seconds.
96 |
97 |
98 |
99 |
100 |
101 | Variable Name
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | Value
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
148 |
149 |
150 |
--------------------------------------------------------------------------------
/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.0.3 (http://getbootstrap.com)
3 | * Copyright 2013 Twitter, Inc.
4 | * Licensed under http://www.apache.org/licenses/LICENSE-2.0
5 | */
6 |
7 | if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }
8 |
9 | /* ========================================================================
10 | * Bootstrap: transition.js v3.0.3
11 | * http://getbootstrap.com/javascript/#transitions
12 | * ========================================================================
13 | * Copyright 2013 Twitter, Inc.
14 | *
15 | * Licensed under the Apache License, Version 2.0 (the "License");
16 | * you may not use this file except in compliance with the License.
17 | * You may obtain a copy of the License at
18 | *
19 | * http://www.apache.org/licenses/LICENSE-2.0
20 | *
21 | * Unless required by applicable law or agreed to in writing, software
22 | * distributed under the License is distributed on an "AS IS" BASIS,
23 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24 | * See the License for the specific language governing permissions and
25 | * limitations under the License.
26 | * ======================================================================== */
27 |
28 |
29 | +function ($) { "use strict";
30 |
31 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
32 | // ============================================================
33 |
34 | function transitionEnd() {
35 | var el = document.createElement('bootstrap')
36 |
37 | var transEndEventNames = {
38 | 'WebkitTransition' : 'webkitTransitionEnd'
39 | , 'MozTransition' : 'transitionend'
40 | , 'OTransition' : 'oTransitionEnd otransitionend'
41 | , 'transition' : 'transitionend'
42 | }
43 |
44 | for (var name in transEndEventNames) {
45 | if (el.style[name] !== undefined) {
46 | return { end: transEndEventNames[name] }
47 | }
48 | }
49 | }
50 |
51 | // http://blog.alexmaccaw.com/css-transitions
52 | $.fn.emulateTransitionEnd = function (duration) {
53 | var called = false, $el = this
54 | $(this).one($.support.transition.end, function () { called = true })
55 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
56 | setTimeout(callback, duration)
57 | return this
58 | }
59 |
60 | $(function () {
61 | $.support.transition = transitionEnd()
62 | })
63 |
64 | }(jQuery);
65 |
66 | /* ========================================================================
67 | * Bootstrap: alert.js v3.0.3
68 | * http://getbootstrap.com/javascript/#alerts
69 | * ========================================================================
70 | * Copyright 2013 Twitter, Inc.
71 | *
72 | * Licensed under the Apache License, Version 2.0 (the "License");
73 | * you may not use this file except in compliance with the License.
74 | * You may obtain a copy of the License at
75 | *
76 | * http://www.apache.org/licenses/LICENSE-2.0
77 | *
78 | * Unless required by applicable law or agreed to in writing, software
79 | * distributed under the License is distributed on an "AS IS" BASIS,
80 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
81 | * See the License for the specific language governing permissions and
82 | * limitations under the License.
83 | * ======================================================================== */
84 |
85 |
86 | +function ($) { "use strict";
87 |
88 | // ALERT CLASS DEFINITION
89 | // ======================
90 |
91 | var dismiss = '[data-dismiss="alert"]'
92 | var Alert = function (el) {
93 | $(el).on('click', dismiss, this.close)
94 | }
95 |
96 | Alert.prototype.close = function (e) {
97 | var $this = $(this)
98 | var selector = $this.attr('data-target')
99 |
100 | if (!selector) {
101 | selector = $this.attr('href')
102 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
103 | }
104 |
105 | var $parent = $(selector)
106 |
107 | if (e) e.preventDefault()
108 |
109 | if (!$parent.length) {
110 | $parent = $this.hasClass('alert') ? $this : $this.parent()
111 | }
112 |
113 | $parent.trigger(e = $.Event('close.bs.alert'))
114 |
115 | if (e.isDefaultPrevented()) return
116 |
117 | $parent.removeClass('in')
118 |
119 | function removeElement() {
120 | $parent.trigger('closed.bs.alert').remove()
121 | }
122 |
123 | $.support.transition && $parent.hasClass('fade') ?
124 | $parent
125 | .one($.support.transition.end, removeElement)
126 | .emulateTransitionEnd(150) :
127 | removeElement()
128 | }
129 |
130 |
131 | // ALERT PLUGIN DEFINITION
132 | // =======================
133 |
134 | var old = $.fn.alert
135 |
136 | $.fn.alert = function (option) {
137 | return this.each(function () {
138 | var $this = $(this)
139 | var data = $this.data('bs.alert')
140 |
141 | if (!data) $this.data('bs.alert', (data = new Alert(this)))
142 | if (typeof option == 'string') data[option].call($this)
143 | })
144 | }
145 |
146 | $.fn.alert.Constructor = Alert
147 |
148 |
149 | // ALERT NO CONFLICT
150 | // =================
151 |
152 | $.fn.alert.noConflict = function () {
153 | $.fn.alert = old
154 | return this
155 | }
156 |
157 |
158 | // ALERT DATA-API
159 | // ==============
160 |
161 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
162 |
163 | }(jQuery);
164 |
165 | /* ========================================================================
166 | * Bootstrap: button.js v3.0.3
167 | * http://getbootstrap.com/javascript/#buttons
168 | * ========================================================================
169 | * Copyright 2013 Twitter, Inc.
170 | *
171 | * Licensed under the Apache License, Version 2.0 (the "License");
172 | * you may not use this file except in compliance with the License.
173 | * You may obtain a copy of the License at
174 | *
175 | * http://www.apache.org/licenses/LICENSE-2.0
176 | *
177 | * Unless required by applicable law or agreed to in writing, software
178 | * distributed under the License is distributed on an "AS IS" BASIS,
179 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
180 | * See the License for the specific language governing permissions and
181 | * limitations under the License.
182 | * ======================================================================== */
183 |
184 |
185 | +function ($) { "use strict";
186 |
187 | // BUTTON PUBLIC CLASS DEFINITION
188 | // ==============================
189 |
190 | var Button = function (element, options) {
191 | this.$element = $(element)
192 | this.options = $.extend({}, Button.DEFAULTS, options)
193 | }
194 |
195 | Button.DEFAULTS = {
196 | loadingText: 'loading...'
197 | }
198 |
199 | Button.prototype.setState = function (state) {
200 | var d = 'disabled'
201 | var $el = this.$element
202 | var val = $el.is('input') ? 'val' : 'html'
203 | var data = $el.data()
204 |
205 | state = state + 'Text'
206 |
207 | if (!data.resetText) $el.data('resetText', $el[val]())
208 |
209 | $el[val](data[state] || this.options[state])
210 |
211 | // push to event loop to allow forms to submit
212 | setTimeout(function () {
213 | state == 'loadingText' ?
214 | $el.addClass(d).attr(d, d) :
215 | $el.removeClass(d).removeAttr(d);
216 | }, 0)
217 | }
218 |
219 | Button.prototype.toggle = function () {
220 | var $parent = this.$element.closest('[data-toggle="buttons"]')
221 | var changed = true
222 |
223 | if ($parent.length) {
224 | var $input = this.$element.find('input')
225 | if ($input.prop('type') === 'radio') {
226 | // see if clicking on current one
227 | if ($input.prop('checked') && this.$element.hasClass('active'))
228 | changed = false
229 | else
230 | $parent.find('.active').removeClass('active')
231 | }
232 | if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
233 | }
234 |
235 | if (changed) this.$element.toggleClass('active')
236 | }
237 |
238 |
239 | // BUTTON PLUGIN DEFINITION
240 | // ========================
241 |
242 | var old = $.fn.button
243 |
244 | $.fn.button = function (option) {
245 | return this.each(function () {
246 | var $this = $(this)
247 | var data = $this.data('bs.button')
248 | var options = typeof option == 'object' && option
249 |
250 | if (!data) $this.data('bs.button', (data = new Button(this, options)))
251 |
252 | if (option == 'toggle') data.toggle()
253 | else if (option) data.setState(option)
254 | })
255 | }
256 |
257 | $.fn.button.Constructor = Button
258 |
259 |
260 | // BUTTON NO CONFLICT
261 | // ==================
262 |
263 | $.fn.button.noConflict = function () {
264 | $.fn.button = old
265 | return this
266 | }
267 |
268 |
269 | // BUTTON DATA-API
270 | // ===============
271 |
272 | $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
273 | var $btn = $(e.target)
274 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
275 | $btn.button('toggle')
276 | e.preventDefault()
277 | })
278 |
279 | }(jQuery);
280 |
281 | /* ========================================================================
282 | * Bootstrap: carousel.js v3.0.3
283 | * http://getbootstrap.com/javascript/#carousel
284 | * ========================================================================
285 | * Copyright 2013 Twitter, Inc.
286 | *
287 | * Licensed under the Apache License, Version 2.0 (the "License");
288 | * you may not use this file except in compliance with the License.
289 | * You may obtain a copy of the License at
290 | *
291 | * http://www.apache.org/licenses/LICENSE-2.0
292 | *
293 | * Unless required by applicable law or agreed to in writing, software
294 | * distributed under the License is distributed on an "AS IS" BASIS,
295 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
296 | * See the License for the specific language governing permissions and
297 | * limitations under the License.
298 | * ======================================================================== */
299 |
300 |
301 | +function ($) { "use strict";
302 |
303 | // CAROUSEL CLASS DEFINITION
304 | // =========================
305 |
306 | var Carousel = function (element, options) {
307 | this.$element = $(element)
308 | this.$indicators = this.$element.find('.carousel-indicators')
309 | this.options = options
310 | this.paused =
311 | this.sliding =
312 | this.interval =
313 | this.$active =
314 | this.$items = null
315 |
316 | this.options.pause == 'hover' && this.$element
317 | .on('mouseenter', $.proxy(this.pause, this))
318 | .on('mouseleave', $.proxy(this.cycle, this))
319 | }
320 |
321 | Carousel.DEFAULTS = {
322 | interval: 5000
323 | , pause: 'hover'
324 | , wrap: true
325 | }
326 |
327 | Carousel.prototype.cycle = function (e) {
328 | e || (this.paused = false)
329 |
330 | this.interval && clearInterval(this.interval)
331 |
332 | this.options.interval
333 | && !this.paused
334 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
335 |
336 | return this
337 | }
338 |
339 | Carousel.prototype.getActiveIndex = function () {
340 | this.$active = this.$element.find('.item.active')
341 | this.$items = this.$active.parent().children()
342 |
343 | return this.$items.index(this.$active)
344 | }
345 |
346 | Carousel.prototype.to = function (pos) {
347 | var that = this
348 | var activeIndex = this.getActiveIndex()
349 |
350 | if (pos > (this.$items.length - 1) || pos < 0) return
351 |
352 | if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
353 | if (activeIndex == pos) return this.pause().cycle()
354 |
355 | return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
356 | }
357 |
358 | Carousel.prototype.pause = function (e) {
359 | e || (this.paused = true)
360 |
361 | if (this.$element.find('.next, .prev').length && $.support.transition.end) {
362 | this.$element.trigger($.support.transition.end)
363 | this.cycle(true)
364 | }
365 |
366 | this.interval = clearInterval(this.interval)
367 |
368 | return this
369 | }
370 |
371 | Carousel.prototype.next = function () {
372 | if (this.sliding) return
373 | return this.slide('next')
374 | }
375 |
376 | Carousel.prototype.prev = function () {
377 | if (this.sliding) return
378 | return this.slide('prev')
379 | }
380 |
381 | Carousel.prototype.slide = function (type, next) {
382 | var $active = this.$element.find('.item.active')
383 | var $next = next || $active[type]()
384 | var isCycling = this.interval
385 | var direction = type == 'next' ? 'left' : 'right'
386 | var fallback = type == 'next' ? 'first' : 'last'
387 | var that = this
388 |
389 | if (!$next.length) {
390 | if (!this.options.wrap) return
391 | $next = this.$element.find('.item')[fallback]()
392 | }
393 |
394 | this.sliding = true
395 |
396 | isCycling && this.pause()
397 |
398 | var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
399 |
400 | if ($next.hasClass('active')) return
401 |
402 | if (this.$indicators.length) {
403 | this.$indicators.find('.active').removeClass('active')
404 | this.$element.one('slid.bs.carousel', function () {
405 | var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
406 | $nextIndicator && $nextIndicator.addClass('active')
407 | })
408 | }
409 |
410 | if ($.support.transition && this.$element.hasClass('slide')) {
411 | this.$element.trigger(e)
412 | if (e.isDefaultPrevented()) return
413 | $next.addClass(type)
414 | $next[0].offsetWidth // force reflow
415 | $active.addClass(direction)
416 | $next.addClass(direction)
417 | $active
418 | .one($.support.transition.end, function () {
419 | $next.removeClass([type, direction].join(' ')).addClass('active')
420 | $active.removeClass(['active', direction].join(' '))
421 | that.sliding = false
422 | setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
423 | })
424 | .emulateTransitionEnd(600)
425 | } else {
426 | this.$element.trigger(e)
427 | if (e.isDefaultPrevented()) return
428 | $active.removeClass('active')
429 | $next.addClass('active')
430 | this.sliding = false
431 | this.$element.trigger('slid.bs.carousel')
432 | }
433 |
434 | isCycling && this.cycle()
435 |
436 | return this
437 | }
438 |
439 |
440 | // CAROUSEL PLUGIN DEFINITION
441 | // ==========================
442 |
443 | var old = $.fn.carousel
444 |
445 | $.fn.carousel = function (option) {
446 | return this.each(function () {
447 | var $this = $(this)
448 | var data = $this.data('bs.carousel')
449 | var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
450 | var action = typeof option == 'string' ? option : options.slide
451 |
452 | if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
453 | if (typeof option == 'number') data.to(option)
454 | else if (action) data[action]()
455 | else if (options.interval) data.pause().cycle()
456 | })
457 | }
458 |
459 | $.fn.carousel.Constructor = Carousel
460 |
461 |
462 | // CAROUSEL NO CONFLICT
463 | // ====================
464 |
465 | $.fn.carousel.noConflict = function () {
466 | $.fn.carousel = old
467 | return this
468 | }
469 |
470 |
471 | // CAROUSEL DATA-API
472 | // =================
473 |
474 | $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
475 | var $this = $(this), href
476 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
477 | var options = $.extend({}, $target.data(), $this.data())
478 | var slideIndex = $this.attr('data-slide-to')
479 | if (slideIndex) options.interval = false
480 |
481 | $target.carousel(options)
482 |
483 | if (slideIndex = $this.attr('data-slide-to')) {
484 | $target.data('bs.carousel').to(slideIndex)
485 | }
486 |
487 | e.preventDefault()
488 | })
489 |
490 | $(window).on('load', function () {
491 | $('[data-ride="carousel"]').each(function () {
492 | var $carousel = $(this)
493 | $carousel.carousel($carousel.data())
494 | })
495 | })
496 |
497 | }(jQuery);
498 |
499 | /* ========================================================================
500 | * Bootstrap: collapse.js v3.0.3
501 | * http://getbootstrap.com/javascript/#collapse
502 | * ========================================================================
503 | * Copyright 2013 Twitter, Inc.
504 | *
505 | * Licensed under the Apache License, Version 2.0 (the "License");
506 | * you may not use this file except in compliance with the License.
507 | * You may obtain a copy of the License at
508 | *
509 | * http://www.apache.org/licenses/LICENSE-2.0
510 | *
511 | * Unless required by applicable law or agreed to in writing, software
512 | * distributed under the License is distributed on an "AS IS" BASIS,
513 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
514 | * See the License for the specific language governing permissions and
515 | * limitations under the License.
516 | * ======================================================================== */
517 |
518 |
519 | +function ($) { "use strict";
520 |
521 | // COLLAPSE PUBLIC CLASS DEFINITION
522 | // ================================
523 |
524 | var Collapse = function (element, options) {
525 | this.$element = $(element)
526 | this.options = $.extend({}, Collapse.DEFAULTS, options)
527 | this.transitioning = null
528 |
529 | if (this.options.parent) this.$parent = $(this.options.parent)
530 | if (this.options.toggle) this.toggle()
531 | }
532 |
533 | Collapse.DEFAULTS = {
534 | toggle: true
535 | }
536 |
537 | Collapse.prototype.dimension = function () {
538 | var hasWidth = this.$element.hasClass('width')
539 | return hasWidth ? 'width' : 'height'
540 | }
541 |
542 | Collapse.prototype.show = function () {
543 | if (this.transitioning || this.$element.hasClass('in')) return
544 |
545 | var startEvent = $.Event('show.bs.collapse')
546 | this.$element.trigger(startEvent)
547 | if (startEvent.isDefaultPrevented()) return
548 |
549 | var actives = this.$parent && this.$parent.find('> .panel > .in')
550 |
551 | if (actives && actives.length) {
552 | var hasData = actives.data('bs.collapse')
553 | if (hasData && hasData.transitioning) return
554 | actives.collapse('hide')
555 | hasData || actives.data('bs.collapse', null)
556 | }
557 |
558 | var dimension = this.dimension()
559 |
560 | this.$element
561 | .removeClass('collapse')
562 | .addClass('collapsing')
563 | [dimension](0)
564 |
565 | this.transitioning = 1
566 |
567 | var complete = function () {
568 | this.$element
569 | .removeClass('collapsing')
570 | .addClass('in')
571 | [dimension]('auto')
572 | this.transitioning = 0
573 | this.$element.trigger('shown.bs.collapse')
574 | }
575 |
576 | if (!$.support.transition) return complete.call(this)
577 |
578 | var scrollSize = $.camelCase(['scroll', dimension].join('-'))
579 |
580 | this.$element
581 | .one($.support.transition.end, $.proxy(complete, this))
582 | .emulateTransitionEnd(350)
583 | [dimension](this.$element[0][scrollSize])
584 | }
585 |
586 | Collapse.prototype.hide = function () {
587 | if (this.transitioning || !this.$element.hasClass('in')) return
588 |
589 | var startEvent = $.Event('hide.bs.collapse')
590 | this.$element.trigger(startEvent)
591 | if (startEvent.isDefaultPrevented()) return
592 |
593 | var dimension = this.dimension()
594 |
595 | this.$element
596 | [dimension](this.$element[dimension]())
597 | [0].offsetHeight
598 |
599 | this.$element
600 | .addClass('collapsing')
601 | .removeClass('collapse')
602 | .removeClass('in')
603 |
604 | this.transitioning = 1
605 |
606 | var complete = function () {
607 | this.transitioning = 0
608 | this.$element
609 | .trigger('hidden.bs.collapse')
610 | .removeClass('collapsing')
611 | .addClass('collapse')
612 | }
613 |
614 | if (!$.support.transition) return complete.call(this)
615 |
616 | this.$element
617 | [dimension](0)
618 | .one($.support.transition.end, $.proxy(complete, this))
619 | .emulateTransitionEnd(350)
620 | }
621 |
622 | Collapse.prototype.toggle = function () {
623 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
624 | }
625 |
626 |
627 | // COLLAPSE PLUGIN DEFINITION
628 | // ==========================
629 |
630 | var old = $.fn.collapse
631 |
632 | $.fn.collapse = function (option) {
633 | return this.each(function () {
634 | var $this = $(this)
635 | var data = $this.data('bs.collapse')
636 | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
637 |
638 | if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
639 | if (typeof option == 'string') data[option]()
640 | })
641 | }
642 |
643 | $.fn.collapse.Constructor = Collapse
644 |
645 |
646 | // COLLAPSE NO CONFLICT
647 | // ====================
648 |
649 | $.fn.collapse.noConflict = function () {
650 | $.fn.collapse = old
651 | return this
652 | }
653 |
654 |
655 | // COLLAPSE DATA-API
656 | // =================
657 |
658 | $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
659 | var $this = $(this), href
660 | var target = $this.attr('data-target')
661 | || e.preventDefault()
662 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
663 | var $target = $(target)
664 | var data = $target.data('bs.collapse')
665 | var option = data ? 'toggle' : $this.data()
666 | var parent = $this.attr('data-parent')
667 | var $parent = parent && $(parent)
668 |
669 | if (!data || !data.transitioning) {
670 | if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
671 | $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
672 | }
673 |
674 | $target.collapse(option)
675 | })
676 |
677 | }(jQuery);
678 |
679 | /* ========================================================================
680 | * Bootstrap: dropdown.js v3.0.3
681 | * http://getbootstrap.com/javascript/#dropdowns
682 | * ========================================================================
683 | * Copyright 2013 Twitter, Inc.
684 | *
685 | * Licensed under the Apache License, Version 2.0 (the "License");
686 | * you may not use this file except in compliance with the License.
687 | * You may obtain a copy of the License at
688 | *
689 | * http://www.apache.org/licenses/LICENSE-2.0
690 | *
691 | * Unless required by applicable law or agreed to in writing, software
692 | * distributed under the License is distributed on an "AS IS" BASIS,
693 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
694 | * See the License for the specific language governing permissions and
695 | * limitations under the License.
696 | * ======================================================================== */
697 |
698 |
699 | +function ($) { "use strict";
700 |
701 | // DROPDOWN CLASS DEFINITION
702 | // =========================
703 |
704 | var backdrop = '.dropdown-backdrop'
705 | var toggle = '[data-toggle=dropdown]'
706 | var Dropdown = function (element) {
707 | $(element).on('click.bs.dropdown', this.toggle)
708 | }
709 |
710 | Dropdown.prototype.toggle = function (e) {
711 | var $this = $(this)
712 |
713 | if ($this.is('.disabled, :disabled')) return
714 |
715 | var $parent = getParent($this)
716 | var isActive = $parent.hasClass('open')
717 |
718 | clearMenus()
719 |
720 | if (!isActive) {
721 | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
722 | // if mobile we use a backdrop because click events don't delegate
723 | $('').insertAfter($(this)).on('click', clearMenus)
724 | }
725 |
726 | $parent.trigger(e = $.Event('show.bs.dropdown'))
727 |
728 | if (e.isDefaultPrevented()) return
729 |
730 | $parent
731 | .toggleClass('open')
732 | .trigger('shown.bs.dropdown')
733 |
734 | $this.focus()
735 | }
736 |
737 | return false
738 | }
739 |
740 | Dropdown.prototype.keydown = function (e) {
741 | if (!/(38|40|27)/.test(e.keyCode)) return
742 |
743 | var $this = $(this)
744 |
745 | e.preventDefault()
746 | e.stopPropagation()
747 |
748 | if ($this.is('.disabled, :disabled')) return
749 |
750 | var $parent = getParent($this)
751 | var isActive = $parent.hasClass('open')
752 |
753 | if (!isActive || (isActive && e.keyCode == 27)) {
754 | if (e.which == 27) $parent.find(toggle).focus()
755 | return $this.click()
756 | }
757 |
758 | var $items = $('[role=menu] li:not(.divider):visible a', $parent)
759 |
760 | if (!$items.length) return
761 |
762 | var index = $items.index($items.filter(':focus'))
763 |
764 | if (e.keyCode == 38 && index > 0) index-- // up
765 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down
766 | if (!~index) index=0
767 |
768 | $items.eq(index).focus()
769 | }
770 |
771 | function clearMenus() {
772 | $(backdrop).remove()
773 | $(toggle).each(function (e) {
774 | var $parent = getParent($(this))
775 | if (!$parent.hasClass('open')) return
776 | $parent.trigger(e = $.Event('hide.bs.dropdown'))
777 | if (e.isDefaultPrevented()) return
778 | $parent.removeClass('open').trigger('hidden.bs.dropdown')
779 | })
780 | }
781 |
782 | function getParent($this) {
783 | var selector = $this.attr('data-target')
784 |
785 | if (!selector) {
786 | selector = $this.attr('href')
787 | selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
788 | }
789 |
790 | var $parent = selector && $(selector)
791 |
792 | return $parent && $parent.length ? $parent : $this.parent()
793 | }
794 |
795 |
796 | // DROPDOWN PLUGIN DEFINITION
797 | // ==========================
798 |
799 | var old = $.fn.dropdown
800 |
801 | $.fn.dropdown = function (option) {
802 | return this.each(function () {
803 | var $this = $(this)
804 | var data = $this.data('bs.dropdown')
805 |
806 | if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
807 | if (typeof option == 'string') data[option].call($this)
808 | })
809 | }
810 |
811 | $.fn.dropdown.Constructor = Dropdown
812 |
813 |
814 | // DROPDOWN NO CONFLICT
815 | // ====================
816 |
817 | $.fn.dropdown.noConflict = function () {
818 | $.fn.dropdown = old
819 | return this
820 | }
821 |
822 |
823 | // APPLY TO STANDARD DROPDOWN ELEMENTS
824 | // ===================================
825 |
826 | $(document)
827 | .on('click.bs.dropdown.data-api', clearMenus)
828 | .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
829 | .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
830 | .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
831 |
832 | }(jQuery);
833 |
834 | /* ========================================================================
835 | * Bootstrap: modal.js v3.0.3
836 | * http://getbootstrap.com/javascript/#modals
837 | * ========================================================================
838 | * Copyright 2013 Twitter, Inc.
839 | *
840 | * Licensed under the Apache License, Version 2.0 (the "License");
841 | * you may not use this file except in compliance with the License.
842 | * You may obtain a copy of the License at
843 | *
844 | * http://www.apache.org/licenses/LICENSE-2.0
845 | *
846 | * Unless required by applicable law or agreed to in writing, software
847 | * distributed under the License is distributed on an "AS IS" BASIS,
848 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
849 | * See the License for the specific language governing permissions and
850 | * limitations under the License.
851 | * ======================================================================== */
852 |
853 |
854 | +function ($) { "use strict";
855 |
856 | // MODAL CLASS DEFINITION
857 | // ======================
858 |
859 | var Modal = function (element, options) {
860 | this.options = options
861 | this.$element = $(element)
862 | this.$backdrop =
863 | this.isShown = null
864 |
865 | if (this.options.remote) this.$element.load(this.options.remote)
866 | }
867 |
868 | Modal.DEFAULTS = {
869 | backdrop: true
870 | , keyboard: true
871 | , show: true
872 | }
873 |
874 | Modal.prototype.toggle = function (_relatedTarget) {
875 | return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
876 | }
877 |
878 | Modal.prototype.show = function (_relatedTarget) {
879 | var that = this
880 | var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
881 |
882 | this.$element.trigger(e)
883 |
884 | if (this.isShown || e.isDefaultPrevented()) return
885 |
886 | this.isShown = true
887 |
888 | this.escape()
889 |
890 | this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
891 |
892 | this.backdrop(function () {
893 | var transition = $.support.transition && that.$element.hasClass('fade')
894 |
895 | if (!that.$element.parent().length) {
896 | that.$element.appendTo(document.body) // don't move modals dom position
897 | }
898 |
899 | that.$element.show()
900 |
901 | if (transition) {
902 | that.$element[0].offsetWidth // force reflow
903 | }
904 |
905 | that.$element
906 | .addClass('in')
907 | .attr('aria-hidden', false)
908 |
909 | that.enforceFocus()
910 |
911 | var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
912 |
913 | transition ?
914 | that.$element.find('.modal-dialog') // wait for modal to slide in
915 | .one($.support.transition.end, function () {
916 | that.$element.focus().trigger(e)
917 | })
918 | .emulateTransitionEnd(300) :
919 | that.$element.focus().trigger(e)
920 | })
921 | }
922 |
923 | Modal.prototype.hide = function (e) {
924 | if (e) e.preventDefault()
925 |
926 | e = $.Event('hide.bs.modal')
927 |
928 | this.$element.trigger(e)
929 |
930 | if (!this.isShown || e.isDefaultPrevented()) return
931 |
932 | this.isShown = false
933 |
934 | this.escape()
935 |
936 | $(document).off('focusin.bs.modal')
937 |
938 | this.$element
939 | .removeClass('in')
940 | .attr('aria-hidden', true)
941 | .off('click.dismiss.modal')
942 |
943 | $.support.transition && this.$element.hasClass('fade') ?
944 | this.$element
945 | .one($.support.transition.end, $.proxy(this.hideModal, this))
946 | .emulateTransitionEnd(300) :
947 | this.hideModal()
948 | }
949 |
950 | Modal.prototype.enforceFocus = function () {
951 | $(document)
952 | .off('focusin.bs.modal') // guard against infinite focus loop
953 | .on('focusin.bs.modal', $.proxy(function (e) {
954 | if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
955 | this.$element.focus()
956 | }
957 | }, this))
958 | }
959 |
960 | Modal.prototype.escape = function () {
961 | if (this.isShown && this.options.keyboard) {
962 | this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
963 | e.which == 27 && this.hide()
964 | }, this))
965 | } else if (!this.isShown) {
966 | this.$element.off('keyup.dismiss.bs.modal')
967 | }
968 | }
969 |
970 | Modal.prototype.hideModal = function () {
971 | var that = this
972 | this.$element.hide()
973 | this.backdrop(function () {
974 | that.removeBackdrop()
975 | that.$element.trigger('hidden.bs.modal')
976 | })
977 | }
978 |
979 | Modal.prototype.removeBackdrop = function () {
980 | this.$backdrop && this.$backdrop.remove()
981 | this.$backdrop = null
982 | }
983 |
984 | Modal.prototype.backdrop = function (callback) {
985 | var that = this
986 | var animate = this.$element.hasClass('fade') ? 'fade' : ''
987 |
988 | if (this.isShown && this.options.backdrop) {
989 | var doAnimate = $.support.transition && animate
990 |
991 | this.$backdrop = $('')
992 | .appendTo(document.body)
993 |
994 | this.$element.on('click.dismiss.modal', $.proxy(function (e) {
995 | if (e.target !== e.currentTarget) return
996 | this.options.backdrop == 'static'
997 | ? this.$element[0].focus.call(this.$element[0])
998 | : this.hide.call(this)
999 | }, this))
1000 |
1001 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1002 |
1003 | this.$backdrop.addClass('in')
1004 |
1005 | if (!callback) return
1006 |
1007 | doAnimate ?
1008 | this.$backdrop
1009 | .one($.support.transition.end, callback)
1010 | .emulateTransitionEnd(150) :
1011 | callback()
1012 |
1013 | } else if (!this.isShown && this.$backdrop) {
1014 | this.$backdrop.removeClass('in')
1015 |
1016 | $.support.transition && this.$element.hasClass('fade')?
1017 | this.$backdrop
1018 | .one($.support.transition.end, callback)
1019 | .emulateTransitionEnd(150) :
1020 | callback()
1021 |
1022 | } else if (callback) {
1023 | callback()
1024 | }
1025 | }
1026 |
1027 |
1028 | // MODAL PLUGIN DEFINITION
1029 | // =======================
1030 |
1031 | var old = $.fn.modal
1032 |
1033 | $.fn.modal = function (option, _relatedTarget) {
1034 | return this.each(function () {
1035 | var $this = $(this)
1036 | var data = $this.data('bs.modal')
1037 | var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
1038 |
1039 | if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
1040 | if (typeof option == 'string') data[option](_relatedTarget)
1041 | else if (options.show) data.show(_relatedTarget)
1042 | })
1043 | }
1044 |
1045 | $.fn.modal.Constructor = Modal
1046 |
1047 |
1048 | // MODAL NO CONFLICT
1049 | // =================
1050 |
1051 | $.fn.modal.noConflict = function () {
1052 | $.fn.modal = old
1053 | return this
1054 | }
1055 |
1056 |
1057 | // MODAL DATA-API
1058 | // ==============
1059 |
1060 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
1061 | var $this = $(this)
1062 | var href = $this.attr('href')
1063 | var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1064 | var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1065 |
1066 | e.preventDefault()
1067 |
1068 | $target
1069 | .modal(option, this)
1070 | .one('hide', function () {
1071 | $this.is(':visible') && $this.focus()
1072 | })
1073 | })
1074 |
1075 | $(document)
1076 | .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
1077 | .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
1078 |
1079 | }(jQuery);
1080 |
1081 | /* ========================================================================
1082 | * Bootstrap: tooltip.js v3.0.3
1083 | * http://getbootstrap.com/javascript/#tooltip
1084 | * Inspired by the original jQuery.tipsy by Jason Frame
1085 | * ========================================================================
1086 | * Copyright 2013 Twitter, Inc.
1087 | *
1088 | * Licensed under the Apache License, Version 2.0 (the "License");
1089 | * you may not use this file except in compliance with the License.
1090 | * You may obtain a copy of the License at
1091 | *
1092 | * http://www.apache.org/licenses/LICENSE-2.0
1093 | *
1094 | * Unless required by applicable law or agreed to in writing, software
1095 | * distributed under the License is distributed on an "AS IS" BASIS,
1096 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1097 | * See the License for the specific language governing permissions and
1098 | * limitations under the License.
1099 | * ======================================================================== */
1100 |
1101 |
1102 | +function ($) { "use strict";
1103 |
1104 | // TOOLTIP PUBLIC CLASS DEFINITION
1105 | // ===============================
1106 |
1107 | var Tooltip = function (element, options) {
1108 | this.type =
1109 | this.options =
1110 | this.enabled =
1111 | this.timeout =
1112 | this.hoverState =
1113 | this.$element = null
1114 |
1115 | this.init('tooltip', element, options)
1116 | }
1117 |
1118 | Tooltip.DEFAULTS = {
1119 | animation: true
1120 | , placement: 'top'
1121 | , selector: false
1122 | , template: '