Menus: trigger an event when menu items are added or removed.

Fire a `menu-item-added` event after a menu item is added to the DOM. Fire a `menu-removing-item` event before a menu item is removed from the DOM. Enables hooking into and responding to menu changes.

Props welcher, adamsilverstein.
Fixes #31218.


git-svn-id: https://develop.svn.wordpress.org/trunk@39928 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Adam Silverstein
2017-01-20 16:14:23 +00:00
parent 83e7606f76
commit 3a449139db
3 changed files with 105 additions and 5 deletions
+24 -5
View File
@@ -1003,21 +1003,33 @@ var wpNavMenu;
},
/**
* Process the add menu item request response into menu list item.
* Process the add menu item request response into menu list item. Appends to menu.
*
* @param string menuMarkup The text server response of menu item markup.
* @param object req The request arguments.
* @param {string} menuMarkup The text server response of menu item markup.
*
* @fires document#menu-item-added Passes menuMarkup as a jQuery object.
*/
addMenuItemToBottom : function( menuMarkup ) {
$(menuMarkup).hideAdvancedMenuItemFields().appendTo( api.targetList );
var $menuMarkup = $( menuMarkup );
$menuMarkup.hideAdvancedMenuItemFields().appendTo( api.targetList );
api.refreshKeyboardAccessibility();
api.refreshAdvancedAccessibility();
$( document ).trigger( 'menu-item-added', [ $menuMarkup ] );
},
/**
* Process the add menu item request response into menu list item. Prepends to menu.
*
* @param {string} menuMarkup The text server response of menu item markup.
*
* @fires document#menu-item-added Passes menuMarkup as a jQuery object.
*/
addMenuItemToTop : function( menuMarkup ) {
$(menuMarkup).hideAdvancedMenuItemFields().prependTo( api.targetList );
var $menuMarkup = $( menuMarkup );
$menuMarkup.hideAdvancedMenuItemFields().prependTo( api.targetList );
api.refreshKeyboardAccessibility();
api.refreshAdvancedAccessibility();
$( document ).trigger( 'menu-item-added', [ $menuMarkup ] );
},
attachUnsavedChangesListener : function() {
@@ -1243,9 +1255,16 @@ var wpNavMenu;
wrapper.removeClass( 'has-no-menu-item' );
},
/**
* Remove a menu item.
* @param {object} el The element to be removed as a jQuery object.
*
* @fires document#menu-removing-item Passes the element to be removed.
*/
removeMenuItem : function(el) {
var children = el.childMenuItems();
$( document ).trigger( 'menu-removing-item', [ el ] );
el.addClass('deleting').animate({
opacity : 0,
height: 0