r2794 - moved _selectOptions method into init and refactored it
Author: scottjehl
Date: Tue Jun 16 14:49:23 2009
New Revision: 2794
Modified:
branches/labs/selectmenu/ui.selectmenu.js
Log:
moved _selectOptions method into init and refactored it
Modified: branches/labs/selectmenu/ui.selectmenu.js
==============================================================================
--- branches/labs/selectmenu/ui.selectmenu.js (original)
+++ branches/labs/selectmenu/ui.selectmenu.js Tue Jun 16 14:49:23 2009
@@ -109,18 +109,29 @@
var cornerClass = (o.style == "dropdown")? " ui-corner-bottom" : "
ui-corner-all"
this.list = $('<ul class="' + self.widgetBaseClass + '-menu ui-widget
ui-widget-content'+cornerClass+'" role="menu"
aria-labelledby="'+this.ids[0]+'"
id="'+this.ids[1]+'"></ul>').appendTo('body');
- //get selectmenu element option data
- var s_options = this._selectOptions();
-
+ //serialize selectmenu element options
+ var selectOptionData = [];
+ this.element
+ .find('option')
+ .each(function(){
+ selectOptionData.push({
+ value: $(this).attr('value'),
+ text: self._formatText(jQuery(this).text()),
+ selected: $(this).attr('selected'),
+ classes: $(this).attr('class'),
+ parentOptGroup: $(this).parent('optgroup').attr('label')
+ });
+ });
+
//active state class is only used in popup style
var activeClass = (self.options.style == "popup") ? "
ui-state-active" : "";
//write li's
- for(var i in s_options){
- var thisLi = $('<li><a href="#" tabindex="-1" role="option"
aria-selected="false">'+ s_options[i].text +'</a></li>')
+ for(var i in selectOptionData){
+ var thisLi = $('<li><a href="#" tabindex="-1" role="option"
aria-selected="false">'+ selectOptionData[i].text +'</a></li>')
.data('index',i)
- .addClass(s_options[i].classes)
- .data('optionClasses', s_options[i].classes)
+ .addClass(selectOptionData[i].classes)
+ .data('optionClasses', selectOptionData[i].classes)
.mouseup(function(event){
self.value($(this).data('index'));
if(self._safemouseup){
@@ -146,13 +157,13 @@
});
//optgroup or not...
- if(s_options[i].parentOptGroup){
- var optGroupName = self.widgetBaseClass + '-group-' +
s_options[i].parentOptGroup;
+ if(selectOptionData[i].parentOptGroup){
+ var optGroupName = self.widgetBaseClass + '-group-' +
selectOptionData[i].parentOptGroup;
if(this.list.find('li.' + optGroupName).size()){
this.list.find('li.' + optGroupName + ':last ul').append(thisLi);
}
else{
- $('<li class="'+self.widgetBaseClass+'-group '+optGroupName+'"><span
class="'+self.widgetBaseClass+'-group-label">'+s_options[i].parentOptGroup+'</span><ul></ul></li>')
+ $('<li class="'+self.widgetBaseClass+'-group '+optGroupName+'"><span
class="'+self.widgetBaseClass+'-group-label">'+selectOptionData[i].parentOptGroup+'</span><ul></ul></li>')
.appendTo(this.list)
.find('ul')
.append(thisLi);
@@ -170,7 +181,7 @@
for(var j in o.icons){
if(thisLi.is(o.icons[j].find)){
thisLi
- .data('optionClasses', s_options[i].classes + ' ' +
self.widgetBaseClass + '-hasIcon')
+ .data('optionClasses', selectOptionData[i].classes + ' ' +
self.widgetBaseClass + '-hasIcon')
.addClass(self.widgetBaseClass + '-hasIcon');
var iconClass = o.icons[j].icon || "";
@@ -276,7 +287,7 @@
}
//append status span to button
- this.newelement.prepend('<span
class="'+self.widgetBaseClass+'-status">'+
s_options[this._selectedIndex()].text +'</span>');
+ this.newelement.prepend('<span
class="'+self.widgetBaseClass+'-status">'+
selectOptionData[this._selectedIndex()].text +'</span>');
//hide original selectmenu element
this.element.hide();
@@ -367,21 +378,6 @@
}
}
return newText;
- },
- _selectOptions: function(){
- var opts = [];
- var self = this;
- //this should use map
- this.element.find('option').each(function(i){
- opts.push({
- value: jQuery(this).attr('value'),
- text: self._formatText(jQuery(this).text()),
- selected: (i == self._selectedIndex()),
- classes: jQuery(this).attr('class'),
- parentOptGroup: $(this).parent('optgroup').attr('label')
- });
- });
- return opts;
},
_selectedIndex: function(){
return this.element[0].selectedIndex;