WordPress.org

Make WordPress Core

Ticket #13037: 13037.diff

File 13037.diff, 2.0 KB (added by duck_, 4 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" />' );