PageSourceSearch

https://riverroadanimalhospital.com/wp-content/themes/lifelearnsalient/js/bootstrap-popover.js

js riverroadanimalhospital.com collected 2026-10-07 03:26:58 UTC 23,936 bytes, 689 lines download raw bytes

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.