r3416 committed - menu: commented and refactored nested menu code
Revision: 3416
Author: joern.zaefferer
Date: Sat Nov 7 02:48:54 2009
Log: menu: commented and refactored nested menu code
http://code.google.com/p/jquery-ui/source/detail?r=3416
Modified:
/branches/dev/tests/visual/menu/nested.html
=======================================
--- /branches/dev/tests/visual/menu/nested.html Sat Nov 7 02:24:04 2009
+++ /branches/dev/tests/visual/menu/nested.html Sat Nov 7 02:48:54 2009
@@ -25,28 +25,34 @@
$("#log").append("<div>Selected " + ui.item.text() + "</div>");
},
focus: function(event, ui) {
- var nested = $("ul", ui.item);
+ // put a previous submenu back into its place and hide it
if (submenu) {
submenu.child.appendTo(submenu.parent).hide();
submenu = null;
}
+ var nested = $("ul", ui.item);
if (nested.length) {
nested.menu({
selected: function(event, ui) {
$("#log").append("<div>Selected " + ui.item.text() + "</div>");
}
+ // append to body in order to display the submenu above the parent
menu, instead of inside of it
}).appendTo(document.body).menu("deactivate").show().position({
my: "left top",
at: "right top",
of: ui.item
});
+ // store the current submenu
submenu = {
child: nested,
+ // also store the submenu's parent is now document.body
parent: ui.item
}
}
}
}).hide();
+
+ // hide submenus and create indicator icons
menu.find("ul").hide().prev("a").prepend('<span class="ui-icon
ui-icon-carat-1-e"></span>');
@@ -66,44 +72,45 @@
}
})
}).keydown(function(event) {
- var menu = $("#menu" + this.id).data("menu"),
- sub = submenu && submenu.focussed && submenu.child.data("menu");
+ var menu = submenu && submenu.focussed && submenu.child.data("menu") ||
$("#menu" + this.id).data("menu");
if (menu.widget().is(":hidden"))
return;
event.stopPropagation();
switch (event.keyCode) {
case $.ui.keyCode.PAGE_UP:
- sub ? sub.previousPage() : menu.previousPage();
+ menu.previousPage();
break;
case $.ui.keyCode.PAGE_DOWN:
- sub ? sub.nextPage() : menu.nextPage();
+ menu.nextPage();
break;
case $.ui.keyCode.UP:
- sub ? sub.previous() : menu.previous();
+ menu.previous();
break;
case $.ui.keyCode.LEFT:
- if (sub) {
+ if (submenu.focussed) {
submenu.focussed = false;
- sub.deactivate();
+ menu.deactivate();
}
break;
case $.ui.keyCode.RIGHT:
if (submenu.child) {
submenu.focussed = true;
- sub = submenu.child.data("menu");
- sub.activate(sub.element.children(":first"));
+ menu = submenu.child.data("menu");
+ menu.activate(menu.element.children(":first"));
}
break;
case $.ui.keyCode.DOWN:
- sub ? sub.next() : menu.next();
+ menu.next();
event.preventDefault();
break;
case $.ui.keyCode.ENTER:
case $.ui.keyCode.TAB:
- sub ? sub.select() : menu.select();
+ menu.select();
menu.widget().hide();
if (submenu) {
submenu.child.appendTo(submenu.parent).hide();
+ // also hide parent
+ $("#menu" + this.id).hide();
submenu = null;
}
event.preventDefault();
@@ -112,12 +119,12 @@
menu.widget().hide();
if (submenu) {
submenu.child.appendTo(submenu.parent).hide();
+ // also hide parent
+ $("#menu" + this.id).hide();
submenu = null;
}
break;
default:
- if (sub)
- menu = sub;
clearTimeout(menu.filterTimer);
var prev = menu.previousFilter || "";
var character = String.fromCharCode(event.keyCode);