JSFiddle - React, Tailwind, and code Playground
by gnossienne
JavaScript
! function ($) {
"use strict"; // jshint ;_;
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function (element, options) {
this.init('tooltip', element, options);
}
Tooltip.prototype = {
constructor: Tooltip
,
init: function (type, element, options) {
var eventIn, eventOut
this.type = type;
this.$element = $(element);
this.options = this.getOptions(options);
this.enabled = true;
if (this.options.trigger == 'click') {
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this));
} else if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus';
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur';
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this));
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this));
}
this.options.selector ? (this._options = $.extend({}, this.options, {
trigger: 'manual',
selector: ''
})) : this.fixTitle();
}
,
getOptions: function (options) {
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data());
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay,
hide: options.delay
};
}
return options;
}
,
enter: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type);
if (!self.options.delay || !self.options.delay.show) return self.show();
...