/**
* @file
* jQuery code.
* Based on code: Adrian "yEnS" Mato Gondelle, twitter: @adrianmg
* Modifications for Drupal: Grzegorz Bartman grzegorz.bartman@openbit.pl
* Pawel Gorski gp@gorskipawel.pl
*/
(function ($, Drupal, drupalSettings) {
'use strict';
let popupStatus = 0;
/**
* Loading popup with jQuery.
*/
function popup_message_load_popup() {
// Loads json with modal settings
$.getJSON('/popup_message/status?popup_path=' + window.location.pathname, function (json) {
if (json.status === 1) {
jQuery('#popup-message-background').css({
opacity: drupalSettings.popupMessage.cover_opacity + '%'
});
jQuery('#popup-message-background').fadeIn('slow');
jQuery('#popup-message-wrapper').fadeIn('slow');
popupStatus = 1;
// Set cookie
var timestamp = (+new Date());
let ttl = parseInt(drupalSettings.popupMessage.expire);
if (ttl > 0) {
jQuery.cookie('popup_message_displayed', timestamp, {path: '/', expires: ttl});
}
else {
jQuery.cookie('popup_message_displayed', timestamp, {path: '/'});
}
}
});
}
/**
* Disabling popup with jQuery.
*/
function popup_message_disable_popup() {
// Disables popup only if it is enabled.
if (popupStatus === 1) {
jQuery('#popup-message-background').fadeOut('slow');
jQuery('#popup-message-wrapper').fadeOut('slow');
jQuery('#popup-message-content').empty().remove();
popupStatus = 0;
}
}
/**
* Centering popup
*
* @param {number} width
* Width css attribute.
* @param {number} height
* Height css attribute.
*/
function popup_message_center_popup(width, height) {
// Request data for centering.
let windowHeight = document.documentElement.clientHeight;
var popupWidth = 0;
if (typeof width === 'undefined') {
popupWidth = $('#popup-message-window').width();
}
else {
popupWidth = width;
}
var popupHeight = 0;
if (typeof width === 'undefined') {
popupHeight = $('#popup-message-window').height();
}
else {
popupHeight = height;
}
// Centering.
jQuery('#popup-message-window').css({
position: 'absolute',
width: popupWidth + 'px',
height: popupHeight + 'px'
});
// Only need force for IE6.
jQuery('#popup-message-background').css({
height: windowHeight
});
}
/**
* Display popup message.
*
* @param {string} popup_message_title
* Message title.
* @param {string} popup_message_body
* Message body.
* @param {number} width
* Message box width.
* @param {number} height
* Message box height.
*/
function popup_message_display_popup(popup_message_title, popup_message_body, width, height) {
jQuery('body')
.append("
");
// Loading popup.
popup_message_center_popup(width, height);
popup_message_load_popup();
// Closing popup.
// Click the x event!
jQuery('#popup-message-close').click(function () {
popup_message_disable_popup();
});
// Click out event!
jQuery('#popup-message-background').click(function () {
popup_message_disable_popup();
});
// Press Escape event!
jQuery(document).keypress(function (e) {
if (e.keyCode === 27 && popupStatus === 1) {
popup_message_disable_popup();
}
});
}
/**
* Helper function for get last element from object.
* Used if on page is loaded more than one message.
*
* @param {Object} variable_data
* Check_cookie data.
*
* @return {*}
* Last object item.
*/
function popup_message_get_last_object_item(variable_data) {
if (typeof (variable_data) === 'object') {
variable_data = variable_data[(variable_data.length - 1)];
}
return variable_data;
}
Drupal.behaviors.popupMessage = {
attach: function () {
let timestamp = (+new Date());
let check_cookie = drupalSettings.popupMessage.check_cookie;
check_cookie = popup_message_get_last_object_item(check_cookie);
let popup_message_cookie = jQuery.cookie('popup_message_displayed');
let delay = drupalSettings.popupMessage.delay * 1000;
let close_delay = drupalSettings.popupMessage.close_delay * 1000;
let show_popup = true;
if (!popup_message_cookie || check_cookie === 0) {
show_popup = true;
}
else {
popup_message_cookie = parseInt(popup_message_cookie, 10);
show_popup = timestamp < popup_message_cookie + delay;
}
if (show_popup) {
let run_popup = function () {
// Get variables.
let popup_message_title = drupalSettings.popupMessage.title;
let popup_message_body = drupalSettings.popupMessage.body;
let popup_message_width = drupalSettings.popupMessage.width;
let popup_message_height = drupalSettings.popupMessage.height;
popup_message_title = popup_message_get_last_object_item(popup_message_title);
popup_message_body = popup_message_get_last_object_item(popup_message_body);
popup_message_width = popup_message_get_last_object_item(popup_message_width);
popup_message_height = popup_message_get_last_object_item(popup_message_height);
popup_message_display_popup(
popup_message_title,
popup_message_body,
popup_message_width,
popup_message_height);
};
let trigger_time = delay;
setTimeout(run_popup, trigger_time);
// Auto close
if (close_delay > 0) {
let close_popup = function () {
popup_message_disable_popup();
};
let close_trigger_time = trigger_time + close_delay;
setTimeout(close_popup, close_trigger_time);
}
}
}
};
})(jQuery, Drupal, drupalSettings);