openstreetmap-website/public/javascripts/menu.js

74 lines
1.8 KiB
JavaScript

/*
* Open a menu.
*/
function openMenu(anchor, menu) {
menu.style.display = "block";
menu.clonePosition(anchor, {
setLeft: true, setTop: true, setWidth: false, setHeight: false,
offsetLeft: 0, offsetTop: anchor.getHeight()
});
}
/*
* Close a menu.
*/
function closeMenu(menu) {
clearTimeout(menu.timer);
menu.style.display = "none";
}
/*
* Callback called when the mouse enters a menu anchor.
*/
function enterMenuAnchor(event, anchor, menu, delay) {
if (!anchor.hasClassName("disabled")) {
clearTimeout(menu.timer);
if (delay > 0) {
menu.timer = setTimeout(function () { openMenu(anchor, menu) }, delay);
} else {
openMenu(event, menu);
}
}
}
/*
* Callback called when the mouse leaves a menu anchor.
*/
function leaveMenuAnchor(event, anchor, menu) {
var to = event.relatedTarget;
if (to != menu && !to.descendantOf(menu)) {
menu.style.display = "none";
}
clearTimeout(menu.timer);
}
/*
* Callback called when the mouse leaves a menu.
*/
function leaveMenu(event, anchor, menu) {
var to = event.relatedTarget;
if (to != anchor && !to.descendantOf(menu)) {
menu.style.display = "none";
}
clearTimeout(menu.timer);
}
/*
* Setup a menu, triggered by hovering over an anchor for a given time.
*/
function createMenu(anchorid, menuid, delay) {
var anchor = $(anchorid);
var menu = $(menuid);
anchor.observe("mouseup", function (event) { closeMenu(menu) });
anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay) });
anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) });
menu.observe("mouseup", function (event) { closeMenu(menu) });
menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) });
}