<form class="cookie-layer" action="#api-url">
<div class="cookie-layer__inner">
<div class="cookie-layer__headline">
<h2 class="headline headline--module-3">Einstellungen</h2>
</div>
<p class="cookie-layer__text">Ohne Ihre Zustimmung setzen wir keine Cookies auf unserer Website ein. Ausschließlich nach Ihrer Zustimmung verarbeiten wir anonyme Daten, aus denen pseudonymisierte Nutzungsprofile erstellt und ausgewertet werden. Dazu nutzen wir die Webanalysedienst-Software Matomo. Hier können Sie den Cookie aktivieren oder deaktivieren. Sie können Ihre Einstellungen jederzeit ändern. <a href="#">Zur Datenschutzerklärung</a>.</p>
<div class="cookie-layer__options">
<div class="cookie-layer__options__switch"><label class="switch"><input class="switch__checkbox" id="checkbox-|***6b031b***|" type="checkbox" name="switch-name" /><span class="switch__slider"></span></label><span class="cookie-layer__options__switch__label">Optionale Cookies</span></div>
<div class="cookie-layer__options__save"><button class="button button--primary cookie-layer__save-button" type="submit"><span class="button__inner"><span class="button__text">Speichern & Schließen</span></span></button></div>
</div>
<div class="cookie-layer__buttons"><button class="button button--primary cookie-layer__save-button" type="submit"><span class="button__inner"><span class="button__text">Akzeptieren</span></span></button><button class="button button--secondary cookie-layer__toggle-button" type="button"><span class="button__inner"><span class="button__text">Konfigurieren</span></span></button></div>
</div>
</form>
//- Render cookie layer
form.cookie-layer(
action=action
)&attributes(attr)
.cookie-layer__inner
//- Headline
if headline
.cookie-layer__headline
+include('@headline', headline)
//- Text
p.cookie-layer__text !{render(text, true)}
.cookie-layer__options
//- Switch
if toggleSwitch
.cookie-layer__options__switch
+include('@switch', toggleSwitch)
span.cookie-layer__options__switch__label !{render(toggleSwitch.label, true)}
//- Options
if options
for option in options
.cookie-layer__option
+include('@checkbox', option)
if option.hint
- tooltipId = `tooltip-${randomString()}`;
button.cookie-layer__option-hint(aria-describedby=tooltipId)
+include('@icon', { icon: 'info', attr: { class: 'cookie-layer__option-hint__icon' } })
.cookie-layer__tooltip(id=tooltipId, role='tooltip')
| !{render(option.hint, true)}
.cookie-layer__tooltip__arrow(data-popper-arrow=true)
.cookie-layer__options__save
+include('@button', _.merge(buttonSaveSettings, {
attr: {
type: 'submit',
class: 'cookie-layer__save-button'
},
}), false)
//- Buttons
.cookie-layer__buttons
+include('@button', _.merge(buttonSave, {
attr: {
type: 'submit',
class: 'cookie-layer__save-button'
},
}), false)
+include('@button', _.merge(buttonSettings, {
attr: {
type: 'button',
class: 'cookie-layer__toggle-button'
},
}), false)
{
"action": "#api-url",
"text": "Ohne Ihre Zustimmung setzen wir keine Cookies auf unserer Website ein. Ausschließlich nach Ihrer Zustimmung verarbeiten wir anonyme Daten, aus denen pseudonymisierte Nutzungsprofile erstellt und ausgewertet werden. Dazu nutzen wir die Webanalysedienst-Software Matomo. Hier können Sie den Cookie aktivieren oder deaktivieren. Sie können Ihre Einstellungen jederzeit ändern. <a href=\"#\">Zur Datenschutzerklärung</a>.",
"buttonSave": {
"style": "primary",
"text": "Akzeptieren"
},
"buttonSettings": {
"style": "secondary",
"outline": true,
"text": "Konfigurieren"
},
"buttonSaveSettings": {
"style": "primary",
"text": "Speichern & Schließen"
},
"headline": {
"text": "Einstellungen",
"level": 2,
"size": "module-3"
},
"toggleSwitch": {
"label": "Optionale Cookies"
}
}
import { createPopper } from '@popperjs/core';
function showTooltip(tooltip, popper) {
tooltip.setAttribute('data-show', '');
popper.forceUpdate();
}
function hideTooltip(tooltip) {
tooltip.removeAttribute('data-show');
}
function setCookie(name, value, days = 7, path = '/') {
window.console.log('set cookie', name, value);
const expires = new Date(Date.now() + days * 864e5).toUTCString();
document.cookie = `${name} = ${encodeURIComponent(value)}; expires=${expires}; path=${path}`;
}
function getCookie(name) {
return document.cookie.split('; ').reduce((r, v) => {
const parts = v.split('=');
return parts[0] === name ? decodeURIComponent(parts[1]) : r;
}, '');
}
function deleteCookie(name, path) {
window.console.log('delete cookie', name);
setCookie(name, '', -1, path);
}
const showEvents = ['mouseenter', 'focus'];
const hideEvents = ['mouseleave', 'blur'];
const cookieLayer = document.querySelector('.cookie-layer');
const showCookieLayer = () => {
cookieLayer.classList.add('cookie-layer--visible');
};
const hideCookieLayer = () => {
cookieLayer.classList.remove('cookie-layer--visible');
};
const saveCookiePreferences = () => {
setCookie('cookies-consent', 'done', 30);
cookieLayer.querySelectorAll('input[type=checkbox]').forEach((checkbox) => {
const name = checkbox.getAttribute('name');
if (checkbox.checked) {
setCookie(`cookie-consent--${name}`, 'ok');
} else {
deleteCookie(`cookie-consent--${name}`);
}
});
const action = cookieLayer.getAttribute('action');
if (action) {
const formData = new FormData(cookieLayer);
const xhr = new XMLHttpRequest();
xhr.open('POST', action, true);
xhr.send(formData);
}
};
if (cookieLayer) {
cookieLayer.addEventListener('submit', (event) => {
event.preventDefault();
saveCookiePreferences();
hideCookieLayer();
return false;
});
if (getCookie('cookies-consent') !== 'done') {
showCookieLayer();
}
}
document.querySelectorAll('.cookie-layer__option-hint').forEach((button) => {
const tooltipId = button.getAttribute('aria-describedby');
const tooltip = document.querySelector(`#${tooltipId}`);
const arrow = tooltip.querySelector('[data-popper-arrow');
const popper = createPopper(button, tooltip, {
strategy: 'fixed',
placement: 'top',
modifiers: [
{
name: 'preventOverflow',
options: {
padding: 10,
},
},
{
name: 'flip',
options: {
fallbackPlacements: ['bottom'],
},
},
{
name: 'offset',
options: {
offset: [0, 35],
},
},
{
name: 'arrow',
options: {
element: arrow,
padding: 25,
},
},
],
});
showEvents.forEach((event) => {
button.addEventListener(event, () => { showTooltip(tooltip, popper); });
});
hideEvents.forEach((event) => {
button.addEventListener(event, () => { hideTooltip(tooltip, popper); });
});
});
const cookieLayerOptions = document.querySelector('.cookie-layer__options');
if (cookieLayerOptions) {
const toggleCookieSettings = () => {
cookieLayerOptions.classList.toggle('cookie-layer__options--expanded');
document.querySelector('.cookie-layer__buttons').classList.toggle('cookie-layer__buttons--hidden');
};
document.querySelector('.cookie-layer__toggle-button').addEventListener('click', toggleCookieSettings);
}
.cookie-layer {
background-color: rgba(#000, 0.5);
bottom: 0;
left: 0;
position: fixed;
right: 0;
top: 0;
z-index: z('cookie-layer');
}
.cookie-layer__inner {
align-items: center;
background-color: #fff;
bottom: 0;
color: $color-dark;
padding: 1.5rem;
position: absolute;
text-align: left;
width: 100%;
@include mq($from: m) {
bottom: auto;
left: 50%;
padding: 3.5rem;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
width: 65%;
}
}
.cookie-layer__headline {
margin-bottom: 1rem;
}
.cookie-layer__text {
margin-bottom: 1rem;
a {
border-bottom: 1px solid currentColor;
color: $color-dark;
}
@include mq($until: m) {
font-size: $font-size-small;
line-height: $line-height-small;
}
}
.cookie-layer__options {
display: none;
}
.cookie-layer__options--expanded {
display: block;
}
.cookie-layer__option {
margin-bottom: 1rem;
}
.cookie-layer__options__save {
padding-top: 1rem;
}
.cookie-layer__option-hint {
color: $color-green;
cursor: help;
display: inline-block;
font-size: 2rem;
height: 2.5rem;
line-height: 2.1rem;
margin-left: 0.5rem;
text-align: center;
vertical-align: middle;
width: 2.5rem;
}
.cookie-layer__tooltip {
background: $color-green;
border-radius: 0;
color: #fff;
display: none;
font-size: 1.5rem;
line-height: calc(2 / 1.5);
max-width: 50rem;
padding: 2rem;
z-index: z('tooltip');
&[data-show] {
display: block;
}
}
.cookie-layer__tooltip__arrow,
.cookie-layer__tooltip__arrow::before {
height: 4.5rem;
position: absolute;
width: 4.5rem;
z-index: -1;
}
.cookie-layer__tooltip__arrow::before {
background: $color-green;
content: '';
transform: rotate(45deg);
}
.cookie-layer__tooltip[data-popper-placement^='top'] > .cookie-layer__tooltip__arrow {
bottom: -2.3rem;
}
.cookie-layer__tooltip[data-popper-placement^='bottom'] > .cookie-layer__tooltip__arrow {
top: -2.3rem;
}
.cookie-layer__tooltip[data-popper-placement^='left'] > .cookie-layer__tooltip__arrow {
right: -2.3rem;
}
.cookie-layer__tooltip[data-popper-placement^='right'] > .cookie-layer__tooltip__arrow {
left: -2.3rem;
}
.cookie-layer__buttons {
margin-top: 2rem;
}
.cookie-layer__buttons .button:not(:first-child) {
margin: 2rem 0 0;
@include mq($from: m) {
margin: 0 0 0 2rem;
}
}
.cookie-layer__buttons--hidden {
display: none;
}
.cookie-layer__options__switch {
padding: 2rem 0;
}
.cookie-layer__options__switch__label {
font-weight: bold;
margin-left: 1rem;
}
There are no notes for this item.