Chris@0: /** Chris@0: * @file Chris@0: * Menu UI admin behaviors. Chris@0: */ Chris@0: Chris@17: (function($, Drupal) { Chris@0: /** Chris@0: * Chris@0: * @type {Drupal~behavior} Chris@0: */ Chris@0: Drupal.behaviors.menuUiChangeParentItems = { Chris@0: attach(context, settings) { Chris@0: const $menu = $('#edit-menu').once('menu-parent'); Chris@0: if ($menu.length) { Chris@0: // Update the list of available parent menu items to match the initial Chris@0: // available menus. Chris@0: Drupal.menuUiUpdateParentList(); Chris@0: Chris@0: // Update list of available parent menu items. Chris@0: $menu.on('change', 'input', Drupal.menuUiUpdateParentList); Chris@0: } Chris@0: }, Chris@0: }; Chris@0: Chris@0: /** Chris@0: * Function to set the options of the menu parent item dropdown. Chris@0: */ Chris@17: Drupal.menuUiUpdateParentList = function() { Chris@0: const $menu = $('#edit-menu'); Chris@0: const values = []; Chris@0: Chris@17: $menu.find('input:checked').each(function() { Chris@0: // Get the names of all checked menus. Chris@0: values.push(Drupal.checkPlain($.trim($(this).val()))); Chris@0: }); Chris@0: Chris@0: $.ajax({ Chris@17: url: `${window.location.protocol}//${window.location.host}${Drupal.url( Chris@17: 'admin/structure/menu/parents', Chris@17: )}`, Chris@0: type: 'POST', Chris@0: data: { 'menus[]': values }, Chris@0: dataType: 'json', Chris@0: success(options) { Chris@0: const $select = $('#edit-menu-parent'); Chris@0: // Save key of last selected element. Chris@0: const selected = $select.val(); Chris@0: // Remove all existing options from dropdown. Chris@0: $select.children().remove(); Chris@0: // Add new options to dropdown. Keep a count of options for testing later. Chris@0: let totalOptions = 0; Chris@17: Object.keys(options || {}).forEach(machineName => { Chris@14: $select.append( Chris@17: $( Chris@17: ``, Chris@17: ) Chris@17: .val(machineName) Chris@17: .text(options[machineName]), Chris@14: ); Chris@14: totalOptions++; Chris@14: }); Chris@0: Chris@0: // Hide the parent options if there are no options for it. Chris@17: $select Chris@17: .closest('div') Chris@17: .toggle(totalOptions > 0) Chris@17: .attr('hidden', totalOptions === 0); Chris@0: }, Chris@0: }); Chris@0: }; Chris@17: })(jQuery, Drupal);