HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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();