PageSourceSearch

https://dcgary.org/modules/contrib/webform/js/webform.element.message.js?tjxjwj

js dcgary.org collected 2026-09-24 09:38:11 UTC 3,402 bytes, 128 lines download raw bytes

1/**
2 * @file
3 * JavaScript behaviors for message element integration.
4 */
5
6(function ($, Drupal, once) {
7  // Determine if local storage exists and is enabled.
8  // This approach is copied from Modernizr.
9  // @see https://github.com/Modernizr/Modernizr/blob/c56fb8b09515f629806ca44742932902ac145302/modernizr.js#L696-731
10  var hasLocalStorage = (function () {
11    try {
12      localStorage.setItem('webform', 'webform');
13      localStorage.removeItem('webform');
14      return true;
15    }
16    catch (e) {
17      return false;
18    }
19  }());
20
21  // Determine if session storage exists and is enabled.
22  // This approach is copied from Modernizr.
23  // @see https://github.com/Modernizr/Modernizr/blob/c56fb8b09515f629806ca44742932902ac145302/modernizr.js#L696-731
24  var hasSessionStorage = (function () {
25    try {
26      sessionStorage.setItem('webform', 'webform');
27      sessionStorage.removeItem('webform');
28      return true;
29    }
30    catch (e) {
31      return false;
32    }
33  }());
34
35  /**
36   * Behavior for handler message close.
37   *
38   * @type {Drupal~behavior}
39   */
40  Drupal.behaviors.webformMessageClose = {
41    attach(context) {
42      $(once('webform-message--close', '.js-webform-message--close', context)).each(function () {
43        var $element = $(this);
44
45        var id = $element.attr('data-message-id');
46        var storage = $element.attr('data-message-storage');
47        var effect = $element.attr('data-message-close-effect') || 'hide';
48        switch (effect) {
49          case 'slide':
50            effect = 'slideUp';
51            break;
52
53          case 'fade':
54            effect = 'fadeOut';
55            break;
56        }
57
58        // Check storage status.
59        if (isClosed($element, storage, id)) {
60          return;
61        }
62
63        // Only show element if it's style is not set to 'display: none'
64        // and it is not hidden via .js-webform-states-hidden.
65        if ($element.attr('style') !== 'display: none;' && !$element.hasClass('js-webform-states-hidden')) {
66          $element.show();
67        }
68
69        $element.find('.js-webform-message__link').on('click', function (event) {
70          $element[effect]();
71          setClosed($element, storage, id);
72          $element.trigger('close');
73          event.preventDefault();
74        });
75      });
76    }
77  };
78
79  function isClosed($element, storage, id) {
80    if (!id || !storage) {
81      return false;
82    }
83
84    switch (storage) {
85      case 'local':
86        if (hasLocalStorage) {
87          return localStorage.getItem('Drupal.webform.message.' + id) || false;
88        }
89        return false;
90
91      case 'session':
92        if (hasSessionStorage) {
93          return sessionStorage.getItem('Drupal.webform.message.' + id) || false;
94        }
95        return false;
96
97      default:
98        return false;
99    }
100  }
101
102  function setClosed($element, storage, id) {
103    if (!id || !storage) {
104      return;
105    }
106
107    switch (storage) {
108      case 'local':
109        if (hasLocalStorage) {
110          localStorage.setItem('Drupal.webform.message.' + id, true);
111        }
112        break;
113
114      case 'session':
115        if (hasSessionStorage) {
116          sessionStorage.setItem('Drupal.webform.message.' + id, true);
117        }
118        break;
119
120      case 'user':
121      case 'state':
122      case 'custom':
123        $.get($element.find('.js-webform-message__link').attr('href'));
124        return true;
125    }
126  }
127
128})(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.