diff -r c7c34916027a -r 177826044cd9 wp/wp-admin/js/nav-menu.js --- a/wp/wp-admin/js/nav-menu.js Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-admin/js/nav-menu.js Mon Oct 14 18:28:13 2019 +0200 @@ -6,17 +6,21 @@ * * @package WordPress * @subpackage Administration + * @output wp-admin/js/nav-menu.js */ -/* global menus, postboxes, columns, isRtl, navMenuL10n, ajaxurl */ - -var wpNavMenu; +/* global menus, postboxes, columns, isRtl, navMenuL10n, ajaxurl, wpNavMenu */ (function($) { var api; - api = wpNavMenu = { + /** + * Contains all the functions to handle WordPress navigation menus administration. + * + * @namespace wpNavMenu + */ + api = window.wpNavMenu = { options : { menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead. @@ -167,6 +171,8 @@ /** * Adds selected menu items to the menu. * + * @ignore + * * @param jQuery metabox The metabox jQuery object. */ addSelectedToMenu : function(processMethod) { @@ -829,6 +835,20 @@ } } }); + + $( '#menu-name' ).on( 'input', _.debounce( function () { + var menuName = $( document.getElementById( 'menu-name' ) ), + menuNameVal = menuName.val(); + + if ( ! menuNameVal || ! menuNameVal.replace( /\s+/, '' ) ) { + // Add warning for invalid menu name. + menuName.parent().addClass( 'form-invalid' ); + } else { + // Remove warning for valid menu name. + menuName.parent().removeClass( 'form-invalid' ); + } + }, 500 ) ); + $('#add-custom-links input[type="text"]').keypress(function(e){ $('#customlinkdiv').removeClass('form-invalid'); @@ -867,26 +887,14 @@ }, attachQuickSearchListeners : function() { - var searchTimer, - inputEvent; + var searchTimer; // Prevent form submission. $( '#nav-menu-meta' ).on( 'submit', function( event ) { event.preventDefault(); }); - /* - * Use feature detection to determine whether inputs should use - * the `keyup` or `input` event. Input is preferred but lacks support - * in legacy browsers. See changeset 34078, see also ticket #26600#comment:59 - */ - if ( 'oninput' in document.createElement( 'input' ) ) { - inputEvent = 'input'; - } else { - inputEvent = 'keyup'; - } - - $( '#nav-menu-meta' ).on( inputEvent, '.quick-search', function() { + $( '#nav-menu-meta' ).on( 'input', '.quick-search', function() { var $this = $( this ); $this.attr( 'autocomplete', 'off' ); @@ -936,7 +944,7 @@ }, addCustomLink : function( processMethod ) { - var url = $('#custom-menu-item-url').val(), + var url = $('#custom-menu-item-url').val().trim(), label = $('#custom-menu-item-name').val(); processMethod = processMethod || api.addMenuItemToBottom; @@ -1172,8 +1180,8 @@ menuName = $('#menu-name'), menuNameVal = menuName.val(); // Cancel and warn if invalid menu name - if( !menuNameVal || menuNameVal == menuName.attr('title') || !menuNameVal.replace(/\s+/, '') ) { - menuName.parent().addClass('form-invalid'); + if ( ! menuNameVal || ! menuNameVal.replace( /\s+/, '' ) ) { + menuName.parent().addClass( 'form-invalid' ); return false; } // Copy menu theme locations