WordPress.org

Make WordPress Core

Ticket #13220: nav_menu_js.3.diff

File nav_menu_js.3.diff, 7.4 KB (added by koopersmith, 8 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                /**