Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.

Commit b0a802d

Browse files
author
Gabriel Schulhof
committed
[custom select menu] Give IDs to the popup and the dialog, and open popup/dialog via nav -- Fixes #5254
1 parent e61c92f commit b0a802d

File tree

1 file changed

+21
-28
lines changed

1 file changed

+21
-28
lines changed

js/widgets/forms/select.custom.js

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,23 @@ define( [
2727
var select = widget.select,
2828
origDestroy = widget._destroy,
2929
selectID = widget.selectID,
30+
prefix = ( selectID ? selectID : ( ( $.mobile.ns || "" ) + "uuid-" + widget.uuid ) ),
31+
popupID = prefix + "-listbox",
32+
dialogID = prefix + "-dialog",
3033
label = widget.label,
3134
thisPage = widget.select.closest( ".ui-page" ),
3235
selectOptions = widget._selectOptions(),
3336
isMultiple = widget.isMultiple = widget.select[ 0 ].multiple,
3437
buttonId = selectID + "-button",
3538
menuId = selectID + "-menu",
36-
menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" +
39+
menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' id='" + dialogID + "' data-" +$.mobile.ns + "theme='"+ widget.options.theme +"' data-" +$.mobile.ns + "overlay-theme='"+ widget.options.overlayTheme +"'>" +
3740
"<div data-" + $.mobile.ns + "role='header'>" +
3841
"<div class='ui-title'>" + label.getEncodedText() + "</div>"+
3942
"</div>"+
4043
"<div data-" + $.mobile.ns + "role='content'></div>"+
4144
"</div>" ),
4245

43-
listbox = $( "<div>", { "class": "ui-selectmenu" } ).insertAfter( widget.select ).popup( { theme: widget.options.overlayTheme } ),
46+
listbox = $( "<div id='" + popupID + "' class='ui-selectmenu'>" ).insertAfter( widget.select ).popup( { theme: widget.options.overlayTheme } ),
4447

4548
list = $( "<ul>", {
4649
"class": "ui-selectmenu-list",
@@ -77,6 +80,8 @@ define( [
7780
selectID: selectID,
7881
buttonId: buttonId,
7982
menuId: menuId,
83+
popupID: popupID,
84+
dialogID: dialogID,
8085
thisPage: thisPage,
8186
menuPage: menuPage,
8287
label: label,
@@ -120,8 +125,14 @@ define( [
120125
event.keyCode && (event.keyCode === $.mobile.keyCode.ENTER ||
121126
event.keyCode === $.mobile.keyCode.SPACE)) {
122127

123-
self.open();
124-
event.preventDefault();
128+
self._decideFormat();
129+
if ( self.menuType === "overlay" ) {
130+
self.button.attr( "href", "#" + self.popupID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" );
131+
} else {
132+
self.button.attr( "href", "#" + self.dialogID ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" );
133+
}
134+
self.isOpen = true;
135+
// Do not prevent default, so the navigation may have a chance to actually open the chosen format
125136
}
126137
});
127138

@@ -327,10 +338,7 @@ define( [
327338
var self = this;
328339

329340
if ( self.menuType === "page" ) {
330-
// doesn't solve the possible issue with calling change page
331-
// where the objects don't define data urls which prevents dialog key
332-
// stripping - changePage has incoming refactor
333-
$.mobile.back();
341+
self.menuPage.dialog( "close" );
334342
} else {
335343
self.listbox.popup( "close" );
336344
self.list.appendTo( self.listbox );
@@ -342,6 +350,10 @@ define( [
342350
},
343351

344352
open: function() {
353+
this.button.click();
354+
},
355+
356+
_decideFormat: function() {
345357
if ( this.options.disabled ) {
346358
return;
347359
}
@@ -357,14 +369,6 @@ define( [
357369
screenHeight = $window.height(),
358370
screenWidth = $window.width();
359371

360-
//add active class to button
361-
self.button.addClass( $.mobile.activeBtnClass );
362-
363-
//remove after delay
364-
setTimeout( function() {
365-
self.button.removeClass( $.mobile.activeBtnClass );
366-
}, 300);
367-
368372
function focusMenuItem() {
369373
var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" );
370374
if ( selector.length === 0 ) {
@@ -403,21 +407,10 @@ define( [
403407
self.menuType = "page";
404408
self.menuPageContent.append( self.list );
405409
self.menuPage.find("div .ui-title").text(self.label.text());
406-
$.mobile.changePage( self.menuPage, {
407-
transition: $.mobile.defaultDialogTransition
408-
});
409410
} else {
410411
self.menuType = "overlay";
411412

412-
self.listbox
413-
.one( "popupafteropen", focusMenuItem )
414-
.popup( "open", {
415-
x: self.button.offset().left + self.button.outerWidth() / 2,
416-
y: self.button.offset().top + self.button.outerHeight() / 2
417-
});
418-
419-
// duplicate with value set in page show for dialog sized selects
420-
self.isOpen = true;
413+
self.listbox.one( "popupafteropen", focusMenuItem );
421414
}
422415
},
423416

0 commit comments

Comments
 (0)