1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-21 22:29:41 +02:00
documize/app/vendor/tooltip.js
2016-07-07 18:54:16 -07:00

140 lines
3.7 KiB
JavaScript

// https://github.com/HubSpot/tooltip
/*! tether-tooltip 1.1.0 */
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(["tether-drop","tether"], factory);
} else if (typeof exports === 'object') {
module.exports = factory(require('tether-drop'), require('tether'));
} else {
root.Tooltip = factory(root.Drop, root.Tether);
}
}(this, function(Drop, Tether) {
/* global Tether Drop */
'use strict';
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var extend = Tether.Utils.extend;
var _Drop = Drop.createContext({
classPrefix: 'tooltip'
});
var defaults = {
position: 'top center',
openOn: 'hover',
classes: 'tooltip-theme-arrows',
constrainToWindow: true,
constrainToScrollParent: false
};
var tooltipCount = 0;
var Tooltip = (function () {
function Tooltip(options) {
_classCallCheck(this, Tooltip);
this.options = options;
if (!this.options.target) {
throw new Error('Tooltip Error: You must provide a target for Tooltip to attach to');
}
var position = this.options.target.getAttribute('data-tooltip-position');
if (position) {
if (typeof this.options.position === 'undefined') {
this.options.position = position;
}
}
var content = this.options.target.getAttribute('data-tooltip');
if (content) {
if (typeof this.options.content === 'undefined') {
var contentEl = document.createElement('div');
contentEl.innerHTML = content;
// Add ARIA attributes (see #50)
contentEl.setAttribute('role', 'tooltip');
contentEl.id = 'drop-tooltip-' + tooltipCount;
this.options.target.setAttribute('aria-describedby', contentEl.id);
tooltipCount += 1;
this.options.content = contentEl;
}
}
if (!this.options.content) {
throw new Error('Tooltip Error: You must provide content for Tooltip to display');
}
this.options = extend({}, defaults, this.options);
this.drop = new _Drop(this.options);
}
_createClass(Tooltip, [{
key: 'close',
value: function close() {
this.drop.close();
}
}, {
key: 'open',
value: function open() {
this.drop.open();
}
}, {
key: 'toggle',
value: function toggle() {
this.drop.toggle();
}
}, {
key: 'remove',
value: function remove() {
this.drop.remove();
}
}, {
key: 'destroy',
value: function destroy() {
this.drop.destroy();
}
}, {
key: 'position',
value: function position() {
this.drop.position();
}
}]);
return Tooltip;
})();
var initialized = [];
Tooltip.init = function () {
var tooltipElements = document.querySelectorAll('[data-tooltip]');
var len = tooltipElements.length;
for (var i = 0; i < len; ++i) {
var el = tooltipElements[i];
if (initialized.indexOf(el) === -1) {
new Tooltip({
target: el
});
initialized.push(el);
}
}
};
document.addEventListener('DOMContentLoaded', function () {
if (Tooltip.autoinit !== false) {
Tooltip.init();
}
});
return Tooltip;
}));