From 6bd95efe5e1a6f013a1efee73f9ce468013c2c35 Mon Sep 17 00:00:00 2001 From: jzaefferer Date: Thu, 24 Feb 2011 10:50:08 +0100 Subject: [PATCH] Menu: Fix filter matching to work with flyout menu --- tests/visual/menu/flyoutmenu.js | 41 ++------------------------------- ui/jquery.ui.menu.js | 5 ++-- 2 files changed, 5 insertions(+), 41 deletions(-) diff --git a/tests/visual/menu/flyoutmenu.js b/tests/visual/menu/flyoutmenu.js index 6fb522680..1e968dd61 100644 --- a/tests/visual/menu/flyoutmenu.js +++ b/tests/visual/menu/flyoutmenu.js @@ -47,53 +47,16 @@ $.widget("ui.flyoutmenu", { case $.ui.keyCode.RIGHT: if (self.right(event)) { event.stopImmediatePropagation(); - } + } event.preventDefault(); break; case $.ui.keyCode.ESCAPE: self.hide(); break; - default: - clearTimeout(self.filterTimer); - var prev = self.previousFilter || ""; - var character = String.fromCharCode(event.keyCode); - var skip = false; - if (character == prev) { - skip = true; - } else { - character = prev + character; - } - function escape(value) { - return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - } - var match = self.activeItem.parent("ul").children("li").filter(function() { - // TODO why filter child anchor here, but not in the filter below? - return new RegExp("^" + escape(character), "i").test($("a", this).text()); - }); - var match = skip && match.index(self.active.next()) != -1 ? match.next() : match; - if (!match.length) { - character = String.fromCharCode(event.keyCode); - // TODO why use self.widget() here instead of self.activeItem?? - match = self.widget().children("li").filter(function() { - return new RegExp("^" + escape(character), "i").test($(this).text()); - }); - } - if (match.length) { - self.activate(event, match); - if (match.length > 1) { - self.previousFilter = character; - self.filterTimer = setTimeout(function() { - delete self.previousFilter; - }, 1000); - } else { - delete self.previousFilter; - } - } else { - delete self.previousFilter; - } } }); }, + _open: function(submenu) { // TODO restrict to widget //only one menu can have items open at a time. diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index cc221f943..d7c0f5c74 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -88,6 +88,7 @@ $.widget("ui.menu", { event.stopImmediatePropagation(); break; default: + event.stopPropagation(); clearTimeout(self.filterTimer); var prev = self.previousFilter || ""; var character = String.fromCharCode(event.keyCode); @@ -101,13 +102,13 @@ $.widget("ui.menu", { return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); } var match = self.widget().children(".ui-menu-item").filter(function() { - return new RegExp("^" + escape(character), "i").test($(this).text()); + return new RegExp("^" + escape(character), "i").test($(this).children("a").text()); }); var match = skip && match.index(self.active.next()) != -1 ? self.active.nextAll(".ui-menu-item") : match; if (!match.length) { character = String.fromCharCode(event.keyCode); match = self.widget().children(".ui-menu-item").filter(function() { - return new RegExp("^" + escape(character), "i").test($(this).text()); + return new RegExp("^" + escape(character), "i").test($(this).children("a").text()); }); } if (match.length) { -- 2.39.5