jquery_mobile_rails 1.4.0.beta.1 → 1.4.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jquery_mobile_rails/version.rb +1 -1
- data/vendor/assets/javascripts/jquery.mobile.js +1108 -921
- data/vendor/assets/javascripts/jquery.mobile.min.js +9 -8
- data/vendor/assets/stylesheets/jquery.mobile.css.scss +147 -131
- data/vendor/assets/stylesheets/jquery.mobile.min.css.scss +2 -2
- data/vendor/assets/stylesheets/jquery.mobile.structure.css.scss +70 -52
- data/vendor/assets/stylesheets/jquery.mobile.structure.min.css.scss +2 -2
- data/vendor/assets/stylesheets/jquery.mobile.theme.css.scss +72 -75
- data/vendor/assets/stylesheets/jquery.mobile.theme.min.css.scss +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2849c0fcb907b563114d84298a3e2f93fefb3749
|
4
|
+
data.tar.gz: a211a49324cf75aee28972e1c199aead19b30f57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80e51369a07979616d974dcc3a1bb15157b065b0bc741be99967bdcc5e05fcd156d0b54cf9261ba433682bbaa2407b3abaf20d593ccaba875819461a8b3ba36d
|
7
|
+
data.tar.gz: 9f3affaceb0252b28b41ecc57730eb9675ad757063d17598ab825665407c45ca5d8e52fc536e76b2917cf19fe6afb9d4566b9eca9622a9fda59e3328a77015fe
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*!
|
2
|
-
* jQuery Mobile 1.4.0-
|
3
|
-
* Git HEAD hash:
|
2
|
+
* jQuery Mobile 1.4.0-rc.1
|
3
|
+
* Git HEAD hash: 4b6462bccfe0e4fc3337bd24f17c76c6b5cb0e62 <> Date: Thu Oct 24 2013 20:08:54 UTC
|
4
4
|
* http://jquerymobile.com
|
5
5
|
*
|
6
6
|
* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
|
@@ -25,11 +25,12 @@
|
|
25
25
|
(function( $ ) {
|
26
26
|
$.mobile = {};
|
27
27
|
}( jQuery ));
|
28
|
+
|
28
29
|
(function( $, window, undefined ) {
|
29
30
|
$.extend( $.mobile, {
|
30
31
|
|
31
32
|
// Version of the jQuery Mobile Framework
|
32
|
-
version: "1.4.0-
|
33
|
+
version: "1.4.0-rc.1",
|
33
34
|
|
34
35
|
// Deprecated and no longer used in 1.4 remove in 1.5
|
35
36
|
// Define the url parameter used for referencing widget-generated sub-pages.
|
@@ -70,12 +71,9 @@
|
|
70
71
|
maxTransitionWidth: false,
|
71
72
|
|
72
73
|
// Minimum scroll distance that will be remembered when returning to a page
|
73
|
-
// Deprecated remove in 1.5
|
74
|
+
// Deprecated remove in 1.5
|
74
75
|
minScrollBack: 0,
|
75
76
|
|
76
|
-
// DEPRECATED: the following property is no longer in use, but defined until 2.0 to prevent conflicts
|
77
|
-
touchOverflowEnabled: false,
|
78
|
-
|
79
77
|
// Set default dialog transition - 'none' for no transitions
|
80
78
|
defaultDialogTransition: "pop",
|
81
79
|
|
@@ -135,7 +133,7 @@
|
|
135
133
|
|
136
134
|
element = element.jquery ? element[0] : element;
|
137
135
|
|
138
|
-
if( element && element.getAttribute ){
|
136
|
+
if ( element && element.getAttribute ) {
|
139
137
|
data = element.getAttribute( "data-" + $.mobile.ns + key );
|
140
138
|
}
|
141
139
|
|
@@ -189,7 +187,7 @@
|
|
189
187
|
|
190
188
|
// undefined is permitted as an explicit input for the second param
|
191
189
|
// in this case it returns the value and does not set it to undefined
|
192
|
-
if ( arguments.length < 2 || value === undefined ){
|
190
|
+
if ( arguments.length < 2 || value === undefined ) {
|
193
191
|
result = this.data( prop );
|
194
192
|
} else {
|
195
193
|
result = this.data( prop, value );
|
@@ -685,7 +683,9 @@ $.ui.plugin = {
|
|
685
683
|
|
686
684
|
// Enhance child elements
|
687
685
|
enhanceWithin: function() {
|
688
|
-
var
|
686
|
+
var index,
|
687
|
+
widgetElements = {},
|
688
|
+
keepNative = $.mobile.page.prototype.keepNativeSelector(),
|
689
689
|
that = this;
|
690
690
|
|
691
691
|
// Add no js class to elements
|
@@ -705,12 +705,14 @@ $.ui.plugin = {
|
|
705
705
|
|
706
706
|
// Run buttonmarkup
|
707
707
|
if ( $.fn.buttonMarkup ) {
|
708
|
-
|
708
|
+
this.find( $.fn.buttonMarkup.initSelector ).not( keepNative )
|
709
|
+
.jqmEnhanceable().buttonMarkup();
|
709
710
|
}
|
710
711
|
|
711
712
|
// Add classes for fieldContain
|
712
713
|
if ( $.fn.fieldcontain ) {
|
713
|
-
this.find( ":jqmData(role='fieldcontain')" ).
|
714
|
+
this.find( ":jqmData(role='fieldcontain')" ).not( keepNative )
|
715
|
+
.jqmEnhanceable().fieldcontain();
|
714
716
|
}
|
715
717
|
|
716
718
|
// Enhance widgets
|
@@ -720,21 +722,27 @@ $.ui.plugin = {
|
|
720
722
|
if ( constructor.initSelector ) {
|
721
723
|
|
722
724
|
// Filter elements that should not be enhanced based on parents
|
723
|
-
|
725
|
+
var elements = $.mobile.enhanceable( that.find( constructor.initSelector ) );
|
724
726
|
|
725
727
|
// If any matching elements remain filter ones with keepNativeSelector
|
726
|
-
if (
|
728
|
+
if ( elements.length > 0 ) {
|
727
729
|
|
728
730
|
// $.mobile.page.prototype.keepNativeSelector is deprecated this is just for backcompat
|
729
731
|
// Switch to $.mobile.keepNative in 1.5 which is just a value not a function
|
730
|
-
|
732
|
+
elements = elements.not( keepNative );
|
731
733
|
}
|
732
734
|
|
733
735
|
// Enhance whatever is left
|
734
|
-
|
736
|
+
if ( elements.length > 0 ) {
|
737
|
+
widgetElements[ constructor.prototype.widgetName ] = elements;
|
738
|
+
}
|
735
739
|
}
|
736
740
|
});
|
737
741
|
|
742
|
+
for ( index in widgetElements ) {
|
743
|
+
widgetElements[ index ][ index ]();
|
744
|
+
}
|
745
|
+
|
738
746
|
return this;
|
739
747
|
},
|
740
748
|
|
@@ -1321,9 +1329,10 @@ $.extend( $.Widget.prototype, {
|
|
1321
1329
|
options = {};
|
1322
1330
|
|
1323
1331
|
//
|
1324
|
-
if( !$.mobile.getAttribute( elem, "defaults" ) ){
|
1332
|
+
if ( !$.mobile.getAttribute( elem, "defaults" ) ) {
|
1325
1333
|
for ( option in this.options ) {
|
1326
1334
|
value = $.mobile.getAttribute( elem, option.replace( rcapitals, replaceFunction ) );
|
1335
|
+
|
1327
1336
|
if ( value != null ) {
|
1328
1337
|
options[ option ] = value;
|
1329
1338
|
}
|
@@ -1936,7 +1945,6 @@ var fakeBody = $( "<body>" ).prependTo( "html" ),
|
|
1936
1945
|
bb = window.blackberry && !propExists( "-webkit-transform" ), //only used to rule out box shadow, as it's filled opaque on BB 5 and lower
|
1937
1946
|
nokiaLTE7_3;
|
1938
1947
|
|
1939
|
-
|
1940
1948
|
function validStyle( prop, value, check_vend ) {
|
1941
1949
|
var div = document.createElement( "div" ),
|
1942
1950
|
uc = function( txt ) {
|
@@ -2010,7 +2018,7 @@ function transform3dTest() {
|
|
2010
2018
|
fakeBody.append( el );
|
2011
2019
|
|
2012
2020
|
for ( t in transforms ) {
|
2013
|
-
if ( el.style[ t ] !== undefined ){
|
2021
|
+
if ( el.style[ t ] !== undefined ) {
|
2014
2022
|
el.style[ t ] = "translate3d( 100px, 1px, 1px )";
|
2015
2023
|
ret = window.getComputedStyle( el ).getPropertyValue( transforms[ t ] );
|
2016
2024
|
}
|
@@ -2148,7 +2156,6 @@ $.extend( $.support, {
|
|
2148
2156
|
|
2149
2157
|
fakeBody.remove();
|
2150
2158
|
|
2151
|
-
|
2152
2159
|
// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian)
|
2153
2160
|
// or that generally work better browsing in regular http for full page refreshes (Opera Mini)
|
2154
2161
|
// Note: This detection below is used as a last resort.
|
@@ -2240,11 +2247,11 @@ if ( !$.support.boxShadow ) {
|
|
2240
2247
|
beforeNavigate.originalEvent = event;
|
2241
2248
|
$win.trigger( beforeNavigate );
|
2242
2249
|
|
2243
|
-
if ( beforeNavigate.isDefaultPrevented() ){
|
2250
|
+
if ( beforeNavigate.isDefaultPrevented() ) {
|
2244
2251
|
return;
|
2245
2252
|
}
|
2246
2253
|
|
2247
|
-
if ( event.historyState ){
|
2254
|
+
if ( event.historyState ) {
|
2248
2255
|
$.extend(state, event.historyState);
|
2249
2256
|
}
|
2250
2257
|
|
@@ -2270,7 +2277,7 @@ if ( !$.support.boxShadow ) {
|
|
2270
2277
|
beforeNavigate.originalEvent = event;
|
2271
2278
|
$win.trigger( beforeNavigate );
|
2272
2279
|
|
2273
|
-
if ( beforeNavigate.isDefaultPrevented() ){
|
2280
|
+
if ( beforeNavigate.isDefaultPrevented() ) {
|
2274
2281
|
return;
|
2275
2282
|
}
|
2276
2283
|
|
@@ -2303,7 +2310,7 @@ if ( !$.support.boxShadow ) {
|
|
2303
2310
|
if ( self.isPushStateEnabled() ) {
|
2304
2311
|
self.originalEventName = "popstate";
|
2305
2312
|
$win.bind( "popstate.navigate", self.popstate );
|
2306
|
-
} else if ( self.isHashChangeEnabled() ){
|
2313
|
+
} else if ( self.isHashChangeEnabled() ) {
|
2307
2314
|
self.originalEventName = "hashchange";
|
2308
2315
|
$win.bind( "hashchange.navigate", self.hashchange );
|
2309
2316
|
}
|
@@ -2597,7 +2604,7 @@ if ( !$.support.boxShadow ) {
|
|
2597
2604
|
stateIndex = cleanedUrl.indexOf( this.uiStateKey );
|
2598
2605
|
|
2599
2606
|
// store the ui state keys for use
|
2600
|
-
if ( stateIndex > -1 ){
|
2607
|
+
if ( stateIndex > -1 ) {
|
2601
2608
|
uiState = cleanedUrl.slice( stateIndex );
|
2602
2609
|
cleanedUrl = cleanedUrl.slice( 0, stateIndex );
|
2603
2610
|
}
|
@@ -2618,12 +2625,12 @@ if ( !$.support.boxShadow ) {
|
|
2618
2625
|
|
2619
2626
|
// Append the UI State keys where it exists and it's been removed
|
2620
2627
|
// from the url
|
2621
|
-
if ( uiState && preservedHash.indexOf( this.uiStateKey ) === -1){
|
2628
|
+
if ( uiState && preservedHash.indexOf( this.uiStateKey ) === -1) {
|
2622
2629
|
preservedHash += uiState;
|
2623
2630
|
}
|
2624
2631
|
|
2625
2632
|
// make sure that pound is on the front of the hash
|
2626
|
-
if ( preservedHash.indexOf( "#" ) === -1 && preservedHash !== "" ){
|
2633
|
+
if ( preservedHash.indexOf( "#" ) === -1 && preservedHash !== "" ) {
|
2627
2634
|
preservedHash = "#" + preservedHash;
|
2628
2635
|
}
|
2629
2636
|
|
@@ -2749,7 +2756,7 @@ if ( !$.support.boxShadow ) {
|
|
2749
2756
|
},
|
2750
2757
|
|
2751
2758
|
// addNew is used whenever a new page is added
|
2752
|
-
add: function( url, data ){
|
2759
|
+
add: function( url, data ) {
|
2753
2760
|
data = data || {};
|
2754
2761
|
|
2755
2762
|
//if there's forward history, wipe it
|
@@ -2836,7 +2843,7 @@ if ( !$.support.boxShadow ) {
|
|
2836
2843
|
( opts.present || opts.back || $.noop )( this.getActive(), "back" );
|
2837
2844
|
} else if ( newActiveIndex > a ) {
|
2838
2845
|
( opts.present || opts.forward || $.noop )( this.getActive(), "forward" );
|
2839
|
-
} else if ( newActiveIndex === undefined && opts.missing ){
|
2846
|
+
} else if ( newActiveIndex === undefined && opts.missing ) {
|
2840
2847
|
opts.missing( this.getActive() );
|
2841
2848
|
}
|
2842
2849
|
}
|
@@ -2844,6 +2851,7 @@ if ( !$.support.boxShadow ) {
|
|
2844
2851
|
})( jQuery );
|
2845
2852
|
|
2846
2853
|
|
2854
|
+
|
2847
2855
|
(function( $, undefined ) {
|
2848
2856
|
var path = $.mobile.path,
|
2849
2857
|
initialHref = location.href;
|
@@ -2980,7 +2988,6 @@ if ( !$.support.boxShadow ) {
|
|
2980
2988
|
this.history.add( state.url, state );
|
2981
2989
|
},
|
2982
2990
|
|
2983
|
-
|
2984
2991
|
// This binding is intended to catch the popstate events that are fired
|
2985
2992
|
// when execution of the `$.navigate` method stops at window.location.hash = url;
|
2986
2993
|
// and completely prevent them from propagating. The popstate event will then be
|
@@ -2993,7 +3000,7 @@ if ( !$.support.boxShadow ) {
|
|
2993
3000
|
|
2994
3001
|
// Partly to support our test suite which manually alters the support
|
2995
3002
|
// value to test hashchange. Partly to prevent all around weirdness
|
2996
|
-
if ( !$.event.special.navigate.isPushStateEnabled() ){
|
3003
|
+
if ( !$.event.special.navigate.isPushStateEnabled() ) {
|
2997
3004
|
return;
|
2998
3005
|
}
|
2999
3006
|
|
@@ -3085,7 +3092,7 @@ if ( !$.support.boxShadow ) {
|
|
3085
3092
|
|
3086
3093
|
// On occasion explicitly want to prevent the next hash from propogating because we only
|
3087
3094
|
// with to alter the url to represent the new state do so here
|
3088
|
-
if ( this.preventNextHashChange ){
|
3095
|
+
if ( this.preventNextHashChange ) {
|
3089
3096
|
this.preventNextHashChange = false;
|
3090
3097
|
event.stopImmediatePropagation();
|
3091
3098
|
return;
|
@@ -3412,7 +3419,6 @@ function handleTouchMove( event ) {
|
|
3412
3419
|
( Math.abs( t.pageX - startX ) > moveThreshold ||
|
3413
3420
|
Math.abs( t.pageY - startY ) > moveThreshold );
|
3414
3421
|
|
3415
|
-
|
3416
3422
|
if ( didScroll && !didCancel ) {
|
3417
3423
|
triggerVirtualEvent( "vmousecancel", event, flags );
|
3418
3424
|
}
|
@@ -3611,7 +3617,7 @@ if ( eventCaptureSupported ) {
|
|
3611
3617
|
//
|
3612
3618
|
// Because the target of the touch event that triggered the vclick
|
3613
3619
|
// can be different from the target of the click event synthesized
|
3614
|
-
// by the browser. The target of a mouse/click event that is
|
3620
|
+
// by the browser. The target of a mouse/click event that is synthesized
|
3615
3621
|
// from a touch event seems to be implementation specific. For example,
|
3616
3622
|
// some browsers will fire mouse/click events for a link that is near
|
3617
3623
|
// a touch event, even though the target of the touchstart/touchend event
|
@@ -3841,7 +3847,7 @@ if ( eventCaptureSupported ) {
|
|
3841
3847
|
}
|
3842
3848
|
|
3843
3849
|
stop = $.event.special.swipe.stop( event );
|
3844
|
-
if ( !emitted ){
|
3850
|
+
if ( !emitted ) {
|
3845
3851
|
emitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget );
|
3846
3852
|
}
|
3847
3853
|
// prevent scrolling
|
@@ -3919,6 +3925,7 @@ if ( eventCaptureSupported ) {
|
|
3919
3925
|
diff;
|
3920
3926
|
})( jQuery );
|
3921
3927
|
|
3928
|
+
|
3922
3929
|
(function( $, window ) {
|
3923
3930
|
var win = $( window ),
|
3924
3931
|
event_name = "orientationchange",
|
@@ -3963,7 +3970,6 @@ if ( eventCaptureSupported ) {
|
|
3963
3970
|
|
3964
3971
|
initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
|
3965
3972
|
|
3966
|
-
|
3967
3973
|
// Now check to see if the current window.orientation is 0 or 180.
|
3968
3974
|
initial_orientation_is_default = portrait_map[ window.orientation ];
|
3969
3975
|
|
@@ -4006,7 +4012,6 @@ if ( eventCaptureSupported ) {
|
|
4006
4012
|
// Save a reference to the bound event handler.
|
4007
4013
|
var old_handler = handleObj.handler;
|
4008
4014
|
|
4009
|
-
|
4010
4015
|
handleObj.handler = function( event ) {
|
4011
4016
|
// Modify event object, adding the .orientation property.
|
4012
4017
|
event.orientation = get_orientation();
|
@@ -4127,6 +4132,7 @@ if ( eventCaptureSupported ) {
|
|
4127
4132
|
|
4128
4133
|
})( jQuery );
|
4129
4134
|
|
4135
|
+
|
4130
4136
|
(function( $, undefined ) {
|
4131
4137
|
$.mobile.widgets = {};
|
4132
4138
|
|
@@ -4154,7 +4160,7 @@ $.widget = (function( orig ) {
|
|
4154
4160
|
$.extend( $.widget, originalWidget );
|
4155
4161
|
|
4156
4162
|
// For backcompat remove in 1.5
|
4157
|
-
$.mobile.document.on( "create", function( event ){
|
4163
|
+
$.mobile.document.on( "create", function( event ) {
|
4158
4164
|
$( event.target ).enhanceWithin();
|
4159
4165
|
});
|
4160
4166
|
|
@@ -4165,6 +4171,8 @@ $.widget( "mobile.page", {
|
|
4165
4171
|
|
4166
4172
|
// Deprecated in 1.4 remove in 1.5
|
4167
4173
|
keepNativeDefault: $.mobile.keepNative,
|
4174
|
+
|
4175
|
+
// Deprecated in 1.4 remove in 1.5
|
4168
4176
|
contentTheme: null,
|
4169
4177
|
enhanced: false
|
4170
4178
|
},
|
@@ -4193,12 +4201,12 @@ $.widget( "mobile.page", {
|
|
4193
4201
|
|
4194
4202
|
this.element.enhanceWithin();
|
4195
4203
|
// Dialog widget is deprecated in 1.4 remove this in 1.5
|
4196
|
-
if( $.mobile.getAttribute( this.element[0], "role" ) === "dialog" && $.mobile.dialog ){
|
4204
|
+
if ( $.mobile.getAttribute( this.element[0], "role" ) === "dialog" && $.mobile.dialog ) {
|
4197
4205
|
this.element.dialog();
|
4198
4206
|
}
|
4199
4207
|
},
|
4200
4208
|
|
4201
|
-
_enhance: function (){
|
4209
|
+
_enhance: function () {
|
4202
4210
|
var attrPrefix = "data-" + $.mobile.ns,
|
4203
4211
|
self = this;
|
4204
4212
|
|
@@ -4232,14 +4240,18 @@ $.widget( "mobile.page", {
|
|
4232
4240
|
page.is( ":jqmData(external-page='true')" ) ) {
|
4233
4241
|
|
4234
4242
|
// TODO use _on - that is, sort out why it doesn't work in this case
|
4235
|
-
page.bind( "pagehide.remove", callback || function(
|
4236
|
-
|
4237
|
-
|
4243
|
+
page.bind( "pagehide.remove", callback || function( e, data ) {
|
4244
|
+
|
4245
|
+
//check if this is a same page transition and if so don't remove the page
|
4246
|
+
if( !data.samePage ){
|
4247
|
+
var $this = $( this ),
|
4248
|
+
prEvent = new $.Event( "pageremove" );
|
4238
4249
|
|
4239
|
-
|
4250
|
+
$this.trigger( prEvent );
|
4240
4251
|
|
4241
|
-
|
4242
|
-
|
4252
|
+
if ( !prEvent.isDefaultPrevented() ) {
|
4253
|
+
$this.removeWithDependents();
|
4254
|
+
}
|
4243
4255
|
}
|
4244
4256
|
});
|
4245
4257
|
}
|
@@ -4330,7 +4342,7 @@ $.widget( "mobile.page", {
|
|
4330
4342
|
}, this));
|
4331
4343
|
},
|
4332
4344
|
|
4333
|
-
_setOptions: function( options ){
|
4345
|
+
_setOptions: function( options ) {
|
4334
4346
|
if ( options.theme !== undefined && options.theme !== "none" ) {
|
4335
4347
|
this.element.removeClass( "ui-overlay-" + this.options.theme )
|
4336
4348
|
.addClass( "ui-overlay-" + options.theme );
|
@@ -4414,7 +4426,7 @@ $.widget( "mobile.page", {
|
|
4414
4426
|
url = this._getHash();
|
4415
4427
|
}
|
4416
4428
|
|
4417
|
-
if ( !url || url === "#" || url.indexOf( "#" + $.mobile.path.uiStateKey ) === 0 ){
|
4429
|
+
if ( !url || url === "#" || url.indexOf( "#" + $.mobile.path.uiStateKey ) === 0 ) {
|
4418
4430
|
url = location.href;
|
4419
4431
|
}
|
4420
4432
|
|
@@ -4451,12 +4463,34 @@ $.widget( "mobile.page", {
|
|
4451
4463
|
return $.mobile.path.documentBase;
|
4452
4464
|
},
|
4453
4465
|
|
4454
|
-
|
4455
|
-
|
4466
|
+
back: function() {
|
4467
|
+
this.go( -1 );
|
4468
|
+
},
|
4469
|
+
|
4470
|
+
forward: function() {
|
4471
|
+
this.go( 1 );
|
4456
4472
|
},
|
4457
4473
|
|
4458
|
-
|
4459
|
-
|
4474
|
+
go: function( steps ) {
|
4475
|
+
|
4476
|
+
//if hashlistening is enabled use native history method
|
4477
|
+
if ( $.mobile.hashListeningEnabled ) {
|
4478
|
+
window.history.go( steps );
|
4479
|
+
} else {
|
4480
|
+
|
4481
|
+
//we are not listening to the hash so handle history internally
|
4482
|
+
var activeIndex = $.mobile.navigate.history.activeIndex,
|
4483
|
+
index = activeIndex + parseInt( steps, 10 ),
|
4484
|
+
url = $.mobile.navigate.history.stack[ index ].url,
|
4485
|
+
direction = ( steps >= 1 )? "forward" : "back";
|
4486
|
+
|
4487
|
+
//update the history object
|
4488
|
+
$.mobile.navigate.history.activeIndex = index;
|
4489
|
+
$.mobile.navigate.history.previousIndex = activeIndex;
|
4490
|
+
|
4491
|
+
//change to the new page
|
4492
|
+
this.change( url, { direction: direction, changeHash: false, fromHashChange: true } );
|
4493
|
+
}
|
4460
4494
|
},
|
4461
4495
|
|
4462
4496
|
// TODO rename _handleDestination
|
@@ -4506,9 +4540,9 @@ $.widget( "mobile.page", {
|
|
4506
4540
|
// determine if we're heading forward or backward and continue
|
4507
4541
|
// accordingly past the current dialog
|
4508
4542
|
if ( data.direction === "back" ) {
|
4509
|
-
this.
|
4543
|
+
this.back();
|
4510
4544
|
} else {
|
4511
|
-
this.
|
4545
|
+
this.forward();
|
4512
4546
|
}
|
4513
4547
|
|
4514
4548
|
// prevent changePage call
|
@@ -4645,14 +4679,20 @@ $.widget( "mobile.page", {
|
|
4645
4679
|
_showLoading: function( delay, theme, msg, textonly ) {
|
4646
4680
|
// This configurable timeout allows cached pages a brief
|
4647
4681
|
// delay to load without showing a message
|
4682
|
+
if ( this._loadMsg ) {
|
4683
|
+
return;
|
4684
|
+
}
|
4685
|
+
|
4648
4686
|
this._loadMsg = setTimeout($.proxy(function() {
|
4649
4687
|
this._getLoader().loader( "show", theme, msg, textonly );
|
4688
|
+
this._loadMsg = 0;
|
4650
4689
|
}, this), delay );
|
4651
4690
|
},
|
4652
4691
|
|
4653
4692
|
_hideLoading: function() {
|
4654
4693
|
// Stop message show timer
|
4655
4694
|
clearTimeout( this._loadMsg );
|
4695
|
+
this._loadMsg = 0;
|
4656
4696
|
|
4657
4697
|
// Hide loading message
|
4658
4698
|
this._getLoader().loader( "hide" );
|
@@ -4762,7 +4802,7 @@ $.widget( "mobile.page", {
|
|
4762
4802
|
}
|
4763
4803
|
|
4764
4804
|
//dont update the base tag if we are prefetching
|
4765
|
-
if ( settings.prefetch === undefined ){
|
4805
|
+
if ( settings.prefetch === undefined ) {
|
4766
4806
|
this._getBase().set( fileUrl );
|
4767
4807
|
}
|
4768
4808
|
|
@@ -4770,6 +4810,23 @@ $.widget( "mobile.page", {
|
|
4770
4810
|
|
4771
4811
|
this._setLoadedTitle( content, html );
|
4772
4812
|
|
4813
|
+
// Add the content reference and xhr to our triggerData.
|
4814
|
+
triggerData.xhr = xhr;
|
4815
|
+
triggerData.textStatus = textStatus;
|
4816
|
+
|
4817
|
+
// DEPRECATED
|
4818
|
+
triggerData.page = content;
|
4819
|
+
|
4820
|
+
triggerData.content = content;
|
4821
|
+
|
4822
|
+
// If the default behavior is prevented, stop here!
|
4823
|
+
// Note that it is the responsibility of the listener/handler
|
4824
|
+
// that called preventDefault(), to resolve/reject the
|
4825
|
+
// deferred object within the triggerData.
|
4826
|
+
if ( !this._trigger( "load", undefined, triggerData ) ) {
|
4827
|
+
return;
|
4828
|
+
}
|
4829
|
+
|
4773
4830
|
// rewrite src and href attrs to use a base url if the base tag won't work
|
4774
4831
|
if ( this._isRewritableBaseTag() && content ) {
|
4775
4832
|
this._getBase().rewrite( fileUrl, content );
|
@@ -4789,17 +4846,10 @@ $.widget( "mobile.page", {
|
|
4789
4846
|
this._hideLoading();
|
4790
4847
|
}
|
4791
4848
|
|
4792
|
-
//
|
4793
|
-
triggerData.xhr = xhr;
|
4794
|
-
triggerData.textStatus = textStatus;
|
4795
|
-
|
4796
|
-
// DEPRECATED
|
4797
|
-
triggerData.page = content;
|
4798
|
-
|
4799
|
-
triggerData.content = content;
|
4800
|
-
|
4849
|
+
// BEGIN DEPRECATED ---------------------------------------------------
|
4801
4850
|
// Let listeners know the content loaded successfully.
|
4802
|
-
this.
|
4851
|
+
this.element.trigger( "pageload" );
|
4852
|
+
// END DEPRECATED -----------------------------------------------------
|
4803
4853
|
|
4804
4854
|
deferred.resolve( absUrl, settings, content );
|
4805
4855
|
}, this);
|
@@ -4827,7 +4877,7 @@ $.widget( "mobile.page", {
|
|
4827
4877
|
load: function( url, options ) {
|
4828
4878
|
// This function uses deferred notifications to let callers
|
4829
4879
|
// know when the content is done loading, or if an error has occurred.
|
4830
|
-
var deferred = options.deferred || $.Deferred(),
|
4880
|
+
var deferred = ( options && options.deferred ) || $.Deferred(),
|
4831
4881
|
|
4832
4882
|
// The default load options with overrides specified by the caller.
|
4833
4883
|
settings = $.extend( {}, this._loadDefaults, options ),
|
@@ -4891,7 +4941,7 @@ $.widget( "mobile.page", {
|
|
4891
4941
|
|
4892
4942
|
//if we are reloading the content make sure we update
|
4893
4943
|
// the base if its not a prefetch
|
4894
|
-
if ( !settings.prefetch ){
|
4944
|
+
if ( !settings.prefetch ) {
|
4895
4945
|
this._getBase().set(url);
|
4896
4946
|
}
|
4897
4947
|
|
@@ -4985,13 +5035,21 @@ $.widget( "mobile.page", {
|
|
4985
5035
|
|
4986
5036
|
// TODO move into transition handlers?
|
4987
5037
|
_triggerCssTransitionEvents: function( to, from, prefix ) {
|
5038
|
+
var samePage = false;
|
5039
|
+
|
4988
5040
|
prefix = prefix || "";
|
4989
5041
|
|
4990
5042
|
// TODO decide if these events should in fact be triggered on the container
|
4991
5043
|
if ( from ) {
|
5044
|
+
|
5045
|
+
//Check if this is a same page transition and tell the handler in page
|
5046
|
+
if( to[0] === from[0] ){
|
5047
|
+
samePage = true;
|
5048
|
+
}
|
5049
|
+
|
4992
5050
|
//trigger before show/hide events
|
4993
5051
|
// TODO deprecate nextPage in favor of next
|
4994
|
-
this._triggerWithDeprecated( prefix + "hide", { nextPage: to }, from );
|
5052
|
+
this._triggerWithDeprecated( prefix + "hide", { nextPage: to, samePage: samePage }, from );
|
4995
5053
|
}
|
4996
5054
|
|
4997
5055
|
// TODO deprecate prevPage in favor of previous
|
@@ -5472,10 +5530,10 @@ $.widget( "mobile.page", {
|
|
5472
5530
|
if ( this.phonegapNavigationEnabled &&
|
5473
5531
|
nav &&
|
5474
5532
|
nav.app &&
|
5475
|
-
nav.app.backHistory ){
|
5533
|
+
nav.app.backHistory ) {
|
5476
5534
|
nav.app.backHistory();
|
5477
5535
|
} else {
|
5478
|
-
|
5536
|
+
$.mobile.pageContainer.pagecontainer( "back" );
|
5479
5537
|
}
|
5480
5538
|
};
|
5481
5539
|
|
@@ -5708,11 +5766,21 @@ $.widget( "mobile.page", {
|
|
5708
5766
|
|
5709
5767
|
var link = findClosestLink( event.target ),
|
5710
5768
|
$link = $( link ),
|
5711
|
-
|
5769
|
+
|
5770
|
+
//remove active link class if external (then it won't be there if you come back)
|
5771
|
+
httpCleanup = function() {
|
5772
|
+
window.setTimeout(function() { $.mobile.removeActiveLinkClass( true ); }, 200 );
|
5773
|
+
},
|
5712
5774
|
baseUrl, href,
|
5713
5775
|
useDefaultUrlHandling, isExternal,
|
5714
5776
|
transition, reverse, role;
|
5715
5777
|
|
5778
|
+
// If a button was clicked, clean up the active class added by vclick above
|
5779
|
+
if ( $.mobile.activeClickedLink &&
|
5780
|
+
$.mobile.activeClickedLink[ 0 ] === event.target.parentNode ) {
|
5781
|
+
httpCleanup();
|
5782
|
+
}
|
5783
|
+
|
5716
5784
|
// If there is no link associated with the click or its not a left
|
5717
5785
|
// click we want to ignore the click
|
5718
5786
|
// TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping
|
@@ -5721,11 +5789,6 @@ $.widget( "mobile.page", {
|
|
5721
5789
|
return;
|
5722
5790
|
}
|
5723
5791
|
|
5724
|
-
//remove active link class if external (then it won't be there if you come back)
|
5725
|
-
httpCleanup = function() {
|
5726
|
-
window.setTimeout(function() { $.mobile.removeActiveLinkClass( true ); }, 200 );
|
5727
|
-
};
|
5728
|
-
|
5729
5792
|
//if there's a data-rel=back attr, go back in history
|
5730
5793
|
if ( $link.is( ":jqmData(rel='back')" ) ) {
|
5731
5794
|
$.mobile.back();
|
@@ -5877,7 +5940,7 @@ $.widget( "mobile.page", {
|
|
5877
5940
|
if ( $.mobile.window.scrollTop() !== this.toScroll ) {
|
5878
5941
|
this.scrollPage();
|
5879
5942
|
}
|
5880
|
-
if( !this.sequential ){
|
5943
|
+
if ( !this.sequential ) {
|
5881
5944
|
this.$to.addClass( $.mobile.activePageClass );
|
5882
5945
|
}
|
5883
5946
|
this.deferred.resolve( this.name, this.reverse, this.$to, this.$from, true );
|
@@ -5915,7 +5978,7 @@ $.widget( "mobile.page", {
|
|
5915
5978
|
this.$to.addClass( $.mobile.activePageClass + this.toPreClass );
|
5916
5979
|
|
5917
5980
|
// Send focus to page as it is now display: block
|
5918
|
-
if( !preventFocus ){
|
5981
|
+
if ( !preventFocus ) {
|
5919
5982
|
$.mobile.focusPage( this.$to );
|
5920
5983
|
}
|
5921
5984
|
|
@@ -5953,7 +6016,6 @@ $.widget( "mobile.page", {
|
|
5953
6016
|
.addClass( this.name + " out" + reverseClass );
|
5954
6017
|
},
|
5955
6018
|
|
5956
|
-
|
5957
6019
|
toggleViewportClass: function() {
|
5958
6020
|
$.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + this.name );
|
5959
6021
|
},
|
@@ -6073,6 +6135,7 @@ $.widget( "mobile.page", {
|
|
6073
6135
|
$.mobile.transitionFallbacks.flip = "fade";
|
6074
6136
|
|
6075
6137
|
})( jQuery, this );
|
6138
|
+
|
6076
6139
|
/*
|
6077
6140
|
* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6078
6141
|
*/
|
@@ -6082,6 +6145,7 @@ $.mobile.transitionFallbacks.flip = "fade";
|
|
6082
6145
|
$.mobile.transitionFallbacks.flow = "fade";
|
6083
6146
|
|
6084
6147
|
})( jQuery, this );
|
6148
|
+
|
6085
6149
|
/*
|
6086
6150
|
* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6087
6151
|
*/
|
@@ -6091,6 +6155,7 @@ $.mobile.transitionFallbacks.flow = "fade";
|
|
6091
6155
|
$.mobile.transitionFallbacks.pop = "fade";
|
6092
6156
|
|
6093
6157
|
})( jQuery, this );
|
6158
|
+
|
6094
6159
|
/*
|
6095
6160
|
* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6096
6161
|
*/
|
@@ -6104,6 +6169,7 @@ $.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous;
|
|
6104
6169
|
$.mobile.transitionFallbacks.slide = "fade";
|
6105
6170
|
|
6106
6171
|
})( jQuery, this );
|
6172
|
+
|
6107
6173
|
/*
|
6108
6174
|
* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6109
6175
|
*/
|
@@ -6113,6 +6179,7 @@ $.mobile.transitionFallbacks.slide = "fade";
|
|
6113
6179
|
$.mobile.transitionFallbacks.slidedown = "fade";
|
6114
6180
|
|
6115
6181
|
})( jQuery, this );
|
6182
|
+
|
6116
6183
|
/*
|
6117
6184
|
* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6118
6185
|
*/
|
@@ -6123,6 +6190,7 @@ $.mobile.transitionFallbacks.slidedown = "fade";
|
|
6123
6190
|
$.mobile.transitionFallbacks.slidefade = "fade";
|
6124
6191
|
|
6125
6192
|
})( jQuery, this );
|
6193
|
+
|
6126
6194
|
/*
|
6127
6195
|
* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6128
6196
|
*/
|
@@ -6132,6 +6200,7 @@ $.mobile.transitionFallbacks.slidefade = "fade";
|
|
6132
6200
|
$.mobile.transitionFallbacks.slideup = "fade";
|
6133
6201
|
|
6134
6202
|
})( jQuery, this );
|
6203
|
+
|
6135
6204
|
/*
|
6136
6205
|
* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general
|
6137
6206
|
*/
|
@@ -6142,6 +6211,7 @@ $.mobile.transitionFallbacks.turn = "fade";
|
|
6142
6211
|
|
6143
6212
|
})( jQuery, this );
|
6144
6213
|
|
6214
|
+
|
6145
6215
|
(function( $, undefined ) {
|
6146
6216
|
|
6147
6217
|
$.mobile.degradeInputs = {
|
@@ -6204,15 +6274,14 @@ $.widget( "mobile.page", $.mobile.page, {
|
|
6204
6274
|
|
6205
6275
|
_create: function() {
|
6206
6276
|
this._super();
|
6207
|
-
if( this.options.dialog ){
|
6277
|
+
if ( this.options.dialog ) {
|
6208
6278
|
|
6209
6279
|
$.extend( this, {
|
6210
|
-
_isCloseable: false,
|
6211
6280
|
_inner: this.element.children(),
|
6212
6281
|
_headerCloseButton: null
|
6213
6282
|
});
|
6214
6283
|
|
6215
|
-
if( !this.options.enhanced ) {
|
6284
|
+
if ( !this.options.enhanced ) {
|
6216
6285
|
this._setCloseBtn( this.options.closeBtn );
|
6217
6286
|
}
|
6218
6287
|
}
|
@@ -6222,7 +6291,7 @@ $.widget( "mobile.page", $.mobile.page, {
|
|
6222
6291
|
this._super();
|
6223
6292
|
|
6224
6293
|
// Class the markup for dialog styling and wrap interior
|
6225
|
-
if( this.options.dialog ){
|
6294
|
+
if ( this.options.dialog ) {
|
6226
6295
|
this.element.addClass( "ui-dialog" )
|
6227
6296
|
.wrapInner( $( "<div/>", {
|
6228
6297
|
|
@@ -6294,35 +6363,16 @@ $.widget( "mobile.page", $.mobile.page, {
|
|
6294
6363
|
} else {
|
6295
6364
|
dst = this._inner.find( ":jqmData(role='header')" ).first();
|
6296
6365
|
btn = $( "<a></a>", {
|
6297
|
-
"role": "button",
|
6298
6366
|
"href": "#",
|
6299
6367
|
"class": "ui-btn ui-corner-all ui-icon-delete ui-btn-icon-notext ui-btn-" + location
|
6300
6368
|
})
|
6369
|
+
.attr( "data-" + $.mobile.ns + "rel", "back" )
|
6301
6370
|
.text( text || this.options.closeBtnText || "" )
|
6302
6371
|
.prependTo( dst );
|
6303
6372
|
this._on( btn, { click: "close" } );
|
6304
6373
|
}
|
6305
6374
|
|
6306
6375
|
this._headerCloseButton = btn;
|
6307
|
-
},
|
6308
|
-
|
6309
|
-
// Close method goes back in history
|
6310
|
-
close: function() {
|
6311
|
-
var idx, dst, hist = $.mobile.navigate.history;
|
6312
|
-
|
6313
|
-
if ( $.mobile.hashListeningEnabled && hist.activeIndex > 0 ) {
|
6314
|
-
$.mobile.back();
|
6315
|
-
} else {
|
6316
|
-
idx = Math.max( 0, hist.activeIndex - 1 );
|
6317
|
-
dst = hist.stack[ idx ].pageUrl || hist.stack[ idx ].url;
|
6318
|
-
hist.previousIndex = hist.activeIndex;
|
6319
|
-
hist.activeIndex = idx;
|
6320
|
-
if ( !$.mobile.path.isPath( dst ) ) {
|
6321
|
-
dst = $.mobile.path.makeUrlAbsolute( "#" + dst );
|
6322
|
-
}
|
6323
|
-
|
6324
|
-
$.mobile.changePage( dst, { direction: "back", changeHash: false, fromHashChange: true } );
|
6325
|
-
}
|
6326
6376
|
}
|
6327
6377
|
});
|
6328
6378
|
|
@@ -6468,7 +6518,7 @@ $.widget( "mobile.dialog", {
|
|
6468
6518
|
|
6469
6519
|
// Close method goes back in history
|
6470
6520
|
close: function() {
|
6471
|
-
var
|
6521
|
+
var hist = $.mobile.navigate.history;
|
6472
6522
|
|
6473
6523
|
if ( this._isCloseable ) {
|
6474
6524
|
this._isCloseable = false;
|
@@ -6478,21 +6528,14 @@ $.widget( "mobile.dialog", {
|
|
6478
6528
|
if ( $.mobile.hashListeningEnabled && hist.activeIndex > 0 ) {
|
6479
6529
|
$.mobile.back();
|
6480
6530
|
} else {
|
6481
|
-
|
6482
|
-
dst = hist.stack[ idx ].pageUrl || hist.stack[ idx ].url;
|
6483
|
-
hist.previousIndex = hist.activeIndex;
|
6484
|
-
hist.activeIndex = idx;
|
6485
|
-
if ( !$.mobile.path.isPath( dst ) ) {
|
6486
|
-
dst = $.mobile.path.makeUrlAbsolute( "#" + dst );
|
6487
|
-
}
|
6488
|
-
|
6489
|
-
$.mobile.changePage( dst, { direction: "back", changeHash: false, fromHashChange: true } );
|
6531
|
+
$.mobile.pageContainer.pagecontainer( "back" );
|
6490
6532
|
}
|
6491
6533
|
}
|
6492
6534
|
}
|
6493
6535
|
});
|
6494
6536
|
|
6495
6537
|
})( jQuery, this );
|
6538
|
+
|
6496
6539
|
(function( $, undefined ) {
|
6497
6540
|
|
6498
6541
|
var rInitialLetter = /([A-Z])/g;
|
@@ -6805,6 +6848,7 @@ $.mobile.collapsible.defaults = {
|
|
6805
6848
|
iconpos: "left",
|
6806
6849
|
inset: true,
|
6807
6850
|
corners: true,
|
6851
|
+
theme: "inherit",
|
6808
6852
|
mini: false
|
6809
6853
|
};
|
6810
6854
|
|
@@ -6935,7 +6979,7 @@ $.widget( "mobile.collapsibleset", $.extend( {
|
|
6935
6979
|
this._removeFirstLastClasses( el.children( childCollapsiblesSelector ) );
|
6936
6980
|
el
|
6937
6981
|
.removeClass( "ui-collapsible-set ui-corner-all " +
|
6938
|
-
this._themeClassFromOption( "ui-group-theme", this.options.theme ) )
|
6982
|
+
this._themeClassFromOption( "ui-group-theme-", this.options.theme ) )
|
6939
6983
|
.children( ":mobile-collapsible" )
|
6940
6984
|
.collapsible( "destroy" );
|
6941
6985
|
},
|
@@ -7279,470 +7323,102 @@ $.widget( "mobile.listview", $.extend( {
|
|
7279
7323
|
|
7280
7324
|
(function( $, undefined ) {
|
7281
7325
|
|
7282
|
-
|
7283
|
-
|
7284
|
-
|
7285
|
-
.toLowerCase().indexOf( searchValue ) === -1 );
|
7286
|
-
};
|
7326
|
+
function defaultAutodividersSelector( elt ) {
|
7327
|
+
// look for the text in the given element
|
7328
|
+
var text = $.trim( elt.text() ) || null;
|
7287
7329
|
|
7288
|
-
|
7330
|
+
if ( !text ) {
|
7331
|
+
return null;
|
7332
|
+
}
|
7289
7333
|
|
7290
|
-
|
7334
|
+
// create the text for the divider (first uppercased letter)
|
7335
|
+
text = text.slice( 0, 1 ).toUpperCase();
|
7291
7336
|
|
7337
|
+
return text;
|
7338
|
+
}
|
7339
|
+
|
7340
|
+
$.widget( "mobile.listview", $.mobile.listview, {
|
7292
7341
|
options: {
|
7293
|
-
|
7294
|
-
|
7295
|
-
enhanced: false,
|
7296
|
-
input: null,
|
7297
|
-
children: "> li, > option, > optgroup option, > tbody tr, > .ui-controlgroup-controls > .ui-btn, > .ui-controlgroup-controls > .ui-checkbox, > .ui-controlgroup-controls > .ui-radio"
|
7342
|
+
autodividers: false,
|
7343
|
+
autodividersSelector: defaultAutodividersSelector
|
7298
7344
|
},
|
7299
7345
|
|
7300
|
-
|
7301
|
-
|
7302
|
-
|
7303
|
-
|
7304
|
-
_search: null,
|
7305
|
-
_timer: 0
|
7306
|
-
});
|
7307
|
-
|
7308
|
-
this._setInput( opts.input );
|
7309
|
-
if ( !opts.enhanced ) {
|
7310
|
-
this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() );
|
7346
|
+
_beforeListviewRefresh: function() {
|
7347
|
+
if ( this.options.autodividers ) {
|
7348
|
+
this._replaceDividers();
|
7349
|
+
this._superApply( arguments );
|
7311
7350
|
}
|
7312
7351
|
},
|
7313
7352
|
|
7314
|
-
|
7315
|
-
var
|
7316
|
-
|
7317
|
-
|
7318
|
-
|
7319
|
-
val = search.val().toLowerCase(),
|
7320
|
-
lastval = $.mobile.getAttribute( search[ 0 ], "lastval" ) + "";
|
7353
|
+
_replaceDividers: function() {
|
7354
|
+
var i, lis, li, dividerText,
|
7355
|
+
lastDividerText = null,
|
7356
|
+
list = this.element,
|
7357
|
+
divider;
|
7321
7358
|
|
7322
|
-
|
7323
|
-
// Execute the handler only once per value change
|
7324
|
-
return;
|
7325
|
-
}
|
7359
|
+
list.children( "li:jqmData(role='list-divider')" ).remove();
|
7326
7360
|
|
7327
|
-
|
7328
|
-
window.clearTimeout( this._timer );
|
7329
|
-
this._timer = 0;
|
7330
|
-
}
|
7361
|
+
lis = list.children( "li" );
|
7331
7362
|
|
7332
|
-
|
7333
|
-
|
7363
|
+
for ( i = 0; i < lis.length ; i++ ) {
|
7364
|
+
li = lis[ i ];
|
7365
|
+
dividerText = this.options.autodividersSelector( $( li ) );
|
7334
7366
|
|
7335
|
-
|
7336
|
-
|
7367
|
+
if ( dividerText && lastDividerText !== dividerText ) {
|
7368
|
+
divider = document.createElement( "li" );
|
7369
|
+
divider.appendChild( document.createTextNode( dividerText ) );
|
7370
|
+
divider.setAttribute( "data-" + $.mobile.ns + "role", "list-divider" );
|
7371
|
+
li.parentNode.insertBefore( divider, li );
|
7372
|
+
}
|
7337
7373
|
|
7338
|
-
|
7339
|
-
this._timer = 0;
|
7340
|
-
}, 250 );
|
7374
|
+
lastDividerText = dividerText;
|
7341
7375
|
}
|
7342
|
-
}
|
7376
|
+
}
|
7377
|
+
});
|
7343
7378
|
|
7344
|
-
|
7345
|
-
var elem = this.element,
|
7346
|
-
children = this.options.children,
|
7347
|
-
items = !children ? { length: 0 }:
|
7348
|
-
$.isFunction( children ) ? children():
|
7349
|
-
children.nodeName ? $( children ):
|
7350
|
-
children.jquery ? children:
|
7351
|
-
this.element.find( children );
|
7379
|
+
})( jQuery );
|
7352
7380
|
|
7353
|
-
|
7354
|
-
items = elem.children();
|
7355
|
-
}
|
7381
|
+
(function( $, undefined ) {
|
7356
7382
|
|
7357
|
-
|
7383
|
+
var rdivider = /(^|\s)ui-li-divider($|\s)/,
|
7384
|
+
rhidden = /(^|\s)ui-screen-hidden($|\s)/;
|
7385
|
+
|
7386
|
+
$.widget( "mobile.listview", $.mobile.listview, {
|
7387
|
+
options: {
|
7388
|
+
hideDividers: false
|
7358
7389
|
},
|
7359
7390
|
|
7360
|
-
|
7361
|
-
var
|
7362
|
-
show = [],
|
7363
|
-
hide = [],
|
7364
|
-
opts = this.options,
|
7365
|
-
filterItems = this._getFilterableItems();
|
7391
|
+
_afterListviewRefresh: function() {
|
7392
|
+
var items, idx, item, hideDivider = true;
|
7366
7393
|
|
7367
|
-
|
7368
|
-
callback = opts.filterCallback || defaultFilterCallback;
|
7369
|
-
length = filterItems.length;
|
7394
|
+
this._superApply( arguments );
|
7370
7395
|
|
7371
|
-
|
7372
|
-
|
7373
|
-
|
7374
|
-
|
7396
|
+
if ( this.options.hideDividers ) {
|
7397
|
+
items = this._getChildrenByTagName( this.element[ 0 ], "li", "LI" );
|
7398
|
+
for ( idx = items.length - 1 ; idx > -1 ; idx-- ) {
|
7399
|
+
item = items[ idx ];
|
7400
|
+
if ( item.className.match( rdivider ) ) {
|
7401
|
+
if ( hideDivider ) {
|
7402
|
+
item.className = item.className + " ui-screen-hidden";
|
7403
|
+
}
|
7404
|
+
hideDivider = true;
|
7405
|
+
} else {
|
7406
|
+
if ( !item.className.match( rhidden ) ) {
|
7407
|
+
hideDivider = false;
|
7408
|
+
}
|
7409
|
+
}
|
7375
7410
|
}
|
7376
7411
|
}
|
7412
|
+
}
|
7413
|
+
});
|
7377
7414
|
|
7378
|
-
|
7379
|
-
// is based on the "filterReveal" option.
|
7380
|
-
if ( hide.length === 0 ) {
|
7381
|
-
filterItems[ opts.filterReveal ? "addClass" : "removeClass" ]( "ui-screen-hidden" );
|
7382
|
-
} else {
|
7383
|
-
$( hide ).addClass( "ui-screen-hidden" );
|
7384
|
-
$( show ).removeClass( "ui-screen-hidden" );
|
7385
|
-
}
|
7415
|
+
})( jQuery );
|
7386
7416
|
|
7387
|
-
|
7388
|
-
},
|
7417
|
+
(function( $, undefined ) {
|
7389
7418
|
|
7390
|
-
|
7391
|
-
|
7392
|
-
|
7393
|
-
var widget, idx,
|
7394
|
-
recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ];
|
7395
|
-
|
7396
|
-
for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) {
|
7397
|
-
widget = recognizedWidgets[ idx ];
|
7398
|
-
if ( $.mobile[ widget ] ) {
|
7399
|
-
widget = this.element.data( "mobile-" + widget );
|
7400
|
-
if ( widget && $.isFunction( widget.refresh ) ) {
|
7401
|
-
widget.refresh();
|
7402
|
-
}
|
7403
|
-
}
|
7404
|
-
}
|
7405
|
-
},
|
7406
|
-
|
7407
|
-
// TODO: When the input is not internal, do not even store it in this._search
|
7408
|
-
_setInput: function ( selector ) {
|
7409
|
-
var search = this._search;
|
7410
|
-
|
7411
|
-
// Stop a pending filter operation
|
7412
|
-
if ( this._timer ) {
|
7413
|
-
window.clearTimeout( this._timer );
|
7414
|
-
this._timer = 0;
|
7415
|
-
}
|
7416
|
-
|
7417
|
-
if ( search ) {
|
7418
|
-
this._off( search, "keyup change input" );
|
7419
|
-
search = null;
|
7420
|
-
}
|
7421
|
-
|
7422
|
-
if ( selector ) {
|
7423
|
-
search = selector.jquery ? selector:
|
7424
|
-
selector.nodeName ? $( selector ):
|
7425
|
-
this.document.find( selector );
|
7426
|
-
|
7427
|
-
this._on( search, {
|
7428
|
-
keyup: "_onKeyUp",
|
7429
|
-
change: "_onKeyUp",
|
7430
|
-
input: "_onKeyUp"
|
7431
|
-
});
|
7432
|
-
}
|
7433
|
-
|
7434
|
-
this._search = search;
|
7435
|
-
},
|
7436
|
-
|
7437
|
-
_setOptions: function( options ) {
|
7438
|
-
var refilter = !( ( options.filterReveal === undefined ) &&
|
7439
|
-
( options.filterCallback === undefined ) &&
|
7440
|
-
( options.children === undefined ) );
|
7441
|
-
|
7442
|
-
this._super( options );
|
7443
|
-
|
7444
|
-
if ( options.input !== undefined ) {
|
7445
|
-
this._setInput( options.input );
|
7446
|
-
refilter = true;
|
7447
|
-
}
|
7448
|
-
|
7449
|
-
if ( refilter ) {
|
7450
|
-
this.refresh();
|
7451
|
-
}
|
7452
|
-
},
|
7453
|
-
|
7454
|
-
_destroy: function() {
|
7455
|
-
var opts = this.options,
|
7456
|
-
items = this._getFilterableItems();
|
7457
|
-
|
7458
|
-
if ( opts.enhanced ) {
|
7459
|
-
items.toggleClass( "ui-screen-hidden", opts.filterReveal );
|
7460
|
-
} else {
|
7461
|
-
items.removeClass( "ui-screen-hidden" );
|
7462
|
-
}
|
7463
|
-
},
|
7464
|
-
|
7465
|
-
refresh: function() {
|
7466
|
-
if ( this._timer ) {
|
7467
|
-
window.clearTimeout( this._timer );
|
7468
|
-
this._timer = 0;
|
7469
|
-
}
|
7470
|
-
this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() );
|
7471
|
-
}
|
7472
|
-
});
|
7473
|
-
|
7474
|
-
})( jQuery );
|
7475
|
-
|
7476
|
-
(function( $, undefined ) {
|
7477
|
-
|
7478
|
-
// Create a function that will replace the _setOptions function of a widget,
|
7479
|
-
// and will pass the options on to the input of the filterable.
|
7480
|
-
var replaceSetOptions = function( self, orig ) {
|
7481
|
-
return function( options ) {
|
7482
|
-
orig.call( this, options );
|
7483
|
-
self._syncTextInputOptions( options );
|
7484
|
-
};
|
7485
|
-
},
|
7486
|
-
rDividerListItem = /(^|\s)ui-li-divider(\s|$)/,
|
7487
|
-
origDefaultFilterCallback = $.mobile.filterable.prototype.options.filterCallback;
|
7488
|
-
|
7489
|
-
// Override the default filter callback with one that does not hide list dividers
|
7490
|
-
$.mobile.filterable.prototype.options.filterCallback = function( index, searchValue ) {
|
7491
|
-
return !this.className.match( rDividerListItem ) &&
|
7492
|
-
origDefaultFilterCallback.call( this, index, searchValue );
|
7493
|
-
};
|
7494
|
-
|
7495
|
-
$.widget( "mobile.filterable", $.mobile.filterable, {
|
7496
|
-
options: {
|
7497
|
-
filterPlaceholder: "Filter items...",
|
7498
|
-
filterTheme: null
|
7499
|
-
},
|
7500
|
-
|
7501
|
-
|
7502
|
-
_create: function() {
|
7503
|
-
var idx, widgetName,
|
7504
|
-
elem = this.element,
|
7505
|
-
recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ],
|
7506
|
-
createHandlers = {};
|
7507
|
-
|
7508
|
-
this._super();
|
7509
|
-
|
7510
|
-
$.extend( this, {
|
7511
|
-
_widget: null
|
7512
|
-
});
|
7513
|
-
|
7514
|
-
for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) {
|
7515
|
-
widgetName = recognizedWidgets[ idx ];
|
7516
|
-
if ( $.mobile[ widgetName ] ) {
|
7517
|
-
if ( this._setWidget( elem.data( "mobile-" + widgetName ) ) ) {
|
7518
|
-
break;
|
7519
|
-
} else {
|
7520
|
-
createHandlers[ widgetName + "create" ] = "_handleCreate";
|
7521
|
-
}
|
7522
|
-
}
|
7523
|
-
}
|
7524
|
-
|
7525
|
-
if ( !this._widget ) {
|
7526
|
-
this._on( elem, createHandlers );
|
7527
|
-
}
|
7528
|
-
},
|
7529
|
-
|
7530
|
-
_handleCreate: function( evt ) {
|
7531
|
-
this._setWidget( this.element.data( "mobile-" + evt.type.substring( 0, evt.type.length - 6 ) ) );
|
7532
|
-
},
|
7533
|
-
|
7534
|
-
_setWidget: function( widget ) {
|
7535
|
-
if ( !this._widget && widget ) {
|
7536
|
-
this._widget = widget;
|
7537
|
-
this._widget._setOptions = replaceSetOptions( this, this._widget._setOptions );
|
7538
|
-
}
|
7539
|
-
|
7540
|
-
if ( !!this._widget ) {
|
7541
|
-
this._syncTextInputOptions( this._widget.options );
|
7542
|
-
if ( this._widget.widgetName === "listview" ) {
|
7543
|
-
this._widget.options.hidedividers = true;
|
7544
|
-
this._widget.element.listview( "refresh" );
|
7545
|
-
}
|
7546
|
-
}
|
7547
|
-
|
7548
|
-
return !!this._widget;
|
7549
|
-
},
|
7550
|
-
|
7551
|
-
_isSearchInternal: function() {
|
7552
|
-
return ( this._search && this._search.jqmData( "ui-filterable-" + this.uuid + "-internal" ) );
|
7553
|
-
},
|
7554
|
-
|
7555
|
-
_setInput: function( selector ) {
|
7556
|
-
var opts = this.options,
|
7557
|
-
updatePlaceholder = true,
|
7558
|
-
textinputOpts = {};
|
7559
|
-
|
7560
|
-
if ( !selector ) {
|
7561
|
-
if ( this._isSearchInternal() ) {
|
7562
|
-
|
7563
|
-
// Ignore the call to set a new input if the selector goes to falsy and
|
7564
|
-
// the current textinput is already of the internally generated variety.
|
7565
|
-
return;
|
7566
|
-
} else {
|
7567
|
-
|
7568
|
-
// Generating a new textinput widget. No need to set the placeholder
|
7569
|
-
// further down the function.
|
7570
|
-
updatePlaceholder = false;
|
7571
|
-
selector = $( "<input " +
|
7572
|
-
"data-" + $.mobile.ns + "type='search' " +
|
7573
|
-
"placeholder='" + opts.filterPlaceholder + "'></input>" )
|
7574
|
-
.jqmData( "ui-filterable-" + this.uuid + "-internal", true );
|
7575
|
-
$( "<form class='ui-filterable'></form>" )
|
7576
|
-
.append( selector )
|
7577
|
-
.submit( function( evt ) {
|
7578
|
-
evt.preventDefault();
|
7579
|
-
selector.blur();
|
7580
|
-
})
|
7581
|
-
.insertBefore( this.element );
|
7582
|
-
if ( $.mobile.textinput ) {
|
7583
|
-
if ( this.options.filterTheme != null ) {
|
7584
|
-
textinputOpts[ "theme" ] = opts.filterTheme;
|
7585
|
-
}
|
7586
|
-
|
7587
|
-
selector.textinput( textinputOpts );
|
7588
|
-
}
|
7589
|
-
}
|
7590
|
-
}
|
7591
|
-
|
7592
|
-
this._super( selector );
|
7593
|
-
|
7594
|
-
if ( this._isSearchInternal() && updatePlaceholder ) {
|
7595
|
-
this._search.attr( "placeholder", this.options.filterPlaceholder );
|
7596
|
-
}
|
7597
|
-
},
|
7598
|
-
|
7599
|
-
_setOptions: function( options ) {
|
7600
|
-
var ret = this._super( options );
|
7601
|
-
|
7602
|
-
// Need to set the filterPlaceholder after having established the search input
|
7603
|
-
if ( options.filterPlaceholder !== undefined ) {
|
7604
|
-
if ( this._isSearchInternal() ) {
|
7605
|
-
this._search.attr( "placeholder", options.filterPlaceholder );
|
7606
|
-
}
|
7607
|
-
}
|
7608
|
-
|
7609
|
-
if ( options.filterTheme !== undefined && this._search && $.mobile.textinput ) {
|
7610
|
-
this._search.textinput( "option", "theme", options.filterTheme );
|
7611
|
-
}
|
7612
|
-
|
7613
|
-
return ret;
|
7614
|
-
},
|
7615
|
-
|
7616
|
-
_destroy: function() {
|
7617
|
-
if ( this._isSearchInternal() ) {
|
7618
|
-
this._search.remove();
|
7619
|
-
}
|
7620
|
-
this._super();
|
7621
|
-
},
|
7622
|
-
|
7623
|
-
_syncTextInputOptions: function( options ) {
|
7624
|
-
var idx,
|
7625
|
-
textinputOptions = {};
|
7626
|
-
|
7627
|
-
// We only sync options if the filterable's textinput is of the internally
|
7628
|
-
// generated variety, rather than one specified by the user.
|
7629
|
-
if ( this._isSearchInternal() && $.mobile.textinput ) {
|
7630
|
-
|
7631
|
-
// Apply only the options understood by textinput
|
7632
|
-
for ( idx in $.mobile.textinput.prototype.options ) {
|
7633
|
-
if ( options[ idx ] !== undefined ) {
|
7634
|
-
if ( idx === "theme" && this.options.filterTheme != null ) {
|
7635
|
-
textinputOptions[ idx ] = this.options.filterTheme;
|
7636
|
-
} else {
|
7637
|
-
textinputOptions[ idx ] = options[ idx ];
|
7638
|
-
}
|
7639
|
-
}
|
7640
|
-
}
|
7641
|
-
this._search.textinput( "option", textinputOptions );
|
7642
|
-
}
|
7643
|
-
}
|
7644
|
-
});
|
7645
|
-
|
7646
|
-
})( jQuery );
|
7647
|
-
|
7648
|
-
(function( $, undefined ) {
|
7649
|
-
|
7650
|
-
function defaultAutodividersSelector( elt ) {
|
7651
|
-
// look for the text in the given element
|
7652
|
-
var text = $.trim( elt.text() ) || null;
|
7653
|
-
|
7654
|
-
if ( !text ) {
|
7655
|
-
return null;
|
7656
|
-
}
|
7657
|
-
|
7658
|
-
// create the text for the divider (first uppercased letter)
|
7659
|
-
text = text.slice( 0, 1 ).toUpperCase();
|
7660
|
-
|
7661
|
-
return text;
|
7662
|
-
}
|
7663
|
-
|
7664
|
-
$.widget( "mobile.listview", $.mobile.listview, {
|
7665
|
-
options: {
|
7666
|
-
autodividers: false,
|
7667
|
-
autodividersSelector: defaultAutodividersSelector
|
7668
|
-
},
|
7669
|
-
|
7670
|
-
_beforeListviewRefresh: function() {
|
7671
|
-
if ( this.options.autodividers ) {
|
7672
|
-
this._replaceDividers();
|
7673
|
-
this._superApply( arguments );
|
7674
|
-
}
|
7675
|
-
},
|
7676
|
-
|
7677
|
-
_replaceDividers: function() {
|
7678
|
-
var i, lis, li, dividerText,
|
7679
|
-
lastDividerText = null,
|
7680
|
-
list = this.element,
|
7681
|
-
divider;
|
7682
|
-
|
7683
|
-
list.children( "li:jqmData(role='list-divider')" ).remove();
|
7684
|
-
|
7685
|
-
lis = list.children( "li" );
|
7686
|
-
|
7687
|
-
for ( i = 0; i < lis.length ; i++ ) {
|
7688
|
-
li = lis[ i ];
|
7689
|
-
dividerText = this.options.autodividersSelector( $( li ) );
|
7690
|
-
|
7691
|
-
if ( dividerText && lastDividerText !== dividerText ) {
|
7692
|
-
divider = document.createElement( "li" );
|
7693
|
-
divider.appendChild( document.createTextNode( dividerText ) );
|
7694
|
-
divider.setAttribute( "data-" + $.mobile.ns + "role", "list-divider" );
|
7695
|
-
li.parentNode.insertBefore( divider, li );
|
7696
|
-
}
|
7697
|
-
|
7698
|
-
lastDividerText = dividerText;
|
7699
|
-
}
|
7700
|
-
}
|
7701
|
-
});
|
7702
|
-
|
7703
|
-
})( jQuery );
|
7704
|
-
|
7705
|
-
(function( $, undefined ) {
|
7706
|
-
|
7707
|
-
var rdivider = /(^|\s)ui-li-divider($|\s)/,
|
7708
|
-
rhidden = /(^|\s)ui-screen-hidden($|\s)/;
|
7709
|
-
|
7710
|
-
$.widget( "mobile.listview", $.mobile.listview, {
|
7711
|
-
options: {
|
7712
|
-
hidedividers: false
|
7713
|
-
},
|
7714
|
-
|
7715
|
-
_afterListviewRefresh: function() {
|
7716
|
-
var items, idx, item, hideDivider = true;
|
7717
|
-
|
7718
|
-
this._superApply( arguments );
|
7719
|
-
|
7720
|
-
if ( this.options.hidedividers ) {
|
7721
|
-
items = this._getChildrenByTagName( this.element[ 0 ], "li", "LI" );
|
7722
|
-
for ( idx = items.length - 1 ; idx > -1 ; idx-- ) {
|
7723
|
-
item = items[ idx ];
|
7724
|
-
if ( item.className.match( rdivider ) ) {
|
7725
|
-
if ( hideDivider ) {
|
7726
|
-
item.className = item.className + " ui-screen-hidden";
|
7727
|
-
}
|
7728
|
-
hideDivider = true;
|
7729
|
-
} else {
|
7730
|
-
if ( !item.className.match( rhidden ) ) {
|
7731
|
-
hideDivider = false;
|
7732
|
-
}
|
7733
|
-
}
|
7734
|
-
}
|
7735
|
-
}
|
7736
|
-
}
|
7737
|
-
});
|
7738
|
-
|
7739
|
-
})( jQuery );
|
7740
|
-
|
7741
|
-
(function( $, undefined ) {
|
7742
|
-
|
7743
|
-
$.mobile.nojs = function( target ) {
|
7744
|
-
$( ":jqmData(role='nojs')", target ).addClass( "ui-nojs" );
|
7745
|
-
};
|
7419
|
+
$.mobile.nojs = function( target ) {
|
7420
|
+
$( ":jqmData(role='nojs')", target ).addClass( "ui-nojs" );
|
7421
|
+
};
|
7746
7422
|
|
7747
7423
|
})( jQuery );
|
7748
7424
|
|
@@ -7795,16 +7471,14 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
7795
7471
|
.filter( "[for='" + $.mobile.path.hashToSelector( input[0].id ) + "']" )
|
7796
7472
|
.first(),
|
7797
7473
|
inputtype = input[0].type,
|
7798
|
-
|
7799
|
-
|
7800
|
-
checkedClass = "ui-" + checkedState,
|
7801
|
-
uncheckedClass = "ui-" + uncheckedState;
|
7474
|
+
checkedClass = "ui-" + inputtype + "-on",
|
7475
|
+
uncheckedClass = "ui-" + inputtype + "-off";
|
7802
7476
|
|
7803
7477
|
if ( inputtype !== "checkbox" && inputtype !== "radio" ) {
|
7804
7478
|
return;
|
7805
7479
|
}
|
7806
7480
|
|
7807
|
-
if ( this.element[0].disabled ){
|
7481
|
+
if ( this.element[0].disabled ) {
|
7808
7482
|
this.options.disabled = true;
|
7809
7483
|
}
|
7810
7484
|
|
@@ -7820,9 +7494,7 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
7820
7494
|
parentLabel: parentLabel,
|
7821
7495
|
inputtype: inputtype,
|
7822
7496
|
checkedClass: checkedClass,
|
7823
|
-
uncheckedClass: uncheckedClass
|
7824
|
-
checkedicon: checkedState,
|
7825
|
-
uncheckedicon: uncheckedState
|
7497
|
+
uncheckedClass: uncheckedClass
|
7826
7498
|
});
|
7827
7499
|
|
7828
7500
|
if ( !this.options.enhanced ) {
|
@@ -7848,16 +7520,16 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
7848
7520
|
_enhance: function() {
|
7849
7521
|
this.label.addClass( "ui-btn ui-corner-all");
|
7850
7522
|
|
7851
|
-
if( this.parentLabel.length > 0 ){
|
7523
|
+
if ( this.parentLabel.length > 0 ) {
|
7852
7524
|
this.input.add( this.label ).wrapAll( this._wrapper() );
|
7853
7525
|
} else {
|
7854
7526
|
//this.element.replaceWith( this.input.add( this.label ).wrapAll( this._wrapper() ) );
|
7855
7527
|
this.element.wrap( this._wrapper() );
|
7856
7528
|
this.element.parent().prepend( this.label );
|
7857
7529
|
}
|
7858
|
-
|
7530
|
+
|
7859
7531
|
// Wrap the input + label in a div
|
7860
|
-
|
7532
|
+
|
7861
7533
|
this._setOptions({
|
7862
7534
|
"theme": this.options.theme,
|
7863
7535
|
"iconpos": this.options.iconpos,
|
@@ -7963,21 +7635,62 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
7963
7635
|
this.refresh();
|
7964
7636
|
},
|
7965
7637
|
|
7638
|
+
// Is the widget supposed to display an icon?
|
7639
|
+
_hasIcon: function() {
|
7640
|
+
var controlgroup, controlgroupWidget,
|
7641
|
+
controlgroupConstructor = $.mobile.controlgroup;
|
7642
|
+
|
7643
|
+
// If the controlgroup widget is defined ...
|
7644
|
+
if ( controlgroupConstructor ) {
|
7645
|
+
controlgroup = this.element.closest(
|
7646
|
+
":mobile-controlgroup," +
|
7647
|
+
controlgroupConstructor.prototype.initSelector );
|
7648
|
+
|
7649
|
+
// ... and the checkbox is in a controlgroup ...
|
7650
|
+
if ( controlgroup.length > 0 ) {
|
7651
|
+
|
7652
|
+
// ... look for a controlgroup widget instance, and ...
|
7653
|
+
controlgroupWidget = $.data( controlgroup[ 0 ], "mobile-controlgroup" );
|
7654
|
+
|
7655
|
+
// ... if found, decide based on the option value, ...
|
7656
|
+
return ( ( controlgroupWidget ? controlgroupWidget.options.type :
|
7657
|
+
|
7658
|
+
// ... otherwise decide based on the "type" data attribute.
|
7659
|
+
controlgroup.attr( "data-" + $.mobile.ns + "type" ) ) !== "horizontal" );
|
7660
|
+
}
|
7661
|
+
}
|
7662
|
+
|
7663
|
+
// Normally, the widget displays an icon.
|
7664
|
+
return true;
|
7665
|
+
},
|
7666
|
+
|
7966
7667
|
refresh: function() {
|
7967
|
-
var
|
7968
|
-
|
7969
|
-
|
7970
|
-
|
7971
|
-
|
7972
|
-
|
7973
|
-
|
7974
|
-
|
7975
|
-
.
|
7976
|
-
|
7977
|
-
label.removeClass( this.uncheckedClass + active ).addClass( checkedClass );
|
7668
|
+
var hasIcon = this._hasIcon(),
|
7669
|
+
isChecked = this.element[ 0 ].checked,
|
7670
|
+
active = $.mobile.activeBtnClass,
|
7671
|
+
iconposClass = "ui-btn-icon-" + this.options.iconpos,
|
7672
|
+
addClasses = [],
|
7673
|
+
removeClasses = [];
|
7674
|
+
|
7675
|
+
if ( hasIcon ) {
|
7676
|
+
removeClasses.push( active );
|
7677
|
+
addClasses.push( iconposClass );
|
7978
7678
|
} else {
|
7979
|
-
|
7679
|
+
removeClasses.push( iconposClass );
|
7680
|
+
( isChecked ? addClasses : removeClasses ).push( active );
|
7980
7681
|
}
|
7682
|
+
|
7683
|
+
if ( isChecked ) {
|
7684
|
+
addClasses.push( this.checkedClass );
|
7685
|
+
removeClasses.push( this.uncheckedClass );
|
7686
|
+
} else {
|
7687
|
+
addClasses.push( this.uncheckedClass );
|
7688
|
+
removeClasses.push( this.checkedClass );
|
7689
|
+
}
|
7690
|
+
|
7691
|
+
this.label
|
7692
|
+
.addClass( addClasses.join( " " ) )
|
7693
|
+
.removeClass( removeClasses.join( " " ) );
|
7981
7694
|
},
|
7982
7695
|
|
7983
7696
|
widget: function() {
|
@@ -7986,14 +7699,16 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
7986
7699
|
|
7987
7700
|
_setOptions: function( options ) {
|
7988
7701
|
var label = this.label,
|
7989
|
-
currentOptions = this.options
|
7702
|
+
currentOptions = this.options,
|
7703
|
+
outer = this.widget(),
|
7704
|
+
hasIcon = this._hasIcon();
|
7990
7705
|
|
7991
7706
|
if ( options.disabled !== undefined ) {
|
7992
7707
|
this.input.prop( "disabled", !!options.disabled );
|
7993
|
-
|
7708
|
+
outer.toggleClass( "ui-state-disabled", !!options.disabled );
|
7994
7709
|
}
|
7995
7710
|
if ( options.mini !== undefined ) {
|
7996
|
-
|
7711
|
+
outer.toggleClass( "ui-mini", !!options.mini );
|
7997
7712
|
}
|
7998
7713
|
if ( options.theme !== undefined ) {
|
7999
7714
|
label
|
@@ -8001,14 +7716,13 @@ $.widget( "mobile.checkboxradio", $.extend( {
|
|
8001
7716
|
.addClass( "ui-btn-" + options.theme );
|
8002
7717
|
}
|
8003
7718
|
if ( options.wrapperClass !== undefined ) {
|
8004
|
-
|
7719
|
+
outer
|
8005
7720
|
.removeClass( currentOptions.wrapperClass )
|
8006
7721
|
.addClass( options.wrapperClass );
|
8007
7722
|
}
|
8008
|
-
if ( options.iconpos !== undefined &&
|
8009
|
-
( this.element.parents( "[data-" + $.mobile.ns + "type='horizontal']" ).length === 0 ) ) {
|
7723
|
+
if ( options.iconpos !== undefined && hasIcon ) {
|
8010
7724
|
label.removeClass( "ui-btn-icon-" + currentOptions.iconpos ).addClass( "ui-btn-icon-" + options.iconpos );
|
8011
|
-
} else if (
|
7725
|
+
} else if ( !hasIcon ) {
|
8012
7726
|
label.removeClass( "ui-btn-icon-" + currentOptions.iconpos );
|
8013
7727
|
}
|
8014
7728
|
this._super( options );
|
@@ -8060,7 +7774,7 @@ $.widget( "mobile.button", {
|
|
8060
7774
|
this.widget().removeClass( $.mobile.focusClass );
|
8061
7775
|
}
|
8062
7776
|
});
|
8063
|
-
|
7777
|
+
|
8064
7778
|
this.refresh( true );
|
8065
7779
|
},
|
8066
7780
|
|
@@ -8069,7 +7783,8 @@ $.widget( "mobile.button", {
|
|
8069
7783
|
},
|
8070
7784
|
|
8071
7785
|
_button: function() {
|
8072
|
-
var options = this.options
|
7786
|
+
var options = this.options,
|
7787
|
+
iconClasses = this._getIconClasses( this.options );
|
8073
7788
|
|
8074
7789
|
return $("<div class='ui-btn ui-input-btn" +
|
8075
7790
|
( options.wrapperClass ? " " + options.wrapperClass : "" ) +
|
@@ -8079,11 +7794,8 @@ $.widget( "mobile.button", {
|
|
8079
7794
|
( options.inline ? " ui-btn-inline" : "" ) +
|
8080
7795
|
( options.mini ? " ui-mini" : "" ) +
|
8081
7796
|
( options.disabled ? " ui-state-disabled" : "" ) +
|
8082
|
-
( (
|
8083
|
-
|
8084
|
-
( options.icon ? " ui-btn-icon-left" : "" ) ) +
|
8085
|
-
( options.icon ? " ui-icon-" + options.icon : "" ) +
|
8086
|
-
"' >" + this.element.val() + "</div>");
|
7797
|
+
( iconClasses ? ( " " + iconClasses ) : "" ) +
|
7798
|
+
"' >" + this.element.val() + "</div>" );
|
8087
7799
|
},
|
8088
7800
|
|
8089
7801
|
widget: function() {
|
@@ -8095,6 +7807,12 @@ $.widget( "mobile.button", {
|
|
8095
7807
|
this.button.remove();
|
8096
7808
|
},
|
8097
7809
|
|
7810
|
+
_getIconClasses: function( options ) {
|
7811
|
+
return ( options.icon ? ( "ui-icon-" + options.icon +
|
7812
|
+
( options.iconshadow ? " ui-shadow-icon" : "" ) + /* TODO: Deprecated in 1.4, remove in 1.5. */
|
7813
|
+
" ui-btn-icon-" + options.iconpos ) : "" );
|
7814
|
+
},
|
7815
|
+
|
8098
7816
|
_setOptions: function( options ) {
|
8099
7817
|
var outer = this.widget();
|
8100
7818
|
|
@@ -8115,22 +7833,20 @@ $.widget( "mobile.button", {
|
|
8115
7833
|
if ( options.mini !== undefined ) {
|
8116
7834
|
outer.toggleClass( "ui-mini", options.mini );
|
8117
7835
|
}
|
8118
|
-
if ( options.
|
8119
|
-
outer.removeClass( "ui-btn-icon-" + options.iconpos );
|
8120
|
-
}
|
8121
|
-
if ( options.icon !== undefined ) {
|
8122
|
-
if ( !this.options.iconpos && !options.iconpos ) {
|
8123
|
-
outer.toggleClass( "ui-btn-icon-left", options.icon );
|
8124
|
-
}
|
8125
|
-
outer
|
8126
|
-
.removeClass( "ui-icon-" + this.options.icon )
|
8127
|
-
.toggleClass( "ui-icon-" + options.icon, options.icon );
|
8128
|
-
}
|
8129
|
-
if( options.disabled !== undefined ) {
|
7836
|
+
if ( options.disabled !== undefined ) {
|
8130
7837
|
this.element.prop( "disabled", options.disabled );
|
8131
7838
|
outer.toggleClass( "ui-state-disabled", options.disabled );
|
8132
7839
|
}
|
8133
7840
|
|
7841
|
+
if ( options.icon !== undefined ||
|
7842
|
+
options.iconshadow !== undefined || /* TODO: Deprecated in 1.4, remove in 1.5. */
|
7843
|
+
options.iconpos !== undefined ) {
|
7844
|
+
outer
|
7845
|
+
.removeClass( this._getIconClasses( this.options ) )
|
7846
|
+
.addClass( this._getIconClasses(
|
7847
|
+
$.extend( {}, this.options, options ) ) );
|
7848
|
+
}
|
7849
|
+
|
8134
7850
|
this._super( options );
|
8135
7851
|
},
|
8136
7852
|
|
@@ -8184,7 +7900,25 @@ $.widget( "mobile.button", {
|
|
8184
7900
|
(function( $, undefined ) {
|
8185
7901
|
|
8186
7902
|
$.widget( "mobile.textinput", {
|
8187
|
-
initSelector: "input[type='text'],
|
7903
|
+
initSelector: "input[type='text']," +
|
7904
|
+
"input[type='search']," +
|
7905
|
+
":jqmData(type='search')," +
|
7906
|
+
"input[type='number']," +
|
7907
|
+
":jqmData(type='number')," +
|
7908
|
+
"input[type='password']," +
|
7909
|
+
"input[type='email']," +
|
7910
|
+
"input[type='url']," +
|
7911
|
+
"input[type='tel']," +
|
7912
|
+
"textarea," +
|
7913
|
+
"input[type='time']," +
|
7914
|
+
"input[type='date']," +
|
7915
|
+
"input[type='month']," +
|
7916
|
+
"input[type='week']," +
|
7917
|
+
"input[type='datetime']," +
|
7918
|
+
"input[type='datetime-local']," +
|
7919
|
+
"input[type='color']," +
|
7920
|
+
"input:not([type])," +
|
7921
|
+
"input[type='file']",
|
8188
7922
|
|
8189
7923
|
options: {
|
8190
7924
|
theme: null,
|
@@ -8205,7 +7939,11 @@ $.widget( "mobile.textinput", {
|
|
8205
7939
|
inputNeedsWrap = ( (this.element.is( "input" ) ||
|
8206
7940
|
this.element.is( "[data-" + ( $.mobile.ns || "" ) + "type='search']" ) ) &&
|
8207
7941
|
!isRange );
|
8208
|
-
|
7942
|
+
|
7943
|
+
if ( this.element.prop( "disabled" ) ) {
|
7944
|
+
options.disabled = true;
|
7945
|
+
}
|
7946
|
+
|
8209
7947
|
$.extend( this, {
|
8210
7948
|
classes: this._classesFromOptions(),
|
8211
7949
|
isSearch: isSearch,
|
@@ -8216,10 +7954,6 @@ $.widget( "mobile.textinput", {
|
|
8216
7954
|
|
8217
7955
|
this._autoCorrect();
|
8218
7956
|
|
8219
|
-
if ( this.element[ 0 ].disabled ) {
|
8220
|
-
options.disabled = true;
|
8221
|
-
}
|
8222
|
-
|
8223
7957
|
if ( !options.enhanced ) {
|
8224
7958
|
this._enhance();
|
8225
7959
|
}
|
@@ -8720,7 +8454,6 @@ $.widget( "mobile.slider", $.extend( {
|
|
8720
8454
|
return this.isToggleSwitch ? this.element[0].selectedIndex : parseFloat( this.element.val() ) ;
|
8721
8455
|
},
|
8722
8456
|
|
8723
|
-
|
8724
8457
|
_reset: function() {
|
8725
8458
|
this.refresh( undefined, false, true );
|
8726
8459
|
},
|
@@ -9061,6 +8794,7 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9061
8794
|
theme: null,
|
9062
8795
|
enhanced: false,
|
9063
8796
|
wrapperClass: null,
|
8797
|
+
corners: true,
|
9064
8798
|
mini: false
|
9065
8799
|
},
|
9066
8800
|
|
@@ -9076,7 +8810,9 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9076
8810
|
});
|
9077
8811
|
}
|
9078
8812
|
|
9079
|
-
|
8813
|
+
this._handleFormReset();
|
8814
|
+
|
8815
|
+
if ( this.element.is( ":disabled" ) ) {
|
9080
8816
|
this._setOptions({
|
9081
8817
|
"disabled": true
|
9082
8818
|
});
|
@@ -9091,6 +8827,10 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9091
8827
|
this._on( this.on, {
|
9092
8828
|
"keydown": "_keydown"
|
9093
8829
|
});
|
8830
|
+
|
8831
|
+
this._on( {
|
8832
|
+
"change": "refresh"
|
8833
|
+
});
|
9094
8834
|
},
|
9095
8835
|
|
9096
8836
|
widget: function() {
|
@@ -9102,9 +8842,9 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9102
8842
|
if ( this.type === "SELECT" ) {
|
9103
8843
|
this.element.get( 0 ).selectedIndex = 0;
|
9104
8844
|
} else {
|
9105
|
-
this.element.prop( "checked",
|
8845
|
+
this.element.prop( "checked", false );
|
9106
8846
|
}
|
9107
|
-
this.
|
8847
|
+
this.element.trigger( "change" );
|
9108
8848
|
},
|
9109
8849
|
|
9110
8850
|
_right: function() {
|
@@ -9112,27 +8852,49 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9112
8852
|
if ( this.type === "SELECT" ) {
|
9113
8853
|
this.element.get( 0 ).selectedIndex = 1;
|
9114
8854
|
} else {
|
9115
|
-
this.element.prop( "checked",
|
8855
|
+
this.element.prop( "checked", true );
|
9116
8856
|
}
|
9117
|
-
this.
|
8857
|
+
this.element.trigger( "change" );
|
9118
8858
|
},
|
9119
8859
|
|
9120
8860
|
_enhance: function() {
|
9121
8861
|
var flipswitch = $( "<div>" ),
|
9122
|
-
|
9123
|
-
|
8862
|
+
options = this.options,
|
8863
|
+
element = this.element,
|
8864
|
+
theme = options.theme ? options.theme : "inherit",
|
8865
|
+
on = $( "<span></span>", { tabindex: 1 } ),
|
9124
8866
|
off = $( "<span></span>" ),
|
9125
|
-
type =
|
9126
|
-
onText = ( type === "INPUT" ) ?
|
9127
|
-
|
9128
|
-
|
9129
|
-
|
9130
|
-
|
9131
|
-
|
9132
|
-
|
9133
|
-
|
9134
|
-
|
9135
|
-
|
8867
|
+
type = element.get( 0 ).tagName,
|
8868
|
+
onText = ( type === "INPUT" ) ?
|
8869
|
+
options.onText : element.find( "option" ).eq( 1 ).text(),
|
8870
|
+
offText = ( type === "INPUT" ) ?
|
8871
|
+
options.offText : element.find( "option" ).eq( 0 ).text();
|
8872
|
+
|
8873
|
+
on
|
8874
|
+
.addClass( "ui-flipswitch-on ui-btn ui-shadow ui-btn-inherit" )
|
8875
|
+
.text( onText );
|
8876
|
+
off
|
8877
|
+
.addClass( "ui-flipswitch-off" )
|
8878
|
+
.text( offText );
|
8879
|
+
|
8880
|
+
flipswitch
|
8881
|
+
.addClass( "ui-flipswitch ui-shadow-inset " +
|
8882
|
+
"ui-bar-" + theme + " " +
|
8883
|
+
( options.wrapperClass ? options.wrapperClass : "" ) + " " +
|
8884
|
+
( ( element.is( ":checked" ) ||
|
8885
|
+
element
|
8886
|
+
.find( "option" )
|
8887
|
+
.eq( 1 )
|
8888
|
+
.is( ":selected" ) ) ? "ui-flipswitch-active" : "" ) +
|
8889
|
+
( element.is(":disabled") ? " ui-state-disabled": "") +
|
8890
|
+
( options.corners ? " ui-corner-all": "" ) +
|
8891
|
+
( options.mini ? " ui-mini": "" ) )
|
8892
|
+
.append( on, off );
|
8893
|
+
|
8894
|
+
element
|
8895
|
+
.addClass( "ui-flipswitch-input" )
|
8896
|
+
.after( flipswitch )
|
8897
|
+
.appendTo( flipswitch );
|
9136
8898
|
|
9137
8899
|
$.extend( this, {
|
9138
8900
|
flipswitch: flipswitch,
|
@@ -9142,21 +8904,29 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9142
8904
|
});
|
9143
8905
|
},
|
9144
8906
|
|
9145
|
-
|
9146
|
-
|
9147
|
-
|
8907
|
+
_reset: function() {
|
8908
|
+
this.refresh();
|
8909
|
+
},
|
8910
|
+
|
8911
|
+
refresh: function() {
|
8912
|
+
var direction,
|
8913
|
+
existingDirection = this.flipswitch.hasClass( "ui-flipswitch-active" ) ? "_right" : "_left";
|
8914
|
+
|
9148
8915
|
if ( this.type === "SELECT" ) {
|
9149
|
-
direction = ( this.element.get( 0 ).selectedIndex > 0 )? "_right": "_left";
|
8916
|
+
direction = ( this.element.get( 0 ).selectedIndex > 0 ) ? "_right": "_left";
|
9150
8917
|
} else {
|
9151
|
-
direction = this.element.
|
8918
|
+
direction = this.element.prop( "checked" ) ? "_right": "_left";
|
8919
|
+
}
|
8920
|
+
|
8921
|
+
if ( direction !== existingDirection ) {
|
8922
|
+
this[ direction ]();
|
9152
8923
|
}
|
9153
|
-
this[ direction ]();
|
9154
8924
|
},
|
9155
8925
|
|
9156
8926
|
_toggle: function() {
|
9157
8927
|
var direction = this.flipswitch.hasClass( "ui-flipswitch-active" ) ? "_left" : "_right";
|
9158
|
-
|
9159
|
-
this[direction]();
|
8928
|
+
|
8929
|
+
this[ direction ]();
|
9160
8930
|
},
|
9161
8931
|
|
9162
8932
|
_keydown: function( e ) {
|
@@ -9188,10 +8958,13 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9188
8958
|
if ( options.disabled !== undefined ) {
|
9189
8959
|
this.widget().toggleClass( "ui-state-disabled", options.disabled );
|
9190
8960
|
}
|
9191
|
-
if( options.mini !== undefined ) {
|
8961
|
+
if ( options.mini !== undefined ) {
|
9192
8962
|
this.widget().toggleClass( "ui-mini", options.mini );
|
9193
8963
|
}
|
9194
|
-
|
8964
|
+
if ( options.corners !== undefined ) {
|
8965
|
+
this.widget().toggleClass( "ui-corner-all", options.corners );
|
8966
|
+
}
|
8967
|
+
|
9195
8968
|
this._super( options );
|
9196
8969
|
},
|
9197
8970
|
|
@@ -9227,9 +9000,13 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9227
9000
|
_inputFirst = $el.find( "input" ).first(),
|
9228
9001
|
_inputLast = $el.find( "input" ).last(),
|
9229
9002
|
_label = $el.find( "label" ).first(),
|
9230
|
-
|
9231
|
-
|
9232
|
-
|
9003
|
+
_sliderWidgetFirst = $.data( _inputFirst.get( 0 ), "mobile-slider" ) ||
|
9004
|
+
$.data( _inputFirst.slider().get( 0 ), "mobile-slider" ),
|
9005
|
+
_sliderWidgetLast = $.data( _inputLast.get(0), "mobile-slider" ) ||
|
9006
|
+
$.data( _inputLast.slider().get( 0 ), "mobile-slider" ),
|
9007
|
+
_sliderFirst = _sliderWidgetFirst.slider,
|
9008
|
+
_sliderLast = _sliderWidgetLast.slider,
|
9009
|
+
firstHandle = _sliderWidgetFirst.handle,
|
9233
9010
|
_sliders = $( "<div class='ui-rangeslider-sliders' />" ).appendTo( $el );
|
9234
9011
|
|
9235
9012
|
_inputFirst.addClass( "ui-rangeslider-first" );
|
@@ -9344,7 +9121,7 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9344
9121
|
var $el = this.element,
|
9345
9122
|
o = this.options;
|
9346
9123
|
|
9347
|
-
if( this._inputFirst.is( ":disabled" ) || this._inputLast.is( ":disabled" ) ){
|
9124
|
+
if ( this._inputFirst.is( ":disabled" ) || this._inputLast.is( ":disabled" ) ) {
|
9348
9125
|
this.options.disabled = true;
|
9349
9126
|
}
|
9350
9127
|
|
@@ -9372,10 +9149,9 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9372
9149
|
thisSlider = first ? this._inputFirst : this._inputLast,
|
9373
9150
|
otherSlider = first ? this._inputLast : this._inputFirst;
|
9374
9151
|
|
9375
|
-
|
9376
|
-
if ( ( this._inputFirst.val() > this._inputLast.val() && event.type === "mousedown" && !$(event.target).hasClass("ui-slider-handle")) ){
|
9152
|
+
if ( ( this._inputFirst.val() > this._inputLast.val() && event.type === "mousedown" && !$(event.target).hasClass("ui-slider-handle")) ) {
|
9377
9153
|
thisSlider.blur();
|
9378
|
-
} else if ( event.type === "mousedown" ){
|
9154
|
+
} else if ( event.type === "mousedown" ) {
|
9379
9155
|
return;
|
9380
9156
|
}
|
9381
9157
|
if ( min > max && !this._sliderTarget ) {
|
@@ -9467,7 +9243,7 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9467
9243
|
_create: function() {
|
9468
9244
|
this._super();
|
9469
9245
|
|
9470
|
-
if ( !!this.options.clearBtn || this.isSearch ){
|
9246
|
+
if ( !!this.options.clearBtn || this.isSearch ) {
|
9471
9247
|
this._addClearBtn();
|
9472
9248
|
}
|
9473
9249
|
},
|
@@ -9535,11 +9311,11 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9535
9311
|
this._off( this.element, "keyup change input focus blur cut paste" );
|
9536
9312
|
},
|
9537
9313
|
|
9538
|
-
_setOptions:function( options ) {
|
9314
|
+
_setOptions: function( options ) {
|
9539
9315
|
this._super( options );
|
9540
9316
|
|
9541
9317
|
if ( options.clearbtn !== undefined && !this.element.is( "textarea, :jqmData(type='range')" ) ) {
|
9542
|
-
if ( options.clearBtn ){
|
9318
|
+
if ( options.clearBtn ) {
|
9543
9319
|
this._addClearBtn();
|
9544
9320
|
} else {
|
9545
9321
|
this._destroyClear();
|
@@ -9571,7 +9347,6 @@ $.widget( "mobile.flipswitch", $.extend({
|
|
9571
9347
|
|
9572
9348
|
});
|
9573
9349
|
|
9574
|
-
|
9575
9350
|
})( jQuery );
|
9576
9351
|
|
9577
9352
|
(function( $, undefined ) {
|
@@ -9725,7 +9500,6 @@ $.widget( "mobile.selectmenu", $.extend( {
|
|
9725
9500
|
|
9726
9501
|
options: {
|
9727
9502
|
theme: null,
|
9728
|
-
disabled: false,
|
9729
9503
|
icon: "carat-d",
|
9730
9504
|
iconpos: "right",
|
9731
9505
|
inline: false,
|
@@ -10022,21 +9796,14 @@ $.mobile.links = function( target ) {
|
|
10022
9796
|
.filter( ":jqmData(rel='popup')[href][href!='']" )
|
10023
9797
|
.each( function() {
|
10024
9798
|
// Accessibility info for popups
|
10025
|
-
var
|
10026
|
-
|
10027
|
-
|
10028
|
-
|
10029
|
-
|
10030
|
-
|
10031
|
-
|
10032
|
-
|
10033
|
-
$( document )
|
10034
|
-
.on( "popupafteropen", sel, function() {
|
10035
|
-
e.setAttribute( "aria-expanded", true );
|
10036
|
-
})
|
10037
|
-
.on( "popupafterclose", sel, function() {
|
10038
|
-
e.setAttribute( "aria-expanded", false );
|
10039
|
-
});
|
9799
|
+
var element = this,
|
9800
|
+
idref = element.getAttribute( "href" ).substring( 1 );
|
9801
|
+
|
9802
|
+
if ( idref ) {
|
9803
|
+
element.setAttribute( "aria-haspopup", true );
|
9804
|
+
element.setAttribute( "aria-owns", idref );
|
9805
|
+
element.setAttribute( "aria-expanded", false );
|
9806
|
+
}
|
10040
9807
|
})
|
10041
9808
|
.end()
|
10042
9809
|
.not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" )
|
@@ -10197,13 +9964,21 @@ $.widget( "mobile.popup", {
|
|
10197
9964
|
return false;
|
10198
9965
|
},
|
10199
9966
|
|
10200
|
-
// Make sure the screen
|
9967
|
+
// Make sure the screen covers the entire document - CSS is sometimes not
|
9968
|
+
// enough to accomplish this.
|
10201
9969
|
_resizeScreen: function() {
|
10202
|
-
var
|
9970
|
+
var screen = this._ui.screen,
|
9971
|
+
popupHeight = this._ui.container.outerHeight( true ),
|
9972
|
+
screenHeight = screen.removeAttr( "style" ).height(),
|
10203
9973
|
|
10204
|
-
|
10205
|
-
|
10206
|
-
this.
|
9974
|
+
// Subtracting 1 here is necessary for an obscure Andrdoid 4.0 bug where
|
9975
|
+
// the browser hangs if the screen covers the entire document :/
|
9976
|
+
documentHeight = this.document.height() - 1;
|
9977
|
+
|
9978
|
+
if ( screenHeight < documentHeight ) {
|
9979
|
+
screen.height( documentHeight );
|
9980
|
+
} else if ( popupHeight > screenHeight ) {
|
9981
|
+
screen.height( popupHeight );
|
10207
9982
|
}
|
10208
9983
|
},
|
10209
9984
|
|
@@ -10470,7 +10245,6 @@ $.widget( "mobile.popup", {
|
|
10470
10245
|
rectangle = clampInfo.rc,
|
10471
10246
|
menuSize = clampInfo.menuSize;
|
10472
10247
|
|
10473
|
-
|
10474
10248
|
// Center the menu over the desired coordinates, while not going outside
|
10475
10249
|
// the window tolerances. This will center wrt. the window if the popup is
|
10476
10250
|
// too large.
|
@@ -10636,11 +10410,16 @@ $.widget( "mobile.popup", {
|
|
10636
10410
|
},
|
10637
10411
|
|
10638
10412
|
_openPrerequisitesComplete: function() {
|
10413
|
+
var id = this.element.attr( "id" );
|
10414
|
+
|
10639
10415
|
this._ui.container.addClass( "ui-popup-active" );
|
10640
10416
|
this._isOpen = true;
|
10641
10417
|
this._resizeScreen();
|
10642
10418
|
this._ui.container.attr( "tabindex", "0" ).focus();
|
10643
10419
|
this._ignoreResizeEvents();
|
10420
|
+
if ( id ) {
|
10421
|
+
this.document.find( "[aria-haspopup='true'][aria-owns='" + id + "']" ).attr( "aria-expanded", true );
|
10422
|
+
}
|
10644
10423
|
this._trigger( "afteropen" );
|
10645
10424
|
},
|
10646
10425
|
|
@@ -10718,7 +10497,8 @@ $.widget( "mobile.popup", {
|
|
10718
10497
|
},
|
10719
10498
|
|
10720
10499
|
_closePrerequisitesDone: function() {
|
10721
|
-
var container = this._ui.container
|
10500
|
+
var container = this._ui.container,
|
10501
|
+
id = this.element.attr( "id" );
|
10722
10502
|
|
10723
10503
|
container.removeAttr( "tabindex" );
|
10724
10504
|
|
@@ -10728,6 +10508,10 @@ $.widget( "mobile.popup", {
|
|
10728
10508
|
// Blur elements inside the container, including the container
|
10729
10509
|
$( ":focus", container[ 0 ] ).add( container[ 0 ] ).blur();
|
10730
10510
|
|
10511
|
+
if ( id ) {
|
10512
|
+
this.document.find( "[aria-haspopup='true'][aria-owns='" + id + "']" ).attr( "aria-expanded", false );
|
10513
|
+
}
|
10514
|
+
|
10731
10515
|
// alert users that the popup is closed
|
10732
10516
|
this._trigger( "afterclose" );
|
10733
10517
|
},
|
@@ -10891,7 +10675,7 @@ $.widget( "mobile.popup", {
|
|
10891
10675
|
|
10892
10676
|
// if the current url has no dialog hash key proceed as normal
|
10893
10677
|
// otherwise, if the page is a dialog simply tack on the hash key
|
10894
|
-
if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ){
|
10678
|
+
if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ) {
|
10895
10679
|
url = url + (url.indexOf( "#" ) > -1 ? hashkey : "#" + hashkey);
|
10896
10680
|
} else {
|
10897
10681
|
url = $.mobile.path.parseLocation().hash + hashkey;
|
@@ -10935,7 +10719,6 @@ $.widget( "mobile.popup", {
|
|
10935
10719
|
}
|
10936
10720
|
});
|
10937
10721
|
|
10938
|
-
|
10939
10722
|
// TODO this can be moved inside the widget
|
10940
10723
|
$.mobile.popup.handleLink = function( $link ) {
|
10941
10724
|
var offset,
|
@@ -11188,8 +10971,8 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
|
|
11188
10971
|
// toggle checkbox class for multiple selects
|
11189
10972
|
if ( self.isMultiple ) {
|
11190
10973
|
$( this ).find( "a" )
|
11191
|
-
.toggleClass( "ui-
|
11192
|
-
.toggleClass( "ui-
|
10974
|
+
.toggleClass( "ui-checkbox-on", option.selected )
|
10975
|
+
.toggleClass( "ui-checkbox-off", !option.selected );
|
11193
10976
|
}
|
11194
10977
|
|
11195
10978
|
// trigger change if value changed
|
@@ -11269,7 +11052,7 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
|
|
11269
11052
|
|
11270
11053
|
// Multiple selects: add the "on" checkbox state to the icon
|
11271
11054
|
if ( self.isMultiple ) {
|
11272
|
-
item.find( "a" ).removeClass( "ui-
|
11055
|
+
item.find( "a" ).removeClass( "ui-checkbox-off" ).addClass( "ui-checkbox-on" );
|
11273
11056
|
} else {
|
11274
11057
|
if ( item.hasClass( "ui-screen-hidden" ) ) {
|
11275
11058
|
item.next().find( "a" ).addClass( $.mobile.activeBtnClass );
|
@@ -11359,7 +11142,7 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
|
|
11359
11142
|
o = this.options,
|
11360
11143
|
placeholder = this.placeholder,
|
11361
11144
|
needPlaceholder = true,
|
11362
|
-
dataIcon =
|
11145
|
+
dataIcon = "false",
|
11363
11146
|
$options, numOptions, select,
|
11364
11147
|
dataPrefix = "data-" + $.mobile.ns,
|
11365
11148
|
dataIndexAttr = dataPrefix + "option-index",
|
@@ -11430,7 +11213,7 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
|
|
11430
11213
|
|
11431
11214
|
item = document.createElement( "li" );
|
11432
11215
|
if ( option.disabled ) {
|
11433
|
-
classes.push( "ui-disabled" );
|
11216
|
+
classes.push( "ui-state-disabled" );
|
11434
11217
|
item.setAttribute( "aria-disabled", true );
|
11435
11218
|
}
|
11436
11219
|
item.setAttribute( dataIndexAttr, i );
|
@@ -11441,6 +11224,10 @@ $.widget( "mobile.selectmenu", $.mobile.selectmenu, {
|
|
11441
11224
|
item.className = classes.join( " " );
|
11442
11225
|
item.setAttribute( "role", "option" );
|
11443
11226
|
anchor.setAttribute( "tabindex", "-1" );
|
11227
|
+
if ( this.isMultiple ) {
|
11228
|
+
$( anchor ).addClass( "ui-btn ui-checkbox-off ui-btn-icon-right" );
|
11229
|
+
}
|
11230
|
+
|
11444
11231
|
item.appendChild( anchor );
|
11445
11232
|
fragment.appendChild( item );
|
11446
11233
|
}
|
@@ -11783,13 +11570,13 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11783
11570
|
opts = this.options;
|
11784
11571
|
|
11785
11572
|
// Run buttonmarkup
|
11786
|
-
if( $.fn.buttonMarkup ){
|
11573
|
+
if ( $.fn.buttonMarkup ) {
|
11787
11574
|
this.element.find( $.fn.buttonMarkup.initSelector ).buttonMarkup();
|
11788
11575
|
}
|
11789
11576
|
// Enhance child widgets
|
11790
11577
|
$.each( this._childWidgets, $.proxy( function( number, widgetName ) {
|
11791
|
-
if( $.mobile[ widgetName ] ) {
|
11792
|
-
this.element.find( $.mobile[ widgetName ].initSelector )[ widgetName ]();
|
11578
|
+
if ( $.mobile[ widgetName ] ) {
|
11579
|
+
this.element.find( $.mobile[ widgetName ].initSelector ).not( $.mobile.page.prototype.keepNativeSelector() )[ widgetName ]();
|
11793
11580
|
}
|
11794
11581
|
}, this ));
|
11795
11582
|
|
@@ -11806,7 +11593,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11806
11593
|
} else {
|
11807
11594
|
this._ui = this._enhance();
|
11808
11595
|
}
|
11809
|
-
|
11596
|
+
|
11810
11597
|
},
|
11811
11598
|
|
11812
11599
|
_childWidgets: [ "checkboxradio", "selectmenu", "button" ],
|
@@ -11847,7 +11634,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11847
11634
|
},
|
11848
11635
|
|
11849
11636
|
_setOptions: function( options ) {
|
11850
|
-
var callRefresh,
|
11637
|
+
var callRefresh, returnValue,
|
11851
11638
|
elem = this.element;
|
11852
11639
|
|
11853
11640
|
// Must have one of horizontal or vertical
|
@@ -11881,11 +11668,13 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11881
11668
|
callRefresh = true;
|
11882
11669
|
}
|
11883
11670
|
|
11671
|
+
returnValue = this._super( options );
|
11672
|
+
|
11884
11673
|
if ( callRefresh ) {
|
11885
11674
|
this.refresh();
|
11886
11675
|
}
|
11887
11676
|
|
11888
|
-
return
|
11677
|
+
return returnValue;
|
11889
11678
|
},
|
11890
11679
|
|
11891
11680
|
container: function() {
|
@@ -11934,7 +11723,6 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11934
11723
|
|
11935
11724
|
(function( $, undefined ) {
|
11936
11725
|
|
11937
|
-
|
11938
11726
|
$.widget( "mobile.toolbar", {
|
11939
11727
|
initSelector: ":jqmData(role='footer'), :jqmData(role='header')",
|
11940
11728
|
|
@@ -11946,10 +11734,10 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11946
11734
|
},
|
11947
11735
|
|
11948
11736
|
_create: function() {
|
11949
|
-
var leftbtn, rightbtn,
|
11737
|
+
var leftbtn, rightbtn,
|
11950
11738
|
role = this.element.is( ":jqmData(role='header')" ) ? "header" : "footer",
|
11951
11739
|
page = this.element.closest( ".ui-page" );
|
11952
|
-
if ( page.length === 0 ){
|
11740
|
+
if ( page.length === 0 ) {
|
11953
11741
|
page = false;
|
11954
11742
|
this._on( this.document, {
|
11955
11743
|
"pageshow": "refresh"
|
@@ -11960,7 +11748,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11960
11748
|
page: page,
|
11961
11749
|
leftbtn: leftbtn,
|
11962
11750
|
rightbtn: rightbtn,
|
11963
|
-
backBtn:
|
11751
|
+
backBtn: null
|
11964
11752
|
});
|
11965
11753
|
this.element.attr( "role", role === "header" ? "banner" : "contentinfo" ).addClass( "ui-" + role );
|
11966
11754
|
this.refresh();
|
@@ -11978,7 +11766,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
11978
11766
|
this.element.find( ".ui-toolbar-back-btn" ).remove();
|
11979
11767
|
}
|
11980
11768
|
}
|
11981
|
-
if ( o.backBtnTheme
|
11769
|
+
if ( o.backBtnTheme != null ) {
|
11982
11770
|
this.element
|
11983
11771
|
.find( ".ui-toolbar-back-btn" )
|
11984
11772
|
.addClass( "ui-btn ui-btn-" + o.backBtnTheme );
|
@@ -12000,7 +11788,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12000
11788
|
this._addHeaderButtonClasses();
|
12001
11789
|
}
|
12002
11790
|
if ( !this.page ) {
|
12003
|
-
|
11791
|
+
this._setRelative();
|
12004
11792
|
if ( this.role === "footer" ) {
|
12005
11793
|
this.element.appendTo( "body" );
|
12006
11794
|
}
|
@@ -12008,11 +11796,18 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12008
11796
|
this._addHeadingClasses();
|
12009
11797
|
this._btnMarkup();
|
12010
11798
|
},
|
12011
|
-
|
11799
|
+
|
11800
|
+
//we only want this to run on non fixed toolbars so make it easy to override
|
11801
|
+
_setRelative: function() {
|
11802
|
+
$( "[data-"+ $.mobile.ns + "role='page']" ).css({ "position": "relative" });
|
11803
|
+
},
|
11804
|
+
|
11805
|
+
// Deprecated in 1.4. As from 1.5 button classes have to be present in the markup.
|
12012
11806
|
_btnMarkup: function() {
|
12013
11807
|
this.element.children( "a" ).attr( "data-" + $.mobile.ns + "role", "button" );
|
12014
11808
|
this.element.trigger( "create" );
|
12015
11809
|
},
|
11810
|
+
// Deprecated in 1.4. As from 1.5 ui-btn-left/right classes have to be present in the markup.
|
12016
11811
|
_addHeaderButtonClasses: function() {
|
12017
11812
|
var $headeranchors = this.element.children( "a, button" );
|
12018
11813
|
this.leftbtn = $headeranchors.hasClass( "ui-btn-left" );
|
@@ -12024,10 +11819,18 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12024
11819
|
|
12025
11820
|
},
|
12026
11821
|
_addBackButton: function() {
|
12027
|
-
|
12028
|
-
|
12029
|
-
|
12030
|
-
|
11822
|
+
var theme,
|
11823
|
+
options = this.options;
|
11824
|
+
|
11825
|
+
if ( !this.backBtn ) {
|
11826
|
+
theme = options.backBtnTheme || options.theme;
|
11827
|
+
this.backBtn = $( "<a role='button' href='javascript:void(0);' " +
|
11828
|
+
"class='ui-btn ui-corner-all ui-shadow ui-btn-left " +
|
11829
|
+
( theme ? "ui-btn-" + theme + " " : "" ) +
|
11830
|
+
"ui-toolbar-back-btn ui-icon-carat-l ui-btn-icon-left' " +
|
11831
|
+
"data-" + $.mobile.ns + "rel='back'>" + options.backBtnText + "</a>" )
|
11832
|
+
.prependTo( this.element );
|
11833
|
+
}
|
12031
11834
|
},
|
12032
11835
|
_addHeadingClasses: function() {
|
12033
11836
|
this.element.children( "h1, h2, h3, h4, h5, h6" )
|
@@ -12039,12 +11842,11 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12039
11842
|
});
|
12040
11843
|
}
|
12041
11844
|
});
|
12042
|
-
|
11845
|
+
|
12043
11846
|
})( jQuery );
|
12044
11847
|
|
12045
11848
|
(function( $, undefined ) {
|
12046
11849
|
|
12047
|
-
|
12048
11850
|
$.widget( "mobile.toolbar", $.mobile.toolbar, {
|
12049
11851
|
options: {
|
12050
11852
|
position:null,
|
@@ -12071,12 +11873,12 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12071
11873
|
|
12072
11874
|
_create: function() {
|
12073
11875
|
this._super();
|
12074
|
-
if ( this.options.position === "fixed" && !this.options.supportBlacklist() ){
|
11876
|
+
if ( this.options.position === "fixed" && !this.options.supportBlacklist() ) {
|
12075
11877
|
this._makeFixed();
|
12076
11878
|
}
|
12077
11879
|
},
|
12078
11880
|
|
12079
|
-
_makeFixed: function(){
|
11881
|
+
_makeFixed: function() {
|
12080
11882
|
this.element.addClass( "ui-"+ this.role +"-fixed" );
|
12081
11883
|
this.updatePagePadding();
|
12082
11884
|
this._addTransitionClass();
|
@@ -12085,14 +11887,14 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12085
11887
|
this._setOptions( this.options );
|
12086
11888
|
},
|
12087
11889
|
|
12088
|
-
_setOptions: function( o ){
|
12089
|
-
if( o.position === "fixed" && this.options.position !== "fixed" ) {
|
11890
|
+
_setOptions: function( o ) {
|
11891
|
+
if ( o.position === "fixed" && this.options.position !== "fixed" ) {
|
12090
11892
|
this._makeFixed();
|
12091
11893
|
}
|
12092
|
-
if ( this.options.position === "fixed" && !this.options.supportBlacklist() ){
|
11894
|
+
if ( this.options.position === "fixed" && !this.options.supportBlacklist() ) {
|
12093
11895
|
var $page = ( !!this.page )? this.page: ( $(".ui-page-active").length > 0 )? $(".ui-page-active"): $(".ui-page").eq(0);
|
12094
11896
|
|
12095
|
-
if ( o.fullscreen !== undefined){
|
11897
|
+
if ( o.fullscreen !== undefined) {
|
12096
11898
|
if ( o.fullscreen ) {
|
12097
11899
|
this.element.addClass( "ui-"+ this.role +"-fullscreen" );
|
12098
11900
|
$page.addClass( "ui-page-" + this.role + "-fullscreen" );
|
@@ -12162,7 +11964,6 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12162
11964
|
var o = this.options,
|
12163
11965
|
thisFooter, thisHeader, nextFooter, nextHeader;
|
12164
11966
|
|
12165
|
-
|
12166
11967
|
if ( o.disablePageZoom ) {
|
12167
11968
|
$.mobile.zoom.enable( true );
|
12168
11969
|
}
|
@@ -12308,6 +12109,12 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12308
12109
|
});
|
12309
12110
|
},
|
12310
12111
|
|
12112
|
+
_setRelative: function() {
|
12113
|
+
if( this.options.position !== "fixed" ){
|
12114
|
+
$( "[data-"+ $.mobile.ns + "role='page']" ).css({ "position": "relative" });
|
12115
|
+
}
|
12116
|
+
},
|
12117
|
+
|
12311
12118
|
_destroy: function() {
|
12312
12119
|
var $el = this.element,
|
12313
12120
|
header = $el.hasClass( "ui-header" );
|
@@ -12323,7 +12130,7 @@ $.widget( "mobile.controlgroup", $.extend( {
|
|
12323
12130
|
(function( $, undefined ) {
|
12324
12131
|
$.widget( "mobile.toolbar", $.mobile.toolbar, {
|
12325
12132
|
|
12326
|
-
|
12133
|
+
_makeFixed: function() {
|
12327
12134
|
this._super();
|
12328
12135
|
this._workarounds();
|
12329
12136
|
},
|
@@ -12708,7 +12515,7 @@ $.widget( "mobile.panel", {
|
|
12708
12515
|
_wrapper: this._getWrapper,
|
12709
12516
|
_fixedToolbars: this._getFixedToolbars
|
12710
12517
|
});
|
12711
|
-
|
12518
|
+
|
12712
12519
|
this._addPanelClasses();
|
12713
12520
|
|
12714
12521
|
// if animating, add the class to do so
|
@@ -12727,17 +12534,17 @@ $.widget( "mobile.panel", {
|
|
12727
12534
|
|
12728
12535
|
this._bindSwipeEvents();
|
12729
12536
|
},
|
12730
|
-
|
12537
|
+
|
12731
12538
|
_getPanelInner: function() {
|
12732
12539
|
var panelInner = this.element.find( "." + this.options.classes.panelInner );
|
12733
|
-
|
12540
|
+
|
12734
12541
|
if ( panelInner.length === 0 ) {
|
12735
12542
|
panelInner = this.element.children().wrapAll( "<div class='" + this.options.classes.panelInner + "' />" ).parent();
|
12736
12543
|
}
|
12737
|
-
|
12544
|
+
|
12738
12545
|
return panelInner;
|
12739
12546
|
},
|
12740
|
-
|
12547
|
+
|
12741
12548
|
_createModal: function() {
|
12742
12549
|
var self = this,
|
12743
12550
|
target = self._parentPage ? self._parentPage.parent() : self.element.parent();
|
@@ -12748,29 +12555,28 @@ $.widget( "mobile.panel", {
|
|
12748
12555
|
})
|
12749
12556
|
.appendTo( target );
|
12750
12557
|
},
|
12751
|
-
|
12558
|
+
|
12752
12559
|
_getPage: function() {
|
12753
12560
|
var page = this._parentPage ? this._parentPage : $( "." + $.mobile.activePageClass );
|
12754
|
-
|
12561
|
+
|
12755
12562
|
return page;
|
12756
12563
|
},
|
12757
|
-
|
12564
|
+
|
12758
12565
|
_getWrapper: function() {
|
12759
|
-
var wrapper = this._page().find( "." + this.options.classes.pageWrapper )
|
12760
|
-
animateClass = ( $.support.cssTransform3d && !!this.options.animate ) ? " " + this.options.classes.animate : "";
|
12566
|
+
var wrapper = this._page().find( "." + this.options.classes.pageWrapper );
|
12761
12567
|
|
12762
12568
|
if ( wrapper.length === 0 ) {
|
12763
|
-
wrapper = this._page().children( ".ui-header:not(
|
12764
|
-
.wrapAll( "<div class='" + this.options.classes.pageWrapper +
|
12569
|
+
wrapper = this._page().children( ".ui-header:not(.ui-header-fixed), .ui-content:not(.ui-popup), .ui-footer:not(.ui-footer-fixed)" )
|
12570
|
+
.wrapAll( "<div class='" + this.options.classes.pageWrapper + "'></div>" )
|
12765
12571
|
.parent();
|
12766
12572
|
}
|
12767
12573
|
|
12768
12574
|
return wrapper;
|
12769
12575
|
},
|
12770
|
-
|
12576
|
+
|
12771
12577
|
_getFixedToolbars: function() {
|
12772
|
-
var extFixedToolbars = $( "body" ).children( ".ui-header
|
12773
|
-
intFixedToolbars = this._page().find( ".ui-header
|
12578
|
+
var extFixedToolbars = $( "body" ).children( ".ui-header-fixed, .ui-footer-fixed" ),
|
12579
|
+
intFixedToolbars = this._page().find( ".ui-header-fixed, .ui-footer-fixed" ),
|
12774
12580
|
fixedToolbars = extFixedToolbars.add( intFixedToolbars ).addClass( this.options.classes.pageFixedToolbar );
|
12775
12581
|
|
12776
12582
|
return fixedToolbars;
|
@@ -12860,10 +12666,10 @@ $.widget( "mobile.panel", {
|
|
12860
12666
|
this._on( "body", {
|
12861
12667
|
"click a": "_handleClick"
|
12862
12668
|
});
|
12863
|
-
|
12669
|
+
|
12864
12670
|
},
|
12865
12671
|
|
12866
|
-
_handleClick: function( e ){
|
12672
|
+
_handleClick: function( e ) {
|
12867
12673
|
if ( e.currentTarget.href.split( "#" )[ 1 ] === this._panelID && this._panelID !== undefined ) {
|
12868
12674
|
e.preventDefault();
|
12869
12675
|
var link = $( e.target );
|
@@ -12912,7 +12718,7 @@ $.widget( "mobile.panel", {
|
|
12912
12718
|
self.close();
|
12913
12719
|
}
|
12914
12720
|
});
|
12915
|
-
|
12721
|
+
|
12916
12722
|
// Clean up open panels after page hide
|
12917
12723
|
if ( self._parentPage ) {
|
12918
12724
|
this.document.on( "pagehide", ":jqmData(role='page')", function() {
|
@@ -12938,11 +12744,11 @@ $.widget( "mobile.panel", {
|
|
12938
12744
|
if ( !this._open ) {
|
12939
12745
|
var self = this,
|
12940
12746
|
o = self.options,
|
12941
|
-
|
12747
|
+
|
12942
12748
|
_openPanel = function() {
|
12943
12749
|
self.document.off( "panelclose" );
|
12944
12750
|
self._page().jqmData( "panel", "open" );
|
12945
|
-
|
12751
|
+
|
12946
12752
|
if ( $.support.cssTransform3d && !!o.animate && o.display !== "overlay" ) {
|
12947
12753
|
self._wrapper().addClass( o.classes.animate );
|
12948
12754
|
self._fixedToolbars().addClass( o.classes.animate );
|
@@ -12966,7 +12772,7 @@ $.widget( "mobile.panel", {
|
|
12966
12772
|
self._positionPanel();
|
12967
12773
|
|
12968
12774
|
self._pageContentOpenClasses = self._getPosDisplayClasses( o.classes.pageContentPrefix );
|
12969
|
-
|
12775
|
+
|
12970
12776
|
if ( o.display !== "overlay" ) {
|
12971
12777
|
self._page().parent().addClass( o.classes.pageContainer );
|
12972
12778
|
self._wrapper().addClass( self._pageContentOpenClasses );
|
@@ -12982,7 +12788,7 @@ $.widget( "mobile.panel", {
|
|
12982
12788
|
},
|
12983
12789
|
complete = function() {
|
12984
12790
|
self.document.off( self._transitionEndEvents, complete );
|
12985
|
-
|
12791
|
+
|
12986
12792
|
if ( o.display !== "overlay" ) {
|
12987
12793
|
self._wrapper().addClass( o.classes.pageContentPrefix + "-open" );
|
12988
12794
|
self._fixedToolbars().addClass( o.classes.pageContentPrefix + "-open" );
|
@@ -12994,7 +12800,7 @@ $.widget( "mobile.panel", {
|
|
12994
12800
|
};
|
12995
12801
|
|
12996
12802
|
self._trigger( "beforeopen" );
|
12997
|
-
|
12803
|
+
|
12998
12804
|
if ( self._page().jqmData( "panel" ) === "open" ) {
|
12999
12805
|
self.document.on( "panelclose", function() {
|
13000
12806
|
_openPanel();
|
@@ -13011,7 +12817,7 @@ $.widget( "mobile.panel", {
|
|
13011
12817
|
if ( this._open ) {
|
13012
12818
|
var self = this,
|
13013
12819
|
o = this.options,
|
13014
|
-
|
12820
|
+
|
13015
12821
|
_closePanel = function() {
|
13016
12822
|
if ( !immediate && $.support.cssTransform3d && !!o.animate ) {
|
13017
12823
|
self.document.on( self._transitionEndEvents, complete );
|
@@ -13020,23 +12826,23 @@ $.widget( "mobile.panel", {
|
|
13020
12826
|
}
|
13021
12827
|
|
13022
12828
|
self.element.removeClass( o.classes.panelOpen );
|
13023
|
-
|
12829
|
+
|
13024
12830
|
if ( o.display !== "overlay" ) {
|
13025
12831
|
self._wrapper().removeClass( self._pageContentOpenClasses );
|
13026
12832
|
self._fixedToolbars().removeClass( self._pageContentOpenClasses );
|
13027
12833
|
}
|
13028
|
-
|
12834
|
+
|
13029
12835
|
if ( self._modal ) {
|
13030
12836
|
self._modal.removeClass( self._modalOpenClasses );
|
13031
12837
|
}
|
13032
12838
|
},
|
13033
12839
|
complete = function() {
|
13034
12840
|
self.document.off( self._transitionEndEvents, complete );
|
13035
|
-
|
12841
|
+
|
13036
12842
|
if ( o.theme && o.display !== "overlay" ) {
|
13037
12843
|
self._page().parent().removeClass( o.classes.pageContainer + "-themed " + o.classes.pageContainer + "-" + o.theme );
|
13038
12844
|
}
|
13039
|
-
|
12845
|
+
|
13040
12846
|
self.element.addClass( o.classes.panelClosed );
|
13041
12847
|
|
13042
12848
|
if ( o.display !== "overlay" ) {
|
@@ -13055,7 +12861,7 @@ $.widget( "mobile.panel", {
|
|
13055
12861
|
$.mobile.resetActivePageHeight();
|
13056
12862
|
|
13057
12863
|
self._page().jqmRemoveData( "panel" );
|
13058
|
-
|
12864
|
+
|
13059
12865
|
self._trigger( "close" );
|
13060
12866
|
};
|
13061
12867
|
|
@@ -13074,23 +12880,28 @@ $.widget( "mobile.panel", {
|
|
13074
12880
|
_transitionEndEvents: "webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd",
|
13075
12881
|
|
13076
12882
|
_destroy: function() {
|
13077
|
-
var
|
13078
|
-
|
12883
|
+
var otherPanels,
|
12884
|
+
o = this.options,
|
12885
|
+
multiplePanels = ( $( "body > :mobile-panel" ).length + $.mobile.activePage.find( ":mobile-panel" ).length ) > 1;
|
13079
12886
|
|
13080
12887
|
if ( o.display !== "overlay" ) {
|
13081
|
-
|
13082
|
-
|
12888
|
+
|
12889
|
+
// remove the wrapper if not in use by another panel
|
12890
|
+
otherPanels = $( "body > :mobile-panel" ).add( $.mobile.activePage.find( ":mobile-panel" ) );
|
12891
|
+
if ( otherPanels.not( ".ui-panel-display-overlay" ).not( this.element ).length === 0 ) {
|
12892
|
+
this._wrapper().children().unwrap();
|
12893
|
+
}
|
13083
12894
|
|
13084
12895
|
if ( this._open ) {
|
13085
|
-
|
12896
|
+
|
13086
12897
|
this._fixedToolbars().removeClass( o.classes.pageContentPrefix + "-open" );
|
13087
|
-
|
12898
|
+
|
13088
12899
|
if ( $.support.cssTransform3d && !!o.animate ) {
|
13089
12900
|
this._fixedToolbars().removeClass( o.classes.animate );
|
13090
12901
|
}
|
13091
|
-
|
12902
|
+
|
13092
12903
|
this._page().parent().removeClass( o.classes.pageContainer );
|
13093
|
-
|
12904
|
+
|
13094
12905
|
if ( o.theme ) {
|
13095
12906
|
this._page().parent().removeClass( o.classes.pageContainer + "-themed " + o.classes.pageContainer + "-" + o.theme );
|
13096
12907
|
}
|
@@ -13100,17 +12911,17 @@ $.widget( "mobile.panel", {
|
|
13100
12911
|
if ( !multiplePanels ) {
|
13101
12912
|
|
13102
12913
|
this.document.off( "panelopen panelclose" );
|
13103
|
-
|
12914
|
+
|
13104
12915
|
if ( this._open ) {
|
13105
12916
|
this.document.off( this._transitionEndEvents );
|
13106
12917
|
$.mobile.resetActivePageHeight();
|
13107
12918
|
}
|
13108
12919
|
}
|
13109
|
-
|
12920
|
+
|
13110
12921
|
if ( this._open ) {
|
13111
12922
|
this._page().jqmRemoveData( "panel" );
|
13112
12923
|
}
|
13113
|
-
|
12924
|
+
|
13114
12925
|
this._panelInner.children().unwrap();
|
13115
12926
|
|
13116
12927
|
this.element
|
@@ -13201,206 +13012,490 @@ $.widget( "mobile.table", {
|
|
13201
13012
|
}
|
13202
13013
|
}
|
13203
13014
|
|
13204
|
-
// Store "cells" data on header as a reference to all cells in the
|
13205
|
-
// same column as this TH
|
13206
|
-
$( this ).jqmData( "cells", table.find( "tr" ).not( trs.eq( 0 ) ).not( this ).children( selector ) );
|
13015
|
+
// Store "cells" data on header as a reference to all cells in the
|
13016
|
+
// same column as this TH
|
13017
|
+
$( this ).jqmData( "cells", table.find( "tr" ).not( trs.eq( 0 ) ).not( this ).children( selector ) );
|
13018
|
+
|
13019
|
+
columnCount++;
|
13020
|
+
});
|
13021
|
+
});
|
13022
|
+
}
|
13023
|
+
});
|
13024
|
+
|
13025
|
+
})( jQuery );
|
13026
|
+
|
13027
|
+
|
13028
|
+
(function( $, undefined ) {
|
13029
|
+
|
13030
|
+
$.widget( "mobile.table", $.mobile.table, {
|
13031
|
+
options: {
|
13032
|
+
mode: "columntoggle",
|
13033
|
+
columnBtnTheme: null,
|
13034
|
+
columnPopupTheme: null,
|
13035
|
+
columnBtnText: "Columns...",
|
13036
|
+
classes: $.extend( $.mobile.table.prototype.options.classes, {
|
13037
|
+
popup: "ui-table-columntoggle-popup",
|
13038
|
+
columnBtn: "ui-table-columntoggle-btn",
|
13039
|
+
priorityPrefix: "ui-table-priority-",
|
13040
|
+
columnToggleTable: "ui-table-columntoggle"
|
13041
|
+
})
|
13042
|
+
},
|
13043
|
+
|
13044
|
+
_create: function() {
|
13045
|
+
this._super();
|
13046
|
+
|
13047
|
+
if ( this.options.mode !== "columntoggle" ) {
|
13048
|
+
return;
|
13049
|
+
}
|
13050
|
+
|
13051
|
+
$.extend( this, {
|
13052
|
+
_menu: null
|
13053
|
+
});
|
13054
|
+
|
13055
|
+
if ( this.options.enhanced ) {
|
13056
|
+
this._menu = $( this.document[ 0 ].getElementById( this._id() + "-popup" ) ).children().first();
|
13057
|
+
this._addToggles( this._menu, true );
|
13058
|
+
this._bindToggles( this._menu );
|
13059
|
+
} else {
|
13060
|
+
this._menu = this._enhanceColToggle();
|
13061
|
+
this.element.addClass( this.options.classes.columnToggleTable );
|
13062
|
+
}
|
13063
|
+
|
13064
|
+
this._setupEvents();
|
13065
|
+
|
13066
|
+
this._setToggleState();
|
13067
|
+
},
|
13068
|
+
|
13069
|
+
_id: function() {
|
13070
|
+
return ( this.element.attr( "id" ) || ( this.widgetName + this.uuid ) );
|
13071
|
+
},
|
13072
|
+
|
13073
|
+
_setupEvents: function() {
|
13074
|
+
//NOTE: inputs are bound in bindToggles,
|
13075
|
+
// so it can be called on refresh, too
|
13076
|
+
|
13077
|
+
// update column toggles on resize
|
13078
|
+
this._on( this.window, {
|
13079
|
+
throttledresize: "_setToggleState"
|
13080
|
+
});
|
13081
|
+
},
|
13082
|
+
|
13083
|
+
_bindToggles: function( menu ) {
|
13084
|
+
var inputs = menu.find( "input" );
|
13085
|
+
|
13086
|
+
this._on( inputs, {
|
13087
|
+
change: "_menuInputChange"
|
13088
|
+
});
|
13089
|
+
},
|
13090
|
+
|
13091
|
+
_addToggles: function( menu, keep ) {
|
13092
|
+
var inputs,
|
13093
|
+
checkboxIndex = 0,
|
13094
|
+
opts = this.options,
|
13095
|
+
container = menu.controlgroup( "container" );
|
13096
|
+
|
13097
|
+
// allow update of menu on refresh (fixes #5880)
|
13098
|
+
if ( keep ) {
|
13099
|
+
inputs = menu.find( "input" );
|
13100
|
+
} else {
|
13101
|
+
container.empty();
|
13102
|
+
}
|
13103
|
+
|
13104
|
+
// create the hide/show toggles
|
13105
|
+
this.headers.not( "td" ).each( function() {
|
13106
|
+
var header = $( this ),
|
13107
|
+
priority = $.mobile.getAttribute( this, "priority" ),
|
13108
|
+
cells = header.add( header.jqmData( "cells" ) );
|
13109
|
+
|
13110
|
+
if ( priority ) {
|
13111
|
+
cells.addClass( opts.classes.priorityPrefix + priority );
|
13112
|
+
|
13113
|
+
( keep ? inputs.eq( checkboxIndex++ ) :
|
13114
|
+
$("<label><input type='checkbox' checked />" +
|
13115
|
+
( header.children( "abbr" ).first().attr( "title" ) ||
|
13116
|
+
header.text() ) +
|
13117
|
+
"</label>" )
|
13118
|
+
.appendTo( container )
|
13119
|
+
.children( 0 )
|
13120
|
+
.checkboxradio( {
|
13121
|
+
theme: opts.columnPopupTheme
|
13122
|
+
}) )
|
13123
|
+
.jqmData( "cells", cells );
|
13124
|
+
}
|
13125
|
+
});
|
13126
|
+
|
13127
|
+
// set bindings here
|
13128
|
+
if ( !keep ) {
|
13129
|
+
menu.controlgroup( "refresh" );
|
13130
|
+
this._bindToggles( menu );
|
13131
|
+
}
|
13132
|
+
},
|
13133
|
+
|
13134
|
+
_menuInputChange: function( evt ) {
|
13135
|
+
var input = $( evt.target ),
|
13136
|
+
checked = input[ 0 ].checked;
|
13137
|
+
|
13138
|
+
input.jqmData( "cells" )
|
13139
|
+
.toggleClass( "ui-table-cell-hidden", !checked )
|
13140
|
+
.toggleClass( "ui-table-cell-visible", checked );
|
13141
|
+
|
13142
|
+
if ( input[ 0 ].getAttribute( "locked" ) ) {
|
13143
|
+
input.removeAttr( "locked" );
|
13144
|
+
|
13145
|
+
this._unlockCells( input.jqmData( "cells" ) );
|
13146
|
+
} else {
|
13147
|
+
input.attr( "locked", true );
|
13148
|
+
}
|
13149
|
+
},
|
13150
|
+
|
13151
|
+
_unlockCells: function( cells ) {
|
13152
|
+
// allow hide/show via CSS only = remove all toggle-locks
|
13153
|
+
cells.removeClass( "ui-table-cell-hidden ui-table-cell-visible");
|
13154
|
+
},
|
13155
|
+
|
13156
|
+
_enhanceColToggle: function() {
|
13157
|
+
var id , menuButton, popup, menu,
|
13158
|
+
table = this.element,
|
13159
|
+
opts = this.options,
|
13160
|
+
ns = $.mobile.ns,
|
13161
|
+
fragment = this.document[ 0 ].createDocumentFragment();
|
13162
|
+
|
13163
|
+
id = this._id() + "-popup";
|
13164
|
+
menuButton = $( "<a href='#" + id + "' " +
|
13165
|
+
"class='" + opts.classes.columnBtn + " ui-btn " +
|
13166
|
+
"ui-btn-" + ( opts.columnBtnTheme || "a" ) +
|
13167
|
+
" ui-corner-all ui-shadow ui-mini' " +
|
13168
|
+
"data-" + ns + "rel='popup'>" + opts.columnBtnText + "</a>" );
|
13169
|
+
popup = $( "<div class='" + opts.classes.popup + "' id='" + id + "'></div>" );
|
13170
|
+
menu = $( "<fieldset></fieldset>" ).controlgroup();
|
13171
|
+
|
13172
|
+
// set extension here, send "false" to trigger build/rebuild
|
13173
|
+
this._addToggles( menu, false );
|
13174
|
+
|
13175
|
+
menu.appendTo( popup );
|
13176
|
+
|
13177
|
+
fragment.appendChild( popup[ 0 ] );
|
13178
|
+
fragment.appendChild( menuButton[ 0 ] );
|
13179
|
+
table.before( fragment );
|
13180
|
+
|
13181
|
+
popup.popup();
|
13182
|
+
|
13183
|
+
return menu;
|
13184
|
+
},
|
13185
|
+
|
13186
|
+
rebuild: function() {
|
13187
|
+
this._super();
|
13188
|
+
|
13189
|
+
if ( this.options.mode === "columntoggle" ) {
|
13190
|
+
// NOTE: rebuild passes "false", while refresh passes "undefined"
|
13191
|
+
// both refresh the table, but inside addToggles, !false will be true,
|
13192
|
+
// so a rebuild call can be indentified
|
13193
|
+
this._refresh( false );
|
13194
|
+
}
|
13195
|
+
},
|
13196
|
+
|
13197
|
+
_refresh: function( create ) {
|
13198
|
+
this._super( create );
|
13199
|
+
|
13200
|
+
if ( !create && this.options.mode === "columntoggle" ) {
|
13201
|
+
// columns not being replaced must be cleared from input toggle-locks
|
13202
|
+
this._unlockCells( this.allHeaders );
|
13203
|
+
|
13204
|
+
// update columntoggles and cells
|
13205
|
+
this._addToggles( this._menu, create );
|
13206
|
+
|
13207
|
+
// check/uncheck
|
13208
|
+
this._setToggleState();
|
13209
|
+
}
|
13210
|
+
},
|
13211
|
+
|
13212
|
+
_setToggleState: function() {
|
13213
|
+
this._menu.find( "input" ).each( function() {
|
13214
|
+
var checkbox = $( this );
|
13207
13215
|
|
13208
|
-
|
13209
|
-
|
13216
|
+
this.checked = checkbox.jqmData( "cells" ).eq( 0 ).css( "display" ) === "table-cell";
|
13217
|
+
checkbox.checkboxradio( "refresh" );
|
13210
13218
|
});
|
13219
|
+
},
|
13220
|
+
|
13221
|
+
_destroy: function() {
|
13222
|
+
this._super();
|
13211
13223
|
}
|
13212
13224
|
});
|
13213
13225
|
|
13214
13226
|
})( jQuery );
|
13215
13227
|
|
13216
|
-
|
13217
13228
|
(function( $, undefined ) {
|
13218
13229
|
|
13219
13230
|
$.widget( "mobile.table", $.mobile.table, {
|
13220
13231
|
options: {
|
13221
|
-
mode: "
|
13222
|
-
columnBtnTheme: null,
|
13223
|
-
columnPopupTheme: null,
|
13224
|
-
columnBtnText: "Columns...",
|
13232
|
+
mode: "reflow",
|
13225
13233
|
classes: $.extend( $.mobile.table.prototype.options.classes, {
|
13226
|
-
|
13227
|
-
|
13228
|
-
priorityPrefix: "ui-table-priority-",
|
13229
|
-
columnToggleTable: "ui-table-columntoggle"
|
13234
|
+
reflowTable: "ui-table-reflow",
|
13235
|
+
cellLabels: "ui-table-cell-label"
|
13230
13236
|
})
|
13231
13237
|
},
|
13232
13238
|
|
13233
13239
|
_create: function() {
|
13234
13240
|
this._super();
|
13235
13241
|
|
13236
|
-
|
13242
|
+
// If it's not reflow mode, return here.
|
13243
|
+
if ( this.options.mode !== "reflow" ) {
|
13237
13244
|
return;
|
13238
13245
|
}
|
13239
13246
|
|
13240
|
-
|
13241
|
-
|
13242
|
-
});
|
13247
|
+
if ( !this.options.enhanced ) {
|
13248
|
+
this.element.addClass( this.options.classes.reflowTable );
|
13243
13249
|
|
13244
|
-
|
13245
|
-
this._menu = this.document.find( this._id() + "-popup" ).children().first();
|
13246
|
-
} else {
|
13247
|
-
this._menu = this._enhanceColToggle();
|
13248
|
-
this.element.addClass( this.options.classes.columnToggleTable );
|
13250
|
+
this._updateReflow();
|
13249
13251
|
}
|
13252
|
+
},
|
13250
13253
|
|
13251
|
-
|
13254
|
+
rebuild: function() {
|
13255
|
+
this._super();
|
13252
13256
|
|
13253
|
-
this.
|
13257
|
+
if ( this.options.mode === "reflow" ) {
|
13258
|
+
this._refresh( false );
|
13259
|
+
}
|
13254
13260
|
},
|
13255
13261
|
|
13256
|
-
|
13257
|
-
|
13262
|
+
_refresh: function( create ) {
|
13263
|
+
this._super( create );
|
13264
|
+
if ( !create && this.options.mode === "reflow" ) {
|
13265
|
+
this._updateReflow( );
|
13266
|
+
}
|
13258
13267
|
},
|
13259
13268
|
|
13260
|
-
|
13261
|
-
|
13262
|
-
|
13269
|
+
_updateReflow: function() {
|
13270
|
+
var table = this,
|
13271
|
+
opts = this.options;
|
13263
13272
|
|
13264
|
-
//
|
13265
|
-
|
13266
|
-
|
13267
|
-
|
13268
|
-
|
13273
|
+
// get headers in reverse order so that top-level headers are appended last
|
13274
|
+
$( table.allHeaders.get().reverse() ).each( function() {
|
13275
|
+
var cells = $( this ).jqmData( "cells" ),
|
13276
|
+
colstart = $.mobile.getAttribute( this, "colstart" ),
|
13277
|
+
hierarchyClass = cells.not( this ).filter( "thead th" ).length && " ui-table-cell-label-top",
|
13278
|
+
text = $( this ).text(),
|
13279
|
+
iteration, filter;
|
13269
13280
|
|
13270
|
-
|
13271
|
-
var inputs = menu.find( "input" );
|
13281
|
+
if ( text !== "" ) {
|
13272
13282
|
|
13273
|
-
|
13274
|
-
|
13283
|
+
if ( hierarchyClass ) {
|
13284
|
+
iteration = parseInt( this.getAttribute( "colspan" ), 10 );
|
13285
|
+
filter = "";
|
13286
|
+
|
13287
|
+
if ( iteration ) {
|
13288
|
+
filter = "td:nth-child("+ iteration +"n + " + ( colstart ) +")";
|
13289
|
+
}
|
13290
|
+
|
13291
|
+
table._addLabels( cells.filter( filter ), opts.classes.cellLabels + hierarchyClass, text );
|
13292
|
+
} else {
|
13293
|
+
table._addLabels( cells, opts.classes.cellLabels, text );
|
13294
|
+
}
|
13295
|
+
|
13296
|
+
}
|
13275
13297
|
});
|
13276
13298
|
},
|
13277
13299
|
|
13278
|
-
|
13279
|
-
|
13300
|
+
_addLabels: function( cells, label, text ) {
|
13301
|
+
// .not fixes #6006
|
13302
|
+
cells.not( ":has(b." + label + ")" ).prepend( "<b class='" + label + "'>" + text + "</b>" );
|
13303
|
+
}
|
13304
|
+
});
|
13280
13305
|
|
13281
|
-
|
13282
|
-
if ( !keep ) {
|
13283
|
-
menu.empty();
|
13284
|
-
}
|
13306
|
+
})( jQuery );
|
13285
13307
|
|
13286
|
-
|
13287
|
-
this.headers.not( "td" ).each( function() {
|
13288
|
-
var header = $( this ),
|
13289
|
-
priority = $.mobile.getAttribute( this, "priority" ),
|
13290
|
-
cells = header.add( header.jqmData( "cells" ) );
|
13308
|
+
(function( $, undefined ) {
|
13291
13309
|
|
13292
|
-
|
13293
|
-
|
13310
|
+
// TODO rename filterCallback/deprecate and default to the item itself as the first argument
|
13311
|
+
var defaultFilterCallback = function( index, searchValue ) {
|
13312
|
+
return ( ( "" + ( $.mobile.getAttribute( this, "filtertext" ) || $( this ).text() ) )
|
13313
|
+
.toLowerCase().indexOf( searchValue ) === -1 );
|
13314
|
+
};
|
13294
13315
|
|
13295
|
-
|
13296
|
-
|
13297
|
-
|
13298
|
-
|
13299
|
-
|
13300
|
-
|
13301
|
-
|
13302
|
-
|
13303
|
-
|
13304
|
-
|
13305
|
-
|
13306
|
-
|
13307
|
-
|
13316
|
+
$.widget( "mobile.filterable", {
|
13317
|
+
|
13318
|
+
initSelector: ":jqmData(filter='true')",
|
13319
|
+
|
13320
|
+
options: {
|
13321
|
+
filterReveal: false,
|
13322
|
+
filterCallback: defaultFilterCallback,
|
13323
|
+
enhanced: false,
|
13324
|
+
input: null,
|
13325
|
+
children: "> li, > option, > optgroup option, > tbody tr, > .ui-controlgroup-controls > .ui-btn, > .ui-controlgroup-controls > .ui-checkbox, > .ui-controlgroup-controls > .ui-radio"
|
13326
|
+
},
|
13327
|
+
|
13328
|
+
_create: function() {
|
13329
|
+
var opts = this.options;
|
13330
|
+
|
13331
|
+
$.extend( this, {
|
13332
|
+
_search: null,
|
13333
|
+
_timer: 0
|
13308
13334
|
});
|
13309
13335
|
|
13310
|
-
|
13311
|
-
if ( !
|
13312
|
-
this.
|
13336
|
+
this._setInput( opts.input );
|
13337
|
+
if ( !opts.enhanced ) {
|
13338
|
+
this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() );
|
13313
13339
|
}
|
13314
13340
|
},
|
13315
13341
|
|
13316
|
-
|
13317
|
-
var
|
13318
|
-
|
13342
|
+
_onKeyUp: function() {
|
13343
|
+
var val, lastval,
|
13344
|
+
search = this._search;
|
13319
13345
|
|
13320
|
-
|
13321
|
-
.
|
13322
|
-
.
|
13346
|
+
if ( search ) {
|
13347
|
+
val = search.val().toLowerCase(),
|
13348
|
+
lastval = $.mobile.getAttribute( search[ 0 ], "lastval" ) + "";
|
13323
13349
|
|
13324
|
-
|
13325
|
-
|
13350
|
+
if ( lastval && lastval === val ) {
|
13351
|
+
// Execute the handler only once per value change
|
13352
|
+
return;
|
13353
|
+
}
|
13326
13354
|
|
13327
|
-
|
13328
|
-
|
13329
|
-
|
13355
|
+
if ( this._timer ) {
|
13356
|
+
window.clearTimeout( this._timer );
|
13357
|
+
this._timer = 0;
|
13358
|
+
}
|
13359
|
+
|
13360
|
+
this._timer = this._delay( function() {
|
13361
|
+
this._trigger( "beforefilter", "beforefilter", { input: search } );
|
13362
|
+
|
13363
|
+
// Change val as lastval for next execution
|
13364
|
+
search[ 0 ].setAttribute( "data-" + $.mobile.ns + "lastval", val );
|
13365
|
+
|
13366
|
+
this._filterItems( val );
|
13367
|
+
this._timer = 0;
|
13368
|
+
}, 250 );
|
13330
13369
|
}
|
13331
13370
|
},
|
13332
13371
|
|
13333
|
-
|
13334
|
-
|
13335
|
-
|
13372
|
+
_getFilterableItems: function() {
|
13373
|
+
var elem = this.element,
|
13374
|
+
children = this.options.children,
|
13375
|
+
items = !children ? { length: 0 }:
|
13376
|
+
$.isFunction( children ) ? children():
|
13377
|
+
children.nodeName ? $( children ):
|
13378
|
+
children.jquery ? children:
|
13379
|
+
this.element.find( children );
|
13380
|
+
|
13381
|
+
if ( items.length === 0 ) {
|
13382
|
+
items = elem.children();
|
13383
|
+
}
|
13384
|
+
|
13385
|
+
return items;
|
13336
13386
|
},
|
13337
13387
|
|
13338
|
-
|
13339
|
-
var
|
13340
|
-
|
13388
|
+
_filterItems: function( val ) {
|
13389
|
+
var idx, callback, length, dst,
|
13390
|
+
show = [],
|
13391
|
+
hide = [],
|
13341
13392
|
opts = this.options,
|
13342
|
-
|
13343
|
-
fragment = this.document[ 0 ].createDocumentFragment();
|
13393
|
+
filterItems = this._getFilterableItems();
|
13344
13394
|
|
13345
|
-
|
13346
|
-
|
13347
|
-
|
13348
|
-
"data-" + ns + "rel='popup' " +
|
13349
|
-
"data-" + ns + "mini='true'>" + opts.columnBtnText + "</a>" );
|
13350
|
-
popup = $( "<div data-" + ns + "role='popup' data-" + ns + "role='fieldcontain' class='" + opts.classes.popup + "' id='" + id + "'></div>" );
|
13351
|
-
menu = $( "<fieldset data-" + ns + "role='controlgroup'></fieldset>" );
|
13395
|
+
if ( val != null ) {
|
13396
|
+
callback = opts.filterCallback || defaultFilterCallback;
|
13397
|
+
length = filterItems.length;
|
13352
13398
|
|
13353
|
-
|
13354
|
-
|
13399
|
+
// Partition the items into those to be hidden and those to be shown
|
13400
|
+
for ( idx = 0 ; idx < length ; idx++ ) {
|
13401
|
+
dst = ( callback.call( filterItems[ idx ], idx, val ) ) ? hide : show;
|
13402
|
+
dst.push( filterItems[ idx ] );
|
13403
|
+
}
|
13404
|
+
}
|
13355
13405
|
|
13356
|
-
|
13406
|
+
// If nothing is hidden, then the decision whether to hide or show the items
|
13407
|
+
// is based on the "filterReveal" option.
|
13408
|
+
if ( hide.length === 0 ) {
|
13409
|
+
filterItems[ opts.filterReveal ? "addClass" : "removeClass" ]( "ui-screen-hidden" );
|
13410
|
+
} else {
|
13411
|
+
$( hide ).addClass( "ui-screen-hidden" );
|
13412
|
+
$( show ).removeClass( "ui-screen-hidden" );
|
13413
|
+
}
|
13357
13414
|
|
13358
|
-
|
13359
|
-
|
13360
|
-
|
13415
|
+
this._refreshChildWidget();
|
13416
|
+
},
|
13417
|
+
|
13418
|
+
// The Default implementation of _refreshChildWidget attempts to call
|
13419
|
+
// refresh on collapsibleset, controlgroup, selectmenu, or listview
|
13420
|
+
_refreshChildWidget: function() {
|
13421
|
+
var widget, idx,
|
13422
|
+
recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ];
|
13361
13423
|
|
13362
|
-
|
13424
|
+
for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) {
|
13425
|
+
widget = recognizedWidgets[ idx ];
|
13426
|
+
if ( $.mobile[ widget ] ) {
|
13427
|
+
widget = this.element.data( "mobile-" + widget );
|
13428
|
+
if ( widget && $.isFunction( widget.refresh ) ) {
|
13429
|
+
widget.refresh();
|
13430
|
+
}
|
13431
|
+
}
|
13432
|
+
}
|
13433
|
+
},
|
13434
|
+
|
13435
|
+
// TODO: When the input is not internal, do not even store it in this._search
|
13436
|
+
_setInput: function ( selector ) {
|
13437
|
+
var search = this._search;
|
13438
|
+
|
13439
|
+
// Stop a pending filter operation
|
13440
|
+
if ( this._timer ) {
|
13441
|
+
window.clearTimeout( this._timer );
|
13442
|
+
this._timer = 0;
|
13443
|
+
}
|
13363
13444
|
|
13364
|
-
|
13365
|
-
|
13445
|
+
if ( search ) {
|
13446
|
+
this._off( search, "keyup change input" );
|
13447
|
+
search = null;
|
13448
|
+
}
|
13366
13449
|
|
13367
|
-
|
13368
|
-
|
13450
|
+
if ( selector ) {
|
13451
|
+
search = selector.jquery ? selector:
|
13452
|
+
selector.nodeName ? $( selector ):
|
13453
|
+
this.document.find( selector );
|
13369
13454
|
|
13370
|
-
|
13371
|
-
|
13372
|
-
|
13373
|
-
|
13374
|
-
|
13455
|
+
this._on( search, {
|
13456
|
+
keyup: "_onKeyUp",
|
13457
|
+
change: "_onKeyUp",
|
13458
|
+
input: "_onKeyUp"
|
13459
|
+
});
|
13375
13460
|
}
|
13461
|
+
|
13462
|
+
this._search = search;
|
13376
13463
|
},
|
13377
13464
|
|
13378
|
-
|
13379
|
-
|
13465
|
+
_setOptions: function( options ) {
|
13466
|
+
var refilter = !( ( options.filterReveal === undefined ) &&
|
13467
|
+
( options.filterCallback === undefined ) &&
|
13468
|
+
( options.children === undefined ) );
|
13380
13469
|
|
13381
|
-
|
13382
|
-
// columns not being replaced must be cleared from input toggle-locks
|
13383
|
-
this._unlockCells( this.allHeaders );
|
13470
|
+
this._super( options );
|
13384
13471
|
|
13385
|
-
|
13386
|
-
this.
|
13472
|
+
if ( options.input !== undefined ) {
|
13473
|
+
this._setInput( options.input );
|
13474
|
+
refilter = true;
|
13475
|
+
}
|
13387
13476
|
|
13388
|
-
|
13389
|
-
this.
|
13477
|
+
if ( refilter ) {
|
13478
|
+
this.refresh();
|
13390
13479
|
}
|
13391
13480
|
},
|
13392
13481
|
|
13393
|
-
|
13394
|
-
|
13395
|
-
|
13482
|
+
_destroy: function() {
|
13483
|
+
var opts = this.options,
|
13484
|
+
items = this._getFilterableItems();
|
13396
13485
|
|
13397
|
-
|
13398
|
-
|
13399
|
-
}
|
13486
|
+
if ( opts.enhanced ) {
|
13487
|
+
items.toggleClass( "ui-screen-hidden", opts.filterReveal );
|
13488
|
+
} else {
|
13489
|
+
items.removeClass( "ui-screen-hidden" );
|
13490
|
+
}
|
13400
13491
|
},
|
13401
13492
|
|
13402
|
-
|
13403
|
-
this.
|
13493
|
+
refresh: function() {
|
13494
|
+
if ( this._timer ) {
|
13495
|
+
window.clearTimeout( this._timer );
|
13496
|
+
this._timer = 0;
|
13497
|
+
}
|
13498
|
+
this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() );
|
13404
13499
|
}
|
13405
13500
|
});
|
13406
13501
|
|
@@ -13408,79 +13503,170 @@ $.widget( "mobile.table", $.mobile.table, {
|
|
13408
13503
|
|
13409
13504
|
(function( $, undefined ) {
|
13410
13505
|
|
13411
|
-
|
13506
|
+
// Create a function that will replace the _setOptions function of a widget,
|
13507
|
+
// and will pass the options on to the input of the filterable.
|
13508
|
+
var replaceSetOptions = function( self, orig ) {
|
13509
|
+
return function( options ) {
|
13510
|
+
orig.call( this, options );
|
13511
|
+
self._syncTextInputOptions( options );
|
13512
|
+
};
|
13513
|
+
},
|
13514
|
+
rDividerListItem = /(^|\s)ui-li-divider(\s|$)/,
|
13515
|
+
origDefaultFilterCallback = $.mobile.filterable.prototype.options.filterCallback;
|
13516
|
+
|
13517
|
+
// Override the default filter callback with one that does not hide list dividers
|
13518
|
+
$.mobile.filterable.prototype.options.filterCallback = function( index, searchValue ) {
|
13519
|
+
return !this.className.match( rDividerListItem ) &&
|
13520
|
+
origDefaultFilterCallback.call( this, index, searchValue );
|
13521
|
+
};
|
13522
|
+
|
13523
|
+
$.widget( "mobile.filterable", $.mobile.filterable, {
|
13412
13524
|
options: {
|
13413
|
-
|
13414
|
-
|
13415
|
-
reflowTable: "ui-table-reflow",
|
13416
|
-
cellLabels: "ui-table-cell-label"
|
13417
|
-
})
|
13525
|
+
filterPlaceholder: "Filter items...",
|
13526
|
+
filterTheme: null
|
13418
13527
|
},
|
13419
13528
|
|
13420
13529
|
_create: function() {
|
13530
|
+
var idx, widgetName,
|
13531
|
+
elem = this.element,
|
13532
|
+
recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ],
|
13533
|
+
createHandlers = {};
|
13534
|
+
|
13421
13535
|
this._super();
|
13422
13536
|
|
13423
|
-
|
13424
|
-
|
13425
|
-
|
13426
|
-
}
|
13537
|
+
$.extend( this, {
|
13538
|
+
_widget: null
|
13539
|
+
});
|
13427
13540
|
|
13428
|
-
|
13429
|
-
|
13541
|
+
for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) {
|
13542
|
+
widgetName = recognizedWidgets[ idx ];
|
13543
|
+
if ( $.mobile[ widgetName ] ) {
|
13544
|
+
if ( this._setWidget( elem.data( "mobile-" + widgetName ) ) ) {
|
13545
|
+
break;
|
13546
|
+
} else {
|
13547
|
+
createHandlers[ widgetName + "create" ] = "_handleCreate";
|
13548
|
+
}
|
13549
|
+
}
|
13550
|
+
}
|
13430
13551
|
|
13431
|
-
|
13552
|
+
if ( !this._widget ) {
|
13553
|
+
this._on( elem, createHandlers );
|
13432
13554
|
}
|
13433
13555
|
},
|
13434
13556
|
|
13435
|
-
|
13436
|
-
this.
|
13557
|
+
_handleCreate: function( evt ) {
|
13558
|
+
this._setWidget( this.element.data( "mobile-" + evt.type.substring( 0, evt.type.length - 6 ) ) );
|
13559
|
+
},
|
13437
13560
|
|
13438
|
-
|
13439
|
-
|
13561
|
+
_setWidget: function( widget ) {
|
13562
|
+
if ( !this._widget && widget ) {
|
13563
|
+
this._widget = widget;
|
13564
|
+
this._widget._setOptions = replaceSetOptions( this, this._widget._setOptions );
|
13440
13565
|
}
|
13441
|
-
},
|
13442
13566
|
|
13443
|
-
|
13444
|
-
|
13445
|
-
|
13446
|
-
|
13567
|
+
if ( !!this._widget ) {
|
13568
|
+
this._syncTextInputOptions( this._widget.options );
|
13569
|
+
if ( this._widget.widgetName === "listview" ) {
|
13570
|
+
this._widget.options.hidedividers = true;
|
13571
|
+
this._widget.element.listview( "refresh" );
|
13572
|
+
}
|
13447
13573
|
}
|
13448
|
-
},
|
13449
13574
|
|
13450
|
-
|
13451
|
-
|
13452
|
-
opts = this.options;
|
13575
|
+
return !!this._widget;
|
13576
|
+
},
|
13453
13577
|
|
13454
|
-
|
13455
|
-
|
13456
|
-
|
13457
|
-
colstart = $.mobile.getAttribute( this, "colstart" ),
|
13458
|
-
hierarchyClass = cells.not( this ).filter( "thead th" ).length && " ui-table-cell-label-top",
|
13459
|
-
text = $( this ).text(),
|
13460
|
-
iteration, filter;
|
13578
|
+
_isSearchInternal: function() {
|
13579
|
+
return ( this._search && this._search.jqmData( "ui-filterable-" + this.uuid + "-internal" ) );
|
13580
|
+
},
|
13461
13581
|
|
13462
|
-
|
13582
|
+
_setInput: function( selector ) {
|
13583
|
+
var opts = this.options,
|
13584
|
+
updatePlaceholder = true,
|
13585
|
+
textinputOpts = {};
|
13463
13586
|
|
13464
|
-
|
13465
|
-
|
13466
|
-
filter = "";
|
13587
|
+
if ( !selector ) {
|
13588
|
+
if ( this._isSearchInternal() ) {
|
13467
13589
|
|
13468
|
-
|
13469
|
-
|
13470
|
-
|
13590
|
+
// Ignore the call to set a new input if the selector goes to falsy and
|
13591
|
+
// the current textinput is already of the internally generated variety.
|
13592
|
+
return;
|
13593
|
+
} else {
|
13471
13594
|
|
13472
|
-
|
13473
|
-
|
13474
|
-
|
13595
|
+
// Generating a new textinput widget. No need to set the placeholder
|
13596
|
+
// further down the function.
|
13597
|
+
updatePlaceholder = false;
|
13598
|
+
selector = $( "<input " +
|
13599
|
+
"data-" + $.mobile.ns + "type='search' " +
|
13600
|
+
"placeholder='" + opts.filterPlaceholder + "'></input>" )
|
13601
|
+
.jqmData( "ui-filterable-" + this.uuid + "-internal", true );
|
13602
|
+
$( "<form class='ui-filterable'></form>" )
|
13603
|
+
.append( selector )
|
13604
|
+
.submit( function( evt ) {
|
13605
|
+
evt.preventDefault();
|
13606
|
+
selector.blur();
|
13607
|
+
})
|
13608
|
+
.insertBefore( this.element );
|
13609
|
+
if ( $.mobile.textinput ) {
|
13610
|
+
if ( this.options.filterTheme != null ) {
|
13611
|
+
textinputOpts[ "theme" ] = opts.filterTheme;
|
13475
13612
|
}
|
13476
13613
|
|
13614
|
+
selector.textinput( textinputOpts );
|
13477
13615
|
}
|
13478
|
-
|
13616
|
+
}
|
13617
|
+
}
|
13618
|
+
|
13619
|
+
this._super( selector );
|
13620
|
+
|
13621
|
+
if ( this._isSearchInternal() && updatePlaceholder ) {
|
13622
|
+
this._search.attr( "placeholder", this.options.filterPlaceholder );
|
13623
|
+
}
|
13479
13624
|
},
|
13480
13625
|
|
13481
|
-
|
13482
|
-
|
13483
|
-
|
13626
|
+
_setOptions: function( options ) {
|
13627
|
+
var ret = this._super( options );
|
13628
|
+
|
13629
|
+
// Need to set the filterPlaceholder after having established the search input
|
13630
|
+
if ( options.filterPlaceholder !== undefined ) {
|
13631
|
+
if ( this._isSearchInternal() ) {
|
13632
|
+
this._search.attr( "placeholder", options.filterPlaceholder );
|
13633
|
+
}
|
13634
|
+
}
|
13635
|
+
|
13636
|
+
if ( options.filterTheme !== undefined && this._search && $.mobile.textinput ) {
|
13637
|
+
this._search.textinput( "option", "theme", options.filterTheme );
|
13638
|
+
}
|
13639
|
+
|
13640
|
+
return ret;
|
13641
|
+
},
|
13642
|
+
|
13643
|
+
_destroy: function() {
|
13644
|
+
if ( this._isSearchInternal() ) {
|
13645
|
+
this._search.remove();
|
13646
|
+
}
|
13647
|
+
this._super();
|
13648
|
+
},
|
13649
|
+
|
13650
|
+
_syncTextInputOptions: function( options ) {
|
13651
|
+
var idx,
|
13652
|
+
textinputOptions = {};
|
13653
|
+
|
13654
|
+
// We only sync options if the filterable's textinput is of the internally
|
13655
|
+
// generated variety, rather than one specified by the user.
|
13656
|
+
if ( this._isSearchInternal() && $.mobile.textinput ) {
|
13657
|
+
|
13658
|
+
// Apply only the options understood by textinput
|
13659
|
+
for ( idx in $.mobile.textinput.prototype.options ) {
|
13660
|
+
if ( options[ idx ] !== undefined ) {
|
13661
|
+
if ( idx === "theme" && this.options.filterTheme != null ) {
|
13662
|
+
textinputOptions[ idx ] = this.options.filterTheme;
|
13663
|
+
} else {
|
13664
|
+
textinputOptions[ idx ] = options[ idx ];
|
13665
|
+
}
|
13666
|
+
}
|
13667
|
+
}
|
13668
|
+
this._search.textinput( "option", textinputOptions );
|
13669
|
+
}
|
13484
13670
|
}
|
13485
13671
|
});
|
13486
13672
|
|
@@ -14331,6 +14517,7 @@ $.widget( "ui.tabs", {
|
|
14331
14517
|
});
|
14332
14518
|
|
14333
14519
|
})( jQuery );
|
14520
|
+
|
14334
14521
|
(function( $, undefined ) {
|
14335
14522
|
|
14336
14523
|
})( jQuery );
|
@@ -14343,7 +14530,7 @@ $.widget( "ui.tabs", {
|
|
14343
14530
|
var ua = navigator.userAgent,
|
14344
14531
|
zoom,
|
14345
14532
|
evt, x, y, z, aig;
|
14346
|
-
if ( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test( ua ) && ua.indexOf( "AppleWebKit" ) > -1 ) ){
|
14533
|
+
if ( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test( ua ) && ua.indexOf( "AppleWebKit" ) > -1 ) ) {
|
14347
14534
|
$.mobile.iosorientationfixEnabled = false;
|
14348
14535
|
return;
|
14349
14536
|
}
|
@@ -14369,7 +14556,7 @@ $.widget( "ui.tabs", {
|
|
14369
14556
|
}
|
14370
14557
|
|
14371
14558
|
$.mobile.document.on( "mobileinit", function() {
|
14372
|
-
if ( $.mobile.iosorientationfixEnabled ){
|
14559
|
+
if ( $.mobile.iosorientationfixEnabled ) {
|
14373
14560
|
$.mobile.window
|
14374
14561
|
.bind( "orientationchange.iosorientationfix", zoom.enable )
|
14375
14562
|
.bind( "devicemotion.iosorientationfix", checkTilt );
|
@@ -14502,11 +14689,11 @@ $.widget( "ui.tabs", {
|
|
14502
14689
|
$(function() {
|
14503
14690
|
//Run inlineSVG support test
|
14504
14691
|
$.support.inlineSVG();
|
14505
|
-
|
14692
|
+
|
14506
14693
|
// check which scrollTop value should be used by scrolling to 1 immediately at domready
|
14507
14694
|
// then check what the scroll top is. Android will report 0... others 1
|
14508
14695
|
// note that this initial scroll won't hide the address bar. It's just for the check.
|
14509
|
-
|
14696
|
+
|
14510
14697
|
// hide iOS browser chrome on load if hideUrlBar is true this is to try and do it as soon as possible
|
14511
14698
|
if ( $.mobile.hideUrlBar ) {
|
14512
14699
|
window.scrollTo( 0, 1 );
|