From f7a29fc2011cc0804351f81b79f207c5d04fc431 Mon Sep 17 00:00:00 2001 From: scottjehl Date: Mon, 8 Nov 2010 19:33:45 -0500 Subject: [PATCH] converted selectmenu widget to the widget factory. --- js/jquery.mobile.forms.select.js | 114 ++++++++++++++++--------------- js/jquery.mobile.page.js | 2 +- 2 files changed, 60 insertions(+), 56 deletions(-) diff --git a/js/jquery.mobile.forms.select.js b/js/jquery.mobile.forms.select.js index 28eb927d..6821c3a2 100644 --- a/js/jquery.mobile.forms.select.js +++ b/js/jquery.mobile.forms.select.js @@ -4,63 +4,60 @@ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. * Note: Code is in draft form and is subject to change */ -(function($){ -$.fn.customSelect = function(options){ - return $(this).each(function(){ - var select = $(this) +(function ( $ ) { +$.widget( "mobile.selectmenu", $.mobile.widget, { + options: { + theme: undefined + }, + _create: function(){ + var select = this.element .attr( "tabindex", "-1" ) .wrap( "
" ), selectID = select.attr( "id" ), label = $( "label[for="+ selectID +"]" ) .addClass( "ui-select" ), - - //extendable options - o = $.extend({ - chooseText: label.text(), - theme: select.data("theme") - }, options), - - buttonId = selectID + "-button", - menuId = selectID + "-menu", - thisPage = select.closest( ".ui-page" ), - menuType, - currScroll, - button = $( "", { - "href": "#", - "role": "button", - "id": buttonId, - "aria-haspopup": "true", - "aria-owns": menuId - }) - .text( $( this.options.item(this.selectedIndex) ).text() ) - .insertBefore( select ) - .buttonMarkup({ - iconpos: 'right', - icon: 'arrow-d', - theme: o.theme - }), - menuPage = $( "
" + - "
" + - "
" + o.chooseText + "
"+ - "
"+ - "
"+ - "
" ) - .appendTo( $.pageContainer ) - .page(), - menuPageContent = menuPage.find( ".ui-content" ), - screen = $( "
", { - "class": "ui-listbox-screen ui-overlay ui-screen-hidden fade" + chooseText = label.text(), + buttonId = selectID + "-button", + menuId = selectID + "-menu", + thisPage = select.closest( ".ui-page" ), + menuType, + currScroll, + button = $( "", { + "href": "#", + "role": "button", + "id": buttonId, + "aria-haspopup": "true", + "aria-owns": menuId }) - .appendTo( thisPage ), - listbox = $( "
", { "class": "ui-listbox ui-listbox-hidden ui-body-a ui-overlay-shadow ui-corner-all pop"} ) - .insertAfter(screen), - list = $( "
    ", { - "class": "ui-listbox-list", - "id": menuId, - "role": "listbox", - "aria-labelledby": buttonId - }) - .appendTo( listbox ); + .text( $( select[0].options.item(select[0].selectedIndex) ).text() ) + .insertBefore( select ) + .buttonMarkup({ + iconpos: 'right', + icon: 'arrow-d', + theme: this.options.theme + }), + menuPage = $( "
    " + + "
    " + + "
    " + chooseText + "
    "+ + "
    "+ + "
    "+ + "
    " ) + .appendTo( $.pageContainer ) + .page(), + menuPageContent = menuPage.find( ".ui-content" ), + screen = $( "
    ", { + "class": "ui-listbox-screen ui-overlay ui-screen-hidden fade" + }) + .appendTo( thisPage ), + listbox = $( "
    ", { "class": "ui-listbox ui-listbox-hidden ui-body-a ui-overlay-shadow ui-corner-all pop"} ) + .insertAfter(screen), + list = $( "
      ", { + "class": "ui-listbox-list", + "id": menuId, + "role": "listbox", + "aria-labelledby": buttonId + }) + .appendTo( listbox ); //populate menu select.find( "option" ).each(function( i ){ @@ -192,8 +189,15 @@ $.fn.customSelect = function(options){ hidemenu(); return false; }); - }); -}; - -})(jQuery); + }, + + disable: function(){ + this.element.attr("disabled",true); + }, + + enable: function(){ + this.element.attr("disabled",false); + } +}); +})( jQuery ); diff --git a/js/jquery.mobile.page.js b/js/jquery.mobile.page.js index 0c62a65f..7f4ea9cf 100644 --- a/js/jquery.mobile.page.js +++ b/js/jquery.mobile.page.js @@ -165,7 +165,7 @@ jQuery.widget( "mobile.page", jQuery.mobile.widget, { this.element .find( "select:not([data-role='slider'])" ) - .customSelect(); + .selectmenu(); } });