WordPress.org

Make WordPress Core

Ticket #28542: 28542.diff

File 28542.diff, 6.5 KB (added by westonruter, 5 years ago)

Use different document titles for Live Preview vs base Customizer; update when preview URL changes. Clean up formatting, supplying braces. Commits also pushed to GitHub: https://github.com/x-team/wordpress-develop/pull/17

  • src/wp-admin/customize.php

    diff --git src/wp-admin/customize.php src/wp-admin/customize.php
    index 1faf371..0c2a52e 100644
    endif; 
    6868
    6969$is_ios = wp_is_mobile() && preg_match( '/iPad|iPod|iPhone/', $_SERVER['HTTP_USER_AGENT'] );
    7070
    71 if ( $is_ios )
     71if ( $is_ios ) {
    7272        $body_class .= ' ios';
     73}
    7374
    74 if ( is_rtl() )
    75         $body_class .=  ' rtl';
     75if ( is_rtl() ) {
     76        $body_class .= ' rtl';
     77}
    7678$body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) );
    7779
    78 $admin_title = sprintf( __( '%1$s — WordPress' ), strip_tags( sprintf( __( 'Customize %s' ), $wp_customize->theme()->display('Name') ) ) );
     80if ( $wp_customize->is_theme_active() ) {
     81        $document_title_tmpl = _x( 'Customize: {{title}} — WordPress', '{{title}} is for JS template' );
     82} else {
     83        $document_title_tmpl = sprintf(
     84                _x( 'Live Preview %s: {{title}} — WordPress', '%s is theme name, {{title}} is for JS template' ),
     85                strip_tags( $wp_customize->theme()->display( 'Name' ) )
     86        );
     87}
     88$document_title_tmpl = html_entity_decode( $document_title_tmpl, ENT_QUOTES, 'UTF-8' );
     89$admin_title = str_replace( '{{title}}', __( 'Loading…' ), $document_title_tmpl );
     90
    7991?><title><?php echo $admin_title; ?></title>
    8092
    8193<script type="text/javascript">
    do_action( 'customize_controls_print_scripts' ); 
    230242                        'save'    => wp_create_nonce( 'save-customize_' . $wp_customize->get_stylesheet() ),
    231243                        'preview' => wp_create_nonce( 'preview-customize_' . $wp_customize->get_stylesheet() )
    232244                ),
     245                'documentTitleTmpl' => $document_title_tmpl,
    233246        );
    234247
    235248        // Prepare Customize Setting objects to pass to Javascript.
  • src/wp-admin/js/customize-controls.js

    diff --git src/wp-admin/js/customize-controls.js src/wp-admin/js/customize-controls.js
    index 4bfc252..c73b2a6 100644
     
    685685                };
    686686        }());
    687687
     688        /**
     689         * Set the document title of the customizer
     690         *
     691         * @param title
     692         */
     693        api.setDocumentTitle = function ( documentTitle ) {
     694                var tmpl, title;
     695                tmpl = api.settings.documentTitleTmpl;
     696                title = tmpl.replace( '{{title}}', documentTitle );
     697                document.title = title;
     698                if ( window !== window.parent ) {
     699                        window.parent.document.title = document.title;
     700                }
     701        };
     702
    688703        api.Previewer = api.Messenger.extend({
    689704                refreshBuffer: 250,
    690705
     
    794809
    795810                        // Update the URL when the iframe sends a URL message.
    796811                        this.bind( 'url', this.previewUrl );
     812
     813                        // Update the document title when the preview changes
     814                        this.bind( 'documentTitle', function ( title ) {
     815                                api.setDocumentTitle( title );
     816                        } );
    797817                },
    798818
    799819                query: function() {},
  • src/wp-includes/js/customize-loader.js

    diff --git src/wp-includes/js/customize-loader.js src/wp-includes/js/customize-loader.js
    index cccf71a..8f84659 100644
    window.wp = window.wp || {}; 
    3636                        });
    3737
    3838                        // Add navigation listeners.
    39                         if ( $.support.history )
     39                        if ( $.support.history ) {
    4040                                this.window.on( 'popstate', Loader.popstate );
     41                        }
    4142
    4243                        if ( $.support.hashchange ) {
    4344                                this.window.on( 'hashchange', Loader.hashchange );
    window.wp = window.wp || {}; 
    4748
    4849                popstate: function( e ) {
    4950                        var state = e.originalEvent.state;
    50                         if ( state && state.customize )
     51                        if ( state && state.customize ) {
    5152                                Loader.open( state.customize );
    52                         else if ( Loader.active )
     53                        } else if ( Loader.active ) {
    5354                                Loader.close();
     55                        }
    5456                },
    5557
    5658                hashchange: function() {
    5759                        var hash = window.location.toString().split('#')[1];
    5860
    59                         if ( hash && 0 === hash.indexOf( 'wp_customize=on' ) )
     61                        if ( hash && 0 === hash.indexOf( 'wp_customize=on' ) ) {
    6062                                Loader.open( Loader.settings.url + '?' + hash );
     63                        }
    6164
    62                         if ( ! hash && ! $.support.history )
     65                        if ( ! hash && ! $.support.history ) {
    6366                                Loader.close();
     67                        }
    6468                },
    6569
    6670                open: function( src ) {
    6771                        var hash;
    6872
    69                         if ( this.active )
     73                        if ( this.active ) {
    7074                                return;
     75                        }
    7176
    7277                        // Load the full page on mobile devices.
    73                         if ( Loader.settings.browser.mobile )
     78                        if ( Loader.settings.browser.mobile ) {
    7479                                return window.location = src;
     80                        }
     81
     82                        // Store the document title prior to opening the Live Preview
     83                        this.originalDocumentTitle = document.title;
    7584
    7685                        this.active = true;
    7786                        this.body.addClass('customize-loading');
    window.wp = window.wp || {}; 
    92101                        });
    93102
    94103                        this.messenger.bind( 'close', function() {
    95                                 if ( $.support.history )
     104                                if ( $.support.history ) {
    96105                                        history.back();
    97                                 else if ( $.support.hashchange )
     106                                } else if ( $.support.hashchange ) {
    98107                                        window.location.hash = '';
    99                                 else
     108                                } else {
    100109                                        Loader.close();
     110                                }
    101111                        });
    102112
    103113                        this.messenger.bind( 'activated', function( location ) {
    104                                 if ( location )
     114                                if ( location ) {
    105115                                        window.location = location;
     116                                }
    106117                        });
    107118
    108119                        hash = src.split('?')[1];
    109120
    110121                        // Ensure we don't call pushState if the user hit the forward button.
    111                         if ( $.support.history && window.location.href !== src )
     122                        if ( $.support.history && window.location.href !== src ) {
    112123                                history.pushState( { customize: src }, '', src );
    113                         else if ( ! $.support.history && $.support.hashchange && hash )
     124                        } else if ( ! $.support.history && $.support.hashchange && hash ) {
    114125                                window.location.hash = 'wp_customize=on&' + hash;
     126                        }
    115127
    116128                        this.trigger( 'open' );
    117129                },
    window.wp = window.wp || {}; 
    121133                },
    122134
    123135                close: function() {
    124                         if ( ! this.active )
     136                        if ( ! this.active ) {
    125137                                return;
     138                        }
    126139                        this.active = false;
    127140
    128141                        this.trigger( 'close' );
    129142
     143                        // Restore document title prior to opening the Live Preview
     144                        if ( this.originalDocumentTitle ) {
     145                                document.title = this.originalDocumentTitle;
     146                        }
     147
    130148                        // Return focus to link that was originally clicked.
    131                         if ( this.link )
     149                        if ( this.link ) {
    132150                                this.link.focus();
     151                        }
    133152                },
    134153
    135154                closed: function() {
  • src/wp-includes/js/customize-preview.js

    diff --git src/wp-includes/js/customize-preview.js src/wp-includes/js/customize-preview.js
    index 1d274f9..1b47b78 100644
     
    9090                        preview.send( 'synced' );
    9191                });
    9292
    93         preview.bind( 'active', function() {
    94             if ( api.settings.nonce )
    95                 preview.send( 'nonce', api.settings.nonce );
    96         });
     93                preview.bind( 'active', function() {
     94                        if ( api.settings.nonce ) {
     95                                preview.send( 'nonce', api.settings.nonce );
     96                        }
     97
     98                        preview.send( 'documentTitle', document.title );
     99                });
    97100
    98101                preview.send( 'ready' );
    99102