97 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
/**
 | 
						|
 * @file
 | 
						|
 * Menu UI behaviors.
 | 
						|
 */
 | 
						|
 | 
						|
(function($, Drupal) {
 | 
						|
  /**
 | 
						|
   * Set a summary on the menu link form.
 | 
						|
   *
 | 
						|
   * @type {Drupal~behavior}
 | 
						|
   *
 | 
						|
   * @prop {Drupal~behaviorAttach} attach
 | 
						|
   *   Find the form and call `drupalSetSummary` on it.
 | 
						|
   */
 | 
						|
  Drupal.behaviors.menuUiDetailsSummaries = {
 | 
						|
    attach(context) {
 | 
						|
      $(context)
 | 
						|
        .find('.menu-link-form')
 | 
						|
        .drupalSetSummary(context => {
 | 
						|
          const $context = $(context);
 | 
						|
          if (
 | 
						|
            $context.find('.js-form-item-menu-enabled input').is(':checked')
 | 
						|
          ) {
 | 
						|
            return Drupal.checkPlain(
 | 
						|
              $context.find('.js-form-item-menu-title input').val(),
 | 
						|
            );
 | 
						|
          }
 | 
						|
 | 
						|
          return Drupal.t('Not in menu');
 | 
						|
        });
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  /**
 | 
						|
   * Automatically fill in a menu link title, if possible.
 | 
						|
   *
 | 
						|
   * @type {Drupal~behavior}
 | 
						|
   *
 | 
						|
   * @prop {Drupal~behaviorAttach} attach
 | 
						|
   *   Attaches change and keyup behavior for automatically filling out menu
 | 
						|
   *   link titles.
 | 
						|
   */
 | 
						|
  Drupal.behaviors.menuUiLinkAutomaticTitle = {
 | 
						|
    attach(context) {
 | 
						|
      const $context = $(context);
 | 
						|
      $context.find('.menu-link-form').each(function() {
 | 
						|
        const $this = $(this);
 | 
						|
        // Try to find menu settings widget elements as well as a 'title' field
 | 
						|
        // in the form, but play nicely with user permissions and form
 | 
						|
        // alterations.
 | 
						|
        const $checkbox = $this.find('.js-form-item-menu-enabled input');
 | 
						|
        const $linkTitle = $context.find('.js-form-item-menu-title input');
 | 
						|
        const $title = $this
 | 
						|
          .closest('form')
 | 
						|
          .find('.js-form-item-title-0-value input');
 | 
						|
        // Bail out if we do not have all required fields.
 | 
						|
        if (!($checkbox.length && $linkTitle.length && $title.length)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        // If there is a link title already, mark it as overridden. The user
 | 
						|
        // expects that toggling the checkbox twice will take over the node's
 | 
						|
        // title.
 | 
						|
        if ($checkbox.is(':checked') && $linkTitle.val().length) {
 | 
						|
          $linkTitle.data('menuLinkAutomaticTitleOverridden', true);
 | 
						|
        }
 | 
						|
        // Whenever the value is changed manually, disable this behavior.
 | 
						|
        $linkTitle.on('keyup', () => {
 | 
						|
          $linkTitle.data('menuLinkAutomaticTitleOverridden', true);
 | 
						|
        });
 | 
						|
        // Global trigger on checkbox (do not fill-in a value when disabled).
 | 
						|
        $checkbox.on('change', () => {
 | 
						|
          if ($checkbox.is(':checked')) {
 | 
						|
            if (!$linkTitle.data('menuLinkAutomaticTitleOverridden')) {
 | 
						|
              $linkTitle.val($title.val());
 | 
						|
            }
 | 
						|
          } else {
 | 
						|
            $linkTitle.val('');
 | 
						|
            $linkTitle.removeData('menuLinkAutomaticTitleOverridden');
 | 
						|
          }
 | 
						|
          $checkbox.closest('.vertical-tabs-pane').trigger('summaryUpdated');
 | 
						|
          $checkbox.trigger('formUpdated');
 | 
						|
        });
 | 
						|
        // Take over any title change.
 | 
						|
        $title.on('keyup', () => {
 | 
						|
          if (
 | 
						|
            !$linkTitle.data('menuLinkAutomaticTitleOverridden') &&
 | 
						|
            $checkbox.is(':checked')
 | 
						|
          ) {
 | 
						|
            $linkTitle.val($title.val());
 | 
						|
            $linkTitle.val($title.val()).trigger('formUpdated');
 | 
						|
          }
 | 
						|
        });
 | 
						|
      });
 | 
						|
    },
 | 
						|
  };
 | 
						|
})(jQuery, Drupal);
 |