r2794 - moved _selectOptions method into init and refactored it

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;