PageSourceSearch

https://www.catherineedwards.life/wp-content/themes/unero/js/plugins/jquery-tooltip.js?ver=2.1.1

js catherineedwards.life collected 2026-10-02 06:35:17 UTC 8,337 bytes, 276 lines download raw bytes

1/* ===========================================================
2 * bootstrap-tooltip.js v2.1.1
3 * http://twitter.github.com/bootstrap/javascript.html#tooltips
4 * Inspired by the original jQuery.tipsy by Jason Frame
5 * ===========================================================
6 * Copyright 2012 Twitter, Inc.
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ========================================================== */
20
21
22!function (jQuery) {
23
24  "use strict"; // jshint ;_;
25
26
27 /* TOOLTIP PUBLIC CLASS DEFINITION
28  * =============================== */
29
30  var Tooltip = function (element, options) {
31    this.init('tooltip', element, options)
32  }
33
34  Tooltip.prototype = {
35
36    constructor: Tooltip
37
38  , init: function (type, element, options) {
39      var eventIn
40        , eventOut
41
42      this.type = type
43      this.jQueryelement = jQuery(element)
44      this.options = this.getOptions(options)
45      this.enabled = true
46
47      if (this.options.trigger == 'click') {
48        this.jQueryelement.on('click.' + this.type, this.options.selector, jQuery.proxy(this.toggle, this))
49      } else if (this.options.trigger != 'manual') {
50        eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
51        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
52        this.jQueryelement.on(eventIn + '.' + this.type, this.options.selector, jQuery.proxy(this.enter, this))
53        this.jQueryelement.on(eventOut + '.' + this.type, this.options.selector, jQuery.proxy(this.leave, this))
54      }
55
56      this.options.selector ?
57        (this._options = jQuery.extend({}, this.options, { trigger: 'manual', selector: '' })) :
58        this.fixTitle()
59    }
60
61  , getOptions: function (options) {
62      options = jQuery.extend({}, jQuery.fn[this.type].defaults, options, this.jQueryelement.data())
63
64      if (options.delay && typeof options.delay == 'number') {
65        options.delay = {
66          show: options.delay
67        , hide: options.delay
68        }
69      }
70
71      return options
72    }
73
74  , enter: function (e) {
75      var self = jQuery(e.currentTarget)[this.type](this._options).data(this.type)
76
77      if (!self.options.delay || !self.options.delay.show) return self.show()
78
79      clearTimeout(this.timeout)
80      self.hoverState = 'in'
81      this.timeout = setTimeout(function() {
82        if (self.hoverState == 'in') self.show()
83      }, self.options.delay.show)
84    }
85
86  , leave: function (e) {
87      var self = jQuery(e.currentTarget)[this.type](this._options).data(this.type)
88
89      if (this.timeout) clearTimeout(this.timeout)
90      if (!self.options.delay || !self.options.delay.hide) return self.hide()
91
92      self.hoverState = 'out'
93      this.timeout = setTimeout(function() {
94        if (self.hoverState == 'out') self.hide()
95      }, self.options.delay.hide)
96    }
97
98  , show: function () {
99      var jQuerytip
100        , inside
101        , pos
102        , actualWidth
103        , actualHeight
104        , placement
105        , tp
106
107      if (this.hasContent() && this.enabled) {
108        jQuerytip = this.tip()
109        this.setContent()
110
111        if (this.options.animation) {
112          jQuerytip.addClass('fade')
113        }
114
115        placement = typeof this.options.placement == 'function' ?
116          this.options.placement.call(this, jQuerytip[0], this.jQueryelement[0]) :
117          this.options.placement
118
119        inside = /in/.test(placement)
120
121        jQuerytip
122          .remove()
123          .css({ top: 0, left: 0, display: 'block' })
124          .appendTo(inside ? this.jQueryelement : document.body)
125
126        pos = this.getPosition(inside)
127
128        actualWidth = jQuerytip[0].offsetWidth
129        actualHeight = jQuerytip[0].offsetHeight
130
131        switch (inside ? placement.split(' ')[1] : placement) {
132          case 'bottom':
133            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
134            break
135          case 'top':
136            tp = {top: pos.top - actualHeight + this.options.offsetTop, left: pos.left + pos.width / 2 - actualWidth / 2}
137            break
138          case 'left':
139            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
140            break
141          case 'right':
142            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
143            break
144        }
145
146        jQuerytip
147          .css(tp)
148          .addClass(placement)
149          .addClass('in')
150      }
151    }
152
153  , setContent: function () {
154      var jQuerytip = this.tip()
155        , title = this.getTitle()
156
157      jQuerytip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
158      jQuerytip.removeClass('fade in top bottom left right')
159    }
160
161  , hide: function () {
162      var that = this
163        , jQuerytip = this.tip()
164
165      jQuerytip.removeClass('in')
166
167      function removeWithAnimation() {
168        var timeout = setTimeout(function () {
169          jQuerytip.off(jQuery.support.transition.end).remove()
170        }, 500)
171
172        jQuerytip.one(jQuery.support.transition.end, function () {
173          clearTimeout(timeout)
174          jQuerytip.remove()
175        })
176      }
177
178      jQuery.support.transition && this.jQuerytip.hasClass('fade') ?
179        removeWithAnimation() :
180        jQuerytip.remove()
181
182      return this
183    }
184
185  , fixTitle: function () {
186      var jQuerye = this.jQueryelement
187      if (jQuerye.attr('title') || typeof(jQuerye.attr('data-original-title')) != 'string') {
188        jQuerye.attr('data-original-title', jQuerye.attr('title') || '').removeAttr('title')
189      }
190    }
191
192  , hasContent: function () {
193      return this.getTitle()
194    }
195
196  , getPosition: function (inside) {
197      return jQuery.extend({}, (inside ? {top: 0, left: 0} : this.jQueryelement.offset()), {
198        width: this.jQueryelement[0].offsetWidth
199      , height: this.jQueryelement[0].offsetHeight
200      })
201    }
202
203  , getTitle: function () {
204      var title
205        , jQuerye = this.jQueryelement
206        , o = this.options
207
208      title = jQuerye.attr('data-original-title')
209        || (typeof o.title == 'function' ? o.title.call(jQuerye[0]) :  o.title)
210
211      return title
212    }
213
214  , tip: function () {
215      return this.jQuerytip = this.jQuerytip || jQuery(this.options.template)
216    }
217
218  , validate: function () {
219      if (!this.jQueryelement[0].parentNode) {
220        this.hide()
221        this.jQueryelement = null
222        this.options = null
223      }
224    }
225
226  , enable: function () {
227      this.enabled = true
228    }
229
230  , disable: function () {
231      this.enabled = false
232    }
233
234  , toggleEnabled: function () {
235      this.enabled = !this.enabled
236    }
237
238  , toggle: function () {
239      this[this.tip().hasClass('in') ? 'hide' : 'show']()
240    }
241
242  , destroy: function () {
243      this.hide().jQueryelement.off('.' + this.type).removeData(this.type)
244    }
245
246  }
247
248
249 /* TOOLTIP PLUGIN DEFINITION
250  * ========================= */
251
252  jQuery.fn.tooltip = function ( option ) {
253    return this.each(function () {
254      var jQuerythis = jQuery(this)
255        , data = jQuerythis.data('tooltip')
256        , options = typeof option == 'object' && option
257      if (!data) jQuerythis.data('tooltip', (data = new Tooltip(this, options)))
258      if (typeof option == 'string') data[option]()
259    })
260  }
261
262  jQuery.fn.tooltip.Constructor = Tooltip
263
264  jQuery.fn.tooltip.defaults = {
265    animation: true
266  , placement: 'top'
267  , selector: false
268  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
269  , trigger: 'hover'
270  , title: ''
271  , delay: 0
272  , html: true
273  , offsetTop: 0
274  }
275
276}(window.jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.