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