123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /**
- * @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);
|