WordPress.org

Make WordPress Core

Ticket #25963: 25963.10.diff

File 25963.10.diff, 6.8 KB (added by adamsilverstein, 7 years ago)

remove search debounce as per IRC discussion

  • src/wp-admin/js/theme.js

     
    291291                                scroll = document.body.scrollTop;
    292292
    293293                                // Clean the url structure
    294                                 themes.router.navigate( '' );
     294                                themes.router.navigate( themes.router.baseUrl( '' ), { replace: true } );
    295295
    296296                                // Restore scroll position
    297297                                document.body.scrollTop = scroll;
     
    299299                }
    300300        },
    301301
    302         // Handles arrow keys navigation for the overlay
    303         // Triggers theme:next and theme:previous events
     302        // Handles .disabled classes for next/previous buttons
    304303        navigation: function() {
    305                 var self = this;
    306304
    307                 $( 'body' ).on( 'keyup', function( event ) {
    308 
    309                         // Pressing the right arrow key fires a theme:next event
    310                         if ( event.keyCode === 39 ) {
    311                                 self.trigger( 'theme:next', self.model.cid );
    312                         }
    313 
    314                         // Pressing the left arrow key fires a theme:previous event
    315                         if ( event.keyCode === 37 ) {
    316                                 self.trigger( 'theme:previous', self.model.cid );
    317                         }
    318 
    319                         // Pressing the escape key closes the theme details panel
    320                         if ( event.keyCode === 27 ) {
    321                                 self.collapse();
    322                         }
    323                 });
    324 
    325305                // Disable Left/Right when at the start or end of the collection
    326306                if ( this.model.cid === this.model.collection.at(0).cid ) {
    327307                        this.$el.find( '.left' ).addClass( 'disabled' );
     
    379359themes.view.Themes = wp.Backbone.View.extend({
    380360
    381361        className: 'themes',
     362        $overlay: $( 'div.theme-overlay' ),
    382363
    383364        // Number to keep track of scroll position
    384365        // while in theme-overlay mode
     
    409390                this.listenTo( this.parent, 'theme:scroll', function() {
    410391                        self.renderThemes( self.parent.page );
    411392                });
     393
     394                // Bind keyboard events.
     395                $('body').on( 'keyup', function( event ) {
     396                        // Pressing the right arrow key fires a theme:next event
     397                        if ( event.keyCode === 39 ) {
     398                                self.overlay.nextTheme();
     399                        }
     400
     401                        // Pressing the left arrow key fires a theme:previous event
     402                        if ( event.keyCode === 37 ) {
     403                                self.overlay.previousTheme();
     404                        }
     405
     406                        // Pressing the escape key fires a theme:collapse event
     407                        if ( event.keyCode === 27 ) {
     408                                self.overlay.collapse( event );
     409                        }
     410                });
    412411        },
    413412
    414413        // Manages rendering of theme pages
     
    510509                this.model = self.collection.get( id );
    511510
    512511                // Trigger a route update for the current model
    513                 themes.router.navigate( 'theme/' + this.model.id );
     512                themes.router.navigate( themes.router.baseUrl( '?theme=' + this.model.id ), { replace: true } );
    514513
    515514                // Sets this.view to 'detail'
    516515                this.setView( 'detail' );
     
    522521                });
    523522
    524523                this.overlay.render();
    525                 this.$el.append( this.overlay.el );
     524                this.$overlay.html( this.overlay.el );
    526525
    527526                this.overlay.screenshotGallery();
    528527
     
    564563                        this.overlay.closeOverlay();
    565564
    566565                        // Trigger a route update for the current model
    567                         // that renders the new theme's overlay
    568                         themes.router.navigate( 'theme/' + nextModel.id, { trigger: true } );
     566                        self.theme.trigger( 'theme:expand', nextModel.cid );
     567
    569568                }
    570569        },
    571570
     
    588587                        this.overlay.closeOverlay();
    589588
    590589                        // Trigger a route update for the current model
    591                         // that renders the new theme's overlay
    592                         themes.router.navigate( 'theme/' + previousModel.id, { trigger: true } );
     590                        self.theme.trigger( 'theme:expand', previousModel.cid );
     591
    593592                }
    594593        }
    595594});
     
    623622
    624623                // Update the URL hash
    625624                if ( event.target.value ) {
    626                         themes.router.navigate( 'search/' + event.target.value, { replace: true } );
     625                        themes.router.navigate( themes.router.baseUrl( '?search=' + event.target.value ), { replace: true } );
    627626                } else {
    628                         themes.router.navigate( '' );
     627                        themes.router.navigate( themes.router.baseUrl( '' ), { replace: true } );
    629628                }
    630629        }
    631630});
     
    634633// Listens to [theme] and [search] params
    635634themes.routes = Backbone.Router.extend({
    636635
    637         routes: {
    638                 'search/*query': 'search',
    639                 'theme/*slug': 'theme'
     636        initialize: function() {
     637                this.routes = _.object([
     638                ]);
    640639        },
    641640
     641        baseUrl: function( url ) {
     642                return themes.data.settings.root + url;
     643        },
     644
    642645        // Set the search input value based on url
    643646        search: function( query ) {
    644647                $( '.theme-search' ).val( query );
     648                self.themes.doSearch( query );
    645649        }
    646650});
    647651
     
    666670        render: function() {
    667671                // Render results
    668672                this.view.render();
    669 
    670                 // Calls the routes functionality
    671673                this.routes();
    672674
    673                 // Set ups history with pushState and our root
    674                 Backbone.history.start({ root: themes.data.settings.root });
     675                // Set the initial theme
     676                if ( 'undefined' !== typeof themes.data.settings.theme && '' !== themes.data.settings.theme ){
     677                        this.view.view.theme.trigger( 'theme:expand', this.view.collection.findWhere( { id: themes.data.settings.theme } ) );
     678                }
     679
     680                // Set the initial search
     681                if ( 'undefined' !== typeof themes.data.settings.search && '' !== themes.data.settings.search ){
     682                        $( '.theme-search' ).val( themes.data.settings.search );
     683                        this.themes.doSearch( themes.data.settings.search );
     684                }
     685
     686                // Start the router if browser supports History API
     687                if ( window.history && window.history.pushState ) {
     688                        // Calls the routes functionality
     689                        Backbone.history.start({ pushState: true, silent: true });
     690                }
    675691        },
    676692
    677693        routes: function() {
     
    679695                // Bind to our global thx object
    680696                // so that the object is available to sub-views
    681697                themes.router = new themes.routes();
    682 
    683                 // Handles theme details route event
    684                 themes.router.on( 'route:theme', function( slug ) {
    685                         self.view.view.expand( slug );
    686                 });
    687 
    688                 // Handles search route event
    689                 themes.router.on( 'route:search', function( query ) {
    690                         self.themes.doSearch( query );
    691                 });
    692698        }
    693699};
    694700
  • src/wp-admin/themes.php

     
    9191} else {
    9292        $themes = wp_prepare_themes_for_js( array( wp_get_theme() ) );
    9393}
     94wp_reset_vars( array( 'theme', 'search' ) );
    9495
    9596wp_localize_script( 'theme', '_wpThemeSettings', array(
    9697        'themes'   => $themes,
     
    9899                'canInstall'    => ( ! is_multisite() && current_user_can( 'install_themes' ) ),
    99100                'installURI'    => ( ! is_multisite() && current_user_can( 'install_themes' ) ) ? admin_url( 'theme-install.php' ) : null,
    100101                'confirmDelete' => __( "Are you sure you want to delete this theme?\n\nClick 'Cancel' to go back, 'OK' to confirm the delete." ),
    101                 'root'          => admin_url( 'themes.php' ),
     102                'root'          => parse_url( admin_url( 'themes.php' ), PHP_URL_PATH ),
    102103                'extraRoutes'   => '',
     104                'theme'         => esc_html( $theme ),
     105                'search'        => esc_html( $search ),
     106
    103107        ),
    104108        'l10n' => array(
    105109                'addNew' => __( 'Add New Theme' ),
     
    180184?>
    181185
    182186<div class="theme-browser"></div>
     187<div class="theme-overlay"></div>
    183188
    184189<?php
    185190// List broken themes, if any.