r3423 committed - menu: refactored nested prototype to allow more then one sublevel

r3423 committed - menu: refactored nested prototype to allow more then one sublevel


Revision: 3423
Author: joern.zaefferer
Date: Mon Nov 9 03:10:32 2009
Log: menu: refactored nested prototype to allow more then one sublevel
http://code.google.com/p/jquery-ui/source/detail?r=3423
Modified:
/branches/dev/tests/visual/menu/nested.html
=======================================
--- /branches/dev/tests/visual/menu/nested.html    Sat Nov 7 02:48:54 2009
+++ /branches/dev/tests/visual/menu/nested.html    Mon Nov 9 03:10:32 2009
@@ -27,7 +27,7 @@
            focus: function(event, ui) {
                // put a previous submenu back into its place and hide it
                if (submenu) {
-                    submenu.child.appendTo(submenu.parent).hide();
+                    submenu.appendTo(submenu.data("menuparent")).hide();
                    submenu = null;
                }
                var nested = $("ul", ui.item);
@@ -43,11 +43,8 @@
                        of: ui.item
                    });
                    // store the current submenu
-                    submenu = {
-                        child: nested,
-                        // also store the submenu's parent is now document.body
-                        parent: ui.item
-                    }
+                    submenu = nested;
+                    submenu.data("menuparent", ui.item);
                }
            }
        }).hide();
@@ -67,12 +64,12 @@
            $().one("click", function() {
                menu.hide();
                if (submenu) {
-                    submenu.child.appendTo(submenu.parent).hide();
+                    submenu.appendTo(submenu.data("menuparent")).hide();
                    submenu = null;
                }
            })
        }).keydown(function(event) {
-            var menu = submenu && submenu.focussed && submenu.child.data("menu") ||
$("#menu" + this.id).data("menu");
+            var menu = submenu && submenu.data("menufocussed") &&
submenu.data("menu") || $("#menu" + this.id).data("menu");
            if (menu.widget().is(":hidden"))
                return;
            event.stopPropagation();
@@ -87,15 +84,15 @@
                menu.previous();
                break;
            case $.ui.keyCode.LEFT:
-                if (submenu.focussed) {
-                    submenu.focussed = false;
+                if (submenu && submenu.data("menufocussed")) {
+                    submenu.data("menufocussed", false);
                    menu.deactivate();
                }
                break;
            case $.ui.keyCode.RIGHT:
-                if (submenu.child) {
-                    submenu.focussed = true;
-                    menu = submenu.child.data("menu");
+                if (submenu) {
+                    submenu.data("menufocussed", true);
+                    menu = submenu.data("menu");
                    menu.activate(menu.element.children(":first"));
                }
                break;
@@ -108,20 +105,22 @@
                menu.select();
                menu.widget().hide();
                if (submenu) {
-                    submenu.child.appendTo(submenu.parent).hide();
+                    submenu.appendTo(submenu.data("menuparent"));
+                    submenu.removeData("menuparent");
+                    submenu = null;
                    // also hide parent
                    $("#menu" + this.id).hide();
-                    submenu = null;
                }
                event.preventDefault();
                break;
            case $.ui.keyCode.ESCAPE:
                menu.widget().hide();
                if (submenu) {
-                    submenu.child.appendTo(submenu.parent).hide();
+                    submenu.appendTo(submenu.data("menuparent"));
+                    submenu.removeData("menuparent");
+                    submenu = null;
                    // also hide parent
                    $("#menu" + this.id).hide();
-                    submenu = null;
                }
                break;
            default: