|
|
|
@@ -859,19 +859,7 @@ $.ui.plugin = {
|
|
|
|
|
|
|
|
|
|
//simply set the active page's minimum height to screen height, depending on orientation
|
|
|
|
|
resetActivePageHeight: function( height ) {
|
|
|
|
|
var page = $( "." + $.mobile.activePageClass ),
|
|
|
|
|
pageHeight = page.height(),
|
|
|
|
|
pageOuterHeight = page.outerHeight( true );
|
|
|
|
|
|
|
|
|
|
height = (typeof height === "number") ? height : $.mobile.getScreenHeight();
|
|
|
|
|
|
|
|
|
|
// Remove any previous min-height setting
|
|
|
|
|
page.css( "min-height", "" );
|
|
|
|
|
|
|
|
|
|
// Set the minimum height only if the height as determined by CSS is insufficient
|
|
|
|
|
if ( page.height() < height ) {
|
|
|
|
|
page.css( "min-height", height - ( pageOuterHeight - pageHeight ) );
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
loading: function () {
|
|
|
|
@@ -1354,187 +1342,6 @@ if ( !$.support.boxShadow ) {
|
|
|
|
|
};
|
|
|
|
|
})( jQuery );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// throttled resize event
|
|
|
|
|
(function( $ ) {
|
|
|
|
|
$.event.special.throttledresize = {
|
|
|
|
|
setup: function() {
|
|
|
|
|
$( this ).bind( "resize", handler );
|
|
|
|
|
},
|
|
|
|
|
teardown: function() {
|
|
|
|
|
$( this ).unbind( "resize", handler );
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var throttle = 250,
|
|
|
|
|
handler = function() {
|
|
|
|
|
curr = ( new Date() ).getTime();
|
|
|
|
|
diff = curr - lastCall;
|
|
|
|
|
|
|
|
|
|
if ( diff >= throttle ) {
|
|
|
|
|
|
|
|
|
|
lastCall = curr;
|
|
|
|
|
$( this ).trigger( "throttledresize" );
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
if ( heldCall ) {
|
|
|
|
|
clearTimeout( heldCall );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Promise a held call will still execute
|
|
|
|
|
heldCall = setTimeout( handler, throttle - diff );
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
lastCall = 0,
|
|
|
|
|
heldCall,
|
|
|
|
|
curr,
|
|
|
|
|
diff;
|
|
|
|
|
})( jQuery );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(function( $, window ) {
|
|
|
|
|
var win = $( window ),
|
|
|
|
|
event_name = "orientationchange",
|
|
|
|
|
get_orientation,
|
|
|
|
|
last_orientation,
|
|
|
|
|
initial_orientation_is_landscape,
|
|
|
|
|
initial_orientation_is_default,
|
|
|
|
|
portrait_map = { "0": true, "180": true },
|
|
|
|
|
ww, wh, landscape_threshold;
|
|
|
|
|
|
|
|
|
|
// It seems that some device/browser vendors use window.orientation values 0 and 180 to
|
|
|
|
|
// denote the "default" orientation. For iOS devices, and most other smart-phones tested,
|
|
|
|
|
// the default orientation is always "portrait", but in some Android and RIM based tablets,
|
|
|
|
|
// the default orientation is "landscape". The following code attempts to use the window
|
|
|
|
|
// dimensions to figure out what the current orientation is, and then makes adjustments
|
|
|
|
|
// to the to the portrait_map if necessary, so that we can properly decode the
|
|
|
|
|
// window.orientation value whenever get_orientation() is called.
|
|
|
|
|
//
|
|
|
|
|
// Note that we used to use a media query to figure out what the orientation the browser
|
|
|
|
|
// thinks it is in:
|
|
|
|
|
//
|
|
|
|
|
// initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
|
|
|
|
|
//
|
|
|
|
|
// but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
|
|
|
|
|
// where the browser *ALWAYS* applied the landscape media query. This bug does not
|
|
|
|
|
// happen on iPad.
|
|
|
|
|
|
|
|
|
|
if ( $.support.orientation ) {
|
|
|
|
|
|
|
|
|
|
// Check the window width and height to figure out what the current orientation
|
|
|
|
|
// of the device is at this moment. Note that we've initialized the portrait map
|
|
|
|
|
// values to 0 and 180, *AND* we purposely check for landscape so that if we guess
|
|
|
|
|
// wrong, , we default to the assumption that portrait is the default orientation.
|
|
|
|
|
// We use a threshold check below because on some platforms like iOS, the iPhone
|
|
|
|
|
// form-factor can report a larger width than height if the user turns on the
|
|
|
|
|
// developer console. The actual threshold value is somewhat arbitrary, we just
|
|
|
|
|
// need to make sure it is large enough to exclude the developer console case.
|
|
|
|
|
|
|
|
|
|
ww = window.innerWidth || win.width();
|
|
|
|
|
wh = window.innerHeight || win.height();
|
|
|
|
|
landscape_threshold = 50;
|
|
|
|
|
|
|
|
|
|
initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
|
|
|
|
|
|
|
|
|
|
// Now check to see if the current window.orientation is 0 or 180.
|
|
|
|
|
initial_orientation_is_default = portrait_map[ window.orientation ];
|
|
|
|
|
|
|
|
|
|
// If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
|
|
|
|
|
// if the initial orientation is portrait, but window.orientation reports 90 or -90, we
|
|
|
|
|
// need to flip our portrait_map values because landscape is the default orientation for
|
|
|
|
|
// this device/browser.
|
|
|
|
|
if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
|
|
|
|
|
portrait_map = { "-90": true, "90": true };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, {
|
|
|
|
|
setup: function() {
|
|
|
|
|
// If the event is supported natively, return false so that jQuery
|
|
|
|
|
// will bind to the event using DOM methods.
|
|
|
|
|
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get the current orientation to avoid initial double-triggering.
|
|
|
|
|
last_orientation = get_orientation();
|
|
|
|
|
|
|
|
|
|
// Because the orientationchange event doesn't exist, simulate the
|
|
|
|
|
// event by testing window dimensions on resize.
|
|
|
|
|
win.bind( "throttledresize", handler );
|
|
|
|
|
},
|
|
|
|
|
teardown: function() {
|
|
|
|
|
// If the event is not supported natively, return false so that
|
|
|
|
|
// jQuery will unbind the event using DOM methods.
|
|
|
|
|
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Because the orientationchange event doesn't exist, unbind the
|
|
|
|
|
// resize event handler.
|
|
|
|
|
win.unbind( "throttledresize", handler );
|
|
|
|
|
},
|
|
|
|
|
add: function( handleObj ) {
|
|
|
|
|
// Save a reference to the bound event handler.
|
|
|
|
|
var old_handler = handleObj.handler;
|
|
|
|
|
|
|
|
|
|
handleObj.handler = function( event ) {
|
|
|
|
|
// Modify event object, adding the .orientation property.
|
|
|
|
|
event.orientation = get_orientation();
|
|
|
|
|
|
|
|
|
|
// Call the originally-bound event handler and return its result.
|
|
|
|
|
return old_handler.apply( this, arguments );
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// If the event is not supported natively, this handler will be bound to
|
|
|
|
|
// the window resize event to simulate the orientationchange event.
|
|
|
|
|
function handler() {
|
|
|
|
|
// Get the current orientation.
|
|
|
|
|
var orientation = get_orientation();
|
|
|
|
|
|
|
|
|
|
if ( orientation !== last_orientation ) {
|
|
|
|
|
// The orientation has changed, so trigger the orientationchange event.
|
|
|
|
|
last_orientation = orientation;
|
|
|
|
|
win.trigger( event_name );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get the current page orientation. This method is exposed publicly, should it
|
|
|
|
|
// be needed, as jQuery.event.special.orientationchange.orientation()
|
|
|
|
|
$.event.special.orientationchange.orientation = get_orientation = function() {
|
|
|
|
|
var isPortrait = true, elem = document.documentElement;
|
|
|
|
|
|
|
|
|
|
// prefer window orientation to the calculation based on screensize as
|
|
|
|
|
// the actual screen resize takes place before or after the orientation change event
|
|
|
|
|
// has been fired depending on implementation (eg android 2.3 is before, iphone after).
|
|
|
|
|
// More testing is required to determine if a more reliable method of determining the new screensize
|
|
|
|
|
// is possible when orientationchange is fired. (eg, use media queries + element + opacity)
|
|
|
|
|
if ( $.support.orientation ) {
|
|
|
|
|
// if the window orientation registers as 0 or 180 degrees report
|
|
|
|
|
// portrait, otherwise landscape
|
|
|
|
|
isPortrait = portrait_map[ window.orientation ];
|
|
|
|
|
} else {
|
|
|
|
|
isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return isPortrait ? "portrait" : "landscape";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$.fn[ event_name ] = function( fn ) {
|
|
|
|
|
return fn ? this.bind( event_name, fn ) : this.trigger( event_name );
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// jQuery < 1.8
|
|
|
|
|
if ( $.attrFn ) {
|
|
|
|
|
$.attrFn[ event_name ] = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}( jQuery, this ));
|
|
|
|
|
|
|
|
|
|
(function( $, undefined ) {
|
|
|
|
|
var props = {
|
|
|
|
|
"animation": {},
|
|
|
|
@@ -4500,7 +4307,14 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
TransitionHandler,
|
|
|
|
|
promise;
|
|
|
|
|
|
|
|
|
|
this._triggerCssTransitionEvents( to, from, "before" );
|
|
|
|
|
this._triggerCssTransitionEvents(to, from, "before");
|
|
|
|
|
|
|
|
|
|
if (from) {
|
|
|
|
|
from[0].style.display = 'none';
|
|
|
|
|
}
|
|
|
|
|
to[0].style.display = 'block';
|
|
|
|
|
this._triggerCssTransitionEvents(to, from);
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// TODO put this in a binding to events *outside* the widget
|
|
|
|
|
this._hideLoading();
|
|
|
|
@@ -4710,7 +4524,7 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We need to make sure the page we are given has already been enhanced.
|
|
|
|
|
// We need to make sure the page we are given has already been enhanced.
|
|
|
|
|
toPage.page({ role: settings.role });
|
|
|
|
|
|
|
|
|
|
// If the changePage request was sent from a hashChange event, check to
|
|
|
|
@@ -4786,7 +4600,7 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
// Set the location hash.
|
|
|
|
|
if ( url && !settings.fromHashChange ) {
|
|
|
|
|
|
|
|
|
|
// rebuilding the hash here since we loose it earlier on
|
|
|
|
|
// rebuilding the hash here since we loose it earlier on
|
|
|
|
|
// TODO preserve the originally passed in path
|
|
|
|
|
if ( !$.mobile.path.isPath( url ) && url.indexOf( "#" ) < 0 ) {
|
|
|
|
|
url = "#" + url;
|
|
|
|
@@ -4839,7 +4653,6 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
|
|
|
|
|
this._releaseTransitionLock();
|
|
|
|
|
this._triggerWithDeprecated("transition", triggerData);
|
|
|
|
|
this._triggerWithDeprecated("change", triggerData);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// determine the current base url
|
|
|
|
@@ -5062,35 +4875,23 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
|
|
|
|
|
// TODO ensure that the navigate binding in the content widget happens at the right time
|
|
|
|
|
$.mobile.pageContainer.pagecontainer();
|
|
|
|
|
//set page min-heights to be device specific
|
|
|
|
|
$.mobile.document.bind( "pageshow", function(e) {
|
|
|
|
|
|
|
|
|
|
// We need to wait for window.load to make sure that styles have already been rendered,
|
|
|
|
|
// otherwise heights of external toolbars will have the wrong value
|
|
|
|
|
if ( loadDeferred ) {
|
|
|
|
|
loadDeferred.done( $.mobile.resetActivePageHeight );
|
|
|
|
|
} else {
|
|
|
|
|
$.mobile.resetActivePageHeight();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function removePage(page) {
|
|
|
|
|
|
|
|
|
|
$(page).removeWithDependents();
|
|
|
|
|
|
|
|
|
|
page.parentNode.removeChild(page);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function cleanPages(currentPage) {
|
|
|
|
|
function cleanPages(newPage) {
|
|
|
|
|
|
|
|
|
|
var pages = document.querySelectorAll("div[data-role='page']");
|
|
|
|
|
if (pages.length < 5) {
|
|
|
|
|
return;
|
|
|
|
|
//return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (var i = 0, length = pages.length; i < length; i++) {
|
|
|
|
|
var page = pages[i];
|
|
|
|
|
if (page != currentPage) {
|
|
|
|
|
if (page != newPage) {
|
|
|
|
|
removePage(page);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -5098,16 +4899,13 @@ $.fn.fieldcontain = function(/* options */) {
|
|
|
|
|
//set page min-heights to be device specific
|
|
|
|
|
$.mobile.document.bind("pagehide", function (e,data) {
|
|
|
|
|
|
|
|
|
|
var page = e.target;
|
|
|
|
|
var toPage = data.toPage ? data.toPage[0] : null;
|
|
|
|
|
|
|
|
|
|
//check if this is a same page transition and if so don't remove the page
|
|
|
|
|
if (!data.samePage) {
|
|
|
|
|
cleanPages(page);
|
|
|
|
|
}
|
|
|
|
|
if (toPage && toPage.getAttribute('data-dom-cache')) {
|
|
|
|
|
cleanPages(toPage);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight );
|
|
|
|
|
|
|
|
|
|
};//navreadyDeferred done callback
|
|
|
|
|
|
|
|
|
|
$( function() { domreadyDeferred.resolve(); } );
|
|
|
|
@@ -6809,11 +6607,11 @@ $.widget( "mobile.panel", {
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_bindFixListener: function() {
|
|
|
|
|
this._on( $( window ), { "throttledresize": "_positionPanel" });
|
|
|
|
|
this._on( $( window ), { "resize": "_positionPanel" });
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_unbindFixListener: function() {
|
|
|
|
|
this._off( $( window ), "throttledresize" );
|
|
|
|
|
this._off($(window), "resize");
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_unfixPanel: function() {
|
|
|
|
|