aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjzaefferer <joern.zaefferer@gmail.com>2011-02-24 12:05:20 +0100
committerjzaefferer <joern.zaefferer@gmail.com>2011-02-24 12:05:20 +0100
commit38cfcfffe92f2ac2572ab7ebc51e860de9312baf (patch)
tree8c03b1d8881627a041c1d20f134351b300f970da
parent5c687be331d3110ece3b2417c021485950f87ff9 (diff)
downloadjquery-ui-38cfcfffe92f2ac2572ab7ebc51e860de9312baf.tar.gz
jquery-ui-38cfcfffe92f2ac2572ab7ebc51e860de9312baf.zip
Menu: Update autocomplete to use deactivate and check for focus class
-rw-r--r--tests/unit/autocomplete/autocomplete_core.js2
-rw-r--r--tests/visual/menu/menu.html21
-rw-r--r--themes/base/jquery.ui.menu.css2
-rw-r--r--ui/jquery.ui.autocomplete.js8
-rw-r--r--ui/jquery.ui.menu.js19
5 files changed, 44 insertions, 8 deletions
diff --git a/tests/unit/autocomplete/autocomplete_core.js b/tests/unit/autocomplete/autocomplete_core.js
index fcd835d1a..2edb8876c 100644
--- a/tests/unit/autocomplete/autocomplete_core.js
+++ b/tests/unit/autocomplete/autocomplete_core.js
@@ -49,7 +49,7 @@ test( "prevent form submit on enter when menu is active", function() {
event = $.Event( "keydown" );
event.keyCode = $.ui.keyCode.DOWN;
ac.trigger( event );
- same( $( ".ui-menu-item:has(.ui-state-hover)" ).length, 1, "menu item is active" );
+ same( $( ".ui-menu-item:has(.ui-state-focus)" ).length, 1, "menu item is active" );
event = $.Event( "keydown" );
event.keyCode = $.ui.keyCode.ENTER;
diff --git a/tests/visual/menu/menu.html b/tests/visual/menu/menu.html
index 395a06bdf..32fb98ea8 100644
--- a/tests/visual/menu/menu.html
+++ b/tests/visual/menu/menu.html
@@ -24,7 +24,7 @@
});
}
- var menus = $("#menu1, #menu2");
+ var menus = $("#menu1, #menu2, #menu3");
create();
$("#toggle-destroy").toggle(function() {
@@ -55,7 +55,24 @@
<li><a href="#">Salzburg</a></li>
</ul>
-<ul id="menu2">
+<ul id="menu1">
+ <li><a href="#">Aberdeen</a></li>
+ <li><a href="#">Ada</a></li>
+ <li><a href="#">Adamsville</a></li>
+ <li><a href="#">Addyston</a></li>
+ <li>
+ <a href="#">Delphi</a>
+ <ul>
+ <li><a href="#">Ada</a></li>
+ <li><a href="#">Saarland</a></li>
+ <li><a href="#">Salzburg</a></li>
+ </ul>
+ </li>
+ <li><a href="#">Saarland</a></li>
+ <li><a href="#">Salzburg</a></li>
+</ul>
+
+<ul id="menu3">
<li><a href="#">Aberdeen</a></li>
<li><a href="#">Ada</a></li>
<li><a href="#">Adamsville</a></li>
diff --git a/themes/base/jquery.ui.menu.css b/themes/base/jquery.ui.menu.css
index 1c868c366..63299aea4 100644
--- a/themes/base/jquery.ui.menu.css
+++ b/themes/base/jquery.ui.menu.css
@@ -37,3 +37,5 @@
font-weight: normal;
margin: -1px;
}
+
+.ui-menu .ui-icon { float: right; }
diff --git a/ui/jquery.ui.autocomplete.js b/ui/jquery.ui.autocomplete.js
index 32959b3c5..c83f042c0 100644
--- a/ui/jquery.ui.autocomplete.js
+++ b/ui/jquery.ui.autocomplete.js
@@ -323,7 +323,7 @@ $.widget( "ui.autocomplete", {
clearTimeout( this.closing );
if ( this.menu.element.is(":visible") ) {
this.menu.element.hide();
- this.menu.deactivate();
+ this.menu.blur();
this._trigger( "close", event );
}
},
@@ -358,8 +358,8 @@ $.widget( "ui.autocomplete", {
.empty()
.zIndex( this.element.zIndex() + 1 );
this._renderMenu( ul, items );
- // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate
- this.menu.deactivate();
+ // TODO refresh should check if the active item is still in the dom, removing the need for a manual blur
+ this.menu.blur();
this.menu.refresh();
// size and position menu
@@ -400,7 +400,7 @@ $.widget( "ui.autocomplete", {
if ( this.menu.first() && /^previous/.test(direction) ||
this.menu.last() && /^next/.test(direction) ) {
this._value( this.term );
- this.menu.deactivate();
+ this.menu.blur();
return;
}
this.menu[ direction ]( event );
diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js
index d7c0f5c74..cba42d17f 100644
--- a/ui/jquery.ui.menu.js
+++ b/ui/jquery.ui.menu.js
@@ -17,6 +17,12 @@ var idIncrement = 0;
$.widget("ui.menu", {
defaultElement: "<ul>",
+ options: {
+ position: {
+ my: "left top",
+ at: "right top"
+ }
+ },
_create: function() {
var self = this;
this.menuId = this.element.attr( "id" ) || "ui-menu-" + idIncrement++;
@@ -145,8 +151,19 @@ $.widget("ui.menu", {
},
refresh: function() {
+ // initialize nested menus
+ // TODO add role=listbox to these, too? or just the top level menu?
+ var submenus = this.element.find("ul:not(.ui-menu)")
+ .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
+ .hide()
+
+ submenus
+ .prev("a")
+ .prepend('<span class="ui-icon ui-icon-carat-1-e"></span>');
+
+
// don't refresh list items that are already adapted
- var items = this.element.children( "li:not(.ui-menu-item):has(a)" )
+ var items = submenus.add(this.element).children( "li:not(.ui-menu-item):has(a)" )
.addClass( "ui-menu-item" )
.attr( "role", "menuitem" );