aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/selectmenu/default.html9
-rw-r--r--demos/selectmenu/dialog.html4
-rw-r--r--demos/selectmenu/typeahead.html4
-rw-r--r--themes/base/jquery.ui.selectmenu.css4
-rw-r--r--ui/jquery.ui.selectmenu.js109
5 files changed, 66 insertions, 64 deletions
diff --git a/demos/selectmenu/default.html b/demos/selectmenu/default.html
index dd513554a..90ce9d2f6 100644
--- a/demos/selectmenu/default.html
+++ b/demos/selectmenu/default.html
@@ -18,9 +18,8 @@
body {font-size: 62.5%; font-family:"Verdana",sans-serif; }
fieldset { border:0; }
label,select,.ui-select-menu { float: left; margin-right: 10px; }
- select { width: 200px; }
- .wrap span.ui-selectmenu-item-header,
- .wrap ul.ui-selectmenu-menu li a { text-decoration: underline !important; }
+ select { width: 200px; }
+ .wrap ul.ui-selectmenu-menu-popup li a { font-weight: bold; }
</style>
<script type="text/javascript">
$(function(){
@@ -28,9 +27,9 @@
$('select#speedAa').selectmenu({
style:'popup',
- maxHeight: 150,
- wrapperElement: "<div class='wrap' />"
+ maxHeight: 150
});
+ $('select#speedAa').selectmenu("widget").addClass("wrap");
$('select#speedB').selectmenu({
style:'popup',
diff --git a/demos/selectmenu/dialog.html b/demos/selectmenu/dialog.html
index a063b82c6..aa6b8b4ee 100644
--- a/demos/selectmenu/dialog.html
+++ b/demos/selectmenu/dialog.html
@@ -19,9 +19,7 @@
body {font-size: 62.5%; font-family:"Verdana",sans-serif; }
fieldset { border:0; }
label,select,.ui-select-menu { float: left; margin-right: 10px; }
- select { width: 200px; }
- .wrap span.ui-selectmenu-item-header,
- .wrap ul.ui-selectmenu-menu li a { text-decoration: underline !important; }
+ select { width: 200px; }
</style>
<script type="text/javascript">
$(function(){
diff --git a/demos/selectmenu/typeahead.html b/demos/selectmenu/typeahead.html
index 79a46890f..6f5dc7098 100644
--- a/demos/selectmenu/typeahead.html
+++ b/demos/selectmenu/typeahead.html
@@ -18,9 +18,7 @@
body {font-size: 62.5%; font-family:"Verdana",sans-serif; }
fieldset { border:0; }
label,select,.ui-select-menu { float: left; margin-right: 10px; }
- select { width: 200px; }
- .wrap span.ui-selectmenu-item-header,
- .wrap ul.ui-selectmenu-menu li a { text-decoration: underline !important; }
+ select { width: 200px; }
</style>
<script type="text/javascript">
$(function(){
diff --git a/themes/base/jquery.ui.selectmenu.css b/themes/base/jquery.ui.selectmenu.css
index ff45c11cf..d2c65bc77 100644
--- a/themes/base/jquery.ui.selectmenu.css
+++ b/themes/base/jquery.ui.selectmenu.css
@@ -6,7 +6,6 @@
.ui-selectmenu-menu ul { padding:0; margin:0; list-style:none; position: relative; overflow: auto; overflow-y: auto ; overflow-x: hidden; }
.ui-selectmenu-open { display: block; }
.ui-selectmenu-menu-popup { margin-top: -1px; }
-.ui-selectmenu-menu-dropdown { }
.ui-selectmenu-menu li { padding:0; margin:0; display: block; border-top: 1px dotted transparent; border-bottom: 1px dotted transparent; border-right-width: 0 !important; border-left-width: 0 !important; font-weight: normal !important; }
.ui-selectmenu-menu li a,.ui-selectmenu-status { line-height: 1.4em; display: block; padding: .405em 2.1em .405em 1em; outline:none; text-decoration:none; }
.ui-selectmenu-menu li.ui-state-disabled a, .ui-state-disabled { cursor: default; }
@@ -14,11 +13,8 @@
.ui-selectmenu-hasIcon .ui-selectmenu-status { padding-left: 20px; position: relative; margin-left: 5px; }
.ui-selectmenu-menu li .ui-icon, .ui-selectmenu-status .ui-icon { position: absolute; top: 1em; margin-top: -8px; left: 0; }
.ui-selectmenu-status { line-height: 1.4em; }
-.ui-selectmenu-open li.ui-selectmenu-item-focus a { }
-.ui-selectmenu-open li.ui-selectmenu-item-selected { }
.ui-selectmenu-menu li span,.ui-selectmenu-status span { display:block; margin-bottom: .2em; }
.ui-selectmenu-menu li .ui-selectmenu-item-header { font-weight: bold; }
-.ui-selectmenu-menu li .ui-selectmenu-item-content { }
.ui-selectmenu-menu li .ui-selectmenu-item-footer { opacity: .8; }
/* for optgroups */
.ui-selectmenu-menu .ui-selectmenu-group { font-size: 1em; }
diff --git a/ui/jquery.ui.selectmenu.js b/ui/jquery.ui.selectmenu.js
index ed7bdd16d..f3f70b97e 100644
--- a/ui/jquery.ui.selectmenu.js
+++ b/ui/jquery.ui.selectmenu.js
@@ -1,5 +1,5 @@
/*
- * jQuery UI selectmenu version 1.2.0
+ * jQuery UI selectmenu dev version
*
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt)
@@ -17,6 +17,7 @@ $.widget("ui.selectmenu", {
eventPrefix: "selectmenu",
options: {
transferClasses: true,
+ appendTo: "body",
typeAhead: 1000,
style: 'dropdown',
positionOptions: {
@@ -30,8 +31,8 @@ $.widget("ui.selectmenu", {
maxHeight: null,
icons: null,
format: null,
- bgImage: function() {},
- wrapperElement: "<div />"
+ escapeHtml: false,
+ bgImage: function() {}
},
_create: function() {
@@ -57,7 +58,7 @@ $.widget("ui.selectmenu", {
'aria-haspopup': true,
'aria-owns': this.ids[ 2 ]
});
- this.newelementWrap = $( o.wrapperElement )
+ this.newelementWrap = $( "<span />" )
.append( this.newelement )
.insertAfter( this.element );
@@ -131,9 +132,14 @@ $.widget("ui.selectmenu", {
case $.ui.keyCode.TAB:
ret = true;
break;
+ case $.ui.keyCode.PAGE_UP:
case $.ui.keyCode.HOME:
self.index(0);
break;
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.END:
+ self.index(self._optionLis.length);
+ break;
default:
ret = true;
}
@@ -145,15 +151,17 @@ $.widget("ui.selectmenu", {
}
return true;
})
- .bind('mouseover.selectmenu focus.selectmenu', function() {
- if (!o.disabled) {
- $(this).addClass(self.widgetBaseClass + '-focus ui-state-hover');
- }
+ .bind('mouseover.selectmenu', function() {
+ if (!o.disabled) $(this).addClass('ui-state-hover');
})
- .bind('mouseout.selectmenu blur.selectmenu', function() {
- if (!o.disabled) {
- $(this).removeClass(self.widgetBaseClass + '-focus ui-state-hover');
- }
+ .bind('mouseout.selectmenu', function() {
+ if (!o.disabled) $(this).removeClass('ui-state-hover');
+ })
+ .bind('focus.selectmenu', function() {
+ if (!o.disabled) $(this).addClass('ui-state-focus');
+ })
+ .bind('blur.selectmenu', function() {
+ if (!o.disabled) $(this).removeClass('ui-state-focus');
});
// document click closes menu
@@ -194,10 +202,9 @@ $.widget("ui.selectmenu", {
'aria-labelledby': this.ids[1],
'id': this.ids[2]
});
- this.listWrap = $( o.wrapperElement )
- .addClass( self.widgetBaseClass + '-menu' )
- .append( this.list )
- .appendTo( 'body' );
+ this.listWrap = $( "<div />", {
+ 'class': self.widgetBaseClass + '-menu'
+ }).append( this.list ).appendTo( o.appendTo );
// transfer menu click to menu button
this.list
@@ -272,21 +279,19 @@ $.widget("ui.selectmenu", {
// serialize selectmenu element options
var selectOptionData = [];
- this.element
- .find('option')
- .each(function() {
- var opt = $(this);
- selectOptionData.push({
- value: opt.attr('value'),
- text: self._formatText(opt.text()),
- selected: opt.attr('selected'),
- disabled: opt.attr('disabled'),
- classes: opt.attr('class'),
- typeahead: opt.attr('typeahead'),
- parentOptGroup: opt.parent('optgroup'),
- bgImage: o.bgImage.call(opt)
- });
+ this.element.find('option').each(function() {
+ var opt = $(this);
+ selectOptionData.push({
+ value: opt.attr('value'),
+ text: self._formatText(opt.text()),
+ selected: opt.attr('selected'),
+ disabled: opt.attr('disabled'),
+ classes: opt.attr('class'),
+ typeahead: opt.attr('typeahead'),
+ parentOptGroup: opt.parent('optgroup'),
+ bgImage: o.bgImage.call(opt)
});
+ });
// active state class is only used in popup style
var activeClass = (self.options.style == "popup") ? " ui-state-active" : "";
@@ -302,7 +307,7 @@ $.widget("ui.selectmenu", {
thisLiAttr[ 'class' ] = this.namespace + '-state-disabled';
}
var thisAAttr = {
- html: selectOptionData[i].text,
+ html: selectOptionData[i].text || '&nbsp;',
href : '#nogo',
tabindex : -1,
role : 'option',
@@ -419,13 +424,10 @@ $.widget("ui.selectmenu", {
// reset height to auto
this.list.css( 'height', 'auto' );
var listH = this.listWrap.height();
- // calculate default max height
- if ( o.maxHeight && o.maxHeight < listH ) {
- this.list.height( o.maxHeight );
- } else {
- var winH = $( window ).height() / 3;
- if ( winH < listH ) this.list.height( winH );
- }
+ var winH = $( window ).height();
+ // calculate default max height
+ var maxH = o.maxHeight ? Math.min( o.maxHeight, winH ) : winH / 3;
+ if ( listH > maxH ) this.list.height( maxH );
// save reference to actionable li's (not group label li's)
this._optionLis = this.list.find( 'li:not(.' + self.widgetBaseClass + '-group)' );
@@ -439,6 +441,9 @@ $.widget("ui.selectmenu", {
// update value
this.index( this._selectedIndex() );
+
+ // set selected item so movefocus has intial state
+ this._selectedOptionLi().addClass(this.widgetBaseClass + '-item-focus');
// needed when selectmenu is placed at the very bottom / top of the page
clearTimeout(this.refreshTimeout);
@@ -471,7 +476,6 @@ $.widget("ui.selectmenu", {
_typeAhead: function( code, eventType ) {
var self = this,
c = String.fromCharCode(code).toLowerCase(),
- items = this.list.find( 'li a' ),
matchee = null,
nextIndex = null;
@@ -509,11 +513,10 @@ $.widget("ui.selectmenu", {
this._selectedOptionLi().data('index') :
this._focusedOptionLi().data('index')) || 0;
- for (var i = 0; i < items.length; i++) {
- var thisText = items.eq(i).text().substr(0, matchee.length).toLowerCase();
+ for (var i = 0; i < this._optionLis.length; i++) {
+ var thisText = this._optionLis.eq(i).text().substr(0, matchee.length).toLowerCase();
if ( thisText === matchee ) {
-
if ( self._typeAhead_cycling ) {
if ( nextIndex === null )
nextIndex = i;
@@ -533,7 +536,7 @@ $.widget("ui.selectmenu", {
// index? Because we don't what is the exact action to do, it
// depends if the user is typing on the element or on the popped
// up menu
- items.eq(nextIndex).trigger( eventType );
+ this._optionLis.eq(nextIndex).find("a").trigger( eventType );
}
self._typeAhead_timer = window.setTimeout(function() {
@@ -610,6 +613,10 @@ $.widget("ui.selectmenu", {
if (this._disabled(event.currentTarget)) { return false; }
this._trigger("select", event, this._uiHash());
},
+
+ widget: function() {
+ return this.listWrap.add( this.newelementWrap );
+ },
_closeOthers: function(event) {
$('.' + this.widgetBaseClass + '.ui-state-active').not(this.newelement).each(function() {
@@ -625,9 +632,14 @@ $.widget("ui.selectmenu", {
this.open(event);
}
},
-
+
_formatText: function(text) {
- return (this.options.format ? this.options.format(text) : text);
+ if (this.options.format) {
+ text = this.options.format(text);
+ } else if (this.options.escapeHtml) {
+ text = $('<div />').text(text).html();
+ }
+ return text;
},
_selectedIndex: function() {
@@ -663,7 +675,7 @@ $.widget("ui.selectmenu", {
(amt > 0) ? ++amt : --amt;
this._moveSelection(amt, newIndex);
} else {
- return this._optionLis.eq(newIndex).trigger('mouseup');
+ this._optionLis.eq(newIndex).trigger('mouseover').trigger('mouseup');
}
}
},
@@ -702,7 +714,7 @@ $.widget("ui.selectmenu", {
},
_scrollPage: function(direction) {
- var numPerPage = Math.floor(this.list.outerHeight() / this.list.find('li:first').outerHeight());
+ var numPerPage = Math.floor(this.list.outerHeight() / this._optionLis.first().outerHeight());
numPerPage = (direction == 'up' ? -numPerPage : numPerPage);
this._moveFocus(numPerPage);
},
@@ -852,7 +864,6 @@ $.widget("ui.selectmenu", {
var selected = this._selectedOptionLi();
var _offset = "0 " + ( this.list.offset().top - selected.offset().top - ( this.newelement.outerHeight() + selected.outerHeight() ) / 2);
}
- // update zIndex if jQuery UI is able to process
this.listWrap
.zIndex( this.element.zIndex() + 1 )
.position({
@@ -861,7 +872,7 @@ $.widget("ui.selectmenu", {
my: o.positionOptions.my,
at: o.positionOptions.at,
offset: o.positionOptions.offset || _offset,
- collision: o.positionOptions.collision || 'flip'
+ collision: o.positionOptions.collision || o.style == "popup" ? 'fit' :'flip'
});
}
});