let burst={"tracking":{"isInitialHit":true,"lastUpdateTimestamp":0,"beacon_url":"https:\/\/audiodramaseurope.de\/wp-content\/plugins\/burst-statistics\/endpoint.php","ajaxUrl":"https:\/\/audiodramaseurope.de\/wp-admin\/admin-ajax.php"},"options":{"cookieless":0,"pageUrl":false,"beacon_enabled":1,"do_not_track":0,"enable_turbo_mode":1,"track_url_change":0,"track_external_links":1,"cookie_retention_days":30,"debug":0},"goals":{"completed":[],"scriptUrl":"https:\/\/audiodramaseurope.de\/wp-content\/plugins\/burst-statistics\/assets\/js\/build\/burst-goals.js?v=1781881670","active":[]},"cache":{"uid":null,"fingerprint":null,"isUserAgent":null,"isDoNotTrack":null,"useCookies":null}};burst.tracking=burst.tracking||{isInitialHit:!0,lastUpdateTimestamp:0,ajaxUrl:""},burst.should_load_ecommerce=burst.should_load_ecommerce||!1,burst.cache=burst.cache||{uid:null,fingerprint:null,isUserAgent:null,isDoNotTrack:null,useCookies:null},burst.goals?.active&&(burst.goals.active=burst.goals.active.map(t=>({...t,ID:parseInt(t.ID,10)}))),burst.goals?.completed&&(burst.goals.completed=burst.goals.completed.map(t=>parseInt(t,10)));let pageIsRendered=new Promise(t=>{document.prerendering?document.addEventListener("prerenderingchange",t,{once:!0}):t()});if(burst.goals?.active?.some(t=>!t.page_url||""===t.page_url||t.page_url===burst.options.pageUrl)){let t=document.createElement("script");t.async=!0,t.src=burst.goals.scriptUrl,document.head.appendChild(t)}let burst_get_cookie=t=>{var e,r=t+"=";for(e of document.cookie.split(";"))if(0===(e=e.trim()).indexOf(r))return Promise.resolve(e.substring(r.length));return Promise.reject(!1)},burst_set_cookie=(t,e)=>{let r="";var a="https:"===location.protocol?";secure":"",s=new Date,s=(s.setTime(s.getTime()+864e5*burst.options.cookie_retention_days),";expires="+s.toGMTString());r=r&&";domain="+r,document.cookie=""+t+`=${e};SameSite=Strict${a}${s}${r};path=/`},burst_use_cookies=()=>{var t;return null!==burst.cache.useCookies?burst.cache.useCookies:(t=navigator.cookieEnabled&&!burst.options.cookieless,burst.cache.useCookies=t)};function burst_enable_cookies(){burst.options.cookieless=!1,burst_use_cookies()&&burst_uid().then(t=>burst_set_cookie("burst_uid",t))}let burst_uid=()=>null!==burst.cache.uid?Promise.resolve(burst.cache.uid):burst_get_cookie("burst_uid").then(t=>burst.cache.uid=t).catch(()=>{var t=burst_generate_uid();return burst_set_cookie("burst_uid",t),burst.cache.uid=t}),burst_generate_uid=()=>Array.from({length:32},()=>Math.floor(16*Math.random()).toString(16)).join(""),burst_fingerprint=()=>null!==burst.cache.fingerprint?Promise.resolve(burst.cache.fingerprint):new ThumbmarkJS.Thumbmark({exclude:[],permissions_to_check:["geolocation","notifications","camera","microphone","gyroscope","accelerometer","magnetometer","ambient-light-sensor","background-sync","persistent-storage"]}).get().then(t=>{var t=t.thumbmark,e=t+"|"+[screen.availWidth+"x"+screen.availHeight,screen.width+"x"+screen.height,screen.colorDepth,window.devicePixelRatio||1,navigator.hardwareConcurrency||0,navigator.deviceMemory||0,navigator.maxTouchPoints||0,(new Date).getTimezoneOffset(),navigator.cookieEnabled?"1":"0","undefined"!=typeof Storage?"1":"0","undefined"!=typeof indexedDB?"1":"0",navigator.onLine?"1":"0",navigator.languages?navigator.languages.slice(0,3).join(","):navigator.language,navigator.platform,navigator.oscpu||"",navigator.connection&&navigator.connection.effectiveType||"","ontouchstart"in window?"1":"0",void 0!==window.orientation?"1":"0",window.screen.orientation&&window.screen.orientation.type||""].filter(t=>""!==t).join("|");let r=0;for(let t=0;t<e.length;t++){var a=e.charCodeAt(t);r=(r<<5)-r+a,r&=r}t=Math.abs(r).toString(16).padStart(8,"0")+t.substring(8);return burst.cache.fingerprint=t}).catch(t=>(console.error(t),null)),burst_get_time_on_page=()=>{var t;return"undefined"==typeof TimeMe?Promise.resolve(0):(t=TimeMe.getTimeOnCurrentPageInMilliseconds(),TimeMe.resetAllRecordedPageTimes(),TimeMe.initialize({idleTimeoutInSeconds:30}),Promise.resolve(t))},burst_is_user_agent=()=>{var t;return null!==burst.cache.isUserAgent?burst.cache.isUserAgent:(t=/bot|spider|crawl|slurp|mediapartners|applebot|bing|duckduckgo|yandex|baidu|facebook|twitter/i.test(navigator.userAgent),burst.cache.isUserAgent=t)},burst_is_do_not_track=()=>{var t;return null!==burst.cache.isDoNotTrack?burst.cache.isDoNotTrack:burst.options.do_not_track?(t="1"===navigator.doNotTrack||"yes"===navigator.doNotTrack||"1"===navigator.msDoNotTrack||"1"===window.doNotTrack||1===navigator.globalPrivacyControl,burst.cache.isDoNotTrack=t):burst.cache.isDoNotTrack=!1},burst_log_tracking_error=({status:t=0,error:e="",data:r={}})=>{burst.options.debug&&burst.tracking.ajaxUrl&&fetch(burst.tracking.ajaxUrl,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"burst_tracking_error",status:t,error:e,data:r})})},burst_beacon_request=e=>{var t=new Blob([e],{type:"application/json"});burst.options.debug?fetch(burst.tracking.beacon_url,{method:"POST",body:t,keepalive:!0,headers:{"Content-Type":"application/json"}}).then(t=>{t.ok||burst_log_tracking_error({status:0,error:"sendBeacon failed",data:e})}).catch(t=>{burst_log_tracking_error({status:0,error:t?.message||"sendBeacon failed",data:e})}):navigator.sendBeacon(burst.tracking.beacon_url,t)},burst_api_request=t=>{let a=JSON.stringify(t.data||{});return new Promise(r=>{var t;burst.options.beacon_enabled?(burst_beacon_request(a),r({status:200,data:"ok"})):(t=Math.random().toString(36).substring(2,9),wp.apiFetch({path:"/burst/v1/track/?token="+t,keepalive:!0,method:"POST",data:a}).then(t=>{var e=t.status||200;r({status:e,data:t.data||t}),200!==e&&burst_log_tracking_error({status:e,error:"Non-200 status",data:a})}).catch(t=>{r({status:200,data:"ok"}),burst_log_tracking_error({status:0,error:t?.message||"Burst tracking request failed",data:a})}))})};async function burst_update_hit(t=!1,e=!1,r={}){var a;await pageIsRendered,burst_is_user_agent()||burst_is_do_not_track()||(burst.tracking.isInitialHit?burst_track_hit(r):!e&&Date.now()-burst.tracking.lastUpdateTimestamp<300||(document.dispatchEvent(new CustomEvent("burst_before_update_hit",{detail:burst})),[e,a]=await Promise.all([burst_get_time_on_page(),t?Promise.all([burst_uid(),burst_fingerprint()]):(burst_use_cookies()?burst_uid:burst_fingerprint)()]),t={fingerprint:t?a[1]:!burst_use_cookies()&&a,uid:t?a[0]:!!burst_use_cookies()&&a,url:location.href,time_on_page:e,completed_goals:burst.goals.completed,should_load_ecommerce:burst.should_load_ecommerce,...r},(0<e||!1!==t.uid)&&(await burst_api_request({data:t}),burst.tracking.lastUpdateTimestamp=Date.now())))}async function burst_track_hit(e={}){var r=burst.tracking.isInitialHit;if(burst.tracking.isInitialHit=!1,await pageIsRendered,r){if(!(burst_is_user_agent()||burst_is_do_not_track()||Date.now()-burst.tracking.lastUpdateTimestamp<300)){document.dispatchEvent(new CustomEvent("burst_before_track_hit",{detail:burst}));var[r,a]=await Promise.all([burst_get_time_on_page(),(burst_use_cookies()?burst_uid:burst_fingerprint)()]);let t=0;for(;!document.body&&t++<200;)await new Promise(t=>setTimeout(t,2));document.body||console.warn("Burst: missing page_id attribute, not able to resolve body element.");var s=new URLSearchParams(location.search),a={uid:!!burst_use_cookies()&&a,fingerprint:!burst_use_cookies()&&a,url:location.href,referrer_url:document.referrer,user_agent:navigator.userAgent||"unknown",device_resolution:window.screen.width*window.devicePixelRatio+"x"+window.screen.height*window.devicePixelRatio,time_on_page:r,completed_goals:burst.goals.completed,page_id:document.body?.dataset?.burst_id??document.body?.dataset?.b_id??0,page_type:document.body?.dataset?.burst_type??document.body?.dataset?.b_type??"",should_load_ecommerce:burst.should_load_ecommerce,search_term:s.get("s")||"",...e};document.dispatchEvent(new CustomEvent("burst_track_hit",{detail:a})),await burst_api_request({method:"POST",data:a}),burst.tracking.lastUpdateTimestamp=Date.now()}}else burst_update_hit(!1,!1,e)}function burst_init_events(){let t=()=>{burst.options.track_url_change&&(burst.tracking.isInitialHit=!0,burst_track_hit())};!burst.options.enable_turbo_mode||"loading"!==document.readyState?burst_track_hit():document.addEventListener("load",burst_track_hit),document.addEventListener("visibilitychange",()=>{"hidden"!==document.visibilityState&&"unloaded"!==document.visibilityState||burst_update_hit()}),document.addEventListener("pagehide",()=>burst_update_hit()),document.addEventListener("click",e=>{let r=e.target.closest("a[href]");if(r&&burst.options.track_external_links){var a=(t=>{var e=t?.getAttribute?.("href");if(!e||e.startsWith("#"))return!1;let r;try{r=new URL(t.href,window.location.href)}catch(t){return!1}return!!["http:","https:"].includes(r.protocol)&&r.origin!==window.location.origin&&r.href})(r);if(a){a={external_link_url:a};if(burst.options.beacon_enabled||(i=r,(s=e).defaultPrevented)||0!==s.button||(s.metaKey||s.ctrlKey||s.shiftKey||s.altKey||i.hasAttribute("download")||(s=(i.getAttribute("target")||"").toLowerCase())&&"_self"!==s))burst_update_hit(!1,!0,a);else{var s;e.preventDefault();let t=!1;var i=()=>{t||(t=!0,window.location.assign(r.href))};setTimeout(i,250),burst_update_hit(!1,!0,a).finally(i)}}}},!0),document.addEventListener("burst_fire_hit",()=>burst_track_hit()),document.addEventListener("burst_enable_cookies",()=>{burst_enable_cookies(),burst_update_hit(!0)});let e=history.pushState,r=(history.pushState=function(){e.apply(this,arguments),t()},history.replaceState);history.replaceState=function(){r.apply(this,arguments),t()},window.addEventListener("popstate",t)}document.addEventListener("wp_listen_for_consent_change",t=>{"allow"===t.detail.statistics&&burst_init_events()}),"function"==typeof wp_has_consent&&!wp_has_consent("statistics")||burst_init_events(),window.burst_uid=burst_uid,window.burst_use_cookies=burst_use_cookies,window.burst_fingerprint=burst_fingerprint,window.burst_update_hit=burst_update_hit;
if('serviceWorker' in navigator){
window.addEventListener('load', function(){
navigator.serviceWorker.register(superpwa_sw.url)
.then(function(registration){ if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('SuperPWA service worker ready'); }
if(registration.active){
registration.update();
}
if(typeof firebase!='undefined'&&typeof pushnotification_load_messaging=='function'){
const messaging=firebase.messaging();
messaging.useServiceWorker(registration);
pushnotification_load_messaging();
}
subOnlineOfflineIndicator();
})
.catch(function(error){ if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('Registration failed with ' + error); }});
const snackbarTimeToHide=5000;
let isOffline=false,
snackbarTimeoutHide=null,
goOfflineMsg=superpwa_sw.offline_message_txt,
backOnlineMsg=superpwa_sw.online_message_txt;
function subOnlineOfflineIndicator(){
injectSnackbarHtml();
injectSnackbarCss();
runOnlineOfflineIndicator();
}
function injectSnackbarHtml(){
if(document.querySelector('.snackbar')) return;
const container=document.createElement('div');
container.className='snackbar';
const parag=document.createElement('p');
parag.id='snackbar-msg';
container.appendChild(parag);
const button=document.createElement('button');
button.type='button';
button.className='snackbar-close';
button.setAttribute('aria-label', 'Close ×');
button.addEventListener('click', hideSnackbar);
button.innerHTML='&times;';
container.appendChild(button);
document.body.appendChild(container);
window.addEventListener('online', runOnlineOfflineIndicator);
window.addEventListener('offline', runOnlineOfflineIndicator);
window.addEventListener('fetch',()=> { if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log("fetch"); }});
container.addEventListener('mouseover', function (){
if(snackbarTimeoutHide!==null)
clearTimeout(snackbarTimeoutHide);
});
container.addEventListener('mouseout', function (){
if(snackbarTimeoutHide!==null)
snackbarTimeoutHide=setTimeout(hideSnackbar, snackbarTimeToHide / 2);
});
}
function injectSnackbarCss(){
const css=`body.snackbar--show .snackbar {
-webkit-transform: translateY(0);
transform: translateY(0);
}
.snackbar {
box-sizing: border-box;
background-color: #121213;
color: #fff;
padding: 10px 55px 10px 10px;
position: fixed;
z-index: 9999999999999999;
left: 15px;
bottom: 15px;
border-radius: 5px 8px 8px 5px;
max-width: 90%;
min-height: 48px;
line-height: 28px;
font-size: 16px;
-webkit-transform: translateY(150%);
transform: translateY(150%);
will-change: transform;
-webkit-transition: -webkit-transform 200ms ease-in-out;
-webkit-transition-delay: 0s;
transition-delay: 0s;
-webkit-transition: -webkit-transform 200ms ease-in-out false;
transition: -webkit-transform 200ms ease-in-out false;
transition: transform 200ms ease-in-out false;
transition: transform 200ms ease-in-out false, -webkit-transform 200ms ease-in-out false;
}
.snackbar p {
margin: 0;
color: #fff;
text-align: center;
}
.snackbar .snackbar-close {
position: absolute;
top: 0;
right: 0;
width: 45px;
height: 100%;
padding: 0;
background: #2a2a2a;
border: none;
font-size: 28px;
font-weight: normal;
border-radius: 0 5px 5px 0;
color: #FFF;
font-family: Arial, Helvetica, sans-serif;
}
.snackbar .snackbar-close:hover,
.snackbar .snackbar-close:focus {
background: #3f3f3f;
}
.snackbar a {
color: #FFF;
font-weight: bold;
text-decoration: underline;
}`;
const head=document.head||document.getElementsByTagName('head')[0];
const style=document.createElement('style');
style.type='text/css';
if(style.styleSheet){
style.styleSheet.cssText=css;
}else{
style.appendChild(document.createTextNode(css));
}
head.appendChild(style);
}
function runOnlineOfflineIndicator(){
if(navigator.onLine){
if(superpwa_sw.offline_message==1&&isOffline===true){
showSnackbar(backOnlineMsg);
}
isOffline=false;
}else{
if(superpwa_sw.offline_message==1){
showSnackbar(goOfflineMsg);
isOffline=true;
}}
}
function showSnackbar(msg){
document.getElementById('snackbar-msg').textContent=msg;
document.body.classList.add('snackbar--show');
clearTimeout(snackbarTimeoutHide);
snackbarTimeoutHide=setTimeout(hideSnackbar, snackbarTimeToHide);
}
function hideSnackbar(){
document.body.classList.remove('snackbar--show');
}
var deferredPrompt;
window.addEventListener('beforeinstallprompt', function(e){
deferredPrompt=e;
if(deferredPrompt!=null||deferredPrompt!=undefined){
if(superpwa_sw.disable_addtohome==1){
deferredPrompt.preventDefault();
}
var a2hsBanner=document.getElementsByClassName("superpwa-sticky-banner");
if(a2hsBanner.length){
deferredPrompt.preventDefault();
if(superpwa_sw.enableOnDesktop!=1&&!window.mobileCheck()){return ;}
if(typeof super_check_bar_closed_or_not=='function'&&!super_check_bar_closed_or_not()){return ;}
for (var i=0; i < a2hsBanner.length; i++){
var showbanner=a2hsBanner[i].getAttribute("data-show");
a2hsBanner[i].style.display="flex";
}}
document.cookie="hidecta=no";
}})
window.addEventListener('appinstalled', function(evt){
var a2hsBanner=document.getElementsByClassName("superpwa-sticky-banner");
if(a2hsBanner.length){
for (var i=0; i < a2hsBanner.length; i++){
var showbanner=a2hsBanner[i].getAttribute("data-show");
document.cookie="hidecta=yes";
a2hsBanner[i].style.display="none";
}}
});
var a2hsviaClass=document.getElementsByClassName("superpwa-add-via-class");
if(a2hsviaClass!==null){
for (var i=0; i < a2hsviaClass.length; i++){
a2hsviaClass[i].addEventListener("click", addToHome);
}}
function addToHome(){
if(!deferredPrompt){return ;}
deferredPrompt.prompt();
deferredPrompt.userChoice.then(function(choiceResult){
if(choiceResult.outcome==="accepted"){
var a2hsBanner=document.getElementsByClassName("superpwa-sticky-banner");
if(a2hsBanner){
for (var i=0; i < a2hsBanner.length; i++){
var showbanner=a2hsBanner[i].getAttribute("data-show");
a2hsBanner[i].style.display="none";
}}
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log("User accepted the prompt"); }}else{
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log("User dismissed the prompt"); }}
deferredPrompt=null;
});
}});
}
window.mobileCheck=function(){
let check=false;
(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check=true;})(navigator.userAgent||navigator.vendor||window.opera);
return check;
};
window.addEventListener('load', function(){
let manifest_name=superpwa_sw.manifest_name ?? 'superpwa-manifest.json';
var manifestLink=document.querySelectorAll("link[rel='manifest']");
if(manifestLink.length > 1){
for (var i=0; i < manifestLink.length; i++){
var href=manifestLink[i].getAttribute("href");
if(href.indexOf(manifest_name)==-1){
manifestLink[i].remove();
}}
}
var ua=window.navigator.userAgent;
var iOS=ua.match(/iPad/i)||ua.match(/iPhone/i);
var webkit=ua.match(/WebKit/i);
var iOSSafari=iOS&&webkit&&!ua.match(/CriOS/i);
if(iOSSafari&&(window.matchMedia('(display-mode: standalone)').matches)){
setTimeout(function(){
const anchor_fix=document.querySelectorAll("a[href='#']");
if(anchor_fix.length > 1){
for (var i=0; i < anchor_fix.length; i++){
anchor_fix[i].setAttribute("href","javascript:void(0);");
}}
},600);
}});
document.addEventListener('DOMContentLoaded', function (){
if(typeof pnScriptSetting!=='undefined'&&pnScriptSetting.superpwa_apk_only!==undefined&&pnScriptSetting.superpwa_apk_only==1){
const reffer=document.referrer;
if(reffer&&reffer.includes('android-app://')){
sessionStorage.setItem('superpwa_mode', 'apk');
}}
});
if(superpwa_sw.offline_form_addon_active){
navigator.serviceWorker.ready.then(function (registration){
return registration.sync.register('superpwa_form_sendFormData')
}).then(function (){
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('sync event registered'); }}).catch(function (){
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('sync registration failed'); }});
function superpwa_formSubmitOptions(event){
var finalData={};
var inputElements=document.querySelectorAll('input, textarea, select');
for (let elem of inputElements){
if(elem.getAttribute('type')=='radio'){
let chk_name_radio=elem.getAttribute('name');
var parent_div=elem.closest('.frm_opt_container')
if(parent_div.getAttribute('aria-required')=='true'){
let chk_value=parent_div.querySelectorAll('input[name=\"' + chk_name_radio + '\"]:checked');
if(chk_value.length==0){
event.preventDefault();
event.stopPropagation();
alert('Please fill all mandatory fields');
return;
}}
}
if(!elem.value&&((elem.getAttribute('aria-required')=='true'||elem.getAttribute('required'))&&elem.offsetParent!==null)){
event.preventDefault();
event.stopPropagation();
alert('Please fill all mandatory fields');
return;
}
var name=elem.getAttribute('name');
if(name){
if(elem.getAttribute('type')=='checkbox'){
if(elem.checked){
finalData[name]=elem.value;
}}else if(elem.getAttribute('type')=='radio'){
if(elem.checked){
finalData[name]=elem.value;
}}else{
finalData[name]=elem.value;
}}
}
if(JSON.stringify(finalData)!=='{}'){
var allData={
'form_data': finalData,
'action': 'form_submit_data'
};
navigator.serviceWorker.ready.then((registration)=> {
registration.active.postMessage(allData);
event.stopPropagation();
});
}else{
event.preventDefault();
event.stopPropagation();
alert('Error occured during form submission, please try again');
return;
}}
function handleGravityMultistep(btn_type, event){
let target_parent=event.parentNode.parentNode;
let go_next=false;
if(btn_type=='previous'){
target_parent.style.display='none';
let prev_id=target_parent.previousElementSibling.id;
let source_page=document.querySelector('input[name^=\"gform_source_page_number_\"]');
let target_page=document.querySelector('input[name^=\"gform_target_page_number_\"]');
source_page.value=parseInt(source_page.value) - 1;
target_page.value=parseInt(target_page.value) - 1;
if(prev_id){
document.getElementById(prev_id).style.display='block';
}}else{
let inputs=target_parent.querySelectorAll('input, textarea, select');
for (let elem of inputs){
let req_flag=elem.getAttribute('aria-required');
if(req_flag=='true'&&(elem.getAttribute('type')=='checkbox'||elem.getAttribute('type')=='radio')){
let chk_name=elem.getAttribute('name');
let chk_value=target_parent.querySelectorAll('input[name=\"' + chk_name + '\"]:checked');
if(!chk_value.length){
go_next=false;
break;
}else{
go_next=true;
}}else{
if(!elem.value){
go_next=false;
break;
}else{
go_next=true;
}}
}
if(go_next==true){
target_parent.style.display='none';
let next_id=target_parent.nextElementSibling.id;
let source_page=document.querySelector('input[name^=\"gform_source_page_number_\"]');
let target_page=document.querySelector('input[name^=\"gform_target_page_number_\"]');
let gform_wrapper=document.querySelector('.gform_wrapper');
let total_page=gform_wrapper.getAttribute('id').split('_')[2];
source_page.value=parseInt(source_page.value) + 1;
if(target_page < total_page){ target_page.value=parseInt(target_page.value) + 1; }else{ target_page.value=0; }
if(next_id){
document.getElementById(next_id).style.display='block';
}}else{
alert('Please fill correct values in all mandatory fields');
}}
}
window.addEventListener('online', (e)=> { updateOnlineStatus(e) });
function updateOnlineStatus(event){
setTimeout(window.location.reload(),3000);
}
window.onload=function (event){
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('Page Load'); }
if(!navigator.onLine){
updateOfflineStatus(event);
superpwapro_woo_xtheme_compat();
}
window.addEventListener('offline', (e)=> {
updateOfflineStatus(e);
superpwapro_woo_xtheme_compat();
reRenderPage();
});
fallbackForIosSync();
var our_db;
function fallbackForIosSync(){
var isSyncSupported=('serviceWorker' in navigator&&'SyncManager' in window);
if(!isSyncSupported&&navigator.onLine){
var indexedDBOpenRequest=indexedDB.open('superpwaForm', 2);
indexedDBOpenRequest.onerror=function (error){
console.error('IndexedDB error:', error)
}
indexedDBOpenRequest.onupgradeneeded=function (){
if(!this.result.objectStoreNames.contains('post_requests')){
this.result.createObjectStore('post_requests', { autoIncrement: true, keyPath: 'id' })
}}
indexedDBOpenRequest.onsuccess=function (){
our_db=this.result;
sendPostToServerAjax();
}}
}
function reRenderPage(){
var condition=navigator.onLine ? 'online':'offline';
if(condition=='offline'){
var formElement=document.querySelector('form[method=\"post\"]');
if(formElement&&(formElement.classList.contains('frm-fluent-form')||formElement.querySelector('.frm_dropzone'))){
}}
}
function updateOfflineStatus(event){
var condition=navigator.onLine ? 'online':'offline';
if(condition=='offline'){
setTimeout(()=> {
var formElement=document.querySelectorAll('form[method=\"post\"]');
if(formElement&&formElement.length > 0){
for (var i=0; i < formElement.length; i++){
if(formElement[i].hasAttribute('data-form_instance')&&formElement[i].classList.contains('frm-fluent-form')){
var class_to_remove=formElement[i].getAttribute('data-form_instance');
formElement[i].classList.remove(class_to_remove)
}
if(formElement[i].hasAttribute('data-token')){
const antispamInput=document.createElement('input');
antispamInput.type='hidden';
antispamInput.value=formElement[i].getAttribute('data-token');
antispamInput.name='antispam_token';
formElement[i].appendChild(antispamInput);
}
if(formElement[i].querySelector('button[type=\"submit\"]')){ let ourEle=formElement[i].querySelector('button[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
if(formElement[i].querySelector('button[type=\"button\"]')){ let ourEle=formElement[i].querySelector('button[type=\"button\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
if(formElement[i].querySelector('input[type=\"submit\"]')){ let ourEle=formElement[i].querySelector('input[type=\"submit\"]'); ourEle.removeAttribute('onclick'); ourEle.removeAttribute('onkeypress'); ourEle.replaceWith(ourEle.cloneNode(true)); }
formElement[i].addEventListener('submit', superpwa_formSubmitOptions, true);
}}
var inputs=document.getElementsByTagName('input');
if(inputs&&inputs.length){
for (var i=0; i < inputs.length; i++){
if(inputs[i].type.toLowerCase()=='file'){
if(document.querySelector('.dz-error-message')){
document.querySelector('.dz-error-message').remove();
setTimeout(
function (){
document.querySelector('.dz-error-message').innerHTML='';
},
500);
}}
}}
var frm_dropzone_attrs=document.querySelectorAll('.frm_dropzone');
if(frm_dropzone_attrs&&frm_dropzone_attrs.length > 0){
frm_dropzone_attrs.forEach(ele=> {
var container_id=ele.id;
container_id=container_id.match(/\d+/);
const upload_input_parent=ele.closest('.frm_form_field');
var upload_input=upload_input_parent.querySelector('.dz-hidden-input');
if(upload_input){
upload_input.setAttribute("data-containerid", container_id);
}});
}
var frm_dropzone_ele=document.querySelectorAll('.dz-hidden-input');
if(frm_dropzone_ele&&frm_dropzone_ele.length > 0){
frm_dropzone_ele.forEach(ele=> {
ele.addEventListener('change', (function (e){
if(e.target.files[0]||e.target){
var formElement=document.querySelector('form[method="post"]');
var field_id=e.target.getAttribute("data-containerid");
var field_id_label='file' + field_id;
var object1={};
object1['action']='frm_submit_dropzone';
object1['field_id']=field_id;
object1['form_id']=document.querySelector('[name="form_id"]').value;
object1['nonce']=frm_js.nonce;
object1['antispam_token']=formElement.getAttribute('data-token');
object1[field_id_label]=e.target.files[0];
saveAddlAjaxSubmits(frm_js.ajax_url, object1);
}}));
});
}
let gform_next_buttons=document.querySelectorAll('.gform_next_button');
let gform_previous_button=document.querySelectorAll('.gform_previous_button');
if(gform_next_buttons.length > 0){
gform_next_buttons.forEach(button=> {
button.setAttribute('onclick', 'handleGravityMultistep("next",this)');
button.setAttribute('onkeypress', 'handleGravityMultistep("next",this)');
button.setAttribute('type', 'button');
});
}
if(gform_previous_button.length > 0){
gform_previous_button.forEach(button=> {
button.setAttribute('onclick', 'handleGravityMultistep(\"previous\",this)');
button.setAttribute('onkeypress', 'handleGravityMultistep(\"previous\",this)');
button.setAttribute('type', 'button');
});
}}, 500);
}}
function sendPostToServerAjax(){
var savedRequests=[];
var objStore=getObjectStore('ajax_requests');
if(!!objStore){
var req=getObjectStore('ajax_requests').openCursor()
req.onsuccess=async function (event){
var cursor=event.target.result
if(cursor){
savedRequests.push(cursor.value)
cursor.continue()
}else{
if(savedRequests&&savedRequests.length){
for (let savedRequest of savedRequests){
var formData=new FormData();
for (const [key, value] of Object.entries(savedRequest.payload)){
formData.append(key, value);
}
var requestUrl=savedRequest.url
var payload=JSON.stringify(savedRequest.payload)
var method=savedRequest.method
var headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
}
fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', {
headers: headers,
method: method,
body: formData
}).then(function (response){
if(response.status < 400){
getObjectStore('ajax_requests', 'readwrite').delete(savedRequest.id);
return response.json();
}
return false;
}).then(function (response){
if(response){
sendPostToServer([response[0], savedRequest.payload.field_id]);
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('Form Submitted with ajax fields:success'); }}else{
sendPostToServer();
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('Form Submitted without ajax fields:ajax fields present but their saving failed to db'); }}
});
}}else{
sendPostToServer();
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('Form Submitted without ajax fields:no values present in ajax_requests object'); }}
}}
req.onerror=function (error){
sendPostToServer();
}}else{
sendPostToServer();
}}
function sendPostToServer(ajax_params=null){
var savedRequests=[];
var objStore=getObjectStore('post_requests');
if(!!objStore){
var req=getObjectStore('post_requests').openCursor();
req.onsuccess=async function (event){
var cursor=event.target.result;
if(cursor){
savedRequests.push(cursor.value);
cursor.continue();
}else{
for (let savedRequest of savedRequests){
var formData=new FormData();
for (const [key, value] of Object.entries(savedRequest.payload)){
formData.append(key, value);
}
if(ajax_params&&ajax_params.length&&ajax_params[0]){
formData.set('item_meta[' + ajax_params[1] + ']', ajax_params[0]);
}
var requestUrl=savedRequest.url;
var method=savedRequest.method;
/* Request to admin-ajax.php */
var headers={
'Accept': 'application/json, text/javascript, */*; q=0.01',
};
try {
const response=await fetch(requestUrl, {
headers: headers,
method: method,
body: formData
});
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('server response', response); }
if(response.status < 400){
try {
var forDataSave={};
formData.forEach(function (value, key){
forDataSave[key]=value;
});
var forDataSaveJson=JSON.stringify(forDataSave);
const response=await fetch(superpwa_sw.ajax_url+'?action=superpwa_form_store_send', {
headers: headers,
method: method,
body: forDataSaveJson,
});
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('saved request', savedRequest); }
if(response.status < 400){
await getObjectStore('post_requests', 'readwrite').delete(savedRequest.id);
}} catch (error){
console.error('Send to Server failed:', error);
throw error;
}}else{
console.error('Server responded with an error:', response.status);
}} catch (error){
console.error('Send to Server failed:', error);
throw error;
}}
}};}}
function getObjectStore(storeName, mode){
if(!our_db){ return null; }
return our_db.transaction(storeName, mode).objectStore(storeName)
}
function saveAddlAjaxSubmits(submit_url, obj){
/*send data in serviceWorker*/
var indexedDBOpenRequest=indexedDB.open('superpwaForm', 2);
indexedDBOpenRequest.onerror=(event)=> {
console.error('a post form request has been not added to IndexedDB');
};
indexedDBOpenRequest.onupgradeneeded=(event)=> {
const db=event.target.result;
if(!db.objectStoreNames.contains('ajax_requests')){
db.createObjectStore('ajax_requests', { autoIncrement: true, keyPath: 'id' });
}}
indexedDBOpenRequest.onsuccess=(event)=> {
const db=event.target.result;
var request=db.transaction('ajax_requests', 'readwrite').objectStore('ajax_requests').add({
url: submit_url,
payload: obj,
method: 'POST'
})
request.onsuccess=function (event){
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('a post form request has been added to indexedb'); }}
request.onerror=function (error){
console.error(error)
}}
}
function superpwapro_woo_xtheme_compat(){
if(document.querySelector('.add_to_cart_button')){
document.addEventListener("click", function (event){
if(event.target.closest(".add_to_cart_button")){
event.preventDefault();
event.stopPropagation();
const button=event.target.closest(".add_to_cart_button");
const parentele=button.parentNode;
const qty_wrapper=parentele.querySelector(".quantity-wrapper");
const qty=qty_wrapper.querySelector(".qty");
qty.value=1;
if(qty_wrapper){
qty_wrapper.classList.add('is-added');
}
const addToCartUrl=location.href+'?wc-ajax=add_to_cart';
var object_payload={};
object_payload['product_name']=button.getAttribute("data-product_name");
object_payload['success_message']=button.getAttribute("data-success_message");
object_payload['product_sku']=button.getAttribute("data-product_sku");
object_payload['product_id']=button.getAttribute("data-product_id");
object_payload['quantity']=1;
saveAddlAjaxSubmits(addToCartUrl, object_payload);
}});
}else{
if(typeof superpwa_sw!=='undefined'&&superpwa_sw.script_debug){ console.log('add_to_cart_button not found'); }}
if(document.querySelector('.quantity-wrapper .minus')){
document.addEventListener('click', function (event){
if(event.target.closest('.quantity-wrapper .minus')){
event.preventDefault();
event.stopPropagation();
const minus=event.target.closest('.quantity-wrapper .minus');
const minus_parent=minus.parentNode.parentNode.parentNode;
const button=minus_parent.querySelector('.add_to_cart_button');
const qty_wrapper=minus_parent.querySelector('.quantity-wrapper');
const qty_input=minus_parent.querySelector('.quantity-wrapper .qty');
const product_id=button.getAttribute('data-product_id');
if(qty_input.value==0){
qty_wrapper.classList.remove('is-added');
}
setTimeout(
function (){
qty_wrapper.querySelectorAll('.blockUI').forEach(el=> el.remove());
},
5000);
const addToCartUrl='/wp-admin/admin-ajax.php';
var object_payload={};
object_payload['action']='etheme_update_cart_item_quantity_by_id';
object_payload['item_id']=product_id;
object_payload['qty']=qty_input.value;
saveAddlAjaxSubmits(addToCartUrl, object_payload);
}});
}
if(document.querySelector('.quantity-wrapper .plus')){
document.addEventListener('click', function (event){
if(event.target.closest('.quantity-wrapper .plus')){
event.preventDefault();
event.stopPropagation();
const plus=event.target.closest('.quantity-wrapper .plus');
const plus_parent=plus.parentNode.parentNode.parentNode;
const button=plus_parent.querySelector('.add_to_cart_button');
const qty_wrapper=plus_parent.querySelector('.quantity-wrapper');
const qty_input=plus_parent.querySelector('.quantity-wrapper .qty');
const product_id=button.getAttribute('data-product_id');
setTimeout(
function (){
qty_wrapper.querySelectorAll('.blockUI').forEach(el=> el.remove());
},
5000);
qty_wrapper.classList.add('is-added');
const addToCartUrl='/wp-admin/admin-ajax.php';
var object_payload={};
object_payload['action']='etheme_update_cart_item_quantity_by_id';
object_payload['item_id']=product_id;
object_payload['qty']=qty_input.value;
saveAddlAjaxSubmits(addToCartUrl, object_payload);
}});
}}
}};
(function (){
const grid=document.getElementById('post-grid');
if(!grid) return;
const cards=Array.from(grid.querySelectorAll('.post-card'));
const io=new IntersectionObserver((entries)=> {
entries.forEach(e=> {
if(e.isIntersecting){
e.target.classList.add('is-visible');
io.unobserve(e.target);
}});
}, { rootMargin: '120px 0px', threshold: 0.05 });
cards.forEach(c=> io.observe(c));
const sortSelect=document.getElementById('post-sort');
const collator=new Intl.Collator('de', { sensitivity: 'base', ignorePunctuation: true });
function getVal(el, key){
return Number(el.dataset[key])||0;
}
function getTitleKey(el){
return (el.dataset.titlekey||el.dataset.title||(el.querySelector('.post-card__title')?.textContent||''))
.trim();
}
function sortCards(mode){
let sorted=[...cards];
switch (mode){
case 'date_asc':
sorted.sort((a,b)=> getVal(a,'date') - getVal(b,'date')); break;
case 'date_desc':
sorted.sort((a,b)=> getVal(b,'date') - getVal(a,'date')); break;
case 'comments_desc':
sorted.sort((a,b)=> getVal(b,'comments') - getVal(a,'comments')); break;
case 'read_asc':
sorted.sort((a,b)=> getVal(a,'read') - getVal(b,'read')); break;
case 'read_desc':
sorted.sort((a,b)=> getVal(b,'read') - getVal(a,'read')); break;
case 'title_asc':
sorted.sort((a,b)=> collator.compare(getTitleKey(a), getTitleKey(b))); break;
case 'title_desc':
sorted.sort((a,b)=> collator.compare(getTitleKey(b), getTitleKey(a))); break;
default:
break;
}
const frag=document.createDocumentFragment();
sorted.forEach(card=> frag.appendChild(card));
grid.appendChild(frag);
}
if(sortSelect){
sortSelect.addEventListener('change', (e)=> sortCards(e.target.value));
const def=grid.dataset.defaultSort||'date_desc';
sortSelect.value=def;
sortCards(def);
}
const chips=document.querySelectorAll('.filter-chip');
let active='*';
function applyFilter(){
cards.forEach(card=> {
const list=(card.dataset.cats||'').split(',').filter(Boolean);
const show=active==='*' ? true:list.includes(active);
card.style.display=show ? '':'none';
});
}
chips.forEach(btn=> {
btn.addEventListener('click', ()=> {
chips.forEach(b=> b.classList.remove('is-active'));
btn.classList.add('is-active');
active=btn.dataset.filter||'*';
applyFilter();
});
});
cards.forEach((c, i)=> c.style.transitionDelay=(Math.min(i, 8) * 35) + 'ms');
})();
(function(){
function syncMultiSelectsToCommaFields(form){
const multiIds=['ade-land','ade-jahr','ade-label'];
multiIds.forEach(id=> {
const sel=form.querySelector('#'+id);
if(!sel) return;
sel.addEventListener('change', function(){
});
});
form.addEventListener('submit', function(e){
['land','jahr','label'].forEach((name, idx)=> {
const el=form.querySelector('#ade-' + name);
if(!el) return;
const values=Array.from(el.selectedOptions).map(o=> o.value.trim()).filter(Boolean);
if(values.length===0){
const hidden=form.querySelector('input[name="'+name+'"]');
if(hidden) hidden.parentNode.removeChild(hidden);
}else{
let hidden=form.querySelector('input[name="'+name+'"]');
if(!hidden){
hidden=document.createElement('input');
hidden.type='hidden';
hidden.name=name;
form.appendChild(hidden);
}
hidden.value=values.join(',');
}});
try {
const sort=form.querySelector('#ade-sort')?.value||'';
localStorage.setItem('ade_sort', sort);
} catch(e){}});
}
function rewritePaginationWithCurrentParams(){
const pagers=document.querySelectorAll('.pagination a, .nav-links a, .page-numbers a');
if(!pagers.length) return;
const params=new URLSearchParams(window.location.search);
if([...params.keys()].length===0) return;
pagers.forEach(a=> {
try {
const url=new URL(a.getAttribute('href'), window.location.origin);
['s','sort','land','jahr','label'].forEach(k=> url.searchParams.delete(k));
params.forEach((v, k)=> {
if(['s','sort','land','jahr','label'].includes(k)){
url.searchParams.set(k, v);
}});
a.setAttribute('href', url.toString());
} catch(e){}});
}
function restoreSortFromStorage(){
const params=new URLSearchParams(window.location.search);
if(params.has('sort')) return;
try {
const saved=localStorage.getItem('ade_sort');
if(!saved) return;
const sel=document.getElementById('ade-sort');
if(sel&&[...sel.options].some(o=> o.value===saved)){
sel.value=saved;
}} catch(e){}}
document.addEventListener('DOMContentLoaded', function(){
const form=document.querySelector('form.ade-archive-controls');
if(form){
restoreSortFromStorage();
syncMultiSelectsToCommaFields(form);
}
rewritePaginationWithCurrentParams();
});
})();
(function (){
const qs=(sel, el=document)=> el.querySelector(sel);
const qsa=(sel, el=document)=> Array.from(el.querySelectorAll(sel));
const btnOpen=qs('#mobile-nav-toggle');
const btnClose=qs('#mobile-nav-close');
const drawer=qs('#mobile-drawer');
const backdrop=qs('#mobile-backdrop');
const btnSearch=qs('#mobile-search-toggle');
const searchBox=qs('#mobile-search');
if(!btnOpen||!drawer||!backdrop) return;
let lastFocused=null;
function openDrawer(){
lastFocused=document.activeElement;
document.body.classList.add('mobile-lock');
drawer.classList.add('is-open');
backdrop.classList.add('is-open');
backdrop.hidden=false;
drawer.setAttribute('aria-hidden','false');
btnOpen.setAttribute('aria-expanded','true');
const focusable=qsa('a, button, [tabindex]:not([tabindex="-1"])', drawer).filter(el=> !el.hasAttribute('disabled'));
(focusable[0]||btnClose||drawer).focus();
document.addEventListener('keydown', onKeydown);
}
function closeDrawer(){
document.body.classList.remove('mobile-lock');
drawer.classList.remove('is-open');
backdrop.classList.remove('is-open');
drawer.setAttribute('aria-hidden','true');
btnOpen.setAttribute('aria-expanded','false');
setTimeout(()=> { backdrop.hidden=true; }, 200);
document.removeEventListener('keydown', onKeydown);
if(lastFocused) lastFocused.focus();
}
function onKeydown(e){
if(e.key==='Escape'){
closeDrawer();
return;
}
if(e.key==='Tab'){
const focusable=qsa('a, button, [tabindex]:not([tabindex="-1"])', drawer).filter(el=> !el.hasAttribute('disabled'));
if(!focusable.length) return;
const first=focusable[0];
const last=focusable[focusable.length - 1];
if(e.shiftKey&&document.activeElement===first){
last.focus(); e.preventDefault();
}else if(!e.shiftKey&&document.activeElement===last){
first.focus(); e.preventDefault();
}}
}
btnOpen.addEventListener('click', ()=> {
const expanded=btnOpen.getAttribute('aria-expanded')==='true';
expanded ? closeDrawer():openDrawer();
});
if(btnClose) btnClose.addEventListener('click', closeDrawer);
backdrop.addEventListener('click', closeDrawer);
if(btnSearch&&searchBox){
btnSearch.addEventListener('click', (e)=> {
e.preventDefault();
const open=btnSearch.getAttribute('aria-expanded')==='true';
const next = !open;
btnSearch.setAttribute('aria-expanded', String(next));
searchBox.hidden = !next;
searchBox.setAttribute('aria-hidden', String(!next));
if(next){
try { searchBox.scrollIntoView({behavior:'smooth', block:'start'});} catch(e){}
const input=searchBox.querySelector('input[type="search"], .search-field, input[name="s"]');
if(input) input.focus();
}});
}
const menu=qs('.mobile-menu', drawer)||qs('#mobile-drawer .menu');
if(menu){
qsa('li.menu-item-has-children', menu).forEach((li, idx)=> {
const link=qs(':scope > a', li);
const sub=qs(':scope > ul.sub-menu', li);
if(!sub||!link) return;
const id=`submenu-${idx}`;
sub.id=sub.id||id;
sub.setAttribute('role','group');
sub.setAttribute('aria-label', (link.textContent||'Untermenü').trim());
const btn=document.createElement('button');
btn.className='submenu-toggle';
btn.setAttribute('aria-expanded', 'true');
btn.setAttribute('aria-controls', sub.id);
btn.setAttribute('aria-label', 'Untermenü umschalten');
btn.innerHTML='<svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true"><path d="M7 10l5 5 5-5z"/></svg>';
link.appendChild(btn);
btn.addEventListener('click', (e)=> {
e.preventDefault();
const open=btn.getAttribute('aria-expanded')==='true';
const next = !open;
btn.setAttribute('aria-expanded', String(next));
li.classList.toggle('is-collapsed', !next);
});
});
}})();
(function (){
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', init, { once: true });
}else{
init();
}
function init(){
const $=(sel, ctx=document)=> ctx.querySelector(sel);
const $$=(sel, ctx=document)=> Array.from(ctx.querySelectorAll(sel));
const root=document.documentElement;
const panel=$('#ade-a11y-panel');
const toggle=$('#ade-a11y-toggle');
const closeBtn=$('#ade-a11y-close');
const resetBtn=$('#ade-a11y-reset');
const readingLine=$('#ade-reading-line');
const readingMarker=$('#ade-reading-marker');
const themeButtons=$$('.ade-theme-btn');
if(!panel||!toggle){
console.warn('[ADE A11y] Panel oder Toggle nicht gefunden.');
return;
}
const STORE_KEY='ade_a11y_prefs_v4';
let state=loadState();
Object.entries(state.classes||{}).forEach(([cls, on])=> {
if(on) root.classList.add(cls);
});
setGroupPressed('font',       state.font||'base');
setGroupPressed('ls',         state.ls||'base');
setGroupPressed('lh',         state.lh||'base');
setGroupPressed('brightness', state.brightness||'base');
mirrorSwitchStates();
updateMarkerPosition();
setupMenuTheme();
toggle.setAttribute('aria-expanded', 'false');
panel.setAttribute('aria-modal', 'true');
panel.setAttribute('role', 'dialog');
panel.hidden=true;
toggle.addEventListener('click', ()=> {
if(panel.hidden) openPanel();
else closePanel();
});
closeBtn&&closeBtn.addEventListener('click', closePanel);
document.addEventListener('keydown', (ev)=> {
if(ev.key==='Escape'&&!panel.hidden){
closePanel();
toggle.focus();
}});
function openPanel(){
panel.hidden=false;
toggle.setAttribute('aria-expanded', 'true');
const first=panel.querySelector('button,[role="switch"],[href],input,select,textarea,[tabindex]:not([tabindex="-1"])'
);
first&&first.focus();
trapFocus(panel);
}
function closePanel(){
panel.hidden=true;
toggle.setAttribute('aria-expanded', 'false');
releaseFocusTrap();
}
$$('.ade-switch').forEach(sw=> {
sw.addEventListener('click', ()=> {
const cls=sw.dataset.class;
if(!cls) return;
const on=root.classList.toggle(cls);
sw.setAttribute('aria-checked', String(on));
state.classes[cls]=on;
saveState(state);
});
});
const groupMap={
font: {
base: [],
lg:   ['ade-font-lg'],
xl:   ['ade-font-xl']
},
ls: {
base: [],
ls1:  ['ade-ls-1'],
ls2:  ['ade-ls-2']
},
lh: {
base: [],
lh1:  ['ade-lh-1'],
lh2:  ['ade-lh-2']
},
brightness: {
base: [],
low:  ['ade-bright-low'],
high: ['ade-bright-high']
}};
$$('.ade-step').forEach(btn=> {
btn.addEventListener('click', ()=> {
const group=btn.dataset.group;
const value=btn.dataset.value;
const action=btn.dataset.action;
if(action){
handleMarkerAction(action);
return;
}
if(!group||!value||!groupMap[group]) return;
Object.values(groupMap[group]).forEach(arr=> {
arr.forEach(cls=> {
root.classList.remove(cls);
if(state.classes[cls]) delete state.classes[cls];
});
});
const toAdd=groupMap[group][value]||[];
toAdd.forEach(cls=> {
root.classList.add(cls);
state.classes[cls]=true;
});
if(group==='font')       state.font=value;
if(group==='ls')         state.ls=value;
if(group==='lh')         state.lh=value;
if(group==='brightness') state.brightness=value;
setGroupPressed(group, value);
saveState(state);
});
});
function setupMenuTheme(){
if(!themeButtons.length) return;
let theme=state.menuTheme==='dark' ? 'dark':'light';
setMenuTheme(theme);
themeButtons.forEach(btn=> {
btn.addEventListener('click', ()=> {
const t=btn.dataset.theme==='dark' ? 'dark':'light';
state.menuTheme=t;
setMenuTheme(t);
saveState(state);
});
});
}
function setMenuTheme(theme){
const isDark=theme==='dark';
root.classList.toggle('ade-menu-theme-dark', isDark);
themeButtons.forEach(btn=> {
const active=btn.dataset.theme===theme;
btn.setAttribute('aria-pressed', String(active));
});
}
resetBtn&&resetBtn.addEventListener('click', ()=> {
Object.keys(state.classes).forEach(cls=> root.classList.remove(cls));
root.classList.remove('ade-reading-line-on', 'ade-marker-set');
root.classList.remove('ade-menu-theme-dark');
state={
font: 'base',
ls: 'base',
lh: 'base',
brightness: 'base',
menuTheme: 'light',
classes: {},
markerY: null
};
setGroupPressed('font',       'base');
setGroupPressed('ls',         'base');
setGroupPressed('lh',         'base');
setGroupPressed('brightness', 'base');
mirrorSwitchStates();
setMenuTheme('light');
if(readingLine)   readingLine.style.top='0px';
if(readingMarker) readingMarker.style.top='-9999px';
saveState(state);
});
document.addEventListener('mousemove', (ev)=> {
if(!readingLine||!root.classList.contains('ade-reading-line-on')) return;
readingLine.style.top=`${ev.clientY}px`;
});
window.addEventListener('scroll', ()=> {
updateMarkerPosition();
});
function handleMarkerAction(action){
if(action==='marker-set'){
state.markerY=window.scrollY;
root.classList.add('ade-marker-set');
updateMarkerPosition();
saveState(state);
}else if(action==='marker-go'){
if(typeof state.markerY==='number'){
window.scrollTo({ top: state.markerY, behavior: 'smooth' });
}}else if(action==='marker-clear'){
state.markerY=null;
root.classList.remove('ade-marker-set');
if(readingMarker) readingMarker.style.top='-9999px';
saveState(state);
}}
function updateMarkerPosition(){
if(!readingMarker) return;
if(typeof state.markerY!=='number'||!root.classList.contains('ade-marker-set')){
readingMarker.style.top='-9999px';
return;
}
const delta=state.markerY - window.scrollY;
if(delta < 0||delta > window.innerHeight){
readingMarker.style.top='-9999px';
}else{
readingMarker.style.top=`${delta}px`;
}}
function setGroupPressed(group, value){
$$('.ade-step').forEach(btn=> {
if(btn.dataset.group===group){
const isActive=btn.dataset.value===value;
btn.setAttribute('aria-pressed', String(isActive));
}});
}
function mirrorSwitchStates(){
$$('.ade-switch').forEach(sw=> {
const cls=sw.dataset.class;
if(!cls) return;
const on=root.classList.contains(cls);
sw.setAttribute('aria-checked', String(on));
});
}
function loadState(){
try {
const raw=JSON.parse(localStorage.getItem(STORE_KEY))||{};
return Object.assign({
font: 'base',
ls: 'base',
lh: 'base',
brightness: 'base',
menuTheme: 'light',
classes: {},
markerY: null
},
raw
);
} catch (e){
return {
font: 'base',
ls: 'base',
lh: 'base',
brightness: 'base',
menuTheme: 'light',
classes: {},
markerY: null
};}}
function saveState(next){
try {
localStorage.setItem(STORE_KEY, JSON.stringify(next));
} catch (e){}}
let lastActiveElement=null;
let focusTrapHandler=null;
function trapFocus(container){
lastActiveElement=document.activeElement;
const focusableSelectors =
'a[href], area[href], input:not([disabled]), select:not([disabled]), ' +
'textarea:not([disabled]), button:not([disabled]), iframe, object, embed, ' +
'[tabindex]:not([tabindex="-1"]), [contenteditable=true]';
const focusable=()=>
Array.from(container.querySelectorAll(focusableSelectors))
.filter(el=> el.offsetParent!==null);
focusTrapHandler=function (e){
if(e.key!=='Tab') return;
const list=focusable();
if(!list.length) return;
const first=list[0];
const last=list[list.length - 1];
if(e.shiftKey){
if(document.activeElement===first){
e.preventDefault();
last.focus();
}}else{
if(document.activeElement===last){
e.preventDefault();
first.focus();
}}
};
document.addEventListener('keydown', focusTrapHandler);
}
function releaseFocusTrap(){
if(focusTrapHandler){
document.removeEventListener('keydown', focusTrapHandler);
focusTrapHandler=null;
}
if(lastActiveElement&&lastActiveElement.focus){
lastActiveElement.focus();
}
lastActiveElement=null;
}}
})();