1
|
|
|
// PARAMETERS |
2
|
|
|
const SCRIPT = document.getElementById('__laravel-cookie-consent-script'); |
3
|
|
|
const COOKIE_CONSENT_NAME = SCRIPT.getAttribute('data-cookie-name'); |
4
|
|
|
const COOKIE_LIFETIME = SCRIPT.getAttribute('data-cookie-lifetime'); |
5
|
|
|
const COOKIE_TYPES = JSON.parse(SCRIPT.getAttribute('data-cookie-types')); |
6
|
|
|
let COOKIE_SELECTED = JSON.parse(SCRIPT.getAttribute('data-cookie-selected')); |
7
|
|
|
const COOKIE_VALUE_YES = "YES"; |
8
|
|
|
const SESSION_SECURE = SCRIPT.getAttribute('data-session-secure'); |
9
|
|
|
const COOKIE_BTN_LABEL_ACCEPT_ALL = SCRIPT.getAttribute('data-button-label-accept-all'); |
10
|
|
|
const COOKIE_BTN_LABEL_ACCEPT_SELECTED = SCRIPT.getAttribute('data-button-label-accept-selected'); |
11
|
|
|
|
12
|
|
|
// ELEMENTS |
13
|
|
|
let cookieBanner = document.getElementById("__cookie-consent"); |
14
|
|
|
let cookieBannerOpenLinks = document.getElementsByClassName("__cookie-consent-open-link"); |
15
|
|
|
let acceptButton = document.getElementById("__cookie-consent-accept"); |
16
|
|
|
let rejectButton = document.getElementById("__cookie-consent-reject"); |
17
|
|
|
let saveChangesButton = document.getElementById("__cookie-consent-save-changes"); |
18
|
|
|
let closeButton = document.getElementById("__cookie-consent-close-button"); |
19
|
|
|
let closeRejectButton = document.getElementById("__cookie-consent-reject-button"); |
20
|
|
|
let manageCookieButton = document.getElementById("manage-cookies-btn"); |
21
|
|
|
let cookieDescriptionModal = document.getElementById("__cookie-descriptions"); |
22
|
|
|
let accordions = document.getElementsByClassName("__cookie-modal-accordion"); |
23
|
|
|
let closeModalButton = document.getElementById("__cookie-info-close-button"); |
24
|
|
|
|
25
|
|
|
// SCRIPT EXECUTION |
26
|
|
|
window.laravelCookieConsent = (function () { |
27
|
|
|
function rejectAllCookies() { |
28
|
|
|
setCookieConsentClose(); |
29
|
|
|
closeCookieDialog(); |
30
|
|
|
refreshPage(); |
31
|
|
|
} |
32
|
|
|
function consentSelectedCookies() { |
33
|
|
|
if(this.textContent === COOKIE_BTN_LABEL_ACCEPT_SELECTED) { |
34
|
|
|
COOKIE_SELECTED.forEach(cookie_name => setCookie(cookie_name, COOKIE_VALUE_YES, COOKIE_LIFETIME)); |
35
|
|
|
} |
36
|
|
|
else { |
37
|
|
|
let allCookieSelected = Object.values(COOKIE_TYPES); |
38
|
|
|
allCookieSelected.forEach(cookie_name => { |
39
|
|
|
if(cookie_name !== 'laravel_cookie_consent_necessary') { |
40
|
|
|
setCookie(cookie_name, COOKIE_VALUE_YES, COOKIE_LIFETIME); |
41
|
|
|
} |
42
|
|
|
}); |
43
|
|
|
} |
44
|
|
|
setCookieConsentClose(); |
45
|
|
|
closeCookieDialog(); |
46
|
|
|
refreshPage(); |
47
|
|
|
} |
48
|
|
|
function saveChangesCookies() { |
49
|
|
|
let allCookies = Object.values(COOKIE_TYPES); |
50
|
|
|
allCookies.forEach(cookie_name => { |
51
|
|
|
if(cookie_name !== 'laravel_cookie_consent_necessary') { |
52
|
|
|
if(COOKIE_SELECTED.includes(cookie_name)) { |
53
|
|
|
setCookie(cookie_name, COOKIE_VALUE_YES, COOKIE_LIFETIME); |
54
|
|
|
} |
55
|
|
|
else { |
56
|
|
|
removeCookie(cookie_name); |
57
|
|
|
} |
58
|
|
|
} |
59
|
|
|
}); |
60
|
|
|
setCookieConsentClose(); |
61
|
|
|
closeCookieDialog(); |
62
|
|
|
refreshPage(); |
63
|
|
|
} |
64
|
|
|
function setCookieConsentClose() { |
65
|
|
|
setCookie(COOKIE_CONSENT_NAME, COOKIE_VALUE_YES, COOKIE_LIFETIME); |
66
|
|
|
} |
67
|
|
|
function cookieExists(name) { |
68
|
|
|
return (document.cookie.split('; ').indexOf(name + '=' + COOKIE_VALUE_YES) !== -1); |
69
|
|
|
} |
70
|
|
|
function closeCookieDialog() { |
71
|
|
|
cookieBanner.classList.add("__cookie-consent-closed"); |
72
|
|
|
} |
73
|
|
|
function openCookieDialog() { |
74
|
|
|
if(cookieBanner.classList.contains('__cookie-consent-closed')) { |
75
|
|
|
cookieBanner.classList.remove("__cookie-consent-closed"); |
76
|
|
|
} |
77
|
|
|
} |
78
|
|
|
function openCookieDescription() { |
79
|
|
|
cookieDescriptionModal.classList.add('open'); |
80
|
|
|
} |
81
|
|
|
function closeCookieDescription() { |
82
|
|
|
cookieDescriptionModal.classList.remove('open'); |
83
|
|
|
} |
84
|
|
|
function toggleAccordion() { |
85
|
|
|
let type = this.dataset.type; |
86
|
|
|
for (let i = 0; i < accordions.length; i++) { |
87
|
|
|
let isOpen = accordions[i].classList.contains('open'); |
88
|
|
|
accordions[i].classList.remove('open'); |
89
|
|
|
if(!isOpen && accordions[i].dataset.type === type) { |
90
|
|
|
accordions[i].classList.add('open'); |
91
|
|
|
} |
92
|
|
|
} |
93
|
|
|
} |
94
|
|
|
function refreshPage() { |
95
|
|
|
location.reload(); |
96
|
|
|
} |
97
|
|
|
function setCookie(name, value, expirationInDays) { |
98
|
|
|
const date = new Date(); |
99
|
|
|
date.setTime(date.getTime() + (expirationInDays * 24 * 60 * 60 * 1000)); |
100
|
|
|
document.cookie = name + '=' + value + ';' + 'expires=' + date.toUTCString() + ';path=/' + (SESSION_SECURE === '1' ? ';secure' : ''); |
101
|
|
|
} |
102
|
|
|
function removeCookie(name) { |
103
|
|
|
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; |
104
|
|
|
} |
105
|
|
|
if(cookieExists(COOKIE_CONSENT_NAME)) { |
106
|
|
|
closeCookieDialog(); |
107
|
|
|
} |
108
|
|
|
if(acceptButton) { acceptButton.addEventListener('click', consentSelectedCookies); } |
109
|
|
|
if(rejectButton) { rejectButton.addEventListener('click', rejectAllCookies); } |
110
|
|
|
if(saveChangesButton) { saveChangesButton.addEventListener('click', saveChangesCookies); } |
111
|
|
|
for (let i = 0; i < cookieBannerOpenLinks.length; i++) { |
112
|
|
|
cookieBannerOpenLinks[i].addEventListener("click", openCookieDialog); |
113
|
|
|
} |
114
|
|
|
if(closeButton) { closeButton.addEventListener('click', closeCookieDialog); } |
115
|
|
|
if(closeRejectButton) { closeRejectButton.addEventListener('click', rejectAllCookies); } |
116
|
|
|
if(closeModalButton) { closeModalButton.addEventListener('click', closeCookieDescription);} |
117
|
|
|
if(manageCookieButton){ manageCookieButton.addEventListener('click', openCookieDescription); } |
118
|
|
|
for (let i = 0; i < accordions.length; i++) { |
119
|
|
|
accordions[i].addEventListener("click", toggleAccordion); |
120
|
|
|
} |
121
|
|
|
return { |
122
|
|
|
consentSelectedCookies: consentSelectedCookies, |
123
|
|
|
rejectAllCookies: rejectAllCookies, |
124
|
|
|
closeCookieDialog: closeCookieDialog, |
125
|
|
|
openCookieDialog: openCookieDialog |
126
|
|
|
}; |
127
|
|
|
})(); |
128
|
|
|
|
129
|
|
|
// CLICK IN THE SINGLE CHECKBOX ACCEPT |
130
|
|
|
const single_checkboxes = document.getElementsByClassName("single_checkbox_accept"); |
131
|
|
|
for (let k = 0; k < single_checkboxes.length; k++) { |
132
|
|
|
single_checkboxes[k].addEventListener("change", function() { |
133
|
|
|
checkSingleCheckbox(this, this.checked); |
134
|
|
|
}); |
135
|
|
|
} |
136
|
|
|
|
137
|
|
|
// CHECK A SINGLE CHECKBOX ACCEPT |
138
|
|
|
function checkSingleCheckbox(element, checked) { |
139
|
|
|
element.checked = checked; |
140
|
|
|
if(checked) { |
141
|
|
|
COOKIE_SELECTED.push(element.value); |
142
|
|
|
} |
143
|
|
|
else { |
144
|
|
|
COOKIE_SELECTED.splice(COOKIE_SELECTED.indexOf(element.value), 1); |
145
|
|
|
} |
146
|
|
|
if(acceptButton) { |
147
|
|
|
if(COOKIE_SELECTED.length > 0) { |
148
|
|
|
acceptButton.textContent = COOKIE_BTN_LABEL_ACCEPT_SELECTED; |
149
|
|
|
} |
150
|
|
|
else { |
151
|
|
|
acceptButton.textContent = COOKIE_BTN_LABEL_ACCEPT_ALL; |
152
|
|
|
} |
153
|
|
|
} |
154
|
|
|
} |
155
|
|
|
|