WordPress.org

Make WordPress Core

Ticket #14045: 14045.diff

File 14045.diff, 6.1 KB (added by lessbloat, 4 months ago)
  • wp-admin/includes/nav-menu.php

     
    8989                <li id="menu-item-<?php echo $item_id; ?>" class="<?php echo implode(' ', $classes ); ?>"> 
    9090                        <dl class="menu-item-bar"> 
    9191                                <dt class="menu-item-handle"> 
    92                                         <span class="item-title"><?php echo esc_html( $title ); ?> <span class="is-submenu" <?php echo $submenu_text; ?>><?php _e( 'sub item' ); ?></span></span> 
     92                                        <span class="item-title"><span class="menu-item-title"><?php echo esc_html( $title ); ?></span> <span class="is-submenu" <?php echo $submenu_text; ?>><?php _e( 'sub item' ); ?></span></span> 
    9393                                        <span class="item-controls"> 
    9494                                                <span class="item-type"><?php echo esc_html( $item->type_label ); ?></span> 
    9595                                                <span class="item-order hide-if-js"> 
  • wp-admin/js/nav-menu.js

     
    5353                        this.initAccessibility(); 
    5454 
    5555                        this.initToggles(); 
     56 
     57                        this.refreshVerbalAccessibility(); 
    5658                }, 
    5759 
    5860                jQueryExtensions : function() { 
     
    264266                        }); 
    265267                }, 
    266268 
     269                countMenuItems : function( depth ) { 
     270                        return $( '.menu-item-depth-' + depth ).length; 
     271                }, 
     272 
     273                refreshVerbalAccessibility : function() { 
     274                        $( '.item-edit' ).each( function() { 
     275                                var $this = $(this), 
     276                                        movement = [], 
     277                                        availableMovement = '', 
     278                                        menuItem = $this.parents( 'li.menu-item' ), 
     279                                        depth = menuItem.menuItemDepth(), 
     280                                        isPrimaryMenuItem = ( 0 === depth ), 
     281                                        itemName = $this.parents( '.menu-item-handle' ).find( '.menu-item-title' ).text(), 
     282                                        position = parseInt( menuItem.index() ), 
     283                                        totalMenuItems = $('#menu-to-edit li').length, 
     284                                        hasSameDepthSibling = menuItem.nextAll( '.menu-item-depth-' + depth ).length; 
     285 
     286                                // Where can they move this menu item? 
     287                                if ( 0 !== position ) 
     288                                        movement.push( 'up' ); 
     289 
     290                                if ( position + 1 !== totalMenuItems && 0 !== position ) 
     291                                        movement.push( 'down' ); 
     292 
     293                                if ( 0 === position && 0 !== hasSameDepthSibling ) 
     294                                        movement.push( 'down' ); 
     295 
     296                                if ( ! isPrimaryMenuItem ) 
     297                                        movement.push( 'left' ); 
     298 
     299                                if ( 0 !== position ) { 
     300                                        if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) 
     301                                                movement.push( 'right' ); 
     302                                } 
     303 
     304                                for ( i=0; i<movement.length; i++ ) { 
     305 
     306                                        if ( 1 !== movement.length && i + 1 === movement.length ) 
     307                                                availableMovement = availableMovement + ' or'; 
     308 
     309                                        availableMovement = availableMovement + ' ' + movement[i] + ','; 
     310                                } 
     311 
     312                                availableMovement = availableMovement.substring(0, availableMovement.length - 1); 
     313 
     314                                if ( isPrimaryMenuItem ) { 
     315                                        var primaryItems = $( '.menu-item-depth-0' ), 
     316                                                itemPosition = primaryItems.index( menuItem ) + 1, 
     317                                                totalMenuItems = primaryItems.length, 
     318 
     319                                                // String together help text for primary menu items 
     320                                                title = itemName + '. ' + api.getGetOrdinal( itemPosition ) + ' of ' + totalMenuItems + ' primary menu items.  Move this item' + availableMovement + '.'; 
     321                                } else { 
     322                                        var parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1 ) ).first(), 
     323                                                parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(), 
     324                                                parentItemName = parentItem.find( '.menu-item-title' ).text(), 
     325                                                subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ), 
     326                                                itemPosition = $(subItems.parents('.menu-item').get().reverse()).index( menuItem ) + 1, 
     327                                                totalMenuItems = subItems.length; 
     328 
     329                                                // String together help text for sub menu items 
     330                                                title = itemName + '. ' + api.getGetOrdinal( itemPosition ) + ' of ' + totalMenuItems + ' subb menu items under ' + parentItemName + '. Move this item' + availableMovement + '.'; 
     331                                } 
     332 
     333                                $this.prop('title', title); 
     334                        }); 
     335                }, 
     336 
     337                getGetOrdinal : function(n) { 
     338                        var s=["th","st","nd","rd"], 
     339                                v=n%100; 
     340                        return n+(s[(v-20)%10]||s[v]||s[0]); 
     341                }, 
     342 
    267343                initAccessibility : function() { 
    268344                        $( '.item-edit' ).off( 'focus' ).on( 'focus', function(){ 
    269345                                $(this).on( 'keydown', function(e){ 
     
    320396                                                if ( thisItemChildren ) { 
    321397                                                        var items = thisItem.add( thisItemChildren ); 
    322398                                                        // Move the entire block 
    323                                                         items.detach().insertBefore( menuItems.eq( newItemPosition ) ); 
     399                                                        items.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId(); 
    324400                                                } else { 
    325                                                         thisItem.detach().insertBefore( menuItems.eq( newItemPosition ) ); 
     401                                                        thisItem.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId(); 
    326402                                                } 
    327403                                                break; 
    328404                                        case 'down': 
     
    341417                                                        if ( menuItemsCount === thisItemPosition + items.length ) 
    342418                                                                break; 
    343419 
    344                                                         items.detach().insertAfter( menuItems.eq( thisItemPosition + items.length ) ); 
     420                                                        items.detach().insertAfter( menuItems.eq( thisItemPosition + items.length ) ).updateParentMenuItemDBId(); 
    345421                                                } else { 
    346422                                                        // If next item has sub items, shift depth 
    347423                                                        if ( 0 !== nextItemChildren.length ) 
     
    350426                                                        // Have we reached the bottom 
    351427                                                        if ( menuItemsCount === thisItemPosition + 1 ) 
    352428                                                                break; 
    353                                                         thisItem.detach().insertAfter( menuItems.eq( thisItemPosition + 1 ) ); 
     429                                                        thisItem.detach().insertAfter( menuItems.eq( thisItemPosition + 1 ) ).updateParentMenuItemDBId(); 
    354430                                                } 
    355431                                                break; 
    356432                                        case 'left': 
     
    358434                                                if ( 0 === thisItemDepth ) 
    359435                                                        break; 
    360436                                                thisItem.shiftHorizontally( -1 ); 
     437                                                $( '#menu-name' ).focus(); 
    361438                                                break; 
    362439                                        case 'right': 
    363440                                                // Can't be sub item at top 
     
    367444                                                if ( thisItemData['menu-item-parent-id'] === prevItemId ) 
    368445                                                        break; 
    369446                                                thisItem.shiftHorizontally( 1 ); 
     447                                                $( '#menu-name' ).focus(); 
    370448                                                break; 
    371449                                        } 
    372450                                        api.registerChange(); 
     451                                        api.refreshVerbalAccessibility(); 
    373452                                        // Put focus back on same menu item 
    374453                                        $( '#edit-' + thisItemData['menu-item-db-id'] ).focus(); 
    375454                                        return false;