Skip to content

Commit 17f8079

Browse files
committed
Menu: Extracted menu code from autocomplete, updated all dependencies
1 parent 469d0c5 commit 17f8079

22 files changed

+198
-6
lines changed

demos/autocomplete/categories.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<style type="text/css">

demos/autocomplete/combobox.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.button.js"></script>
1111
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
12+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1213
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1314
<link type="text/css" href="../demos.css" rel="stylesheet" />
1415
<style type="text/css">

demos/autocomplete/custom-data.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<style type="text/css">

demos/autocomplete/default.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/folding.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/multiple-remote.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/multiple.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/remote-jsonp.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/remote-with-cache.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/remote.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

demos/autocomplete/xml.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<script type="text/javascript" src="../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
11+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1112
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1213
<link type="text/css" href="../demos.css" rel="stylesheet" />
1314
<script type="text/javascript">

tests/unit/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<script type="text/javascript" src="../../ui/jquery.ui.widget.js"></script>
2525
<script type="text/javascript" src="../../ui/jquery.ui.mouse.js"></script>
2626
<script type="text/javascript" src="../../ui/jquery.ui.accordion.js"></script>
27+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
2728
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
2829
<script type="text/javascript" src="../../ui/jquery.ui.button.js"></script>
2930
<script type="text/javascript" src="../../ui/jquery.ui.datepicker.js"></script>

tests/visual/all.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<script type="text/javascript" src="../../ui/jquery.ui.mouse.js"></script>
1212
<script type="text/javascript" src="../../ui/jquery.ui.position.js"></script>
1313
<script type="text/javascript" src="../../ui/jquery.ui.accordion.js"></script>
14+
<script type="text/javascript" src="../../ui/jquery.ui.menu.js"></script>
1415
<script type="text/javascript" src="../../ui/jquery.ui.autocomplete.js"></script>
1516
<script type="text/javascript" src="../../ui/jquery.ui.button.js"></script>
1617
<script type="text/javascript" src="../../ui/jquery.ui.datepicker.js"></script>

tests/visual/autocomplete/autocomplete.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
1010
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
1111
<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
12+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1213
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
1314
<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
1415
<script type="text/javascript">

tests/visual/compound/widgets_in_dialog.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<script type="text/javascript" src="../../../ui/jquery.ui.resizable.js"></script>
1414
<script type="text/javascript" src="../../../ui/jquery.ui.draggable.js"></script>
1515
<script type="text/javascript" src="../../../ui/jquery.ui.accordion.js"></script>
16-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
16+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1717
<script type="text/javascript" src="../../../ui/jquery.ui.button.js"></script>
1818
<script type="text/javascript" src="../../../ui/jquery.ui.datepicker.js"></script>
1919
<script type="text/javascript" src="../../../ui/jquery.ui.dialog.js"></script>

tests/visual/menu/contextmenu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
11-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
11+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1212
<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
1313
<script type="text/javascript">
1414
$(function() {

tests/visual/menu/drilldown.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
1111
<script type="text/javascript" src="../../../ui/jquery.ui.button.js"></script>
12-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
12+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1313
<script type="text/javascript">
1414
$(function() {
1515
$.widget("ui.drilldown", {

tests/visual/menu/menu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<script type="text/javascript" src="../../../jquery-1.4.2.js"></script>
88
<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
10-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
10+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1111
<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
1212
<script type="text/javascript">
1313
$(function() {

tests/visual/menu/nested.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
99
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
1010
<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
11-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
11+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1212
<script type="text/javascript" src="../../../external/jquery.bgiframe-2.1.1.js"></script>
1313
<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
1414
<script type="text/javascript">

tests/visual/position/position.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
1010
<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
1111
<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
12-
<script type="text/javascript" src="../../../ui/jquery.ui.autocomplete.js"></script>
12+
<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
1313
<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
1414
<script type="text/javascript">
1515
$(function() {

ui/jquery.ui.autocomplete.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* jquery.ui.core.js
1212
* jquery.ui.widget.js
1313
* jquery.ui.position.js
14+
* jquery.ui.menu.js
1415
*/
1516
(function( $ ) {
1617

ui/jquery.ui.menu.js

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
/*
2+
* jQuery UI Menu @VERSION
3+
*
4+
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
5+
* Dual licensed under the MIT (MIT-LICENSE.txt)
6+
* and GPL (GPL-LICENSE.txt) licenses.
7+
*
8+
* http://docs.jquery.com/UI/Menu
9+
*
10+
* Depends:
11+
* jquery.ui.core.js
12+
* jquery.ui.widget.js
13+
*/
14+
(function($) {
15+
16+
$.widget("ui.menu", {
17+
_create: function() {
18+
var self = this;
19+
this.element
20+
.addClass("ui-menu ui-widget ui-widget-content ui-corner-all")
21+
.attr({
22+
role: "listbox",
23+
"aria-activedescendant": "ui-active-menuitem"
24+
})
25+
.click(function( event ) {
26+
if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) {
27+
return;
28+
}
29+
// temporary
30+
event.preventDefault();
31+
self.select( event );
32+
});
33+
this.refresh();
34+
},
35+
36+
refresh: function() {
37+
var self = this;
38+
39+
// don't refresh list items that are already adapted
40+
var items = this.element.children("li:not(.ui-menu-item):has(a)")
41+
.addClass("ui-menu-item")
42+
.attr("role", "menuitem");
43+
44+
items.children("a")
45+
.addClass("ui-corner-all")
46+
.attr("tabindex", -1)
47+
// mouseenter doesn't work with event delegation
48+
.mouseenter(function( event ) {
49+
self.activate( event, $(this).parent() );
50+
})
51+
.mouseleave(function() {
52+
self.deactivate();
53+
});
54+
},
55+
56+
activate: function( event, item ) {
57+
this.deactivate();
58+
if (this.hasScroll()) {
59+
var offset = item.offset().top - this.element.offset().top,
60+
scroll = this.element.attr("scrollTop"),
61+
elementHeight = this.element.height();
62+
if (offset < 0) {
63+
this.element.attr("scrollTop", scroll + offset);
64+
} else if (offset > elementHeight) {
65+
this.element.attr("scrollTop", scroll + offset - elementHeight + item.height());
66+
}
67+
}
68+
this.active = item.eq(0)
69+
.children("a")
70+
.addClass("ui-state-hover")
71+
.attr("id", "ui-active-menuitem")
72+
.end();
73+
this._trigger("focus", event, { item: item });
74+
},
75+
76+
deactivate: function() {
77+
if (!this.active) { return; }
78+
79+
this.active.children("a")
80+
.removeClass("ui-state-hover")
81+
.removeAttr("id");
82+
this._trigger("blur");
83+
this.active = null;
84+
},
85+
86+
next: function(event) {
87+
this.move("next", ".ui-menu-item:first", event);
88+
},
89+
90+
previous: function(event) {
91+
this.move("prev", ".ui-menu-item:last", event);
92+
},
93+
94+
first: function() {
95+
return this.active && !this.active.prev().length;
96+
},
97+
98+
last: function() {
99+
return this.active && !this.active.next().length;
100+
},
101+
102+
move: function(direction, edge, event) {
103+
if (!this.active) {
104+
this.activate(event, this.element.children(edge));
105+
return;
106+
}
107+
var next = this.active[direction + "All"](".ui-menu-item").eq(0);
108+
if (next.length) {
109+
this.activate(event, next);
110+
} else {
111+
this.activate(event, this.element.children(edge));
112+
}
113+
},
114+
115+
// TODO merge with previousPage
116+
nextPage: function(event) {
117+
if (this.hasScroll()) {
118+
// TODO merge with no-scroll-else
119+
if (!this.active || this.last()) {
120+
this.activate(event, this.element.children(":first"));
121+
return;
122+
}
123+
var base = this.active.offset().top,
124+
height = this.element.height(),
125+
result = this.element.children("li").filter(function() {
126+
var close = $(this).offset().top - base - height + $(this).height();
127+
// TODO improve approximation
128+
return close < 10 && close > -10;
129+
});
130+
131+
// TODO try to catch this earlier when scrollTop indicates the last page anyway
132+
if (!result.length) {
133+
result = this.element.children(":last");
134+
}
135+
this.activate(event, result);
136+
} else {
137+
this.activate(event, this.element.children(!this.active || this.last() ? ":first" : ":last"));
138+
}
139+
},
140+
141+
// TODO merge with nextPage
142+
previousPage: function(event) {
143+
if (this.hasScroll()) {
144+
// TODO merge with no-scroll-else
145+
if (!this.active || this.first()) {
146+
this.activate(event, this.element.children(":last"));
147+
return;
148+
}
149+
150+
var base = this.active.offset().top,
151+
height = this.element.height();
152+
result = this.element.children("li").filter(function() {
153+
var close = $(this).offset().top - base + height - $(this).height();
154+
// TODO improve approximation
155+
return close < 10 && close > -10;
156+
});
157+
158+
// TODO try to catch this earlier when scrollTop indicates the last page anyway
159+
if (!result.length) {
160+
result = this.element.children(":first");
161+
}
162+
this.activate(event, result);
163+
} else {
164+
this.activate(event, this.element.children(!this.active || this.first() ? ":last" : ":first"));
165+
}
166+
},
167+
168+
hasScroll: function() {
169+
return this.element.height() < this.element.attr("scrollHeight");
170+
},
171+
172+
select: function( event ) {
173+
this._trigger("selected", event, { item: this.active });
174+
}
175+
});
176+
177+
}(jQuery));

0 commit comments

Comments
 (0)