annotate core/modules/menu_ui/menu_ui.es6.js @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 /**
Chris@0 2 * @file
Chris@0 3 * Menu UI behaviors.
Chris@0 4 */
Chris@0 5
Chris@17 6 (function($, Drupal) {
Chris@0 7 /**
Chris@0 8 * Set a summary on the menu link form.
Chris@0 9 *
Chris@0 10 * @type {Drupal~behavior}
Chris@0 11 *
Chris@0 12 * @prop {Drupal~behaviorAttach} attach
Chris@0 13 * Find the form and call `drupalSetSummary` on it.
Chris@0 14 */
Chris@0 15 Drupal.behaviors.menuUiDetailsSummaries = {
Chris@0 16 attach(context) {
Chris@17 17 $(context)
Chris@17 18 .find('.menu-link-form')
Chris@17 19 .drupalSetSummary(context => {
Chris@17 20 const $context = $(context);
Chris@17 21 if (
Chris@17 22 $context.find('.js-form-item-menu-enabled input').is(':checked')
Chris@17 23 ) {
Chris@17 24 return Drupal.checkPlain(
Chris@17 25 $context.find('.js-form-item-menu-title input').val(),
Chris@17 26 );
Chris@17 27 }
Chris@0 28
Chris@17 29 return Drupal.t('Not in menu');
Chris@17 30 });
Chris@0 31 },
Chris@0 32 };
Chris@0 33
Chris@0 34 /**
Chris@0 35 * Automatically fill in a menu link title, if possible.
Chris@0 36 *
Chris@0 37 * @type {Drupal~behavior}
Chris@0 38 *
Chris@0 39 * @prop {Drupal~behaviorAttach} attach
Chris@0 40 * Attaches change and keyup behavior for automatically filling out menu
Chris@0 41 * link titles.
Chris@0 42 */
Chris@0 43 Drupal.behaviors.menuUiLinkAutomaticTitle = {
Chris@0 44 attach(context) {
Chris@0 45 const $context = $(context);
Chris@17 46 $context.find('.menu-link-form').each(function() {
Chris@0 47 const $this = $(this);
Chris@0 48 // Try to find menu settings widget elements as well as a 'title' field
Chris@0 49 // in the form, but play nicely with user permissions and form
Chris@0 50 // alterations.
Chris@0 51 const $checkbox = $this.find('.js-form-item-menu-enabled input');
Chris@14 52 const $linkTitle = $context.find('.js-form-item-menu-title input');
Chris@17 53 const $title = $this
Chris@17 54 .closest('form')
Chris@17 55 .find('.js-form-item-title-0-value input');
Chris@0 56 // Bail out if we do not have all required fields.
Chris@14 57 if (!($checkbox.length && $linkTitle.length && $title.length)) {
Chris@0 58 return;
Chris@0 59 }
Chris@0 60 // If there is a link title already, mark it as overridden. The user
Chris@0 61 // expects that toggling the checkbox twice will take over the node's
Chris@0 62 // title.
Chris@14 63 if ($checkbox.is(':checked') && $linkTitle.val().length) {
Chris@14 64 $linkTitle.data('menuLinkAutomaticTitleOverridden', true);
Chris@0 65 }
Chris@0 66 // Whenever the value is changed manually, disable this behavior.
Chris@14 67 $linkTitle.on('keyup', () => {
Chris@14 68 $linkTitle.data('menuLinkAutomaticTitleOverridden', true);
Chris@0 69 });
Chris@0 70 // Global trigger on checkbox (do not fill-in a value when disabled).
Chris@0 71 $checkbox.on('change', () => {
Chris@0 72 if ($checkbox.is(':checked')) {
Chris@14 73 if (!$linkTitle.data('menuLinkAutomaticTitleOverridden')) {
Chris@14 74 $linkTitle.val($title.val());
Chris@0 75 }
Chris@17 76 } else {
Chris@14 77 $linkTitle.val('');
Chris@14 78 $linkTitle.removeData('menuLinkAutomaticTitleOverridden');
Chris@0 79 }
Chris@0 80 $checkbox.closest('.vertical-tabs-pane').trigger('summaryUpdated');
Chris@0 81 $checkbox.trigger('formUpdated');
Chris@0 82 });
Chris@0 83 // Take over any title change.
Chris@0 84 $title.on('keyup', () => {
Chris@17 85 if (
Chris@17 86 !$linkTitle.data('menuLinkAutomaticTitleOverridden') &&
Chris@17 87 $checkbox.is(':checked')
Chris@17 88 ) {
Chris@14 89 $linkTitle.val($title.val());
Chris@14 90 $linkTitle.val($title.val()).trigger('formUpdated');
Chris@0 91 }
Chris@0 92 });
Chris@0 93 });
Chris@0 94 },
Chris@0 95 };
Chris@17 96 })(jQuery, Drupal);