Skip to content

Commit b6a5496

Browse files
committed
Enhance Nav Menu functionality: Add check for already added menu items and update UI accordingly
1 parent f0a3c68 commit b6a5496

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

src/js/_enqueues/wp/customize/nav-menus.js

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,20 @@
292292
this.doSearch( 1 );
293293
},
294294

295+
isMenuItemAlreadyAdded: function(menuItem) {
296+
if ( ! this.currentMenuControl ) return false;
297+
var objectId = parseInt(menuItem.get('object_id'), 10);
298+
var object = menuItem.get('object');
299+
var type = menuItem.get('type');
300+
301+
return this.currentMenuControl.getMenuItemControls().some(function(control) {
302+
var setting = control.setting();
303+
return parseInt(setting.object_id, 10) === objectId &&
304+
setting.object === object &&
305+
setting.type === type;
306+
});
307+
},
308+
295309
// Get search results.
296310
doSearch: function( page ) {
297311
var self = this, params,
@@ -341,8 +355,21 @@
341355
items = new api.Menus.AvailableItemCollection( data.items );
342356
self.collection.add( items.models );
343357
items.each( function( menuItem ) {
344-
$content.append( itemTemplate( menuItem.attributes ) );
345-
} );
358+
var $item = $( itemTemplate( menuItem.attributes ) );
359+
var inUse = this.currentMenuControl.getMenuItemControls().some( function( control ) {
360+
var setting = control.setting();
361+
return setting.object_id == menuItem.get( 'object_id' ) &&
362+
setting.type === menuItem.get( 'type' ) &&
363+
setting.object === menuItem.get( 'object' );
364+
});
365+
366+
if ( inUse ) {
367+
$item.find( '.menu-item-title' ).addClass( 'in-use' );
368+
}
369+
370+
$content.append( $item );
371+
});
372+
346373
if ( 20 > items.length ) {
347374
self.pages.search = -1; // Up to 20 posts and 20 terms in results, if <20, no more results for either.
348375
} else {
@@ -451,11 +478,20 @@
451478
} else if ( ( 'post_type:page' === name ) && ( ! availableMenuItemContainers[ name ].hasClass( 'open' ) ) ) {
452479
availableMenuItemContainers[ name ].find( '.accordion-section-title > button' ).trigger( 'click' );
453480
}
454-
typeItems = new api.Menus.AvailableItemCollection( typeItems ); // @todo Why is this collection created and then thrown away?
481+
typeItems = new api.Menus.AvailableItemCollection( typeItems );
455482
self.collection.add( typeItems.models );
456483
typeInner = availableMenuItemContainers[ name ].find( '.available-menu-items-list' );
457-
typeItems.each( function( menuItem ) {
458-
typeInner.append( itemTemplate( menuItem.attributes ) );
484+
typeInner.empty();
485+
typeItems.each(function(menuItem) {
486+
var $item = $(itemTemplate(menuItem.attributes));
487+
488+
if (self.isMenuItemAlreadyAdded(menuItem)) {
489+
$item.find('.menu-item-title').addClass('in-use');
490+
} else {
491+
$item.find('.menu-item-title').removeClass('in-use');
492+
}
493+
494+
typeInner.append($item);
459495
} );
460496
self.pages[ name ] += 1;
461497
});
@@ -723,6 +759,11 @@
723759

724760
this.currentMenuControl = menuControl;
725761

762+
// Reset pagination tracking
763+
_.each( api.Menus.data.itemTypes, function( itemType ) {
764+
panel.pages[ itemType.type + ':' + itemType.object ] = 0;
765+
});
766+
726767
this.itemSectionHeight();
727768

728769
if ( api.section.has( 'publish_settings' ) ) {
@@ -745,6 +786,7 @@
745786
this.$el.find( '.selected' ).removeClass( 'selected' );
746787

747788
this.$search.trigger( 'focus' );
789+
this.loadItems( api.Menus.data.itemTypes );
748790
},
749791

750792
// Closes the panel.

src/wp-admin/css/nav-menus.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,10 @@ input.bulk-select-switcher:focus + .bulk-select-button-label {
530530
font-weight: 600;
531531
}
532532

533+
.menu-item-title.in-use {
534+
font-weight: normal;
535+
}
536+
533537
/* Nav Menu */
534538
#menu-container .inside {
535539
padding-bottom: 10px;

0 commit comments

Comments
 (0)