" ).parent();
$.each(copyAttrs,function(i){
if( newPage.attr( copyAttrs[ i ] ) ){
wrapper.attr( copyAttrs[ i ], newPage.attr( copyAttrs[ i ] ) );
newPage.removeAttr( copyAttrs[ i ] );
}
});
return wrapper;
}
if ( url ) {
// see if content is present already
var localDiv = jQuery( "[id='" + url + "']" );
if ( localDiv.length ) {
if ( localDiv.is( "[data-role]" ) ) {
setPageRole( localDiv );
}
setBaseURL();
localDiv.page();
changePage( jQuery( ".ui-page-active" ), localDiv, transition, back );
} else { //ajax it in
pageLoading();
if(url.match( '&' + jQuery.mobile.subPageUrlKey )){
fileUrl = url.split( '&' + jQuery.mobile.subPageUrlKey )[0];
}
var newPage = jQuery( "
" )
.appendTo( $body )
.load( fileUrl + ' [data-role="page"]', function() {
// TODO: test this (avoids querying the dom for new element):
// var newPage = jQuery( this ).find( ".ui-page" ).eq( 0 )
// .attr( "id", url );
// jQuery( this ).replaceWith( newPage );
// setPageRole( newPage );
// newPage.page();
// changePage( jQuery( ".ui-page-active" ), newPage, transition, back );
//find new page div
var newPage = jQuery( this ).find( '[data-role="page"]' ).eq( 0 );
if( newPage.attr('id') ){
newPage = wrapNewPage( newPage );
}
jQuery( this ).replaceWith( newPage.attr( "id", fileUrl ) );
var newPage = jQuery( "[id='" + fileUrl + "']" );
setPageRole( newPage );
newPage.page();
newPage = jQuery( "[id='" + url + "']" );
changePage( jQuery( ".ui-page-active" ), newPage, transition, back );
});
setBaseURL();
}
} else {
// either we've backed up to the root page url
// or it's the first page load with no hash present
var currentPage = jQuery( ".ui-page-active" );
if ( currentPage.length && !startPage.is( ".ui-page-active" ) ) {
changePage( currentPage, startPage, transition, back );
} else {
startPage.trigger("beforepageshow", {prevPage: $('')});
startPage.addClass( activePageClass );
//FIXME: when there's no prevPage, is passing an empty jQuery obj proper style?
startPage.trigger("pageshow", {prevPage: $('')});
pageLoading( true );
}
}
});
});
//add orientation class on flip/resize.
$window.bind( "orientationchange", function( event, data ) {
$html.removeClass( "portrait landscape" ).addClass( data.orientation );
});
//add mobile, loading classes to doc
$html.addClass('ui-mobile');
//insert mobile meta - these will need to be configurable somehow.
$head.prepend(
'
' +
'
'
);
//set base href to pathname
resetBaseURL();
//potential (probably incomplete) fallback to workaround lack of animation callbacks.
//should this be extended into a full special event?
// note: Expects CSS animations use transitionDuration (350ms)
jQuery.fn.animationComplete = function(callback){
if(jQuery.support.WebKitAnimationEvent){
return jQuery(this).one('webkitAnimationEnd', callback); //check out transitionEnd (opera per Paul's request)
}
else{
setTimeout(callback, transitionDuration);
}
};
jQuery.extend({
pageLoading: pageLoading,
changePage: changePage,
hideBrowserChrome: hideBrowserChrome
});
//dom-ready
jQuery(function(){
//set up active page
startPage = jQuery('[data-role="page"]:first');
//make sure it has an ID - for finding it later
if(!startPage.attr('id')){
startPage.attr('id', startPageId);
}
//initialize all pages present
jQuery('[data-role="page"]').page();
//trigger a new hashchange, hash or not
$window.trigger( "hashchange", { manuallyTriggered: true } );
//update orientation
$html.addClass( jQuery.event.special.orientationchange.orientation( $window ) );
//some debug stuff for the events pages
jQuery('body').bind('scrollstart scrollstop swipe swipeleft swiperight tap taphold turn',function(e){
jQuery('#eventlogger').prepend('
Event fired: '+ e.type +'
');
});
});
$window.load(hideBrowserChrome);
})( jQuery, this );