WordPress.org

Make WordPress Core

Ticket #25953: 25953.1.diff

File 25953.1.diff, 18.4 KB (added by atimmer, 6 years ago)
  • src/wp-admin/js/nav-menu.js

     
    88 * @subpackage Administration
    99 */
    1010
     11 /* global menus */
     12 /* global postboxes */
     13 /* global columns */
     14 /* global isRtl */
     15 /* global navMenuL10n */
     16 /* global ajaxurl */
     17
    1118var wpNavMenu;
    1219
    1320(function($) {
    1421
    15         var api = wpNavMenu = {
     22        var api;
    1623
     24        api = wpNavMenu = {
     25
    1726                options : {
    1827                        menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead.
    1928                        globalMaxDepth : 11
     
    111120
    112121                                                // If it has children, move those too
    113122                                                if ( children ) {
    114                                                         children.each(function( index ) {
     123                                                        children.each(function() {
    115124                                                                var t = $(this),
    116125                                                                        thisDepth = t.menuItemDepth(),
    117126                                                                        newDepth = thisDepth + diff;
     
    130139                                        return this.each(function(){
    131140                                                var item = $(this),
    132141                                                        input = item.find( '.menu-item-data-parent-id' ),
    133                                                         depth = parseInt( item.menuItemDepth() ),
     142                                                        depth = parseInt( item.menuItemDepth(), 10 ),
    134143                                                        parentDepth = depth - 1,
    135144                                                        parent = item.prevAll( '.menu-item-depth-' + parentDepth ).first();
    136145
    137                                                 if ( 0 == depth ) { // Item is on the top level, has no parent
     146                                                if ( 0 === depth ) { // Item is on the top level, has no parent
    138147                                                        input.val(0);
    139148                                                } else { // Find the parent item, and retrieve its object id.
    140149                                                        input.val( parent.find( '.menu-item-data-db-id' ).val() );
     
    155164                                 * @param jQuery metabox The metabox jQuery object.
    156165                                 */
    157166                                addSelectedToMenu : function(processMethod) {
    158                                         if ( 0 == $('#menu-to-edit').length ) {
     167                                        if ( 0 === $('#menu-to-edit').length ) {
    159168                                                return false;
    160169                                        }
    161170
    162171                                        return this.each(function() {
    163172                                                var t = $(this), menuItems = {},
    164                                                         checkboxes = ( menus.oneThemeLocationNoMenus && 0 == t.find('.tabs-panel-active .categorychecklist li input:checked').length ) ? t.find('#page-all li input[type="checkbox"]') : t.find('.tabs-panel-active .categorychecklist li input:checked'),
    165                                                         re = new RegExp('menu-item\\[(\[^\\]\]*)');
     173                                                        checkboxes = ( menus.oneThemeLocationNoMenus && 0 === t.find( '.tabs-panel-active .categorychecklist li input:checked' ).length ) ? t.find( '#page-all li input[type="checkbox"]' ) : t.find( '.tabs-panel-active .categorychecklist li input:checked' ),
     174                                                        re = /menu-item\[([^]\]*)/;
    166175
    167176                                                processMethod = processMethod || api.addMenuItemToBottom;
    168177
     
    271280
    272281                moveMenuItem : function( $this, dir ) {
    273282
    274                         var menuItems = $('#menu-to-edit li');
     283                        var menuItems = $('#menu-to-edit li'),
    275284                                menuItemsCount = menuItems.length,
    276285                                thisItem = $this.parents( 'li.menu-item' ),
    277286                                thisItemChildren = thisItem.childMenuItems(),
    278287                                thisItemData = thisItem.getItemData(),
    279                                 thisItemDepth = parseInt( thisItem.menuItemDepth() ),
    280                                 thisItemPosition = parseInt( thisItem.index() ),
     288                                thisItemDepth = parseInt( thisItem.menuItemDepth(), 10 ),
     289                                thisItemPosition = parseInt( thisItem.index(), 10 ),
    281290                                nextItem = thisItem.next(),
    282291                                nextItemChildren = nextItem.childMenuItems(),
    283                                 nextItemDepth = parseInt( nextItem.menuItemDepth() ) + 1,
     292                                nextItemDepth = parseInt( nextItem.menuItemDepth(), 10 ) + 1,
    284293                                prevItem = thisItem.prev(),
    285                                 prevItemDepth = parseInt( prevItem.menuItemDepth() ),
    286                                 prevItemId = prevItem.getItemData()['menu-item-db-id'];
     294                                prevItemDepth = parseInt( prevItem.menuItemDepth(), 10 ),
     295                                prevItemId = prevItem.getItemData()['menu-item-db-id'],
     296                                newItemPosition,
     297                                items,
     298                                newDepth;
    287299
    288300                        switch ( dir ) {
    289301                        case 'up':
    290                                 var newItemPosition = thisItemPosition - 1;
     302                                newItemPosition = thisItemPosition - 1;
    291303
    292304                                // Already at top
    293305                                if ( 0 === thisItemPosition )
     
    303315
    304316                                // Does this item have sub items?
    305317                                if ( thisItemChildren ) {
    306                                         var items = thisItem.add( thisItemChildren );
     318                                        items = thisItem.add( thisItemChildren );
    307319                                        // Move the entire block
    308320                                        items.detach().insertBefore( menuItems.eq( newItemPosition ) ).updateParentMenuItemDBId();
    309321                                } else {
     
    313325                        case 'down':
    314326                                // Does this item have sub items?
    315327                                if ( thisItemChildren ) {
    316                                         var items = thisItem.add( thisItemChildren ),
     328                                        items = thisItem.add( thisItemChildren ),
    317329                                                nextItem = menuItems.eq( items.length + thisItemPosition ),
    318330                                                nextItemChildren = 0 !== nextItem.childMenuItems().length;
    319331
    320332                                        if ( nextItemChildren ) {
    321                                                 var newDepth = parseInt( nextItem.menuItemDepth() ) + 1;
     333                                                newDepth = parseInt( nextItem.menuItemDepth(), 10 ) + 1;
    322334                                                thisItem.moveHorizontally( newDepth, thisItemDepth );
    323335                                        }
    324336
     
    344356                                        break;
    345357                                // Does this item have sub items?
    346358                                if ( thisItemChildren ) {
    347                                         var items = thisItem.add( thisItemChildren );
     359                                        items = thisItem.add( thisItemChildren );
    348360                                        // Move the entire block
    349361                                        items.detach().insertBefore( menuItems.eq( 0 ) ).updateParentMenuItemDBId();
    350362                                } else {
     
    407419
    408420                        $( '.item-edit' ).each( function() {
    409421                                var $this = $(this),
    410                                         movement = [],
    411                                         availableMovement = '',
    412422                                        menuItem = $this.closest( 'li.menu-item' ).first(),
    413423                                        depth = menuItem.menuItemDepth(),
    414424                                        isPrimaryMenuItem = ( 0 === depth ),
    415425                                        itemName = $this.closest( '.menu-item-handle' ).find( '.menu-item-title' ).text(),
    416                                         position = parseInt( menuItem.index() ),
    417                                         prevItemDepth = ( isPrimaryMenuItem ) ? depth : parseInt( depth - 1 ),
     426                                        position = parseInt( menuItem.index(), 10 ),
     427                                        prevItemDepth = ( isPrimaryMenuItem ) ? depth : parseInt( depth - 1, 10 ),
    418428                                        prevItemNameLeft = menuItem.prevAll('.menu-item-depth-' + prevItemDepth).first().find( '.menu-item-title' ).text(),
    419429                                        prevItemNameRight = menuItem.prevAll('.menu-item-depth-' + depth).first().find( '.menu-item-title' ).text(),
    420430                                        totalMenuItems = $('#menu-to-edit li').length,
    421                                         hasSameDepthSibling = menuItem.nextAll( '.menu-item-depth-' + depth ).length;
     431                                        hasSameDepthSibling = menuItem.nextAll( '.menu-item-depth-' + depth ).length,
     432                                        thisLink,
     433                                        thisLinkText,
     434                                        primaryItems,
     435                                        itemPosition,
     436                                        title,
     437                                        parentItem,
     438                                        parentItemId,
     439                                        parentItemName,
     440                                        subItems;
    422441
     442
    423443                                // Where can they move this menu item?
    424444                                if ( 0 !== position ) {
    425                                         var thisLink = menuItem.find( '.menus-move-up' );
     445                                        thisLink = menuItem.find( '.menus-move-up' );
    426446                                        thisLink.prop( 'title', menus.moveUp ).css( 'display', 'inline' );
    427447                                }
    428448
    429449                                if ( 0 !== position && isPrimaryMenuItem ) {
    430                                         var thisLink = menuItem.find( '.menus-move-top' );
     450                                        thisLink = menuItem.find( '.menus-move-top' );
    431451                                        thisLink.prop( 'title', menus.moveToTop ).css( 'display', 'inline' );
    432452                                }
    433453
    434454                                if ( position + 1 !== totalMenuItems && 0 !== position ) {
    435                                         var thisLink = menuItem.find( '.menus-move-down' );
     455                                        thisLink = menuItem.find( '.menus-move-down' );
    436456                                        thisLink.prop( 'title', menus.moveDown ).css( 'display', 'inline' );
    437457                                }
    438458
    439459                                if ( 0 === position && 0 !== hasSameDepthSibling ) {
    440                                         var thisLink = menuItem.find( '.menus-move-down' );
     460                                        thisLink = menuItem.find( '.menus-move-down' );
    441461                                        thisLink.prop( 'title', menus.moveDown ).css( 'display', 'inline' );
    442462                                }
    443463
    444464                                if ( ! isPrimaryMenuItem ) {
    445                                         var thisLink = menuItem.find( '.menus-move-left' ),
    446                                                 thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft );
     465                                        thisLink = menuItem.find( '.menus-move-left' ),
     466                                        thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft );
    447467                                        thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).html( thisLinkText ).css( 'display', 'inline' );
    448468                                }
    449469
    450470                                if ( 0 !== position ) {
    451471                                        if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) {
    452                                                 var thisLink = menuItem.find( '.menus-move-right' ),
    453                                                         thisLinkText = menus.under.replace( '%s', prevItemNameRight );
     472                                                thisLink = menuItem.find( '.menus-move-right' ),
     473                                                thisLinkText = menus.under.replace( '%s', prevItemNameRight );
    454474                                                thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).html( thisLinkText ).css( 'display', 'inline' );
    455475                                        }
    456476                                }
    457477
    458478                                if ( isPrimaryMenuItem ) {
    459                                         var primaryItems = $( '.menu-item-depth-0' ),
    460                                                 itemPosition = primaryItems.index( menuItem ) + 1,
    461                                                 totalMenuItems = primaryItems.length,
     479                                        primaryItems = $( '.menu-item-depth-0' ),
     480                                        itemPosition = primaryItems.index( menuItem ) + 1,
     481                                        totalMenuItems = primaryItems.length,
    462482
    463                                                 // String together help text for primary menu items
    464                                                 title = menus.menuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$d', totalMenuItems );
     483                                        // String together help text for primary menu items
     484                                        title = menus.menuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$d', totalMenuItems );
    465485                                } else {
    466                                         var parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1 ) ).first(),
    467                                                 parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(),
    468                                                 parentItemName = parentItem.find( '.menu-item-title' ).text(),
    469                                                 subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ),
    470                                                 itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1;
     486                                        parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1, 10 ) ).first(),
     487                                        parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(),
     488                                        parentItemName = parentItem.find( '.menu-item-title' ).text(),
     489                                        subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ),
     490                                        itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1;
    471491
    472                                                 // String together help text for sub menu items
    473                                                 title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$s', parentItemName );
     492                                        // String together help text for sub menu items
     493                                        title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$s', parentItemName );
    474494                                }
    475495
    476496                                $this.prop('title', title).html( title );
     
    481501                        $( '.item-edit' ).off( 'focus' ).on( 'focus', function(){
    482502                                $(this).off( 'keydown' ).on( 'keydown', function(e){
    483503
    484                                         var $this = $(this);
     504                                        var $this = $(this),
     505                                                arrows,
     506                                                thisItem = $this.parents( 'li.menu-item' ),
     507                                                thisItemData = thisItem.getItemData();
    485508
    486509                                        // Bail if it's not an arrow key
    487510                                        if ( 37 != e.which && 38 != e.which && 39 != e.which && 40 != e.which )
     
    495518                                                return;
    496519
    497520                                        // If RTL, swap left/right arrows
    498                                         var arrows = { '38' : 'up', '40' : 'down', '37' : 'left', '39' : 'right' };
     521                                        arrows = { '38': 'up', '40': 'down', '37': 'left', '39': 'right' };
    499522                                        if ( $('body').hasClass('rtl') )
    500523                                                arrows = { '38' : 'up', '40' : 'down', '39' : 'left', '37' : 'right' };
    501524
     
    528551                        columns.useCheckboxesForHidden();
    529552                        columns.checked = function(field) {
    530553                                $('.field-' + field).removeClass('hidden-field');
    531                         }
     554                        };
    532555                        columns.unchecked = function(field) {
    533556                                $('.field-' + field).addClass('hidden-field');
    534                         }
     557                        };
    535558                        // hide fields
    536559                        api.menuList.hideAdvancedMenuItemFields();
    537560
     
    553576                                body = $('body'), maxChildDepth,
    554577                                menuMaxDepth = initialMenuMaxDepth();
    555578
    556                         if( 0 != $( '#menu-to-edit li' ).length )
     579                        if( 0 !== $( '#menu-to-edit li' ).length )
    557580                                $( '.drag-instructions' ).show();
    558581
    559582                        // Use the right edge if RTL.
     
    605628                                        tempHolder = ui.placeholder.next();
    606629                                        tempHolder.css( 'margin-top', helperHeight + 'px' ); // Set the margin to absorb the placeholder
    607630                                        ui.placeholder.detach(); // detach or jQuery UI will think the placeholder is a menu item
    608                                         $(this).sortable( "refresh" ); // The children aren't sortable. We should let jQ UI know.
     631                                        $(this).sortable( 'refresh' ); // The children aren't sortable. We should let jQ UI know.
    609632                                        ui.item.after( ui.placeholder ); // reattach the placeholder.
    610633                                        tempHolder.css('margin-top', 0); // reset the margin
    611634
     
    613636                                        updateSharedVars(ui);
    614637                                },
    615638                                stop: function(e, ui) {
    616                                         var children, depthChange = currentDepth - originalDepth;
     639                                        var children, depthChange = currentDepth - originalDepth, subMenuTitle;
    617640
    618641                                        // Return child elements to the list
    619642                                        children = transport.children().insertAfter(ui.item);
    620643
    621644                                        // Add "sub menu" description
    622                                         var subMenuTitle = ui.item.find( '.item-title .is-submenu' );
     645                                        subMenuTitle = ui.item.find( '.item-title .is-submenu' );
    623646                                        if ( 0 < currentDepth )
    624647                                                subMenuTitle.show();
    625648                                        else
    626649                                                subMenuTitle.hide();
    627650
    628651                                        // Update depth classes
    629                                         if( depthChange != 0 ) {
     652                                        if ( 0 !== depthChange ) {
    630653                                                ui.item.updateDepthClass( currentDepth );
    631654                                                children.shiftDepthClass( depthChange );
    632655                                                updateMenuMaxDepth( depthChange );
     
    673696                                        if( nextThreshold && offset.top + helperHeight > nextThreshold ) {
    674697                                                next.after( ui.placeholder );
    675698                                                updateSharedVars( ui );
    676                                                 $(this).sortable( "refreshPositions" );
     699                                                $( this ).sortable( 'refreshPositions' );
    677700                                        }
    678701                                }
    679702                        });
     
    706729                        function initialMenuMaxDepth() {
    707730                                if( ! body[0].className ) return 0;
    708731                                var match = body[0].className.match(/menu-max-depth-(\d+)/);
    709                                 return match && match[1] ? parseInt(match[1]) : 0;
     732                                return match && match[1] ? parseInt( match[1], 10 ) : 0;
    710733                        }
    711734
    712735                        function updateMenuMaxDepth( depthChange ) {
     
    760783                        $('#add-custom-links input[type="text"]').keypress(function(e){
    761784                                if ( e.keyCode === 13 ) {
    762785                                        e.preventDefault();
    763                                         $("#submit-customlinkdiv").click();
     786                                        $( '#submit-customlinkdiv' ).click();
    764787                                }
    765788                        });
    766789                },
     
    779802                                var $t = $(this), title = $t.attr('title'), val = $t.val();
    780803                                $t.data( name, title );
    781804
    782                                 if( '' == val ) $t.val( title );
     805                                if( '' === val ) $t.val( title );
    783806                                else if ( title == val ) return;
    784807                                else $t.removeClass( name );
    785808                        }).focus( function(){
     
    788811                                        $t.val('').removeClass( name );
    789812                        }).blur( function(){
    790813                                var $t = $(this);
    791                                 if( '' == $t.val() )
     814                                if( '' === $t.val() )
    792815                                        $t.addClass( name ).val( $t.data(name) );
    793816                        });
    794817
     
    797820
    798821                attachThemeLocationsListeners : function() {
    799822                        var loc = $('#nav-menu-theme-locations'), params = {};
    800                         params['action'] = 'menu-locations-save';
     823                        params.action = 'menu-locations-save';
    801824                        params['menu-settings-column-nonce'] = $('#menu-settings-column-nonce').val();
    802825                        loc.find('input[type="submit"]').click(function() {
    803826                                loc.find('select').each(function() {
    804827                                        params[this.name] = $(this).val();
    805828                                });
    806829                                loc.find('.spinner').show();
    807                                 $.post( ajaxurl, params, function(r) {
     830                                $.post( ajaxurl, params, function() {
    808831                                        loc.find('.spinner').hide();
    809832                                });
    810833                                return false;
     
    860883
    861884                        processMethod = processMethod || api.addMenuItemToBottom;
    862885
    863                         if ( '' == url || 'http://' == url )
     886                        if ( '' === url || 'http://' == url )
    864887                                return false;
    865888
    866889                        // Show the ajax spinner
     
    889912
    890913                addItemToMenu : function(menuItem, processMethod, callback) {
    891914                        var menu = $('#menu').val(),
    892                                 nonce = $('#menu-settings-column-nonce').val();
     915                                nonce = $('#menu-settings-column-nonce').val(),
     916                                params;
    893917
    894918                        processMethod = processMethod || function(){};
    895919                        callback = callback || function(){};
     
    923947                 * @param string menuMarkup The text server response of menu item markup.
    924948                 * @param object req The request arguments.
    925949                 */
    926                 addMenuItemToBottom : function( menuMarkup, req ) {
     950                addMenuItemToBottom : function( menuMarkup ) {
    927951                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( api.targetList );
    928952                        api.refreshKeyboardAccessibility();
    929953                        api.refreshAdvancedAccessibility();
    930954                },
    931955
    932                 addMenuItemToTop : function( menuMarkup, req ) {
     956                addMenuItemToTop : function( menuMarkup ) {
    933957                        $(menuMarkup).hideAdvancedMenuItemFields().prependTo( api.targetList );
    934958                        api.refreshKeyboardAccessibility();
    935959                        api.refreshAdvancedAccessibility();
     
    940964                                api.registerChange();
    941965                        });
    942966
    943                         if ( 0 != $('#menu-to-edit').length || 0 != $('.menu-location-menus select').length ) {
     967                        if ( 0 !== $('#menu-to-edit').length || 0 !== $('.menu-location-menus select').length ) {
    944968                                window.onbeforeunload = function(){
    945969                                        if ( api.menusChanged )
    946970                                                return navMenuL10n.saveAlert;
     
    10081032                                                        placeholder = document.createElement('div'),
    10091033                                                        wrap = document.createElement('div');
    10101034
    1011                                                         if ( ! metaBoxData['markup'] || ! toReplace )
     1035                                                        if ( ! metaBoxData.markup || ! toReplace )
    10121036                                                                return;
    10131037
    1014                                                         wrap.innerHTML = metaBoxData['markup'] ? metaBoxData['markup'] : '';
     1038                                                        wrap.innerHTML = metaBoxData.markup ? metaBoxData.markup : '';
    10151039
    10161040                                                        toReplace.parentNode.insertBefore( placeholder, toReplace );
    10171041                                                        placeholder.parentNode.removeChild( toReplace );
     
    10341058                        if ( matchedSection && matchedSection[1] ) {
    10351059                                settings = $('#'+matchedSection[1]);
    10361060                                item = settings.parent();
    1037                                 if( 0 != item.length ) {
     1061                                if( 0 !== item.length ) {
    10381062                                        if( item.hasClass('menu-item-edit-inactive') ) {
    10391063                                                if( ! settings.data('menu-item-data') ) {
    10401064                                                        settings.data( 'menu-item-data', settings.getItemData() );
     
    10601084                        return false;
    10611085                },
    10621086
    1063                 eventOnClickMenuSave : function(clickedEl) {
     1087                eventOnClickMenuSave : function() {
    10641088                        var locs = '',
    10651089                        menuName = $('#menu-name'),
    10661090                        menuNameVal = menuName.val();
     
    10811105                        return true;
    10821106                },
    10831107
    1084                 eventOnClickMenuDelete : function(clickedEl) {
     1108                eventOnClickMenuDelete : function() {
    10851109                        // Delete warning AYS
    1086                         if ( confirm( navMenuL10n.warnDeleteMenu ) ) {
     1110                        if ( window.confirm( navMenuL10n.warnDeleteMenu ) ) {
    10871111                                window.onbeforeunload = null;
    10881112                                return true;
    10891113                        }
     
    11081132                        var matched, newID,
    11091133                        takenIDs = {},
    11101134                        form = document.getElementById('nav-menu-meta'),
    1111                         pattern = new RegExp('menu-item\\[(\[^\\]\]*)', 'g'),
     1135                        pattern = /menu-item[(\[^]\]*/,
    11121136                        $items = $('<div>').html(resp).find('li'),
    11131137                        $item;
    11141138
     
    11541178                                        var ins = $('#menu-instructions');
    11551179                                        el.remove();
    11561180                                        children.shiftDepthClass( -1 ).updateParentMenuItemDBId();
    1157                                         if( 0 == $( '#menu-to-edit li' ).length ) {
     1181                                        if ( 0 === $( '#menu-to-edit li' ).length ) {
    11581182                                                $( '.drag-instructions' ).hide();
    11591183                                                ins.removeClass( 'menu-instructions-inactive' );
    11601184                                        }