vendor: 23,936 bytes, lines 1-689
1/* ======================================================================== 2 * Bootstrap: transition.js v3.3.7 3 * http://getbootstrap.com/javascript/#transitions 4 * ======================================================================== 5 * Copyright 2011-2016 Twitter, Inc. 6 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 * ======================================================================== */ 8 9 10+function ($) { 11 'use strict'; 12 13 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 14 // ============================================================ 15 16 function transitionEnd() { 17 var el = document.createElement('bootstrap') 18 19 var transEndEventNames = { 20 WebkitTransition : 'webkitTransitionEnd', 21 MozTransition : 'transitionend', 22 OTransition : 'oTransitionEnd otransitionend', 23 transition : 'transitionend' 24 } 25 26 for (var name in transEndEventNames) { 27 if (el.style[name] !== undefined) { 28 return { end: transEndEventNames[name] } 29 } 30 } 31 32 return false // explicit for ie8 ( ._.) 33 } 34 35 // http://blog.alexmaccaw.com/css-transitions 36 $.fn.emulateTransitionEnd = function (duration) { 37 var called = false 38 var $el = this 39 $(this).one('bsTransitionEnd', function () { called = true }) 40 var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 41 setTimeout(callback, duration) 42 return this 43 } 44 45 $(function () { 46 $.support.transition = transitionEnd() 47 48 if (!$.support.transition) return 49 50 $.event.special.bsTransitionEnd = { 51 bindType: $.support.transition.end, 52 delegateType: $.support.transition.end, 53 handle: function (e) { 54 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) 55 } 56 } 57 }) 58 59}(jQuery); 60 61/* ======================================================================== 62 * Bootstrap: tooltip.js v3.3.7 63 * http://getbootstrap.com/javascript/#tooltip 64 * Inspired by the original jQuery.tipsy by Jason Frame 65 * ======================================================================== 66 * Copyright 2011-2016 Twitter, Inc. 67 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 68 * ======================================================================== */ 69 70 71+function ($) { 72 'use strict'; 73 74 // TOOLTIP PUBLIC CLASS DEFINITION 75 // =============================== 76 77 var Tooltip = function (element, options) { 78 this.type = null 79 this.options = null 80 this.enabled = null 81 this.timeout = null 82 this.hoverState = null 83 this.$element = null 84 this.inState = null 85 86 this.init('tooltip', element, options) 87 } 88 89 Tooltip.VERSION = '3.3.7' 90 91 Tooltip.TRANSITION_DURATION = 150 92 93 Tooltip.DEFAULTS = { 94 animation: true, 95 placement: 'top', 96 selector: false, 97 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', 98 trigger: 'hover focus', 99 title: '', 100 delay: 0, 101 html: false, 102 container: false, 103 viewport: { 104 selector: 'body', 105 padding: 0 106 } 107 } 108 109 Tooltip.prototype.init = function (type, element, options) { 110 this.enabled = true 111 this.type = type 112 this.$element = $(element) 113 this.options = this.getOptions(options) 114 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) 115 this.inState = { click: false, hover: false, focus: false } 116 117 if (this.$element[0] instanceof document.constructor && !this.options.selector) { 118 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') 119 } 120 121 var triggers = this.options.trigger.split(' ') 122 123 for (var i = triggers.length; i--;) { 124 var trigger = triggers[i] 125 126 if (trigger == 'click') { 127 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) 128 } else if (trigger != 'manual') { 129 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' 130 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' 131 132 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) 133 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) 134 } 135 } 136 137 this.options.selector ? 138 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : 139 this.fixTitle() 140 } 141 142 Tooltip.prototype.getDefaults = function () { 143 return Tooltip.DEFAULTS 144 } 145 146 Tooltip.prototype.getOptions = function (options) { 147 options = $.extend({}, this.getDefaults(), this.$element.data(), options) 148 149 if (options.delay && typeof options.delay == 'number') { 150 options.delay = { 151 show: options.delay, 152 hide: options.delay 153 } 154 } 155 156 return options 157 } 158 159 Tooltip.prototype.getDelegateOptions = function () { 160 var options = {} 161 var defaults = this.getDefaults() 162 163 this._options && $.each(this._options, function (key, value) { 164 if (defaults[key] != value) options[key] = value 165 }) 166 167 return options 168 } 169 170 Tooltip.prototype.enter = function (obj) { 171 var self = obj instanceof this.constructor ? 172 obj : $(obj.currentTarget).data('bs.' + this.type) 173 174 if (!self) { 175 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 176 $(obj.currentTarget).data('bs.' + this.type, self) 177 } 178 179 if (obj instanceof $.Event) { 180 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true 181 } 182 183 if (self.tip().hasClass('in') || self.hoverState == 'in') { 184 self.hoverState = 'in' 185 return 186 } 187 188 clearTimeout(self.timeout) 189 190 self.hoverState = 'in' 191 192 if (!self.options.delay || !self.options.delay.show) return self.show() 193 194 self.timeout = setTimeout(function () { 195 if (self.hoverState == 'in') self.show() 196 }, self.options.delay.show) 197 } 198 199 Tooltip.prototype.isInStateTrue = function () { 200 for (var key in this.inState) { 201 if (this.inState[key]) return true 202 } 203 204 return false 205 } 206 207 Tooltip.prototype.leave = function (obj) { 208 var self = obj instanceof this.constructor ? 209 obj : $(obj.currentTarget).data('bs.' + this.type) 210 211 if (!self) { 212 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 213 $(obj.currentTarget).data('bs.' + this.type, self) 214 } 215 216 if (obj instanceof $.Event) { 217 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false 218 } 219 220 if (self.isInStateTrue()) return 221 222 clearTimeout(self.timeout) 223 224 self.hoverState = 'out' 225 226 if (!self.options.delay || !self.options.delay.hide) return self.hide() 227 228 self.timeout = setTimeout(function () { 229 if (self.hoverState == 'out') self.hide() 230 }, self.options.delay.hide) 231 } 232 233 Tooltip.prototype.show = function () { 234 var e = $.Event('show.bs.' + this.type) 235 236 if (this.hasContent() && this.enabled) { 237 this.$element.trigger(e) 238 239 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) 240 if (e.isDefaultPrevented() || !inDom) return 241 var that = this 242 243 var $tip = this.tip() 244 245 var tipId = this.getUID(this.type) 246 247 this.setContent() 248 $tip.attr('id', tipId) 249 this.$element.attr('aria-describedby', tipId) 250 251 if (this.options.animation) $tip.addClass('fade') 252 253 var placement = typeof this.options.placement == 'function' ? 254 this.options.placement.call(this, $tip[0], this.$element[0]) : 255 this.options.placement 256 257 var autoToken = /\s?auto?\s?/i 258 var autoPlace = autoToken.test(placement) 259 if (autoPlace) placement = placement.replace(autoToken, '') || 'top' 260 261 $tip 262 .detach() 263 .css({ top: 0, left: 0, display: 'block' }) 264 .addClass(placement) 265 .data('bs.' + this.type, this) 266 267 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) 268 this.$element.trigger('inserted.bs.' + this.type) 269 270 var pos = this.getPosition() 271 var actualWidth = $tip[0].offsetWidth 272 var actualHeight = $tip[0].offsetHeight 273 274 if (autoPlace) { 275 var orgPlacement = placement 276 var viewportDim = this.getPosition(this.$viewport) 277 278 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : 279 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : 280 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : 281 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : 282 placement 283 284 $tip 285 .removeClass(orgPlacement) 286 .addClass(placement) 287 } 288 289 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) 290 291 this.applyPlacement(calculatedOffset, placement) 292 293 var complete = function () { 294 var prevHoverState = that.hoverState 295 that.$element.trigger('shown.bs.' + that.type) 296 that.hoverState = null 297 298 if (prevHoverState == 'out') that.leave(that) 299 } 300 301 $.support.transition && this.$tip.hasClass('fade') ? 302 $tip 303 .one('bsTransitionEnd', complete) 304 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 305 complete() 306 } 307 } 308 309 Tooltip.prototype.applyPlacement = function (offset, placement) { 310 var $tip = this.tip() 311 var width = $tip[0].offsetWidth 312 var height = $tip[0].offsetHeight 313 314 // manually read margins because getBoundingClientRect includes difference 315 var marginTop = parseInt($tip.css('margin-top'), 10) 316 var marginLeft = parseInt($tip.css('margin-left'), 10) 317 318 // we must check for NaN for ie 8/9 319 if (isNaN(marginTop)) marginTop = 0 320 if (isNaN(marginLeft)) marginLeft = 0 321 322 offset.top += marginTop 323 offset.left += marginLeft 324 325 // $.fn.offset doesn't round pixel values 326 // so we use setOffset directly with our own function B-0 327 $.offset.setOffset($tip[0], $.extend({ 328 using: function (props) { 329 $tip.css({ 330 top: Math.round(props.top), 331 left: Math.round(props.left) 332 }) 333 } 334 }, offset), 0) 335 336 $tip.addClass('in') 337 338 // check to see if placing tip in new offset caused the tip to resize itself 339 var actualWidth = $tip[0].offsetWidth 340 var actualHeight = $tip[0].offsetHeight 341 342 if (placement == 'top' && actualHeight != height) { 343 offset.top = offset.top + height - actualHeight 344 } 345 346 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) 347 348 if (delta.left) offset.left += delta.left 349 else offset.top += delta.top 350 351 var isVertical = /top|bottom/.test(placement) 352 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight 353 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' 354 355 $tip.offset(offset) 356 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) 357 } 358 359 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { 360 this.arrow() 361 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') 362 .css(isVertical ? 'top' : 'left', '') 363 } 364 365 Tooltip.prototype.setContent = function () { 366 var $tip = this.tip() 367 var title = this.getTitle() 368 369 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) 370 $tip.removeClass('fade in top bottom left right') 371 } 372 373 Tooltip.prototype.hide = function (callback) { 374 var that = this 375 var $tip = $(this.$tip) 376 var e = $.Event('hide.bs.' + this.type) 377 378 function complete() { 379 if (that.hoverState != 'in') $tip.detach() 380 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. 381 that.$element 382 .removeAttr('aria-describedby') 383 .trigger('hidden.bs.' + that.type) 384 } 385 callback && callback() 386 } 387 388 this.$element.trigger(e) 389 390 if (e.isDefaultPrevented()) return 391 392 $tip.removeClass('in') 393 394 $.support.transition && $tip.hasClass('fade') ? 395 $tip 396 .one('bsTransitionEnd', complete) 397 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 398 complete() 399 400 this.hoverState = null 401 402 return this 403 } 404 405 Tooltip.prototype.fixTitle = function () { 406 var $e = this.$element 407 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { 408 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') 409 } 410 } 411 412 Tooltip.prototype.hasContent = function () { 413 return this.getTitle() 414 } 415 416 Tooltip.prototype.getPosition = function ($element) { 417 $element = $element || this.$element 418 419 var el = $element[0] 420 var isBody = el.tagName == 'BODY' 421 422 var elRect = el.getBoundingClientRect() 423 if (elRect.width == null) { 424 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 425 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) 426 } 427 var isSvg = window.SVGElement && el instanceof window.SVGElement 428 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. 429 // See https://github.com/twbs/bootstrap/issues/20280 430 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) 431 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } 432 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null 433 434 return $.extend({}, elRect, scroll, outerDims, elOffset) 435 } 436 437 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { 438 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : 439 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : 440 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : 441 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } 442 443 } 444 445 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { 446 var delta = { top: 0, left: 0 } 447 if (!this.$viewport) return delta 448 449 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 450 var viewportDimensions = this.getPosition(this.$viewport) 451 452 if (/right|left/.test(placement)) { 453 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll 454 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight 455 if (topEdgeOffset < viewportDimensions.top) { // top overflow 456 delta.top = viewportDimensions.top - topEdgeOffset 457 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow 458 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset 459 } 460 } else { 461 var leftEdgeOffset = pos.left - viewportPadding 462 var rightEdgeOffset = pos.left + viewportPadding + actualWidth 463 if (leftEdgeOffset < viewportDimensions.left) { // left overflow 464 delta.left = viewportDimensions.left - leftEdgeOffset 465 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow 466 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset 467 } 468 } 469 470 return delta 471 } 472 473 Tooltip.prototype.getTitle = function () { 474 var title 475 var $e = this.$element 476 var o = this.options 477 478 title = $e.attr('data-original-title') 479 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) 480 481 return title 482 } 483 484 Tooltip.prototype.getUID = function (prefix) { 485 do prefix += ~~(Math.random() * 1000000) 486 while (document.getElementById(prefix)) 487 return prefix 488 } 489 490 Tooltip.prototype.tip = function () { 491 if (!this.$tip) { 492 this.$tip = $(this.options.template) 493 if (this.$tip.length != 1) { 494 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') 495 } 496 } 497 return this.$tip 498 } 499 500 Tooltip.prototype.arrow = function () { 501 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) 502 } 503 504 Tooltip.prototype.enable = function () { 505 this.enabled = true 506 } 507 508 Tooltip.prototype.disable = function () { 509 this.enabled = false 510 } 511 512 Tooltip.prototype.toggleEnabled = function () { 513 this.enabled = !this.enabled 514 } 515 516 Tooltip.prototype.toggle = function (e) { 517 var self = this 518 if (e) { 519 self = $(e.currentTarget).data('bs.' + this.type) 520 if (!self) { 521 self = new this.constructor(e.currentTarget, this.getDelegateOptions()) 522 $(e.currentTarget).data('bs.' + this.type, self) 523 } 524 } 525 526 if (e) { 527 self.inState.click = !self.inState.click 528 if (self.isInStateTrue()) self.enter(self) 529 else self.leave(self) 530 } else { 531 self.tip().hasClass('in') ? self.leave(self) : self.enter(self) 532 } 533 } 534 535 Tooltip.prototype.destroy = function () { 536 var that = this 537 clearTimeout(this.timeout) 538 this.hide(function () { 539 that.$element.off('.' + that.type).removeData('bs.' + that.type) 540 if (that.$tip) { 541 that.$tip.detach() 542 } 543 that.$tip = null 544 that.$arrow = null 545 that.$viewport = null 546 that.$element = null 547 }) 548 } 549 550 551 // TOOLTIP PLUGIN DEFINITION 552 // ========================= 553 554 function Plugin(option) { 555 return this.each(function () { 556 var $this = $(this) 557 var data = $this.data('bs.tooltip') 558 var options = typeof option == 'object' && option 559 560 if (!data && /destroy|hide/.test(option)) return 561 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) 562 if (typeof option == 'string') data[option]() 563 }) 564 } 565 566 var old = $.fn.tooltip 567 568 $.fn.tooltip = Plugin 569 $.fn.tooltip.Constructor = Tooltip 570 571 572 // TOOLTIP NO CONFLICT 573 // =================== 574 575 $.fn.tooltip.noConflict = function () { 576 $.fn.tooltip = old 577 return this 578 } 579 580}(jQuery); 581 582/* ======================================================================== 583 * Bootstrap: popover.js v3.3.7 584 * http://getbootstrap.com/javascript/#popovers 585 * ======================================================================== 586 * Copyright 2011-2016 Twitter, Inc. 587 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 588 * ======================================================================== */ 589 590 591+function ($) { 592 'use strict'; 593 594 // POPOVER PUBLIC CLASS DEFINITION 595 // =============================== 596 597 var Popover = function (element, options) { 598 this.init('popover', element, options) 599 } 600 601 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') 602 603 Popover.VERSION = '3.3.7' 604 605 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { 606 placement: 'right', 607 trigger: 'click', 608 content: '', 609 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' 610 }) 611 612 613 // NOTE: POPOVER EXTENDS tooltip.js 614 // ================================ 615 616 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) 617 618 Popover.prototype.constructor = Popover 619 620 Popover.prototype.getDefaults = function () { 621 return Popover.DEFAULTS 622 } 623 624 Popover.prototype.setContent = function () { 625 var $tip = this.tip() 626 var title = this.getTitle() 627 var content = this.getContent() 628 629 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) 630 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events 631 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' 632 ](content) 633 634 $tip.removeClass('fade top bottom left right in') 635 636 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do 637 // this manually by checking the contents. 638 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() 639 } 640 641 Popover.prototype.hasContent = function () { 642 return this.getTitle() || this.getContent() 643 } 644 645 Popover.prototype.getContent = function () { 646 var $e = this.$element 647 var o = this.options 648 649 return $e.attr('data-content') 650 || (typeof o.content == 'function' ? 651 o.content.call($e[0]) : 652 o.content) 653 } 654 655 Popover.prototype.arrow = function () { 656 return (this.$arrow = this.$arrow || this.tip().find('.arrow')) 657 } 658 659 660 // POPOVER PLUGIN DEFINITION 661 // ========================= 662 663 function Plugin(option) { 664 return this.each(function () { 665 var $this = $(this) 666 var data = $this.data('bs.popover') 667 var options = typeof option == 'object' && option 668 669 if (!data && /destroy|hide/.test(option)) return 670 if (!data) $this.data('bs.popover', (data = new Popover(this, options))) 671 if (typeof option == 'string') data[option]() 672 }) 673 } 674 675 var old = $.fn.popover 676 677 $.fn.popover = Plugin 678 $.fn.popover.Constructor = Popover 679 680 681 // POPOVER NO CONFLICT 682 // =================== 683 684 $.fn.popover.noConflict = function () { 685 $.fn.popover = old 686 return this 687 } 688 689}(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.