1 2//Cookie Opt-In Einstellungen 3var optInCookieName = "ris_cookie_setting"; 4var cookieStringForAllAccepted = "-1"; 5var linkToHandler = envurl + "system/web/cookie.ashx?sprachid=" + rissprachid; 6 7//Initialisierungs Funktionen 8function isRunningInIframe() { 9 return window.self !== window.top; 10} 11function initCookieOptInIfCookieNotExists() { 12 if (!doesCookieExist(optInCookieName)) { 13 initCookieOptIn(); 14 } 15} 16 17function initCookieOptIn() { 18 fetch(linkToHandler) 19 .then(response => response.json()) 20 .then(data => { 21 buildModal(data); 22 }) 23 .catch(error => console.error('Error fetching cookie data:', error)); 24} 25 26//Build Funktionen 27function buildModal(dataJson) { 28 var textJson = dataJson.texts[0]; 29 var linkJson = dataJson.links[0]; 30 var cookieJson = dataJson.cookies[0]; 31 32 var cookieOverlay = document.createElement("div"); 33 cookieOverlay.className = "bemCookieOverlay defaultfontsize"; 34 35 var cookieOverlayBackdrop = document.createElement("div"); 36 cookieOverlayBackdrop.className = "bemCookieOverlay__backdrop"; 37 38 var cookieOverlayOuterWrapper = document.createElement("div"); 39 cookieOverlayOuterWrapper.className = "bemCookieOverlay__boxOuterWrapper"; 40 41 var cookieOverlayInnerWrapper = document.createElement("div"); 42 cookieOverlayInnerWrapper.className = "bemCookieOverlay__boxInnerWrapper"; 43 44 var boxView = buildBoxView(textJson, linkJson, cookieJson); 45 var prefView = buildPreferenceView(textJson, linkJson, cookieJson); 46 47 cookieOverlayInnerWrapper.appendChild(boxView); 48 cookieOverlayInnerWrapper.appendChild(prefView); 49 cookieOverlayOuterWrapper.appendChild(cookieOverlayInnerWrapper); 50 cookieOverlayBackdrop.appendChild(cookieOverlayOuterWrapper); 51 cookieOverlay.appendChild(cookieOverlayBackdrop); 52 53 document.body.appendChild(cookieOverlay); 54 document.body.classList.add("bemCookieOverlay--activePopup"); 55 56 document.addEventListener("keydown", function (e) { 57 if (e.keyCode == 27) { 58 if (document.body.classList.contains("bemCookieOverlay--activePopup")) { 59 document.querySelector(".bemCookieOverlay").remove(); 60 document.body.classList.remove("bemCookieOverlay--activePopup"); 61 } 62 } 63 }); 64 65 initAccessibilityImprovements(boxView, prefView); 66 initCookieSettings(boxView, prefView, optInCookieName); 67} 68 69function buildBoxView(textJson, linkJson, cookieJson) { 70 var boxView = document.createElement("div"); 71 boxView.className = "bemCookieOverlay__cookieBox"; 72 73 var boxViewContainer = document.createElement("div"); 74 boxViewContainer.className = "bemCookieOverlay__container bemCookieOverlay__container--visible"; 75 76 var boxViewContainerRow = document.createElement("div"); 77 boxViewContainerRow.className = "bemCookieOverlay__row"; 78 79 var boxViewContainerCol = document.createElement("div"); 80 boxViewContainerCol.className = "bemCookieOverlay__col bemCookieOverlay__col--100"; 81 82 var boxViewHeading = document.createElement("div"); 83 boxViewHeading.className = "bemCookieOverlay__heading"; 84 var heading = document.createElement("h3"); 85 heading.textContent = textJson.title; 86 boxViewHeading.appendChild(heading); 87 88 var boxViewDescription = document.createElement("p"); 89 boxViewDescription.className = "bemCookieOverlay__description"; 90 boxViewDescription.textContent = textJson.desc_short; 91 92 var boxViewCookieSelection = buildCookieGroupSelection(textJson, cookieJson); 93 94 var boxViewButtons = document.createElement("p"); 95 boxViewButtons.className = "bemCookieOverlay__cookieAcceptance bemCookieOverlay__cookieAcceptance--centered"; 96 97 var acceptAllButton = document.createElement("a"); 98 acceptAllButton.className = "bemCookieOverlay__btn bemCookieOverlay__btn--100 bemCookieOverlay__btn--acceptAll"; 99 acceptAllButton.textContent = textJson.btn_acceptAll; 100 acceptAllButton.addEventListener("click", function () { saveCookieSettings(this, true); }); 101 102 var saveButton = document.createElement("a"); 103 saveButton.className = "bemCookieOverlay__btn bemCookieOverlay__btn--100 bemCookieOverlay__btn--save"; 104 saveButton.textContent = textJson.btn_save; 105 saveButton.addEventListener("click", function () { saveCookieSettings(this, false); }); 106 107 boxViewButtons.appendChild(acceptAllButton); 108 boxViewButtons.appendChild(saveButton); 109 110 var boxViewCookieDetailLink = document.createElement("p"); 111 boxViewCookieDetailLink.className = "bemCookieOverlay__cookieManage"; 112 113 var manageLink = document.createElement("a"); 114 manageLink.className = "bemCookieOverlay__cookieManageLink"; 115 manageLink.textContent = textJson.individual_cookie_settings; 116 manageLink.addEventListener("click", function () { switchCookieBoxView(); }); 117 118 boxViewCookieDetailLink.appendChild(manageLink); 119 120 var boxViewLegals = document.createElement("p"); 121 boxViewLegals.className = "bemCookieOverlay__cookieLegals"; 122 123 var privacyStatementLink = document.createElement("a"); 124 privacyStatementLink.className = "bemCookieOverlay__cookiePrivacyStatement"; 125 privacyStatementLink.href = linkJson.privacy_statement; 126 privacyStatementLink.textContent = textJson.privacy_statement; 127 128 var separator = document.createElement("span"); 129 separator.className = "bemCookieOverlay__seperator"; 130 131 var imprintLink = document.createElement("a"); 132 imprintLink.className = "bemCookieOverlay__cookieImprint"; 133 imprintLink.href = linkJson.imprint; 134 imprintLink.textContent = textJson.imprint; 135 136 boxViewLegals.appendChild(privacyStatementLink); 137 boxViewLegals.appendChild(separator); 138 boxViewLegals.appendChild(imprintLink); 139 140 boxViewContainerCol.appendChild(boxViewHeading); 141 boxViewContainerCol.appendChild(boxViewDescription); 142 boxViewContainerCol.appendChild(boxViewCookieSelection); 143 boxViewContainerCol.appendChild(boxViewButtons); 144 boxViewContainerCol.appendChild(boxViewCookieDetailLink); 145 boxViewContainerCol.appendChild(boxViewLegals); 146 147 boxViewContainerRow.appendChild(boxViewContainerCol); 148 boxViewContainer.appendChild(boxViewContainerRow); 149 boxView.appendChild(boxViewContainer); 150 151 return boxView; 152} 153 154function buildCookieGroupSelection(textJson, cookieJson) { 155 var ul = document.createElement("ul"); 156 ul.className = "bemCookieOverlay__cookieSelection"; 157 158 cookieJson.groups.forEach(function (cookieGroupJson) { 159 ul.appendChild(buildCookieGroupSelectionItem(textJson, cookieGroupJson)); 160 });
161 162 return ul; 163} 164 165function buildCookieGroupSelectionItem(textJson, cookieJson) { 166 var item = document.createElement("li"); 167 item.className = "bemCookieOverlay__cookieSelectionItem"; 168 169 var itemLabel = document.createElement("label"); 170 itemLabel.className = "bemCookieOverlay__cookieSelectionItemCheckbox"; 171 itemLabel.setAttribute("for", "box_" + cookieJson.id); 172 itemLabel.textContent = cookieJson.name; 173 174 var itemInput = document.createElement("input"); 175 itemInput.className = "bemCookieOverlay__cookieSelectionItemCheckboxInput"; 176 itemInput.id = "box_" + cookieJson.id; 177 itemInput.value = cookieJson.id; 178 itemInput.type = "checkbox"; 179 180 if (cookieJson.required) { 181 itemInput.checked = true; 182 itemInput.disabled = true; 183 } 184 185 var itemIndicator = document.createElement("div"); 186 itemIndicator.className = "bemCookieOverlay__cookieSelectionItemCheckboxIndicator"; 187 188 itemLabel.appendChild(itemInput); 189 itemLabel.appendChild(itemIndicator); 190 item.appendChild(itemLabel); 191 192 return item; 193} 194 195function buildPreferenceView(textJson, linkJson, cookieJson) { 196 var prefView = document.createElement("div"); 197 prefView.className = "bemCookieOverlay__cookiePreference"; 198 199 var prefViewContainer = document.createElement("div"); 200 prefViewContainer.className = "bemCookieOverlay__container bemCookieOverlay__container--invisible"; 201 prefViewContainer.tabIndex = -1; 202 203 var prefViewContainerRow = document.createElement("div"); 204 prefViewContainerRow.className = "bemCookieOverlay__row bemCookieOverlay__row--noGutters"; 205 206 var prefViewContainerCol = document.createElement("div"); 207 prefViewContainerCol.className = "bemCookieOverlay__col bemCookieOverlay__col--100"; 208 209 var prefViewHeader = document.createElement("div"); 210 prefViewHeader.className = "bemCookieOverlay__row bemCookieOverlay__row--noGutters"; 211 212 var prefViewHeaderCol = document.createElement("div"); 213 prefViewHeaderCol.className = "bemCookieOverlay__col bemCookieOverlay__col--100"; 214 215 var prefViewHeaderHeading = document.createElement("div"); 216 prefViewHeaderHeading.className = "bemCookieOverlay__heading"; 217 var heading = document.createElement("h3"); 218 heading.textContent = textJson.title; 219 prefViewHeaderHeading.appendChild(heading); 220 221 var prefViewHeaderDescription = document.createElement("p"); 222 prefViewHeaderDescription.className = "bemCookieOverlay__description"; 223 prefViewHeaderDescription.textContent = textJson.desc_long; 224 225 var prefViewHeaderInteractions = document.createElement("div"); 226 prefViewHeaderInteractions.className = "bemCookieOverlay__row bemCookieOverlay__row--noGutters bemCookieOverlay--alginItemsCenter"; 227 228 var prefViewHeaderButtons = document.createElement("div"); 229 prefViewHeaderButtons.className = "bemCookieOverlay__col bemCookieOverlay__col--75"; 230 231 var acceptAllButton = document.createElement("a"); 232 acceptAllButton.className = "bemCookieOverlay__btn bemCookieOverlay__btn--acceptAll"; 233 acceptAllButton.textContent = textJson.btn_acceptAll; 234 acceptAllButton.addEventListener("click", function () { saveCookieSettings(this, true); }); 235 236 var saveButton = document.createElement("a"); 237 saveButton.className = "bemCookieOverlay__btn bemCookieOverlay__btn--save"; 238 saveButton.textContent = textJson.btn_save; 239 saveButton.addEventListener("click", function () { saveCookieSettings(this, false); }); 240 241 var buttonContainer = document.createElement("p"); 242 buttonContainer.className = "bemCookieOverlay__cookieAcceptance"; 243 buttonContainer.appendChild(acceptAllButton); 244 buttonContainer.appendChild(saveButton); 245 prefViewHeaderButtons.appendChild(buttonContainer); 246 247 var prefViewHeaderReturn = document.createElement("div"); 248 prefViewHeaderReturn.className = "bemCookieOverlay__col bemCookieOverlay__col--25"; 249 250 var backButton = document.createElement("a"); 251 backButton.className = "bemCookieOverlay__refuseDetailViewLink"; 252 backButton.textContent = textJson.back; 253 backButton.addEventListener("click", function () { switchCookieBoxView(); }); 254 255 var backContainer = document.createElement("p"); 256 backContainer.className = "bemCookieOverlay__refuseDetailVie
256w"; 257 backContainer.appendChild(backButton); 258 prefViewHeaderReturn.appendChild(backContainer); 259 260 prefViewHeader.appendChild(prefViewHeaderCol); 261 prefViewHeaderCol.appendChild(prefViewHeaderHeading); 262 prefViewHeaderCol.appendChild(prefViewHeaderDescription); 263 prefViewHeaderCol.appendChild(prefViewHeaderInteractions); 264 prefViewHeaderInteractions.appendChild(prefViewHeaderButtons); 265 prefViewHeaderInteractions.appendChild(prefViewHeaderReturn); 266 267 var prefViewAcc = buildAccordion(textJson, cookieJson); 268 269 var prefViewLegals = document.createElement("p"); 270 prefViewLegals.className = "bemCookieOverlay__cookieLegals bemCookieOverlay__cookieLegals--textAlignRight"; 271 272 if (linkJson.privacy_statement) { 273 var privacyStatementLink = document.createElement("a"); 274 privacyStatementLink.className = "bemCookieOverlay__cookiePrivacyStatement"; 275 privacyStatementLink.href = linkJson.privacy_statement; 276 privacyStatementLink.textContent = textJson.privacy_statement; 277 prefViewLegals.appendChild(privacyStatementLink); 278 } 279 280 if (linkJson.imprint) { 281 var imprintLink = document.createElement("a"); 282 imprintLink.className = "bemCookieOverlay__cookieImprint"; 283 imprintLink.href = linkJson.imprint; 284 imprintLink.textContent = textJson.imprint; 285 prefViewLegals.appendChild(imprintLink); 286 } 287 288 if (linkJson.privacy_statement && linkJson.imprint) { 289 var separator = document.createElement("span"); 290 separator.className = "bemCookieOverlay__seperator"; 291 prefViewLegals.insertBefore(separator, imprintLink); 292 } 293 294 prefViewContainerCol.appendChild(prefViewHeader); 295 prefViewContainerCol.appendChild(prefViewAcc); 296 prefViewContainerCol.appendChild(prefViewLegals); 297 prefViewContainerRow.appendChild(prefViewContainerCol); 298 prefViewContainer.appendChild(prefViewContainerRow); 299 prefView.appendChild(prefViewContainer); 300 301 return prefView; 302} 303function buildAccordion(textJson, cookieJson) { 304 var acc = document.createElement("div"); 305 acc.className = "bemCookieOverlay__accordion"; 306 307 cookieJson.groups.forEach(function (cookieGroupJson) { 308 acc.appendChild(buildAccordionItem(textJson, cookieGroupJson)); 309 }); 310 311 return acc; 312} 313 314function buildAccordionItem(textJson, cookieJson) { 315 var accItem = document.createElement("div"); 316 accItem.className = "bemCookieOverlay__accordionItem"; 317 318 var accHeader = document.createElement("div"); 319 accHeader.className = "bemCookieOverlay__row bemCookieOverlay__row--flexDirRow bemCookieOverlay__row--noGutters"; 320 321 var accHeading = document.createElement("div"); 322 accHeading.className = "bemCookieOverlay__col--75"; 323 var heading = document.createElement("h4"); 324 heading.textContent = cookieJson.name; 325 accHeading.appendChild(heading); 326 327 var accSwitch = document.createElement("div"); 328 accSwitch.className = "bemCookieOverlay__col--25 bemCookieOverlay__col--textAlignRight"; 329 var label = document.createElement("label"); 330 label.className = "bemCookieOverlay__switch bemCookieOverlay__switch--outer"; 331 label.setAttribute("for", "detail_" + cookieJson.id); 332 label.addEventListener("change", function () { accordionOuterSwitchSync(this); }); 333 334 var input = document.createElement("input"); 335 input.className = "bemCookieOverlay__switchInput"; 336 input.type = "checkbox"; 337 input.id = "detail_" + cookieJson.id; 338 input.value = cookieJson.id; 339 input.setAttribute("aria-label", textJson.onoff); 340 341 var slider = document.createElement("div"); 342 slider.className = "bemCookieOverlay__switchSlider"; 343 344 label.appendChild(input); 345 label.appendChild(slider); 346 accSwitch.appendChild(label); 347 348 var accDescWrapper = document.createElement("div"); 349 accDescWrapper.className = "bemCookieOverlay__accordionItemDesc"; 350 351 var accDesc = document.createElement("p"); 352 accDesc.textContent = cookieJson.description; 353 354 var accShowBody = document.createElement("p"); 355 accShowBody.className = "bemCookieOverlay__accordionShowBody"; 356 var showBodyLink = document.createElement("a"); 357 showBodyLink.className = "bemCookieOverlay__accordionShowBodyLink"; 358 showBodyLink.textContent = textJson.show_cookie_information; 359 showBodyLink.addEventListener("click", function () { accordionToogleBody(this); }); 360 accShowBody.appendChild(showBodyLink); 361 362 var accHideBody = document.createElement("p"); 363 accHideBody.className = "bemCookieOverlay__accordionHideBody"; 364 var hideBodyLink = document.createElement("a"); 365 hideBodyLink.className = "bemCookieOverlay__accordionHideBodyLink"; 366 hideBodyLink.textContent = textJson.hide_cookie_information; 367 hideBodyLink.addEventListener("click", function () { accordionToogleBody(this); }); 368 accHideBody.appendChild(hideBodyLink); 369 370 var accBody = document.createElement("div"); 371 accBody.className = "bemCookieOverlay__accordionItemBody"; 372 373 if (cookieJson.required) { 374 input.checked = true; 375 input.disabled = true; 376 } 377
378 cookieJson.cookies.forEach(function (singleCookieJson) { 379 accBody.appendChild(buildCookieDetailTable(textJson, singleCookieJson, cookieJson.required)); 380 }); 381 382 accItem.appendChild(accHeader); 383 accHeader.appendChild(accHeading); 384 accHeader.appendChild(accSwitch); 385 accDescWrapper.appendChild(accDesc); 386 accDescWrapper.appendChild(accShowBody); 387 accDescWrapper.appendChild(accHideBody); 388 accItem.appendChild(accDescWrapper); 389 accItem.appendChild(accBody); 390 391 return accItem; 392} 393 394function buildCookieDetailTable(textJson, cookieJson, requiredParent) { 395 var table = document.createElement("table"); 396 table.className = "bemCookieOverlay__cookieTable"; 397 398 var tbody = document.createElement("tbody"); 399 400 var tcaption = document.createElement("caption"); 401 tcaption.className = "bemCookieOverlay__cookieTableCaption sr-only"; 402 tcaption.textContent = textJson.cookie_detail_table_explanation + " " + cookieJson.name; 403 404 if (!requiredParent) { 405 var trAccept = document.createElement("tr"); 406 var thAccept = document.createElement("th"); 407 thAccept.scope = "row"; 408 thAccept.textContent = textJson.cookie_detail_table_accept; 409 var tdAccept = document.createElement("td"); 410 411 var label = document.createElement("label"); 412 label.className = "bemCookieOverlay__switch"; 413 label.setAttribute("for", "detail_" + cookieJson.id); 414 415 var input = document.createElement("input"); 416 input.className = "bemCookieOverlay__switchInput"; 417 input.type = "checkbox"; 418 input.id = "detail_" + cookieJson.id; 419 input.value = cookieJson.id; 420 input.setAttribute("aria-label", textJson.onoff); 421 422 var slider = document.createElement("div"); 423 slider.className = "bemCookieOverlay__switchSlider"; 424 425 label.appendChild(input); 426 label.appendChild(slider); 427 tdAccept.appendChild(label); 428 trAccept.appendChild(thAccept); 429 trAccept.appendChild(tdAccept); 430 tbody.appendChild(trAccept); 431 } 432 433 if (cookieJson.name) { 434 var trName = document.createElement("tr"); 435 var thName = document.createElement("th"); 436 thName.scope = "row"; 437 thName.textContent = textJson.cookie_detail_table_name; 438 var tdName = document.createElement("td"); 439 tdName.textContent = cookieJson.name; 440 trName.appendChild(thName); 441 trName.appendChild(tdName); 442 tbody.appendChild(trName); 443 } 444 445 if (cookieJson.provider) { 446 var trProvider = document.createElement("tr"); 447 var thProvider = document.createElement("th"); 448 thProvider.scope = "row"; 449 thProvider.textContent = textJson.cookie_detail_table_provider; 450 var tdProvider = document.createElement("td"); 451 tdProvider.textContent = cookieJson.provider; 452 trProvider.appendChild(thProvider); 453 trProvider.appendChild(tdProvider); 454 tbody.appendChild(trProvider); 455 } 456 457 if (cookieJson.purpose) { 458 var trPurpose = document.createElement("tr"); 459 var thPurpose = document.createElement("th"); 460 thPurpose.scope = "row"; 461 thPurpose.textContent = textJson.cookie_detail_table_purpose; 462 var tdPurpose = document.createElement("td"); 463 tdPurpose.textContent = cookieJson.purpose; 464 trPurpose.appendChild(thPurpose); 465 trPurpose.appendChild(tdPurpose); 466 tbody.appendChild(trPurpose); 467 } 468 469 if (cookieJson.privacy_statement) { 470 var trPrivacyStatement = document.createElement("tr"); 471 var thPrivacyStatement = document.createElement("th"); 472 thPrivacyStatement.scope = "row"; 473 thPrivacyStatement.textContent = textJson.cookie_detail_table_privacy_statement; 474 var tdPrivacyStatement = document.createElement("td"); 475 var aPrivacyStatement = document.createElement("a"); 476 aPrivacyStatement.href = cookieJson.privacy_statement; 477 aPrivacyStatement.title = textJson.cookie_detail_table_privacy_statement; 478 aPrivacyStatement.target = "_blank"; 479 aPrivacyStatement.textContent = cookieJson.privacy_statement; 480 tdPrivacyStatement.appendChild(aPrivacyStatement); 481 trPrivacyStatement.appendChild(thPrivacyStatement); 482 trPrivacyStatement.appendChild(tdPrivacyStatement); 483 tbody.appendChild(trPrivacyStatement); 484 } 485 486 if (cookieJson.cookie_name) { 487 var trCookieName = document.createElement("tr"); 488 var thCookieName = document.createElement("th"); 489 thCookieName.scope = "row"; 490 thCookieName.textContent = textJson.cookie_detail_table_cookie_name; 491 var tdCookieName = document.createElement("td"); 492 tdCookieName.textContent = cookieJson.cookie_name; 493 trCookieName.appendChild(thCookieName); 494 trCookieName.appendChild(tdCookieName); 495 tbody.appendChild(trCookieName); 496 } 497 498 if (cookieJson.cookie_lifespan) { 499 var trLifespan = document.createElement("tr"); 500 var thLifespan = document.createElement("th"); 501 thLifespan.scope = "row"; 502 thLifespan.textContent = textJson.cookie_detail_table_cookie_lifespan; 503 var tdLifespan = document.createElement("td"); 504 tdLifespan.textContent = cookieJson.cookie_lifespan; 505 trLifespan.appendChild(thLifespan); 506 trLifespan.appendChild(tdLifespan); 507 tbody.appendChild(trLifespan); 508 } 509
510 table.appendChild(tcaption); 511 table.appendChild(tbody); 512 513 return table; 514} 515 516// Funktionale Funktionen 517function switchCookieBoxView() { 518 var cookieBoxOuterWrapper = document.querySelector(".bemCookieOverlay__boxOuterWrapper"); 519 var cookieBoxInnerWrapper = document.querySelector(".bemCookieOverlay__boxInnerWrapper"); 520 var cookieBoxContainer = document.querySelector(".bemCookieOverlay__cookieBox > .bemCookieOverlay__container"); 521 var cookiePreferenceContainer = document.querySelector(".bemCookieOverlay__cookiePreference > .bemCookieOverlay__container"); 522 523 var isCookieBoxVisible = cookieBoxContainer.classList.contains("bemCookieOverlay__container--visible"); 524 var isCookiePreferenceVisible = cookiePreferenceContainer.classList.contains("bemCookieOverlay__container--visible"); 525 526 var cookieBoxOuterWrapperSettings = { 527 width: '90vw', 528 maxWidth: (isCookieBoxVisible && !isCookiePreferenceVisible) ? '768px' : '400px', 529 turnedMaxWidth: (isCookieBoxVisible && !isCookiePreferenceVisible) ? '400px' : '768px' 530 }; 531 532 cookieBoxOuterWrapper.style.maxWidth = cookieBoxOuterWrapperSettings.maxWidth; 533 cookieBoxOuterWrapper.style.width = "100%"; 534 535 var cookieBoxContainerSettings = { 536 height: (isCookieBoxVisible) ? 0 : cookieBoxContainer.scrollHeight, 537 opacity: (isCookieBoxVisible) ? 0 : 1 538 }; 539 540 var cookiePreferenceContainerSettings = { 541 height: (isCookiePreferenceVisible) ? 0 : cookiePreferenceContainer.scrollHeight, 542 opacity: (isCookiePreferenceVisible) ? 0 : 1 543 }; 544 545 cookieBoxOuterWrapper.style.maxWidth = cookieBoxOuterWrapperSettings.turnedMaxWidth; 546 cookieBoxOuterWrapper.style.width = cookieBoxOuterWrapperSettings.width; 547 548 549 if (isCookieBoxVisible) { 550 cookieBoxContainer.style.height = cookieBoxContainerSettings.height + "px"; 551 cookieBoxContainer.style.opacity = cookieBoxContainerSettings.opacity; 552 setTimeout(function () { 553 cookieBoxContainer.classList.add("bemCookieOverlay__container--invisible"); 554 cookieBoxContainer.classList.remove("bemCookieOverlay__container--visible"); 555 cookieBoxOuterWrapper.style.width = cookieBoxOuterWrapperSettings.width; 556 cookieBoxOuterWrapper.style.maxWidth = cookieBoxOuterWrapperSettings.maxWidth; 557 setTimeout(function () { 558 cookiePreferenceContainer.style.height = cookiePreferenceContainerSettings.height + "px"; 559 cookiePreferenceContainer.style.opacity = cookiePreferenceContainerSettings.opacity; 560 setTimeout(function () { 561 cookiePreferenceContainer.classList.remove("bemCookieOverlay__container--invisible"); 562 cookiePreferenceContainer.classList.add("bemCookieOverlay__container--visible"); 563 cookiePreferenceContainer.style.height = ""; 564 565 setTabIndexForView(cookiePreferenceContainer); 566 setNegativeTabIndexForView(cookieBoxContainer); 567 }, 0); 568 }, 0); 569 }, 0); 570 } else if (isCookiePreferenceVisible) { 571 cookiePreferenceContainer.style.height = cookiePreferenceContainerSettings.height + "px"; 572 cookiePreferenceContainer.style.opacity = cookiePreferenceContainerSettings.opacity; 573 setTimeout(function () { 574 cookiePreferenceContainer.classList.add("bemCookieOverlay__container--invisible"); 575 cookiePreferenceContainer.classList.remove("bemCookieOverlay__container--visible"); 576 cookieBoxOuterWrapper.style.width = cookieBoxOuterWrapperSettings.width; 577 cookieBoxOuterWrapper.style.maxWidth = cookieBoxOuterWrapperSettings.maxWidth; 578 setTimeout(function () { 579 cookieBoxContainer.style.height = cookieBoxContainerSettings.height + "px"; 580 cookieBoxContainer.style.opacity = cookieBoxContainerSettings.opacity; 581 setTimeout(function () { 582 cookieBoxContainer.classList.remove("bemCookieOverlay__container--invisible"); 583 cookieBoxContainer.classList.add("bemCookieOverlay__container--visible"); 584 cookieBoxContainer.style.height = ""; 585 586 setTabIndexForView(cookieBoxContainer); 587 setNegativeTabIndexForView(cookiePreferenceContainer); 588 }, 0); 589 }, 0); 590 }, 0); 591 } else { 592 console.error("GEM2GO WEB: Cookie-OptIn Error!"); 593 } 594} 595 596function accordionToogleBody(trigger) { 597 var accItem = trigger.closest(".bemCookieOverlay__accordionItem"); 598 var showBody = accItem.querySelector(".bemCookieOverlay__accordionShowBody"); 599 var hideBody = accItem.querySelector(".bemCookieOverlay__accordionHideBody"); 600 var body = accItem.querySelector(".bemCookieOverlay__accordionItemBody"); 601 602 if (trigger.classList.contains("bemCookieOverlay__accordionShowBodyLink")) { 603 showBody.style.display = "none"; 604 hideBody.style.display = "block"; 605 body.style.display = "block"; 606 } else if (trigger.classList.contains("bemCookieOverlay__accordionHideBodyLink")) { 607 hideBody.style.display = "none"; 608 showBody.style.display = "block"; 609 body.style.display = "none"; 610 } 611} 612 613function accordionOuterSwitchSync(trigger) { 614 var thisAccItemBody = trigger.closest(".bemCookieOverlay__accordionItem").querySelector(".bemCookieOverlay__accordionItemBody"); 615 616 if (trigger.querySelector(".bemCookieOverlay__switchInput").checked) { 617 thisAccItemBody.querySelectorAll(".bemCookieOverlay__switchInput").forEach(function (input) { 618 input.checked = true; 619 }); 620 } else { 621 thisAccItemBody.querySelectorAll(".bemCookieOverlay__switchInput").forEach(function (input) { 622 input.checked = false; 623 }); 624 } 625} 626 627function saveCookieSettings(trigger, acceptAll) {
628 function saveCheckedCookiesInLocalStorage(checkedCookies) { 629 localStorage.setItem('checkedCookies', JSON.stringify(checkedCookies)); 630 } 631 632 function getCheckedCookiesFromLocalStorage() { 633 return JSON.parse(localStorage.getItem('checkedCookies') || '[]'); 634 } 635 636 var cookie_settings = { 637 name: optInCookieName, 638 path: "/" 639 }; 640 641 var checkedCookies = getCheckedCookiesFromLocalStorage(); 642 643 if (!checkedCookies.length) { 644 if (acceptAll) { 645 checkedCookies.push(cookieStringForAllAccepted); 646 } else { 647 if (trigger.closest(".bemCookieOverlay__cookiePreference")) { 648 var outerSwitches = trigger.closest(".bemCookieOverlay__cookiePreference").querySelectorAll(".bemCookieOverlay__switch--outer"); 649 outerSwitches.forEach(function (outerSwitch) { 650 var switchInput = outerSwitch.querySelector(".bemCookieOverlay__switchInput"); 651 if (switchInput.checked) { 652 checkedCookies.push(switchInput.value); 653 } else { 654 var innerSwitches = outerSwitch.closest(".bemCookieOverlay__accordionItem").querySelectorAll(".bemCookieOverlay__accordionItemBody .bemCookieOverlay__switch"); 655 innerSwitches.forEach(function (innerSwitch) { 656 var innerSwitchInput = innerSwitch.querySelector(".bemCookieOverlay__switchInput"); 657 if (innerSwitchInput.checked) { 658 checkedCookies.push(innerSwitchInput.value); 659 } 660 }); 661 } 662 }); 663 } else if (trigger.closest(".bemCookieOverlay__cookieBox")) { 664 var groupCheckboxes = trigger.closest(".bemCookieOverlay__cookieBox").querySelectorAll(".bemCookieOverlay__cookieSelectionItem .bemCookieOverlay__cookieSelectionItemCheckboxInput"); 665 groupCheckboxes.forEach(function (checkbox) { 666 if (checkbox.checked) { 667 checkedCookies.push(checkbox.value); 668 } 669 }); 670 } 671 } 672 } 673 674 if (isRunningInIframe()) { 675 saveCheckedCookiesInLocalStorage(checkedCookies); 676 var extra = document.location.protocol == "https:" ? " samesite=none; secure=true" : ""; 677 document.cookie = cookie_settings.name + "=s" + checkedCookies.toString().replace(/,/g, '|') + "; path=" + cookie_settings.path + ";" + extra; 678 location.reload(); 679 } else { 680 var extra = document.location.protocol == "https:" ? " samesite=none; secure=true" : ""; 681 document.cookie = cookie_settings.name + "=s" + checkedCookies.toString().replace(/,/g, '|') + "; path=" + cookie_settings.path + ";" + extra; 682 location.reload(); 683 } 684} 685 686function initAccessibilityImprovements(boxView, prefView) { 687 setTabIndexForView(boxView, true); 688 setNegativeTabIndexForView(prefView); 689 690 // Focus funktioniert sonst nach Enter nicht mehr 691 document.querySelectorAll(".bemCookieOverlay input").forEach(function (input) { 692 input.addEventListener("focus", function () { 693 document.querySelector("label[for='" + this.id + "']").classList.add("bemCookieOverlay_labelFocus"); 694 }); 695 input.addEventListener("blur", function () { 696 document.querySelector("label").classList.remove("bemCookieOverlay_labelFocus"); 697 }); 698 }); 699 700 // Bei Enter auf Link wird das Click-Event gefeuert 701 document.querySelectorAll('.bemCookieOverlay a').forEach(function (link) { 702 link.addEventListener("keypress", function (e) { 703 if (e.key === "Enter") { 704 this.click(); 705 e.preventDefault(); 706 } 707 }); 708 }); 709 710 // Bei Enter auf Label wird Click-Event gefeuert 711 document.querySelectorAll('.bemCookieOverlay input').forEach(function (input) { 712 input.addEventListener("keypress", function (e) { 713 if (e.key === "Enter") { 714 this.click(); 715 e.preventDefault(); 716 } 717 }); 718 });
719} 720 721function setTabIndexForView(container, initialShow = false) { 722 var tabIndexCounter = 0; 723 container.querySelectorAll("input:not(:disabled), a").forEach(function (element) { 724 element.setAttribute("tabindex", tabIndexCounter); 725 }); 726 727 var refuseDetailViewLink = container.querySelector("a.bemCookieOverlay__refuseDetailViewLink"); 728 var cookieManageLink = container.querySelector("a.bemCookieOverlay__cookieManageLink"); 729 var firstFocusableElement = container.querySelector("input:not(:disabled), a"); 730 731 if (refuseDetailViewLink) { 732 refuseDetailViewLink.focus(); 733 } else if (cookieManageLink && !initialShow) { 734 cookieManageLink.focus(); 735 } else if (firstFocusableElement) { 736 firstFocusableElement.focus(); 737 } 738} 739 740function setNegativeTabIndexForView(container) { 741 container.querySelectorAll("input:not(:disabled), a").forEach(function (element) { 742 element.setAttribute("tabindex", -1); 743 }); 744} 745 746function initCookieSettings(boxView, prefView, settingsCookieName) { 747 if (doesCookieExist(settingsCookieName)) { 748 var cookieSettings = readCookie(settingsCookieName); 749 750 if (cookieSettings == cookieStringForAllAccepted) { 751 document.querySelectorAll("input[type=checkbox]").forEach(function (checkbox) { 752 checkbox.checked = true; 753 }); 754 } else { 755 var cookieSettingsArray = cookieSettings.split("|"); 756 cookieSettingsArray.forEach(function (cookieId) { 757 var input = document.querySelectorAll("input[value='" + cookieId + "']"); 758 input.forEach(function (input) { 759 input.checked = true; 760 if (input.closest(".bemCookieOverlay__switch--outer") != null) 761 accordionOuterSwitchSync(input.closest(".bemCookieOverlay__switch--outer")); 762 }); 763 }); 764 } 765 } 766} 767 768function readCookie(name) { 769 var nameEQ = name + "="; 770 var ca = document.cookie.split(';'); 771 for (var i = 0; i < ca.length; i++) { 772 var c = ca[i]; 773 while (c.charAt(0) == ' ') c = c.substring(1, c.length); 774 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 775 } 776 return null; 777} 778 779function doesCookieExist(name) { 780 return (document.cookie.indexOf(name) == -1) ? false : true; 781}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.