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