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