Making WordPress.org

Ticket #4814: 4814.diff

File 4814.diff, 10.9 KB (added by dufresnesteven, 5 years ago)
  • wordpress.org/public_html/wp-content/plugins/theme-directory/query-modifications.php

    diff --git wordpress.org/public_html/wp-content/plugins/theme-directory/query-modifications.php wordpress.org/public_html/wp-content/plugins/theme-directory/query-modifications.php
    index 60b6e9f07..32b81e241 100644
    function wporg_themes_pre_get_posts( $query ) { 
    1818        }
    1919
    2020        // Default to the ~featured~ popular view
    21         if ( empty( $query->query ) ) {
     21        if ( empty( $query->query_vars['browse'] ) ) {
    2222                $query->query_vars['browse'] = 'popular';
    2323        }
    2424
    function wporg_themes_pre_get_posts( $query ) { 
    3838                $query->query_vars['post_status'] = 'publish';
    3939        }
    4040
     41        // We always want there to be a paged variable to match the front end
     42        if( empty( $query->query_vars['paged'] ) ) {
     43                $query->query_vars['paged'] = 1;
     44        }
     45
    4146        switch ( $query->query_vars['browse'] ) {
    4247                case 'new':
    4348                        $query->query_vars['orderby'] = 'post_date';
  • wordpress.org/public_html/wp-content/themes/pub/wporg-themes/css/components/_main.scss

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-themes/css/components/_main.scss wordpress.org/public_html/wp-content/themes/pub/wporg-themes/css/components/_main.scss
    index 2541bb05b..3e485c603 100644
    body.author .theme-browser .theme .theme-author { 
    586586        margin: 100px 0 150px;
    587587}
    588588
     589.viewing-paged-alert {
     590        display: none;
     591        display: flex;
     592        align-items: center;
     593        justify-content: space-between;
     594        padding: 16px;
     595        margin: 0 0 20px 0;
     596        background: #fef8e7;
     597        border: 1px solid #f0b849;
     598
     599        p {
     600                margin: 0;
     601                font-size: 14px;
     602        }
     603}
     604
     605.viewing-paged-alert.is-hidden {
     606        display: none;
     607}
    589608
    590609/* Ratings */
    591610.rating {
  • wordpress.org/public_html/wp-content/themes/pub/wporg-themes/functions.php

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-themes/functions.php wordpress.org/public_html/wp-content/themes/pub/wporg-themes/functions.php
    index d76673d4e..c0f06ec88 100644
    function wporg_themes_canonical_redirects() { 
    5050        }
    5151
    5252        // We don't support pagination on the directory at present.
    53         if ( get_query_var( 'paged' ) ) {
    54                 $url = remove_query_arg( 'paged' );
    55                 $url = preg_replace( '!page/\d+!i', '', $url );
     53        // if ( get_query_var( 'paged' ) ) {
     54        //      $url = remove_query_arg( 'paged' );
     55        //      $url = preg_replace( '!page/\d+!i', '', $url );
    5656
    57                 // Remove any double slashes
    58                 $url = preg_replace( '!/{2,}!', '/', $url );
     57        //      // Remove any double slashes
     58        //      $url = preg_replace( '!/{2,}!', '/', $url );
    5959
    60                 wp_safe_redirect( $url ); // Not 301, as paginated requests will one day be supported hopefully.
    61                 die();
    62         }
     60        //      wp_safe_redirect( $url ); // Not 301, as paginated requests will one day be supported hopefully.
     61        //      die();
     62        // }
    6363
    6464        // Uppercase characters in URLs tend to lead to broken JS pages.
    6565        // Redirect all paths to the lower-case variant, excluding searches..
  • wordpress.org/public_html/wp-content/themes/pub/wporg-themes/index.php

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-themes/index.php wordpress.org/public_html/wp-content/themes/pub/wporg-themes/index.php
    index 55c70de32..123aa8f91 100644
    get_header(); 
    6060                        </div>
    6161                </div><!-- .wp-filter -->
    6262
     63                <div id="viewing-paged-alert" class="viewing-paged-alert is-hidden">
     64                        <p><?php _e( 'You are currently viewing a subset.', 'wporg-themes' ); ?></p>
     65                        <button class="button button-primary" id="view-page-list-clear-btn">
     66                                <?php _e( 'View All', 'wporg-themes' ); ?>
     67                        </button>
     68                </div>
     69
    6370                <div class="theme-browser content-filterable">
    6471                        <div class="themes">
    6572                                <?php
  • wordpress.org/public_html/wp-content/themes/pub/wporg-themes/js/theme.js

    diff --git wordpress.org/public_html/wp-content/themes/pub/wporg-themes/js/theme.js wordpress.org/public_html/wp-content/themes/pub/wporg-themes/js/theme.js
    index c21ec0631..9f73d279b 100644
    window.wp = window.wp || {}; 
    242242                        return collection;
    243243                },
    244244
     245                // Binds event that removes paging and reload the page
     246                bindFilteredAlertBtn: function( isPagedView ) {
     247                        if( ! isPagedView ) {
     248                                return;
     249                        }
     250
     251                        $( '#view-page-list-clear-btn' ).click( function() {
     252                                var urlSplitAtPage = Backbone.history.getFragment().split( 'page/' );
     253                                var navigateTo = urlSplitAtPage && urlSplitAtPage[0];
     254
     255                                // If anything goes wrong, go back to root.
     256                                if( ! navigateTo || ! navigateTo.length ) {
     257                                        navigateTo = themes.router.baseUrl( '/' );
     258                                }
     259
     260                                //If urlSplitAtPage is undefined, it will restart at the root
     261                                themes.router.navigate( navigateTo );
     262                                window.location.reload();
     263                        } );
     264                },
     265
     266                // Show/hides message that alerts user they are on a page
     267                showFilteredAlert: function( isPagedView ) {
     268                        $( '#viewing-paged-alert' ).toggleClass( 'is-hidden', ! isPagedView );
     269                       
     270                        this.bindFilteredAlertBtn( isPagedView );
     271                },
     272
     273                // Always reset the themes array when we move contexts
     274                resetOnNextQuery: function() {
     275                        this.currentQuery.page = 1;
     276                },
     277
     278                shouldResetThemes: function() {
     279                        return this.currentQuery.page === 1;
     280                },
     281
    245282                // Handles requests for more themes
    246283                // and caches results
    247284                //
    window.wp = window.wp || {}; 
    275312                        }
    276313
    277314                        // Otherwise, send a new API call and add it to the cache.
    278                         if ( ! query && ! isPaginated ) {
    279                                 query = this.apiCall( request ).done( function( data ) {
     315                        if ( ! query ) {
     316                                query = this.apiCall( request, isPaginated ).done( function( data ) {
    280317
    281318                                        // Update the collection with the queried data.
    282319                                        if ( data.themes ) {
     320
     321                                                if( ! self.length || self.shouldResetThemes() ) {
    283322                                                        self.reset( data.themes );
     323                                                        self.trigger( 'themes:update' );
     324                                                } else {
     325                                                        self.add( data.themes );
     326                                                }
     327
    284328                                                count = data.info.results;
     329
     330                                                // Because we store the request, we should create a new instance
     331                                                var newReq =  JSON.parse(JSON.stringify(request));
     332
    285333                                                // Store the results and the query request
    286                                                 queries.push( { themes: data.themes, request: request, total: count } );
     334                                                queries.push( { themes: data.themes, request: newReq, total: count } );
    287335                                        }
    288336
    289337                                        // Trigger a collection refresh event
    290338                                        // and a `query:success` event with a `count` argument.
    291                                         self.trigger( 'themes:update' );
    292339                                        self.trigger( 'query:success', count );
    293340
    294341                                        if ( data.themes && data.themes.length === 0 ) {
    295342                                                self.trigger( 'query:empty' );
    296                                         }
    297 
    298                                 }).fail( function() {
    299                                         self.trigger( 'query:fail' );
    300                                 });
    301343                                        } else {
    302                                 // If it's a paginated request we need to fetch more themes...
    303                                 if ( isPaginated ) {
    304                                         return this.apiCall( request, isPaginated ).done( function( data ) {
    305                                                 // Add the new themes to the current collection
    306                                                 // @todo update counter
    307                                                 self.add( data.themes );
    308                                                 self.trigger( 'query:success', data.info.results );
     344                                                $( 'body' ).removeClass( 'no-results' );
     345                                        }
    309346
    310347                                        // We are done loading themes for now.
    311348                                        self.loadingThemes = false;
    window.wp = window.wp || {}; 
    313350                                }).fail( function() {
    314351                                        self.trigger( 'query:fail' );
    315352                                });
    316                                 }
     353                        } else {
    317354
    318355                                if ( query.themes.length === 0 ) {
    319                                         self.trigger( 'query:empty' );
     356                                        this.trigger( 'query:empty' );
    320357                                } else {
    321358                                        $( 'body' ).removeClass( 'no-results' );
    322359                                }
    323360
     361                                // We are done loading themes for now.
     362                                this.loadingThemes = false;
     363
    324364                                // Only trigger an update event since we already have the themes
    325365                                // on our cached object
    326366                                if ( _.isNumber( query.total ) ) {
    327367                                        this.count = query.total;
    328368                                }
    329 
     369                                if( this.shouldResetThemes() ) {
    330370                                        this.reset( query.themes );
     371                                } else {
     372                                        this.add( query.themes );
     373                                }
     374
    331375                                if ( ! query.total ) {
    332376                                        this.count = this.length;
    333377                                }
    window.wp = window.wp || {}; 
    13051349                        $( '.filter-links li > a.current' ).removeClass( 'current' );
    13061350                        $( 'body' ).removeClass( 'show-filters filters-applied' );
    13071351
     1352                        // Paging no longer exists, hide message
     1353                        this.collection.showFilteredAlert( false );
     1354
    13081355                        // Set route
    13091356                        if ( value ) {
    13101357                                themes.utils.title( value, 'search' );
    window.wp = window.wp || {}; 
    14241471                                        user: themes.data.settings.favorites.user
    14251472                                } );
    14261473                        } else {
    1427                                 this.collection.query( { browse: section } );
     1474                                this.collection.query( {
     1475                                        browse: section,
     1476                                        page: this.view.collection.currentQuery.page
     1477                                } );
    14281478                        }
    14291479                },
    14301480
    window.wp = window.wp || {}; 
    14331483                        var $el = $( event.target ),
    14341484                                sort = $el.data( 'sort' );
    14351485
     1486                        // We need to set this to tell the apiCall that we should clear the themes array
     1487                        this.view.collection.resetOnNextQuery();
     1488
     1489                        // We automatically remove the paging on sort, so hide the alert
     1490                        this.view.collection.showFilteredAlert( false );
     1491
    14361492                        event.preventDefault();
    14371493
    14381494                        $( 'body' ).removeClass( 'filters-applied show-filters' );
    window.wp = window.wp || {}; 
    15461602                        themes.router.navigate( themes.router.baseUrl( 'tags/' + tags.join( '+' ) ) );
    15471603                        themes.utils.title( names[0], 'tags' );
    15481604
     1605                        // Paging is gone.
     1606                        this.collection.showFilteredAlert( false );
     1607
    15491608                        // Get the themes by sending Ajax POST request to api.wordpress.org/themes
    15501609                        // or searching the local cache
    15511610                        this.collection.query( request );
    window.wp = window.wp || {}; 
    16291688                        'search/:query(/page/:page)(/)'  : 'search',
    16301689                        'author/:author(/page/:page)(/)' : 'author',
    16311690                        ':slug(/)'                       : 'preview',
     1691                        'page/:page(/)'                  : 'rootWithPaging',
    16321692                        ''                               : 'sort'
    16331693                },
    16341694
    window.wp = window.wp || {}; 
    17011761                                self.view.view.expand( slug );
    17021762                        });
    17031763
    1704                         // Handles sorting / browsing routes
    1705                         // Also handles the root URL triggering a sort request
    1706                         // for `featured`, the default view
    1707                         themes.router.on( 'route:sort', function( sort, page ) {
     1764                        function onLoadSort( sort, page ) {
    17081765                                if ( page ) {
    1709                                         themes.router.navigate( 'browse/' + sort + '/', { replace: true } );
     1766                                        self.view.collection.currentQuery.page = +page;
     1767                                        self.view.collection.showFilteredAlert( true );
    17101768                                }
    17111769                               
    17121770                                self.view.collection.queries.push( themes.data.query );
    window.wp = window.wp || {}; 
    17161774                                }
    17171775                                self.view.sort( sort );
    17181776                                self.view.trigger( 'theme:close' );
     1777                        }
     1778
     1779                        // Handles sorting / browsing routes
     1780                        // Also handles the root URL triggering a sort request
     1781                        // for `featured`, the default view
     1782                        themes.router.on( 'route:sort', onLoadSort );
     1783
     1784                        themes.router.on( 'route:rootWithPaging', function( page ) {
     1785                                onLoadSort.call( this, undefined, page );
    17191786                        });
    17201787
    17211788                        // The `search` route event. The router populates the input field.