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.