PageSourceSearch

https://www.stanleyworks.pl/modules/contrib/webform/js/webform.element.details.toggle.js?tm46jx

js stanleyworks.pl collected 2026-09-30 09:27:02 UTC 4,192 bytes, 121 lines download raw bytes

1/**
2 * @file
3 * JavaScript behaviors for details element.
4 */
5
6(function ($, Drupal, once) {
7
8  'use strict';
9
10  Drupal.webform = Drupal.webform || {};
11  Drupal.webform.detailsToggle = Drupal.webform.detailsToggle || {};
12  Drupal.webform.detailsToggle.options = Drupal.webform.detailsToggle.options || {};
13
14  /**
15   * Attach handler to toggle details open/close state.
16   *
17   * @type {Drupal~behavior}
18   */
19  Drupal.behaviors.webformDetailsToggle = {
20    attach: function (context) {
21      $(once('webform-details-toggle', '.js-webform-details-toggle', context)).each(function () {
22        var $form = $(this);
23        var $tabs = $form.find('.webform-tabs');
24
25        // Get only the main details elements and ignore all nested details.
26        var selector = ($tabs.length) ? '.webform-tab' : '.js-webform-details-toggle, .webform-elements';
27        var $details = $form.find('details').filter(function () {
28          var $parents = $(this).parentsUntil(selector);
29          return ($parents.find('details').length === 0);
30        });
31
32        // Toggle is only useful when there are two or more details elements.
33        if ($details.length < 2) {
34          return;
35        }
36
37        var options = $.extend({
38          button: '<button type="button" class="webform-details-toggle-state"></button>'
39        }, Drupal.webform.detailsToggle.options);
40
41        // Create toggle buttons.
42        var $toggle = $(options.button)
43          .attr('title', Drupal.t('Toggle details widget state.'))
44          .on('click', function (e) {
45            // Get details that are not vertical tabs pane.
46            var $details = $form.find('details:not(.vertical-tabs__pane)');
47            var $summary = $details.find('summary');
48            var open;
49            if (Drupal.webform.detailsToggle.isFormDetailsOpen($form)) {
50              $details.removeAttr('open');
51              $summary.attr('aria-expanded', 'false');
52              open = 0;
53            }
54            else {
55              $details.attr('open', 'open');
56              $summary.attr('aria-expanded', 'true');
57              open = 1;
58            }
59            Drupal.webform.detailsToggle.setDetailsToggleLabel($form);
60
61            // Set the saved states for all the details elements.
62            // @see webform.element.details.save.js
63            if (Drupal.webformDetailsSaveGetName) {
64              $details.each(function () {
65                // Note: Drupal.webformDetailsSaveGetName checks if localStorage
66                // exists and is enabled.
67                // @see webform.element.details.save.js
68                var name = Drupal.webformDetailsSaveGetName($(this));
69                if (name) {
70                  localStorage.setItem(name, open);
71                }
72              });
73            }
74          })
75          .wrap('<div class="webform-details-toggle-state-wrapper"></div>')
76          .parent();
77
78        if ($tabs.length) {
79          // Add toggle state before the tabs.
80          $tabs.find('.item-list:first-child').eq(0).before($toggle);
81        }
82        else {
83          // Add toggle state link to first details element.
84          $details.eq(0).before($toggle);
85        }
86
87        Drupal.webform.detailsToggle.setDetailsToggleLabel($form);
88      });
89    }
90  };
91
92  /**
93   * Determine if a webform's details are all opened.
94   *
95   * @param {jQuery} $form
96   *   A webform.
97   *
98   * @return {boolean}
99   *   TRUE if a webform's details are all opened.
100   */
101  Drupal.webform.detailsToggle.isFormDetailsOpen = function ($form) {
102    return ($form.find('details[open]').length === $form.find('details').length);
103  };
104
105  /**
106   * Set a webform's details toggle state widget label.
107   *
108   * @param {jQuery} $form
109   *   A webform.
110   */
111  Drupal.webform.detailsToggle.setDetailsToggleLabel = function ($form) {
112    var isOpen = Drupal.webform.detailsToggle.isFormDetailsOpen($form);
113
114    var label = (isOpen) ? Drupal.t('Collapse all') : Drupal.t('Expand all');
115    $form.find('.webform-details-toggle-state').html(label);
116
117    var text = (isOpen) ? Drupal.t('All details have been expanded.') : Drupal.t('All details have been collapsed.');
118    Drupal.announce(text);
119  };
120
121})(jQuery, Drupal, once);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.