/** * @file * JavaScript behaviors for message element integration. */ (function ($, Drupal) { 'use strict'; // Determine if local storage exists and is enabled. // This approach is copied from Modernizr. // @see https://github.com/Modernizr/Modernizr/blob/c56fb8b09515f629806ca44742932902ac145302/modernizr.js#L696-731 var hasLocalStorage = (function () { try { localStorage.setItem('webform', 'webform'); localStorage.removeItem('webform'); return true; } catch (e) { return false; } }()); // Determine if session storage exists and is enabled. // This approach is copied from Modernizr. // @see https://github.com/Modernizr/Modernizr/blob/c56fb8b09515f629806ca44742932902ac145302/modernizr.js#L696-731 var hasSessionStorage = (function () { try { sessionStorage.setItem('webform', 'webform'); sessionStorage.removeItem('webform'); return true; } catch (e) { return false; } }()); /** * Behavior for handler message close. * * @type {Drupal~behavior} */ Drupal.behaviors.webformMessageClose = { attach: function (context) { $(context).find('.js-webform-message--close').once('webform-message--close').each(function () { var $element = $(this); var id = $element.attr('data-message-id'); var storage = $element.attr('data-message-storage'); var effect = $element.attr('data-message-close-effect') || 'hide'; switch (effect) { case 'slide': effect = 'slideUp'; break; case 'fade': effect = 'fadeOut'; break; } // Check storage status. if (isClosed($element, storage, id)) { return; } // Only show element if it's style is not set to 'display: none'. if ($element.attr('style') !== 'display: none;') { $element.show(); } $element.find('.js-webform-message__link').on('click', function (event) { $element[effect](); setClosed($element, storage, id); $element.trigger('close'); event.preventDefault(); }); }); } }; function isClosed($element, storage, id) { if (!id || !storage) { return false; } switch (storage) { case 'local': if (hasLocalStorage) { return localStorage.getItem('Drupal.webform.message.' + id) || false; } return false; case 'session': if (hasSessionStorage) { return sessionStorage.getItem('Drupal.webform.message.' + id) || false; } return false; default: return false; } } function setClosed($element, storage, id) { if (!id || !storage) { return; } switch (storage) { case 'local': if (hasLocalStorage) { localStorage.setItem('Drupal.webform.message.' + id, true); } break; case 'session': if (hasSessionStorage) { sessionStorage.setItem('Drupal.webform.message.' + id, true); } break; case 'user': case 'state': case 'custom': $.get($element.find('.js-webform-message__link').attr('href')); return true; } } })(jQuery, Drupal);