WordPress.org

Make WordPress Core

Ticket #13037: 13037.diff

File 13037.diff, 2.0 KB (added by duck_, 8 years ago)
  • wp-admin/js/nav-menu.dev.js

     
    193193                                accept: '.menu li',
    194194                                tolerance: 'pointer',
    195195                                drop: function(e, ui) {
    196                                         var li = $(this).parent();
    197                                         var child = !$(this).hasClass('dropzone');
     196                                        var li = $(this).parent(), child = !$(this).hasClass('dropzone');
     197                                       
     198                                        if ( child || $(this).parents().is('.sub-menu') ) {
     199                                                var same_id = false, child_ids = ui.draggable.find('input[name=menu-item-object-id[]]').map( function() {
     200                                                        return $(this).val();
     201                                                }), parent_ids = $(this).parents('li:last').find('input[name=menu-item-object-id[]]').map( function() {
     202                                                        return $(this).val();
     203                                                });
     204                                               
     205                                                $.each(parent_ids, function(i, v) {
     206                                                        if ( $.inArray(v, child_ids) != -1 ) {
     207                                                                same_id = true;
     208                                                                return false;
     209                                                        }
     210                                                });
    198211
    199                                         var parent_id = li.children('input[name=menu-item-object-id[]]').val();
    200                                         var child_id = ui.draggable.children('input[name=menu-item-object-id[]]').val();
     212                                                // An item cannot be a (grand)child of itself. Use a custom link for the effect.
     213                                                if ( same_id ) {
     214                                                        ui.draggable.find('dt').animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { $(this).css( 'backgroundColor', '' ) } } );
     215                                                        if ( child )
     216                                                                li.find('dt').removeAttr('style');
     217                                                        else
     218                                                                $(this).removeAttr('style');
     219                                                        return;
     220                                                };
     221                                        }
    201222 
    202                                         // An item cannot be a child of itself. Use a custom link for the effect.
    203                                         if ( parent_id == child_id ) {
    204                                                 ui.draggable.find('dt').animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { $(this).css( 'backgroundColor', '' ) } } );
    205                                                 $(this).parent().find('dt').removeAttr('style');
    206                                                 return;
    207                                         };
    208  
    209223                                        // Append UL to first child
    210224                                        if ( child && li.children('ul').length == 0 ) {
    211225                                                li.append( '<ul class="sub-menu" />' );