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