Skip to content
This repository has been archived by the owner on Oct 8, 2021. It is now read-only.

Commit

Permalink
Popup: Performance improvements. Fixes #5958. Found with git bisect.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabriel Schulhof committed May 5, 2013
1 parent d0eb1b9 commit 1d575ba
Showing 1 changed file with 15 additions and 26 deletions.
41 changes: 15 additions & 26 deletions js/widgets/popup.js
Expand Up @@ -206,20 +206,21 @@ define( [
},
thisPage = this.element.closest( ".ui-page" ),
myId = this.element.attr( "id" ),
self = this;
o = this.options,
key, value;

// We need to adjust the history option to be false if there's no AJAX nav.
// We can't do it in the option declarations because those are run before
// it is determined whether there shall be AJAX nav.
this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled;
o.history = o.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled;

if ( thisPage.length === 0 ) {
thisPage = $( "body" );
}

// define the container for navigation event bindings
// TODO this would be nice at the the mobile widget level
this.options.container = this.options.container || $.mobile.pageContainer;
o.container = o.container || $.mobile.pageContainer || thisPage;

// Apply the proto
thisPage.append( ui.screen );
Expand Down Expand Up @@ -253,12 +254,15 @@ define( [
_orientationchangeInProgress: false
});

$.each( this.options, function( key, value ) {
// Cause initial options to be applied by their handler by temporarily setting the option to undefined
// - the handler then sets it to the initial value
self.options[ key ] = undefined;
self._setOption( key, value, true );
});
// This duplicates the code from the various option setters below for
// better performance. It must be kept in sync with those setters.
this._applyTheme( this.element, o.theme, "body" );
this._applyTheme( this._ui.screen, o.overlayTheme, "overlay" );
this._applyTransition( o.transition );
this.element
.toggleClass( "ui-overlay-shadow", o.shadow )
.toggleClass( "ui-corner-all", o.corners );
this._setTolerance( o.tolerance );

ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) );

Expand Down Expand Up @@ -386,28 +390,13 @@ define( [
},

_setOption: function( key, value ) {
var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );
var setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 );

if ( this[ setter ] !== undefined ) {
this[ setter ]( value );
}

// TODO REMOVE FOR 1.2.1 by moving them out to a default options object
exclusions = [
"initSelector",
"closeLinkSelector",
"closeLinkEvents",
"navigateEvents",
"closeEvents",
"history",
"container"
];

$.mobile.widget.prototype._setOption.apply( this, arguments );
if ( $.inArray( key, exclusions ) === -1 ) {
// Record the option change in the options and in the DOM data-* attributes
this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value );
}
this._super( key, value );
},

// Try and center the overlay over the given coordinates
Expand Down

0 comments on commit 1d575ba

Please sign in to comment.