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/SBogers27/dndin.nl/resources/assets/js/site/cookieHandler.js
/* ==========================================================================
   Cookie handler
   - Primary usage for toggling the cookie message and/or switch
 ========================================================================== */

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();