Files
kupshop/web/common/static/wpj/wpj.cookiebar.js
2025-08-02 16:30:27 +02:00

191 lines
5.2 KiB
JavaScript

/* global gtag */
// let initialized = false;
// CookieBar.initialized;
var CookieBar = {
initialized: false,
init: function() {
if (CookieBar.initialized) {
return;
}
CookieBar.initialized = true;
this._create();
var me = this;
$('[data-cookie-bar=open]').click(function() {
me.getSimple().hide();
me.getAdvanced().show();
me._show();
return false;
});
// show advanced
this.getSimple()
.find('[data-cookie-bar=details]')
.click(function() {
if (me.getCookieBar().data('cookiebar-preselect') === 'y') {
me.preselectAll();
}
me.getSimple().hide();
me.getAdvanced().show();
return false;
});
// simple accept
this.getSimple()
.find('[data-cookie-bar=simpleAccept]')
.click(function() {
me.simpleAccept();
return false;
});
// simple reject
this.getSimple()
.find('[data-cookie-bar="reject"]')
.click(function() {
me.customAccept(false);
return false;
})
// advanced accept
this.getAdvanced()
.find('[data-cookie-bar=advancedAccept]')
.click(function() {
me.advancedAccept();
return false;
});
// select all / deselect all
this.getAdvanced()
.find('[data-cookie-bar="custom"]')
.click(function() {
me.customAccept($(this).data('cookie-custom') === 'allow-all');
return false;
});
},
getCookieBar: function() {
return $('#cookieBara');
},
getSimple: function() {
return this.getCookieBar().find('[data-cookie-bar="simple"]');
},
getAdvanced: function() {
return this.getCookieBar().find('[data-cookie-bar="advanced"]');
},
getAdvancedCheckbox: function() {
return this.getAdvanced().find('input[name=social-media]');
},
_create: function() {
let cookieBar = this._getCookies().getItem('cookie-bar');
if (cookieBar === null) {
this.getAdvanced().hide();
this._show();
} else if (cookieBar == 1) {
CookieBar.simpleAccept();
} else {
let storages = cookieBar.split(',');
$('input[value="ad_storage"]').prop('checked', storages.includes('ad_storage'));
$('input[value="personalization_and_functionality_storage"]')
.prop('checked', storages.includes('personalization_and_functionality_storage'));
$('input[value="analytics_storage"]').prop('checked', storages.includes('analytics_storage'));
}
},
_getCookies: function() {
return wpj.storage.cookies;
},
_setCookieBar: function(value) {
let date = new Date();
date.setMonth(date.getMonth() + (value ? 12 : 6));
this._getCookies().setItem('cookie-bar', value, date);
},
_isFocus: function() {
return !!this.getCookieBar().closest('.focus.focus-cookiebara').length;
},
_show: function() {
if (this._isFocus()) {
var $focus = $('.focus.focus-cookiebara');
$focus.focus({
addBodyPadding: true,
closeOnBgClick: false
});
$focus.focus('show');
} else {
this.getCookieBar().show();
}
},
_close: function() {
if (this._isFocus()) {
var $focus = $('.focus.focus-cookiebara.active');
$focus.focus('hide');
} else {
this.getCookieBar().hide();
}
},
preselectAll: function() {
this.getAdvanced().find('input:checkbox[name=social-media]').each(function() {
$(this).prop('checked', true);
});
},
simpleAccept: function() {
const $this = this;
setTimeout(function() {
$this.preselectAll();
CookieBar.advancedAccept();
}, 100);
this._close();
},
customAccept: function(isAllowed) {
this.getAdvanced().find('input:enabled').prop('checked', isAllowed);
CookieBar.advancedAccept();
},
advancedAccept: function() {
let consents = [];
$('input:checkbox[name=social-media]:checked').each(function() {
consents.push($(this).val());
});
if (window.wpj.cookie_bar_send) {
let consents_props = {
ad_storage: consents.includes('ad_storage') ? 'granted' : 'denied',
ad_user_data: consents.includes('ad_storage') ? 'granted' : 'denied',
ad_personalization: consents.includes('ad_storage') ? 'granted' : 'denied',
personalization_storage: consents.includes('personalization_and_functionality_storage') ? 'granted' : 'denied',
functionality_storage: 'granted',
analytics_storage: consents.includes('analytics_storage') ? 'granted' : 'denied'
}
gtag('consent', 'update', consents_props);
dataLayer.push({'event': 'kupshopConsentsChange', 'consents': consents_props});
}
this._setCookieBar(consents.length ? consents : 0);
document.dispatchEvent(new CustomEvent("consentsChange"));
this._close();
}
};
$(window).on('load', function() {
CookieBar.init();
});
wpj.onReady.push(function() {
CookieBar.init();
});