2017-03-16 15:29:07 +00:00
/ * *
* @ file
2018-11-23 12:29:20 +00:00
* JavaScript behaviors for message element integration .
2017-03-16 15:29:07 +00:00
* /
( function ( $ , Drupal ) {
'use strict' ;
/ * *
* 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 ;
}
2018-11-23 12:29:20 +00:00
// 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 ) {
2017-03-16 15:29:07 +00:00
$element [ effect ] ( ) ;
setClosed ( $element , storage , id ) ;
$element . trigger ( 'close' ) ;
event . preventDefault ( ) ;
} ) ;
2018-11-23 12:29:20 +00:00
} ) ;
2017-03-16 15:29:07 +00:00
}
} ;
function isClosed ( $element , storage , id ) {
if ( ! id || ! storage ) {
return false ;
}
switch ( storage ) {
case 'local' :
if ( window . localStorage ) {
return localStorage . getItem ( 'Drupal.webform.message.' + id ) || false ;
}
return false ;
case 'session' :
if ( window . sessionStorage ) {
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 ( window . localStorage ) {
localStorage . setItem ( 'Drupal.webform.message.' + id , true ) ;
}
break ;
case 'session' :
if ( window . sessionStorage ) {
sessionStorage . setItem ( 'Drupal.webform.message.' + id , true ) ;
}
break ;
case 'user' :
case 'state' :
2018-11-23 12:29:20 +00:00
case 'custom' :
2017-03-16 15:29:07 +00:00
$ . get ( $element . find ( '.js-webform-message__link' ) . attr ( 'href' ) ) ;
return true ;
}
}
} ) ( jQuery , Drupal ) ;