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