WordPress.org

Make WordPress Core

Ticket #25963: 25963.12.diff

File 25963.12.diff, 3.8 KB (added by adamsilverstein, 6 years ago)

restore real JS routing

  • wp-admin/js/theme.js

     
    646646themes.routes = Backbone.Router.extend({
    647647
    648648        initialize: function() {
    649                 this.routes = _.object([
    650                 ]);
     649                this.route( /^(.*?)/, 'parseThemeUri' );
    651650        },
    652651
     652        // Parse URL route
     653        parseThemeUri: function() {
     654                var regex = /([^&=]+)=?([^&]*)/g,
     655                        params, key, value;
     656
     657                // Gets the url params from Backbone.history
     658                params = regex.exec( Backbone.history.location.search );
     659
     660                // Bail if we have no parameters
     661                if ( ! params ) {
     662                        return;
     663                }
     664
     665                key = params[1];
     666                value = params[2]
     667
     668                // Handles theme route
     669                if ( key.indexOf( 'theme' ) !== -1 ) {
     670                        this.theme( value );
     671                }
     672
     673                // Handles search route
     674                if ( key.indexOf( 'search' ) !== -1 ) {
     675                        this.search( value );
     676                }
     677        },
     678
    653679        baseUrl: function( url ) {
    654680                return themes.data.settings.root + url;
     681        },
     682
     683        theme: function( slug ) {
     684                // Trigger a route event of 'theme'
     685                this.trigger( 'route:theme', slug );
     686        },
     687
     688        search: function( term ) {
     689                // Set the search input value based on url
     690                $( '.theme-search' ).val( term );
     691                // Trigger a route event of 'search'
     692                this.trigger( 'route:search', term );
    655693        }
    656694});
    657695
     
    673711        render: function() {
    674712                // Render results
    675713                this.view.render();
     714
     715                // Calls the routes functionality
    676716                this.routes();
    677 
     717/*
    678718                // Set the initial theme
    679719                if ( 'undefined' !== typeof themes.data.settings.theme && '' !== themes.data.settings.theme ){
    680720                        this.view.view.theme.trigger( 'theme:expand', this.view.collection.findWhere( { id: themes.data.settings.theme } ) );
     
    685725                        $( '.theme-search' ).val( themes.data.settings.search );
    686726                        this.themes.doSearch( themes.data.settings.search );
    687727                }
    688 
     728*/
    689729                // Start the router if browser supports History API
    690730                if ( window.history && window.history.pushState ) {
    691731                        // Calls the routes functionality
    692                         Backbone.history.start({ pushState: true, silent: true });
     732                        Backbone.history.start({ pushState: true });
    693733                }
    694734        },
    695735
    696736        routes: function() {
     737                var self = this;
    697738                // Bind to our global thx object
    698739                // so that the object is available to sub-views
    699740                themes.router = new themes.routes();
     741
     742                // Handles theme details route event
     743                themes.router.on( 'route:theme', function( slug ) {
     744                        self.view.view.expand( slug );
     745                });
     746
     747                // Handles search route event
     748                themes.router.on( 'route:search', function( query ) {
     749                        self.themes.doSearch( query );
     750                });
    700751        }
    701752};
    702753
  • wp-admin/themes.php

     
    100100                'installURI'    => ( ! is_multisite() && current_user_can( 'install_themes' ) ) ? admin_url( 'theme-install.php' ) : null,
    101101                'confirmDelete' => __( "Are you sure you want to delete this theme?\n\nClick 'Cancel' to go back, 'OK' to confirm the delete." ),
    102102                'root'          => parse_url( admin_url( 'themes.php' ), PHP_URL_PATH ),
    103                 'theme'         => esc_html( $theme ),
    104                 'search'        => esc_html( $search ),
    105 
    106103        ),
    107         'l10n' => array(
    108                 'addNew' => __( 'Add New Theme' ),
    109                 'search' => __( 'Search Installed Themes' ),
    110                 'searchPlaceholder' => __( 'Search installed themes...' ),
    111         ),
     104        'l10n' => array(
     105                'addNew' => __( 'Add New Theme' ),
     106                'search' => __( 'Search Installed Themes' ),
     107                'searchPlaceholder' => __( 'Search installed themes...' ),
     108        ),
    112109) );
    113110
    114111add_thickbox();
     
    279276        <# } #>
    280277        <span class="more-details"><?php _e( 'Theme Details' ); ?></span>
    281278        <div class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.author }}}' ); ?></div>
    282        
     279
    283280        <# if ( data.active ) { #>
    284281                <h3 class="theme-name"><span><?php _ex( 'Active:', 'theme' ); ?></span> {{{ data.name }}}</h3>
    285282        <# } else { #>