1.1 --- a/chess/src/main/webapp/pages/js/bootstrap.js Fri Jul 26 12:56:18 2013 +0200
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,2284 +0,0 @@
1.4 -/*
1.5 - * The MIT License (MIT)
1.6 - *
1.7 - * Copyright (C) 2013 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
1.8 - *
1.9 - * Permission is hereby granted, free of charge, to any person obtaining a copy
1.10 - * of this software and associated documentation files (the "Software"), to deal
1.11 - * in the Software without restriction, including without limitation the rights
1.12 - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1.13 - * copies of the Software, and to permit persons to whom the Software is
1.14 - * furnished to do so, subject to the following conditions:
1.15 - *
1.16 - * The above copyright notice and this permission notice shall be included in
1.17 - * all copies or substantial portions of the Software.
1.18 - *
1.19 - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1.20 - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1.21 - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1.22 - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1.23 - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1.24 - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1.25 - * THE SOFTWARE.
1.26 - */
1.27 -
1.28 -!function ($) {
1.29 -
1.30 - "use strict"; // jshint ;_;
1.31 -
1.32 -
1.33 - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
1.34 - * ======================================================= */
1.35 -
1.36 - $(function () {
1.37 -
1.38 - $.support.transition = (function () {
1.39 -
1.40 - var transitionEnd = (function () {
1.41 -
1.42 - var el = document.createElement('bootstrap')
1.43 - , transEndEventNames = {
1.44 - 'WebkitTransition' : 'webkitTransitionEnd'
1.45 - , 'MozTransition' : 'transitionend'
1.46 - , 'OTransition' : 'oTransitionEnd otransitionend'
1.47 - , 'transition' : 'transitionend'
1.48 - }
1.49 - , name
1.50 -
1.51 - for (name in transEndEventNames){
1.52 - if (el.style[name] !== undefined) {
1.53 - return transEndEventNames[name]
1.54 - }
1.55 - }
1.56 -
1.57 - }())
1.58 -
1.59 - return transitionEnd && {
1.60 - end: transitionEnd
1.61 - }
1.62 -
1.63 - })()
1.64 -
1.65 - })
1.66 -
1.67 -}(window.jQuery);/* ==========================================================
1.68 - * bootstrap-alert.js v2.3.2
1.69 - * http://twitter.github.com/bootstrap/javascript.html#alerts
1.70 - * ==========================================================
1.71 - * Copyright 2012 Twitter, Inc.
1.72 - *
1.73 - * Licensed under the Apache License, Version 2.0 (the "License");
1.74 - * you may not use this file except in compliance with the License.
1.75 - * You may obtain a copy of the License at
1.76 - *
1.77 - * http://www.apache.org/licenses/LICENSE-2.0
1.78 - *
1.79 - * Unless required by applicable law or agreed to in writing, software
1.80 - * distributed under the License is distributed on an "AS IS" BASIS,
1.81 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.82 - * See the License for the specific language governing permissions and
1.83 - * limitations under the License.
1.84 - * ========================================================== */
1.85 -
1.86 -
1.87 -!function ($) {
1.88 -
1.89 - "use strict"; // jshint ;_;
1.90 -
1.91 -
1.92 - /* ALERT CLASS DEFINITION
1.93 - * ====================== */
1.94 -
1.95 - var dismiss = '[data-dismiss="alert"]'
1.96 - , Alert = function (el) {
1.97 - $(el).on('click', dismiss, this.close)
1.98 - }
1.99 -
1.100 - Alert.prototype.close = function (e) {
1.101 - var $this = $(this)
1.102 - , selector = $this.attr('data-target')
1.103 - , $parent
1.104 -
1.105 - if (!selector) {
1.106 - selector = $this.attr('href')
1.107 - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1.108 - }
1.109 -
1.110 - $parent = $(selector)
1.111 -
1.112 - e && e.preventDefault()
1.113 -
1.114 - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
1.115 -
1.116 - $parent.trigger(e = $.Event('close'))
1.117 -
1.118 - if (e.isDefaultPrevented()) return
1.119 -
1.120 - $parent.removeClass('in')
1.121 -
1.122 - function removeElement() {
1.123 - $parent
1.124 - .trigger('closed')
1.125 - .remove()
1.126 - }
1.127 -
1.128 - $.support.transition && $parent.hasClass('fade') ?
1.129 - $parent.on($.support.transition.end, removeElement) :
1.130 - removeElement()
1.131 - }
1.132 -
1.133 -
1.134 - /* ALERT PLUGIN DEFINITION
1.135 - * ======================= */
1.136 -
1.137 - var old = $.fn.alert
1.138 -
1.139 - $.fn.alert = function (option) {
1.140 - return this.each(function () {
1.141 - var $this = $(this)
1.142 - , data = $this.data('alert')
1.143 - if (!data) $this.data('alert', (data = new Alert(this)))
1.144 - if (typeof option == 'string') data[option].call($this)
1.145 - })
1.146 - }
1.147 -
1.148 - $.fn.alert.Constructor = Alert
1.149 -
1.150 -
1.151 - /* ALERT NO CONFLICT
1.152 - * ================= */
1.153 -
1.154 - $.fn.alert.noConflict = function () {
1.155 - $.fn.alert = old
1.156 - return this
1.157 - }
1.158 -
1.159 -
1.160 - /* ALERT DATA-API
1.161 - * ============== */
1.162 -
1.163 - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
1.164 -
1.165 -}(window.jQuery);/* ============================================================
1.166 - * bootstrap-button.js v2.3.2
1.167 - * http://twitter.github.com/bootstrap/javascript.html#buttons
1.168 - * ============================================================
1.169 - * Copyright 2012 Twitter, Inc.
1.170 - *
1.171 - * Licensed under the Apache License, Version 2.0 (the "License");
1.172 - * you may not use this file except in compliance with the License.
1.173 - * You may obtain a copy of the License at
1.174 - *
1.175 - * http://www.apache.org/licenses/LICENSE-2.0
1.176 - *
1.177 - * Unless required by applicable law or agreed to in writing, software
1.178 - * distributed under the License is distributed on an "AS IS" BASIS,
1.179 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.180 - * See the License for the specific language governing permissions and
1.181 - * limitations under the License.
1.182 - * ============================================================ */
1.183 -
1.184 -
1.185 -!function ($) {
1.186 -
1.187 - "use strict"; // jshint ;_;
1.188 -
1.189 -
1.190 - /* BUTTON PUBLIC CLASS DEFINITION
1.191 - * ============================== */
1.192 -
1.193 - var Button = function (element, options) {
1.194 - this.$element = $(element)
1.195 - this.options = $.extend({}, $.fn.button.defaults, options)
1.196 - }
1.197 -
1.198 - Button.prototype.setState = function (state) {
1.199 - var d = 'disabled'
1.200 - , $el = this.$element
1.201 - , data = $el.data()
1.202 - , val = $el.is('input') ? 'val' : 'html'
1.203 -
1.204 - state = state + 'Text'
1.205 - data.resetText || $el.data('resetText', $el[val]())
1.206 -
1.207 - $el[val](data[state] || this.options[state])
1.208 -
1.209 - // push to event loop to allow forms to submit
1.210 - setTimeout(function () {
1.211 - state == 'loadingText' ?
1.212 - $el.addClass(d).attr(d, d) :
1.213 - $el.removeClass(d).removeAttr(d)
1.214 - }, 0)
1.215 - }
1.216 -
1.217 - Button.prototype.toggle = function () {
1.218 - var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
1.219 -
1.220 - $parent && $parent
1.221 - .find('.active')
1.222 - .removeClass('active')
1.223 -
1.224 - this.$element.toggleClass('active')
1.225 - }
1.226 -
1.227 -
1.228 - /* BUTTON PLUGIN DEFINITION
1.229 - * ======================== */
1.230 -
1.231 - var old = $.fn.button
1.232 -
1.233 - $.fn.button = function (option) {
1.234 - return this.each(function () {
1.235 - var $this = $(this)
1.236 - , data = $this.data('button')
1.237 - , options = typeof option == 'object' && option
1.238 - if (!data) $this.data('button', (data = new Button(this, options)))
1.239 - if (option == 'toggle') data.toggle()
1.240 - else if (option) data.setState(option)
1.241 - })
1.242 - }
1.243 -
1.244 - $.fn.button.defaults = {
1.245 - loadingText: 'loading...'
1.246 - }
1.247 -
1.248 - $.fn.button.Constructor = Button
1.249 -
1.250 -
1.251 - /* BUTTON NO CONFLICT
1.252 - * ================== */
1.253 -
1.254 - $.fn.button.noConflict = function () {
1.255 - $.fn.button = old
1.256 - return this
1.257 - }
1.258 -
1.259 -
1.260 - /* BUTTON DATA-API
1.261 - * =============== */
1.262 -
1.263 - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
1.264 - var $btn = $(e.target)
1.265 - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
1.266 - $btn.button('toggle')
1.267 - })
1.268 -
1.269 -}(window.jQuery);/* ==========================================================
1.270 - * bootstrap-carousel.js v2.3.2
1.271 - * http://twitter.github.com/bootstrap/javascript.html#carousel
1.272 - * ==========================================================
1.273 - * Copyright 2012 Twitter, Inc.
1.274 - *
1.275 - * Licensed under the Apache License, Version 2.0 (the "License");
1.276 - * you may not use this file except in compliance with the License.
1.277 - * You may obtain a copy of the License at
1.278 - *
1.279 - * http://www.apache.org/licenses/LICENSE-2.0
1.280 - *
1.281 - * Unless required by applicable law or agreed to in writing, software
1.282 - * distributed under the License is distributed on an "AS IS" BASIS,
1.283 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.284 - * See the License for the specific language governing permissions and
1.285 - * limitations under the License.
1.286 - * ========================================================== */
1.287 -
1.288 -
1.289 -!function ($) {
1.290 -
1.291 - "use strict"; // jshint ;_;
1.292 -
1.293 -
1.294 - /* CAROUSEL CLASS DEFINITION
1.295 - * ========================= */
1.296 -
1.297 - var Carousel = function (element, options) {
1.298 - this.$element = $(element)
1.299 - this.$indicators = this.$element.find('.carousel-indicators')
1.300 - this.options = options
1.301 - this.options.pause == 'hover' && this.$element
1.302 - .on('mouseenter', $.proxy(this.pause, this))
1.303 - .on('mouseleave', $.proxy(this.cycle, this))
1.304 - }
1.305 -
1.306 - Carousel.prototype = {
1.307 -
1.308 - cycle: function (e) {
1.309 - if (!e) this.paused = false
1.310 - if (this.interval) clearInterval(this.interval);
1.311 - this.options.interval
1.312 - && !this.paused
1.313 - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
1.314 - return this
1.315 - }
1.316 -
1.317 - , getActiveIndex: function () {
1.318 - this.$active = this.$element.find('.item.active')
1.319 - this.$items = this.$active.parent().children()
1.320 - return this.$items.index(this.$active)
1.321 - }
1.322 -
1.323 - , to: function (pos) {
1.324 - var activeIndex = this.getActiveIndex()
1.325 - , that = this
1.326 -
1.327 - if (pos > (this.$items.length - 1) || pos < 0) return
1.328 -
1.329 - if (this.sliding) {
1.330 - return this.$element.one('slid', function () {
1.331 - that.to(pos)
1.332 - })
1.333 - }
1.334 -
1.335 - if (activeIndex == pos) {
1.336 - return this.pause().cycle()
1.337 - }
1.338 -
1.339 - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
1.340 - }
1.341 -
1.342 - , pause: function (e) {
1.343 - if (!e) this.paused = true
1.344 - if (this.$element.find('.next, .prev').length && $.support.transition.end) {
1.345 - this.$element.trigger($.support.transition.end)
1.346 - this.cycle(true)
1.347 - }
1.348 - clearInterval(this.interval)
1.349 - this.interval = null
1.350 - return this
1.351 - }
1.352 -
1.353 - , next: function () {
1.354 - if (this.sliding) return
1.355 - return this.slide('next')
1.356 - }
1.357 -
1.358 - , prev: function () {
1.359 - if (this.sliding) return
1.360 - return this.slide('prev')
1.361 - }
1.362 -
1.363 - , slide: function (type, next) {
1.364 - var $active = this.$element.find('.item.active')
1.365 - , $next = next || $active[type]()
1.366 - , isCycling = this.interval
1.367 - , direction = type == 'next' ? 'left' : 'right'
1.368 - , fallback = type == 'next' ? 'first' : 'last'
1.369 - , that = this
1.370 - , e
1.371 -
1.372 - this.sliding = true
1.373 -
1.374 - isCycling && this.pause()
1.375 -
1.376 - $next = $next.length ? $next : this.$element.find('.item')[fallback]()
1.377 -
1.378 - e = $.Event('slide', {
1.379 - relatedTarget: $next[0]
1.380 - , direction: direction
1.381 - })
1.382 -
1.383 - if ($next.hasClass('active')) return
1.384 -
1.385 - if (this.$indicators.length) {
1.386 - this.$indicators.find('.active').removeClass('active')
1.387 - this.$element.one('slid', function () {
1.388 - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
1.389 - $nextIndicator && $nextIndicator.addClass('active')
1.390 - })
1.391 - }
1.392 -
1.393 - if ($.support.transition && this.$element.hasClass('slide')) {
1.394 - this.$element.trigger(e)
1.395 - if (e.isDefaultPrevented()) return
1.396 - $next.addClass(type)
1.397 - $next[0].offsetWidth // force reflow
1.398 - $active.addClass(direction)
1.399 - $next.addClass(direction)
1.400 - this.$element.one($.support.transition.end, function () {
1.401 - $next.removeClass([type, direction].join(' ')).addClass('active')
1.402 - $active.removeClass(['active', direction].join(' '))
1.403 - that.sliding = false
1.404 - setTimeout(function () { that.$element.trigger('slid') }, 0)
1.405 - })
1.406 - } else {
1.407 - this.$element.trigger(e)
1.408 - if (e.isDefaultPrevented()) return
1.409 - $active.removeClass('active')
1.410 - $next.addClass('active')
1.411 - this.sliding = false
1.412 - this.$element.trigger('slid')
1.413 - }
1.414 -
1.415 - isCycling && this.cycle()
1.416 -
1.417 - return this
1.418 - }
1.419 -
1.420 - }
1.421 -
1.422 -
1.423 - /* CAROUSEL PLUGIN DEFINITION
1.424 - * ========================== */
1.425 -
1.426 - var old = $.fn.carousel
1.427 -
1.428 - $.fn.carousel = function (option) {
1.429 - return this.each(function () {
1.430 - var $this = $(this)
1.431 - , data = $this.data('carousel')
1.432 - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
1.433 - , action = typeof option == 'string' ? option : options.slide
1.434 - if (!data) $this.data('carousel', (data = new Carousel(this, options)))
1.435 - if (typeof option == 'number') data.to(option)
1.436 - else if (action) data[action]()
1.437 - else if (options.interval) data.pause().cycle()
1.438 - })
1.439 - }
1.440 -
1.441 - $.fn.carousel.defaults = {
1.442 - interval: 5000
1.443 - , pause: 'hover'
1.444 - }
1.445 -
1.446 - $.fn.carousel.Constructor = Carousel
1.447 -
1.448 -
1.449 - /* CAROUSEL NO CONFLICT
1.450 - * ==================== */
1.451 -
1.452 - $.fn.carousel.noConflict = function () {
1.453 - $.fn.carousel = old
1.454 - return this
1.455 - }
1.456 -
1.457 - /* CAROUSEL DATA-API
1.458 - * ================= */
1.459 -
1.460 - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
1.461 - var $this = $(this), href
1.462 - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1.463 - , options = $.extend({}, $target.data(), $this.data())
1.464 - , slideIndex
1.465 -
1.466 - $target.carousel(options)
1.467 -
1.468 - if (slideIndex = $this.attr('data-slide-to')) {
1.469 - $target.data('carousel').pause().to(slideIndex).cycle()
1.470 - }
1.471 -
1.472 - e.preventDefault()
1.473 - })
1.474 -
1.475 -}(window.jQuery);/* =============================================================
1.476 - * bootstrap-collapse.js v2.3.2
1.477 - * http://twitter.github.com/bootstrap/javascript.html#collapse
1.478 - * =============================================================
1.479 - * Copyright 2012 Twitter, Inc.
1.480 - *
1.481 - * Licensed under the Apache License, Version 2.0 (the "License");
1.482 - * you may not use this file except in compliance with the License.
1.483 - * You may obtain a copy of the License at
1.484 - *
1.485 - * http://www.apache.org/licenses/LICENSE-2.0
1.486 - *
1.487 - * Unless required by applicable law or agreed to in writing, software
1.488 - * distributed under the License is distributed on an "AS IS" BASIS,
1.489 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.490 - * See the License for the specific language governing permissions and
1.491 - * limitations under the License.
1.492 - * ============================================================ */
1.493 -
1.494 -
1.495 -!function ($) {
1.496 -
1.497 - "use strict"; // jshint ;_;
1.498 -
1.499 -
1.500 - /* COLLAPSE PUBLIC CLASS DEFINITION
1.501 - * ================================ */
1.502 -
1.503 - var Collapse = function (element, options) {
1.504 - this.$element = $(element)
1.505 - this.options = $.extend({}, $.fn.collapse.defaults, options)
1.506 -
1.507 - if (this.options.parent) {
1.508 - this.$parent = $(this.options.parent)
1.509 - }
1.510 -
1.511 - this.options.toggle && this.toggle()
1.512 - }
1.513 -
1.514 - Collapse.prototype = {
1.515 -
1.516 - constructor: Collapse
1.517 -
1.518 - , dimension: function () {
1.519 - var hasWidth = this.$element.hasClass('width')
1.520 - return hasWidth ? 'width' : 'height'
1.521 - }
1.522 -
1.523 - , show: function () {
1.524 - var dimension
1.525 - , scroll
1.526 - , actives
1.527 - , hasData
1.528 -
1.529 - if (this.transitioning || this.$element.hasClass('in')) return
1.530 -
1.531 - dimension = this.dimension()
1.532 - scroll = $.camelCase(['scroll', dimension].join('-'))
1.533 - actives = this.$parent && this.$parent.find('> .accordion-group > .in')
1.534 -
1.535 - if (actives && actives.length) {
1.536 - hasData = actives.data('collapse')
1.537 - if (hasData && hasData.transitioning) return
1.538 - actives.collapse('hide')
1.539 - hasData || actives.data('collapse', null)
1.540 - }
1.541 -
1.542 - this.$element[dimension](0)
1.543 - this.transition('addClass', $.Event('show'), 'shown')
1.544 - $.support.transition && this.$element[dimension](this.$element[0][scroll])
1.545 - }
1.546 -
1.547 - , hide: function () {
1.548 - var dimension
1.549 - if (this.transitioning || !this.$element.hasClass('in')) return
1.550 - dimension = this.dimension()
1.551 - this.reset(this.$element[dimension]())
1.552 - this.transition('removeClass', $.Event('hide'), 'hidden')
1.553 - this.$element[dimension](0)
1.554 - }
1.555 -
1.556 - , reset: function (size) {
1.557 - var dimension = this.dimension()
1.558 -
1.559 - this.$element
1.560 - .removeClass('collapse')
1.561 - [dimension](size || 'auto')
1.562 - [0].offsetWidth
1.563 -
1.564 - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
1.565 -
1.566 - return this
1.567 - }
1.568 -
1.569 - , transition: function (method, startEvent, completeEvent) {
1.570 - var that = this
1.571 - , complete = function () {
1.572 - if (startEvent.type == 'show') that.reset()
1.573 - that.transitioning = 0
1.574 - that.$element.trigger(completeEvent)
1.575 - }
1.576 -
1.577 - this.$element.trigger(startEvent)
1.578 -
1.579 - if (startEvent.isDefaultPrevented()) return
1.580 -
1.581 - this.transitioning = 1
1.582 -
1.583 - this.$element[method]('in')
1.584 -
1.585 - $.support.transition && this.$element.hasClass('collapse') ?
1.586 - this.$element.one($.support.transition.end, complete) :
1.587 - complete()
1.588 - }
1.589 -
1.590 - , toggle: function () {
1.591 - this[this.$element.hasClass('in') ? 'hide' : 'show']()
1.592 - }
1.593 -
1.594 - }
1.595 -
1.596 -
1.597 - /* COLLAPSE PLUGIN DEFINITION
1.598 - * ========================== */
1.599 -
1.600 - var old = $.fn.collapse
1.601 -
1.602 - $.fn.collapse = function (option) {
1.603 - return this.each(function () {
1.604 - var $this = $(this)
1.605 - , data = $this.data('collapse')
1.606 - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
1.607 - if (!data) $this.data('collapse', (data = new Collapse(this, options)))
1.608 - if (typeof option == 'string') data[option]()
1.609 - })
1.610 - }
1.611 -
1.612 - $.fn.collapse.defaults = {
1.613 - toggle: true
1.614 - }
1.615 -
1.616 - $.fn.collapse.Constructor = Collapse
1.617 -
1.618 -
1.619 - /* COLLAPSE NO CONFLICT
1.620 - * ==================== */
1.621 -
1.622 - $.fn.collapse.noConflict = function () {
1.623 - $.fn.collapse = old
1.624 - return this
1.625 - }
1.626 -
1.627 -
1.628 - /* COLLAPSE DATA-API
1.629 - * ================= */
1.630 -
1.631 - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
1.632 - var $this = $(this), href
1.633 - , target = $this.attr('data-target')
1.634 - || e.preventDefault()
1.635 - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
1.636 - , option = $(target).data('collapse') ? 'toggle' : $this.data()
1.637 - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
1.638 - $(target).collapse(option)
1.639 - })
1.640 -
1.641 -}(window.jQuery);/* ============================================================
1.642 - * bootstrap-dropdown.js v2.3.2
1.643 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns
1.644 - * ============================================================
1.645 - * Copyright 2012 Twitter, Inc.
1.646 - *
1.647 - * Licensed under the Apache License, Version 2.0 (the "License");
1.648 - * you may not use this file except in compliance with the License.
1.649 - * You may obtain a copy of the License at
1.650 - *
1.651 - * http://www.apache.org/licenses/LICENSE-2.0
1.652 - *
1.653 - * Unless required by applicable law or agreed to in writing, software
1.654 - * distributed under the License is distributed on an "AS IS" BASIS,
1.655 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.656 - * See the License for the specific language governing permissions and
1.657 - * limitations under the License.
1.658 - * ============================================================ */
1.659 -
1.660 -
1.661 -!function ($) {
1.662 -
1.663 - "use strict"; // jshint ;_;
1.664 -
1.665 -
1.666 - /* DROPDOWN CLASS DEFINITION
1.667 - * ========================= */
1.668 -
1.669 - var toggle = '[data-toggle=dropdown]'
1.670 - , Dropdown = function (element) {
1.671 - var $el = $(element).on('click.dropdown.data-api', this.toggle)
1.672 - $('html').on('click.dropdown.data-api', function () {
1.673 - $el.parent().removeClass('open')
1.674 - })
1.675 - }
1.676 -
1.677 - Dropdown.prototype = {
1.678 -
1.679 - constructor: Dropdown
1.680 -
1.681 - , toggle: function (e) {
1.682 - var $this = $(this)
1.683 - , $parent
1.684 - , isActive
1.685 -
1.686 - if ($this.is('.disabled, :disabled')) return
1.687 -
1.688 - $parent = getParent($this)
1.689 -
1.690 - isActive = $parent.hasClass('open')
1.691 -
1.692 - clearMenus()
1.693 -
1.694 - if (!isActive) {
1.695 - if ('ontouchstart' in document.documentElement) {
1.696 - // if mobile we we use a backdrop because click events don't delegate
1.697 - $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus)
1.698 - }
1.699 - $parent.toggleClass('open')
1.700 - }
1.701 -
1.702 - $this.focus()
1.703 -
1.704 - return false
1.705 - }
1.706 -
1.707 - , keydown: function (e) {
1.708 - var $this
1.709 - , $items
1.710 - , $active
1.711 - , $parent
1.712 - , isActive
1.713 - , index
1.714 -
1.715 - if (!/(38|40|27)/.test(e.keyCode)) return
1.716 -
1.717 - $this = $(this)
1.718 -
1.719 - e.preventDefault()
1.720 - e.stopPropagation()
1.721 -
1.722 - if ($this.is('.disabled, :disabled')) return
1.723 -
1.724 - $parent = getParent($this)
1.725 -
1.726 - isActive = $parent.hasClass('open')
1.727 -
1.728 - if (!isActive || (isActive && e.keyCode == 27)) {
1.729 - if (e.which == 27) $parent.find(toggle).focus()
1.730 - return $this.click()
1.731 - }
1.732 -
1.733 - $items = $('[role=menu] li:not(.divider):visible a', $parent)
1.734 -
1.735 - if (!$items.length) return
1.736 -
1.737 - index = $items.index($items.filter(':focus'))
1.738 -
1.739 - if (e.keyCode == 38 && index > 0) index-- // up
1.740 - if (e.keyCode == 40 && index < $items.length - 1) index++ // down
1.741 - if (!~index) index = 0
1.742 -
1.743 - $items
1.744 - .eq(index)
1.745 - .focus()
1.746 - }
1.747 -
1.748 - }
1.749 -
1.750 - function clearMenus() {
1.751 - $('.dropdown-backdrop').remove()
1.752 - $(toggle).each(function () {
1.753 - getParent($(this)).removeClass('open')
1.754 - })
1.755 - }
1.756 -
1.757 - function getParent($this) {
1.758 - var selector = $this.attr('data-target')
1.759 - , $parent
1.760 -
1.761 - if (!selector) {
1.762 - selector = $this.attr('href')
1.763 - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1.764 - }
1.765 -
1.766 - $parent = selector && $(selector)
1.767 -
1.768 - if (!$parent || !$parent.length) $parent = $this.parent()
1.769 -
1.770 - return $parent
1.771 - }
1.772 -
1.773 -
1.774 - /* DROPDOWN PLUGIN DEFINITION
1.775 - * ========================== */
1.776 -
1.777 - var old = $.fn.dropdown
1.778 -
1.779 - $.fn.dropdown = function (option) {
1.780 - return this.each(function () {
1.781 - var $this = $(this)
1.782 - , data = $this.data('dropdown')
1.783 - if (!data) $this.data('dropdown', (data = new Dropdown(this)))
1.784 - if (typeof option == 'string') data[option].call($this)
1.785 - })
1.786 - }
1.787 -
1.788 - $.fn.dropdown.Constructor = Dropdown
1.789 -
1.790 -
1.791 - /* DROPDOWN NO CONFLICT
1.792 - * ==================== */
1.793 -
1.794 - $.fn.dropdown.noConflict = function () {
1.795 - $.fn.dropdown = old
1.796 - return this
1.797 - }
1.798 -
1.799 -
1.800 - /* APPLY TO STANDARD DROPDOWN ELEMENTS
1.801 - * =================================== */
1.802 -
1.803 - $(document)
1.804 - .on('click.dropdown.data-api', clearMenus)
1.805 - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
1.806 - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)
1.807 - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)
1.808 -
1.809 -}(window.jQuery);
1.810 -/* =========================================================
1.811 - * bootstrap-modal.js v2.3.2
1.812 - * http://twitter.github.com/bootstrap/javascript.html#modals
1.813 - * =========================================================
1.814 - * Copyright 2012 Twitter, Inc.
1.815 - *
1.816 - * Licensed under the Apache License, Version 2.0 (the "License");
1.817 - * you may not use this file except in compliance with the License.
1.818 - * You may obtain a copy of the License at
1.819 - *
1.820 - * http://www.apache.org/licenses/LICENSE-2.0
1.821 - *
1.822 - * Unless required by applicable law or agreed to in writing, software
1.823 - * distributed under the License is distributed on an "AS IS" BASIS,
1.824 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.825 - * See the License for the specific language governing permissions and
1.826 - * limitations under the License.
1.827 - * ========================================================= */
1.828 -
1.829 -
1.830 -!function ($) {
1.831 -
1.832 - "use strict"; // jshint ;_;
1.833 -
1.834 -
1.835 - /* MODAL CLASS DEFINITION
1.836 - * ====================== */
1.837 -
1.838 - var Modal = function (element, options) {
1.839 - this.options = options
1.840 - this.$element = $(element)
1.841 - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
1.842 - this.options.remote && this.$element.find('.modal-body').load(this.options.remote)
1.843 - }
1.844 -
1.845 - Modal.prototype = {
1.846 -
1.847 - constructor: Modal
1.848 -
1.849 - , toggle: function () {
1.850 - return this[!this.isShown ? 'show' : 'hide']()
1.851 - }
1.852 -
1.853 - , show: function () {
1.854 - var that = this
1.855 - , e = $.Event('show')
1.856 -
1.857 - this.$element.trigger(e)
1.858 -
1.859 - if (this.isShown || e.isDefaultPrevented()) return
1.860 -
1.861 - this.isShown = true
1.862 -
1.863 - this.escape()
1.864 -
1.865 - this.backdrop(function () {
1.866 - var transition = $.support.transition && that.$element.hasClass('fade')
1.867 -
1.868 - if (!that.$element.parent().length) {
1.869 - that.$element.appendTo(document.body) //don't move modals dom position
1.870 - }
1.871 -
1.872 - that.$element.show()
1.873 -
1.874 - if (transition) {
1.875 - that.$element[0].offsetWidth // force reflow
1.876 - }
1.877 -
1.878 - that.$element
1.879 - .addClass('in')
1.880 - .attr('aria-hidden', false)
1.881 -
1.882 - that.enforceFocus()
1.883 -
1.884 - transition ?
1.885 - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :
1.886 - that.$element.focus().trigger('shown')
1.887 -
1.888 - })
1.889 - }
1.890 -
1.891 - , hide: function (e) {
1.892 - e && e.preventDefault()
1.893 -
1.894 - var that = this
1.895 -
1.896 - e = $.Event('hide')
1.897 -
1.898 - this.$element.trigger(e)
1.899 -
1.900 - if (!this.isShown || e.isDefaultPrevented()) return
1.901 -
1.902 - this.isShown = false
1.903 -
1.904 - this.escape()
1.905 -
1.906 - $(document).off('focusin.modal')
1.907 -
1.908 - this.$element
1.909 - .removeClass('in')
1.910 - .attr('aria-hidden', true)
1.911 -
1.912 - $.support.transition && this.$element.hasClass('fade') ?
1.913 - this.hideWithTransition() :
1.914 - this.hideModal()
1.915 - }
1.916 -
1.917 - , enforceFocus: function () {
1.918 - var that = this
1.919 - $(document).on('focusin.modal', function (e) {
1.920 - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {
1.921 - that.$element.focus()
1.922 - }
1.923 - })
1.924 - }
1.925 -
1.926 - , escape: function () {
1.927 - var that = this
1.928 - if (this.isShown && this.options.keyboard) {
1.929 - this.$element.on('keyup.dismiss.modal', function ( e ) {
1.930 - e.which == 27 && that.hide()
1.931 - })
1.932 - } else if (!this.isShown) {
1.933 - this.$element.off('keyup.dismiss.modal')
1.934 - }
1.935 - }
1.936 -
1.937 - , hideWithTransition: function () {
1.938 - var that = this
1.939 - , timeout = setTimeout(function () {
1.940 - that.$element.off($.support.transition.end)
1.941 - that.hideModal()
1.942 - }, 500)
1.943 -
1.944 - this.$element.one($.support.transition.end, function () {
1.945 - clearTimeout(timeout)
1.946 - that.hideModal()
1.947 - })
1.948 - }
1.949 -
1.950 - , hideModal: function () {
1.951 - var that = this
1.952 - this.$element.hide()
1.953 - this.backdrop(function () {
1.954 - that.removeBackdrop()
1.955 - that.$element.trigger('hidden')
1.956 - })
1.957 - }
1.958 -
1.959 - , removeBackdrop: function () {
1.960 - this.$backdrop && this.$backdrop.remove()
1.961 - this.$backdrop = null
1.962 - }
1.963 -
1.964 - , backdrop: function (callback) {
1.965 - var that = this
1.966 - , animate = this.$element.hasClass('fade') ? 'fade' : ''
1.967 -
1.968 - if (this.isShown && this.options.backdrop) {
1.969 - var doAnimate = $.support.transition && animate
1.970 -
1.971 - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
1.972 - .appendTo(document.body)
1.973 -
1.974 - this.$backdrop.click(
1.975 - this.options.backdrop == 'static' ?
1.976 - $.proxy(this.$element[0].focus, this.$element[0])
1.977 - : $.proxy(this.hide, this)
1.978 - )
1.979 -
1.980 - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1.981 -
1.982 - this.$backdrop.addClass('in')
1.983 -
1.984 - if (!callback) return
1.985 -
1.986 - doAnimate ?
1.987 - this.$backdrop.one($.support.transition.end, callback) :
1.988 - callback()
1.989 -
1.990 - } else if (!this.isShown && this.$backdrop) {
1.991 - this.$backdrop.removeClass('in')
1.992 -
1.993 - $.support.transition && this.$element.hasClass('fade')?
1.994 - this.$backdrop.one($.support.transition.end, callback) :
1.995 - callback()
1.996 -
1.997 - } else if (callback) {
1.998 - callback()
1.999 - }
1.1000 - }
1.1001 - }
1.1002 -
1.1003 -
1.1004 - /* MODAL PLUGIN DEFINITION
1.1005 - * ======================= */
1.1006 -
1.1007 - var old = $.fn.modal
1.1008 -
1.1009 - $.fn.modal = function (option) {
1.1010 - return this.each(function () {
1.1011 - var $this = $(this)
1.1012 - , data = $this.data('modal')
1.1013 - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
1.1014 - if (!data) $this.data('modal', (data = new Modal(this, options)))
1.1015 - if (typeof option == 'string') data[option]()
1.1016 - else if (options.show) data.show()
1.1017 - })
1.1018 - }
1.1019 -
1.1020 - $.fn.modal.defaults = {
1.1021 - backdrop: true
1.1022 - , keyboard: true
1.1023 - , show: true
1.1024 - }
1.1025 -
1.1026 - $.fn.modal.Constructor = Modal
1.1027 -
1.1028 -
1.1029 - /* MODAL NO CONFLICT
1.1030 - * ================= */
1.1031 -
1.1032 - $.fn.modal.noConflict = function () {
1.1033 - $.fn.modal = old
1.1034 - return this
1.1035 - }
1.1036 -
1.1037 -
1.1038 - /* MODAL DATA-API
1.1039 - * ============== */
1.1040 -
1.1041 - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) {
1.1042 - var $this = $(this)
1.1043 - , href = $this.attr('href')
1.1044 - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1.1045 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())
1.1046 -
1.1047 - e.preventDefault()
1.1048 -
1.1049 - $target
1.1050 - .modal(option)
1.1051 - .one('hide', function () {
1.1052 - $this.focus()
1.1053 - })
1.1054 - })
1.1055 -
1.1056 -}(window.jQuery);
1.1057 -/* ===========================================================
1.1058 - * bootstrap-tooltip.js v2.3.2
1.1059 - * http://twitter.github.com/bootstrap/javascript.html#tooltips
1.1060 - * Inspired by the original jQuery.tipsy by Jason Frame
1.1061 - * ===========================================================
1.1062 - * Copyright 2012 Twitter, Inc.
1.1063 - *
1.1064 - * Licensed under the Apache License, Version 2.0 (the "License");
1.1065 - * you may not use this file except in compliance with the License.
1.1066 - * You may obtain a copy of the License at
1.1067 - *
1.1068 - * http://www.apache.org/licenses/LICENSE-2.0
1.1069 - *
1.1070 - * Unless required by applicable law or agreed to in writing, software
1.1071 - * distributed under the License is distributed on an "AS IS" BASIS,
1.1072 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.1073 - * See the License for the specific language governing permissions and
1.1074 - * limitations under the License.
1.1075 - * ========================================================== */
1.1076 -
1.1077 -
1.1078 -!function ($) {
1.1079 -
1.1080 - "use strict"; // jshint ;_;
1.1081 -
1.1082 -
1.1083 - /* TOOLTIP PUBLIC CLASS DEFINITION
1.1084 - * =============================== */
1.1085 -
1.1086 - var Tooltip = function (element, options) {
1.1087 - this.init('tooltip', element, options)
1.1088 - }
1.1089 -
1.1090 - Tooltip.prototype = {
1.1091 -
1.1092 - constructor: Tooltip
1.1093 -
1.1094 - , init: function (type, element, options) {
1.1095 - var eventIn
1.1096 - , eventOut
1.1097 - , triggers
1.1098 - , trigger
1.1099 - , i
1.1100 -
1.1101 - this.type = type
1.1102 - this.$element = $(element)
1.1103 - this.options = this.getOptions(options)
1.1104 - this.enabled = true
1.1105 -
1.1106 - triggers = this.options.trigger.split(' ')
1.1107 -
1.1108 - for (i = triggers.length; i--;) {
1.1109 - trigger = triggers[i]
1.1110 - if (trigger == 'click') {
1.1111 - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
1.1112 - } else if (trigger != 'manual') {
1.1113 - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
1.1114 - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
1.1115 - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
1.1116 - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
1.1117 - }
1.1118 - }
1.1119 -
1.1120 - this.options.selector ?
1.1121 - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
1.1122 - this.fixTitle()
1.1123 - }
1.1124 -
1.1125 - , getOptions: function (options) {
1.1126 - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
1.1127 -
1.1128 - if (options.delay && typeof options.delay == 'number') {
1.1129 - options.delay = {
1.1130 - show: options.delay
1.1131 - , hide: options.delay
1.1132 - }
1.1133 - }
1.1134 -
1.1135 - return options
1.1136 - }
1.1137 -
1.1138 - , enter: function (e) {
1.1139 - var defaults = $.fn[this.type].defaults
1.1140 - , options = {}
1.1141 - , self
1.1142 -
1.1143 - this._options && $.each(this._options, function (key, value) {
1.1144 - if (defaults[key] != value) options[key] = value
1.1145 - }, this)
1.1146 -
1.1147 - self = $(e.currentTarget)[this.type](options).data(this.type)
1.1148 -
1.1149 - if (!self.options.delay || !self.options.delay.show) return self.show()
1.1150 -
1.1151 - clearTimeout(this.timeout)
1.1152 - self.hoverState = 'in'
1.1153 - this.timeout = setTimeout(function() {
1.1154 - if (self.hoverState == 'in') self.show()
1.1155 - }, self.options.delay.show)
1.1156 - }
1.1157 -
1.1158 - , leave: function (e) {
1.1159 - var self = $(e.currentTarget)[this.type](this._options).data(this.type)
1.1160 -
1.1161 - if (this.timeout) clearTimeout(this.timeout)
1.1162 - if (!self.options.delay || !self.options.delay.hide) return self.hide()
1.1163 -
1.1164 - self.hoverState = 'out'
1.1165 - this.timeout = setTimeout(function() {
1.1166 - if (self.hoverState == 'out') self.hide()
1.1167 - }, self.options.delay.hide)
1.1168 - }
1.1169 -
1.1170 - , show: function () {
1.1171 - var $tip
1.1172 - , pos
1.1173 - , actualWidth
1.1174 - , actualHeight
1.1175 - , placement
1.1176 - , tp
1.1177 - , e = $.Event('show')
1.1178 -
1.1179 - if (this.hasContent() && this.enabled) {
1.1180 - this.$element.trigger(e)
1.1181 - if (e.isDefaultPrevented()) return
1.1182 - $tip = this.tip()
1.1183 - this.setContent()
1.1184 -
1.1185 - if (this.options.animation) {
1.1186 - $tip.addClass('fade')
1.1187 - }
1.1188 -
1.1189 - placement = typeof this.options.placement == 'function' ?
1.1190 - this.options.placement.call(this, $tip[0], this.$element[0]) :
1.1191 - this.options.placement
1.1192 -
1.1193 - $tip
1.1194 - .detach()
1.1195 - .css({ top: 0, left: 0, display: 'block' })
1.1196 -
1.1197 - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1.1198 -
1.1199 - pos = this.getPosition()
1.1200 -
1.1201 - actualWidth = $tip[0].offsetWidth
1.1202 - actualHeight = $tip[0].offsetHeight
1.1203 -
1.1204 - switch (placement) {
1.1205 - case 'bottom':
1.1206 - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
1.1207 - break
1.1208 - case 'top':
1.1209 - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
1.1210 - break
1.1211 - case 'left':
1.1212 - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
1.1213 - break
1.1214 - case 'right':
1.1215 - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
1.1216 - break
1.1217 - }
1.1218 -
1.1219 - this.applyPlacement(tp, placement)
1.1220 - this.$element.trigger('shown')
1.1221 - }
1.1222 - }
1.1223 -
1.1224 - , applyPlacement: function(offset, placement){
1.1225 - var $tip = this.tip()
1.1226 - , width = $tip[0].offsetWidth
1.1227 - , height = $tip[0].offsetHeight
1.1228 - , actualWidth
1.1229 - , actualHeight
1.1230 - , delta
1.1231 - , replace
1.1232 -
1.1233 - $tip
1.1234 - .offset(offset)
1.1235 - .addClass(placement)
1.1236 - .addClass('in')
1.1237 -
1.1238 - actualWidth = $tip[0].offsetWidth
1.1239 - actualHeight = $tip[0].offsetHeight
1.1240 -
1.1241 - if (placement == 'top' && actualHeight != height) {
1.1242 - offset.top = offset.top + height - actualHeight
1.1243 - replace = true
1.1244 - }
1.1245 -
1.1246 - if (placement == 'bottom' || placement == 'top') {
1.1247 - delta = 0
1.1248 -
1.1249 - if (offset.left < 0){
1.1250 - delta = offset.left * -2
1.1251 - offset.left = 0
1.1252 - $tip.offset(offset)
1.1253 - actualWidth = $tip[0].offsetWidth
1.1254 - actualHeight = $tip[0].offsetHeight
1.1255 - }
1.1256 -
1.1257 - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1.1258 - } else {
1.1259 - this.replaceArrow(actualHeight - height, actualHeight, 'top')
1.1260 - }
1.1261 -
1.1262 - if (replace) $tip.offset(offset)
1.1263 - }
1.1264 -
1.1265 - , replaceArrow: function(delta, dimension, position){
1.1266 - this
1.1267 - .arrow()
1.1268 - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
1.1269 - }
1.1270 -
1.1271 - , setContent: function () {
1.1272 - var $tip = this.tip()
1.1273 - , title = this.getTitle()
1.1274 -
1.1275 - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
1.1276 - $tip.removeClass('fade in top bottom left right')
1.1277 - }
1.1278 -
1.1279 - , hide: function () {
1.1280 - var that = this
1.1281 - , $tip = this.tip()
1.1282 - , e = $.Event('hide')
1.1283 -
1.1284 - this.$element.trigger(e)
1.1285 - if (e.isDefaultPrevented()) return
1.1286 -
1.1287 - $tip.removeClass('in')
1.1288 -
1.1289 - function removeWithAnimation() {
1.1290 - var timeout = setTimeout(function () {
1.1291 - $tip.off($.support.transition.end).detach()
1.1292 - }, 500)
1.1293 -
1.1294 - $tip.one($.support.transition.end, function () {
1.1295 - clearTimeout(timeout)
1.1296 - $tip.detach()
1.1297 - })
1.1298 - }
1.1299 -
1.1300 - $.support.transition && this.$tip.hasClass('fade') ?
1.1301 - removeWithAnimation() :
1.1302 - $tip.detach()
1.1303 -
1.1304 - this.$element.trigger('hidden')
1.1305 -
1.1306 - return this
1.1307 - }
1.1308 -
1.1309 - , fixTitle: function () {
1.1310 - var $e = this.$element
1.1311 - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1.1312 - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
1.1313 - }
1.1314 - }
1.1315 -
1.1316 - , hasContent: function () {
1.1317 - return this.getTitle()
1.1318 - }
1.1319 -
1.1320 - , getPosition: function () {
1.1321 - var el = this.$element[0]
1.1322 - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1.1323 - width: el.offsetWidth
1.1324 - , height: el.offsetHeight
1.1325 - }, this.$element.offset())
1.1326 - }
1.1327 -
1.1328 - , getTitle: function () {
1.1329 - var title
1.1330 - , $e = this.$element
1.1331 - , o = this.options
1.1332 -
1.1333 - title = $e.attr('data-original-title')
1.1334 - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1.1335 -
1.1336 - return title
1.1337 - }
1.1338 -
1.1339 - , tip: function () {
1.1340 - return this.$tip = this.$tip || $(this.options.template)
1.1341 - }
1.1342 -
1.1343 - , arrow: function(){
1.1344 - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
1.1345 - }
1.1346 -
1.1347 - , validate: function () {
1.1348 - if (!this.$element[0].parentNode) {
1.1349 - this.hide()
1.1350 - this.$element = null
1.1351 - this.options = null
1.1352 - }
1.1353 - }
1.1354 -
1.1355 - , enable: function () {
1.1356 - this.enabled = true
1.1357 - }
1.1358 -
1.1359 - , disable: function () {
1.1360 - this.enabled = false
1.1361 - }
1.1362 -
1.1363 - , toggleEnabled: function () {
1.1364 - this.enabled = !this.enabled
1.1365 - }
1.1366 -
1.1367 - , toggle: function (e) {
1.1368 - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
1.1369 - self.tip().hasClass('in') ? self.hide() : self.show()
1.1370 - }
1.1371 -
1.1372 - , destroy: function () {
1.1373 - this.hide().$element.off('.' + this.type).removeData(this.type)
1.1374 - }
1.1375 -
1.1376 - }
1.1377 -
1.1378 -
1.1379 - /* TOOLTIP PLUGIN DEFINITION
1.1380 - * ========================= */
1.1381 -
1.1382 - var old = $.fn.tooltip
1.1383 -
1.1384 - $.fn.tooltip = function ( option ) {
1.1385 - return this.each(function () {
1.1386 - var $this = $(this)
1.1387 - , data = $this.data('tooltip')
1.1388 - , options = typeof option == 'object' && option
1.1389 - if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1.1390 - if (typeof option == 'string') data[option]()
1.1391 - })
1.1392 - }
1.1393 -
1.1394 - $.fn.tooltip.Constructor = Tooltip
1.1395 -
1.1396 - $.fn.tooltip.defaults = {
1.1397 - animation: true
1.1398 - , placement: 'top'
1.1399 - , selector: false
1.1400 - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1.1401 - , trigger: 'hover focus'
1.1402 - , title: ''
1.1403 - , delay: 0
1.1404 - , html: false
1.1405 - , container: false
1.1406 - }
1.1407 -
1.1408 -
1.1409 - /* TOOLTIP NO CONFLICT
1.1410 - * =================== */
1.1411 -
1.1412 - $.fn.tooltip.noConflict = function () {
1.1413 - $.fn.tooltip = old
1.1414 - return this
1.1415 - }
1.1416 -
1.1417 -}(window.jQuery);
1.1418 -/* ===========================================================
1.1419 - * bootstrap-popover.js v2.3.2
1.1420 - * http://twitter.github.com/bootstrap/javascript.html#popovers
1.1421 - * ===========================================================
1.1422 - * Copyright 2012 Twitter, Inc.
1.1423 - *
1.1424 - * Licensed under the Apache License, Version 2.0 (the "License");
1.1425 - * you may not use this file except in compliance with the License.
1.1426 - * You may obtain a copy of the License at
1.1427 - *
1.1428 - * http://www.apache.org/licenses/LICENSE-2.0
1.1429 - *
1.1430 - * Unless required by applicable law or agreed to in writing, software
1.1431 - * distributed under the License is distributed on an "AS IS" BASIS,
1.1432 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.1433 - * See the License for the specific language governing permissions and
1.1434 - * limitations under the License.
1.1435 - * =========================================================== */
1.1436 -
1.1437 -
1.1438 -!function ($) {
1.1439 -
1.1440 - "use strict"; // jshint ;_;
1.1441 -
1.1442 -
1.1443 - /* POPOVER PUBLIC CLASS DEFINITION
1.1444 - * =============================== */
1.1445 -
1.1446 - var Popover = function (element, options) {
1.1447 - this.init('popover', element, options)
1.1448 - }
1.1449 -
1.1450 -
1.1451 - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1.1452 - ========================================== */
1.1453 -
1.1454 - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1.1455 -
1.1456 - constructor: Popover
1.1457 -
1.1458 - , setContent: function () {
1.1459 - var $tip = this.tip()
1.1460 - , title = this.getTitle()
1.1461 - , content = this.getContent()
1.1462 -
1.1463 - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1.1464 - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
1.1465 -
1.1466 - $tip.removeClass('fade top bottom left right in')
1.1467 - }
1.1468 -
1.1469 - , hasContent: function () {
1.1470 - return this.getTitle() || this.getContent()
1.1471 - }
1.1472 -
1.1473 - , getContent: function () {
1.1474 - var content
1.1475 - , $e = this.$element
1.1476 - , o = this.options
1.1477 -
1.1478 - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1.1479 - || $e.attr('data-content')
1.1480 -
1.1481 - return content
1.1482 - }
1.1483 -
1.1484 - , tip: function () {
1.1485 - if (!this.$tip) {
1.1486 - this.$tip = $(this.options.template)
1.1487 - }
1.1488 - return this.$tip
1.1489 - }
1.1490 -
1.1491 - , destroy: function () {
1.1492 - this.hide().$element.off('.' + this.type).removeData(this.type)
1.1493 - }
1.1494 -
1.1495 - })
1.1496 -
1.1497 -
1.1498 - /* POPOVER PLUGIN DEFINITION
1.1499 - * ======================= */
1.1500 -
1.1501 - var old = $.fn.popover
1.1502 -
1.1503 - $.fn.popover = function (option) {
1.1504 - return this.each(function () {
1.1505 - var $this = $(this)
1.1506 - , data = $this.data('popover')
1.1507 - , options = typeof option == 'object' && option
1.1508 - if (!data) $this.data('popover', (data = new Popover(this, options)))
1.1509 - if (typeof option == 'string') data[option]()
1.1510 - })
1.1511 - }
1.1512 -
1.1513 - $.fn.popover.Constructor = Popover
1.1514 -
1.1515 - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1.1516 - placement: 'right'
1.1517 - , trigger: 'click'
1.1518 - , content: ''
1.1519 - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1.1520 - })
1.1521 -
1.1522 -
1.1523 - /* POPOVER NO CONFLICT
1.1524 - * =================== */
1.1525 -
1.1526 - $.fn.popover.noConflict = function () {
1.1527 - $.fn.popover = old
1.1528 - return this
1.1529 - }
1.1530 -
1.1531 -}(window.jQuery);
1.1532 -/* =============================================================
1.1533 - * bootstrap-scrollspy.js v2.3.2
1.1534 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1.1535 - * =============================================================
1.1536 - * Copyright 2012 Twitter, Inc.
1.1537 - *
1.1538 - * Licensed under the Apache License, Version 2.0 (the "License");
1.1539 - * you may not use this file except in compliance with the License.
1.1540 - * You may obtain a copy of the License at
1.1541 - *
1.1542 - * http://www.apache.org/licenses/LICENSE-2.0
1.1543 - *
1.1544 - * Unless required by applicable law or agreed to in writing, software
1.1545 - * distributed under the License is distributed on an "AS IS" BASIS,
1.1546 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.1547 - * See the License for the specific language governing permissions and
1.1548 - * limitations under the License.
1.1549 - * ============================================================== */
1.1550 -
1.1551 -
1.1552 -!function ($) {
1.1553 -
1.1554 - "use strict"; // jshint ;_;
1.1555 -
1.1556 -
1.1557 - /* SCROLLSPY CLASS DEFINITION
1.1558 - * ========================== */
1.1559 -
1.1560 - function ScrollSpy(element, options) {
1.1561 - var process = $.proxy(this.process, this)
1.1562 - , $element = $(element).is('body') ? $(window) : $(element)
1.1563 - , href
1.1564 - this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1.1565 - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process)
1.1566 - this.selector = (this.options.target
1.1567 - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1.1568 - || '') + ' .nav li > a'
1.1569 - this.$body = $('body')
1.1570 - this.refresh()
1.1571 - this.process()
1.1572 - }
1.1573 -
1.1574 - ScrollSpy.prototype = {
1.1575 -
1.1576 - constructor: ScrollSpy
1.1577 -
1.1578 - , refresh: function () {
1.1579 - var self = this
1.1580 - , $targets
1.1581 -
1.1582 - this.offsets = $([])
1.1583 - this.targets = $([])
1.1584 -
1.1585 - $targets = this.$body
1.1586 - .find(this.selector)
1.1587 - .map(function () {
1.1588 - var $el = $(this)
1.1589 - , href = $el.data('target') || $el.attr('href')
1.1590 - , $href = /^#\w/.test(href) && $(href)
1.1591 - return ( $href
1.1592 - && $href.length
1.1593 - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null
1.1594 - })
1.1595 - .sort(function (a, b) { return a[0] - b[0] })
1.1596 - .each(function () {
1.1597 - self.offsets.push(this[0])
1.1598 - self.targets.push(this[1])
1.1599 - })
1.1600 - }
1.1601 -
1.1602 - , process: function () {
1.1603 - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1.1604 - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1.1605 - , maxScroll = scrollHeight - this.$scrollElement.height()
1.1606 - , offsets = this.offsets
1.1607 - , targets = this.targets
1.1608 - , activeTarget = this.activeTarget
1.1609 - , i
1.1610 -
1.1611 - if (scrollTop >= maxScroll) {
1.1612 - return activeTarget != (i = targets.last()[0])
1.1613 - && this.activate ( i )
1.1614 - }
1.1615 -
1.1616 - for (i = offsets.length; i--;) {
1.1617 - activeTarget != targets[i]
1.1618 - && scrollTop >= offsets[i]
1.1619 - && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1.1620 - && this.activate( targets[i] )
1.1621 - }
1.1622 - }
1.1623 -
1.1624 - , activate: function (target) {
1.1625 - var active
1.1626 - , selector
1.1627 -
1.1628 - this.activeTarget = target
1.1629 -
1.1630 - $(this.selector)
1.1631 - .parent('.active')
1.1632 - .removeClass('active')
1.1633 -
1.1634 - selector = this.selector
1.1635 - + '[data-target="' + target + '"],'
1.1636 - + this.selector + '[href="' + target + '"]'
1.1637 -
1.1638 - active = $(selector)
1.1639 - .parent('li')
1.1640 - .addClass('active')
1.1641 -
1.1642 - if (active.parent('.dropdown-menu').length) {
1.1643 - active = active.closest('li.dropdown').addClass('active')
1.1644 - }
1.1645 -
1.1646 - active.trigger('activate')
1.1647 - }
1.1648 -
1.1649 - }
1.1650 -
1.1651 -
1.1652 - /* SCROLLSPY PLUGIN DEFINITION
1.1653 - * =========================== */
1.1654 -
1.1655 - var old = $.fn.scrollspy
1.1656 -
1.1657 - $.fn.scrollspy = function (option) {
1.1658 - return this.each(function () {
1.1659 - var $this = $(this)
1.1660 - , data = $this.data('scrollspy')
1.1661 - , options = typeof option == 'object' && option
1.1662 - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1.1663 - if (typeof option == 'string') data[option]()
1.1664 - })
1.1665 - }
1.1666 -
1.1667 - $.fn.scrollspy.Constructor = ScrollSpy
1.1668 -
1.1669 - $.fn.scrollspy.defaults = {
1.1670 - offset: 10
1.1671 - }
1.1672 -
1.1673 -
1.1674 - /* SCROLLSPY NO CONFLICT
1.1675 - * ===================== */
1.1676 -
1.1677 - $.fn.scrollspy.noConflict = function () {
1.1678 - $.fn.scrollspy = old
1.1679 - return this
1.1680 - }
1.1681 -
1.1682 -
1.1683 - /* SCROLLSPY DATA-API
1.1684 - * ================== */
1.1685 -
1.1686 - $(window).on('load', function () {
1.1687 - $('[data-spy="scroll"]').each(function () {
1.1688 - var $spy = $(this)
1.1689 - $spy.scrollspy($spy.data())
1.1690 - })
1.1691 - })
1.1692 -
1.1693 -}(window.jQuery);/* ========================================================
1.1694 - * bootstrap-tab.js v2.3.2
1.1695 - * http://twitter.github.com/bootstrap/javascript.html#tabs
1.1696 - * ========================================================
1.1697 - * Copyright 2012 Twitter, Inc.
1.1698 - *
1.1699 - * Licensed under the Apache License, Version 2.0 (the "License");
1.1700 - * you may not use this file except in compliance with the License.
1.1701 - * You may obtain a copy of the License at
1.1702 - *
1.1703 - * http://www.apache.org/licenses/LICENSE-2.0
1.1704 - *
1.1705 - * Unless required by applicable law or agreed to in writing, software
1.1706 - * distributed under the License is distributed on an "AS IS" BASIS,
1.1707 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.1708 - * See the License for the specific language governing permissions and
1.1709 - * limitations under the License.
1.1710 - * ======================================================== */
1.1711 -
1.1712 -
1.1713 -!function ($) {
1.1714 -
1.1715 - "use strict"; // jshint ;_;
1.1716 -
1.1717 -
1.1718 - /* TAB CLASS DEFINITION
1.1719 - * ==================== */
1.1720 -
1.1721 - var Tab = function (element) {
1.1722 - this.element = $(element)
1.1723 - }
1.1724 -
1.1725 - Tab.prototype = {
1.1726 -
1.1727 - constructor: Tab
1.1728 -
1.1729 - , show: function () {
1.1730 - var $this = this.element
1.1731 - , $ul = $this.closest('ul:not(.dropdown-menu)')
1.1732 - , selector = $this.attr('data-target')
1.1733 - , previous
1.1734 - , $target
1.1735 - , e
1.1736 -
1.1737 - if (!selector) {
1.1738 - selector = $this.attr('href')
1.1739 - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1.1740 - }
1.1741 -
1.1742 - if ( $this.parent('li').hasClass('active') ) return
1.1743 -
1.1744 - previous = $ul.find('.active:last a')[0]
1.1745 -
1.1746 - e = $.Event('show', {
1.1747 - relatedTarget: previous
1.1748 - })
1.1749 -
1.1750 - $this.trigger(e)
1.1751 -
1.1752 - if (e.isDefaultPrevented()) return
1.1753 -
1.1754 - $target = $(selector)
1.1755 -
1.1756 - this.activate($this.parent('li'), $ul)
1.1757 - this.activate($target, $target.parent(), function () {
1.1758 - $this.trigger({
1.1759 - type: 'shown'
1.1760 - , relatedTarget: previous
1.1761 - })
1.1762 - })
1.1763 - }
1.1764 -
1.1765 - , activate: function ( element, container, callback) {
1.1766 - var $active = container.find('> .active')
1.1767 - , transition = callback
1.1768 - && $.support.transition
1.1769 - && $active.hasClass('fade')
1.1770 -
1.1771 - function next() {
1.1772 - $active
1.1773 - .removeClass('active')
1.1774 - .find('> .dropdown-menu > .active')
1.1775 - .removeClass('active')
1.1776 -
1.1777 - element.addClass('active')
1.1778 -
1.1779 - if (transition) {
1.1780 - element[0].offsetWidth // reflow for transition
1.1781 - element.addClass('in')
1.1782 - } else {
1.1783 - element.removeClass('fade')
1.1784 - }
1.1785 -
1.1786 - if ( element.parent('.dropdown-menu') ) {
1.1787 - element.closest('li.dropdown').addClass('active')
1.1788 - }
1.1789 -
1.1790 - callback && callback()
1.1791 - }
1.1792 -
1.1793 - transition ?
1.1794 - $active.one($.support.transition.end, next) :
1.1795 - next()
1.1796 -
1.1797 - $active.removeClass('in')
1.1798 - }
1.1799 - }
1.1800 -
1.1801 -
1.1802 - /* TAB PLUGIN DEFINITION
1.1803 - * ===================== */
1.1804 -
1.1805 - var old = $.fn.tab
1.1806 -
1.1807 - $.fn.tab = function ( option ) {
1.1808 - return this.each(function () {
1.1809 - var $this = $(this)
1.1810 - , data = $this.data('tab')
1.1811 - if (!data) $this.data('tab', (data = new Tab(this)))
1.1812 - if (typeof option == 'string') data[option]()
1.1813 - })
1.1814 - }
1.1815 -
1.1816 - $.fn.tab.Constructor = Tab
1.1817 -
1.1818 -
1.1819 - /* TAB NO CONFLICT
1.1820 - * =============== */
1.1821 -
1.1822 - $.fn.tab.noConflict = function () {
1.1823 - $.fn.tab = old
1.1824 - return this
1.1825 - }
1.1826 -
1.1827 -
1.1828 - /* TAB DATA-API
1.1829 - * ============ */
1.1830 -
1.1831 - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1.1832 - e.preventDefault()
1.1833 - $(this).tab('show')
1.1834 - })
1.1835 -
1.1836 -}(window.jQuery);/* =============================================================
1.1837 - * bootstrap-typeahead.js v2.3.2
1.1838 - * http://twitter.github.com/bootstrap/javascript.html#typeahead
1.1839 - * =============================================================
1.1840 - * Copyright 2012 Twitter, Inc.
1.1841 - *
1.1842 - * Licensed under the Apache License, Version 2.0 (the "License");
1.1843 - * you may not use this file except in compliance with the License.
1.1844 - * You may obtain a copy of the License at
1.1845 - *
1.1846 - * http://www.apache.org/licenses/LICENSE-2.0
1.1847 - *
1.1848 - * Unless required by applicable law or agreed to in writing, software
1.1849 - * distributed under the License is distributed on an "AS IS" BASIS,
1.1850 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.1851 - * See the License for the specific language governing permissions and
1.1852 - * limitations under the License.
1.1853 - * ============================================================ */
1.1854 -
1.1855 -
1.1856 -!function($){
1.1857 -
1.1858 - "use strict"; // jshint ;_;
1.1859 -
1.1860 -
1.1861 - /* TYPEAHEAD PUBLIC CLASS DEFINITION
1.1862 - * ================================= */
1.1863 -
1.1864 - var Typeahead = function (element, options) {
1.1865 - this.$element = $(element)
1.1866 - this.options = $.extend({}, $.fn.typeahead.defaults, options)
1.1867 - this.matcher = this.options.matcher || this.matcher
1.1868 - this.sorter = this.options.sorter || this.sorter
1.1869 - this.highlighter = this.options.highlighter || this.highlighter
1.1870 - this.updater = this.options.updater || this.updater
1.1871 - this.source = this.options.source
1.1872 - this.$menu = $(this.options.menu)
1.1873 - this.shown = false
1.1874 - this.listen()
1.1875 - }
1.1876 -
1.1877 - Typeahead.prototype = {
1.1878 -
1.1879 - constructor: Typeahead
1.1880 -
1.1881 - , select: function () {
1.1882 - var val = this.$menu.find('.active').attr('data-value')
1.1883 - this.$element
1.1884 - .val(this.updater(val))
1.1885 - .change()
1.1886 - return this.hide()
1.1887 - }
1.1888 -
1.1889 - , updater: function (item) {
1.1890 - return item
1.1891 - }
1.1892 -
1.1893 - , show: function () {
1.1894 - var pos = $.extend({}, this.$element.position(), {
1.1895 - height: this.$element[0].offsetHeight
1.1896 - })
1.1897 -
1.1898 - this.$menu
1.1899 - .insertAfter(this.$element)
1.1900 - .css({
1.1901 - top: pos.top + pos.height
1.1902 - , left: pos.left
1.1903 - })
1.1904 - .show()
1.1905 -
1.1906 - this.shown = true
1.1907 - return this
1.1908 - }
1.1909 -
1.1910 - , hide: function () {
1.1911 - this.$menu.hide()
1.1912 - this.shown = false
1.1913 - return this
1.1914 - }
1.1915 -
1.1916 - , lookup: function (event) {
1.1917 - var items
1.1918 -
1.1919 - this.query = this.$element.val()
1.1920 -
1.1921 - if (!this.query || this.query.length < this.options.minLength) {
1.1922 - return this.shown ? this.hide() : this
1.1923 - }
1.1924 -
1.1925 - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
1.1926 -
1.1927 - return items ? this.process(items) : this
1.1928 - }
1.1929 -
1.1930 - , process: function (items) {
1.1931 - var that = this
1.1932 -
1.1933 - items = $.grep(items, function (item) {
1.1934 - return that.matcher(item)
1.1935 - })
1.1936 -
1.1937 - items = this.sorter(items)
1.1938 -
1.1939 - if (!items.length) {
1.1940 - return this.shown ? this.hide() : this
1.1941 - }
1.1942 -
1.1943 - return this.render(items.slice(0, this.options.items)).show()
1.1944 - }
1.1945 -
1.1946 - , matcher: function (item) {
1.1947 - return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1.1948 - }
1.1949 -
1.1950 - , sorter: function (items) {
1.1951 - var beginswith = []
1.1952 - , caseSensitive = []
1.1953 - , caseInsensitive = []
1.1954 - , item
1.1955 -
1.1956 - while (item = items.shift()) {
1.1957 - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1.1958 - else if (~item.indexOf(this.query)) caseSensitive.push(item)
1.1959 - else caseInsensitive.push(item)
1.1960 - }
1.1961 -
1.1962 - return beginswith.concat(caseSensitive, caseInsensitive)
1.1963 - }
1.1964 -
1.1965 - , highlighter: function (item) {
1.1966 - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
1.1967 - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
1.1968 - return '<strong>' + match + '</strong>'
1.1969 - })
1.1970 - }
1.1971 -
1.1972 - , render: function (items) {
1.1973 - var that = this
1.1974 -
1.1975 - items = $(items).map(function (i, item) {
1.1976 - i = $(that.options.item).attr('data-value', item)
1.1977 - i.find('a').html(that.highlighter(item))
1.1978 - return i[0]
1.1979 - })
1.1980 -
1.1981 - items.first().addClass('active')
1.1982 - this.$menu.html(items)
1.1983 - return this
1.1984 - }
1.1985 -
1.1986 - , next: function (event) {
1.1987 - var active = this.$menu.find('.active').removeClass('active')
1.1988 - , next = active.next()
1.1989 -
1.1990 - if (!next.length) {
1.1991 - next = $(this.$menu.find('li')[0])
1.1992 - }
1.1993 -
1.1994 - next.addClass('active')
1.1995 - }
1.1996 -
1.1997 - , prev: function (event) {
1.1998 - var active = this.$menu.find('.active').removeClass('active')
1.1999 - , prev = active.prev()
1.2000 -
1.2001 - if (!prev.length) {
1.2002 - prev = this.$menu.find('li').last()
1.2003 - }
1.2004 -
1.2005 - prev.addClass('active')
1.2006 - }
1.2007 -
1.2008 - , listen: function () {
1.2009 - this.$element
1.2010 - .on('focus', $.proxy(this.focus, this))
1.2011 - .on('blur', $.proxy(this.blur, this))
1.2012 - .on('keypress', $.proxy(this.keypress, this))
1.2013 - .on('keyup', $.proxy(this.keyup, this))
1.2014 -
1.2015 - if (this.eventSupported('keydown')) {
1.2016 - this.$element.on('keydown', $.proxy(this.keydown, this))
1.2017 - }
1.2018 -
1.2019 - this.$menu
1.2020 - .on('click', $.proxy(this.click, this))
1.2021 - .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1.2022 - .on('mouseleave', 'li', $.proxy(this.mouseleave, this))
1.2023 - }
1.2024 -
1.2025 - , eventSupported: function(eventName) {
1.2026 - var isSupported = eventName in this.$element
1.2027 - if (!isSupported) {
1.2028 - this.$element.setAttribute(eventName, 'return;')
1.2029 - isSupported = typeof this.$element[eventName] === 'function'
1.2030 - }
1.2031 - return isSupported
1.2032 - }
1.2033 -
1.2034 - , move: function (e) {
1.2035 - if (!this.shown) return
1.2036 -
1.2037 - switch(e.keyCode) {
1.2038 - case 9: // tab
1.2039 - case 13: // enter
1.2040 - case 27: // escape
1.2041 - e.preventDefault()
1.2042 - break
1.2043 -
1.2044 - case 38: // up arrow
1.2045 - e.preventDefault()
1.2046 - this.prev()
1.2047 - break
1.2048 -
1.2049 - case 40: // down arrow
1.2050 - e.preventDefault()
1.2051 - this.next()
1.2052 - break
1.2053 - }
1.2054 -
1.2055 - e.stopPropagation()
1.2056 - }
1.2057 -
1.2058 - , keydown: function (e) {
1.2059 - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27])
1.2060 - this.move(e)
1.2061 - }
1.2062 -
1.2063 - , keypress: function (e) {
1.2064 - if (this.suppressKeyPressRepeat) return
1.2065 - this.move(e)
1.2066 - }
1.2067 -
1.2068 - , keyup: function (e) {
1.2069 - switch(e.keyCode) {
1.2070 - case 40: // down arrow
1.2071 - case 38: // up arrow
1.2072 - case 16: // shift
1.2073 - case 17: // ctrl
1.2074 - case 18: // alt
1.2075 - break
1.2076 -
1.2077 - case 9: // tab
1.2078 - case 13: // enter
1.2079 - if (!this.shown) return
1.2080 - this.select()
1.2081 - break
1.2082 -
1.2083 - case 27: // escape
1.2084 - if (!this.shown) return
1.2085 - this.hide()
1.2086 - break
1.2087 -
1.2088 - default:
1.2089 - this.lookup()
1.2090 - }
1.2091 -
1.2092 - e.stopPropagation()
1.2093 - e.preventDefault()
1.2094 - }
1.2095 -
1.2096 - , focus: function (e) {
1.2097 - this.focused = true
1.2098 - }
1.2099 -
1.2100 - , blur: function (e) {
1.2101 - this.focused = false
1.2102 - if (!this.mousedover && this.shown) this.hide()
1.2103 - }
1.2104 -
1.2105 - , click: function (e) {
1.2106 - e.stopPropagation()
1.2107 - e.preventDefault()
1.2108 - this.select()
1.2109 - this.$element.focus()
1.2110 - }
1.2111 -
1.2112 - , mouseenter: function (e) {
1.2113 - this.mousedover = true
1.2114 - this.$menu.find('.active').removeClass('active')
1.2115 - $(e.currentTarget).addClass('active')
1.2116 - }
1.2117 -
1.2118 - , mouseleave: function (e) {
1.2119 - this.mousedover = false
1.2120 - if (!this.focused && this.shown) this.hide()
1.2121 - }
1.2122 -
1.2123 - }
1.2124 -
1.2125 -
1.2126 - /* TYPEAHEAD PLUGIN DEFINITION
1.2127 - * =========================== */
1.2128 -
1.2129 - var old = $.fn.typeahead
1.2130 -
1.2131 - $.fn.typeahead = function (option) {
1.2132 - return this.each(function () {
1.2133 - var $this = $(this)
1.2134 - , data = $this.data('typeahead')
1.2135 - , options = typeof option == 'object' && option
1.2136 - if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1.2137 - if (typeof option == 'string') data[option]()
1.2138 - })
1.2139 - }
1.2140 -
1.2141 - $.fn.typeahead.defaults = {
1.2142 - source: []
1.2143 - , items: 8
1.2144 - , menu: '<ul class="typeahead dropdown-menu"></ul>'
1.2145 - , item: '<li><a href="#"></a></li>'
1.2146 - , minLength: 1
1.2147 - }
1.2148 -
1.2149 - $.fn.typeahead.Constructor = Typeahead
1.2150 -
1.2151 -
1.2152 - /* TYPEAHEAD NO CONFLICT
1.2153 - * =================== */
1.2154 -
1.2155 - $.fn.typeahead.noConflict = function () {
1.2156 - $.fn.typeahead = old
1.2157 - return this
1.2158 - }
1.2159 -
1.2160 -
1.2161 - /* TYPEAHEAD DATA-API
1.2162 - * ================== */
1.2163 -
1.2164 - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1.2165 - var $this = $(this)
1.2166 - if ($this.data('typeahead')) return
1.2167 - $this.typeahead($this.data())
1.2168 - })
1.2169 -
1.2170 -}(window.jQuery);
1.2171 -/* ==========================================================
1.2172 - * bootstrap-affix.js v2.3.2
1.2173 - * http://twitter.github.com/bootstrap/javascript.html#affix
1.2174 - * ==========================================================
1.2175 - * Copyright 2012 Twitter, Inc.
1.2176 - *
1.2177 - * Licensed under the Apache License, Version 2.0 (the "License");
1.2178 - * you may not use this file except in compliance with the License.
1.2179 - * You may obtain a copy of the License at
1.2180 - *
1.2181 - * http://www.apache.org/licenses/LICENSE-2.0
1.2182 - *
1.2183 - * Unless required by applicable law or agreed to in writing, software
1.2184 - * distributed under the License is distributed on an "AS IS" BASIS,
1.2185 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1.2186 - * See the License for the specific language governing permissions and
1.2187 - * limitations under the License.
1.2188 - * ========================================================== */
1.2189 -
1.2190 -
1.2191 -!function ($) {
1.2192 -
1.2193 - "use strict"; // jshint ;_;
1.2194 -
1.2195 -
1.2196 - /* AFFIX CLASS DEFINITION
1.2197 - * ====================== */
1.2198 -
1.2199 - var Affix = function (element, options) {
1.2200 - this.options = $.extend({}, $.fn.affix.defaults, options)
1.2201 - this.$window = $(window)
1.2202 - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
1.2203 - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
1.2204 - this.$element = $(element)
1.2205 - this.checkPosition()
1.2206 - }
1.2207 -
1.2208 - Affix.prototype.checkPosition = function () {
1.2209 - if (!this.$element.is(':visible')) return
1.2210 -
1.2211 - var scrollHeight = $(document).height()
1.2212 - , scrollTop = this.$window.scrollTop()
1.2213 - , position = this.$element.offset()
1.2214 - , offset = this.options.offset
1.2215 - , offsetBottom = offset.bottom
1.2216 - , offsetTop = offset.top
1.2217 - , reset = 'affix affix-top affix-bottom'
1.2218 - , affix
1.2219 -
1.2220 - if (typeof offset != 'object') offsetBottom = offsetTop = offset
1.2221 - if (typeof offsetTop == 'function') offsetTop = offset.top()
1.2222 - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
1.2223 -
1.2224 - affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
1.2225 - false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
1.2226 - 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
1.2227 - 'top' : false
1.2228 -
1.2229 - if (this.affixed === affix) return
1.2230 -
1.2231 - this.affixed = affix
1.2232 - this.unpin = affix == 'bottom' ? position.top - scrollTop : null
1.2233 -
1.2234 - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
1.2235 - }
1.2236 -
1.2237 -
1.2238 - /* AFFIX PLUGIN DEFINITION
1.2239 - * ======================= */
1.2240 -
1.2241 - var old = $.fn.affix
1.2242 -
1.2243 - $.fn.affix = function (option) {
1.2244 - return this.each(function () {
1.2245 - var $this = $(this)
1.2246 - , data = $this.data('affix')
1.2247 - , options = typeof option == 'object' && option
1.2248 - if (!data) $this.data('affix', (data = new Affix(this, options)))
1.2249 - if (typeof option == 'string') data[option]()
1.2250 - })
1.2251 - }
1.2252 -
1.2253 - $.fn.affix.Constructor = Affix
1.2254 -
1.2255 - $.fn.affix.defaults = {
1.2256 - offset: 0
1.2257 - }
1.2258 -
1.2259 -
1.2260 - /* AFFIX NO CONFLICT
1.2261 - * ================= */
1.2262 -
1.2263 - $.fn.affix.noConflict = function () {
1.2264 - $.fn.affix = old
1.2265 - return this
1.2266 - }
1.2267 -
1.2268 -
1.2269 - /* AFFIX DATA-API
1.2270 - * ============== */
1.2271 -
1.2272 - $(window).on('load', function () {
1.2273 - $('[data-spy="affix"]').each(function () {
1.2274 - var $spy = $(this)
1.2275 - , data = $spy.data()
1.2276 -
1.2277 - data.offset = data.offset || {}
1.2278 -
1.2279 - data.offsetBottom && (data.offset.bottom = data.offsetBottom)
1.2280 - data.offsetTop && (data.offset.top = data.offsetTop)
1.2281 -
1.2282 - $spy.affix(data)
1.2283 - })
1.2284 - })
1.2285 -
1.2286 -
1.2287 -}(window.jQuery);
1.2288 \ No newline at end of file