active_frontend 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +97 -0
  6. data/Rakefile +1 -0
  7. data/active_frontend.gemspec +23 -0
  8. data/app/assets/fonts/gotham/gotham-bold.eot +0 -0
  9. data/app/assets/fonts/gotham/gotham-bold.svg +2066 -0
  10. data/app/assets/fonts/gotham/gotham-bold.ttf +0 -0
  11. data/app/assets/fonts/gotham/gotham-bold.woff +0 -0
  12. data/app/assets/fonts/gotham/gotham-book.eot +0 -0
  13. data/app/assets/fonts/gotham/gotham-book.svg +631 -0
  14. data/app/assets/fonts/gotham/gotham-book.ttf +0 -0
  15. data/app/assets/fonts/gotham/gotham-book.woff +0 -0
  16. data/app/assets/fonts/gotham/gotham-light.eot +0 -0
  17. data/app/assets/fonts/gotham/gotham-light.svg +635 -0
  18. data/app/assets/fonts/gotham/gotham-light.ttf +0 -0
  19. data/app/assets/fonts/gotham/gotham-light.woff +0 -0
  20. data/app/assets/fonts/gotham/gotham-medium.eot +0 -0
  21. data/app/assets/fonts/gotham/gotham-medium.svg +629 -0
  22. data/app/assets/fonts/gotham/gotham-medium.ttf +0 -0
  23. data/app/assets/fonts/gotham/gotham-medium.woff +0 -0
  24. data/app/assets/fonts/ionicons/ionicons.eot +0 -0
  25. data/app/assets/fonts/ionicons/ionicons.svg +2232 -0
  26. data/app/assets/fonts/ionicons/ionicons.ttf +0 -0
  27. data/app/assets/fonts/ionicons/ionicons.woff +0 -0
  28. data/lib/active_frontend.rb +6 -0
  29. data/lib/active_frontend/version.rb +3 -0
  30. data/vendor/assets/javascripts/.keep +0 -0
  31. data/vendor/assets/javascripts/affix.js +153 -0
  32. data/vendor/assets/javascripts/alert.js +85 -0
  33. data/vendor/assets/javascripts/animation.js +45 -0
  34. data/vendor/assets/javascripts/button.js +107 -0
  35. data/vendor/assets/javascripts/carousel.js +228 -0
  36. data/vendor/assets/javascripts/chart.js +3309 -0
  37. data/vendor/assets/javascripts/collapse.js +202 -0
  38. data/vendor/assets/javascripts/date_picker.js +1649 -0
  39. data/vendor/assets/javascripts/dropdown.js +152 -0
  40. data/vendor/assets/javascripts/file_input.js +71 -0
  41. data/vendor/assets/javascripts/hoverdown.js +109 -0
  42. data/vendor/assets/javascripts/map.js +2174 -0
  43. data/vendor/assets/javascripts/modal.js +234 -0
  44. data/vendor/assets/javascripts/popover.js +99 -0
  45. data/vendor/assets/javascripts/scrollspy.js +163 -0
  46. data/vendor/assets/javascripts/sort.js +1432 -0
  47. data/vendor/assets/javascripts/swoggle.js +415 -0
  48. data/vendor/assets/javascripts/tab.js +144 -0
  49. data/vendor/assets/javascripts/tablespy.js +1883 -0
  50. data/vendor/assets/javascripts/time_ago.js +206 -0
  51. data/vendor/assets/javascripts/time_picker.js +1087 -0
  52. data/vendor/assets/javascripts/tooltip.js +466 -0
  53. data/vendor/assets/javascripts/transition.js +50 -0
  54. data/vendor/assets/javascripts/typeahead.js +368 -0
  55. data/vendor/assets/stylesheets/.keep +0 -0
  56. data/vendor/assets/stylesheets/ad.scss +72 -0
  57. data/vendor/assets/stylesheets/affix.scss +11 -0
  58. data/vendor/assets/stylesheets/alert.scss +57 -0
  59. data/vendor/assets/stylesheets/animation.scss +2388 -0
  60. data/vendor/assets/stylesheets/aside.scss +136 -0
  61. data/vendor/assets/stylesheets/breadcrumb.scss +23 -0
  62. data/vendor/assets/stylesheets/button.scss +581 -0
  63. data/vendor/assets/stylesheets/carousel.scss +152 -0
  64. data/vendor/assets/stylesheets/chart.scss +11 -0
  65. data/vendor/assets/stylesheets/code.scss +139 -0
  66. data/vendor/assets/stylesheets/collapse.scss +15 -0
  67. data/vendor/assets/stylesheets/datepicker.scss +136 -0
  68. data/vendor/assets/stylesheets/dropdown.scss +90 -0
  69. data/vendor/assets/stylesheets/footer.scss +68 -0
  70. data/vendor/assets/stylesheets/form.scss +346 -0
  71. data/vendor/assets/stylesheets/grid.scss +287 -0
  72. data/vendor/assets/stylesheets/header.scss +205 -0
  73. data/vendor/assets/stylesheets/icon.scss +1538 -0
  74. data/vendor/assets/stylesheets/image.scss +330 -0
  75. data/vendor/assets/stylesheets/label_and_badge.scss +110 -0
  76. data/vendor/assets/stylesheets/link.scss +25 -0
  77. data/vendor/assets/stylesheets/list.scss +60 -0
  78. data/vendor/assets/stylesheets/map.scss +13 -0
  79. data/vendor/assets/stylesheets/modal.scss +137 -0
  80. data/vendor/assets/stylesheets/nav_and_tab.scss +183 -0
  81. data/vendor/assets/stylesheets/pagination.scss +41 -0
  82. data/vendor/assets/stylesheets/panel.scss +62 -0
  83. data/vendor/assets/stylesheets/placeholder.scss +44 -0
  84. data/vendor/assets/stylesheets/popover.scss +117 -0
  85. data/vendor/assets/stylesheets/progress.scss +43 -0
  86. data/vendor/assets/stylesheets/reset.scss +88 -0
  87. data/vendor/assets/stylesheets/spinner.scss +767 -0
  88. data/vendor/assets/stylesheets/swoggle.scss +126 -0
  89. data/vendor/assets/stylesheets/table.scss +149 -0
  90. data/vendor/assets/stylesheets/timepicker.scss +75 -0
  91. data/vendor/assets/stylesheets/tooltip.scss +90 -0
  92. data/vendor/assets/stylesheets/transition.scss +12 -0
  93. data/vendor/assets/stylesheets/trunk.scss +116 -0
  94. data/vendor/assets/stylesheets/typeahead.scss +8 -0
  95. data/vendor/assets/stylesheets/typography.scss +191 -0
  96. metadata +167 -0
@@ -0,0 +1,466 @@
1
+ +function ($) {
2
+ 'use strict';
3
+
4
+ // TOOLTIP PUBLIC CLASS DEFINITION
5
+ // ===============================
6
+
7
+ var Tooltip = function (element, options) {
8
+ this.type = null
9
+ this.options = null
10
+ this.enabled = null
11
+ this.timeout = null
12
+ this.hoverState = null
13
+ this.$element = null
14
+
15
+ this.init('tooltip', element, options)
16
+ }
17
+
18
+ Tooltip.VERSION = '3.3.2'
19
+
20
+ Tooltip.TRANSITION_DURATION = 150
21
+
22
+ Tooltip.DEFAULTS = {
23
+ animation: true,
24
+ placement: 'top',
25
+ selector: false,
26
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
27
+ trigger: 'hover focus',
28
+ title: '',
29
+ delay: 0,
30
+ html: false,
31
+ container: false,
32
+ viewport: {
33
+ selector: 'body',
34
+ padding: 0
35
+ }
36
+ }
37
+
38
+ Tooltip.prototype.init = function (type, element, options) {
39
+ this.enabled = true
40
+ this.type = type
41
+ this.$element = $(element)
42
+ this.options = this.getOptions(options)
43
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
44
+
45
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
46
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!');
47
+ }
48
+
49
+ var triggers = this.options.trigger.split(' ')
50
+
51
+ for (var i = triggers.length; i--;) {
52
+ var trigger = triggers[i]
53
+
54
+ if (trigger == 'click') {
55
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
56
+ } else if (trigger != 'manual') {
57
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
58
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
59
+
60
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
61
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
62
+ }
63
+ }
64
+
65
+ this.options.selector ?
66
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
67
+ this.fixTitle()
68
+ }
69
+
70
+ Tooltip.prototype.getDefaults = function () {
71
+ return Tooltip.DEFAULTS
72
+ }
73
+
74
+ Tooltip.prototype.getOptions = function (options) {
75
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
76
+
77
+ if (options.delay && typeof options.delay == 'number') {
78
+ options.delay = {
79
+ show: options.delay,
80
+ hide: options.delay
81
+ }
82
+ }
83
+
84
+ return options
85
+ }
86
+
87
+ Tooltip.prototype.getDelegateOptions = function () {
88
+ var options = {}
89
+ var defaults = this.getDefaults()
90
+
91
+ this._options && $.each(this._options, function (key, value) {
92
+ if (defaults[key] != value) options[key] = value
93
+ })
94
+
95
+ return options
96
+ }
97
+
98
+ Tooltip.prototype.enter = function (obj) {
99
+ var self = obj instanceof this.constructor ?
100
+ obj : $(obj.currentTarget).data('bs.' + this.type)
101
+
102
+ if (self && self.$tip && self.$tip.is(':visible')) {
103
+ self.hoverState = 'in'
104
+ return
105
+ }
106
+
107
+ if (!self) {
108
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
109
+ $(obj.currentTarget).data('bs.' + this.type, self)
110
+ }
111
+
112
+ clearTimeout(self.timeout)
113
+
114
+ self.hoverState = 'in'
115
+
116
+ if (!self.options.delay || !self.options.delay.show) return self.show()
117
+
118
+ self.timeout = setTimeout(function () {
119
+ if (self.hoverState == 'in') self.show()
120
+ }, self.options.delay.show)
121
+ }
122
+
123
+ Tooltip.prototype.leave = function (obj) {
124
+ var self = obj instanceof this.constructor ?
125
+ obj : $(obj.currentTarget).data('bs.' + this.type)
126
+
127
+ if (!self) {
128
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
129
+ $(obj.currentTarget).data('bs.' + this.type, self)
130
+ }
131
+
132
+ clearTimeout(self.timeout)
133
+
134
+ self.hoverState = 'out'
135
+
136
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
137
+
138
+ self.timeout = setTimeout(function () {
139
+ if (self.hoverState == 'out') self.hide()
140
+ }, self.options.delay.hide)
141
+ }
142
+
143
+ Tooltip.prototype.show = function () {
144
+ var e = $.Event('show.bs.' + this.type)
145
+
146
+ if (this.hasContent() && this.enabled) {
147
+ this.$element.trigger(e)
148
+
149
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
150
+ if (e.isDefaultPrevented() || !inDom) return
151
+ var that = this
152
+
153
+ var $tip = this.tip()
154
+
155
+ var tipId = this.getUID(this.type)
156
+
157
+ this.setContent()
158
+ $tip.attr('id', tipId)
159
+ this.$element.attr('aria-describedby', tipId)
160
+
161
+ if (this.options.animation) $tip.addClass('fade')
162
+
163
+ var placement = typeof this.options.placement == 'function' ?
164
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
165
+ this.options.placement
166
+
167
+ var autoToken = /\s?auto?\s?/i
168
+ var autoPlace = autoToken.test(placement)
169
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
170
+
171
+ $tip
172
+ .detach()
173
+ .css({ top: 0, left: 0, display: 'block' })
174
+ .addClass(placement)
175
+ .data('bs.' + this.type, this)
176
+
177
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
178
+
179
+ var pos = this.getPosition()
180
+ var actualWidth = $tip[0].offsetWidth
181
+ var actualHeight = $tip[0].offsetHeight
182
+
183
+ if (autoPlace) {
184
+ var orgPlacement = placement
185
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
186
+ var containerDim = this.getPosition($container)
187
+
188
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
189
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
190
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
191
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
192
+ placement
193
+
194
+ $tip
195
+ .removeClass(orgPlacement)
196
+ .addClass(placement)
197
+ }
198
+
199
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
200
+
201
+ this.applyPlacement(calculatedOffset, placement)
202
+
203
+ var complete = function () {
204
+ var prevHoverState = that.hoverState
205
+ that.$element.trigger('shown.bs.' + that.type)
206
+ that.hoverState = null
207
+
208
+ if (prevHoverState == 'out') that.leave(that)
209
+ }
210
+
211
+ $.support.transition && this.$tip.hasClass('fade') ?
212
+ $tip
213
+ .one('bsTransitionEnd', complete)
214
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
215
+ complete()
216
+ }
217
+ }
218
+
219
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
220
+ var $tip = this.tip()
221
+ var width = $tip[0].offsetWidth
222
+ var height = $tip[0].offsetHeight
223
+
224
+ // manually read margins because getBoundingClientRect includes difference
225
+ var marginTop = parseInt($tip.css('margin-top'), 10)
226
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
227
+
228
+ // we must check for NaN for ie 8/9
229
+ if (isNaN(marginTop)) marginTop = 0
230
+ if (isNaN(marginLeft)) marginLeft = 0
231
+
232
+ offset.top = offset.top + marginTop
233
+ offset.left = offset.left + marginLeft
234
+
235
+ // $.fn.offset doesn't round pixel values
236
+ // so we use setOffset directly with our own function B-0
237
+ $.offset.setOffset($tip[0], $.extend({
238
+ using: function (props) {
239
+ $tip.css({
240
+ top: Math.round(props.top),
241
+ left: Math.round(props.left)
242
+ })
243
+ }
244
+ }, offset), 0)
245
+
246
+ $tip.addClass('in')
247
+
248
+ // check to see if placing tip in new offset caused the tip to resize itself
249
+ var actualWidth = $tip[0].offsetWidth
250
+ var actualHeight = $tip[0].offsetHeight
251
+
252
+ if (placement == 'top' && actualHeight != height) {
253
+ offset.top = offset.top + height - actualHeight
254
+ }
255
+
256
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
257
+
258
+ if (delta.left) offset.left += delta.left
259
+ else offset.top += delta.top
260
+
261
+ var isVertical = /top|bottom/.test(placement)
262
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
263
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
264
+
265
+ $tip.offset(offset)
266
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
267
+ }
268
+
269
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
270
+ this.arrow()
271
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
272
+ .css(isVertical ? 'top' : 'left', '')
273
+ }
274
+
275
+ Tooltip.prototype.setContent = function () {
276
+ var $tip = this.tip()
277
+ var title = this.getTitle()
278
+
279
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
280
+ $tip.removeClass('fade in top bottom left right')
281
+ }
282
+
283
+ Tooltip.prototype.hide = function (callback) {
284
+ var that = this
285
+ var $tip = $(this.$tip)
286
+ var e = $.Event('hide.bs.' + this.type)
287
+
288
+ function complete() {
289
+ if (that.hoverState != 'in') $tip.detach()
290
+ that.$element
291
+ .removeAttr('aria-describedby')
292
+ .trigger('hidden.bs.' + that.type)
293
+ callback && callback()
294
+ }
295
+
296
+ this.$element.trigger(e)
297
+
298
+ if (e.isDefaultPrevented()) return
299
+
300
+ $tip.removeClass('in')
301
+
302
+ $.support.transition && $tip.hasClass('fade') ?
303
+ $tip
304
+ .one('bsTransitionEnd', complete)
305
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
306
+ complete()
307
+
308
+ this.hoverState = null
309
+
310
+ return this
311
+ }
312
+
313
+ Tooltip.prototype.fixTitle = function () {
314
+ var $e = this.$element
315
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
316
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
317
+ }
318
+ }
319
+
320
+ Tooltip.prototype.hasContent = function () {
321
+ return this.getTitle()
322
+ }
323
+
324
+ Tooltip.prototype.getPosition = function ($element) {
325
+ $element = $element || this.$element
326
+
327
+ var el = $element[0]
328
+ var isBody = el.tagName == 'BODY'
329
+
330
+ var elRect = el.getBoundingClientRect()
331
+ if (elRect.width == null) {
332
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
333
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
334
+ }
335
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
336
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
337
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
338
+
339
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
340
+ }
341
+
342
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
343
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
344
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
345
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
346
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
347
+
348
+ }
349
+
350
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
351
+ var delta = { top: 0, left: 0 }
352
+ if (!this.$viewport) return delta
353
+
354
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
355
+ var viewportDimensions = this.getPosition(this.$viewport)
356
+
357
+ if (/right|left/.test(placement)) {
358
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
359
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
360
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
361
+ delta.top = viewportDimensions.top - topEdgeOffset
362
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
363
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
364
+ }
365
+ } else {
366
+ var leftEdgeOffset = pos.left - viewportPadding
367
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
368
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
369
+ delta.left = viewportDimensions.left - leftEdgeOffset
370
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
371
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
372
+ }
373
+ }
374
+
375
+ return delta
376
+ }
377
+
378
+ Tooltip.prototype.getTitle = function () {
379
+ var title
380
+ var $e = this.$element
381
+ var o = this.options
382
+
383
+ title = $e.attr('data-original-title')
384
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
385
+
386
+ return title
387
+ }
388
+
389
+ Tooltip.prototype.getUID = function (prefix) {
390
+ do prefix += ~~(Math.random() * 1000000)
391
+ while (document.getElementById(prefix))
392
+ return prefix
393
+ }
394
+
395
+ Tooltip.prototype.tip = function () {
396
+ return (this.$tip = this.$tip || $(this.options.template))
397
+ }
398
+
399
+ Tooltip.prototype.arrow = function () {
400
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
401
+ }
402
+
403
+ Tooltip.prototype.enable = function () {
404
+ this.enabled = true
405
+ }
406
+
407
+ Tooltip.prototype.disable = function () {
408
+ this.enabled = false
409
+ }
410
+
411
+ Tooltip.prototype.toggleEnabled = function () {
412
+ this.enabled = !this.enabled
413
+ }
414
+
415
+ Tooltip.prototype.toggle = function (e) {
416
+ var self = this
417
+ if (e) {
418
+ self = $(e.currentTarget).data('bs.' + this.type)
419
+ if (!self) {
420
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
421
+ $(e.currentTarget).data('bs.' + this.type, self)
422
+ }
423
+ }
424
+
425
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
426
+ }
427
+
428
+ Tooltip.prototype.destroy = function () {
429
+ var that = this
430
+ clearTimeout(this.timeout)
431
+ this.hide(function () {
432
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
433
+ })
434
+ }
435
+
436
+
437
+ // TOOLTIP PLUGIN DEFINITION
438
+ // =========================
439
+
440
+ function Plugin(option) {
441
+ return this.each(function () {
442
+ var $this = $(this)
443
+ var data = $this.data('bs.tooltip')
444
+ var options = typeof option == 'object' && option
445
+
446
+ if (!data && option == 'destroy') return
447
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
448
+ if (typeof option == 'string') data[option]()
449
+ })
450
+ }
451
+
452
+ var old = $.fn.tooltip
453
+
454
+ $.fn.tooltip = Plugin
455
+ $.fn.tooltip.Constructor = Tooltip
456
+
457
+
458
+ // TOOLTIP NO CONFLICT
459
+ // ===================
460
+
461
+ $.fn.tooltip.noConflict = function () {
462
+ $.fn.tooltip = old
463
+ return this
464
+ }
465
+
466
+ }(jQuery);