// Script: jQuery hashchange event
-//
+//
// *Version: 1.3, Last updated: 7/21/2010*
-//
+//
// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
// GitHub - http://github.com/cowboy/jquery-hashchange/
// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped)
-//
+//
// About: License
-//
+//
// Copyright (c) 2010 "Cowboy" Ben Alman,
// Dual licensed under the MIT and GPL licenses.
// http://benalman.com/about/license/
-//
+//
// About: Examples
-//
+//
// These working examples, complete with fully commented code, illustrate a few
// ways in which this plugin can be used.
-//
+//
// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
-//
+//
// About: Support and Testing
-//
+//
// Information about what version or versions of jQuery this plugin has been
// tested with, what browsers it has been tested in, and where the unit tests
// reside (so you can test it yourself).
-//
+//
// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2
// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/
-//
+//
// About: Known issues
-//
+//
// While this jQuery hashchange event implementation is quite stable and
// robust, there are a few unfortunate browser bugs surrounding expected
// hashchange event-based behaviors, independent of any JavaScript
// window.onhashchange abstraction. See the following examples for more
// information:
-//
+//
// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
-//
-// Also note that should a browser natively support the window.onhashchange
+//
+// Also note that should a browser natively support the window.onhashchange
// event, but not report that it does, the fallback polling loop will be used.
-//
+//
// About: Release History
-//
+//
// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
// "removable" for mobile-only development. Added IE6/7 document.title
// support. Attempted to make Iframe as hidden as possible by using
-// techniques from http://www.paciellogroup.com/blog/?p=604. Added
+// techniques from http://www.paciellogroup.com/blog/?p=604. Added
// support for the "shortcut" format $(window).hashchange( fn ) and
// $(window).hashchange() like jQuery provides for built-in events.
// Renamed jQuery.hashchangeDelay to <jQuery.fn.hashchange.delay> and
(function($,window,undefined){
// Reused string.
var str_hashchange = 'hashchange',
-
+
// Method / object references.
doc = document,
fake_onhashchange,
special = $.event.special,
-
+
// Does the browser support window.onhashchange? Note that IE8 running in
// IE7 compatibility mode reports true for 'onhashchange' in window, even
// though the event isn't supported, so also test document.documentMode.
doc_mode = doc.documentMode,
supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
-
+
// Get location.hash (or what you'd expect location.hash to be) sans any
// leading #. Thanks for making this necessary, Firefox!
function get_fragment( url ) {
url = url || location.href;
return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
};
-
+
// Method: jQuery.fn.hashchange
- //
+ //
// Bind a handler to the window.onhashchange event or trigger all bound
// window.onhashchange event handlers. This behavior is consistent with
// jQuery's built-in event handlers.
- //
+ //
// Usage:
- //
+ //
// > jQuery(window).hashchange( [ handler ] );
- //
+ //
// Arguments:
- //
+ //
// handler - (Function) Optional handler to be bound to the hashchange
// event. This is a "shortcut" for the more verbose form:
// jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
// is a shortcut for the more verbose
// jQuery(window).trigger( 'hashchange' ). These forms are described in
// the <hashchange event> section.
- //
+ //
// Returns:
- //
+ //
// (jQuery) The initial jQuery collection of elements.
-
+
// Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
// $(elem).hashchange() for triggering, like jQuery does for built-in events.
$.fn[ str_hashchange ] = function( fn ) {
return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
};
-
+
// Property: jQuery.fn.hashchange.delay
- //
+ //
// The numeric interval (in milliseconds) at which the <hashchange event>
// polling loop executes. Defaults to 50.
-
+
// Property: jQuery.fn.hashchange.domain
- //
+ //
// If you're setting document.domain in your JavaScript, and you want hash
// history to work in IE6/7, not only must this property be set, but you must
// also set document.domain BEFORE jQuery is loaded into the page. This
// property is only applicable if you are supporting IE6/7 (or IE8 operating
// in "IE7 compatibility" mode).
- //
+ //
// In addition, the <jQuery.fn.hashchange.src> property must be set to the
// path of the included "document-domain.html" file, which can be renamed or
// modified if necessary (note that the document.domain specified must be the
// same in both your main JavaScript as well as in this file).
- //
+ //
// Usage:
- //
+ //
// jQuery.fn.hashchange.domain = document.domain;
-
+
// Property: jQuery.fn.hashchange.src
- //
+ //
// If, for some reason, you need to specify an Iframe src file (for example,
// when setting document.domain as in <jQuery.fn.hashchange.domain>), you can
// do so using this property. Note that when using this property, history
// won't be recorded in IE6/7 until the Iframe src file loads. This property
// is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
// compatibility" mode).
- //
+ //
// Usage:
- //
+ //
// jQuery.fn.hashchange.src = 'path/to/file.html';
-
+
$.fn[ str_hashchange ].delay = 50;
/*
$.fn[ str_hashchange ].domain = null;
$.fn[ str_hashchange ].src = null;
*/
-
+
// Event: hashchange event
- //
+ //
// Fired when location.hash changes. In browsers that support it, the native
// HTML5 window.onhashchange event is used, otherwise a polling loop is
// initialized, running every <jQuery.fn.hashchange.delay> milliseconds to
// see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
// compatibility" mode), a hidden Iframe is created to allow the back button
// and hash-based history to work.
- //
+ //
// Usage as described in <jQuery.fn.hashchange>:
- //
+ //
// > // Bind an event handler.
// > jQuery(window).hashchange( function(e) {
// > var hash = location.hash;
// > ...
// > });
- // >
+ // >
// > // Manually trigger the event handler.
// > jQuery(window).hashchange();
- //
+ //
// A more verbose usage that allows for event namespacing:
- //
+ //
// > // Bind an event handler.
// > jQuery(window).bind( 'hashchange', function(e) {
// > var hash = location.hash;
// > ...
// > });
- // >
+ // >
// > // Manually trigger the event handler.
// > jQuery(window).trigger( 'hashchange' );
- //
+ //
// Additional Notes:
- //
+ //
// * The polling loop and Iframe are not created until at least one handler
// is actually bound to the 'hashchange' event.
// * If you need the bound handler(s) to execute immediately, in cases where
// a location.hash exists on page load, via bookmark or page refresh for
- // example, use jQuery(window).hashchange() or the more verbose
+ // example, use jQuery(window).hashchange() or the more verbose
// jQuery(window).trigger( 'hashchange' ).
// * The event can be bound before DOM ready, but since it won't be usable
// before then in IE6/7 (due to the necessary Iframe), recommended usage is
// to bind it inside a DOM ready handler.
-
+
// Override existing $.event.special.hashchange methods (allowing this plugin
// to be defined after jQuery BBQ in BBQ's source code).
special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
-
+
// Called only when the first 'hashchange' event is bound to window.
setup: function() {
// If window.onhashchange is supported natively, there's nothing to do..
if ( supports_onhashchange ) { return false; }
-
+
// Otherwise, we need to create our own. And we don't want to call this
// until the user binds to the event, just in case they never do, since it
// will create a polling loop and possibly even a hidden Iframe.
$( fake_onhashchange.start );
},
-
+
// Called only when the last 'hashchange' event is unbound from window.
teardown: function() {
// If window.onhashchange is supported natively, there's nothing to do..
if ( supports_onhashchange ) { return false; }
-
+
// Otherwise, we need to stop ours (if possible).
$( fake_onhashchange.stop );
}
-
+
});
-
+
// fake_onhashchange does all the work of triggering the window.onhashchange
// event for browsers that don't natively support it, including creating a
// polling loop to watch for hash changes and in IE 6/7 creating a hidden
fake_onhashchange = (function(){
var self = {},
timeout_id,
-
+
// Remember the initial hash so it doesn't get triggered immediately.
last_hash = get_fragment(),
-
+
fn_retval = function(val){ return val; },
history_set = fn_retval,
history_get = fn_retval;
-
+
// Start the polling loop.
self.start = function() {
timeout_id || poll();
};
-
+
// Stop the polling loop.
self.stop = function() {
timeout_id && clearTimeout( timeout_id );
timeout_id = undefined;
};
-
+
// This polling loop checks every $.fn.hashchange.delay milliseconds to see
// if location.hash has changed, and triggers the 'hashchange' event on
// window when necessary.
function poll() {
var hash = get_fragment(),
history_hash = history_get( last_hash );
-
+
if ( hash !== last_hash ) {
history_set( last_hash = hash, history_hash );
-
+
$(window).trigger( str_hashchange );
-
+
} else if ( history_hash !== last_hash ) {
location.href = location.href.replace( /#.*/, '' ) + history_hash;
}
-
+
timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
};
-
+
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
$.browser.msie && !supports_onhashchange && (function(){
// Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
// when running in "IE7 compatibility" mode.
-
+
var iframe,
iframe_src;
-
+
// When the event is bound and polling starts in IE 6/7, create a hidden
// Iframe for history handling.
self.start = function(){
if ( !iframe ) {
iframe_src = $.fn[ str_hashchange ].src;
iframe_src = iframe_src && iframe_src + get_fragment();
-
+
// Create hidden Iframe. Attempt to make Iframe as hidden as possible
// by using techniques from http://www.paciellogroup.com/blog/?p=604.
iframe = $('<iframe tabindex="-1" title="empty"/>').hide()
-
+
// When Iframe has completely loaded, initialize the history and
// start polling.
.one( 'load', function(){
iframe_src || history_set( get_fragment() );
poll();
})
-
+
// Load Iframe src if specified, otherwise nothing.
.attr( 'src', iframe_src || 'javascript:0' )
-
+
// Append Iframe after the end of the body to prevent unnecessary
// initial page scrolling (yes, this works).
.insertAfter( 'body' )[0].contentWindow;
-
+
// Whenever `document.title` changes, update the Iframe's title to
// prettify the back/next history menu entries. Since IE sometimes
// errors with "Unspecified error" the very first time this is set
}
} catch(e) {}
};
-
+
}
};
-
+
// Override the "stop" method since an IE6/7 Iframe was created. Even
// if there are no longer any bound event handlers, the polling loop
// is still necessary for back/next to work at all!
self.stop = fn_retval;
-
+
// Get history by looking at the hidden Iframe's location.hash.
history_get = function() {
return get_fragment( iframe.location.href );
};
-
+
// Set a new history item by opening and then closing the Iframe
// document, *then* setting its location.hash. If document.domain has
// been set, update that as well.
history_set = function( hash, history_hash ) {
var iframe_doc = iframe.document,
domain = $.fn[ str_hashchange ].domain;
-
+
if ( hash !== history_hash ) {
// Update Iframe with any initial `document.title` that might be set.
iframe_doc.title = doc.title;
-
+
// Opening the Iframe's document after it has been closed is what
// actually adds a history entry.
iframe_doc.open();
-
+
// Set document.domain for the Iframe document as well, if necessary.
domain && iframe_doc.write( '<script>document.domain="' + domain + '"</script>' );
-
+
iframe_doc.close();
-
+
// Update the Iframe's hash, for great justice.
iframe.location.hash = hash;
}
};
-
+
})();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
+
return self;
})();
-
+
})(jQuery,this);
/*!
var vend_prop = vend_pref( vend ) + prop + ": " + value + ";",
uc_vend = uc( vend ),
propStyle = uc_vend + uc( prop );
-
+
div.setAttribute( "style", vend_prop );
-
+
if( !!div.style[ propStyle ] ) {
ret = true;
}
},
_create: function() {
-
+
var self = this;
-
+
// if false is returned by the callbacks do not create the page
if( self._trigger( "beforecreate" ) === false ){
return false;
} );
},
-
+
removeContainerBackground: function(){
$.mobile.pageContainer.removeClass( "ui-overlay-" + $.mobile.getInheritedTheme( this.element.parent() ) );
},
-
+
// set the page container background to the page theme
setContainerBackground: function( theme ){
if( this.options.theme ){
(function( $, window, undefined ) {
var createHandler = function( sequential ){
-
+
// Default to sequential
if( sequential === undefined ){
sequential = true;
}
-
+
return function( name, reverse, $to, $from ) {
var deferred = new $.Deferred(),
// By using scrollTo instead of silentScroll, we can keep things better in order
// Just to be precautios, disable scrollstart listening like silentScroll would
$.event.special.scrollstart.enabled = false;
-
+
window.scrollTo( 0, toScroll );
-
+
// reenable scrollstart listening like silentScroll would
setTimeout(function() {
$.event.special.scrollstart.enabled = true;
doneOut();
}
else {
- $from.animationComplete( doneOut );
+ $from.animationComplete( doneOut );
}
-
+
// Set the from page's height and start it transitioning out
// Note: setting an explicit height helps eliminate tiling in the transitions
$from
.height( screenHeight + $(window ).scrollTop() )
.addClass( name + " out" + reverseClass );
},
-
+
doneOut = function() {
if ( $from && sequential ) {
cleanFrom();
}
-
+
startIn();
},
-
- startIn = function(){
-
- $to.addClass( $.mobile.activePageClass );
-
+
+ startIn = function(){
+
+ $to.addClass( $.mobile.activePageClass );
+
// Send focus to page as it is now display: block
$.mobile.focusPage( $to );
// Set to page height
$to.height( screenHeight + toScroll );
-
+
scrollPage();
-
+
if( !none ){
$to.animationComplete( doneIn );
}
-
+
$to.addClass( name + " in" + reverseClass );
-
+
if( none ){
doneIn();
}
-
+
},
-
+
doneIn = function() {
-
+
if ( !sequential ) {
-
+
if( $from ){
cleanFrom();
}
}
-
+
$to
.removeClass( "out in reverse " + name )
.height( "" );
-
+
toggleViewportClass();
-
+
// In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition
// This ensures we jump to that spot after the fact, if we aren't there already.
if( $( window ).scrollTop() !== toScroll ){
};
toggleViewportClass();
-
+
if ( $from && !none ) {
startOut();
}
// because the recording of the scroll position is delayed for 100ms after
// the browser might have changed the position because of the hashchange
$window.bind( $.support.pushState ? "popstate" : "hashchange", function() {
- setLastScrollEnabled = false;
+ setLastScrollEnabled = false;
});
// handle initial hashchange from chrome :(
// once the page has changed, re-enable the scroll recording
$.mobile.pageContainer.bind( "pagechange", function() {
- setLastScrollEnabled = true;
+ setLastScrollEnabled = true;
// remove any binding that previously existed on the get scroll
// which may or may not be different than the scroll element determined for
//clear page loader
$.mobile.hidePageLoadingMsg();
-
+
// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified
if( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ){
transition = $.mobile.transitionFallbacks[ transition ];
}
-
+
//find the transition handler for the specified transition. If there
//isn't one in our transitionHandlers dictionary, use the default one.
//call the handler immediately to kick-off the transition.
//simply set the active page's minimum height to screen height, depending on orientation
function getScreenHeight(){
- // Native innerHeight returns more accurate value for this across platforms,
+ // Native innerHeight returns more accurate value for this across platforms,
// jQuery version is here as a normalized fallback for platforms like Symbian
return window.innerHeight || $( window ).height();
}
var aPage = $( "." + $.mobile.activePageClass ),
aPagePadT = parseFloat( aPage.css( "padding-top" ) ),
aPagePadB = parseFloat( aPage.css( "padding-bottom" ) );
-
+
aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB );
}
page = settings.pageContainer.children( "#" + dataUrl )
.attr( "data-" + $.mobile.ns + "url", dataUrl );
}
-
+
// If we failed to find a page in the DOM, check the URL to see if it
// refers to the first page in the application. If it isn't a reference
// to the first page and refers to non-existent embedded page, error out.
pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ),
dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" );
-
+
// data-url must be provided for the base tag so resource requests can be directed to the
// correct url. loading into a temprorary element makes these requests immediately
if( pageElemRegex.test( html )
// base URL, and then prepends with the new page URL.
//if full path exists and is same, chop it - helps IE out
thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' );
-
+
if( !/^(\w+:|#|\/)/.test( thisUrl ) ) {
$( this ).attr( thisAttr, newPath + thisUrl );
}
});
$el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme );
-
+
// Class the markup for dialog styling
// Set aria role
$el
$( document ).bind( "pagecreate create", function( e ){
$( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" );
-
+
});
})( jQuery );
if ( attachEvents && !buttonElements) {
attachEvents();
}
-
- // if not, try to find closest theme container
+
+ // if not, try to find closest theme container
if ( !o.theme ) {
- o.theme = $.mobile.getInheritedTheme( el, "c" );
- }
+ o.theme = $.mobile.getInheritedTheme( el, "c" );
+ }
buttonClass = "ui-btn ui-btn-up-" + o.theme;
buttonClass += o.inline ? " ui-btn-inline" : "";
// Used to control styling in headers/footers, where buttons default to `mini` style.
buttonClass += o.mini ? " ui-mini" : " ui-fullsize";
}
-
- if ( o.inline !== undefined ) {
+
+ if ( o.inline !== undefined ) {
// Used to control styling in headers/footers, where buttons default to `mini` style.
buttonClass += o.inline === false ? " ui-btn-block" : " ui-btn-inline";
}
-
-
+
+
if ( o.icon ) {
o.icon = "ui-icon-" + o.icon;
o.iconpos = o.iconpos || "left";
el.attr( "title", el.getEncodedText() );
}
}
-
+
innerClass += o.corners ? " ui-btn-corner-all" : "";
if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) {
var theme,
$btn = $( closestEnabledButton( event.target ) ),
evt = event.type;
-
+
if ( $btn.length ) {
theme = $btn.attr( "data-" + $.mobile.ns + "theme" );
-
+
if ( evt === "vmousedown" ) {
if ( $.support.touch ) {
hov = setTimeout(function() {
_create: function() {
var t = this,
listviewClasses = "";
-
+
listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : "";
listviewClasses += t.element.jqmData( "mini" ) || t.options.mini === true ? " ui-mini" : "";
-
+
// create listview markup
t.element.addClass(function( i, orig ) {
return orig + " ui-listview " + listviewClasses;
// if this is a link, check if it's been enhanced and, if not, use the right function
if( $el[ 0 ].tagName === "A" ) {
- !$el.hasClass( "ui-btn" ) && $el.buttonMarkup();
- return;
- }
+ !$el.hasClass( "ui-btn" ) && $el.buttonMarkup();
+ return;
+ }
// get the inherited theme
// TODO centralize for all widgets
disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no",
enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes",
disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent );
-
+
$.mobile.zoom = $.extend( {}, {
enabled: !disabledInitially,
locked: false,
disable: function( lock ) {
if( !disabledInitially && !$.mobile.zoom.locked ){
- meta.attr( "content", disabledZoom );
- $.mobile.zoom.enabled = false;
+ meta.attr( "content", disabledZoom );
+ $.mobile.zoom.enabled = false;
$.mobile.zoom.locked = lock || false;
}
},
enable: function( unlock ) {
if( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ){
- meta.attr( "content", enabledZoom );
- $.mobile.zoom.enabled = true;
+ meta.attr( "content", enabledZoom );
+ $.mobile.zoom.enabled = true;
$.mobile.zoom.locked = false;
}
},
restore: function() {
if( !disabledInitially ){
- meta.attr( "content", initialContent );
- $.mobile.zoom.enabled = true;
+ meta.attr( "content", initialContent );
+ $.mobile.zoom.enabled = true;
}
}
});
if( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) {
classes = " ui-btn-left";
}
-
+
if( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) {
classes = " ui-btn-right";
}
-
+
this.select = this.element.wrap( "<div class='ui-select" + classes + "'>" );
this.selectID = this.select.attr( "id" );
this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" );
_create: function() {
this._preExtension();
- // Allows for extension of the native select for custom selects and other plugins
+ // Allows for extension of the native select for custom selects and other plugins
// see select.custom for example extension
// TODO explore plugin registration
this._trigger( "beforeCreate" );
self.updatePagePadding();
if( o.updatePagePadding ){
$( window ).bind( "throttledresize." + self.widgetName, function(){
- self.updatePagePadding();
+ self.updatePagePadding();
});
}
})
$el.closest( ".ui-page" ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() );
},
-
+
_useTransition: function( notransition ){
var $win = $( window ),
$el = this.element,
pHeight = $el.closest( ".ui-page" ).height(),
viewportHeight = $.mobile.getScreenHeight(),
tbtype = $el.is( ":jqmData(role='header')" ) ? "header" : "footer";
-
+
return !notransition &&
( this.options.transition && this.options.transition !== "none" &&
(
//auto self-init widgets
$( document )
.bind( "pagecreate create", function( e ){
-
+
// DEPRECATED in 1.1: support for data-fullscreen=true|false on the page element.
// This line ensures it still works, but we recommend moving the attribute to the toolbars themselves.
if( $( e.target ).jqmData( "fullscreen" ) ){
$( $.mobile.fixedtoolbar.prototype.options.initSelector, e.target ).not( ":jqmData(fullscreen)" ).jqmData( "fullscreen", true );
}
-
+
$.mobile.fixedtoolbar.prototype.enhanceWithin( e.target );
});
})( jQuery );
( function( $, window ) {
-
+
// This fix addresses an iOS bug, so return early if the UA claims it's something else.
if( !(/iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ){
return;
}
-
+
var zoom = $.mobile.zoom,
evt, x, y, z, aig;
-
+
function checkTilt( e ){
evt = e.originalEvent;
aig = evt.accelerationIncludingGravity;
-
+
x = Math.abs( aig.x );
y = Math.abs( aig.y );
z = Math.abs( aig.z );
-
+
// If portrait orientation and in one of the danger zones
if( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){
if( zoom.enabled ){
zoom.disable();
- }
+ }
}
else if( !zoom.enabled ){
zoom.enable();
$head = $( "head" ),
$window = $( window );
- // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
+ // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
$( window.document ).trigger( "mobileinit" );
// support conditions