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