jquery_mobile_rails 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/lib/jquery_mobile_rails/version.rb +1 -1
- data/vendor/assets/images/jquery-mobile/ajax-loader.gif +0 -0
- data/vendor/assets/images/jquery-mobile/ajax-loader.png +0 -0
- data/vendor/assets/images/jquery-mobile/icons-18-black.png +0 -0
- data/vendor/assets/images/jquery-mobile/icons-18-white.png +0 -0
- data/vendor/assets/images/jquery-mobile/icons-36-black.png +0 -0
- data/vendor/assets/images/jquery-mobile/icons-36-white.png +0 -0
- data/vendor/assets/javascripts/jquery.mobile.js +366 -227
- data/vendor/assets/javascripts/jquery.mobile.min.js +180 -176
- data/vendor/assets/stylesheets/jquery.mobile.css.scss +303 -216
- data/vendor/assets/stylesheets/jquery.mobile.min.css.scss +2 -2
- data/vendor/assets/stylesheets/jquery.mobile.structure.css +175 -124
- data/vendor/assets/stylesheets/jquery.mobile.structure.min.css +2 -2
- data/vendor/assets/stylesheets/jquery.mobile.theme.css.scss +1203 -0
- data/vendor/assets/stylesheets/jquery.mobile.theme.min.css.scss +2 -0
- metadata +22 -53
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -470
- data/test/dummy/tmp/cache/assets/C8E/8B0/sprockets%2F52156458f704751589bb6d29ec84a52e +0 -0
- data/test/dummy/tmp/cache/assets/CB1/D10/sprockets%2F5827a2184097ddeeb4158ef641f00085 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/910/sprockets%2F8af59305547610b5be0e9e038bb58f21 +0 -0
- data/test/dummy/tmp/cache/assets/D20/330/sprockets%2Fe76bd3b1395773eefc19cb17743e5846 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/BD0/sprockets%2Ffe52d2d1bcf248d028108d0c513e6d79 +0 -0
- data/test/dummy/tmp/cache/assets/D40/4D0/sprockets%2F20f705b59cf5abf8a0a7938b887b11f1 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D5F/7B0/sprockets%2F1792255ae34105be22fabed9ba5e4d15 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/7A0/sprockets%2Ff25aa7e262f1ff93154f29dc914afc20 +0 -0
- data/test/dummy/tmp/cache/assets/D9B/360/sprockets%2Fbb7052d2ba9883c28d4db137e1fb9b6c +0 -0
- data/test/dummy/tmp/cache/assets/DB7/390/sprockets%2Ff800b3c4a4a306067fea026fc7b2bbde +0 -0
- data/test/dummy/tmp/cache/assets/DDC/0B0/sprockets%2F63d8cfc5e184b372b7ec77cca69d4db7 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E08/030/sprockets%2F21255d26ce8eda2e2e0e69dfbea8cf99 +0 -0
- data/test/dummy/tmp/cache/assets/E1F/BB0/sprockets%2F222d4a2c95dbe3c58acdb1df2a04bff9 +0 -0
- data/test/dummy/tmp/cache/assets/E9D/620/sprockets%2Fcbde7d2f6466ed4a7dddefc773f63eae +0 -0
data/README.rdoc
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery Mobile Framework 1.1.
|
2
|
+
* jQuery Mobile Framework 1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e
|
3
3
|
* http://jquerymobile.com
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2012 jQuery Foundation and other contributors
|
6
6
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
7
7
|
* http://jquery.org/license
|
8
8
|
*
|
@@ -18,7 +18,7 @@
|
|
18
18
|
// Browser globals
|
19
19
|
factory( root.jQuery, root, doc );
|
20
20
|
}
|
21
|
-
}( this, document, function (
|
21
|
+
}( this, document, function ( jQuery, window, document, undefined ) {
|
22
22
|
|
23
23
|
|
24
24
|
// This plugin is an experiment for abstracting away the touch and mouse
|
@@ -1240,7 +1240,7 @@ $.widget( "mobile.widget", {
|
|
1240
1240
|
$.mobile = $.extend( {}, {
|
1241
1241
|
|
1242
1242
|
// Version of the jQuery Mobile Framework
|
1243
|
-
version: "1.1.
|
1243
|
+
version: "1.1.1",
|
1244
1244
|
|
1245
1245
|
// Namespace used framework-wide for data-attrs. Default is no namespace
|
1246
1246
|
ns: "",
|
@@ -1384,25 +1384,24 @@ $.widget( "mobile.widget", {
|
|
1384
1384
|
return nsNormalizeDict[ prop ] || ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) );
|
1385
1385
|
},
|
1386
1386
|
|
1387
|
+
// Find the closest parent with a theme class on it. Note that
|
1388
|
+
// we are not using $.fn.closest() on purpose here because this
|
1389
|
+
// method gets called quite a bit and we need it to be as fast
|
1390
|
+
// as possible.
|
1387
1391
|
getInheritedTheme: function( el, defaultTheme ) {
|
1388
|
-
|
1389
|
-
// Find the closest parent with a theme class on it. Note that
|
1390
|
-
// we are not using $.fn.closest() on purpose here because this
|
1391
|
-
// method gets called quite a bit and we need it to be as fast
|
1392
|
-
// as possible.
|
1393
|
-
|
1394
1392
|
var e = el[ 0 ],
|
1395
1393
|
ltr = "",
|
1396
1394
|
re = /ui-(bar|body|overlay)-([a-z])\b/,
|
1397
1395
|
c, m;
|
1398
1396
|
|
1399
1397
|
while ( e ) {
|
1400
|
-
|
1401
|
-
if ( ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) {
|
1398
|
+
c = e.className || "";
|
1399
|
+
if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) {
|
1402
1400
|
// We found a parent with a theme class
|
1403
1401
|
// on it so bail from this loop.
|
1404
1402
|
break;
|
1405
1403
|
}
|
1404
|
+
|
1406
1405
|
e = e.parentNode;
|
1407
1406
|
}
|
1408
1407
|
|
@@ -1464,6 +1463,12 @@ $.widget( "mobile.widget", {
|
|
1464
1463
|
}
|
1465
1464
|
|
1466
1465
|
return $newSet;
|
1466
|
+
},
|
1467
|
+
|
1468
|
+
getScreenHeight: function(){
|
1469
|
+
// Native innerHeight returns more accurate value for this across platforms,
|
1470
|
+
// jQuery version is here as a normalized fallback for platforms like Symbian
|
1471
|
+
return window.innerHeight || $( window ).height();
|
1467
1472
|
}
|
1468
1473
|
}, $.mobile );
|
1469
1474
|
|
@@ -1570,7 +1575,7 @@ var $window = $( window ),
|
|
1570
1575
|
$.mobile.media = (function() {
|
1571
1576
|
// TODO: use window.matchMedia once at least one UA implements it
|
1572
1577
|
var cache = {},
|
1573
|
-
testDiv = $( "<div id='jquery-mediatest'>" ),
|
1578
|
+
testDiv = $( "<div id='jquery-mediatest'></div>" ),
|
1574
1579
|
fakeBody = $( "<body>" ).append( testDiv );
|
1575
1580
|
|
1576
1581
|
return function( query ) {
|
@@ -1603,6 +1608,7 @@ var fakeBody = $( "<body>" ).prependTo( "html" ),
|
|
1603
1608
|
fbCSS = fakeBody[ 0 ].style,
|
1604
1609
|
vendors = [ "Webkit", "Moz", "O" ],
|
1605
1610
|
webos = "palmGetResource" in window, //only used to rule out scrollTop
|
1611
|
+
opera = window.opera,
|
1606
1612
|
operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]",
|
1607
1613
|
bb = window.blackberry; //only used to rule out box shadow, as it's filled opaque on BB
|
1608
1614
|
|
@@ -1676,6 +1682,26 @@ function baseTagTest() {
|
|
1676
1682
|
return rebase.indexOf( fauxBase ) === 0;
|
1677
1683
|
}
|
1678
1684
|
|
1685
|
+
// Thanks Modernizr
|
1686
|
+
function cssPointerEventsTest() {
|
1687
|
+
var element = document.createElement('x'),
|
1688
|
+
documentElement = document.documentElement,
|
1689
|
+
getComputedStyle = window.getComputedStyle,
|
1690
|
+
supports;
|
1691
|
+
|
1692
|
+
if( !( 'pointerEvents' in element.style ) ){
|
1693
|
+
return false;
|
1694
|
+
}
|
1695
|
+
|
1696
|
+
element.style.pointerEvents = 'auto';
|
1697
|
+
element.style.pointerEvents = 'x';
|
1698
|
+
documentElement.appendChild(element);
|
1699
|
+
supports = getComputedStyle &&
|
1700
|
+
getComputedStyle( element, '' ).pointerEvents === 'auto';
|
1701
|
+
documentElement.removeChild( element );
|
1702
|
+
return !!supports;
|
1703
|
+
}
|
1704
|
+
|
1679
1705
|
|
1680
1706
|
// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683
|
1681
1707
|
// allows for inclusion of IE 6+, including Windows Mobile 7
|
@@ -1696,7 +1722,7 @@ $.mobile.browser.ie = (function() {
|
|
1696
1722
|
$.extend( $.support, {
|
1697
1723
|
orientation: "orientation" in window && "onorientationchange" in window,
|
1698
1724
|
touch: "ontouchend" in document,
|
1699
|
-
cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ),
|
1725
|
+
cssTransitions: "WebKitTransitionEvent" in window || validStyle( 'transition', 'height 100ms linear' ) && !opera,
|
1700
1726
|
pushState: "pushState" in history && "replaceState" in history,
|
1701
1727
|
mediaquery: $.mobile.media( "only all" ),
|
1702
1728
|
cssPseudoElement: !!propExists( "content" ),
|
@@ -1704,7 +1730,8 @@ $.extend( $.support, {
|
|
1704
1730
|
cssTransform3d: transform3dTest(),
|
1705
1731
|
boxShadow: !!propExists( "boxShadow" ) && !bb,
|
1706
1732
|
scrollTop: ( "pageXOffset" in window || "scrollTop" in document.documentElement || "scrollTop" in fakeBody[ 0 ] ) && !webos && !operamini,
|
1707
|
-
dynamicBaseTag: baseTagTest()
|
1733
|
+
dynamicBaseTag: baseTagTest(),
|
1734
|
+
cssPointerEvents: cssPointerEventsTest()
|
1708
1735
|
});
|
1709
1736
|
|
1710
1737
|
fakeBody.remove();
|
@@ -2003,7 +2030,7 @@ $.event.special.swipe = {
|
|
2003
2030
|
win.bind( "throttledresize", handler );
|
2004
2031
|
},
|
2005
2032
|
teardown: function(){
|
2006
|
-
// If the event is
|
2033
|
+
// If the event is supported natively, return false so that
|
2007
2034
|
// jQuery will unbind the event using DOM methods.
|
2008
2035
|
if ( $.support.orientation && $.mobile.orientationChangeEnabled ) {
|
2009
2036
|
return false;
|
@@ -2192,7 +2219,8 @@ var createHandler = function( sequential ){
|
|
2192
2219
|
toScroll = active.lastScroll || $.mobile.defaultHomeScroll,
|
2193
2220
|
screenHeight = $.mobile.getScreenHeight(),
|
2194
2221
|
maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth,
|
2195
|
-
none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none",
|
2222
|
+
none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $( window ).scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(),
|
2223
|
+
toPreClass = " ui-page-pre-in",
|
2196
2224
|
toggleViewportClass = function(){
|
2197
2225
|
$.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name );
|
2198
2226
|
},
|
@@ -2301,7 +2329,10 @@ var createHandler = function( sequential ){
|
|
2301
2329
|
|
2302
2330
|
// generate the handlers from the above
|
2303
2331
|
var sequentialHandler = createHandler(),
|
2304
|
-
simultaneousHandler = createHandler( false )
|
2332
|
+
simultaneousHandler = createHandler( false ),
|
2333
|
+
defaultGetMaxScrollForTransition = function() {
|
2334
|
+
return $.mobile.getScreenHeight() * 3;
|
2335
|
+
};
|
2305
2336
|
|
2306
2337
|
// Make our transition handler the public default.
|
2307
2338
|
$.mobile.defaultTransitionHandler = sequentialHandler;
|
@@ -2315,6 +2346,8 @@ $.mobile.transitionHandlers = {
|
|
2315
2346
|
|
2316
2347
|
$.mobile.transitionFallbacks = {};
|
2317
2348
|
|
2349
|
+
// Set the getMaxScrollForTransition to default if no implementation was set by user
|
2350
|
+
$.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition;
|
2318
2351
|
})( jQuery, this );
|
2319
2352
|
|
2320
2353
|
( function( $, undefined ) {
|
@@ -2472,7 +2505,7 @@ $.mobile.transitionFallbacks = {};
|
|
2472
2505
|
// otherwise the Data Url won't match the id of the embedded Page.
|
2473
2506
|
return u.hash.split( dialogHashKey )[0].replace( /^#/, "" );
|
2474
2507
|
} else if ( path.isSameDomain( u, documentBase ) ) {
|
2475
|
-
return u.hrefNoHash.replace( documentBase.domain, "" );
|
2508
|
+
return u.hrefNoHash.replace( documentBase.domain, "" ).split( dialogHashKey )[0];
|
2476
2509
|
}
|
2477
2510
|
return absUrl;
|
2478
2511
|
},
|
@@ -2517,6 +2550,10 @@ $.mobile.transitionFallbacks = {};
|
|
2517
2550
|
return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) );
|
2518
2551
|
},
|
2519
2552
|
|
2553
|
+
isHashValid: function( hash ) {
|
2554
|
+
return /^#[^#]+$/.test(hash);
|
2555
|
+
},
|
2556
|
+
|
2520
2557
|
//check whether a url is referencing the same domain, or an external domain or different protocol
|
2521
2558
|
//could be mailto, etc
|
2522
2559
|
isExternal: function( url ) {
|
@@ -2560,6 +2597,19 @@ $.mobile.transitionFallbacks = {};
|
|
2560
2597
|
return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) );
|
2561
2598
|
}
|
2562
2599
|
return (/^#/).test( u.href );
|
2600
|
+
},
|
2601
|
+
|
2602
|
+
|
2603
|
+
// Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
|
2604
|
+
// requests if the document doing the request was loaded via the file:// protocol.
|
2605
|
+
// This is usually to allow the application to "phone home" and fetch app specific
|
2606
|
+
// data. We normally let the browser handle external/cross-domain urls, but if the
|
2607
|
+
// allowCrossDomainPages option is true, we will allow cross-domain http/https
|
2608
|
+
// requests to go through our page loading logic.
|
2609
|
+
isPermittedCrossDomainRequest: function( docUrl, reqUrl ) {
|
2610
|
+
return $.mobile.allowCrossDomainPages
|
2611
|
+
&& docUrl.protocol === "file:"
|
2612
|
+
&& reqUrl.search( /^https?:/ ) != -1;
|
2563
2613
|
}
|
2564
2614
|
},
|
2565
2615
|
|
@@ -2609,7 +2659,7 @@ $.mobile.transitionFallbacks = {};
|
|
2609
2659
|
directHashChange: function( opts ) {
|
2610
2660
|
var back , forward, newActiveIndex, prev = this.getActive();
|
2611
2661
|
|
2612
|
-
// check if url
|
2662
|
+
// check if url is in history and if it's ahead or behind current page
|
2613
2663
|
$.each( urlHistory.stack, function( i, historyEntry ) {
|
2614
2664
|
|
2615
2665
|
//if the url is in the stack, it's a forward or a back
|
@@ -2659,7 +2709,9 @@ $.mobile.transitionFallbacks = {};
|
|
2659
2709
|
documentBase = $base.length ? path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl,
|
2660
2710
|
|
2661
2711
|
//cache the comparison once.
|
2662
|
-
documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash )
|
2712
|
+
documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash ),
|
2713
|
+
|
2714
|
+
getScreenHeight = $.mobile.getScreenHeight;
|
2663
2715
|
|
2664
2716
|
//base element management, defined depending on dynamic base tag support
|
2665
2717
|
var base = $.support.dynamicBaseTag ? {
|
@@ -2792,12 +2844,12 @@ $.mobile.transitionFallbacks = {};
|
|
2792
2844
|
|
2793
2845
|
//clear page loader
|
2794
2846
|
$.mobile.hidePageLoadingMsg();
|
2795
|
-
|
2847
|
+
|
2796
2848
|
// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified
|
2797
2849
|
if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){
|
2798
2850
|
transition = $.mobile.transitionFallbacks[ transition ];
|
2799
2851
|
}
|
2800
|
-
|
2852
|
+
|
2801
2853
|
//find the transition handler for the specified transition. If there
|
2802
2854
|
//isn't one in our transitionHandlers dictionary, use the default one.
|
2803
2855
|
//call the handler immediately to kick-off the transition.
|
@@ -2818,22 +2870,15 @@ $.mobile.transitionFallbacks = {};
|
|
2818
2870
|
return promise;
|
2819
2871
|
}
|
2820
2872
|
|
2821
|
-
//simply set the active page's minimum height to screen height, depending on orientation
|
2822
|
-
function getScreenHeight(){
|
2823
|
-
// Native innerHeight returns more accurate value for this across platforms,
|
2824
|
-
// jQuery version is here as a normalized fallback for platforms like Symbian
|
2825
|
-
return window.innerHeight || $( window ).height();
|
2826
|
-
}
|
2827
|
-
|
2828
|
-
$.mobile.getScreenHeight = getScreenHeight;
|
2829
|
-
|
2830
2873
|
//simply set the active page's minimum height to screen height, depending on orientation
|
2831
2874
|
function resetActivePageHeight(){
|
2832
2875
|
var aPage = $( "." + $.mobile.activePageClass ),
|
2833
2876
|
aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
|
2834
|
-
aPagePadB = parseFloat( aPage.css( "padding-bottom" ) )
|
2835
|
-
|
2836
|
-
|
2877
|
+
aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ),
|
2878
|
+
aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ),
|
2879
|
+
aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) );
|
2880
|
+
|
2881
|
+
aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB );
|
2837
2882
|
}
|
2838
2883
|
|
2839
2884
|
//shared page enhancements
|
@@ -3308,6 +3353,16 @@ $.mobile.transitionFallbacks = {};
|
|
3308
3353
|
if( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) {
|
3309
3354
|
isPageTransitioning = false;
|
3310
3355
|
mpc.trigger( "pagechange", triggerData );
|
3356
|
+
|
3357
|
+
// Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes
|
3358
|
+
if( settings.fromHashChange ) {
|
3359
|
+
urlHistory.directHashChange({
|
3360
|
+
currentUrl: url,
|
3361
|
+
isBack: function() {},
|
3362
|
+
isForward: function() {}
|
3363
|
+
});
|
3364
|
+
}
|
3365
|
+
|
3311
3366
|
return;
|
3312
3367
|
}
|
3313
3368
|
|
@@ -3339,6 +3394,9 @@ $.mobile.transitionFallbacks = {};
|
|
3339
3394
|
}
|
3340
3395
|
} catch(e) {}
|
3341
3396
|
|
3397
|
+
// Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either
|
3398
|
+
var alreadyThere = false;
|
3399
|
+
|
3342
3400
|
// If we're displaying the page as a dialog, we don't want the url
|
3343
3401
|
// for the dialog content to be used in the hash. Instead, we want
|
3344
3402
|
// to append the dialogHashKey to the url of the current page.
|
@@ -3347,7 +3405,24 @@ $.mobile.transitionFallbacks = {};
|
|
3347
3405
|
// be an empty string. Moving the undefined -> empty string back into
|
3348
3406
|
// urlHistory.addNew seemed imprudent given undefined better represents
|
3349
3407
|
// the url state
|
3408
|
+
|
3409
|
+
// If we are at a place in history that once belonged to a dialog, reuse
|
3410
|
+
// this state without adding to urlHistory and without modifying the hash.
|
3411
|
+
// However, if a dialog is already displayed at this point, and we're
|
3412
|
+
// about to display another dialog, then we must add another hash and
|
3413
|
+
// history entry on top so that one may navigate back to the original dialog
|
3414
|
+
if ( active.url.indexOf( dialogHashKey ) > -1 && !$.mobile.activePage.is( ".ui-dialog" ) ) {
|
3415
|
+
settings.changeHash = false;
|
3416
|
+
alreadyThere = true;
|
3417
|
+
}
|
3418
|
+
|
3350
3419
|
url = ( active.url || "" ) + dialogHashKey;
|
3420
|
+
|
3421
|
+
// tack on another dialogHashKey if this is the same as the initial hash
|
3422
|
+
// this makes sure that a history entry is created for this dialog
|
3423
|
+
if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) {
|
3424
|
+
url += dialogHashKey;
|
3425
|
+
}
|
3351
3426
|
}
|
3352
3427
|
|
3353
3428
|
// Set the location hash.
|
@@ -3374,7 +3449,7 @@ $.mobile.transitionFallbacks = {};
|
|
3374
3449
|
|| ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition );
|
3375
3450
|
|
3376
3451
|
//add page to history stack if it's not back or forward
|
3377
|
-
if( !historyDir ) {
|
3452
|
+
if( !historyDir && !alreadyThere ) {
|
3378
3453
|
urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role );
|
3379
3454
|
}
|
3380
3455
|
|
@@ -3458,11 +3533,10 @@ $.mobile.transitionFallbacks = {};
|
|
3458
3533
|
return path.makeUrlAbsolute( url, base);
|
3459
3534
|
}
|
3460
3535
|
|
3461
|
-
|
3462
3536
|
//The following event bindings should be bound after mobileinit has been triggered
|
3463
|
-
//the following
|
3464
|
-
$.mobile.
|
3465
|
-
|
3537
|
+
//the following deferred is resolved in the init file
|
3538
|
+
$.mobile.navreadyDeferred = $.Deferred();
|
3539
|
+
$.mobile.navreadyDeferred.done( function(){
|
3466
3540
|
//bind to form submit events, handle with Ajax
|
3467
3541
|
$( document ).delegate( "form", "submit", function( event ) {
|
3468
3542
|
var $this = $( this );
|
@@ -3499,8 +3573,7 @@ $.mobile.transitionFallbacks = {};
|
|
3499
3573
|
|
3500
3574
|
url = path.makeUrlAbsolute( url, getClosestBaseUrl($this) );
|
3501
3575
|
|
3502
|
-
|
3503
|
-
if( path.isExternal( url ) || target ) {
|
3576
|
+
if(( path.isExternal( url ) && !path.isPermittedCrossDomainRequest(documentUrl, url)) || target ) {
|
3504
3577
|
return;
|
3505
3578
|
}
|
3506
3579
|
|
@@ -3539,12 +3612,6 @@ $.mobile.transitionFallbacks = {};
|
|
3539
3612
|
removeActiveLinkClass( true );
|
3540
3613
|
$activeClickedLink = $( link ).closest( ".ui-btn" ).not( ".ui-disabled" );
|
3541
3614
|
$activeClickedLink.addClass( $.mobile.activeBtnClass );
|
3542
|
-
$( "." + $.mobile.activePageClass + " .ui-btn" ).not( link ).blur();
|
3543
|
-
|
3544
|
-
// By caching the href value to data and switching the href to a #, we can avoid address bar showing in iOS. The click handler resets the href during its initial steps if this data is present
|
3545
|
-
$( link )
|
3546
|
-
.jqmData( "href", $( link ).attr( "href" ) )
|
3547
|
-
.attr( "href", "#" );
|
3548
3615
|
}
|
3549
3616
|
}
|
3550
3617
|
});
|
@@ -3570,11 +3637,6 @@ $.mobile.transitionFallbacks = {};
|
|
3570
3637
|
window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 );
|
3571
3638
|
};
|
3572
3639
|
|
3573
|
-
// If there's data cached for the real href value, set the link's href back to it again. This pairs with an address bar workaround from the vclick handler
|
3574
|
-
if( $link.jqmData( "href" ) ){
|
3575
|
-
$link.attr( "href", $link.jqmData( "href" ) );
|
3576
|
-
}
|
3577
|
-
|
3578
3640
|
//if there's a data-rel=back attr, go back in history
|
3579
3641
|
if( $link.is( ":jqmData(rel='back')" ) ) {
|
3580
3642
|
window.history.back();
|
@@ -3627,12 +3689,11 @@ $.mobile.transitionFallbacks = {};
|
|
3627
3689
|
// data. We normally let the browser handle external/cross-domain urls, but if the
|
3628
3690
|
// allowCrossDomainPages option is true, we will allow cross-domain http/https
|
3629
3691
|
// requests to go through our page loading logic.
|
3630
|
-
isCrossDomainPageLoad = ( $.mobile.allowCrossDomainPages && documentUrl.protocol === "file:" && href.search( /^https?:/ ) != -1 ),
|
3631
3692
|
|
3632
3693
|
//check for protocol or rel and its not an embedded page
|
3633
3694
|
//TODO overlap in logic from isExternal, rel=external check should be
|
3634
3695
|
// moved into more comprehensive isExternalLink
|
3635
|
-
isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !
|
3696
|
+
isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest(documentUrl, href) );
|
3636
3697
|
|
3637
3698
|
if( isExternal ) {
|
3638
3699
|
httpCleanup();
|
@@ -3683,6 +3744,10 @@ $.mobile.transitionFallbacks = {};
|
|
3683
3744
|
fromHashChange: true
|
3684
3745
|
};
|
3685
3746
|
|
3747
|
+
if ( 0 === urlHistory.stack.length ) {
|
3748
|
+
urlHistory.initialDst = to;
|
3749
|
+
}
|
3750
|
+
|
3686
3751
|
//if listening is disabled (either globally or temporarily), or it's a dialog hash
|
3687
3752
|
if( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) {
|
3688
3753
|
urlHistory.ignoreNextHashChange = false;
|
@@ -3690,7 +3755,7 @@ $.mobile.transitionFallbacks = {};
|
|
3690
3755
|
}
|
3691
3756
|
|
3692
3757
|
// special case for dialogs
|
3693
|
-
if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 ) {
|
3758
|
+
if( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) {
|
3694
3759
|
|
3695
3760
|
// If current active page is not a dialog skip the dialog and continue
|
3696
3761
|
// in the same direction
|
@@ -3754,7 +3819,7 @@ $.mobile.transitionFallbacks = {};
|
|
3754
3819
|
$( document ).bind( "pageshow", resetActivePageHeight );
|
3755
3820
|
$( window ).bind( "throttledresize", resetActivePageHeight );
|
3756
3821
|
|
3757
|
-
};//
|
3822
|
+
});//navreadyDeferred done callback
|
3758
3823
|
|
3759
3824
|
})( jQuery );
|
3760
3825
|
|
@@ -3765,7 +3830,13 @@ $.mobile.transitionFallbacks = {};
|
|
3765
3830
|
var pushStateHandler = {},
|
3766
3831
|
self = pushStateHandler,
|
3767
3832
|
$win = $( window ),
|
3768
|
-
url = $.mobile.path.parseUrl( location.href )
|
3833
|
+
url = $.mobile.path.parseUrl( location.href ),
|
3834
|
+
mobileinitDeferred = $.Deferred(),
|
3835
|
+
domreadyDeferred = $.Deferred();
|
3836
|
+
|
3837
|
+
$( document ).ready( $.proxy( domreadyDeferred, "resolve" ) );
|
3838
|
+
|
3839
|
+
$( document ).one( "mobileinit", $.proxy( mobileinitDeferred, "resolve" ) );
|
3769
3840
|
|
3770
3841
|
$.extend( pushStateHandler, {
|
3771
3842
|
// TODO move to a path helper, this is rather common functionality
|
@@ -3773,6 +3844,10 @@ $.mobile.transitionFallbacks = {};
|
|
3773
3844
|
return url.pathname + url.search;
|
3774
3845
|
})(),
|
3775
3846
|
|
3847
|
+
hashChangeTimeout: 200,
|
3848
|
+
|
3849
|
+
hashChangeEnableTimer: undefined,
|
3850
|
+
|
3776
3851
|
initialHref: url.hrefNoHash,
|
3777
3852
|
|
3778
3853
|
state: function() {
|
@@ -3799,11 +3874,6 @@ $.mobile.transitionFallbacks = {};
|
|
3799
3874
|
return url;
|
3800
3875
|
},
|
3801
3876
|
|
3802
|
-
hashValueAfterReset: function( url ) {
|
3803
|
-
var resetUrl = self.resetUIKeys( url );
|
3804
|
-
return $.mobile.path.parseUrl( resetUrl ).hash;
|
3805
|
-
},
|
3806
|
-
|
3807
3877
|
// TODO sort out a single barrier to hashchange functionality
|
3808
3878
|
nextHashChangePrevented: function( value ) {
|
3809
3879
|
$.mobile.urlHistory.ignoreNextHashChange = value;
|
@@ -3854,41 +3924,28 @@ $.mobile.transitionFallbacks = {};
|
|
3854
3924
|
// cleaned up by the additional hash handling
|
3855
3925
|
onPopState: function( e ) {
|
3856
3926
|
var poppedState = e.originalEvent.state,
|
3857
|
-
|
3927
|
+
fromHash, toHash, hashChanged;
|
3858
3928
|
|
3859
3929
|
// if there's no state its not a popstate we care about, eg chrome's initial popstate
|
3860
3930
|
if( poppedState ) {
|
3861
|
-
//
|
3862
|
-
//
|
3863
|
-
|
3864
|
-
|
3865
|
-
// the hash stored in the state popped off the stack will be our currenturl or
|
3866
|
-
// the url to which we wish to navigate
|
3867
|
-
toHash = self.hashValueAfterReset( poppedState.hash.replace("#", "") );
|
3868
|
-
|
3869
|
-
// if the hashes of the urls are different we must assume that the browser
|
3870
|
-
// will fire a hashchange
|
3871
|
-
hashChanged = fromHash !== toHash;
|
3872
|
-
|
3873
|
-
// unlock hash handling once the hashchange caused be the popstate has fired
|
3874
|
-
if( hashChanged ) {
|
3875
|
-
$win.one( "hashchange.pushstate", function() {
|
3876
|
-
self.nextHashChangePrevented( false );
|
3877
|
-
});
|
3878
|
-
}
|
3931
|
+
// if we get two pop states in under this.hashChangeTimeout
|
3932
|
+
// make sure to clear any timer set for the previous change
|
3933
|
+
clearTimeout( self.hashChangeEnableTimer );
|
3879
3934
|
|
3880
|
-
// enable hash handling for the the _handleHashChange call
|
3935
|
+
// make sure to enable hash handling for the the _handleHashChange call
|
3881
3936
|
self.nextHashChangePrevented( false );
|
3882
3937
|
|
3883
|
-
// change the page based on the hash
|
3938
|
+
// change the page based on the hash in the popped state
|
3884
3939
|
$.mobile._handleHashChange( poppedState.hash );
|
3885
3940
|
|
3886
|
-
//
|
3887
|
-
|
3888
|
-
|
3889
|
-
|
3890
|
-
|
3891
|
-
|
3941
|
+
// prevent any hashchange in the next self.hashChangeTimeout
|
3942
|
+
self.nextHashChangePrevented( true );
|
3943
|
+
|
3944
|
+
// re-enable hash change handling after swallowing a possible hash
|
3945
|
+
// change event that comes on all popstates courtesy of browsers like Android
|
3946
|
+
self.hashChangeEnableTimer = setTimeout( function() {
|
3947
|
+
self.nextHashChangePrevented( false );
|
3948
|
+
}, self.hashChangeTimeout);
|
3892
3949
|
}
|
3893
3950
|
},
|
3894
3951
|
|
@@ -3905,7 +3962,8 @@ $.mobile.transitionFallbacks = {};
|
|
3905
3962
|
}
|
3906
3963
|
});
|
3907
3964
|
|
3908
|
-
|
3965
|
+
// We need to init when "mobileinit", "domready", and "navready" have all happened
|
3966
|
+
$.when( domreadyDeferred, mobileinitDeferred, $.mobile.navreadyDeferred ).done( function() {
|
3909
3967
|
if( $.mobile.pushStateEnabled && $.support.pushState ){
|
3910
3968
|
pushStateHandler.init();
|
3911
3969
|
}
|
@@ -4098,7 +4156,8 @@ $.widget( "mobile.dialog", $.mobile.widget, {
|
|
4098
4156
|
}
|
4099
4157
|
})
|
4100
4158
|
.bind( "pagehide", function( e, ui ) {
|
4101
|
-
|
4159
|
+
self._isClosed = false;
|
4160
|
+
$( this ).find( "." + $.mobile.activeBtnClass ).not( ".ui-slider-bg" ).removeClass( $.mobile.activeBtnClass );
|
4102
4161
|
})
|
4103
4162
|
// Override the theme set by the page plugin on pageshow
|
4104
4163
|
.bind( "pagebeforeshow", function(){
|
@@ -4112,7 +4171,15 @@ $.widget( "mobile.dialog", $.mobile.widget, {
|
|
4112
4171
|
|
4113
4172
|
// Close method goes back in history
|
4114
4173
|
close: function() {
|
4115
|
-
|
4174
|
+
if ( !this._isClosed ) {
|
4175
|
+
this._isClosed = true;
|
4176
|
+
if ( $.mobile.hashListeningEnabled ) {
|
4177
|
+
window.history.back();
|
4178
|
+
}
|
4179
|
+
else {
|
4180
|
+
$.mobile.changePage( $.mobile.urlHistory.getPrev().url );
|
4181
|
+
}
|
4182
|
+
}
|
4116
4183
|
}
|
4117
4184
|
});
|
4118
4185
|
|
@@ -4125,8 +4192,104 @@ $( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecre
|
|
4125
4192
|
|
4126
4193
|
(function( $, undefined ) {
|
4127
4194
|
|
4195
|
+
$.mobile.page.prototype.options.backBtnText = "Back";
|
4196
|
+
$.mobile.page.prototype.options.addBackBtn = false;
|
4197
|
+
$.mobile.page.prototype.options.backBtnTheme = null;
|
4198
|
+
$.mobile.page.prototype.options.headerTheme = "a";
|
4199
|
+
$.mobile.page.prototype.options.footerTheme = "a";
|
4200
|
+
$.mobile.page.prototype.options.contentTheme = null;
|
4201
|
+
|
4202
|
+
// NOTE bind used to force this binding to run before the buttonMarkup binding
|
4203
|
+
// which expects .ui-footer top be applied in its gigantic selector
|
4204
|
+
// TODO remove the buttonMarkup giant selector and move it to the various modules
|
4205
|
+
// on which it depends
|
4206
|
+
$( document ).bind( "pagecreate", function( e ) {
|
4207
|
+
var $page = $( e.target ),
|
4208
|
+
o = $page.data( "page" ).options,
|
4209
|
+
pageRole = $page.jqmData( "role" ),
|
4210
|
+
pageTheme = o.theme;
|
4211
|
+
|
4212
|
+
$( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", $page )
|
4213
|
+
.jqmEnhanceable()
|
4214
|
+
.each(function() {
|
4215
|
+
|
4216
|
+
var $this = $( this ),
|
4217
|
+
role = $this.jqmData( "role" ),
|
4218
|
+
theme = $this.jqmData( "theme" ),
|
4219
|
+
contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
|
4220
|
+
$headeranchors,
|
4221
|
+
leftbtn,
|
4222
|
+
rightbtn,
|
4223
|
+
backBtn;
|
4224
|
+
|
4225
|
+
$this.addClass( "ui-" + role );
|
4226
|
+
|
4227
|
+
//apply theming and markup modifications to page,header,content,footer
|
4228
|
+
if ( role === "header" || role === "footer" ) {
|
4229
|
+
|
4230
|
+
var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
|
4231
|
+
|
4232
|
+
$this
|
4233
|
+
//add theme class
|
4234
|
+
.addClass( "ui-bar-" + thisTheme )
|
4235
|
+
// Add ARIA role
|
4236
|
+
.attr( "role", role === "header" ? "banner" : "contentinfo" );
|
4237
|
+
|
4238
|
+
if( role === "header") {
|
4239
|
+
// Right,left buttons
|
4240
|
+
$headeranchors = $this.children( "a" );
|
4241
|
+
leftbtn = $headeranchors.hasClass( "ui-btn-left" );
|
4242
|
+
rightbtn = $headeranchors.hasClass( "ui-btn-right" );
|
4243
|
+
|
4244
|
+
leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
|
4245
|
+
|
4246
|
+
rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
|
4247
|
+
}
|
4248
|
+
|
4249
|
+
// Auto-add back btn on pages beyond first view
|
4250
|
+
if ( o.addBackBtn &&
|
4251
|
+
role === "header" &&
|
4252
|
+
$( ".ui-page" ).length > 1 &&
|
4253
|
+
$page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
|
4254
|
+
!leftbtn ) {
|
4255
|
+
|
4256
|
+
backBtn = $( "<a href='javascript:void(0);' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
|
4257
|
+
// If theme is provided, override default inheritance
|
4258
|
+
.attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
|
4259
|
+
.prependTo( $this );
|
4260
|
+
}
|
4261
|
+
|
4262
|
+
// Page title
|
4263
|
+
$this.children( "h1, h2, h3, h4, h5, h6" )
|
4264
|
+
.addClass( "ui-title" )
|
4265
|
+
// Regardless of h element number in src, it becomes h1 for the enhanced page
|
4266
|
+
.attr({
|
4267
|
+
"role": "heading",
|
4268
|
+
"aria-level": "1"
|
4269
|
+
});
|
4270
|
+
|
4271
|
+
} else if ( role === "content" ) {
|
4272
|
+
if ( contentTheme ) {
|
4273
|
+
$this.addClass( "ui-body-" + ( contentTheme ) );
|
4274
|
+
}
|
4275
|
+
|
4276
|
+
// Add ARIA role
|
4277
|
+
$this.attr( "role", "main" );
|
4278
|
+
}
|
4279
|
+
});
|
4280
|
+
});
|
4281
|
+
|
4282
|
+
})( jQuery );
|
4283
|
+
|
4284
|
+
(function( $, undefined ) {
|
4285
|
+
|
4286
|
+
// filter function removes whitespace between label and form element so we can use inline-block (nodeType 3 = text)
|
4128
4287
|
$.fn.fieldcontain = function( options ) {
|
4129
|
-
return this
|
4288
|
+
return this
|
4289
|
+
.addClass( "ui-field-contain ui-body ui-br" )
|
4290
|
+
.contents().filter( function() {
|
4291
|
+
return ( this.nodeType === 3 && !/\S/.test( this.nodeValue ) );
|
4292
|
+
}).remove();
|
4130
4293
|
};
|
4131
4294
|
|
4132
4295
|
//auto self-init widgets
|
@@ -4159,6 +4322,7 @@ $.fn.grid = function( options ) {
|
|
4159
4322
|
}
|
4160
4323
|
} else {
|
4161
4324
|
grid = "a";
|
4325
|
+
$this.addClass( "ui-grid-duo" );
|
4162
4326
|
}
|
4163
4327
|
}
|
4164
4328
|
iterator = gridCols[grid];
|
@@ -4434,94 +4598,6 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
4434
4598
|
})( jQuery );
|
4435
4599
|
|
4436
4600
|
|
4437
|
-
(function( $, undefined ) {
|
4438
|
-
|
4439
|
-
$.mobile.page.prototype.options.backBtnText = "Back";
|
4440
|
-
$.mobile.page.prototype.options.addBackBtn = false;
|
4441
|
-
$.mobile.page.prototype.options.backBtnTheme = null;
|
4442
|
-
$.mobile.page.prototype.options.headerTheme = "a";
|
4443
|
-
$.mobile.page.prototype.options.footerTheme = "a";
|
4444
|
-
$.mobile.page.prototype.options.contentTheme = null;
|
4445
|
-
|
4446
|
-
$( document ).delegate( ":jqmData(role='page'), :jqmData(role='dialog')", "pagecreate", function( e ) {
|
4447
|
-
|
4448
|
-
var $page = $( this ),
|
4449
|
-
o = $page.data( "page" ).options,
|
4450
|
-
pageRole = $page.jqmData( "role" ),
|
4451
|
-
pageTheme = o.theme;
|
4452
|
-
|
4453
|
-
$( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", this )
|
4454
|
-
.jqmEnhanceable()
|
4455
|
-
.each(function() {
|
4456
|
-
|
4457
|
-
var $this = $( this ),
|
4458
|
-
role = $this.jqmData( "role" ),
|
4459
|
-
theme = $this.jqmData( "theme" ),
|
4460
|
-
contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
|
4461
|
-
$headeranchors,
|
4462
|
-
leftbtn,
|
4463
|
-
rightbtn,
|
4464
|
-
backBtn;
|
4465
|
-
|
4466
|
-
$this.addClass( "ui-" + role );
|
4467
|
-
|
4468
|
-
//apply theming and markup modifications to page,header,content,footer
|
4469
|
-
if ( role === "header" || role === "footer" ) {
|
4470
|
-
|
4471
|
-
var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
|
4472
|
-
|
4473
|
-
$this
|
4474
|
-
//add theme class
|
4475
|
-
.addClass( "ui-bar-" + thisTheme )
|
4476
|
-
// Add ARIA role
|
4477
|
-
.attr( "role", role === "header" ? "banner" : "contentinfo" );
|
4478
|
-
|
4479
|
-
if( role === "header") {
|
4480
|
-
// Right,left buttons
|
4481
|
-
$headeranchors = $this.children( "a" );
|
4482
|
-
leftbtn = $headeranchors.hasClass( "ui-btn-left" );
|
4483
|
-
rightbtn = $headeranchors.hasClass( "ui-btn-right" );
|
4484
|
-
|
4485
|
-
leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
|
4486
|
-
|
4487
|
-
rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
|
4488
|
-
}
|
4489
|
-
|
4490
|
-
// Auto-add back btn on pages beyond first view
|
4491
|
-
if ( o.addBackBtn &&
|
4492
|
-
role === "header" &&
|
4493
|
-
$( ".ui-page" ).length > 1 &&
|
4494
|
-
$page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
|
4495
|
-
!leftbtn ) {
|
4496
|
-
|
4497
|
-
backBtn = $( "<a href='#' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
|
4498
|
-
// If theme is provided, override default inheritance
|
4499
|
-
.attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
|
4500
|
-
.prependTo( $this );
|
4501
|
-
}
|
4502
|
-
|
4503
|
-
// Page title
|
4504
|
-
$this.children( "h1, h2, h3, h4, h5, h6" )
|
4505
|
-
.addClass( "ui-title" )
|
4506
|
-
// Regardless of h element number in src, it becomes h1 for the enhanced page
|
4507
|
-
.attr({
|
4508
|
-
"role": "heading",
|
4509
|
-
"aria-level": "1"
|
4510
|
-
});
|
4511
|
-
|
4512
|
-
} else if ( role === "content" ) {
|
4513
|
-
if ( contentTheme ) {
|
4514
|
-
$this.addClass( "ui-body-" + ( contentTheme ) );
|
4515
|
-
}
|
4516
|
-
|
4517
|
-
// Add ARIA role
|
4518
|
-
$this.attr( "role", "main" );
|
4519
|
-
}
|
4520
|
-
});
|
4521
|
-
});
|
4522
|
-
|
4523
|
-
})( jQuery );
|
4524
|
-
|
4525
4601
|
(function( $, undefined ) {
|
4526
4602
|
|
4527
4603
|
$.widget( "mobile.collapsible", $.mobile.widget, {
|
@@ -4611,7 +4687,9 @@ $.widget( "mobile.collapsible", $.mobile.widget, {
|
|
4611
4687
|
.end()
|
4612
4688
|
.find( ".ui-icon" )
|
4613
4689
|
.toggleClass( "ui-icon-minus", !isCollapse )
|
4614
|
-
.toggleClass( "ui-icon-plus", isCollapse )
|
4690
|
+
.toggleClass( "ui-icon-plus", isCollapse )
|
4691
|
+
.end()
|
4692
|
+
.find( "a" ).first().removeClass( $.mobile.activeBtnClass );
|
4615
4693
|
|
4616
4694
|
$this.toggleClass( "ui-collapsible-collapsed", isCollapse );
|
4617
4695
|
collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse );
|
@@ -4628,6 +4706,9 @@ $.widget( "mobile.collapsible", $.mobile.widget, {
|
|
4628
4706
|
.trigger( o.collapsed ? "collapse" : "expand" );
|
4629
4707
|
|
4630
4708
|
collapsibleHeading
|
4709
|
+
.bind( "tap", function( event ) {
|
4710
|
+
collapsibleHeading.find( "a" ).first().addClass( $.mobile.activeBtnClass );
|
4711
|
+
})
|
4631
4712
|
.bind( "click", function( event ) {
|
4632
4713
|
|
4633
4714
|
var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ?
|
@@ -4636,6 +4717,7 @@ $.widget( "mobile.collapsible", $.mobile.widget, {
|
|
4636
4717
|
collapsible.trigger( type );
|
4637
4718
|
|
4638
4719
|
event.preventDefault();
|
4720
|
+
event.stopPropagation();
|
4639
4721
|
});
|
4640
4722
|
}
|
4641
4723
|
});
|
@@ -4682,7 +4764,8 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, {
|
|
4682
4764
|
if ( contentTheme && collapsible.jqmData( "collapsible-last" ) ) {
|
4683
4765
|
collapsible.find( widget.options.heading ).first()
|
4684
4766
|
.find( "a" ).first()
|
4685
|
-
.
|
4767
|
+
.toggleClass( "ui-corner-bottom", isCollapse )
|
4768
|
+
.find( ".ui-btn-inner" )
|
4686
4769
|
.toggleClass( "ui-corner-bottom", isCollapse );
|
4687
4770
|
collapsible.find( ".ui-collapsible-content" ).toggleClass( "ui-corner-bottom", !isCollapse );
|
4688
4771
|
}
|
@@ -4711,7 +4794,8 @@ $.widget( "mobile.collapsibleset", $.mobile.widget, {
|
|
4711
4794
|
collapsiblesInSet.each( function() {
|
4712
4795
|
$( this ).find( $.mobile.collapsible.prototype.options.heading )
|
4713
4796
|
.find( "a" ).first()
|
4714
|
-
.
|
4797
|
+
.removeClass( "ui-corner-top ui-corner-bottom" )
|
4798
|
+
.find( ".ui-btn-inner" )
|
4715
4799
|
.removeClass( "ui-corner-top ui-corner-bottom" );
|
4716
4800
|
});
|
4717
4801
|
|
@@ -4755,16 +4839,12 @@ $.widget( "mobile.navbar", $.mobile.widget, {
|
|
4755
4839
|
iconpos = $navbtns.filter( ":jqmData(icon)" ).length ?
|
4756
4840
|
this.options.iconpos : undefined;
|
4757
4841
|
|
4758
|
-
$navbar.addClass( "ui-navbar" )
|
4842
|
+
$navbar.addClass( "ui-navbar ui-mini" )
|
4759
4843
|
.attr( "role","navigation" )
|
4760
4844
|
.find( "ul" )
|
4761
4845
|
.jqmEnhanceable()
|
4762
4846
|
.grid({ grid: this.options.grid });
|
4763
4847
|
|
4764
|
-
if ( !iconpos ) {
|
4765
|
-
$navbar.addClass( "ui-navbar-noicons" );
|
4766
|
-
}
|
4767
|
-
|
4768
4848
|
$navbtns.buttonMarkup({
|
4769
4849
|
corners: false,
|
4770
4850
|
shadow: false,
|
@@ -4809,7 +4889,6 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
4809
4889
|
dividerTheme: "b",
|
4810
4890
|
splitIcon: "arrow-r",
|
4811
4891
|
splitTheme: "b",
|
4812
|
-
mini: false,
|
4813
4892
|
inset: false,
|
4814
4893
|
initSelector: ":jqmData(role='listview')"
|
4815
4894
|
},
|
@@ -4819,8 +4898,7 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
4819
4898
|
listviewClasses = "";
|
4820
4899
|
|
4821
4900
|
listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "";
|
4822
|
-
|
4823
|
-
|
4901
|
+
|
4824
4902
|
// create listview markup
|
4825
4903
|
t.element.addClass(function( i, orig ) {
|
4826
4904
|
return orig + " ui-listview " + listviewClasses;
|
@@ -4971,8 +5049,9 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
4971
5049
|
if ( create || !item.hasClass( "ui-li" ) ) {
|
4972
5050
|
itemTheme = item.jqmData("theme") || o.theme;
|
4973
5051
|
a = this._getChildrenByTagName( item[ 0 ], "a", "A" );
|
5052
|
+
var isDivider = ( item.jqmData( "role" ) === "list-divider" );
|
4974
5053
|
|
4975
|
-
if ( a.length ) {
|
5054
|
+
if ( a.length && !isDivider ) {
|
4976
5055
|
icon = item.jqmData("icon");
|
4977
5056
|
|
4978
5057
|
item.buttonMarkup({
|
@@ -5006,7 +5085,7 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
5006
5085
|
corners: false,
|
5007
5086
|
theme: itemTheme,
|
5008
5087
|
icon: false,
|
5009
|
-
iconpos:
|
5088
|
+
iconpos: "notext"
|
5010
5089
|
})
|
5011
5090
|
.find( ".ui-btn-inner" )
|
5012
5091
|
.append(
|
@@ -5020,7 +5099,7 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
5020
5099
|
})
|
5021
5100
|
);
|
5022
5101
|
}
|
5023
|
-
} else if (
|
5102
|
+
} else if ( isDivider ) {
|
5024
5103
|
|
5025
5104
|
itemClass += " ui-li-divider ui-bar-" + dividertheme;
|
5026
5105
|
item.attr( "role", "heading" );
|
@@ -5164,13 +5243,17 @@ $.widget( "mobile.listview", $.mobile.widget, {
|
|
5164
5243
|
parentPage.data("page").options.domCache === false ) {
|
5165
5244
|
|
5166
5245
|
var newRemove = function( e, ui ){
|
5167
|
-
var nextPage = ui.nextPage, npURL
|
5246
|
+
var nextPage = ui.nextPage, npURL,
|
5247
|
+
prEvent = new $.Event( "pageremove" );
|
5168
5248
|
|
5169
5249
|
if( ui.nextPage ){
|
5170
5250
|
npURL = nextPage.jqmData( "url" );
|
5171
5251
|
if( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ){
|
5172
5252
|
self.childPages().remove();
|
5173
|
-
parentPage.
|
5253
|
+
parentPage.trigger( prEvent );
|
5254
|
+
if( !prEvent.isDefaultPrevented() ){
|
5255
|
+
parentPage.removeWithDependents();
|
5256
|
+
}
|
5174
5257
|
}
|
5175
5258
|
}
|
5176
5259
|
};
|
@@ -5443,6 +5526,12 @@ $.widget( "mobile.button", $.mobile.widget, {
|
|
5443
5526
|
classes = "ui-btn-right";
|
5444
5527
|
}
|
5445
5528
|
|
5529
|
+
if( $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) {
|
5530
|
+
classes ? classes += " ui-submit" : classes = "ui-submit";
|
5531
|
+
}
|
5532
|
+
|
5533
|
+
$( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" );
|
5534
|
+
|
5446
5535
|
// Add ARIA role
|
5447
5536
|
this.button = $( "<div></div>" )
|
5448
5537
|
.text( $el.text() || $el.val() )
|
@@ -5467,7 +5556,7 @@ $.widget( "mobile.button", $.mobile.widget, {
|
|
5467
5556
|
// Add hidden input during submit if input type="submit" has a name.
|
5468
5557
|
if ( type !== "button" && type !== "reset" && name ) {
|
5469
5558
|
$el.bind( "vclick", function() {
|
5470
|
-
// Add hidden input if it doesn
|
5559
|
+
// Add hidden input if it doesn't already exist.
|
5471
5560
|
if( $buttonPlaceholder === undefined ) {
|
5472
5561
|
$buttonPlaceholder = $( "<input>", {
|
5473
5562
|
type: "hidden",
|
@@ -5537,7 +5626,7 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
5537
5626
|
|
5538
5627
|
$.fn.controlgroup = function( options ) {
|
5539
5628
|
function flipClasses( els, flCorners ) {
|
5540
|
-
els.removeClass( "ui-btn-corner-all ui-shadow" )
|
5629
|
+
els.removeClass( "ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow" )
|
5541
5630
|
.eq( 0 ).addClass( flCorners[ 0 ] )
|
5542
5631
|
.end()
|
5543
5632
|
.last().addClass( flCorners[ 1 ] ).addClass( "ui-controlgroup-last" );
|
@@ -5554,10 +5643,11 @@ $.fn.controlgroup = function( options ) {
|
|
5554
5643
|
groupheading = $el.children( "legend" ),
|
5555
5644
|
flCorners = o.direction == "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ],
|
5556
5645
|
type = $el.find( "input" ).first().attr( "type" );
|
5646
|
+
|
5647
|
+
$el.wrapInner( "<div class='ui-controlgroup-controls'></div>" );
|
5557
5648
|
|
5558
5649
|
// Replace legend with more stylable replacement div
|
5559
5650
|
if ( groupheading.length ) {
|
5560
|
-
$el.wrapInner( "<div class='ui-controlgroup-controls'></div>" );
|
5561
5651
|
$( "<div role='heading' class='ui-controlgroup-label'>" + groupheading.html() + "</div>" ).insertBefore( $el.children(0) );
|
5562
5652
|
groupheading.remove();
|
5563
5653
|
}
|
@@ -5915,9 +6005,11 @@ $.widget( "mobile.slider", $.mobile.widget, {
|
|
5915
6005
|
|
5916
6006
|
controlID = control.attr( "id" ),
|
5917
6007
|
|
5918
|
-
|
6008
|
+
$label = $( "[for='" + controlID + "']" ),
|
5919
6009
|
|
5920
|
-
|
6010
|
+
labelID = $label.attr( "id" ) || controlID + "-label",
|
6011
|
+
|
6012
|
+
label = $label.attr( "id", labelID ),
|
5921
6013
|
|
5922
6014
|
val = function() {
|
5923
6015
|
return cType == "input" ? parseFloat( control.val() ) : control[0].selectedIndex;
|
@@ -5941,7 +6033,7 @@ $.widget( "mobile.slider", $.mobile.widget, {
|
|
5941
6033
|
|
5942
6034
|
valuebg = control.jqmData("highlight") && cType != "select" ? (function() {
|
5943
6035
|
var bg = document.createElement('div');
|
5944
|
-
bg.className = 'ui-slider-bg
|
6036
|
+
bg.className = 'ui-slider-bg ' + $.mobile.activeBtnClass + ' ui-btn-corner-all';
|
5945
6037
|
return $( bg ).prependTo( slider );
|
5946
6038
|
})() : false,
|
5947
6039
|
|
@@ -6375,6 +6467,10 @@ $.widget( "mobile.selectmenu", $.mobile.widget, {
|
|
6375
6467
|
|
6376
6468
|
options = this.options,
|
6377
6469
|
|
6470
|
+
inline = options.inline || this.select.jqmData( "inline" ),
|
6471
|
+
mini = options.mini || this.select.jqmData( "mini" ),
|
6472
|
+
iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false,
|
6473
|
+
|
6378
6474
|
// IE throws an exception at options.item() function when
|
6379
6475
|
// there is no selected item
|
6380
6476
|
// select first in this case
|
@@ -6387,12 +6483,12 @@ $.widget( "mobile.selectmenu", $.mobile.widget, {
|
|
6387
6483
|
.buttonMarkup( {
|
6388
6484
|
theme: options.theme,
|
6389
6485
|
icon: options.icon,
|
6390
|
-
iconpos:
|
6391
|
-
inline:
|
6486
|
+
iconpos: iconpos,
|
6487
|
+
inline: inline,
|
6392
6488
|
corners: options.corners,
|
6393
6489
|
shadow: options.shadow,
|
6394
6490
|
iconshadow: options.iconshadow,
|
6395
|
-
mini:
|
6491
|
+
mini: mini
|
6396
6492
|
});
|
6397
6493
|
|
6398
6494
|
// Opera does not properly support opacity on select elements
|
@@ -6400,8 +6496,8 @@ $.widget( "mobile.selectmenu", $.mobile.widget, {
|
|
6400
6496
|
// On the desktop,it seems to do the opposite
|
6401
6497
|
// for these reasons, using the nativeMenu option results in a full native select in Opera
|
6402
6498
|
if ( options.nativeMenu && window.opera && window.opera.version ) {
|
6403
|
-
|
6404
|
-
}
|
6499
|
+
button.addClass( "ui-select-nativeonly" );
|
6500
|
+
}
|
6405
6501
|
|
6406
6502
|
// Add counter for multi selects
|
6407
6503
|
if ( this.isMultiple ) {
|
@@ -6659,8 +6755,13 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
6659
6755
|
self.select.trigger( "change" );
|
6660
6756
|
}
|
6661
6757
|
|
6662
|
-
//hide custom select for single selects only
|
6663
|
-
|
6758
|
+
// hide custom select for single selects only - otherwise focus clicked item
|
6759
|
+
// We need to grab the clicked item the hard way, because the list may have been rebuilt
|
6760
|
+
if ( self.isMultiple ) {
|
6761
|
+
self.list.find( "li:not(.ui-li-divider)" ).eq( newIndex )
|
6762
|
+
.addClass( "ui-btn-down-" + widget.options.theme ).find( "a" ).first().focus();
|
6763
|
+
}
|
6764
|
+
else {
|
6664
6765
|
self.close();
|
6665
6766
|
}
|
6666
6767
|
|
@@ -6774,19 +6875,22 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
6774
6875
|
return options.text() !== list.text();
|
6775
6876
|
},
|
6776
6877
|
|
6878
|
+
selected: function() {
|
6879
|
+
return this._selectOptions().filter( ":selected:not(:jqmData(placeholder='true'))" );
|
6880
|
+
},
|
6881
|
+
|
6777
6882
|
refresh: function( forceRebuild , foo ){
|
6778
6883
|
var self = this,
|
6779
6884
|
select = this.element,
|
6780
6885
|
isMultiple = this.isMultiple,
|
6781
|
-
|
6782
|
-
selected = this.selected(),
|
6783
|
-
// return an array of all selected index's
|
6784
|
-
indicies = this.selectedIndices();
|
6886
|
+
indicies;
|
6785
6887
|
|
6786
6888
|
if ( forceRebuild || this._isRebuildRequired() ) {
|
6787
6889
|
self._buildList();
|
6788
6890
|
}
|
6789
6891
|
|
6892
|
+
indicies = this.selectedIndices();
|
6893
|
+
|
6790
6894
|
self.setButtonText();
|
6791
6895
|
self.setButtonCount();
|
6792
6896
|
|
@@ -6864,7 +6968,11 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
6864
6968
|
}, 300);
|
6865
6969
|
|
6866
6970
|
function focusMenuItem() {
|
6867
|
-
self.list.find( "." + $.mobile.activeBtnClass + " a" )
|
6971
|
+
var selector = self.list.find( "." + $.mobile.activeBtnClass + " a" );
|
6972
|
+
if ( selector.length === 0 ) {
|
6973
|
+
selector = self.list.find( "li.ui-btn:not(:jqmData(placeholder='true')) a" );
|
6974
|
+
}
|
6975
|
+
selector.first().focus().closest( "li" ).addClass( "ui-btn-down-" + widget.options.theme );
|
6868
6976
|
}
|
6869
6977
|
|
6870
6978
|
if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) {
|
@@ -6965,10 +7073,12 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
6965
7073
|
dataIndexAttr = dataPrefix + 'option-index',
|
6966
7074
|
dataIconAttr = dataPrefix + 'icon',
|
6967
7075
|
dataRoleAttr = dataPrefix + 'role',
|
7076
|
+
dataPlaceholderAttr = dataPrefix + 'placeholder',
|
6968
7077
|
fragment = document.createDocumentFragment(),
|
7078
|
+
isPlaceholderItem = false,
|
6969
7079
|
optGroup;
|
6970
7080
|
|
6971
|
-
for (var i = 0; i < numOptions;i
|
7081
|
+
for (var i = 0; i < numOptions;i++, isPlaceholderItem = false){
|
6972
7082
|
var option = $options[i],
|
6973
7083
|
$option = $(option),
|
6974
7084
|
parent = option.parentNode,
|
@@ -6995,6 +7105,10 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
6995
7105
|
|
6996
7106
|
if (needPlaceholder && (!option.getAttribute( "value" ) || text.length == 0 || $option.jqmData( "placeholder" ))) {
|
6997
7107
|
needPlaceholder = false;
|
7108
|
+
isPlaceholderItem = true;
|
7109
|
+
|
7110
|
+
// If we have identified a placeholder, mark it retroactively in the select as well
|
7111
|
+
option.setAttribute( dataPlaceholderAttr, true );
|
6998
7112
|
if ( o.hidePlaceholderMenuItems ) {
|
6999
7113
|
classes.push( "ui-selectmenu-placeholder" );
|
7000
7114
|
}
|
@@ -7010,6 +7124,9 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7010
7124
|
}
|
7011
7125
|
item.setAttribute(dataIndexAttr,i);
|
7012
7126
|
item.setAttribute(dataIconAttr,dataIcon);
|
7127
|
+
if ( isPlaceholderItem ) {
|
7128
|
+
item.setAttribute( dataPlaceholderAttr, true );
|
7129
|
+
}
|
7013
7130
|
item.className = classes.join(" ");
|
7014
7131
|
item.setAttribute('role','option');
|
7015
7132
|
anchor.setAttribute('tabindex','-1');
|
@@ -7065,7 +7182,7 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7065
7182
|
transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown)
|
7066
7183
|
fullscreen: false,
|
7067
7184
|
tapToggle: true,
|
7068
|
-
tapToggleBlacklist: "a, input, select, textarea, .ui-header-fixed, .ui-footer-fixed",
|
7185
|
+
tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed",
|
7069
7186
|
hideDuringFocus: "input, textarea, select",
|
7070
7187
|
updatePagePadding: true,
|
7071
7188
|
trackPersistentToolbars: true,
|
@@ -7179,15 +7296,17 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7179
7296
|
}
|
7180
7297
|
} )
|
7181
7298
|
.bind( "webkitAnimationStart animationstart updatelayout", function(){
|
7299
|
+
var thisPage = this;
|
7182
7300
|
if( o.updatePagePadding ){
|
7183
|
-
self.updatePagePadding();
|
7301
|
+
self.updatePagePadding( thisPage );
|
7184
7302
|
}
|
7185
7303
|
})
|
7186
7304
|
.bind( "pageshow", function(){
|
7187
|
-
|
7305
|
+
var thisPage = this;
|
7306
|
+
self.updatePagePadding( thisPage );
|
7188
7307
|
if( o.updatePagePadding ){
|
7189
7308
|
$( window ).bind( "throttledresize." + self.widgetName, function(){
|
7190
|
-
self.updatePagePadding();
|
7309
|
+
self.updatePagePadding( thisPage );
|
7191
7310
|
});
|
7192
7311
|
}
|
7193
7312
|
})
|
@@ -7222,14 +7341,15 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7222
7341
|
_visible: true,
|
7223
7342
|
|
7224
7343
|
// This will set the content element's top or bottom padding equal to the toolbar's height
|
7225
|
-
updatePagePadding: function() {
|
7344
|
+
updatePagePadding: function( tbPage ) {
|
7226
7345
|
var $el = this.element,
|
7227
7346
|
header = $el.is( ".ui-header" );
|
7228
7347
|
|
7229
7348
|
// This behavior only applies to "fixed", not "fullscreen"
|
7230
7349
|
if( this.options.fullscreen ){ return; }
|
7231
7350
|
|
7232
|
-
$el.closest( ".ui-page" )
|
7351
|
+
tbPage = tbPage || $el.closest( ".ui-page" );
|
7352
|
+
$( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() );
|
7233
7353
|
},
|
7234
7354
|
|
7235
7355
|
_useTransition: function( notransition ){
|
@@ -7370,7 +7490,7 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7370
7490
|
$head = $( "head" ),
|
7371
7491
|
$window = $( window );
|
7372
7492
|
|
7373
|
-
|
7493
|
+
// trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
|
7374
7494
|
$( window.document ).trigger( "mobileinit" );
|
7375
7495
|
|
7376
7496
|
// support conditions
|
@@ -7500,8 +7620,14 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7500
7620
|
//remove initial build class (only present on first pageshow)
|
7501
7621
|
hideRenderingClass();
|
7502
7622
|
|
7503
|
-
// if hashchange listening is disabled
|
7504
|
-
|
7623
|
+
// if hashchange listening is disabled, there's no hash deeplink,
|
7624
|
+
// the hash is not valid (contains more than one # or does not start with #)
|
7625
|
+
// or there is no page with that hash, change to the first page in the DOM
|
7626
|
+
// Remember, however, that the hash can also be a path!
|
7627
|
+
if ( ! ( $.mobile.hashListeningEnabled &&
|
7628
|
+
$.mobile.path.isHashValid( location.hash ) &&
|
7629
|
+
( $( location.hash + ':jqmData(role="page")' ).length ||
|
7630
|
+
$.mobile.path.isPath( location.hash ) ) ) ) {
|
7505
7631
|
$.mobile.changePage( $.mobile.firstPage, { transition: "none", reverse: true, changeHash: false, fromHashChange: true } );
|
7506
7632
|
}
|
7507
7633
|
// otherwise, trigger a hashchange to load a deeplink
|
@@ -7512,7 +7638,7 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7512
7638
|
});
|
7513
7639
|
|
7514
7640
|
// initialize events now, after mobileinit has occurred
|
7515
|
-
$.mobile.
|
7641
|
+
$.mobile.navreadyDeferred.resolve();
|
7516
7642
|
|
7517
7643
|
// check which scrollTop value should be used by scrolling to 1 immediately at domready
|
7518
7644
|
// then check what the scroll top is. Android will report 0... others 1
|
@@ -7544,6 +7670,19 @@ $( document ).bind( "pagecreate create", function( e ){
|
|
7544
7670
|
// window load event
|
7545
7671
|
// hide iOS browser chrome on load
|
7546
7672
|
$window.load( $.mobile.silentScroll );
|
7673
|
+
|
7674
|
+
if ( !$.support.cssPointerEvents ) {
|
7675
|
+
// IE and Opera don't support CSS pointer-events: none that we use to disable link-based buttons
|
7676
|
+
// by adding the 'ui-disabled' class to them. Using a JavaScript workaround for those browser.
|
7677
|
+
// https://github.com/jquery/jquery-mobile/issues/3558
|
7678
|
+
|
7679
|
+
$( document ).delegate( ".ui-disabled", "vclick",
|
7680
|
+
function( e ) {
|
7681
|
+
e.preventDefault();
|
7682
|
+
e.stopImmediatePropagation();
|
7683
|
+
}
|
7684
|
+
);
|
7685
|
+
}
|
7547
7686
|
});
|
7548
7687
|
}( jQuery, this ));
|
7549
7688
|
|