vendor: 4,479 bytes, lines 1-146
1/*!� 2 * Bootstrap v3.3.7 (http://getbootstrap.com)� 3 * Copyright 2011-2016 Twitter, Inc.� 4 * Licensed under the MIT license� 5 */� 6� 7if (typeof jQuery === 'undefined') {� 8 throw new Error('Bootstrap\'s JavaScript requires jQuery')� 9}� 10� 11+function ($) {� 12 'use strict';� 13 var version = $.fn.jquery.split(' ')[0].split('.')� 14 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {� 15 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')� 16 }� 17}(jQuery);� 18� 19/* ========================================================================� 20 * Bootstrap: transition.js v3.3.7� 21 * http://getbootstrap.com/javascript/#transitions� 22 * ========================================================================� 23 * Copyright 2011-2016 Twitter, Inc.� 24 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 25 * ======================================================================== */� 26� 27� 28+function ($) {� 29 'use strict';� 30� 31 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)� 32 // ============================================================� 33� 34 function transitionEnd() {� 35 var el = document.createElement('bootstrap')� 36� 37 var transEndEventNames = {� 38 WebkitTransition : 'webkitTransitionEnd',� 39 MozTransition : 'transitionend',� 40 OTransition : 'oTransitionEnd otransitionend',� 41 transition : 'transitionend'� 42 }� 43� 44 for (var name in transEndEventNames) {� 45 if (el.style[name] !== undefined) {� 46 return { end: transEndEventNames[name] }� 47 }� 48 }� 49� 50 return false // explicit for ie8 ( ._.)� 51 }� 52� 53 // http://blog.alexmaccaw.com/css-transitions� 54 $.fn.emulateTransitionEnd = function (duration) {� 55 var called = false� 56 var $el = this� 57 $(this).one('bsTransitionEnd', function () { called = true })� 58 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }� 59 setTimeout(callback, duration)� 60 return this� 61 }� 62� 63 $(function () {� 64 $.support.transition = transitionEnd()� 65� 66 if (!$.support.transition) return� 67� 68 $.event.special.bsTransitionEnd = {� 69 bindType: $.support.transition.end,� 70 delegateType: $.support.transition.end,� 71 handle: function (e) {� 72 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)� 73 }� 74 }� 75 })� 76� 77}(jQuery);� 78� 79/* ========================================================================� 80 * Bootstrap: alert.js v3.3.7� 81 * http://getbootstrap.com/javascript/#alerts� 82 * ========================================================================� 83 * Copyright 2011-2016 Twitter, Inc.� 84 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 85 * ======================================================================== */� 86� 87� 88+function ($) {� 89 'use strict';� 90� 91 // ALERT CLASS DEFINITION� 92 // ======================� 93� 94 var dismiss = '[data-dismiss="alert"]'� 95 var Alert = function (el) {� 96 $(el).on('click', dismiss, this.close)� 97 }� 98� 99 Alert.VERSION = '3.3.7'� 100� 101 Alert.TRANSITION_DURATION = 150� 102� 103 Alert.prototype.close = function (e) {� 104 var $this = $(this)� 105 var selector = $this.attr('data-target')� 106� 107 if (!selector) {� 108 selector = $this.attr('href')� 109 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7� 110 }� 111� 112 var $parent = $(selector === '#' ? [] : selector)� 113� 114 if (e) e.preventDefault()� 115� 116 if (!$parent.length) {� 117 $parent = $this.closest('.alert')� 118 }� 119� 120 $parent.trigger(e = $.Event('close.bs.alert'))� 121� 122 if (e.isDefaultPrevented()) return� 123� 124 $parent.removeClass('in')� 125� 126 function removeElement() {� 127 // detach from parent, fire event then clean up data� 128 $parent.detach().trigger('closed.bs.alert').remove()� 129 }� 130� 131 $.support.transition && $parent.hasClass('fade') ?� 132 $parent� 133 .one('bsTransitionEnd', removeElement)� 134 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :� 135 removeElement()� 136 }� 137� 138� 139 // ALERT PLUGIN DEFINITION� 140 // =======================� 141� 142 function Plugin(option) {� 143 return this.each(function () {� 144 var $this = $(this)� 145 var data = $this.data('bs.alert')� 146�
vendor: 4,305 bytes, lines 147-290
147 if (!data) $this.data('bs.alert', (data = new Alert(this)))� 148 if (typeof option == 'string') data[option].call($this)� 149 })� 150 }� 151� 152 var old = $.fn.alert� 153� 154 $.fn.alert = Plugin� 155 $.fn.alert.Constructor = Alert� 156� 157� 158 // ALERT NO CONFLICT� 159 // =================� 160� 161 $.fn.alert.noConflict = function () {� 162 $.fn.alert = old� 163 return this� 164 }� 165� 166� 167 // ALERT DATA-API� 168 // ==============� 169� 170 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)� 171� 172}(jQuery);� 173� 174/* ========================================================================� 175 * Bootstrap: button.js v3.3.7� 176 * http://getbootstrap.com/javascript/#buttons� 177 * ========================================================================� 178 * Copyright 2011-2016 Twitter, Inc.� 179 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 180 * ======================================================================== */� 181� 182� 183+function ($) {� 184 'use strict';� 185� 186 // BUTTON PUBLIC CLASS DEFINITION� 187 // ==============================� 188� 189 var Button = function (element, options) {� 190 this.$element = $(element)� 191 this.options = $.extend({}, Button.DEFAULTS, options)� 192 this.isLoading = false� 193 }� 194� 195 Button.VERSION = '3.3.7'� 196� 197 Button.DEFAULTS = {� 198 loadingText: 'loading...'� 199 }� 200� 201 Button.prototype.setState = function (state) {� 202 var d = 'disabled'� 203 var $el = this.$element� 204 var val = $el.is('input') ? 'val' : 'html'� 205 var data = $el.data()� 206� 207 state += 'Text'� 208� 209 if (data.resetText == null) $el.data('resetText', $el[val]())� 210� 211 // push to event loop to allow forms to submit� 212 setTimeout($.proxy(function () {� 213 $el[val](data[state] == null ? this.options[state] : data[state])� 214� 215 if (state == 'loadingText') {� 216 this.isLoading = true� 217 $el.addClass(d).attr(d, d).prop(d, true)� 218 } else if (this.isLoading) {� 219 this.isLoading = false� 220 $el.removeClass(d).removeAttr(d).prop(d, false)� 221 }� 222 }, this), 0)� 223 }� 224� 225 Button.prototype.toggle = function () {� 226 var changed = true� 227 var $parent = this.$element.closest('[data-toggle="buttons"]')� 228� 229 if ($parent.length) {� 230 var $input = this.$element.find('input')� 231 if ($input.prop('type') == 'radio') {� 232 if ($input.prop('checked')) changed = false� 233 $parent.find('.active').removeClass('active')� 234 this.$element.addClass('active')� 235 } else if ($input.prop('type') == 'checkbox') {� 236 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false� 237 this.$element.toggleClass('active')� 238 }� 239 $input.prop('checked', this.$element.hasClass('active'))� 240 if (changed) $input.trigger('change')� 241 } else {� 242 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))� 243 this.$element.toggleClass('active')� 244 }� 245 }� 246� 247� 248 // BUTTON PLUGIN DEFINITION� 249 // ========================� 250� 251 function Plugin(option) {� 252 return this.each(function () {� 253 var $this = $(this)� 254 var data = $this.data('bs.button')� 255 var options = typeof option == 'object' && option� 256� 257 if (!data) $this.data('bs.button', (data = new Button(this, options)))� 258� 259 if (option == 'toggle') data.toggle()� 260 else if (option) data.setState(option)� 261 })� 262 }� 263� 264 var old = $.fn.button� 265� 266 $.fn.button = Plugin� 267 $.fn.button.Constructor = Button� 268� 269� 270 // BUTTON NO CONFLICT� 271 // ==================� 272� 273 $.fn.button.noConflict = function () {� 274 $.fn.button = old� 275 return this� 276 }� 277� 278� 279 // BUTTON DATA-API� 280 // ===============� 281� 282 $(document)� 283 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {� 284 var $btn = $(e.target).closest('.btn')� 285 Plugin.call($btn, 'toggle')� 286 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {� 287 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes� 288 e.preventDefault()� 289 // The target component still receive the focus� 290 if ($btn.is('input,button')) $btn.trigger('focus')�
vendor: 5,145 bytes, lines 291-443
291 else $btn.find('input:visible,button:visible').first().trigger('focus')� 292 }� 293 })� 294 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {� 295 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))� 296 })� 297� 298}(jQuery);� 299� 300/* ========================================================================� 301 * Bootstrap: carousel.js v3.3.7� 302 * http://getbootstrap.com/javascript/#carousel� 303 * ========================================================================� 304 * Copyright 2011-2016 Twitter, Inc.� 305 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 306 * ======================================================================== */� 307� 308� 309+function ($) {� 310 'use strict';� 311� 312 // CAROUSEL CLASS DEFINITION� 313 // =========================� 314� 315 var Carousel = function (element, options) {� 316 this.$element = $(element)� 317 this.$indicators = this.$element.find('.carousel-indicators')� 318 this.options = options� 319 this.paused = null� 320 this.sliding = null� 321 this.interval = null� 322 this.$active = null� 323 this.$items = null� 324� 325 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))� 326� 327 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element� 328 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))� 329 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))� 330 }� 331� 332 Carousel.VERSION = '3.3.7'� 333� 334 Carousel.TRANSITION_DURATION = 600� 335� 336 Carousel.DEFAULTS = {� 337 interval: 5000,� 338 pause: 'hover',� 339 wrap: true,� 340 keyboard: true� 341 }� 342� 343 Carousel.prototype.keydown = function (e) {� 344 if (/input|textarea/i.test(e.target.tagName)) return� 345 switch (e.which) {� 346 case 37: this.prev(); break� 347 case 39: this.next(); break� 348 default: return� 349 }� 350� 351 e.preventDefault()� 352 }� 353� 354 Carousel.prototype.cycle = function (e) {� 355 e || (this.paused = false)� 356� 357 this.interval && clearInterval(this.interval)� 358� 359 this.options.interval� 360 && !this.paused� 361 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))� 362� 363 return this� 364 }� 365� 366 Carousel.prototype.getItemIndex = function (item) {� 367 this.$items = item.parent().children('.item-c')� 368 return this.$items.index(item || this.$active)� 369 }� 370� 371 Carousel.prototype.getItemForDirection = function (direction, active) {� 372 var activeIndex = this.getItemIndex(active)� 373 var willWrap = (direction == 'prev' && activeIndex === 0)� 374 || (direction == 'next' && activeIndex == (this.$items.length - 1))� 375 if (willWrap && !this.options.wrap) return active� 376 var delta = direction == 'prev' ? -1 : 1� 377 var itemIndex = (activeIndex + delta) % this.$items.length� 378 return this.$items.eq(itemIndex)� 379 }� 380� 381 Carousel.prototype.to = function (pos) {� 382 var that = this� 383 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item-c.active'))� 384� 385 if (pos > (this.$items.length - 1) || pos < 0) return� 386� 387 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"� 388 if (activeIndex == pos) return this.pause().cycle()� 389� 390 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))� 391 }� 392� 393 Carousel.prototype.pause = function (e) {� 394 e || (this.paused = true)� 395� 396 if (this.$element.find('.next, .prev').length && $.support.transition) {� 397 this.$element.trigger($.support.transition.end)� 398 this.cycle(true)� 399 }� 400� 401 this.interval = clearInterval(this.interval)� 402� 403 return this� 404 }� 405� 406 Carousel.prototype.next = function () {� 407 if (this.sliding) return� 408 return this.slide('next')� 409 }� 410� 411 Carousel.prototype.prev = function () {� 412 if (this.sliding) return� 413 return this.slide('prev')� 414 }� 415� 416 Carousel.prototype.slide = function (type, next) {� 417 var $active = this.$element.find('.item-c.active')� 418 var $next = next || this.getItemForDirection(type, $active)� 419 var isCycling = this.interval� 420 var direction = type == 'next' ? 'left' : 'right'� 421 var that = this� 422� 423 if ($next.hasClass('active')) return (this.sliding = false)� 424� 425 var relatedTarget = $next[0]� 426 var slideEvent = $.Event('slide.bs.carousel', {� 427 relatedTarget: relatedTarget,� 428 direction: direction� 429 })� 430 this.$element.trigger(slideEvent)� 431 if (slideEvent.isDefaultPrevented()) return� 432� 433 this.sliding = true� 434� 435 isCycling && this.pause()� 436� 437 if (this.$indicators.length) {� 438 this.$indicators.find('.active').removeClass('active')� 439 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])� 440 $nextIndicator && $nextIndicator.addClass('active')� 441 }� 442� 443 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"�
vendor: 20,097 bytes, lines 444-1111
444 if ($.support.transition && this.$element.hasClass('slide')) {� 445 $next.addClass(type)� 446 $next[0].offsetWidth // force reflow� 447 $active.addClass(direction)� 448 $next.addClass(direction)� 449 $active� 450 .one('bsTransitionEnd', function () {� 451 $next.removeClass([type, direction].join(' ')).addClass('active')� 452 $active.removeClass(['active', direction].join(' '))� 453 that.sliding = false� 454 setTimeout(function () {� 455 that.$element.trigger(slidEvent)� 456 }, 0)� 457 })� 458 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)� 459 } else {� 460 $active.removeClass('active')� 461 $next.addClass('active')� 462 this.sliding = false� 463 this.$element.trigger(slidEvent)� 464 }� 465� 466 isCycling && this.cycle()� 467� 468 return this� 469 }� 470� 471� 472 // CAROUSEL PLUGIN DEFINITION� 473 // ==========================� 474� 475 function Plugin(option) {� 476 return this.each(function () {� 477 var $this = $(this)� 478 var data = $this.data('bs.carousel')� 479 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)� 480 var action = typeof option == 'string' ? option : options.slide� 481� 482 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))� 483 if (typeof option == 'number') data.to(option)� 484 else if (action) data[action]()� 485 else if (options.interval) data.pause().cycle()� 486 })� 487 }� 488� 489 var old = $.fn.carousel� 490� 491 $.fn.carousel = Plugin� 492 $.fn.carousel.Constructor = Carousel� 493� 494� 495 // CAROUSEL NO CONFLICT� 496 // ====================� 497� 498 $.fn.carousel.noConflict = function () {� 499 $.fn.carousel = old� 500 return this� 501 }� 502� 503� 504 // CAROUSEL DATA-API� 505 // =================� 506� 507 var clickHandler = function (e) {� 508 var href� 509 var $this = $(this)� 510 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7� 511 if (!$target.hasClass('carousel')) return� 512 var options = $.extend({}, $target.data(), $this.data())� 513 var slideIndex = $this.attr('data-slide-to')� 514 if (slideIndex) options.interval = false� 515� 516 Plugin.call($target, options)� 517� 518 if (slideIndex) {� 519 $target.data('bs.carousel').to(slideIndex)� 520 }� 521� 522 e.preventDefault()� 523 }� 524� 525 $(document)� 526 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)� 527 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)� 528� 529 $(window).on('load', function () {� 530 $('[data-ride="carousel"]').each(function () {� 531 var $carousel = $(this)� 532 Plugin.call($carousel, $carousel.data())� 533 })� 534 })� 535� 536}(jQuery);� 537� 538/* ========================================================================� 539 * Bootstrap: collapse.js v3.3.7� 540 * http://getbootstrap.com/javascript/#collapse� 541 * ========================================================================� 542 * Copyright 2011-2016 Twitter, Inc.� 543 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 544 * ======================================================================== */� 545� 546/* jshint latedef: false */� 547� 548+function ($) {� 549 'use strict';� 550� 551 // COLLAPSE PUBLIC CLASS DEFINITION� 552 // ================================� 553� 554 var Collapse = function (element, options) {� 555 this.$element = $(element)� 556 this.options = $.extend({}, Collapse.DEFAULTS, options)� 557 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +� 558 '[data-toggle="collapse"][data-target="#' + element.id + '"]')� 559 this.transitioning = null� 560� 561 if (this.options.parent) {� 562 this.$parent = this.getParent()� 563 } else {� 564 this.addAriaAndCollapsedClass(this.$element, this.$trigger)� 565 }� 566� 567 if (this.options.toggle) this.toggle()� 568 }� 569� 570 Collapse.VERSION = '3.3.7'� 571� 572 Collapse.TRANSITION_DURATION = 350� 573� 574 Collapse.DEFAULTS = {� 575 toggle: true� 576 }� 577� 578 Collapse.prototype.dimension = function () {� 579 var hasWidth = this.$element.hasClass('width')� 580 return hasWidth ? 'width' : 'height'� 581 }� 582� 583 Collapse.prototype.show = function () {� 584 if (this.transitioning || this.$element.hasClass('in')) return� 585� 586 var activesData� 587 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')� 588� 589 if (actives && actives.length) {� 590 activesData = actives.data('bs.collapse')� 591 if (activesData && activesData.transitioning) return� 592 }� 593� 594 var startEvent = $.Event('show.bs.collapse')� 595 this.$element.trigger(startEvent)� 596 if (startEvent.isDefaultPrevented()) return� 597� 598 if (actives && actives.length) {� 599 Plugin.call(actives, 'hide')� 600 activesData || actives.data('bs.collapse', null)� 601 }� 602� 603 var dimension = this.dimension()� 604� 605 this.$element� 606 .removeClass('collapse')� 607 .addClass('collapsing')[dimension](0)� 608 .attr('aria-expanded', true)� 609� 610 this.$trigger� 611 .removeClass('collapsed')� 612 .attr('aria-expanded', true)� 613� 614 this.transitioning = 1� 615� 616 var complete = function () {� 617 this.$element� 618 .removeClass('collapsing')� 619 .addClass('collapse in')[dimension]('')� 620 this.transitioning = 0� 621 this.$element� 622 .trigger('shown.bs.collapse')� 623 }� 624� 625 if (!$.support.transition) return complete.call(this)� 626� 627 var scrollSize = $.camelCase(['scroll', dimension].join('-'))� 628� 629 this.$element� 630 .one('bsTransitionEnd', $.proxy(complete, this))� 631 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])� 632 }� 633� 634 Collapse.prototype.hide = function () {� 635 if (this.transitioning || !this.$element.hasClass('in')) return� 636� 637 var startEvent = $.Event('hide.bs.collapse')� 638 this.$element.trigger(startEvent)� 639 if (startEvent.isDefaultPrevented()) return� 640� 641 var dimension = this.dimension()� 642� 643 this.$element[dimension](this.$element[dimension]())[0].offsetHeight� 644� 645 this.$element� 646 .addClass('collapsing')� 647 .removeClass('collapse in')� 648 .attr('aria-expanded', false)� 649� 650 this.$trigger� 651 .addClass('collapsed')� 652 .attr('aria-expanded', false)� 653� 654 this.transitioning = 1� 655� 656 var complete = function () {� 657 this.transitioning = 0� 658 this.$element� 659 .removeClass('collapsing')� 660 .addClass('collapse')� 661 .trigger('hidden.bs.collapse')� 662 }� 663� 664 if (!$.support.transition) return complete.call(this)� 665� 666 this.$element� 667 [dimension](0)� 668 .one('bsTransitionEnd', $.proxy(complete, this))� 669 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)� 670 }� 671� 672 Collapse.prototype.toggle = function () {� 673 this[this.$element.hasClass('in') ? 'hide' : 'show']()� 674 }� 675� 676 Collapse.prototype.getParent = function () {� 677 return $(this.options.parent)� 678 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')� 679 .each($.proxy(function (i, element) {� 680 var $element = $(element)� 681 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)� 682 }, this))� 683 .end()� 684 }� 685� 686 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {� 687 var isOpen = $element.hasClass('in')� 688� 689 $element.attr('aria-expanded', isOpen)� 690 $trigger� 691 .toggleClass('collapsed', !isOpen)� 692 .attr('aria-expanded', isOpen)� 693 }� 694� 695 function getTargetFromTrigger($trigger) {� 696 var href� 697 var target = $trigger.attr('data-target')� 698 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7� 699� 700 return $(target)� 701 }� 702� 703� 704 // COLLAPSE PLUGIN DEFINITION� 705 // ==========================� 706� 707 function Plugin(option) {� 708 return this.each(function () {� 709 var $this = $(this)� 710 var data = $this.data('bs.collapse')� 711 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)� 712� 713 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false� 714 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))� 715 if (typeof option == 'string') data[option]()� 716 })� 717 }� 718� 719 var old = $.fn.collapse� 720� 721 $.fn.collapse = Plugin� 722 $.fn.collapse.Constructor = Collapse� 723� 724� 725 // COLLAPSE NO CONFLICT� 726 // ====================� 727� 728 $.fn.collapse.noConflict = function () {� 729 $.fn.collapse = old� 730 return this� 731 }� 732� 733� 734 // COLLAPSE DATA-API� 735 // =================� 736� 737 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {� 738 var $this = $(this)� 739� 740 if (!$this.attr('data-target')) e.preventDefault()� 741� 742 var $target = getTargetFromTrigger($this)� 743 var data = $target.data('bs.collapse')� 744 var option = data ? 'toggle' : $this.data()� 745� 746 Plugin.call($target, option)� 747 })� 748� 749}(jQuery);� 750� 751/* ========================================================================� 752 * Bootstrap: dropdown.js v3.3.7� 753 * http://getbootstrap.com/javascript/#dropdowns� 754 * ========================================================================� 755 * Copyright 2011-2016 Twitter, Inc.� 756 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 757 * ======================================================================== */� 758� 759� 760+function ($) {� 761 'use strict';� 762� 763 // DROPDOWN CLASS DEFINITION� 764 // =========================� 765� 766 var backdrop = '.dropdown-backdrop'� 767 var toggle = '[data-toggle="dropdown"]'� 768 var Dropdown = function (element) {� 769 $(element).on('click.bs.dropdown', this.toggle)� 770 }� 771� 772 Dropdown.VERSION = '3.3.7'� 773� 774 function getParent($this) {� 775 var selector = $this.attr('data-target')� 776� 777 if (!selector) {� 778 selector = $this.attr('href')� 779 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7� 780 }� 781� 782 var $parent = selector && $(selector)� 783� 784 return $parent && $parent.length ? $parent : $this.parent()� 785 }� 786� 787 function clearMenus(e) {� 788 if (e && e.which === 3) return� 789 $(backdrop).remove()� 790 $(toggle).each(function () {� 791 var $this = $(this)� 792 var $parent = getParent($this)� 793 var relatedTarget = { relatedTarget: this }� 794� 795 if (!$parent.hasClass('open')) return� 796� 797 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return� 798� 799 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))� 800� 801 if (e.isDefaultPrevented()) return� 802� 803 $this.attr('aria-expanded', 'false')� 804 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))� 805 })� 806 }� 807� 808 Dropdown.prototype.toggle = function (e) {� 809 var $this = $(this)� 810� 811 if ($this.is('.disabled, :disabled')) return� 812� 813 var $parent = getParent($this)� 814 var isActive = $parent.hasClass('open')� 815� 816 clearMenus()� 817� 818 if (!isActive) {� 819 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {� 820 // if mobile we use a backdrop because click events don't delegate� 821 $(document.createElement('div'))� 822 .addClass('dropdown-backdrop')� 823 .insertAfter($(this))� 824 .on('click', clearMenus)� 825 }� 826� 827 var relatedTarget = { relatedTarget: this }� 828 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))� 829� 830 if (e.isDefaultPrevented()) return� 831� 832 $this� 833 .trigger('focus')� 834 .attr('aria-expanded', 'true')� 835� 836 $parent� 837 .toggleClass('open')� 838 .trigger($.Event('shown.bs.dropdown', relatedTarget))� 839 }� 840� 841 return false� 842 }� 843� 844 Dropdown.prototype.keydown = function (e) {� 845 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return� 846� 847 var $this = $(this)� 848� 849 e.preventDefault()� 850 e.stopPropagation()� 851� 852 if ($this.is('.disabled, :disabled')) return� 853� 854 var $parent = getParent($this)� 855 var isActive = $parent.hasClass('open')� 856� 857 if (!isActive && e.which != 27 || isActive && e.which == 27) {� 858 if (e.which == 27) $parent.find(toggle).trigger('focus')� 859 return $this.trigger('click')� 860 }� 861� 862 var desc = ' li:not(.disabled):visible a'� 863 var $items = $parent.find('.dropdown-menu' + desc)� 864� 865 if (!$items.length) return� 866� 867 var index = $items.index(e.target)� 868� 869 if (e.which == 38 && index > 0) index-- // up� 870 if (e.which == 40 && index < $items.length - 1) index++ // down� 871 if (!~index) index = 0� 872� 873 $items.eq(index).trigger('focus')� 874 }� 875� 876� 877 // DROPDOWN PLUGIN DEFINITION� 878 // ==========================� 879� 880 function Plugin(option) {� 881 return this.each(function () {� 882 var $this = $(this)� 883 var data = $this.data('bs.dropdown')� 884� 885 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))� 886 if (typeof option == 'string') data[option].call($this)� 887 })� 888 }� 889� 890 var old = $.fn.dropdown� 891� 892 $.fn.dropdown = Plugin� 893 $.fn.dropdown.Constructor = Dropdown� 894� 895� 896 // DROPDOWN NO CONFLICT� 897 // ====================� 898� 899 $.fn.dropdown.noConflict = function () {� 900 $.fn.dropdown = old� 901 return this� 902 }� 903� 904� 905 // APPLY TO STANDARD DROPDOWN ELEMENTS� 906 // ===================================� 907� 908 $(document)� 909 .on('click.bs.dropdown.data-api', clearMenus)� 910 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })� 911 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)� 912 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)� 913 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)� 914� 915}(jQuery);� 916� 917/* ========================================================================� 918 * Bootstrap: modal.js v3.3.7� 919 * http://getbootstrap.com/javascript/#modals� 920 * ========================================================================� 921 * Copyright 2011-2016 Twitter, Inc.� 922 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 923 * ======================================================================== */� 924� 925� 926+function ($) {� 927 'use strict';� 928� 929 // MODAL CLASS DEFINITION� 930 // ======================� 931� 932 var Modal = function (element, options) {� 933 this.options = options� 934 this.$body = $(document.body)� 935 this.$element = $(element)� 936 this.$dialog = this.$element.find('.modal-dialog')� 937 this.$backdrop = null� 938 this.isShown = null� 939 this.originalBodyPad = null� 940 this.scrollbarWidth = 0� 941 this.ignoreBackdropClick = false� 942� 943 if (this.options.remote) {� 944 this.$element� 945 .find('.modal-content')� 946 .load(this.options.remote, $.proxy(function () {� 947 this.$element.trigger('loaded.bs.modal')� 948 }, this))� 949 }� 950 }� 951� 952 Modal.VERSION = '3.3.7'� 953� 954 Modal.TRANSITION_DURATION = 300� 955 Modal.BACKDROP_TRANSITION_DURATION = 150� 956� 957 Modal.DEFAULTS = {� 958 backdrop: true,� 959 keyboard: true,� 960 show: true� 961 }� 962� 963 Modal.prototype.toggle = function (_relatedTarget) {� 964 return this.isShown ? this.hide() : this.show(_relatedTarget)� 965 }� 966� 967 Modal.prototype.show = function (_relatedTarget) {� 968 var that = this� 969 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })� 970� 971 this.$element.trigger(e)� 972� 973 if (this.isShown || e.isDefaultPrevented()) return� 974� 975 this.isShown = true� 976� 977 this.checkScrollbar()� 978 this.setScrollbar()� 979 this.$body.addClass('modal-open')� 980� 981 this.escape()� 982 this.resize()� 983� 984 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))� 985� 986 this.$dialog.on('mousedown.dismiss.bs.modal', function () {� 987 that.$element.one('mouseup.dismiss.bs.modal', function (e) {� 988 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true� 989 })� 990 })� 991� 992 this.backdrop(function () {� 993 var transition = $.support.transition && that.$element.hasClass('fade')� 994� 995 if (!that.$element.parent().length) {� 996 that.$element.appendTo(that.$body) // don't move modals dom position� 997 }� 998� 999 that.$element� 1000 .show()� 1001 .scrollTop(0)� 1002� 1003 that.adjustDialog()� 1004� 1005 if (transition) {� 1006 that.$element[0].offsetWidth // force reflow� 1007 }� 1008� 1009 that.$element.addClass('in')� 1010� 1011 that.enforceFocus()� 1012� 1013 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })� 1014� 1015 transition ?� 1016 that.$dialog // wait for modal to slide in� 1017 .one('bsTransitionEnd', function () {� 1018 that.$element.trigger('focus').trigger(e)� 1019 })� 1020 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :� 1021 that.$element.trigger('focus').trigger(e)� 1022 })� 1023 }� 1024� 1025 Modal.prototype.hide = function (e) {� 1026 if (e) e.preventDefault()� 1027� 1028 e = $.Event('hide.bs.modal')� 1029� 1030 this.$element.trigger(e)� 1031� 1032 if (!this.isShown || e.isDefaultPrevented()) return� 1033� 1034 this.isShown = false� 1035� 1036 this.escape()� 1037 this.resize()� 1038� 1039 $(document).off('focusin.bs.modal')� 1040� 1041 this.$element� 1042 .removeClass('in')� 1043 .off('click.dismiss.bs.modal')� 1044 .off('mouseup.dismiss.bs.modal')� 1045� 1046 this.$dialog.off('mousedown.dismiss.bs.modal')� 1047� 1048 $.support.transition && this.$element.hasClass('fade') ?� 1049 this.$element� 1050 .one('bsTransitionEnd', $.proxy(this.hideModal, this))� 1051 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :� 1052 this.hideModal()� 1053 }� 1054� 1055 Modal.prototype.enforceFocus = function () {� 1056 $(document)� 1057 .off('focusin.bs.modal') // guard against infinite focus loop� 1058 .on('focusin.bs.modal', $.proxy(function (e) {� 1059 if (document !== e.target &&� 1060 this.$element[0] !== e.target &&� 1061 !this.$element.has(e.target).length) {� 1062 this.$element.trigger('focus')� 1063 }� 1064 }, this))� 1065 }� 1066� 1067 Modal.prototype.escape = function () {� 1068 if (this.isShown && this.options.keyboard) {� 1069 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {� 1070 e.which == 27 && this.hide()� 1071 }, this))� 1072 } else if (!this.isShown) {� 1073 this.$element.off('keydown.dismiss.bs.modal')� 1074 }� 1075 }� 1076� 1077 Modal.prototype.resize = function () {� 1078 if (this.isShown) {� 1079 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))� 1080 } else {� 1081 $(window).off('resize.bs.modal')� 1082 }� 1083 }� 1084� 1085 Modal.prototype.hideModal = function () {� 1086 var that = this� 1087 this.$element.hide()� 1088 this.backdrop(function () {� 1089 that.$body.removeClass('modal-open')� 1090 that.resetAdjustments()� 1091 that.resetScrollbar()� 1092 that.$element.trigger('hidden.bs.modal')� 1093 })� 1094 }� 1095� 1096 Modal.prototype.removeBackdrop = function () {� 1097 this.$backdrop && this.$backdrop.remove()� 1098 this.$backdrop = null� 1099 }� 1100� 1101 Modal.prototype.backdrop = function (callback) {� 1102 var that = this� 1103 var animate = this.$element.hasClass('fade') ? 'fade' : ''� 1104� 1105 if (this.isShown && this.options.backdrop) {� 1106 var doAnimate = $.support.transition && animate� 1107� 1108� 1109 this.$backdrop = $(document.createElement('div'))� 1110 .addClass('modal-backdrop ' + animate)� 1111 .appendTo(this.$body)�
vendor: 8,914 bytes, lines 1112-1376
1112� 1113 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {� 1114 if (this.ignoreBackdropClick) {� 1115 this.ignoreBackdropClick = false� 1116 return� 1117 }� 1118 if (e.target !== e.currentTarget) return� 1119 this.options.backdrop == 'static'� 1120 ? this.$element[0].focus()� 1121 : this.hide()� 1122 }, this))� 1123� 1124 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow� 1125� 1126 this.$backdrop.addClass('in')� 1127� 1128 if (!callback) return� 1129� 1130 doAnimate ?� 1131 this.$backdrop� 1132 .one('bsTransitionEnd', callback)� 1133 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :� 1134 callback()� 1135� 1136 } else if (!this.isShown && this.$backdrop) {� 1137 this.$backdrop.removeClass('in')� 1138� 1139 var callbackRemove = function () {� 1140 that.removeBackdrop()� 1141 callback && callback()� 1142 }� 1143 $.support.transition && this.$element.hasClass('fade') ?� 1144 this.$backdrop� 1145 .one('bsTransitionEnd', callbackRemove)� 1146 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :� 1147 callbackRemove()� 1148� 1149 } else if (callback) {� 1150 callback()� 1151 }� 1152 }� 1153� 1154 // these following methods are used to handle overflowing modals� 1155� 1156 Modal.prototype.handleUpdate = function () {� 1157 this.adjustDialog()� 1158 }� 1159� 1160 Modal.prototype.adjustDialog = function () {� 1161 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight� 1162� 1163 this.$element.css({� 1164 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',� 1165 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''� 1166 })� 1167 }� 1168� 1169 Modal.prototype.resetAdjustments = function () {� 1170 this.$element.css({� 1171 paddingLeft: '',� 1172 paddingRight: ''� 1173 })� 1174 }� 1175� 1176 Modal.prototype.checkScrollbar = function () {� 1177 var fullWindowWidth = window.innerWidth� 1178 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8� 1179 var documentElementRect = document.documentElement.getBoundingClientRect()� 1180 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)� 1181 }� 1182 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth� 1183 this.scrollbarWidth = this.measureScrollbar()� 1184 }� 1185� 1186 Modal.prototype.setScrollbar = function () {� 1187 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)� 1188 this.originalBodyPad = document.body.style.paddingRight || ''� 1189 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)� 1190 }� 1191� 1192 Modal.prototype.resetScrollbar = function () {� 1193 this.$body.css('padding-right', this.originalBodyPad)� 1194 }� 1195� 1196 Modal.prototype.measureScrollbar = function () { // thx walsh� 1197 var scrollDiv = document.createElement('div')� 1198 scrollDiv.className = 'modal-scrollbar-measure'� 1199 this.$body.append(scrollDiv)� 1200 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth� 1201 this.$body[0].removeChild(scrollDiv)� 1202 return scrollbarWidth� 1203 }� 1204� 1205� 1206 // MODAL PLUGIN DEFINITION� 1207 // =======================� 1208� 1209 function Plugin(option, _relatedTarget) {� 1210 return this.each(function () {� 1211 var $this = $(this)� 1212 var data = $this.data('bs.modal')� 1213 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)� 1214� 1215 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))� 1216 if (typeof option == 'string') data[option](_relatedTarget)� 1217 else if (options.show) data.show(_relatedTarget)� 1218 })� 1219 }� 1220� 1221 var old = $.fn.modal� 1222� 1223 $.fn.modal = Plugin� 1224 $.fn.modal.Constructor = Modal� 1225� 1226� 1227 // MODAL NO CONFLICT� 1228 // =================� 1229� 1230 $.fn.modal.noConflict = function () {� 1231 $.fn.modal = old� 1232 return this� 1233 }� 1234� 1235� 1236 // MODAL DATA-API� 1237 // ==============� 1238� 1239 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {� 1240 var $this = $(this)� 1241 var href = $this.attr('href')� 1242 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7� 1243 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())� 1244� 1245 if ($this.is('a')) e.preventDefault()� 1246� 1247 $target.one('show.bs.modal', function (showEvent) {� 1248 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown� 1249 $target.one('hidden.bs.modal', function () {� 1250 $this.is(':visible') && $this.trigger('focus')� 1251 })� 1252 })� 1253 Plugin.call($target, option, this)� 1254 })� 1255� 1256}(jQuery);� 1257� 1258/* ========================================================================� 1259 * Bootstrap: tooltip.js v3.3.7� 1260 * http://getbootstrap.com/javascript/#tooltip� 1261 * Inspired by the original jQuery.tipsy by Jason Frame� 1262 * ========================================================================� 1263 * Copyright 2011-2016 Twitter, Inc.� 1264 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 1265 * ======================================================================== */� 1266� 1267� 1268+function ($) {� 1269 'use strict';� 1270� 1271 // TOOLTIP PUBLIC CLASS DEFINITION� 1272 // ===============================� 1273� 1274 var Tooltip = function (element, options) {� 1275 this.type = null� 1276 this.options = null� 1277 this.enabled = null� 1278 this.timeout = null� 1279 this.hoverState = null� 1280 this.$element = null� 1281 this.inState = null� 1282� 1283 this.init('tooltip', element, options)� 1284 }� 1285� 1286 Tooltip.VERSION = '3.3.7'� 1287� 1288 Tooltip.TRANSITION_DURATION = 150� 1289� 1290 Tooltip.DEFAULTS = {� 1291 animation: true,� 1292 placement: 'top',� 1293 selector: false,� 1294 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',� 1295 trigger: 'hover focus',� 1296 title: '',� 1297 delay: 0,� 1298 html: false,� 1299 container: false,� 1300 viewport: {� 1301 selector: 'body',� 1302 padding: 0� 1303 }� 1304 }� 1305� 1306 Tooltip.prototype.init = function (type, element, options) {� 1307 this.enabled = true� 1308 this.type = type� 1309 this.$element = $(element)� 1310 this.options = this.getOptions(options)� 1311 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))� 1312 this.inState = { click: false, hover: false, focus: false }� 1313� 1314 if (this.$element[0] instanceof document.constructor && !this.options.selector) {� 1315 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')� 1316 }� 1317� 1318 var triggers = this.options.trigger.split(' ')� 1319� 1320 for (var i = triggers.length; i--;) {� 1321 var trigger = triggers[i]� 1322� 1323 if (trigger == 'click') {� 1324 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))� 1325 } else if (trigger != 'manual') {� 1326 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'� 1327 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'� 1328� 1329 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))� 1330 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))� 1331 }� 1332 }� 1333� 1334 this.options.selector ?� 1335 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :� 1336 this.fixTitle()� 1337 }� 1338� 1339 Tooltip.prototype.getDefaults = function () {� 1340 return Tooltip.DEFAULTS� 1341 }� 1342� 1343 Tooltip.prototype.getOptions = function (options) {� 1344 options = $.extend({}, this.getDefaults(), this.$element.data(), options)� 1345� 1346 if (options.delay && typeof options.delay == 'number') {� 1347 options.delay = {� 1348 show: options.delay,� 1349 hide: options.delay� 1350 }� 1351 }� 1352� 1353 return options� 1354 }� 1355� 1356 Tooltip.prototype.getDelegateOptions = function () {� 1357 var options = {}� 1358 var defaults = this.getDefaults()� 1359� 1360 this._options && $.each(this._options, function (key, value) {� 1361 if (defaults[key] != value) options[key] = value� 1362 })� 1363� 1364 return options� 1365 }� 1366� 1367 Tooltip.prototype.enter = function (obj) {� 1368 var self = obj instanceof this.constructor ?� 1369 obj : $(obj.currentTarget).data('bs.' + this.type)� 1370� 1371 if (!self) {� 1372 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())� 1373 $(obj.currentTarget).data('bs.' + this.type, self)� 1374 }� 1375� 1376 if (obj instanceof $.Event) {�
vendor: 8,217 bytes, lines 1377-1622
1377 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true� 1378 }� 1379� 1380 if (self.tip().hasClass('in') || self.hoverState == 'in') {� 1381 self.hoverState = 'in'� 1382 return� 1383 }� 1384� 1385 clearTimeout(self.timeout)� 1386� 1387 self.hoverState = 'in'� 1388� 1389 if (!self.options.delay || !self.options.delay.show) return self.show()� 1390� 1391 self.timeout = setTimeout(function () {� 1392 if (self.hoverState == 'in') self.show()� 1393 }, self.options.delay.show)� 1394 }� 1395� 1396 Tooltip.prototype.isInStateTrue = function () {� 1397 for (var key in this.inState) {� 1398 if (this.inState[key]) return true� 1399 }� 1400� 1401 return false� 1402 }� 1403� 1404 Tooltip.prototype.leave = function (obj) {� 1405 var self = obj instanceof this.constructor ?� 1406 obj : $(obj.currentTarget).data('bs.' + this.type)� 1407� 1408 if (!self) {� 1409 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())� 1410 $(obj.currentTarget).data('bs.' + this.type, self)� 1411 }� 1412� 1413 if (obj instanceof $.Event) {� 1414 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false� 1415 }� 1416� 1417 if (self.isInStateTrue()) return� 1418� 1419 clearTimeout(self.timeout)� 1420� 1421 self.hoverState = 'out'� 1422� 1423 if (!self.options.delay || !self.options.delay.hide) return self.hide()� 1424� 1425 self.timeout = setTimeout(function () {� 1426 if (self.hoverState == 'out') self.hide()� 1427 }, self.options.delay.hide)� 1428 }� 1429� 1430 Tooltip.prototype.show = function () {� 1431 var e = $.Event('show.bs.' + this.type)� 1432� 1433 if (this.hasContent() && this.enabled) {� 1434 this.$element.trigger(e)� 1435� 1436 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])� 1437 if (e.isDefaultPrevented() || !inDom) return� 1438 var that = this� 1439� 1440 var $tip = this.tip()� 1441� 1442 var tipId = this.getUID(this.type)� 1443� 1444 this.setContent()� 1445 $tip.attr('id', tipId)� 1446 this.$element.attr('aria-describedby', tipId)� 1447� 1448 if (this.options.animation) $tip.addClass('fade')� 1449� 1450 var placement = typeof this.options.placement == 'function' ?� 1451 this.options.placement.call(this, $tip[0], this.$element[0]) :� 1452 this.options.placement� 1453� 1454 var autoToken = /\s?auto?\s?/i� 1455 var autoPlace = autoToken.test(placement)� 1456 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'� 1457� 1458 $tip� 1459 .detach()� 1460 .css({ top: 0, left: 0, display: 'block' })� 1461 .addClass(placement)� 1462 .data('bs.' + this.type, this)� 1463� 1464 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)� 1465 this.$element.trigger('inserted.bs.' + this.type)� 1466� 1467 var pos = this.getPosition()� 1468 var actualWidth = $tip[0].offsetWidth� 1469 var actualHeight = $tip[0].offsetHeight� 1470� 1471 if (autoPlace) {� 1472 var orgPlacement = placement� 1473 var viewportDim = this.getPosition(this.$viewport)� 1474� 1475 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :� 1476 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :� 1477 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :� 1478 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :� 1479 placement� 1480� 1481 $tip� 1482 .removeClass(orgPlacement)� 1483 .addClass(placement)� 1484 }� 1485� 1486 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)� 1487� 1488 this.applyPlacement(calculatedOffset, placement)� 1489� 1490 var complete = function () {� 1491 var prevHoverState = that.hoverState� 1492 that.$element.trigger('shown.bs.' + that.type)� 1493 that.hoverState = null� 1494� 1495 if (prevHoverState == 'out') that.leave(that)� 1496 }� 1497� 1498 $.support.transition && this.$tip.hasClass('fade') ?� 1499 $tip� 1500 .one('bsTransitionEnd', complete)� 1501 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :� 1502 complete()� 1503 }� 1504 }� 1505� 1506 Tooltip.prototype.applyPlacement = function (offset, placement) {� 1507 var $tip = this.tip()� 1508 var width = $tip[0].offsetWidth� 1509 var height = $tip[0].offsetHeight� 1510� 1511 // manually read margins because getBoundingClientRect includes difference� 1512 var marginTop = parseInt($tip.css('margin-top'), 10)� 1513 var marginLeft = parseInt($tip.css('margin-left'), 10)� 1514� 1515 // we must check for NaN for ie 8/9� 1516 if (isNaN(marginTop)) marginTop = 0� 1517 if (isNaN(marginLeft)) marginLeft = 0� 1518� 1519 offset.top += marginTop� 1520 offset.left += marginLeft� 1521� 1522 // $.fn.offset doesn't round pixel values� 1523 // so we use setOffset directly with our own function B-0� 1524 $.offset.setOffset($tip[0], $.extend({� 1525 using: function (props) {� 1526 $tip.css({� 1527 top: Math.round(props.top),� 1528 left: Math.round(props.left)� 1529 })� 1530 }� 1531 }, offset), 0)� 1532� 1533 $tip.addClass('in')� 1534� 1535 // check to see if placing tip in new offset caused the tip to resize itself� 1536 var actualWidth = $tip[0].offsetWidth� 1537 var actualHeight = $tip[0].offsetHeight� 1538� 1539 if (placement == 'top' && actualHeight != height) {� 1540 offset.top = offset.top + height - actualHeight� 1541 }� 1542� 1543 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)� 1544� 1545 if (delta.left) offset.left += delta.left� 1546 else offset.top += delta.top� 1547� 1548 var isVertical = /top|bottom/.test(placement)� 1549 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight� 1550 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'� 1551� 1552 $tip.offset(offset)� 1553 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)� 1554 }� 1555� 1556 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {� 1557 this.arrow()� 1558 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')� 1559 .css(isVertical ? 'top' : 'left', '')� 1560 }� 1561� 1562 Tooltip.prototype.setContent = function () {� 1563 var $tip = this.tip()� 1564 var title = this.getTitle()� 1565� 1566 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)� 1567 $tip.removeClass('fade in top bottom left right')� 1568 }� 1569� 1570 Tooltip.prototype.hide = function (callback) {� 1571 var that = this� 1572 var $tip = $(this.$tip)� 1573 var e = $.Event('hide.bs.' + this.type)� 1574� 1575 function complete() {� 1576 if (that.hoverState != 'in') $tip.detach()� 1577 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.� 1578 that.$element� 1579 .removeAttr('aria-describedby')� 1580 .trigger('hidden.bs.' + that.type)� 1581 }� 1582 callback && callback()� 1583 }� 1584� 1585 this.$element.trigger(e)� 1586� 1587 if (e.isDefaultPrevented()) return� 1588� 1589 $tip.removeClass('in')� 1590� 1591 $.support.transition && $tip.hasClass('fade') ?� 1592 $tip� 1593 .one('bsTransitionEnd', complete)� 1594 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :� 1595 complete()� 1596� 1597 this.hoverState = null� 1598� 1599 return this� 1600 }� 1601� 1602 Tooltip.prototype.fixTitle = function () {� 1603 var $e = this.$element� 1604 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {� 1605 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')� 1606 }� 1607 }� 1608� 1609 Tooltip.prototype.hasContent = function () {� 1610 return this.getTitle()� 1611 }� 1612� 1613 Tooltip.prototype.getPosition = function ($element) {� 1614 $element = $element || this.$element� 1615� 1616 var el = $element[0]� 1617 var isBody = el.tagName == 'BODY'� 1618� 1619 var elRect = el.getBoundingClientRect()� 1620 if (elRect.width == null) {� 1621 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093� 1622 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })�
vendor: 9,526 bytes, lines 1623-1904
1623 }� 1624 var isSvg = window.SVGElement && el instanceof window.SVGElement� 1625 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.� 1626 // See https://github.com/twbs/bootstrap/issues/20280� 1627 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())� 1628 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }� 1629 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null� 1630� 1631 return $.extend({}, elRect, scroll, outerDims, elOffset)� 1632 }� 1633� 1634 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {� 1635 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :� 1636 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :� 1637 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :� 1638 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }� 1639� 1640 }� 1641� 1642 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {� 1643 var delta = { top: 0, left: 0 }� 1644 if (!this.$viewport) return delta� 1645� 1646 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0� 1647 var viewportDimensions = this.getPosition(this.$viewport)� 1648� 1649 if (/right|left/.test(placement)) {� 1650 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll� 1651 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight� 1652 if (topEdgeOffset < viewportDimensions.top) { // top overflow� 1653 delta.top = viewportDimensions.top - topEdgeOffset� 1654 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow� 1655 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset� 1656 }� 1657 } else {� 1658 var leftEdgeOffset = pos.left - viewportPadding� 1659 var rightEdgeOffset = pos.left + viewportPadding + actualWidth� 1660 if (leftEdgeOffset < viewportDimensions.left) { // left overflow� 1661 delta.left = viewportDimensions.left - leftEdgeOffset� 1662 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow� 1663 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset� 1664 }� 1665 }� 1666� 1667 return delta� 1668 }� 1669� 1670 Tooltip.prototype.getTitle = function () {� 1671 var title� 1672 var $e = this.$element� 1673 var o = this.options� 1674� 1675 title = $e.attr('data-original-title')� 1676 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)� 1677� 1678 return title� 1679 }� 1680� 1681 Tooltip.prototype.getUID = function (prefix) {� 1682 do prefix += ~~(Math.random() * 1000000)� 1683 while (document.getElementById(prefix))� 1684 return prefix� 1685 }� 1686� 1687 Tooltip.prototype.tip = function () {� 1688 if (!this.$tip) {� 1689 this.$tip = $(this.options.template)� 1690 if (this.$tip.length != 1) {� 1691 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')� 1692 }� 1693 }� 1694 return this.$tip� 1695 }� 1696� 1697 Tooltip.prototype.arrow = function () {� 1698 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))� 1699 }� 1700� 1701 Tooltip.prototype.enable = function () {� 1702 this.enabled = true� 1703 }� 1704� 1705 Tooltip.prototype.disable = function () {� 1706 this.enabled = false� 1707 }� 1708� 1709 Tooltip.prototype.toggleEnabled = function () {� 1710 this.enabled = !this.enabled� 1711 }� 1712� 1713 Tooltip.prototype.toggle = function (e) {� 1714 var self = this� 1715 if (e) {� 1716 self = $(e.currentTarget).data('bs.' + this.type)� 1717 if (!self) {� 1718 self = new this.constructor(e.currentTarget, this.getDelegateOptions())� 1719 $(e.currentTarget).data('bs.' + this.type, self)� 1720 }� 1721 }� 1722� 1723 if (e) {� 1724 self.inState.click = !self.inState.click� 1725 if (self.isInStateTrue()) self.enter(self)� 1726 else self.leave(self)� 1727 } else {� 1728 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)� 1729 }� 1730 }� 1731� 1732 Tooltip.prototype.destroy = function () {� 1733 var that = this� 1734 clearTimeout(this.timeout)� 1735 this.hide(function () {� 1736 that.$element.off('.' + that.type).removeData('bs.' + that.type)� 1737 if (that.$tip) {� 1738 that.$tip.detach()� 1739 }� 1740 that.$tip = null� 1741 that.$arrow = null� 1742 that.$viewport = null� 1743 that.$element = null� 1744 })� 1745 }� 1746� 1747� 1748 // TOOLTIP PLUGIN DEFINITION� 1749 // =========================� 1750� 1751 function Plugin(option) {� 1752 return this.each(function () {� 1753 var $this = $(this)� 1754 var data = $this.data('bs.tooltip')� 1755 var options = typeof option == 'object' && option� 1756� 1757 if (!data && /destroy|hide/.test(option)) return� 1758 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))� 1759 if (typeof option == 'string') data[option]()� 1760 })� 1761 }� 1762� 1763 var old = $.fn.tooltip� 1764� 1765 $.fn.tooltip = Plugin� 1766 $.fn.tooltip.Constructor = Tooltip� 1767� 1768� 1769 // TOOLTIP NO CONFLICT� 1770 // ===================� 1771� 1772 $.fn.tooltip.noConflict = function () {� 1773 $.fn.tooltip = old� 1774 return this� 1775 }� 1776� 1777}(jQuery);� 1778� 1779/* ========================================================================� 1780 * Bootstrap: popover.js v3.3.7� 1781 * http://getbootstrap.com/javascript/#popovers� 1782 * ========================================================================� 1783 * Copyright 2011-2016 Twitter, Inc.� 1784 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 1785 * ======================================================================== */� 1786� 1787� 1788+function ($) {� 1789 'use strict';� 1790� 1791 // POPOVER PUBLIC CLASS DEFINITION� 1792 // ===============================� 1793� 1794 var Popover = function (element, options) {� 1795 this.init('popover', element, options)� 1796 }� 1797� 1798 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')� 1799� 1800 Popover.VERSION = '3.3.7'� 1801� 1802 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {� 1803 placement: 'right',� 1804 trigger: 'click',� 1805 content: '',� 1806 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'� 1807 })� 1808� 1809� 1810 // NOTE: POPOVER EXTENDS tooltip.js� 1811 // ================================� 1812� 1813 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)� 1814� 1815 Popover.prototype.constructor = Popover� 1816� 1817 Popover.prototype.getDefaults = function () {� 1818 return Popover.DEFAULTS� 1819 }� 1820� 1821 Popover.prototype.setContent = function () {� 1822 var $tip = this.tip()� 1823 var title = this.getTitle()� 1824 var content = this.getContent()� 1825� 1826 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)� 1827 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events� 1828 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'� 1829 ](content)� 1830� 1831 $tip.removeClass('fade top bottom left right in')� 1832� 1833 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do� 1834 // this manually by checking the contents.� 1835 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()� 1836 }� 1837� 1838 Popover.prototype.hasContent = function () {� 1839 return this.getTitle() || this.getContent()� 1840 }� 1841� 1842 Popover.prototype.getContent = function () {� 1843 var $e = this.$element� 1844 var o = this.options� 1845� 1846 return $e.attr('data-content')� 1847 || (typeof o.content == 'function' ?� 1848 o.content.call($e[0]) :� 1849 o.content)� 1850 }� 1851� 1852 Popover.prototype.arrow = function () {� 1853 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))� 1854 }� 1855� 1856� 1857 // POPOVER PLUGIN DEFINITION� 1858 // =========================� 1859� 1860 function Plugin(option) {� 1861 return this.each(function () {� 1862 var $this = $(this)� 1863 var data = $this.data('bs.popover')� 1864 var options = typeof option == 'object' && option� 1865� 1866 if (!data && /destroy|hide/.test(option)) return� 1867 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))� 1868 if (typeof option == 'string') data[option]()� 1869 })� 1870 }� 1871� 1872 var old = $.fn.popover� 1873� 1874 $.fn.popover = Plugin� 1875 $.fn.popover.Constructor = Popover� 1876� 1877� 1878 // POPOVER NO CONFLICT� 1879 // ===================� 1880� 1881 $.fn.popover.noConflict = function () {� 1882 $.fn.popover = old� 1883 return this� 1884 }� 1885� 1886}(jQuery);� 1887� 1888/* ========================================================================� 1889 * Bootstrap: scrollspy.js v3.3.7� 1890 * http://getbootstrap.com/javascript/#scrollspy� 1891 * ========================================================================� 1892 * Copyright 2011-2016 Twitter, Inc.� 1893 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 1894 * ======================================================================== */� 1895� 1896� 1897+function ($) {� 1898 'use strict';� 1899� 1900 // SCROLLSPY CLASS DEFINITION� 1901 // ==========================� 1902� 1903 function ScrollSpy(element, options) {� 1904 this.$body = $(document.body)�
vendor: 11,854 bytes, lines 1905-2302
1905 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)� 1906 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)� 1907 this.selector = (this.options.target || '') + ' .nav li > a'� 1908 this.offsets = []� 1909 this.targets = []� 1910 this.activeTarget = null� 1911 this.scrollHeight = 0� 1912� 1913 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))� 1914 this.refresh()� 1915 this.process()� 1916 }� 1917� 1918 ScrollSpy.VERSION = '3.3.7'� 1919� 1920 ScrollSpy.DEFAULTS = {� 1921 offset: 10� 1922 }� 1923� 1924 ScrollSpy.prototype.getScrollHeight = function () {� 1925 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)� 1926 }� 1927� 1928 ScrollSpy.prototype.refresh = function () {� 1929 var that = this� 1930 var offsetMethod = 'offset'� 1931 var offsetBase = 0� 1932� 1933 this.offsets = []� 1934 this.targets = []� 1935 this.scrollHeight = this.getScrollHeight()� 1936� 1937 if (!$.isWindow(this.$scrollElement[0])) {� 1938 offsetMethod = 'position'� 1939 offsetBase = this.$scrollElement.scrollTop()� 1940 }� 1941� 1942 this.$body� 1943 .find(this.selector)� 1944 .map(function () {� 1945 var $el = $(this)� 1946 var href = $el.data('target') || $el.attr('href')� 1947 var $href = /^#./.test(href) && $(href)� 1948� 1949 return ($href� 1950 && $href.length� 1951 && $href.is(':visible')� 1952 && [[$href[offsetMethod]().top + offsetBase, href]]) || null� 1953 })� 1954 .sort(function (a, b) { return a[0] - b[0] })� 1955 .each(function () {� 1956 that.offsets.push(this[0])� 1957 that.targets.push(this[1])� 1958 })� 1959 }� 1960� 1961 ScrollSpy.prototype.process = function () {� 1962 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset� 1963 var scrollHeight = this.getScrollHeight()� 1964 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()� 1965 var offsets = this.offsets� 1966 var targets = this.targets� 1967 var activeTarget = this.activeTarget� 1968 var i� 1969� 1970 if (this.scrollHeight != scrollHeight) {� 1971 this.refresh()� 1972 }� 1973� 1974 if (scrollTop >= maxScroll) {� 1975 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)� 1976 }� 1977� 1978 if (activeTarget && scrollTop < offsets[0]) {� 1979 this.activeTarget = null� 1980 return this.clear()� 1981 }� 1982� 1983 for (i = offsets.length; i--;) {� 1984 activeTarget != targets[i]� 1985 && scrollTop >= offsets[i]� 1986 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])� 1987 && this.activate(targets[i])� 1988 }� 1989 }� 1990� 1991 ScrollSpy.prototype.activate = function (target) {� 1992 this.activeTarget = target� 1993� 1994 this.clear()� 1995� 1996 var selector = this.selector +� 1997 '[data-target="' + target + '"],' +� 1998 this.selector + '[href="' + target + '"]'� 1999� 2000 var active = $(selector)� 2001 .parents('li')� 2002 .addClass('active')� 2003� 2004 if (active.parent('.dropdown-menu').length) {� 2005 active = active� 2006 .closest('li.dropdown')� 2007 .addClass('active')� 2008 }� 2009� 2010 active.trigger('activate.bs.scrollspy')� 2011 }� 2012� 2013 ScrollSpy.prototype.clear = function () {� 2014 $(this.selector)� 2015 .parentsUntil(this.options.target, '.active')� 2016 .removeClass('active')� 2017 }� 2018� 2019� 2020 // SCROLLSPY PLUGIN DEFINITION� 2021 // ===========================� 2022� 2023 function Plugin(option) {� 2024 return this.each(function () {� 2025 var $this = $(this)� 2026 var data = $this.data('bs.scrollspy')� 2027 var options = typeof option == 'object' && option� 2028� 2029 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))� 2030 if (typeof option == 'string') data[option]()� 2031 })� 2032 }� 2033� 2034 var old = $.fn.scrollspy� 2035� 2036 $.fn.scrollspy = Plugin� 2037 $.fn.scrollspy.Constructor = ScrollSpy� 2038� 2039� 2040 // SCROLLSPY NO CONFLICT� 2041 // =====================� 2042� 2043 $.fn.scrollspy.noConflict = function () {� 2044 $.fn.scrollspy = old� 2045 return this� 2046 }� 2047� 2048� 2049 // SCROLLSPY DATA-API� 2050 // ==================� 2051� 2052 $(window).on('load.bs.scrollspy.data-api', function () {� 2053 $('[data-spy="scroll"]').each(function () {� 2054 var $spy = $(this)� 2055 Plugin.call($spy, $spy.data())� 2056 })� 2057 })� 2058� 2059}(jQuery);� 2060� 2061/* ========================================================================� 2062 * Bootstrap: tab.js v3.3.7� 2063 * http://getbootstrap.com/javascript/#tabs� 2064 * ========================================================================� 2065 * Copyright 2011-2016 Twitter, Inc.� 2066 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 2067 * ======================================================================== */� 2068� 2069� 2070+function ($) {� 2071 'use strict';� 2072� 2073 // TAB CLASS DEFINITION� 2074 // ====================� 2075� 2076 var Tab = function (element) {� 2077 // jscs:disable requireDollarBeforejQueryAssignment� 2078 this.element = $(element)� 2079 // jscs:enable requireDollarBeforejQueryAssignment� 2080 }� 2081� 2082 Tab.VERSION = '3.3.7'� 2083� 2084 Tab.TRANSITION_DURATION = 150� 2085� 2086 Tab.prototype.show = function () {� 2087 var $this = this.element� 2088 var $ul = $this.closest('ul:not(.dropdown-menu)')� 2089 var selector = $this.data('target')� 2090� 2091 if (!selector) {� 2092 selector = $this.attr('href')� 2093 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7� 2094 }� 2095� 2096 if ($this.parent('li').hasClass('active')) return� 2097� 2098 var $previous = $ul.find('.active:last a')� 2099 var hideEvent = $.Event('hide.bs.tab', {� 2100 relatedTarget: $this[0]� 2101 })� 2102 var showEvent = $.Event('show.bs.tab', {� 2103 relatedTarget: $previous[0]� 2104 })� 2105� 2106 $previous.trigger(hideEvent)� 2107 $this.trigger(showEvent)� 2108� 2109 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return� 2110� 2111 var $target = $(selector)� 2112� 2113 this.activate($this.closest('li'), $ul)� 2114 this.activate($target, $target.parent(), function () {� 2115 $previous.trigger({� 2116 type: 'hidden.bs.tab',� 2117 relatedTarget: $this[0]� 2118 })� 2119 $this.trigger({� 2120 type: 'shown.bs.tab',� 2121 relatedTarget: $previous[0]� 2122 })� 2123 })� 2124 }� 2125� 2126 Tab.prototype.activate = function (element, container, callback) {� 2127 var $active = container.find('> .active')� 2128 var transition = callback� 2129 && $.support.transition� 2130 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)� 2131� 2132 function next() {� 2133 $active� 2134 .removeClass('active')� 2135 .find('> .dropdown-menu > .active')� 2136 .removeClass('active')� 2137 .end()� 2138 .find('[data-toggle="tab"]')� 2139 .attr('aria-expanded', false)� 2140� 2141 element� 2142 .addClass('active')� 2143 .find('[data-toggle="tab"]')� 2144 .attr('aria-expanded', true)� 2145� 2146 if (transition) {� 2147 element[0].offsetWidth // reflow for transition� 2148 element.addClass('in')� 2149 } else {� 2150 element.removeClass('fade')� 2151 }� 2152� 2153 if (element.parent('.dropdown-menu').length) {� 2154 element� 2155 .closest('li.dropdown')� 2156 .addClass('active')� 2157 .end()� 2158 .find('[data-toggle="tab"]')� 2159 .attr('aria-expanded', true)� 2160 }� 2161� 2162 callback && callback()� 2163 }� 2164� 2165 $active.length && transition ?� 2166 $active� 2167 .one('bsTransitionEnd', next)� 2168 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :� 2169 next()� 2170� 2171 $active.removeClass('in')� 2172 }� 2173� 2174� 2175 // TAB PLUGIN DEFINITION� 2176 // =====================� 2177� 2178 function Plugin(option) {� 2179 return this.each(function () {� 2180 var $this = $(this)� 2181 var data = $this.data('bs.tab')� 2182� 2183 if (!data) $this.data('bs.tab', (data = new Tab(this)))� 2184 if (typeof option == 'string') data[option]()� 2185 })� 2186 }� 2187� 2188 var old = $.fn.tab� 2189� 2190 $.fn.tab = Plugin� 2191 $.fn.tab.Constructor = Tab� 2192� 2193� 2194 // TAB NO CONFLICT� 2195 // ===============� 2196� 2197 $.fn.tab.noConflict = function () {� 2198 $.fn.tab = old� 2199 return this� 2200 }� 2201� 2202� 2203 // TAB DATA-API� 2204 // ============� 2205� 2206 var clickHandler = function (e) {� 2207 e.preventDefault()� 2208 Plugin.call($(this), 'show')� 2209 }� 2210� 2211 $(document)� 2212 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)� 2213 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)� 2214� 2215}(jQuery);� 2216� 2217/* ========================================================================� 2218 * Bootstrap: affix.js v3.3.7� 2219 * http://getbootstrap.com/javascript/#affix� 2220 * ========================================================================� 2221 * Copyright 2011-2016 Twitter, Inc.� 2222 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)� 2223 * ======================================================================== */� 2224� 2225� 2226+function ($) {� 2227 'use strict';� 2228� 2229 // AFFIX CLASS DEFINITION� 2230 // ======================� 2231� 2232 var Affix = function (element, options) {� 2233 this.options = $.extend({}, Affix.DEFAULTS, options)� 2234� 2235 this.$target = $(this.options.target)� 2236 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))� 2237 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))� 2238� 2239 this.$element = $(element)� 2240 this.affixed = null� 2241 this.unpin = null� 2242 this.pinnedOffset = null� 2243� 2244 this.checkPosition()� 2245 }� 2246� 2247 Affix.VERSION = '3.3.7'� 2248� 2249 Affix.RESET = 'affix affix-top affix-bottom'� 2250� 2251 Affix.DEFAULTS = {� 2252 offset: 0,� 2253 target: window� 2254 }� 2255� 2256 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {� 2257 var scrollTop = this.$target.scrollTop()� 2258 var position = this.$element.offset()� 2259 var targetHeight = this.$target.height()� 2260� 2261 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false� 2262� 2263 if (this.affixed == 'bottom') {� 2264 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'� 2265 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'� 2266 }� 2267� 2268 var initializing = this.affixed == null� 2269 var colliderTop = initializing ? scrollTop : position.top� 2270 var colliderHeight = initializing ? targetHeight : height� 2271� 2272 if (offsetTop != null && scrollTop <= offsetTop) return 'top'� 2273 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'� 2274� 2275 return false� 2276 }� 2277� 2278 Affix.prototype.getPinnedOffset = function () {� 2279 if (this.pinnedOffset) return this.pinnedOffset� 2280 this.$element.removeClass(Affix.RESET).addClass('affix')� 2281 var scrollTop = this.$target.scrollTop()� 2282 var position = this.$element.offset()� 2283 return (this.pinnedOffset = position.top - scrollTop)� 2284 }� 2285� 2286 Affix.prototype.checkPositionWithEventLoop = function () {� 2287 setTimeout($.proxy(this.checkPosition, this), 1)� 2288 }� 2289� 2290 Affix.prototype.checkPosition = function () {� 2291 if (!this.$element.is(':visible')) return� 2292� 2293 var height = this.$element.height()� 2294 var offset = this.options.offset� 2295 var offsetTop = offset.top� 2296 var offsetBottom = offset.bottom� 2297 var scrollHeight = Math.max($(document).height(), $(document.body).height())� 2298� 2299 if (typeof offset != 'object') offsetBottom = offsetTop = offset� 2300 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)� 2301 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)� 2302�
vendor: 1,933 bytes, lines 2303-2378
2303 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)� 2304� 2305 if (this.affixed != affix) {� 2306 if (this.unpin != null) this.$element.css('top', '')� 2307� 2308 var affixType = 'affix' + (affix ? '-' + affix : '')� 2309 var e = $.Event(affixType + '.bs.affix')� 2310� 2311 this.$element.trigger(e)� 2312� 2313 if (e.isDefaultPrevented()) return� 2314� 2315 this.affixed = affix� 2316 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null� 2317� 2318 this.$element� 2319 .removeClass(Affix.RESET)� 2320 .addClass(affixType)� 2321 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')� 2322 }� 2323� 2324 if (affix == 'bottom') {� 2325 this.$element.offset({� 2326 top: scrollHeight - height - offsetBottom� 2327 })� 2328 }� 2329 }� 2330� 2331� 2332 // AFFIX PLUGIN DEFINITION� 2333 // =======================� 2334� 2335 function Plugin(option) {� 2336 return this.each(function () {� 2337 var $this = $(this)� 2338 var data = $this.data('bs.affix')� 2339 var options = typeof option == 'object' && option� 2340� 2341 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))� 2342 if (typeof option == 'string') data[option]()� 2343 })� 2344 }� 2345� 2346 var old = $.fn.affix� 2347� 2348 $.fn.affix = Plugin� 2349 $.fn.affix.Constructor = Affix� 2350� 2351� 2352 // AFFIX NO CONFLICT� 2353 // =================� 2354� 2355 $.fn.affix.noConflict = function () {� 2356 $.fn.affix = old� 2357 return this� 2358 }� 2359� 2360� 2361 // AFFIX DATA-API� 2362 // ==============� 2363� 2364 $(window).on('load', function () {� 2365 $('[data-spy="affix"]').each(function () {� 2366 var $spy = $(this)� 2367 var data = $spy.data()� 2368� 2369 data.offset = data.offset || {}� 2370� 2371 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom� 2372 if (data.offsetTop != null) data.offset.top = data.offsetTop� 2373� 2374 Plugin.call($spy, data)� 2375 })� 2376 })� 2377� 2378}(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.