127 lines
3.3 KiB
JavaScript
127 lines
3.3 KiB
JavaScript
/**
|
|
* @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'
|
|
// and it is not hidden via .js-webform-states-hidden.
|
|
if ($element.attr('style') !== 'display: none;' && !$element.hasClass('js-webform-states-hidden')) {
|
|
$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);
|