Customizer: Add loading indicators for the Customizer preview.

props Fab1en, westonruter.
fixes #31196.

git-svn-id: https://develop.svn.wordpress.org/trunk@31697 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Dominik Schilling (ocean90) 2015-03-10 15:55:28 +00:00
parent 3bb3d2f1a5
commit 557ecd19c6
4 changed files with 56 additions and 3 deletions

View File

@ -1352,6 +1352,16 @@ body.full-overlay-active {
height: 100%;
}
#customize-preview.wp-full-overlay-main {
background: url(../images/spinner.gif) no-repeat center center;
-webkit-background-size: 20px 20px;
background-size: 20px 20px;
}
#customize-preview.wp-full-overlay-main.iframe-ready {
background: none;
}
.wp-full-overlay-sidebar .wp-full-overlay-header {
position: absolute;
left: 0;
@ -1710,6 +1720,7 @@ body.full-overlay-active {
background-size: 15px 123px;
}
#customize-preview.wp-full-overlay-main,
.customize-loading #customize-container,
.theme-install-overlay .wp-full-overlay-main {
background-image: url(../images/spinner-2x.gif);

View File

@ -1914,6 +1914,9 @@
this.bind( 'ready', this._ready );
this.bind( 'ready', function ( data ) {
this.container.addClass( 'iframe-ready' );
if ( ! data ) {
return;
}
@ -2217,6 +2220,9 @@
refresh: function() {
var self = this;
// Display loading indicator
this.send( 'loading-initiated' );
this.abort();
this.loading = new api.PreviewFrame({
@ -2249,8 +2255,10 @@
});
this.loading.fail( function( reason, location ) {
if ( 'redirect' === reason && location )
self.send( 'loading-failed' );
if ( 'redirect' === reason && location ) {
self.previewUrl( location );
}
if ( 'logged out' === reason ) {
if ( self.preview ) {
@ -2261,8 +2269,9 @@
self.login().done( self.refresh );
}
if ( 'cheatin' === reason )
if ( 'cheatin' === reason ) {
self.cheatin();
}
});
},

View File

@ -501,6 +501,7 @@ final class WP_Customize_Manager {
add_action( 'wp', array( $this, 'customize_preview_override_404_status' ) );
add_action( 'wp_head', array( $this, 'customize_preview_base' ) );
add_action( 'wp_head', array( $this, 'customize_preview_html5' ) );
add_action( 'wp_head', array( $this, 'customize_preview_loading_style' ) );
add_action( 'wp_footer', array( $this, 'customize_preview_settings' ), 20 );
add_action( 'shutdown', array( $this, 'customize_preview_signature' ), 1000 );
add_filter( 'wp_die_handler', array( $this, 'remove_preview_signature' ) );
@ -543,7 +544,7 @@ final class WP_Customize_Manager {
}
/**
* Print a workaround to handle HTML5 tags in IE < 9
* Print a workaround to handle HTML5 tags in IE < 9.
*
* @since 3.4.0
*/
@ -560,6 +561,25 @@ final class WP_Customize_Manager {
<![endif]--><?php
}
/**
* Print CSS for loading indicators for the Customizer preview.
*
* @since 4.2.0
*/
public function customize_preview_loading_style() {
?><style>
body.wp-customizer-unloading {
opacity: 0.25;
cursor: progress !important;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
}
body.wp-customizer-unloading * {
pointer-events: none !important;
}
</style><?php
}
/**
* Print JavaScript settings for preview frame.
*
@ -572,6 +592,9 @@ final class WP_Customize_Manager {
'activePanels' => array(),
'activeSections' => array(),
'activeControls' => array(),
'l10n' => array(
'loading' => __( 'Loading ...' ),
),
);
if ( 2 == $this->nonce_tick ) {

View File

@ -115,6 +115,16 @@
activeControls: api.settings.activeControls
} );
// Display a loading indicator when preview is reloading, and remove on failure.
api.preview.bind( 'loading-initiated', function () {
$( 'body' ).addClass( 'wp-customizer-unloading' );
$( 'html' ).prop( 'title', api.settings.l10n.loading );
});
api.preview.bind( 'loading-failed', function () {
$( 'body' ).removeClass( 'wp-customizer-unloading' );
$( 'html' ).prop( 'title', '' );
});
/* Custom Backgrounds */
bg = $.map(['color', 'image', 'position_x', 'repeat', 'attachment'], function( prop ) {
return 'background_' + prop;