Ticket #13283: 13283.diff
File 13283.diff, 11.8 KB (added by , 15 years ago) |
---|
-
wp-admin/includes/nav-menu.php
406 406 $mods = get_nav_menu_locations(); 407 407 $menus = wp_get_nav_menus(); 408 408 $menu_locations = get_nav_menu_locations(); 409 //var_dump( $menus ); 409 410 410 foreach ( $locations as $location => $description ) { 411 411 ?> 412 412 <p> … … 619 619 } 620 620 ?> 621 621 <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'); ?>" /> 624 625 </p> 625 626 626 627 <ul id="<?php echo $post_type_name; ?>-search-checklist" class="list:<?php echo $post_type_name?> categorychecklist form-no-clear"> … … 794 795 } 795 796 ?> 796 797 <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'); ?>" /> 799 801 </p> 800 802 801 803 <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
21 21 22 22 menuList : undefined, // Set in init. 23 23 targetList : undefined, // Set in init. 24 25 autoCompleteData : {},26 24 27 25 // Functions that run on init. 28 26 init : function() { … … 346 344 }, 347 345 348 346 attachQuickSearchListeners : function() { 349 var that = this, 350 form = $('#nav-menu-meta'); 347 var searchTimer; 351 348 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'); 363 363 }, 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'); 376 373 params = { 377 374 'action': 'menu-quick-search', 378 375 '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(), 381 378 'q': q, 382 'type': type379 'type': input.attr('name') 383 380 }; 384 381 382 $('img.waiting', panel).show(); 383 385 384 $.post( ajaxurl, params, function(menuMarkup) { 386 processMethod.call(that, menuMarkup, params);385 api.processQuickSearchQueryResponse(menuMarkup, params, panel); 387 386 }); 388 387 }, 389 388 … … 463 462 464 463 attachTabsPanelListeners : function() { 465 464 $('#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); 467 467 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(); 473 476 474 477 // 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'); 477 482 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'); 482 485 483 $('.tabs', wrapper).each(function() { 484 this.className = this.className.replace('tabs', ''); 485 }); 486 // select the search bar 487 $('.quick-search', wrapper).focus(); 486 488 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 496 489 return false; 497 } else if ( e.target && e.target.className && -1 != e.target.className.indexOf('select-all') ) {490 } else if ( target.hasClass('select-all') ) { 498 491 selectAreaMatch = /#(.*)$/.exec(e.target.href); 499 492 if ( selectAreaMatch && selectAreaMatch[1] ) { 500 493 items = $('#' + selectAreaMatch[1] + ' .tabs-panel-active .menu-item-title input'); … … 611 604 }); 612 605 }, 613 606 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: false628 }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 645 607 eventOnClickEditLink : function(clickedEl) { 646 608 var activeEdit, 647 609 matchedSection = /#(.*)$/.exec(clickedEl.href); … … 718 680 * 719 681 * @param string resp The server response to the query. 720 682 * @param object req The request arguments. 683 * @param jQuery panel The tabs panel we're searching in. 721 684 */ 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 = {}, 726 688 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); 734 691 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; 746 696 } 747 697 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 } 749 707 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 + ']'); 771 711 } 772 712 } 773 713 } 714 715 $('.categorychecklist', panel).html( items.join('') ); 716 $('img.waiting', panel).hide(); 774 717 }, 775 718 776 719 removeMenuItem : function(el) { … … 783 726 children.shiftDepthClass(-1).updateParentMenuItemDBId(); 784 727 }); 785 728 }, 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 },797 729 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 806 730 getListDataFromID : function(menuItemID, parentEl) { 807 731 if ( ! menuItemID ) 808 732 return false; -
wp-admin/nav-menus.php
27 27 wp_enqueue_script( 'jquery-ui-draggable' ); 28 28 wp_enqueue_script( 'jquery-ui-droppable' ); 29 29 wp_enqueue_script( 'jquery-ui-sortable' ); 30 wp_enqueue_script( 'jquery-autocomplete' );31 30 32 31 // Nav Menu functions 33 32 wp_enqueue_script( 'nav-menu' );