WordPress.org

Make WordPress Core

Ticket #38224: patch_38224.diff

File patch_38224.diff, 6.4 KB (added by tristangemus, 4 years ago)
  • wp-admin/css/nav-menus.css

     
    1919        margin: 13px 0;
    2020}
    2121
     22.quick-search-load-more {
     23        display: block;
     24        text-align: center;
     25        padding: 5px 0;
     26        cursor: pointer;
     27}
     28
     29.quick-search-load-more.fetching {
     30        cursor: progress;
     31}
     32
    2233#nav-menu-meta .accordion-section-content {
    2334        padding: 18px 13px;
    2435}
  • wp-admin/includes/nav-menu.php

     
    2525        $type = isset( $request['type'] ) ? $request['type'] : '';
    2626        $object_type = isset( $request['object_type'] ) ? $request['object_type'] : '';
    2727        $query = isset( $request['q'] ) ? $request['q'] : '';
     28        $paged = isset( $request['paged'] ) ? intval( $request['paged'] ) : 1;
     29        $posts_per_page = isset( $request['posts_per_page'] ) ? intval( $request['posts_per_page'] ) : 10;
    2830        $response_format = isset( $request['response-format'] ) && in_array( $request['response-format'], array( 'json', 'markup' ) ) ? $request['response-format'] : 'json';
    2931
    3032        if ( 'markup' == $response_format ) {
     
    7476                                'no_found_rows'          => true,
    7577                                'update_post_meta_cache' => false,
    7678                                'update_post_term_cache' => false,
    77                                 'posts_per_page'         => 10,
     79                                'posts_per_page'         => $posts_per_page,
    7880                                'post_type'              => $matches[2],
    7981                                's'                      => $query,
     82                                'paged'                  => $paged
    8083                        ) );
    8184                        if ( ! $search_results_query->have_posts() ) {
    8285                                return;
     
    98101                                }
    99102                        }
    100103                } elseif ( 'taxonomy' == $matches[1] ) {
     104                        $offset = $posts_per_page * ( $paged - 1 );
     105
    101106                        $terms = get_terms( $matches[2], array(
    102107                                'name__like' => $query,
    103                                 'number' => 10,
     108                                'number' => $posts_per_page,
     109                                'offset' => $offset
    104110                        ));
    105111                        if ( empty( $terms ) || is_wp_error( $terms ) )
    106112                                return;
     
    460466                                <li><?php _e('No results found.'); ?></li>
    461467                        <?php endif; ?>
    462468                        </ul>
     469
     470                        <a id="<?php echo $post_type_name; ?>-search-load-more" style="display: none;" class="quick-search-load-more" data-name="quick-search-posttype-<?php echo $post_type_name; ?>"><?php _e( 'Load More' ); ?></a>
    463471                </div><!-- /.tabs-panel -->
    464472
    465473                <div id="<?php echo $post_type_name; ?>-all" class="tabs-panel tabs-panel-view-all <?php
     
    749757                                <li><?php _e('No results found.'); ?></li>
    750758                        <?php endif; ?>
    751759                        </ul>
     760
     761                        <a id="<?php echo $taxonomy_name; ?>-search-load-more" style="display: none;" class="quick-search-load-more" data-name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>"><?php _e( 'Load More' ); ?></a>
    752762                </div><!-- /.tabs-panel -->
    753763
    754764                <p class="button-controls wp-clearfix">
  • wp-admin/js/nav-menu.js

     
    3030                menusChanged : false,
    3131                isRTL: !! ( 'undefined' != typeof isRtl && isRtl ),
    3232                negateIfRTL: ( 'undefined' != typeof isRtl && isRtl ) ? -1 : 1,
     33                currentPage: {},
    3334                lastSearch: '',
    3435
    3536                // Functions that run on init.
     
    893894                        }).on( 'blur', function() {
    894895                                api.lastSearch = '';
    895896                        }).attr('autocomplete','off');
     897
     898                        $( '.quick-search-load-more' ).on( 'click', function() {
     899                                $( this ).addClass( 'fetching' ).prop( 'disabled', true );
     900                                var $quickSearchInput = $( this ).siblings( '.quick-search-wrap' ).children( '.quick-search' );
     901                                api.updateQuickSearchResults( $quickSearchInput, true );
     902                        });
    896903                },
    897904
    898                 updateQuickSearchResults : function(input) {
     905                updateQuickSearchResults : function( input, append ) {
    899906                        var panel, params,
    900907                                minSearchLength = 2,
    901908                                q = input.val();
    902909
     910                        var append = 'undefined' !== typeof append ? append : false;
     911
    903912                        /*
    904913                         * Minimum characters for a search. Also avoid a new AJAX search when
    905914                         * the pressed key (e.g. arrows) doesn't change the searched term.
    906915                         */
    907                         if ( q.length < minSearchLength || api.lastSearch == q ) {
     916                        if ( ( q.length < minSearchLength || api.lastSearch == q ) && ! append ) {
    908917                                return;
    909918                        }
    910919
    911920                        api.lastSearch = q;
    912921
     922                        if ( ! append ) {
     923                                api.currentPage[input.attr('name')] = 1;
     924                        }
     925
    913926                        panel = input.parents('.tabs-panel');
    914927                        params = {
    915928                                'action': 'menu-quick-search',
     
    917930                                'menu': $('#menu').val(),
    918931                                'menu-settings-column-nonce': $('#menu-settings-column-nonce').val(),
    919932                                'q': q,
    920                                 'type': input.attr('name')
     933                                'type': input.attr('name'),
     934                                'paged': api.currentPage[input.attr('name')]
    921935                        };
    922936
    923937                        $( '.spinner', panel ).addClass( 'is-active' );
    924938
    925939                        $.post( ajaxurl, params, function(menuMarkup) {
    926                                 api.processQuickSearchQueryResponse(menuMarkup, params, panel);
     940                                api.processQuickSearchQueryResponse(menuMarkup, params, panel, append);
    927941                        });
    928942                },
    929943
     
    11801194                 * @param object req The request arguments.
    11811195                 * @param jQuery panel The tabs panel we're searching in.
    11821196                 */
    1183                 processQuickSearchQueryResponse : function(resp, req, panel) {
     1197                processQuickSearchQueryResponse : function( resp, req, panel, append ) {
    11841198                        var matched, newID,
    11851199                        takenIDs = {},
    11861200                        form = document.getElementById('nav-menu-meta'),
     
    11881202                        $items = $('<div>').html(resp).find('li'),
    11891203                        $item;
    11901204
    1191                         if( ! $items.length ) {
    1192                                 $('.categorychecklist', panel).html( '<li><p>' + navMenuL10n.noResultsFound + '</p></li>' );
     1205                        var append = 'undefined' !== typeof append ? append : false;
     1206
     1207                        if ( ! $items.length ) {
     1208                                if ( append ) {
     1209                                        $( '.quick-search-load-more[data-name="'+ req.type +'"]' ).hide();
     1210                                } else {
     1211                                        $('.categorychecklist', panel).html( '<li><p>' + navMenuL10n.noResultsFound + '</p></li>' );
     1212                                }
     1213
    11931214                                $( '.spinner', panel ).removeClass( 'is-active' );
    11941215                                return;
    11951216                        }
     
    12161237                                }
    12171238                        });
    12181239
    1219                         $('.categorychecklist', panel).html( $items );
     1240                        if ( append ) {
     1241                                $( '.categorychecklist', panel ).append( $items );
     1242                        } else {
     1243                                $( '.quick-search-load-more[data-name="'+ req.type +'"]' ).show();
     1244                                $( '.categorychecklist', panel ).html( $items );
     1245                        }
     1246                       
     1247                        api.currentPage[req.type] += 1;
     1248                        $( '.quick-search-load-more[data-name="'+ req.type +'"]' ).removeClass( 'fetching' ).prop( 'disabled', false );
    12201249                        $( '.spinner', panel ).removeClass( 'is-active' );
    12211250                },
    12221251