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': effect = 'slideUp'; break; 50 51 case 'fade': effect = 'fadeOut'; break; 52 } 53 54 // Check storage status. 55 if (isClosed($element, storage, id)) { 56 return; 57 } 58 59 // Only show element if it's style is not set to 'display: none' 60 // and it is not hidden via .js-webform-states-hidden. 61 if ($element.attr('style') !== 'display: none;' && !$element.hasClass('js-webform-states-hidden')) { 62 $element.show(); 63 } 64 65 $element.find('.js-webform-message__link').on('click', function (event) { 66 $element[effect](); 67 setClosed($element, storage, id); 68 $element.trigger('close'); 69 event.preventDefault(); 70 }); 71 }); 72 } 73 }; 74 75 function isClosed($element, storage, id) { 76 if (!id || !storage) { 77 return false; 78 } 79 80 switch (storage) { 81 case 'local': 82 if (hasLocalStorage) { 83 return localStorage.getItem('Drupal.webform.message.' + id) || false; 84 } 85 return false; 86 87 case 'session': 88 if (hasSessionStorage) { 89 return sessionStorage.getItem('Drupal.webform.message.' + id) || false; 90 } 91 return false; 92 93 default: 94 return false; 95 } 96 } 97 98 function setClosed($element, storage, id) { 99 if (!id || !storage) { 100 return; 101 } 102 103 switch (storage) { 104 case 'local': 105 if (hasLocalStorage) { 106 localStorage.setItem('Drupal.webform.message.' + id, true); 107 } 108 break; 109 110 case 'session': 111 if (hasSessionStorage) { 112 sessionStorage.setItem('Drupal.webform.message.' + id, true); 113 } 114 break; 115 116 case 'user': 117 case 'state': 118 case 'custom': 119 $.get($element.find('.js-webform-message__link').attr('href')); 120 return true; 121 } 122 } 123 124})(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.