///
module Elements.HoverInfo {
var hoverbox = document.getElementById("hoverInfo");
var contentTarget = document.getElementById("hoverContent");
var width = 0;
var height = 0;
function empty () {
while (contentTarget.firstChild != undefined) {
contentTarget.removeChild(contentTarget.firstChild);
}
}
export function makeHoverable (element : Element, contents : Array) {
element.addEventListener("mouseenter", (e : MouseEvent) => {
Elements.HoverInfo.hoverStart(e, contents);
});
element.addEventListener("mousemove", (e : MouseEvent) => {
Elements.HoverInfo.hoverMove(e);
});
element.addEventListener("mouseout", (e : MouseEvent) => {
Elements.HoverInfo.hoverEnd();
});
}
export function hoverStart (e : MouseEvent, contents : Array) {
empty();
for (let i = 0; i < contents.length; i++) {
contentTarget.appendChild(contents[i]);
}
hoverbox.style.display = "block";
hoverbox.style.left = "0px";
hoverbox.style.top = "0px";
width = hoverbox.offsetWidth;
height = hoverbox.offsetHeight;
hoverMove(e);
}
export function hoverMove (e : MouseEvent) {
let left = e.clientX - (width/2);
let top = e.clientY - (height) - 6;
if (top < 0) {
top = e.clientY + 6;
}
if (left < width) {
left = width;
}
// Width seems to not be considering the border, even though we applied border-box
// I don't care enough to figure this out so there's a margin on the side!
if (left + width > Elements.screenWidth) {
left = Elements.screenWidth - width;
}
hoverbox.style.left = Math.round(left) + "px";
hoverbox.style.top = Math.round(top) + "px";
}
export function hoverEnd () {
hoverbox.style.display = "none";
}
}