WordPress.org

Make WordPress Core

Ticket #13220: nav_menu_js.3.diff

File nav_menu_js.3.diff, 7.4 KB (added by koopersmith, 4 years ago)
  • wp-admin/js/nav-menu.dev.js

     
    196196                                handle: '.menu-item-handle', 
    197197                                placeholder: 'sortable-placeholder', 
    198198                                start: function(e, ui) { 
    199                                         console.log('sort start', e, ui); 
    200199                                        var next, height, width, parent, children, maxChildDepth; 
    201200 
    202201                                        transport = ui.item.children('.menu-item-transport'); 
     
    367366                                        ui.helper.children('div').addClass('hidden-handle'); 
    368367                                         
    369368                                        // Trigger the ajax 
    370                                         li.parents('.inside').find('.add-to-menu input').trigger('submit'); 
     369                                        li.parents('.inside').find('.add-to-menu input').click(); 
    371370                                         
    372371                                        // Lock dimensions 
    373372                                        ui.helper.width( ui.helper.width() ); 
     
    438437                                that.setupQuickSearchEventListeners(el); 
    439438                        }); 
    440439 
    441                         $(formEL).bind('submit', function(e) { 
    442                                 return that.eventSubmitMetaForm.call(that, this, e); 
     440                        // If a "Add to Menu" button was clicked, submit that metabox ajax style. 
     441                        $(formEL).click(function(e) { 
     442                                // based on the input, call that function 
     443                                var divcontainer = $(e.target).parent().parent().parent(); 
     444                         
     445                                if ( $(e.target).is('input') && $(e.target).hasClass('button-secondary') && !$(e.target).hasClass('quick-search-submit') ) { 
     446                                        if ( $(divcontainer).hasClass('customlinkdiv') ) { 
     447                                                that.addCustomLink(); 
     448                                        } else if ( $(divcontainer).hasClass('posttypediv') || $(divcontainer).hasClass('taxonomydiv') ) { 
     449                                                that.addItemsToMenu( $(divcontainer).attr('id') ); 
     450                                        }; 
     451                                        return false; 
     452                                } else if ( $(e.target).is('input') && $(e.target).hasClass('quick-search-submit') ) { 
     453                                        that.quickSearch( $(divcontainer).attr('id') ); 
     454                                        return false; 
     455                                }; 
    443456                        }); 
    444                         $(formEL).find('input:submit').click(function() { 
    445                                 $(this).siblings('img.waiting').show(); 
     457                }, 
     458                 
     459                quickSearch : function(id) { 
     460                        var type = $('#' + id + ' .quick-search').attr('name'), 
     461                        q = $('#' + id + ' .quick-search').val(), 
     462                        menu = $('#menu').val(), 
     463                        nonce = $('#menu-settings-column-nonce').val(), 
     464                        params = {}, 
     465                        that = this, 
     466                        processMethod = function(){}; 
     467 
     468                        processMethod = that.processQuickSearchQueryResponse; 
     469 
     470                        params = { 
     471                                'action': 'menu-quick-search', 
     472                                'response-format': 'markup', 
     473                                'menu': menu, 
     474                                'menu-settings-column-nonce': nonce, 
     475                                'q': q, 
     476                                'type': type 
     477                        }; 
     478 
     479                        $.post( ajaxurl, params, function(menuMarkup) { 
     480                                processMethod.call(that, menuMarkup, params); 
    446481                        }); 
    447482                }, 
     483                 
     484                addCustomLink : function() { 
     485                        var url = $('#custom-menu-item-url').val(), 
     486                        label = $('#custom-menu-item-name').val(), 
     487                        menu = $('#menu').val(), 
     488                        nonce = $('#menu-settings-column-nonce').val(), 
     489                        params = {}, 
     490                        that = this, 
     491                        processMethod = function(){}; 
     492                         
     493                        if ( '' == url || 'http://' == url ) 
     494                                return false; 
     495                         
     496                        // Show the ajax spinner 
     497                        $('.customlinkdiv img.waiting').show(); 
     498                         
     499                        params = { 
     500                                'action': 'add-menu-item', 
     501                                'menu': menu, 
     502                                'menu-settings-column-nonce': nonce, 
     503                                'menu-item': { 
     504                                        '-1': { 
     505                                                'menu-item-type': 'custom', 
     506                                                'menu-item-url': url, 
     507                                                'menu-item-title': label 
     508                                        } 
     509                                } 
     510                        }; 
     511                         
     512                        processMethod = that.eventAddMenuItem; 
     513                         
     514                        $.post( ajaxurl, params, function(menuMarkup) { 
     515                                processMethod.call(that, menuMarkup, params); 
     516                                 
     517                                // Remove the ajax spinner 
     518                                $('.customlinkdiv img.waiting').hide(); 
     519                        }); 
     520                }, 
    448521 
    449522                attachTabsPanelListeners : function() { 
    450523                        $('#menu-settings-column').bind('click', function(e) { 
     
    690763                }, 
    691764 
    692765                /** 
    693                  * Callback for the meta form submit action listener. 
     766                 * Adds menu items to the menu. 
    694767                 * 
    695                  * @param object thisForm The submitted form. 
    696                  * @param object e The event object. 
     768                 * @param string id The id of the metabox 
    697769                 */ 
    698                 eventSubmitMetaForm : function(thisForm, e) { 
    699                         var inputs = thisForm.getElementsByTagName('input'), 
    700                         len = inputs.length, 
    701                         i, j, 
    702                         listItemData, 
    703                         listItemDBID, 
    704                         listItemDBIDMatch, 
     770                addItemsToMenu : function(id) { 
     771                        var items = $( '.tabs-panel-active .categorychecklist li input:checked', '#' + id), 
     772                        menu = $('#menu').val(), 
     773                        nonce = $('#menu-settings-column-nonce').val(), 
    705774                        params = {}, 
     775                        that = this, 
    706776                        processMethod = function(){}, 
    707777                        re = new RegExp('menu-item\\[(\[^\\]\]*)'); 
     778                         
     779                        processMethod = that.eventAddMenuItem; 
     780                         
     781                        // If no items are checked, bail. 
     782                        if ( !items.length ) 
     783                                return false; 
     784                         
     785                        // Show the ajax spinner 
     786                        $('#' + id + ' img.waiting').show(); 
    708787 
    709                         that = this; 
    710                         params['action'] = ''; 
     788                        // do stuff 
     789                        $(items).each(function(){ 
     790                                listItemDBIDMatch = re.exec( $(this).attr('name') ); 
     791                                listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10); 
     792                                listItemData = getListDataFromID(listItemDBID); 
    711793 
    712                         for ( i = 0; i < len; i++ ) { 
    713                                 if (    // we're submitting a checked item 
    714                                         inputs[i].name && 
    715                                         -1 != inputs[i].name.indexOf('menu-item-object-id') && 
    716                                         inputs[i].checked || 
    717                                         ( // or we're dealing with a custom link 
    718                                                 'undefined' != typeof inputs[i].id && 
    719                                                 'custom-menu-item-url' == inputs[i].id && 
    720                                                 '' != inputs[i].value && 
    721                                                 'http://' != inputs[i].value 
    722                                         ) 
    723                                 ) { 
    724                                         params['action'] = 'add-menu-item'; 
    725                                         processMethod = that.processAddMenuItemResponse; 
     794                                params = { 
     795                                        'action': 'add-menu-item', 
     796                                        'menu': menu, 
     797                                        'menu-settings-column-nonce': nonce, 
     798                                        'menu-item': {} 
     799                                }; 
    726800 
    727                                         listItemDBIDMatch = re.exec(inputs[i].name); 
    728                                         listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10); 
    729                                         listItemData = getListDataFromID(listItemDBID); 
     801                                params['menu-item'][listItemDBID] = listItemData; 
    730802 
    731                                         for ( j in listItemData ) { 
    732                                                 params['menu-item[' + listItemDBID + '][' + j + ']'] = listItemData[j]; 
    733                                         } 
     803                                $.post( ajaxurl, params, function(menuMarkup) { 
     804                                        processMethod.call(that, menuMarkup, params); 
     805                                }); 
    734806 
    735                                         inputs[i].checked = false; 
    736  
    737                                 // we're submitting a search term 
    738                                 } else if ( 
    739                                         '' == params['action'] && // give precedence to adding items 
    740                                         '' != inputs[i].value && 
    741                                         inputs[i].className && 
    742                                         -1 != inputs[i].className.search(/quick-search\b[^-]/) 
    743                                 ) { 
    744                                         params['action'] = 'menu-quick-search'; 
    745                                         params['q'] = inputs[i].value; 
    746                                         params['response-format'] = 'markup'; 
    747                                         params['type'] = inputs[i].name; 
    748                                         processMethod = that.processQuickSearchQueryResponse; 
    749                                 } 
    750                         } 
    751                         params['menu'] = thisForm.elements['menu'].value; 
    752                         params['menu-settings-column-nonce'] = thisForm.elements['menu-settings-column-nonce'].value; 
    753  
    754                         $.post( ajaxurl, params, function(menuMarkup) { 
    755                                 processMethod.call(that, menuMarkup, params); 
    756                                 $(thisForm).find('img.waiting').hide(); 
     807                                // Uncheck the item 
     808                                $(this).attr('checked', false); 
    757809                        }); 
    758810 
    759                         return false; 
     811                        // Remove the ajax spinner 
     812                        $('#' + id + ' img.waiting').hide(); 
    760813                }, 
    761814 
    762815                /** 
     
    765818                 * @param string menuMarkup The text server response of menu item markup. 
    766819                 * @param object req The request arguments. 
    767820                 */ 
    768                 processAddMenuItemResponse : function( menuMarkup, req ) { 
     821                eventAddMenuItem : function( menuMarkup, req ) { 
    769822                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( targetList ); 
    770  
    771                         /* set custom link form back to defaults */ 
    772                         $('#custom-menu-item-name').val('').blur(); 
    773                         $('#custom-menu-item-url').val('http://'); 
    774823                }, 
    775824 
    776825                /**