Skip to content
Permalink
Browse files

Menu: Fix filter matching to work with flyout menu

  • Loading branch information...
jzaefferer committed Feb 24, 2011
1 parent 5d3f91b commit 6bd95efe5e1a6f013a1efee73f9ce468013c2c35
Showing with 5 additions and 41 deletions.
  1. +2 −39 tests/visual/menu/flyoutmenu.js
  2. +3 −2 ui/jquery.ui.menu.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.
@@ -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) {

0 comments on commit 6bd95ef

Please sign in to comment.
You can’t perform that action at this time.