WordPress.org

Make WordPress Core

Ticket #13283: 13283.diff

File 13283.diff, 11.8 KB (added by koopersmith, 4 years ago)
  • wp-admin/includes/nav-menu.php

     
    406406        $mods = get_nav_menu_locations(); 
    407407        $menus = wp_get_nav_menus(); 
    408408        $menu_locations = get_nav_menu_locations(); 
    409         //var_dump( $menus ); 
     409 
    410410        foreach ( $locations as $location => $description ) { 
    411411                ?> 
    412412                <p> 
     
    619619                        } 
    620620                        ?> 
    621621                        <p class="quick-search-wrap"> 
    622                                 <input type="text" class="quick-search regular-text" value="<?php echo $searched; ?>" name="quick-search-posttype-<?php echo $post_type_name; ?>" /> 
    623                                 <input type="submit" class="quick-search-submit button-secondary" value="<?php esc_attr_e('Search'); ?>" /> 
     622                                <input type="text" class="quick-search regular-text input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-posttype-<?php echo $post_type_name; ?>" /> 
     623                                <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> 
     624                                <input type="submit" class="quick-search-submit button-secondary hide-if-js" value="<?php esc_attr_e('Search'); ?>" /> 
    624625                        </p> 
    625626 
    626627                        <ul id="<?php echo $post_type_name; ?>-search-checklist" class="list:<?php echo $post_type_name?> categorychecklist form-no-clear"> 
     
    794795                        } 
    795796                        ?> 
    796797                        <p class="quick-search-wrap"> 
    797                                 <input type="text" class="quick-search regular-text" value="<?php echo $searched; ?>" name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" /> 
    798                                 <input type="submit" class="quick-search-submit button-secondary" value="<?php esc_attr_e('Search'); ?>" /> 
     798                                <input type="text" class="quick-search regular-text input-with-default-title" title="<?php esc_attr_e('Search'); ?>" value="<?php echo $searched; ?>" name="quick-search-taxonomy-<?php echo $taxonomy_name; ?>" /> 
     799                                <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" alt="" /> 
     800                                <input type="submit" class="quick-search-submit button-secondary hide-if-js" value="<?php esc_attr_e('Search'); ?>" /> 
    799801                        </p> 
    800802 
    801803                        <ul id="<?php echo $taxonomy_name; ?>-search-checklist" class="list:<?php echo $taxonomy_name?> categorychecklist form-no-clear"> 
  • wp-admin/js/nav-menu.dev.js

     
    2121                 
    2222                menuList : undefined,   // Set in init. 
    2323                targetList : undefined, // Set in init. 
    24                  
    25                 autoCompleteData : {}, 
    2624 
    2725                // Functions that run on init. 
    2826                init : function() { 
     
    346344                }, 
    347345         
    348346                attachQuickSearchListeners : function() { 
    349                         var that = this, 
    350                                 form = $('#nav-menu-meta'); 
     347                        var searchTimer; 
    351348                         
    352                         // auto-suggest for the quick-search boxes 
    353                         $('input.quick-search').each(function(i, el) { 
    354                                 that.setupQuickSearchEventListeners(el); 
    355                         }); 
    356                         form.find('.quick-search-submit').click(function() { 
    357                                 $(this).trigger('wp-quick-search'); 
    358                                 return false; 
    359                         }); 
    360                         form.find('.inside').children().bind('wp-quick-search', function() { 
    361                                 that.quickSearch( $(this).attr('id') ); 
    362                         }); 
     349                        $('.quick-search').keypress(function(e){ 
     350                                var t = $(this); 
     351                                 
     352                                if( 13 == e.which ) { 
     353                                        api.updateQuickSearchResults( t ); 
     354                                        return false; 
     355                                } 
     356                                 
     357                                if( searchTimer ) clearTimeout(searchTimer); 
     358                                 
     359                                searchTimer = setTimeout(function(){ 
     360                                        api.updateQuickSearchResults( t ); 
     361                                }, 400); 
     362                        }).attr('autocomplete','off'); 
    363363                }, 
    364          
    365                 quickSearch : function(id) { 
    366                         var type = $('#' + id + ' .quick-search').attr('name'), 
    367                         q = $('#' + id + ' .quick-search').val(), 
    368                         menu = $('#menu').val(), 
    369                         nonce = $('#menu-settings-column-nonce').val(), 
    370                         params = {}, 
    371                         that = this, 
    372                         processMethod = function(){}; 
    373  
    374                         processMethod = that.processQuickSearchQueryResponse; 
    375  
     364                 
     365                updateQuickSearchResults : function(input) { 
     366                        var panel, params, 
     367                        minSearchLength = 2, 
     368                        q = input.val(); 
     369                         
     370                        if( q.length < minSearchLength ) return; 
     371                         
     372                        panel = input.parents('.tabs-panel'); 
    376373                        params = { 
    377374                                'action': 'menu-quick-search', 
    378375                                'response-format': 'markup', 
    379                                 'menu': menu, 
    380                                 'menu-settings-column-nonce': nonce, 
     376                                'menu': $('#menu').val(), 
     377                                'menu-settings-column-nonce': $('#menu-settings-column-nonce').val(), 
    381378                                'q': q, 
    382                                 'type': type 
     379                                'type': input.attr('name') 
    383380                        }; 
    384381 
     382                        $('img.waiting', panel).show(); 
     383 
    385384                        $.post( ajaxurl, params, function(menuMarkup) { 
    386                                 processMethod.call(that, menuMarkup, params); 
     385                                api.processQuickSearchQueryResponse(menuMarkup, params, panel); 
    387386                        }); 
    388387                }, 
    389388         
     
    463462 
    464463                attachTabsPanelListeners : function() { 
    465464                        $('#menu-settings-column').bind('click', function(e) { 
    466                                 var selectAreaMatch, activePanel, panelIdMatch, wrapper, inputs, i, items; 
     465                                var selectAreaMatch, activePanel, panelId, wrapper, items, 
     466                                        target = $(e.target); 
    467467                                 
    468                                 if ( e.target && e.target.className && -1 != e.target.className.indexOf('nav-tab-link') ) { 
    469                                         panelIdMatch = /#(.*)$/.exec(e.target.href); 
    470                                         wrapper = $(e.target).parents('.inside').first()[0]; 
    471                                         inputs = wrapper ? wrapper.getElementsByTagName('input') : []; 
    472                                         i = inputs.length; 
     468                                if ( target.hasClass('nav-tab-link') ) { 
     469                                        panelId = /#(.*)$/.exec(e.target.href); 
     470                                        if ( panelId && panelId[1] ) 
     471                                                panelId = panelId[1] 
     472                                        else 
     473                                                return false; 
     474                                                 
     475                                        wrapper = target.parents('.inside').first(); 
    473476 
    474477                                        // upon changing tabs, we want to uncheck all checkboxes 
    475                                         while( i-- ) 
    476                                                 inputs[i].checked = false; 
     478                                        $('input', wrapper).removeAttr('checked'); 
     479                                         
     480                                        $('.tabs-panel-active', wrapper).removeClass('tabs-panel-active').addClass('tabs-panel-inactive'); 
     481                                        $('#' + panelId, wrapper).removeClass('tabs-panel-inactive').addClass('tabs-panel-active'); 
    477482 
    478                                         $('.tabs-panel', wrapper).each(function() { 
    479                                                 if ( this.className ) 
    480                                                         this.className = this.className.replace('tabs-panel-active', 'tabs-panel-inactive'); 
    481                                         }); 
     483                                        $('.tabs', wrapper).removeClass('tabs'); 
     484                                        target.parent().addClass('tabs'); 
    482485 
    483                                         $('.tabs', wrapper).each(function() { 
    484                                                 this.className = this.className.replace('tabs', ''); 
    485                                         }); 
     486                                        // select the search bar 
     487                                        $('.quick-search', wrapper).focus(); 
    486488 
    487                                         e.target.parentNode.className += ' tabs'; 
    488  
    489                                         if ( panelIdMatch && panelIdMatch[1] ) { 
    490                                                 activePanel = document.getElementById(panelIdMatch[1]); 
    491                                                 if ( activePanel ) { 
    492                                                         activePanel.className = activePanel.className.replace('tabs-panel-inactive', 'tabs-panel-active'); 
    493                                                 } 
    494                                         } 
    495  
    496489                                        return false; 
    497                                 } else if ( e.target && e.target.className && -1 != e.target.className.indexOf('select-all') ) { 
     490                                } else if ( target.hasClass('select-all') ) { 
    498491                                        selectAreaMatch = /#(.*)$/.exec(e.target.href); 
    499492                                        if ( selectAreaMatch && selectAreaMatch[1] ) { 
    500493                                                items = $('#' + selectAreaMatch[1] + ' .tabs-panel-active .menu-item-title input'); 
     
    611604                        }); 
    612605                }, 
    613606 
    614                 /** 
    615                  * Set up quick-search input fields' events. 
    616                  * 
    617                  * @param object el The input element. 
    618                  */ 
    619                 setupQuickSearchEventListeners : function(el) { 
    620                         var that = this; 
    621                         $(el).autocomplete( ajaxurl + '?action=menu-quick-search&type=' + el.name, 
    622                                 { 
    623                                         delay: 500, 
    624                                         formatItem: api.formatAutocompleteResponse, 
    625                                         formatResult: api.formatAutocompleteResult, 
    626                                         minchars: 2, 
    627                                         multiple: false 
    628                                 } 
    629                         ).bind('blur', function(e) { 
    630                                 var changedData = api.autoCompleteData[this.value], 
    631                                 inputEl = this; 
    632                                 if ( changedData ) { 
    633                                         $.post( 
    634                                                 ajaxurl + '?action=menu-quick-search&type=get-post-item&response-format=markup', 
    635                                                 changedData, 
    636                                                 function(r) { 
    637                                                         that.processQuickSearchQueryResponse.call(that, r, changedData); 
    638                                                         api.autoCompleteData[inputEl.value] = false; 
    639                                                 } 
    640                                         ); 
    641                                 } 
    642                         }); 
    643                 }, 
    644  
    645607                eventOnClickEditLink : function(clickedEl) { 
    646608                        var activeEdit, 
    647609                        matchedSection = /#(.*)$/.exec(clickedEl.href); 
     
    718680                 * 
    719681                 * @param string resp The server response to the query. 
    720682                 * @param object req The request arguments. 
     683                 * @param jQuery panel The tabs panel we're searching in. 
    721684                 */ 
    722                 processQuickSearchQueryResponse : function(resp, req) { 
    723                         if ( ! req ) 
    724                                 req = {}; 
    725                         var wrap = document.createElement('ul'), 
     685                processQuickSearchQueryResponse : function(resp, req, panel) { 
     686                        var i, matched, newID, 
     687                        takenIDs = {}, 
    726688                        form = document.getElementById('nav-menu-meta'), 
    727                         i, 
    728                         items, 
    729                         matched, 
    730                         message, 
    731                         newID, 
    732                         pattern = new RegExp('menu-item\\[(\[^\\]\]*)'), 
    733                         resultList; 
     689                        pattern = new RegExp('menu-item\\[(\[^\\]\]*)', 'g'), 
     690                        items = resp.match(/<li>.*<\/li>/g); 
    734691 
    735                         // make a unique DB ID number 
    736                         matched = pattern.exec(resp); 
    737                         if ( matched && matched[1] ) { 
    738                                 newID = matched[1]; 
    739                                 while( form.elements['menu-item[' + newID + '][menu-item-type]'] ) { 
    740                                         newID--; 
    741                                 } 
    742  
    743                                 if ( newID != matched[1] ) { 
    744                                         resp = resp.replace(new RegExp('menu-item\\[' + matched[1] + '\\]', 'g'), 'menu-item[' + newID + ']'); 
    745                                 } 
     692                        if( ! items ) {                          
     693                                $('.categorychecklist', panel).html( '<li><p>' + navMenuL10n.noResultsFound + '</p></li>' ); 
     694                                $('img.waiting', panel).hide(); 
     695                                return; 
    746696                        } 
    747697 
    748                         wrap.innerHTML = resp; 
     698                        i = items.length; 
     699                        while( i-- ) { 
     700                                // make a unique DB ID number 
     701                                matched = pattern.exec(items[i]); 
     702                                if ( matched && matched[1] ) { 
     703                                        newID = matched[1]; 
     704                                        while( form.elements['menu-item[' + newID + '][menu-item-type]'] || takenIDs[ newID ] ) { 
     705                                                newID--; 
     706                                        } 
    749707 
    750                         items = wrap.getElementsByTagName('li'); 
    751  
    752                         if ( items[0] && req.object_type ) { 
    753                                 resultList = document.getElementById(req.object_type + '-search-checklist'); 
    754                                 if ( resultList ) { 
    755                                         resultList.appendChild(items[0]); 
    756                                 } 
    757                         } else if ( req.type ) { 
    758                                 matched = /quick-search-(posttype|taxonomy)-([a-zA-Z_-]*)/.exec(req.type); 
    759                                 if ( matched && matched[2] ) { 
    760                                         resultList = document.getElementById(matched[2] + '-search-checklist'); 
    761                                         if ( resultList ) { 
    762                                                 i = items.length; 
    763                                                 if ( ! i ) { 
    764                                                         message = document.createElement('li'); 
    765                                                         message.appendChild(document.createTextNode(navMenuL10n.noResultsFound)); 
    766                                                         resultList.appendChild(message); 
    767                                                 } 
    768                                                 while( i-- ) { 
    769                                                         resultList.appendChild(items[i]); 
    770                                                 } 
     708                                        takenIDs[newID] = true; 
     709                                        if ( newID != matched[1] ) { 
     710                                                items[i] = items[i].replace(new RegExp('menu-item\\[' + matched[1] + '\\]', 'g'), 'menu-item[' + newID + ']'); 
    771711                                        } 
    772712                                } 
    773713                        } 
     714 
     715                        $('.categorychecklist', panel).html( items.join('') ); 
     716                        $('img.waiting', panel).hide(); 
    774717                }, 
    775718 
    776719                removeMenuItem : function(el) { 
     
    783726                                children.shiftDepthClass(-1).updateParentMenuItemDBId(); 
    784727                        }); 
    785728                }, 
    786                  
    787                 formatAutocompleteResponse : function( resultRow, pos, total, queryTerm ) { 
    788                         if ( resultRow && resultRow[0] ) { 
    789                                 var data = $.parseJSON(resultRow[0]); 
    790                                 if ( data.post_title ) { 
    791                                         if ( data.ID && data.post_type ) 
    792                                                 api.autoCompleteData[data.post_title] = {ID: data.ID, object_type: data.post_type}; 
    793                                         return data.post_title; 
    794                                 } 
    795                         } 
    796                 }, 
    797729 
    798                 formatAutocompleteResult : function( resultRow, pos, total, queryTerm ) { 
    799                         if ( resultRow && resultRow[0] ) { 
    800                                 var data = $.parseJSON(resultRow[0]); 
    801                                 if ( data.post_title ) 
    802                                         return data.post_title; 
    803                         } 
    804                 }, 
    805  
    806730                getListDataFromID : function(menuItemID, parentEl) { 
    807731                        if ( ! menuItemID ) 
    808732                                return false; 
  • wp-admin/nav-menus.php

     
    2727wp_enqueue_script( 'jquery-ui-draggable' ); 
    2828wp_enqueue_script( 'jquery-ui-droppable' ); 
    2929wp_enqueue_script( 'jquery-ui-sortable' ); 
    30 wp_enqueue_script( 'jquery-autocomplete' ); 
    3130 
    3231// Nav Menu functions 
    3332wp_enqueue_script( 'nav-menu' );