Init WebCG
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* @fileOverview
|
||||
* @author Zoltan Toth
|
||||
* @version 0.1
|
||||
*/
|
||||
|
||||
/**
|
||||
* @description
|
||||
* Vanilla Javascript tooltip.
|
||||
*
|
||||
* @class
|
||||
* @param {string} [options.theme=dark] - Selects one of the pre-defined tooltip styles - light or dark.
|
||||
* @param {number} [options.dist=10] - Specifies the distance in pixels from trigger to tooltip.
|
||||
* @param {number} [options.delay=0] - Specifies how long the tooltip remains visible after the mouse leaves the trigger.
|
||||
*/
|
||||
|
||||
Tooltip = function() {
|
||||
|
||||
var theme = "dak";
|
||||
var delay = 50;
|
||||
var dist = 15;
|
||||
|
||||
document.querySelectorAll('[data-tooltip').forEach((item,index) => {
|
||||
item.addEventListener("mouseover", function(e) {
|
||||
var tooltip = document.createElement("div");
|
||||
tooltip.className = "b-tooltip";
|
||||
tooltip.innerHTML = e.target.getAttribute('data-tooltip');
|
||||
document.body.appendChild(tooltip);
|
||||
var pos = e.target.getAttribute('data-position') || "center top",
|
||||
posHorizontal = pos.split(" ")[0];
|
||||
posVertical = pos.split(" ")[1];
|
||||
positionAt(e.target, tooltip, posHorizontal, posVertical);
|
||||
});
|
||||
});
|
||||
|
||||
document.body.addEventListener("mouseout", function(e) {
|
||||
if (e.target.hasAttribute('data-tooltip')) {
|
||||
setTimeout(function() {
|
||||
document.body.removeChild(document.querySelector(".b-tooltip"));
|
||||
}, delay);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Positions the tooltip.
|
||||
*
|
||||
* @param {object} parent - The trigger of the tooltip.
|
||||
* @param {object} tooltip - The tooltip itself.
|
||||
* @param {string} posHorizontal - Desired horizontal position of the tooltip relatively to the trigger (left/center/right)
|
||||
* @param {string} posVertical - Desired vertical position of the tooltip relatively to the trigger (top/center/bottom)
|
||||
*
|
||||
*/
|
||||
function positionAt(parent, tooltip, posHorizontal, posVertical) {
|
||||
var parentCoords = parent.getBoundingClientRect(), left, top;
|
||||
|
||||
switch (posHorizontal) {
|
||||
case "left":
|
||||
left = parseInt(parentCoords.left) - dist - tooltip.offsetWidth;
|
||||
if (parseInt(parentCoords.left) - tooltip.offsetWidth < 0) {
|
||||
left = dist;
|
||||
}
|
||||
break;
|
||||
|
||||
case "right":
|
||||
left = parentCoords.right + dist;
|
||||
if (parseInt(parentCoords.right) + tooltip.offsetWidth > document.documentElement.clientWidth) {
|
||||
left = document.documentElement.clientWidth - tooltip.offsetWidth - dist;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
case "center":
|
||||
left = parseInt(parentCoords.left) + ((parent.offsetWidth - tooltip.offsetWidth) / 2);
|
||||
}
|
||||
|
||||
switch (posVertical) {
|
||||
case "center":
|
||||
top = (parseInt(parentCoords.top) + parseInt(parentCoords.bottom)) / 2 - tooltip.offsetHeight / 2;
|
||||
break;
|
||||
|
||||
case "bottom":
|
||||
top = parseInt(parentCoords.bottom) + dist;
|
||||
break;
|
||||
|
||||
default:
|
||||
case "top":
|
||||
top = parseInt(parentCoords.top) - tooltip.offsetHeight - dist;
|
||||
}
|
||||
|
||||
left = (left < 0) ? parseInt(parentCoords.left) : left;
|
||||
top = (top < 0) ? parseInt(parentCoords.bottom) + dist : top;
|
||||
|
||||
tooltip.style.left = left + "px";
|
||||
tooltip.style.top = top + pageYOffset + "px";
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user