File: D:/HostingSpaces/SBogers85/dale-int.com/wwwroot/js/cookieHandler.js
/* ==========================================================================
Cookie handler
- Primary usage for toggling the cookie message and/or switch
========================================================================== */
/*
* Simple isset method for this does not exist in javascript
*/
const isset = function (obj) {
return typeof obj !== 'undefined' && obj !== null;
};
/*
* Cookie helper class
*/
const Cookie = {
set: function (name, value, days) {
let domain, domainParts, date, expires, host;
if (days) {
date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
else {
expires = "";
}
host = location.host;
if (host.split('.').length === 1) {
// no "." in a domain - it's localhost or something similar
document.cookie = name + "=" + value + expires + "; path=/";
}
else {
// Remember the cookie on all sub domains.
//
// Start with trying to set cookie to the top domain.
// (example: if user is on foo.com, try to set
// cookie to domain ".com")
//
// If the cookie will not be set, it means ".com"
// is a top level domain and we need to
// set the cookie to ".foo.com"
domainParts = host.split('.');
domainParts.shift();
domain = '.' + domainParts.join('.');
// For development purpose, remove this when moving to production
// domain = '.komma.pro';
document.cookie = name + "=" + value + expires + "; path=/; domain=" + domain;
// check if cookie was successfuly set to the given domain
// (otherwise it was a Top-Level Domain)
if (Cookie.get(name) == null || Cookie.get(name) != value) {
// append "." to current domain
domain = '.' + host;
document.cookie = name + "=" + value + expires + "; path=/; domain=" + domain;
}
}
},
get: function (name) {
const nameEQ = name + "=";
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
},
erase: function (name) {
Cookie.set(name, '', -1);
}
};
const CookieHandler = {
cookieMessage : null,
cookieSwitch : null,
cookieFadeOutAnimationDuration : 400,
acceptTracking : false,
// Initialize cookie handler
init : function()
{
// Bind cookie message without tracking to Handler
CookieHandler.cookieMessage = document.getElementById('cookie-message');
// If isset init the functions for cookie message without tracking
if(isset(CookieHandler.cookieMessage)){
CookieHandler.initCookieMessageWithoutTracking();
}
else{
// Else try to connect cookie message with tracking to Handler
CookieHandler.cookieMessage = document.getElementById('cookie-message-overlay');
// If isset init the functions for cookie message with tracking
if(isset(CookieHandler.cookieMessage)){
CookieHandler.initCookieMessageWithTracking();
}
}
// If either type of cookie has been found check if settings are defined
if(isset(CookieHandler.cookieMessage)){
CookieHandler.checkForCookieSettings();
}
// Bind cookie switch to Handler
CookieHandler.cookieSwitch = document.getElementById('cookie-switch');
// If isset init the functions for cookie switch
if(isset(CookieHandler.cookieSwitch)){
CookieHandler.initCookieSwitch();
}
},
// Init the cookie message actions without tracking
initCookieMessageWithoutTracking: function(){
const closeButton = CookieHandler.cookieMessage.querySelector('.close-button');
if(isset(closeButton)){
closeButton.addEventListener('click', CookieHandler.closeCookieMessage);
}
},
// Init the cookie message actions with tracking
initCookieMessageWithTracking: function(){
// Open the cookie settings event
const openCookieSettingsButton = CookieHandler.cookieMessage.querySelector('.open-menu');
if(isset(openCookieSettingsButton)){
openCookieSettingsButton.addEventListener('click', CookieHandler.openCookieSettings);
}
// Toggle of the tracking input
const toggleTrackingInputWrapper = CookieHandler.cookieMessage.querySelector('#cookie-settings-menu #trackingCookie');
if(isset(toggleTrackingInputWrapper)){
const toggleTrackingInput = toggleTrackingInputWrapper.querySelector('input');
toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);
if(toggleTrackingInput.checked === true) {
CookieHandler.acceptTracking = true
}
}
// Accept / Save cookies button event
const acceptButton = CookieHandler.cookieMessage.querySelector('.accept-cookie-button');
if(isset(acceptButton)){
acceptButton.addEventListener('click', CookieHandler.setCookieSettings);
}
},
// Init the cookie switch actions
initCookieSwitch: function(){
// Toggle of the tracking input
const toggleTrackingInputWrapper = CookieHandler.cookieSwitch.querySelector('#trackingCookie');
if(isset(toggleTrackingInputWrapper)){
const toggleTrackingInput = toggleTrackingInputWrapper.querySelector('input');
toggleTrackingInput.addEventListener('change', CookieHandler.toggleTrackingSetting);
// Force the state of the cookie switch input because the pop-up is forced on checked
// while the switch checks by php if the cookie really exist or not
if(toggleTrackingInput.checked === true) {
CookieHandler.acceptTracking = true;
}
else{
CookieHandler.acceptTracking = false;
}
}
// Save cookies button event
const saveButton = CookieHandler.cookieSwitch.querySelector('#save-cookie-settings');
if(isset(saveButton)){
saveButton.addEventListener('click', function(){
CookieHandler.cookieFadeOutAnimationDuration = 0; // On the switch click we want no delay :)
CookieHandler.setCookieSettings();
});
}
},
checkForCookieSettings: function(){
if (Cookie.get('cookieMessage')) {
CookieHandler.cookieMessage.classList.add('accepted');
}
else {
CookieHandler.cookieMessage.classList.remove('accepted');
}
},
closeCookieMessage: function (){
Cookie.set('cookieMessage', true, 90);
CookieHandler.cookieMessage.classList.add('transition-out');
},
openCookieSettings: function (){
CookieHandler.cookieMessage.querySelector('#cookie-settings-menu').classList.add('edit');
CookieHandler.cookieMessage.querySelector('#message-description').classList.add('hide');
},
toggleTrackingSetting: function(){
if(CookieHandler.acceptTracking){
CookieHandler.acceptTracking = false;
}
else{
CookieHandler.acceptTracking = true;
}
},
setCookieSettings: function () {
// Set tracking cookie or delete it if isset according to the desired settings
if(CookieHandler.acceptTracking){
Cookie.set('trackingCookieAccepted', 'true', 90);
}
else{
if(Cookie.get('trackingCookieAccepted')){
Cookie.erase('trackingCookieAccepted');
}
}
CookieHandler.closeCookieMessage();
// Reload after animation to automatically trigger the tracking after accepting it
setTimeout(function(){
location.reload()
}, CookieHandler.cookieFadeOutAnimationDuration);
},
};
CookieHandler.init();