Skip to content

Commit 5d3f91b

Browse files
committed
Menu: Move item matching code into menu
1 parent 5095871 commit 5d3f91b

File tree

3 files changed

+39
-33
lines changed

3 files changed

+39
-33
lines changed

tests/visual/menu/contextmenu.html

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -51,39 +51,7 @@
5151
menu.widget().hide();
5252
break;
5353
default:
54-
clearTimeout(menu.filterTimer);
55-
var prev = menu.previousFilter || "";
56-
var character = String.fromCharCode(event.keyCode);
57-
var skip = false;
58-
if (character == prev) {
59-
skip = true;
60-
} else {
61-
character = prev + character;
62-
}
6354

64-
var match = menu.widget().children("li").filter(function() {
65-
return new RegExp("^" + character, "i").test($(this).text());
66-
});
67-
var match = skip && match.index(menu.active.next()) != -1 ? match.next() : match;
68-
if (!match.length) {
69-
character = String.fromCharCode(event.keyCode);
70-
match = menu.widget().children("li").filter(function() {
71-
return new RegExp("^" + character, "i").test($(this).text());
72-
});
73-
}
74-
if (match.length) {
75-
menu.focus(event, match);
76-
if (match.length > 1) {
77-
menu.previousFilter = character;
78-
menu.filterTimer = setTimeout(function() {
79-
delete menu.previousFilter;
80-
}, 1000);
81-
} else {
82-
delete menu.previousFilter;
83-
}
84-
} else {
85-
delete menu.previousFilter;
86-
}
8755
}
8856
});
8957
});

tests/visual/menu/menu.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
<li><a href="#">Ada</a></li>
5151
<li><a href="#">Adamsville</a></li>
5252
<li><a href="#">Addyston</a></li>
53-
<li><a href="#">Adelphi</a></li>
53+
<li><a href="#">Delphi</a></li>
54+
<li><a href="#">Saarland</a></li>
55+
<li><a href="#">Salzburg</a></li>
5456
</ul>
5557

5658
<ul id="menu2">

ui/jquery.ui.menu.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,42 @@ $.widget("ui.menu", {
8787
event.preventDefault();
8888
event.stopImmediatePropagation();
8989
break;
90+
default:
91+
clearTimeout(self.filterTimer);
92+
var prev = self.previousFilter || "";
93+
var character = String.fromCharCode(event.keyCode);
94+
var skip = false;
95+
if (character == prev) {
96+
skip = true;
97+
} else {
98+
character = prev + character;
99+
}
100+
function escape(value) {
101+
return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
102+
}
103+
var match = self.widget().children(".ui-menu-item").filter(function() {
104+
return new RegExp("^" + escape(character), "i").test($(this).text());
105+
});
106+
var match = skip && match.index(self.active.next()) != -1 ? self.active.nextAll(".ui-menu-item") : match;
107+
if (!match.length) {
108+
character = String.fromCharCode(event.keyCode);
109+
match = self.widget().children(".ui-menu-item").filter(function() {
110+
return new RegExp("^" + escape(character), "i").test($(this).text());
111+
});
112+
}
113+
if (match.length) {
114+
self.focus(event, match);
115+
if (match.length > 1) {
116+
self.previousFilter = character;
117+
self.filterTimer = setTimeout(function() {
118+
delete self.previousFilter;
119+
}, 1000);
120+
} else {
121+
delete self.previousFilter;
122+
}
123+
} else {
124+
delete self.previousFilter;
125+
}
90126
}
91127
});
92128
},

0 commit comments

Comments
 (0)