82 lines
1.9 KiB
JavaScript
82 lines
1.9 KiB
JavaScript
/*
|
|
* Open a menu.
|
|
*/
|
|
function openMenu(anchor, menu, align) {
|
|
var offset;
|
|
|
|
if (align == "left") {
|
|
offset = 0;
|
|
} else if (align == "right") {
|
|
offset = anchor.getWidth() - menu.getWidth();
|
|
}
|
|
|
|
menu.clonePosition(anchor, {
|
|
setLeft: true, setTop: true, setWidth: false, setHeight: false,
|
|
offsetLeft: offset, offsetTop: anchor.getHeight()
|
|
});
|
|
|
|
menu.style.display = "block";
|
|
}
|
|
|
|
/*
|
|
* 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, align) {
|
|
if (!anchor.hasClassName("disabled")) {
|
|
clearTimeout(menu.timer);
|
|
|
|
if (delay > 0) {
|
|
menu.timer = setTimeout(function () { openMenu(anchor, menu, align) }, delay);
|
|
} else {
|
|
openMenu(event, menu, align);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* 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, align) {
|
|
var anchor = $(anchorid);
|
|
var menu = $(menuid);
|
|
|
|
anchor.observe("mouseup", function (event) { closeMenu(menu) });
|
|
anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay, align) });
|
|
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) });
|
|
}
|