r3416 committed - menu: commented and refactored nested menu code

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);