1/** 2 * @file 3 * JavaScript behaviors for message element integration. 4 */ 5 6(function ($, Drupal) { 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 $(context).find('.js-webform-message--close').once('webform-message--close').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 if ($element.attr('style') !== 'display: none;') { 64 $element.show(); 65 } 66 67 $element.find('.js-webform-message__link').on('click', function (event) { 68 $element[effect](); 69 setClosed($element, storage, id); 70 $element.trigger('close'); 71 event.preventDefault(); 72 }); 73 }); 74 } 75 }; 76 77 function isClosed($element, storage, id) { 78 if (!id || !storage) { 79 return false; 80 } 81 82 switch (storage) { 83 case 'local': 84 if (hasLocalStorage) { 85 return localStorage.getItem('Drupal.webform.message.' + id) || false; 86 } 87 return false; 88 89 case 'session': 90 if (hasSessionStorage) { 91 return sessionStorage.getItem('Drupal.webform.message.' + id) || false; 92 } 93 return false; 94 95 default: 96 return false; 97 } 98 } 99 100 function setClosed($element, storage, id) { 101 if (!id || !storage) { 102 return; 103 } 104 105 switch (storage) { 106 case 'local': 107 if (hasLocalStorage) { 108 localStorage.setItem('Drupal.webform.message.' + id, true); 109 } 110 break; 111 112 case 'session': 113 if (hasSessionStorage) { 114 sessionStorage.setItem('Drupal.webform.message.' + id, true); 115 } 116 break; 117 118 case 'user': 119 case 'state': 120 case 'custom': 121 $.get($element.find('.js-webform-message__link').attr('href')); 122 return true; 123 } 124 } 125 126})(jQuery, Drupal);
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.