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);
|