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