1 2class FemanagerValidation{constructor(e){this.element=e,this.requestCallback=null,this.submitFormAllowed=!1,0===this.element.querySelectorAll("*[data-validation]").length&&(this.submitFormAllowed=!0),this.init()}init(){this.element.querySelectorAll('*[data-validation]:not([type="file"])').forEach(e=>{e.addEventListener("blur",()=>{this.validateField(e,!1)})});this.element.querySelectorAll('*[data-validation][type="file"]').forEach(e=>{e.addEventListener("change",()=>{this.validateField(e,!1)})}),this.element.addEventListener("submit",e=>{document.body.style.cursor="wait",this.submitFormAllowed||(e.preventDefault(),this.validateAllFields(this.element))})}createRequestsCompleted(e={}){const t=e.numRequest||0;let a=e.requestsCompleted||0;const r=e.element||null,l=[];e.singleCallback&&l.push(e.singleCallback);const i=()=>{document.body.style.cursor="default",this.submitForm(r),l.forEach(e=>e())};return{addCallbackToQueue:(e,r)=>{e&&a++,r&&l.push(r),a===t&&i()},requestComplete:e=>{e&&a++,a===t&&i()},setCallback:e=>{l.push(e)}}}validateAllFields(e){this.requestCallback=this.createRequestsCompleted({numRequest:e.querySelectorAll("*[data-validation]").length,element:e}),e.querySelectorAll("*[data-validation]").forEach(e=>{this.validateField(e,!0)})}validateField(e,t){if(e.disabled)return void(t&&this.requestCallback.addCallbackToQueue(!0));const a=e.closest("form"),r=a.dataset.femanagerPlugin,l="tx_"+a.dataset.femanagerPluginName,i=a.querySelector('div:first-child input[name="'+l+'[user][__identity]"]')?.value,n=a.querySelector('div:first-child input[name="'+l+'[__referrer][@action]"]')?.value,o=Femanager.getBaseUrl()+"?id="+document.getElementById("femanagerPid")?.value+"&type=1548935210",s=document.getElementById("femanagerStoragePid")?.value,d=e.getAttribute("data-validation"),c=this.getValidations(e);let u=e.value;"checkbox"!==e.type||e.checked||(u="");let m="";if(this.indexOfArray(c,"sameAs")){const e=this.indexOfArray(c,"sameAs"),t=this.getStringInBrackets(e),a=document.querySelector('input[name="'+l+"[user]["+t+']"]');a&&(m=a.value,"checkbox"!==a.type||a.checked||(m=""))}const g=new URLSearchParams;g.append("storagePid",s||""),g.append("L",document.getElementById("femanagerLanguage")?.value||""),g.append("id",document.getElementById("femanagerPid")?.value||""),g.append("tx_femanager_validation[validation]",d||""),g.append("tx_femanager_validation[value]",u||""),g.append("tx_femanager_validation[field]",this.getFieldName(e)||""),g.append("tx_femanager_validation[user]",void 0!==i?i:""),g.append("tx_femanager_validation[additionalValue]",m||""),g.append("tx_femanager_validation[plugin]",r||""),g.append("tx_femanager_validation[pluginName]",l||""),g.append("tx_femanager_validation[referrerAction]",n||""),fetch(o,{method:"POST",body:g,headers:{"Content-Type":"application/x-www-form-urlencoded"},cache:"no-cache"}).then(e=>e.json()).then(a=>{if(t&&this.requestCallback.addCallbackToQueue(!0),a)try{a.validate?this.cleanErrorMessage(e):this.writeErrorMessage(e,a.message)}catch(t){e.insertAdjacentHTML("beforebegin",data)}}).catch(()=>{this.logAjaxError()})}getFieldName(e){let t="";const a=e.name.split("[");return t=void 0!==a[2]?a[2].replace("]",""):a[1].replace("]",""),t}writeErrorMessage(e,t){this.cleanErrorMessage(e);const a=document.querySelector(".femanager_validation_container");if(!a)return;const r=a.innerHTML.replace("###messages###",t);e.insertAdjacentHTML("beforebegin",r),e.closest(".form-group").classList.add("has-error"),e.classList.add("error")}cleanErrorMessage(e){e.closest(".form-group").classList.remove("has-error"),e.parentNode.querySelectorAll(".alert").forEach(t=>{t!==e&&t.remove()}),e.classList.remove("error")}submitForm(e){if(0===e.querySelectorAll(".error").length)this.submitFormAllowed=!0,e.submit();else{const t=e.querySelector(".error");if(!t)return;t.scrollIntoView({behavior:"smooth"})}}indexOfArray(e,t){for(let a=0;a<e.length;a++)if(-1!==e[a].indexOf(t))return e[a];return""}getValidations(e){return e.getAttribute("data-validation").split(",")}getStringInBrackets(e){let t="";if(-1!==e.indexOf("(")){const a=e.split("(");t=a[1].substr(0,a[1].length-1)}return t}logAjaxError(){"object"==typeof console&&console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}}function initFemanagerValidation(){document.querySelectorAll(".feManagerValidation").forEach(e
2=>{new FemanagerValidation(e)})} 3document.addEventListener("DOMContentLoaded",function(){var e;function t(e){return(e+="").charAt(0).toLowerCase()+e.substr(1)}e=null!=document.querySelector(".tx-femanager[data-labels]")?JSON.parse(document.querySelector(".tx-femanager[data-labels]").dataset.labels):[],initFemanagerValidation(),document.querySelectorAll("*[data-confirm]").forEach(function(e){e.addEventListener("click",function(t){var n=e.getAttribute("data-confirm");confirm(n)||t.preventDefault()})}),document.querySelectorAll("[data-data-endpoint]").forEach(function(n){var a=function(a){var o={"tx_femanager_data[action]":n.dataset.dataEndpoint,"tx_femanager_data[controller]":"Data"},arguments=JSON.parse(JSON.stringify(n.dataset));for(var r in arguments)if(arguments.hasOwnProperty(r)&&r.match("arguments")){var i=document.getElementById(arguments[r]);if(i)o["tx_femanager_data["+t(r.substr(9))+"]"]=i.value}var d=document.getElementById("femanagerPid"),l=Femanager.getBaseUrl()+"index.php?id="+(d?d.value:"")+"&type=1594138042",s=n.dataset.selectedValue;fetch(l,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(o),cache:"no-cache"}).then(function(e){if(!e.ok)throw new Error("Network response was not ok");return e.json()}).then(function(t){for(var a in n.disabled=!0,n.options.length=0,""===s||t.hasOwnProperty(s)||(n.options[n.options.length]=new Option(e.please_choose)),t)if(t.hasOwnProperty(a)){var o=a===s;n.options[n.options.length]=new Option(t[a],a,o,o),n.disabled=!1}}).catch(function(e){console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}),n.disabled=!0,n.options.length=0,n.options[0]=new Option(e.loading_states)},o=n.dataset.triggerFields;void 0!==o?o.split(",").forEach(function(e){var t=document.getElementById(e);void 0!==t&&t.addEventListener("change",a)}):n.addEventListener("change",a),a()})}),window.Femanager={},window.Femanager.getBaseUrl=function(){var e,t=document.querySelector("base");if(t)e=t.href;else if(-1!==window.location.hostname.indexOf("localhost"))e="";else{var n="";window.location.port.length>0&&(n=":"+window.location.port),e="https:"!==window.location.protocol?"http://"+window.location.hostname+n+"/":"https://"+window.location.hostname+n+"/"}return e}; 4// Consent class 5const serviceConfigs = JSON.parse(JSON.stringify(allServiceSettings)); 6 7// Function to retrieve a cookie by its name 8function getCookie(name) { 9 var nameEQ = name + "="; 10 var ca = document.cookie.split(';'); 11 for (var i = 0; i < ca.length; i++) { 12 var c = ca[i]; 13 while (c.charAt(0) == ' ') c = c.substring(1); 14 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 15 } 16 return null; 17} 18 19// Function to set a cookie with a specified name, value, and expiration date 20function setCookie(name, value, daysToExpire) { 21 var expires = ""; 22 if (daysToExpire) { 23 var date = new Date(); 24 date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000)); 25 expires = "; expires=" + date.toUTCString(); 26 } 27 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 28} 29 30// Function to evaluate the final consent value based on service settings 31function evaluateFinalValue(serviceSettings, settingKey) { 32 let hasGranted = false; 33 let hasDenied = false; 34 35 // Iterate through all services and check their consent settings 36 serviceSettings.forEach(settings => { 37 if (settings[settingKey] === 'granted') 38 if (settings[settingKey] === 'granted') hasGranted = true; 39 else if (settings[settingKey] === 'denied') hasDenied = true; 40 }); 41 42 // If there is at least one "denied" value, return "denied" 43 if (hasDenied) return 'denied'; 44 45 // If there is only one "granted" value, return "granted" 46 if (hasGranted) return 'granted'; 47 48 // If all values are "not set" or there are no explicit "granted"/"denied" values, return "denied" 49 return 'denied'; 50} 51 52// Function to update the cookie with the final consent values 53function updateCookieWithFinalConsent(name, daysToExpire, services) { 54 const cookieValue = getCookie(name); 55 if (cookieValue !== null) { 56 const obj = JSON.parse(decodeURIComponent(cookieValue)); 57 58 // Evaluate and set the final values for each consent setting 59 ['ad_storage','analytics_storage','ad_user_data','ad_personalization', 60 'personalization_storage','functionality_storage','security_storage'] 61 .forEach(key => { 62 obj[key] = evaluateFinalValue(services, key); 63 }); 64 65 setCookie(name, encodeURIComponent(JSON.stringify(obj)), daysToExpire); 66 pushTriggerAfterConsentChanged(obj); 67 } else {
68 console.log("Cookie name '" + name + "' does not exist."); 69 } 70} 71 72// Function to push the trigger for gtm after consent changed 73function pushTriggerAfterConsentChanged(changes) { 74 window.dataLayer = window.dataLayer || []; 75 window.dataLayer.push({ 76 event: 'cmp_we_cookie_consent_changed', // Custom-Event-Name 77 we_consent_state: { // Add all final states 78 ad_storage : changes.ad_storage, 79 analytics_storage : changes.analytics_storage, 80 ad_user_data : changes.ad_user_data, 81 ad_personalization : changes.ad_personalization, 82 personalization_storage: changes.personalization_storage, 83 functionality_storage : changes.functionality_storage, 84 security_storage : changes.security_storage 85 } 86 }); 87} 88 89// Debug function to log all stored service settings 90function getAllServiceSettings() { 91 // Log all service settings to the console 92 console.log(allServiceSettings); 93 // Optionally return allServiceSettings; 94 // return allServiceSettings; 95} 96 97// main controller 98let ConsentApp = new function ConsentController() { 99 // public functions 100 /** 101 * Callback function for GoogleTagManager Script to handle consent state changes and fire the dataLayer trigger 102 * @param bool state 103 * @param object service 104 */ 105 this.consentChanged = function(state, service) { 106 // Check if the service is related to Google Tag Manager 107 const isGTM = service.name.indexOf('google-tagmanager-service') !== -1; 108 if (isGTM) { 109 // A) Remap all services - only the service that has just been changed receives either its config values (if state=true) or "denied" all-over. 110 allServiceSettings = allServiceSettings.map(tempSettings => { 111 if (tempSettings.serviceId !== service.name) { 112 // Unmodified copy 113 return { 114 serviceId: tempSettings.serviceId, 115 serviceConsent: tempSettings.serviceConsent, 116 ad_storage: tempSettings.ad_storage, 117 analytics_storage: tempSettings.analytics_storage, 118 ad_user_data: tempSettings.ad_user_data, 119 ad_personalization: tempSettings.ad_personalization, 120 functionality_storage: tempSettings.functionality_storage, 121 personalization_storage: tempSettings.personalization_storage, 122 security_storage: tempSettings.security_storage 123 }; 124 } 125 126 // Get the original config 127 const originalConfig = serviceConfigs.find(original => original.serviceId === tempSettings.serviceId); 128 const updated = { serviceId: tempSettings.serviceId, serviceConsent: state }; 129 130 // For every consent type 131 ['ad_storage','analytics_storage','ad_user_data','ad_personalization', 132 'personalization_storage','functionality_storage','security_storage'] 133 .forEach(key => { 134 // if consent is granted: accept from config 135 // if consent is denied: always 'denied' 136 updated[key] = state ? originalConfig[key] : 'denied'; 137 }); 138 139 return updated; 140 }); 141 142 // B) Evaluate only the granted services 143 // Filter allServiceSettings to include only services with serviceConsent = true 144 // Update cookie 145 const relevantServices = allServiceSettings.filter(relevant => relevant.serviceConsent); 146 updateCookieWithFinalConsent(storageName, cookieExpiresAfterDays, relevantServices); 147 148 // C) dataLayer-Push based on the state 149 window.dataLayer = window.dataLayer || []; 150 window.dataLayer.push({ 151 event: service.gtm.trigger, 152 [service.gtm.variable]: state 153 }); 154 } 155 156 // D) Check if the own callback function is allready defined 157 if (service.ownCallback) { 158 if (typeof window[service.ownCallback] === 'function') { 159 window[service.ownCallback](state, service); 160 } else { 161 console.error('The Callback function ' + service.ownCallback + ' is not yet defined. Please create it first.'); 162 } 163 } 164 }; 165 166 // constructor (modal and safari) 167 (function contruct() { 168 document.addEventListener('DOMContentLoaded', function () { 169 // Listener for the button on the privacy page, to edit the consent 170 document.addEventListener('click', function (event) { 171 if (event.target.closest('.js-showConsentModal')) { 172 event.preventDefault(); 173 klaro.show(); 174 } 175 }); 176 }); 177 })(); 178 179 const isSafari = navigator.vendor && 180 navigator.vendor.indexOf('Apple') > -1 && 181 navigator.userAgent && 182 navigator.userAgent.indexOf('CriOS') == -1 && 183 navigator.userAgent.indexOf('FxiOS') == -1; 184 185 document.addEventListener('DOMContentLoaded', function() { 186 setTimeout(function() { 187 188 setServiceSuccessVarBtn(); 189 190 document.addEventListener('click', function (event) { 191 if (event.target.matches('.cn-decline')) { 192 setServiceSuccessVarBtn(); 193 } 194 }); 195 196 document.addEventListener('click', function (event) {
197 if (event.target.matches('.cm-btn-accept')) { 198 setServiceSuccessVarBtn(); 199 } 200 }); 201 202 document.addEventListener('click', function (event) { 203 if (event.target.matches('.cm-btn-decline')) { 204 setServiceSuccessVarBtn(); 205 } 206 }); 207 208 if (isSafari!==true) { 209 document.getElementById('klaro').classList.remove('safari'); 210 } else { 211 document.getElementById('klaro').classList.add('safari'); 212 } 213 }) 214 }); 215}; 216// End main controller 217 218var optOutLink = document.getElementById("ga-opt-out"); 219 220if(optOutLink) { 221 optOutLink.onclick = function() { 222 document.cookie = 'ga-opt-out=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; 223 this.innerHTML = "Google Analytics opt-out successful"; 224 return false; 225 } 226} 227 228// Functions after window.load(): 229window.addEventListener('load', function () { 230 const iframes = document.querySelectorAll('iframe'); 231 232 if (iframes.length > 0) { 233 iframes.forEach(function (iframe) { 234 let attrDataSrc = iframe.getAttribute('src'); 235 if (!attrDataSrc) { 236 attrDataSrc = iframe.getAttribute('data-src'); 237 } 238 239 if (attrDataSrc && (attrDataSrc.includes('youtube') || attrDataSrc.includes('vimeo'))) { 240 // Adjust measures for videoOverlay similar to iframe: 241 const parent = iframe.parentElement; 242 const contextNotice = parent.querySelector('.klaro.cm-as-context-notice'); 243 244 if (contextNotice) { 245 iframe.style.display = 'block'; 246 247 // Set the width of .klaro.cm-as-context-notice to the iframe's width 248 contextNotice.style.width = iframe.offsetWidth + 'px'; 249 250 if (iframe.offsetHeight < contextNotice.offsetHeight) { 251 const cmButtons = contextNotice.querySelector('.cm-buttons'); 252 if (cmButtons) { 253 cmButtons.style.marginTop = '1em'; 254 } 255 } 256 } 257 } 258 }); 259 } 260 261 // Add class for small context-notice box: if video integration within small iframes (width < 300px) 262 document.querySelectorAll('.klaro.we_cookie_consent.cm-as-context-notice').forEach(function(element) { 263 if (element.offsetWidth <= 300) { 264 element.classList.add('notice--minified'); 265 } 266 }); 267 268 // Add class to avoid Google to crawl consent info text 269 document.querySelectorAll('.klaro.we_cookie_consent .cn-body').forEach(function(element) { 270 element.setAttribute('data-nosnippet', 'data-nosnippet'); 271 }); 272}); 273 274// Workaround: Show "Always" Button for overlay (for example youtube videos) only when the klaro cookie is set 275function setServiceSuccessVarBtn() 276{ 277 const klaroCookie = getCookie('klaro'); 278 279 if (klaroCookie) { 280 const allServiceSuccessVarBtn = document.querySelectorAll('.cm-btn-success-var'); 281 if (allServiceSuccessVarBtn.length > 0) {
282 allServiceSuccessVarBtn.forEach((serviceSuccessVarBtn) => { 283 serviceSuccessVarBtn.style.setProperty('display', 'block', 'important'); 284 } 285 ) 286 } 287 } 288} 289 290document.addEventListener('DOMContentLoaded', function () { 291 292 if (checkCookieExists('klaro')) { 293 createTooltip(); 294 } 295 296 setTimeout(function () { 297 const klaroDiv = document.getElementById('klaro'); 298 const buttons = klaroDiv.querySelectorAll('button'); 299 300 function handleClick(event) { 301 createTooltip(); 302 if (document.querySelector('#klaro .cookie-notice') == null && document.querySelector('#klaro .cookie-modal') == null) { 303 } 304 } 305 306 buttons.forEach(button => { 307 button.addEventListener('click', handleClick); 308 }); 309 }); 310 311 setTimeout(function () { 312 if (document.querySelector('.cm-link')) { 313 document.querySelector('.cm-link').addEventListener('click', function () { 314 if (document.querySelector('.cm-btn-success')) { 315 document.querySelector('.cm-btn-success').addEventListener('click', function () { 316 createTooltip(); 317 }); 318 } 319 320 if (document.querySelector('.cn-decline')) { 321 document.querySelector('.cn-decline').addEventListener('click', function () { 322 createTooltip(); 323 }); 324 } 325 326 if (document.querySelector('.cm-btn-accept-all')) { 327 document.querySelector('.cm-btn-accept-all').addEventListener('click', function () { 328 createTooltip(); 329 }); 330 } 331 }); 332 } 333 }, 1000); 334}); 335 336function checkCookieExists(cookieName) { 337 let cookies = document.cookie.split(';'); 338 339 for (let i = 0; i < cookies.length; i++) { 340 let cookie = cookies[i]; 341 // Remove leading spaces (if any) 342 while (cookie.charAt(0) == ' ') { 343 cookie = cookie.substring(1); 344 } 345 // Check if the cookie name matches 346 if (cookie.indexOf(cookieName + '=') == 0) { 347 return true; 348 } 349 } 350 return false; 351} 352 353function createTooltip() { 354 if (cookieIconPermanentlyAvailable === '1') { 355 let iconTooltip = document.createElement('div'); 356 let iconImgTag = document.createElement('img'); 357 let iconBtn = document.createElement('button'); 358 let iconContainer = document.createElement('div'); 359 360 // Button 361 iconBtn.type = 'button'; 362 iconBtn.className = 'consent-trigger js-showConsentModal'; 363 iconBtn.setAttribute('aria-label', translatedButtonTextCookieSettings); 364 iconBtn.setAttribute('aria-haspopup', 'dialog'); 365 366 // Image 367 iconImgTag.src = cookieSettingsImgPathDefault; 368 iconImgTag.alt = ''; 369 iconImgTag.setAttribute('aria-hidden', 'true'); 370 iconImgTag.width = 85; iconImgTag.height = 85; 371 iconImgTag.style.cssText = 'margin-right:0px;width:85px;height:85px;'; 372 373 // Hover/Fokus (Image & Tooltip) 374 function showTip(){ iconTooltip.style.display = 'block'; iconImgTag.src = cookieSettingsImgPathHover; } 375 function hideTip(){ iconTooltip.style.display = 'none'; iconImgTag.src = cookieSettingsImgPathDefault; } 376 377 iconBtn.addEventListener('mouseover', showTip); 378 iconBtn.addEventListener('mouseout', hideTip); 379 iconBtn.addEventListener('focusin', showTip); 380 iconBtn.addEventListener('focusout', hideTip); 381 382 // Tooltip 383 iconTooltip.textContent = translatedButtonTextCookieSettings; 384 iconTooltip.classList.add('consent-cookie-text'); 385 iconTooltip.style.cssText = 'display:none;'; 386 // (optional ARIA) 387 // tooltip.id = 'consent-tooltip'; 388 // tooltip.setAttribute('role', 'tooltip'); 389 // btn.setAttribute('aria-describedby', 'consent-tooltip'); 390 391 // Container 392 iconContainer.classList.add('consent-cookie'); 393 iconContainer.style.cssText = 'display:flex;'; 394 395 // DOM 396 iconBtn.appendChild(iconImgTag); 397 iconContainer.appendChild(iconBtn); 398 iconContainer.appendChild(iconTooltip); 399 document.body.appendChild(iconContainer); 400 } 401} 402 403/*! For license information please see mmenu.js.LICENSE.txt */ 404(() => { 405 'use strict'; 406 const e = { hooks: {}, navbar: { add: !0, title: 'Menu', titleLink: 'parent' }, slidingSubmenus: !0 }, t = { 407 classNames: {
408 divider: 'Divider', 409 nolistview: 'NoListview', 410 nopanel: 'NoPanel', 411 panel: 'Panel', 412 selected: 'Selected', 413 vertical: 'Vertical' 414 }, 415 language: null, 416 panelNodetype: ['ul', 'ol', 'div'], 417 screenReader: { closeSubmenu: 'Close submenu', openSubmenu: 'Open submenu', toggleSubmenu: 'Toggle submenu' } 418 }, n = (e, t) => { 419 'object' != s(e) && (e = {}), 'object' != s(t) && (t = {}); 420 for (let i in t) t.hasOwnProperty(i) && (void 0 === e[i] ? e[i] = t[i] : 'object' == s(e[i]) && n(e[i], t[i])); 421 return e; 422 }, s = e => ({}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()), i = () => 'mm-' + a++; 423 let a = 0; 424 const o = e => 'mm-clone-' == e.slice(0, 9) ? e : `mm-clone-${e}`, 425 r = e => 'mm-clone-' == e.slice(0, 9) ? e.slice(9) : e, l = {}, 426 m = (e, t) => {void 0 === l[t] && (l[t] = {}), n(l[t], e);}, c = e => { 427 const t = e.split('.'), n = document.createElement(t.shift()); 428 return n.classList.add(...t), n; 429 }, d = (e, t) => t.length ? [].slice.call(e.querySelectorAll(t)) : [], h = (e, t) => { 430 const n = Array.prototype.slice.call(e.children); 431 return t ? n.filter((e => e.matches(t))) : n; 432 }, p = (e, t) => { 433 let n = [], s = e.parentElement; 434 for (; s;) n.push(s), s = s.parentElement; 435 return t ? n.filter((e => e.matches(t))) : n; 436 }, u = e => e.filter((e => !e.matches('.mm-hidden'))), f = e => { 437 let t = []; 438 return u(e).forEach((e => {t.push(...h(e, 'a.mm-listitem__text'));})), t.filter((e => !e.matches('.mm-btn--next'))); 439 }, b = (e, t, n) => {e.matches('.' + t) && e.classList.add(n);}; 440 let v = {}; 441 const g = (e, t, n) => { 442 'number' == typeof e && (e = '(min-width: ' + e + 'px)'), v[e] = v[e] || [], v[e].push({ 443 yes: t, 444 no: n 445 }); 446 }, L = (e, t) => { 447 var n = t.matches ? 'yes' : 'no'; 448 for (let t = 0; t < v[e].length; t++) v[e][t][n](); 449 }; 450 var _, E, w, P = function (e, t, n) { 451 if (!t.has(e)) throw new TypeError('attempted to set private field on non-instance'); 452 return t.set(e, n), n; 453 }, y = function (e, t) { 454 if (!t.has(e)) throw new TypeError('attempted to get private field on non-instance'); 455 return t.get(e); 456 }; 457 m({ 458 'Close submenu': 'Untermenü schlieÃen', 459 Menu: 'Menü', 460 'Open submenu': 'Untermenü öffnen', 461 'Toggle submenu': 'Untermenü wechseln' 462 }, 'de'), m({ 463 'Close submenu': 'Ø¨Ø³ØªÙ Ø²ÛØ±Ù ÙÙ', 464 Menu: 'Ù ÙÙ', 465 'Open submenu': 'Ø¨Ø§Ø²Ú©Ø±Ø¯Ù Ø²ÛØ±Ù ÙÙ', 466 'Toggle submenu': 'سÙÛÛÚ Ø²ÛØ±Ù ÙÙ' 467 }, 'fa'), m({ 468 'Close submenu': 'Submenu sluiten', 469 Menu: 'Menu', 470 'Open submenu': 'Submenu openen', 471 'Toggle submenu': 'Submenu wisselen' 472 }, 'nl'), m({ 473 'Close submenu': 'Fechar submenu', 474 Menu: 'Menu', 475 'Open submenu': 'Abrir submenu', 476 'Toggle submenu': 'Alternar submenu' 477 }, 'pt_br'), m({ 478 'Close submenu': 'ÐакÑÑÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ', 479 Menu: 'ÐенÑ', 480 'Open submenu': 'ÐÑкÑÑÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ', 481 'Toggle submenu': 'ÐеÑеклÑÑиÑÑ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ' 482 }, 'ru'), m({ 483 'Close submenu': 'ZatvoriÅ¥ submenu', 484 Menu: 'Menu', 485 'Open submenu': 'OtvoriÅ¥ submenu', 486 'Toggle submenu': 'Prepnúť submenu' 487 }, 'sk'), m({ 488 'Close submenu': 'ÐакÑиÑи пÑдменÑ', 489 Menu: 'ÐенÑ', 490 'Open submenu': 'ÐÑдкÑиÑи пÑдменÑ', 491 'Toggle submenu': 'ÐеÑемкнÑÑи пÑдменÑ' 492 }, 'uk'); 493 494 class S { 495 constructor (s, i, a) { 496 return _.set(this, void 0), E.set(this, void 0), w.set(this, void 0), this.opts = n(i, e), this.conf = n(a, t), this._api = ['i18n', 'bind', 'openPanel', 'closePanel', 'setSelected'], this.node = {}, this.hook = {}, this.node.menu = 'string' == typeof s ? document.querySelector(s) : s, 'function' == typeof this._deprecatedWarnings && this._deprecatedWarnings(), this.trigger('init:before'), this._initObservers(), this._initAddons(), this._initHooks(), this._initAPI(), this._initMenu(), this._initPanels(), this._initOpened(), (() => { 497 for (let e in v) { 498 let t = window.matchMedia(e); 499 L(e, t), t.onchange = n => {L(e, t);}; 500 } 501 })(), this.trigger('init:after'), this; 502 } 503 504 openPanel (e, t = !0, n = !0) { 505 if (!e) return; 506 e = e.closest('.mm-panel'), this.trigger('openPanel:before', [e, { animation: t, setfocus: n }]); 507 const s = e.closest('.mm-listitem--vertical'); 508 if (s) { 509 s.classList.add('mm-listitem--opened'); 510 const e = s.closest('.mm-panel');
511 this.openPanel(e); 512 } else { 513 const n = h(this.node.pnls, '.mm-panel--opened')[0]; 514 e.matches('.mm-panel--parent') && n && n.classList.add('mm-panel--highest'); 515 const s = ['mm-panel--opened', 'mm-panel--parent'], i = []; 516 t ? s.push('mm-panel--noanimation') : i.push('mm-panel--noanimation'), h(this.node.pnls, '.mm-panel').forEach((t => {t.classList.add(...i), t.classList.remove(...s), t !== n && t.classList.remove('mm-panel--highest'), t === e ? t.removeAttribute('inert') : t.setAttribute('inert', 'true');})), e.classList.add('mm-panel--opened'); 517 let a = d(this.node.pnls, `#${e.dataset.mmParent}`)[0]; 518 for (; a;) a = a.closest('.mm-panel'), a.classList.add('mm-panel--parent'), a = d(this.node.pnls, `#${a.dataset.mmParent}`)[0]; 519 } 520 this.trigger('openPanel:after', [e, { animation: t, setfocus: n }]); 521 } 522 523 closePanel (e, t = !0, n = !0) { 524 if (e && (e.matches('.mm-panel--opened') || e.parentElement.matches('.mm-listitem--opened'))) { 525 if (this.trigger('closePanel:before', [e]), e.parentElement.matches('.mm-listitem--vertical')) e.parentElement.classList.remove('mm-listitem--opened'); else if (e.dataset.mmParent) { 526 const s = d(this.node.pnls, `#${e.dataset.mmParent}`)[0]; 527 this.openPanel(s, t, n); 528 } else { 529 const s = h(this.node.pnls, '.mm-panel--parent').pop(); 530 if (s && s !== e) this.openPanel(s, t, n); else { 531 const s = h(this.node.pnls, '.mm-panel')[0]; 532 s && s !== e && this.openPanel(s, t, n); 533 } 534 } 535 this.trigger('closePanel:after', [e]); 536 } 537 } 538 539 togglePanel (e) { 540 let t = 'openPanel'; 541 (e.parentElement.matches('.mm-listitem--opened') || e.matches('.mm-panel--opened')) && (t = 'closePanel'), this[t](e); 542 } 543 544 setSelected (e) {this.trigger('setSelected:before', [e]), d(this.node.menu, '.mm-listitem--selected').forEach((e => {e.classList.remove('mm-listitem--selected');})), e.classList.add('mm-listitem--selected'), this.trigger('setSelected:after', [e]);} 545 546 bind (e, t) {this.hook[e] = this.hook[e] || [], this.hook[e].push(t);} 547 548 trigger (e, t) {if (this.hook[e]) for (var n = 0, s = this.hook[e].length; n < s; n++) this.hook[e][n].apply(this, t);} 549
550 _initObservers () {P(this, _, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {e.matches(this.conf.panelNodetype.join(', ')) && this._initListview(e);}));}));}))), P(this, E, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {this._initListitem(e);}));}));}))), P(this, w, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {(null == e ? void 0 : e.matches(this.conf.panelNodetype.join(', '))) && this._initSubPanel(e);}));}));})));} 551 552 _initAPI () { 553 const e = this; 554 this.API = {}, this._api.forEach((t => {this.API[t] = function () {return e[t].apply(e, arguments);};})), this.node.menu.mmApi = this.API; 555 } 556 557 _initHooks () {for (let e in this.opts.hooks) this.bind(e, this.opts.hooks[e]);} 558 559 _initAddons () { 560 this.trigger('initAddons:before'); 561 for (let e in S.addons) S.addons[e].call(this); 562 this.trigger('initAddons:after'); 563 } 564 565 _initMenu () { 566 this.trigger('initMenu:before'), this.node.wrpr = this.node.wrpr || this.node.menu.parentElement, this.node.wrpr.classList.add('mm-wrapper'), this.node.menu.classList.add('mm-menu'), this.node.menu.id = this.node.menu.id || i(), this.node.menu.setAttribute('aria-label', this.i18n(this.opts.navbar.title || 'Menu')), this.node.menu.setAttribute('aria-modal', 'true'), this.node.menu.setAttribute('role', 'dialog'); 567 const e = h(this.node.menu).filter((e => e.matches(this.conf.panelNodetype.join(', ')))); 568 this.node.pnls = c('div.mm-panels'), this.node.menu.append(this.node.pnls), e.forEach((e => {this._initPanel(e);})), this.trigger('initMenu:after'); 569 } 570 571 _initPanels () { 572 this.trigger('initPanels:before'), this.node.menu.addEventListener('click', (e => { 573 var t, n; 574 const s = (null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('a[href]')) || void 0 === n ? void 0 : n.getAttribute('href')) || ''; 575 if ('#' === s.slice(0, 1)) try { 576 const t = d(this.node.menu, s)[0]; 577 t && (e.preventDefault(), this.togglePanel(t)); 578 } catch (e) {} 579 }), { capture: !0 }), this.trigger('initPanels:after'); 580 } 581 582 _initPanel (e) { 583 var t; 584 if (!e.matches('.mm-panel') && (b(e, this.conf.classNames.panel, 'mm-panel'), b(e, this.conf.classNames.nopanel, 'mm-nopanel'), !e.matches('.mm-nopanel'))) { 585 if (this.trigger('initPanel:before', [e]), e.id = e.id || i(), e.matches('ul, ol')) { 586 const t = c('div'); 587 t.id = e.id, e.removeAttribute('id'), [].slice.call(e.classList).filter((e => 'mm-' === e.slice(0, 3))).forEach((n => {t.classList.add(n), e.classList.remove(n);})), Object.keys(e.dataset).filter((e => 'mm' === e.slice(0, 2))).forEach((n => {t.dataset[n] = e.dataset[n], delete e.dataset[n];})), e.before(t), t.append(e), e = t; 588 } 589 return e.classList.add('mm-panel'), (null === (t = e.parentElement) || void 0 === t ? void 0 : t.matches('.mm-listitem--vertical')) || this.node.pnls.append(e), this._initNavbar(e), h(e, 'ul, ol').forEach((e => {this._initListview(e);})), y(this, _).observe(e, { childList: !0 }), this.trigger('initPanel:after', [e]), e; 590 } 591 } 592 593 _initNavbar (e) { 594 if (h(e, '.mm-navbar').length) return; 595 let t = null, n = null; 596 if (e.dataset.mmParent) for (t = d(this.node.pnls, `#${e.dataset.mmParent}`)[0], n = t.closest('.mm-panel'); n.closest(".mm-listitem--vertical");) n = n.parentElement.closest('.mm-panel'); 597 if (null == t ? void 0 : t.matches('.mm-listitem--vertical')) return; 598 this.trigger('initNavbar:before', [e]); 599 const s = c('div.mm-navbar'); 600 if (this.opts.navbar.add || s.classList.add('mm-hidden'), n) { 601 const e = c('a.mm-btn.mm-btn--prev.mm-navbar__btn'); 602 e.href = `#${n.id}`, e.setAttribute('aria-label', this.i18n(this.conf.screenReader.closeSubmenu)), s.append(e); 603 } 604 let i = null; 605 t ? i = h(t, '.mm-listitem__text')[0] : n && (i = d(n, 'a[href="#' + e.id + '"]')[0]); 606 const a = c('a.mm-navbar__title'); 607 switch (a.tabIndex = -1, a.setAttribute('aria-hidden', 'true'), this.opts.navbar.titleLink) { 608 case'anchor': 609 i && (a.href = i.getAttribute('href')); 610 break; 611 case'parent': 612 n && (a.href = `#${n.id}`); 613 } 614 const o = c('span'); 615 var r; 616 o.innerHTML = e.dataset.mmTitle || ((r = i) ? [].slice.call(r.childNodes).filter((e => e.nodeType === Node.TEXT_NODE)).map((e => e.nodeValue.trim())).join(' ') : '') || this.i18n(this.opts.navbar.title || 'Menu'), e.prepend(s), s.append(a), a.append(o), this.trigger('initNavbar:after', [e]); 617 } 618 619 _initListview (e) {['htmlulistelement', 'htmlolistelement'].includes(s(e)) && (e.matches('.mm-listview') || (b(e, this.conf.classNames.nolistview, 'mm-nolistview'), e.matches('.mm-nolistview') || (this.trigger('initListview:before', [e]), e.classList.add('mm-listview'), h(e).forEach((e => {this._initListitem(e);})), y(this, E).observe(e, { childList: !0 }), this.trigger('initListview:after', [e]))));} 620 621 _initListitem (e) {['htmllielement'].includes(s(e)) && (e.matches('.mm-listitem') || (b(e, this.conf.classNames.divider, 'mm-divider'), e.matches('.mm-divider') || (this.trigger('initListitem:before', [e]), e.classList.add('mm-listitem'), b(e, this.conf.classNames.selected, 'mm-listitem--selected'), h(e, 'a, span').forEach((e => {e.classList.add('mm-listitem__text');}
621)), h(e, this.conf.panelNodetype.join(', ')).forEach((e => {this._initSubPanel(e);})), y(this, w).observe(e, { childList: !0 }), this.trigger('initListitem:after', [e]))));} 622 623 _initSubPanel (e) { 624 if (e.matches('.mm-panel')) return; 625 const t = e.parentElement; 626 (e.matches('.' + this.conf.classNames.vertical) || !this.opts.slidingSubmenus) && t.classList.add('mm-listitem--vertical'), t.id = t.id || i(), e.id = e.id || i(), t.dataset.mmChild = e.id, e.dataset.mmParent = t.id; 627 let n = h(t, '.mm-btn')[0]; 628 n || (n = c('a.mm-btn.mm-btn--next.mm-listitem__btn'), h(t, 'a, span').forEach((e => {e.matches('span') ? (n.classList.add('mm-listitem__text'), n.innerHTML = e.innerHTML, t.insertBefore(n, e.nextElementSibling), e.remove()) : t.insertBefore(n, e.nextElementSibling);})), n.setAttribute('aria-label', this.i18n(this.conf.screenReader[t.matches('.mm-listitem--vertical') ? 'toggleSubmenu' : 'openSubmenu']))), n.href = `#${e.id}`, this._initPanel(e); 629 } 630 631 _initOpened () { 632 this.trigger('initOpened:before'); 633 const e = d(this.node.pnls, '.mm-listitem--selected').pop(); 634 let t = h(this.node.pnls, '.mm-panel')[0]; 635 e && (this.setSelected(e), t = e.closest('.mm-panel')), this.openPanel(t, !1, !1), this.trigger('initOpened:after'); 636 } 637 638 i18n (e) {return ((e, t) => 'string' == typeof t && void 0 !== l[t] && l[t][e] || e)(e, this.conf.language);} 639 640 static i18n (e = {}, t = '') { 641 if (!e || !t) return l; 642 m(e, t); 643 } 644 } 645 646 _ = new WeakMap, E = new WeakMap, w = new WeakMap, S.addons = {}, S.node = {}, S.vars = {}; 647 const M = { use: !0, position: 'left' }, k = { 648 clone: !1, 649 menu: { insertMethod: 'append', insertSelector: 'body' }, 650 page: { nodetype: 'div', selector: null, noSelector: [] }, 651 screenReader: { closeMenu: 'Close menu', openMenu: 'Open menu' } 652 }, T = ['left', 'left-front', 'right', 'right-front', 'top', 'bottom']; 653 S.prototype.open = function () {this.node.menu.matches('.mm-menu--opened') || (this.trigger('open:before'), this.node.wrpr.classList.add('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`), this.node.menu.classList.add('mm-menu--opened'), this.node.menu.removeAttribute('inert'), S.node.blck.removeAttribute('inert'), S.node.page.setAttribute('inert', 'true'), this.node.open = document.activeElement, this.trigger('open:after'));}, S.prototype.close = function () { 654 var e; 655 this.node.menu.matches('.mm-menu--opened') && (this.trigger('close:before'), this.node.wrpr.classList.remove('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`), this.node.menu.classList.remove('mm-menu--opened'), this.node.menu.setAttribute('inert', 'true'), S.node.blck.setAttribute('inert', 'true'), S.node.page.removeAttribute('inert'), null === (e = this.node.open || document.querySelector(`[href="#${this.node.menu.id}"]`) || null) || void 0 === e || e.focus(), document.body.scrollLeft = 0, document.documentElement.scrollLeft = 0, this.trigger('close:after')); 656 }, S.prototype.setPage = function (e) { 657 const t = this.conf.offCanvas; 658 if (!e) { 659 let n = 'string' == typeof t.page.selector ? d(document.body, t.page.selector) : h(document.body, t.page.nodetype); 660 if (n = n.filter((e => !e.matches('.mm-menu, .mm-wrapper__blocker'))), t.page.noSelector.length && (n = n.filter((e => !e.matches(t.page.noSelector.join(', '))))), n.length > 1) { 661 let e = c('div'); 662 n[0].before(e), n.forEach((t => {e.append(t);})), n = [e]; 663 } 664 e = n[0]; 665 } 666 this.trigger('setPage:before', [e]), e.classList.add('mm-page', 'mm-slideout'), e.id = e.id || i(), S.node.blck.setAttribute('href', `#${e.id}`), S.node.page = e, this.trigger('setPage:after', [e]); 667 }; 668 const x = { fix: !0 }, A = 'ontouchstart' in window || !!navigator.msMaxTouchPoints || !1, 669 C = ['light', 'dark', 'white', 'black', 'light-contrast', 'dark-contrast', 'white-contrast', 'black-contrast']; 670 S.prototype.theme = function (e = null) { 671 const t = this.opts.theme; 672 if (!e) return t; 673 C.includes(e) && (this.node.menu.classList.remove(`mm-menu--theme-${t}`), this.node.menu.classList.add(`mm-menu--theme-${e}`), this.opts.theme = e); 674 }; 675 const N = { close: !1, open: !1 }, $ = { add: !1 }, 676 O = { use: !1, top: [], bottom: [], position: 'left', type: 'default' }, 677 H = { add: !1, blockPanel: !0, visible: 3 }, q = { breadcrumbs: { separator: '/', removeFirst: !1 } }; 678 679 function I () { 680 this.opts.navbars = this.opts.navbars || [], this.conf.navbars = this.conf.navbars || {}, n(this.conf.navbars, q); 681 let e = this.opts.navbars; 682 if (void 0 !== e && (e instanceof Array || (e = [e]), e.length)) { 683 var t = {}; 684 e.forEach((e => { 685 if (!(e = function (e) {return 'boolean' == typeof e && e && (e = {}), 'object' != typeof e && (e = {}), void 0 === e.content && (e.content = ['prev', 'title']), e.content instanceof Array || (e.content = [e.content]), void 0 === e.use && (e.use = !0), e;}(e)).use) return; 686 const n = c('div.mm-navbar'); 687 let { position: s } = e; 688 'bottom' !== s && (s = 'top'), t[s] || (t[s] = c('div.mm-navbars.mm-navbars--' + s)), t[s].append(n); 689 for (let t = 0, s = e.content.length; t < s; t++) { 690 const s = e.content[t]; 691 if ('string' == typeof s) {
692 const e = I.navbarContents[s]; 693 if ('function' == typeof e) e.call(this, n); else { 694 let e = c('span'); 695 e.innerHTML = s; 696 const t = h(e); 697 1 == t.length && (e = t[0]), n.append(e); 698 } 699 } else n.append(s); 700 } 701 if ('string' == typeof e.type) { 702 const t = I.navbarTypes[e.type]; 703 'function' == typeof t && t.call(this, n); 704 } 705 let i = () => {n.classList.remove('mm-hidden');}; 706 'boolean' == typeof e.use ? this.bind('initMenu:after', i) : g(e.use, i, (() => {n.classList.add('mm-hidden');})); 707 })), this.bind('initMenu:after', (() => {for (let e in t) this.node.pnls['bottom' == e ? 'after' : 'before'](t[e]);})); 708 } 709 } 710 711 I.navbarContents = { 712 breadcrumbs: function (e) { 713 var t = c('div.mm-navbar__breadcrumbs'); 714 e.append(t), this.bind('initNavbar:after', (e => { 715 if (!e.querySelector('.mm-navbar__breadcrumbs')) { 716 h(e, '.mm-navbar')[0].classList.add('mm-hidden'); 717 for (var t = [], n = c('span.mm-navbar__breadcrumbs'), s = e, i = !0; s;) { 718 if (!(s = s.closest('.mm-panel')).parentElement.matches('.mm-listitem--vertical')) { 719 let e = d(s, '.mm-navbar__title span')[0]; 720 if (e) { 721 let n = e.textContent; 722 n.length && t.unshift(i ? `<span>${n}</span>` : `<a \n href="#${s.id}" \n title="${this.i18n(this.conf.screenReader.openSubmenu)}"\n >${n}</a>`); 723 } 724 i = !1; 725 } 726 s = d(this.node.pnls, `#${s.dataset.mmParent}`)[0]; 727 } 728 this.conf.navbars.breadcrumbs.removeFirst && t.shift(), n.innerHTML = t.join('<span class="mm-separator">' + this.conf.navbars.breadcrumbs.separator + '</span>'), h(e, '.mm-navbar')[0].append(n); 729 } 730 })), this.bind('openPanel:before', (e => { 731 var n = e.querySelector('.mm-navbar__breadcrumbs'); 732 t.innerHTML = n ? n.innerHTML : ''; 733 })); 734 }, close: function (e) { 735 const t = c('a.mm-btn.mm-btn--close.mm-navbar__btn'); 736 t.setAttribute('aria-label', this.i18n(this.conf.offCanvas.screenReader.closeMenu)), e.append(t), this.bind('setPage:after', (e => {t.href = `#${e.id}`;})); 737 }, prev: function (e) { 738 let t = c('a.mm-btn.mm-hidden'); 739 e.append(t), this.bind('initNavbar:after', (e => {h(e, '.mm-navbar')[0].classList.add('mm-hidden');})), this.bind('openPanel:before', (e => { 740 if (e.parentElement.matches('.mm-listitem--vertical')) return; 741 t.classList.add('mm-hidden'); 742 const n = e.querySelector('.mm-navbar__btn.mm-btn--prev'); 743 if (n) { 744 const e = n.cloneNode(!0); 745 t.after(e), t.remove(), t = e; 746 } 747 })); 748 }, searchfield: function (e) { 749 let t = c('div.mm-navbar__searchfield'); 750 t.id = i(), e.append(t), this.opts.searchfield = this.opts.searchfield || {}, this.opts.searchfield.add = !0, this.opts.searchfield.addTo = `#${t.id}`; 751 }, title: function (e) { 752 let t = c('a.mm-navbar__title'); 753 e.append(t), this.bind('openPanel:before', (e => { 754 if (e.parentElement.matches('.mm-listitem--vertical')) return; 755 const n = e.querySelector('.mm-navbar__title'); 756 if (n) { 757 const e = n.cloneNode(!0); 758 t.after(e), t.remove(), t = e; 759 } 760 })); 761 } 762 }, I.navbarTypes = { 763 tabs: function (e) { 764 function t (n) { 765 const s = h(e, `.mm-navbar__tab[href="#${n.id}"]`)[0]; 766 if (s) s.classList.add('mm-navbar__tab--selected'), s.ariaExpanded = 'true'; else { 767 const e = d(this.node.pnls, `#${n.dataset.mmParent}`)[0]; 768 e && t.call(this, e.closest('.mm-panel')); 769 } 770 } 771 772 e.classList.add('mm-navbar--tabs'), e.closest('.mm-navbars').classList.add('mm-navbars--has-tabs'), h(e, 'a').forEach((e => {e.classList.add('mm-navbar__tab');})), this.bind('openPanel:before', (n => {h(e, 'a').forEach((e => {e.classList.remove('mm-navbar__tab--selected'), e.ariaExpanded = 'fal
772se';})), t.call(this, n);})), this.bind('initPanels:after', (() => { 773 e.addEventListener('click', (e => { 774 var t, n, s; 775 const i = null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('.mm-navbar__tab')) || void 0 === n ? void 0 : n.getAttribute('href'); 776 try {null === (s = d(this.node.pnls, `${i}.mm-panel`)[0]) || void 0 === s || s.classList.add('mm-panel--noanimation');} catch (e) {} 777 }), { capture: !0 }); 778 })); 779 } 780 }; 781 const j = { scroll: !1, update: !1 }, B = { scrollOffset: 0, updateOffset: 50 }, R = { 782 add: !1, 783 addTo: 'panels', 784 noResults: 'No results found.', 785 placeholder: 'Search', 786 search: !0, 787 searchIn: 'panels', 788 splash: '', 789 title: 'Search' 790 }, D = { cancel: !0, clear: !0, form: {}, input: {}, panel: {}, submit: !1 }; 791 m({ 792 cancel: 'abbrechen', 793 'Cancel searching': 'Suche abbrechen', 794 'Clear searchfield': 'Suchfeld löschen', 795 'No results found.': 'Keine Ergebnisse gefunden.', 796 Search: 'Suche' 797 }, 'de'), m({ 798 cancel: 'Ø§ÙØµØ±Ø§Ù', 799 'Cancel searching': 'ÙØºÙ جستجÙ', 800 'Clear searchfield': 'پاک کرد٠ÙÛÙØ¯ جستجÙ', 801 'No results found.': 'ÙØªÛجÙâØ§Û ÛØ§Ùت ÙØ´Ø¯.', 802 Search: 'جستجÙ' 803 }, 'fa'), m({ 804 cancel: 'annuleren', 805 'Cancel searching': 'Zoeken annuleren', 806 'Clear searchfield': 'Zoekveld leeg maken', 807 'No results found.': 'Geen resultaten gevonden.', 808 Search: 'Zoeken' 809 }, 'nl'), m({ 810 cancel: 'cancelar', 811 'Cancel searching': 'Cancelar pesquisa', 812 'Clear searchfield': 'Limpar campo de pesquisa', 813 'No results found.': 'Nenhum resultado encontrado.', 814 Search: 'Buscar' 815 }, 'pt_br'), m({ 816 cancel: 'оÑмениÑÑ', 817 'Cancel searching': 'ÐÑмениÑÑ Ð¿Ð¾Ð¸Ñк', 818 'Clear searchfield': 'ÐÑиÑÑиÑÑ Ð¿Ð¾Ð»Ðµ поиÑка', 819 'No results found.': 'ÐиÑего не найдено.', 820 Search: 'ÐайÑи' 821 }, 'ru'), m({ 822 cancel: 'zruÅ¡iÅ¥', 823 'Cancel searching': 'ZruÅ¡iÅ¥ vyhľadávanie', 824 'Clear searchfield': 'VymazaÅ¥ pole vyhľadávania', 825 'No results found.': 'Neboli nájdené žiadne výsledky.', 826 Search: 'Vyhľadávanie' 827 }, 'sk'), m({ 828 cancel: 'ÑкаÑÑваÑи', 829 'Cancel searching': 'СкаÑÑваÑи поÑÑк', 830 'Clear searchfield': 'ÐÑиÑÑиÑи поле поÑÑкÑ', 831 'No results found.': 'ÐÑÑого не знайдено.', 832 Search: 'ÐоÑÑк' 833 }, 'uk'); 834 const F = function () { 835 const e = this.opts.searchfield, t = this.conf.searchfield; 836 let n = h(this.node.pnls, '.mm-panel--search')[0]; 837 return n || (n = c('div.mm-panel--search'), K(n, t.panel), e.title.length && (n.dataset.mmTitle = this.i18n(e.title)), n.append(c('ul')), this._initPanel(n), n); 838 }, Z = function (e) { 839 const t = this.opts.searchfield; 840 if (e.matches(t.addTo)) { 841 const t = e.matches('.mm-panel--search'); 842 if (!d(e, '.mm-searchfield').length) { 843 const n = W.call(this, t); 844 t && n.classList.add('mm-searchfield--cancelable'), e.prepend(n), z.call(this, n); 845 } 846 } 847 if (t.splash.length && e.matches('.mm-panel--search') && !d(e, '.mm-panel__splash').length) { 848 const n = c('div.mm-panel__splash'); 849 n.innerHTML = t.splash, e.append(n); 850 } 851 if (t.noResults.length && !d(e, '.mm-panel__noresults').length) { 852 const n = c('div.mm-panel__noresults'); 853 n.innerHTML = this.i18n(t.noResults), e.append(n); 854 } 855 }, W = function (e = !1) { 856 const t = this.opts.searchfield, n = this.conf.searchfield, s = c('form.mm-searchfield'); 857 K(s, n.form); 858 const i = c('div.mm-searchfield__input'); 859 s.append(i); 860 const a = c('input'); 861 if (i.append(a), a.type = 'text', a.autocomplete = 'off', a.placeholder = this.i18n(t.placeholder), a.setAttribute('aria-label', this.i18n(t.placeholder)), K(a, n.input), n.submit) { 862 const e = c('button.mm-btnreset.mm-btn.mm-btn--next.mm-searchfield__btn'); 863 e.type = 'submit', i.append(e); 864 } else if (n.clear) { 865 const e = c('button.mm-btnreset.mm-btn.mm-btn--close.mm-searchfield__btn'); 866 e.type = 'reset', e.setAttribute('aria-label', this.i18n('Clear searchfield')), i.append(e), s.addEventListener('reset', (() => {window.requestAnimationFrame((() => {a.dispatchEvent(new Event('input'));}));})); 867 } 868 if (n.cancel && e) { 869 const e = c('a.mm-searchfield__cancel'); 870 e.href = '#', e.setAttribute('aria-label', this.i18n('Cancel searching')), e.textContent = this.i18n('cancel'), s.append(e), e.addEventListener('click', (e => {e.preventDefault(), this.closePanel(h(this.node.pnls, '.mm-panel--search')[0], !1);})); 871 } 872 return s; 873 }, z = function (e) { 874 const t = this.opts.searchfield, n = e.closest('.mm-panel') || d(this.node.pnls, '.mm-panel--search')[0], 875 s = d(e, 'input')[0]; 876 let i = n.matches('.mm-panel--search') ? h(this.node.pnls, t.searchIn) : [n]; 877 i = i.filter((e => !e.matches('.mm-panel--search'))); 878 const a = () => { 879 const a = s.value.toLowerCase().trim(); 880 if (a.length ? e.classList.add('mm-searchfield--searching') : e.classList.remove('mm-searchfield--searching'), !t.search) return; 881 const o = []; 882 if (i.forEach((e => {e.scrollTop = 0, o.push(...d(e, '.mm-listitem'));})), a.length) { 883 this.trigger('search:before'), n.classList.add('mm-panel--searching'), o.forEach((e => { 884 const t = h(e, '.mm-listitem__text')[0]; 885 var n; 886 (!t || (n = t, [].slice.call(n.childNodes).filter((e => !e.ariaHidden)).map((e => e.textContent)).join(' ')).toLowerCase().indexOf(a) > -1) && (e.dataset.mmSearchresult = a); 887 })); 888 let e = 0; 889 e = n.matches('.mm-panel--search') ? V(n, a, i) : Y(a, i), n.classList[0 == e ? 'add' : 'remove']('mm-panel--noresults'), this.trigger('search:after'); 890 } else this.trigger('clear:before'), n.classList.remove('mm-panel--searching', 'mm-panel--noresults'), n.matches('.mm-panel--search') ? (U(n), t.splash || this.closePanel(n, !1, !1)) : G(i), this.trigger('clear:after'); 891 }; 892 s.addEventListener('input', a), a(); 893 }, V = (e, t, n) => { 894 const s = d(e, '.mm-listview')[0]; 895 s.innerHTML = ''; 896 let i = 0;
897 return n.forEach((e => { 898 const n = d(e, `[data-mm-searchresult="${t}"]`); 899 if (i += n.length, n.length) { 900 const t = d(e, '.mm-navbar__title')[0]; 901 if (t) { 902 const e = c('li.mm-divider'); 903 e.innerHTML = t.innerHTML, s.append(e); 904 } 905 n.forEach((e => { 906 const t = e.cloneNode(!0); 907 s.append(t); 908 })); 909 } 910 })), d(s, '.mm-panel').forEach((e => {e.remove();})), ['id', 'data-mm-parent', 'data-mm-child'].forEach((e => {d(s, `[${e}]`).forEach((t => {t.removeAttribute(e);}));})), d(s, '.mm-listitem--opened').forEach((e => {e.classList.remove('mm-listitem--opened');})), i; 911 }, U = e => {d(e, '.mm-listview')[0].innerHTML = '';}, Y = (e, t) => { 912 let n = 0; 913 return t.forEach((t => { 914 const s = d(t, `[data-mm-searchresult="${e}"]`); 915 n += s.length, s.length && s.forEach((t => { 916 const n = ((e, t) => { 917 let n = [], s = e.previousElementSibling; 918 for (; s;) t && !s.matches(t) || n.push(s), s = s.previousElementSibling; 919 return n; 920 })(t, '.mm-divider')[0]; 921 n && (n.dataset.mmSearchresult = e); 922 })), d(t, '.mm-listitem, .mm-divider').forEach((t => {t.classList.add('mm-hidden'), t.dataset.mmSearchresult === e && [t, ...p(t, '.mm-listitem')].forEach((e => {e.classList.remove('mm-hidden');}));})); 923 })), n; 924 }, 925 G = e => {e.forEach((e => {d(e, '.mm-listitem, .mm-divider').forEach((e => {e.classList.remove('mm-hidden');}));}));}, 926 K = (e, t) => {t && Object.keys(t).forEach((n => {e[n] = t[n];}));}, X = { add: !1, addTo: 'panels' }, 927 J = { current: !0, hover: !1, parent: !1 }, 928 Q = { collapsed: { use: !1 }, expanded: { use: !1, initial: 'open' } }; 929 S.addons = { 930 offcanvas: function () { 931 this.opts.offCanvas = this.opts.offCanvas || {}, this.conf.offCanvas = this.conf.offCanvas || {}; 932 const e = n(this.opts.offCanvas, M), t = n(this.conf.offCanvas, k); 933 e.use && (T.includes(e.position) || (e.position = T[0]), this._api.push('open', 'close', 'setPage', 'position'), t.clone && (this.node.menu = this.node.menu.cloneNode(!0), this.node.menu.id && (this.node.menu.id = o(this.node.menu.id)), d(this.node.menu, '[id]').forEach((e => {e.id = o(e.id);}))), this.bind('initMenu:before', (() => {this.node.wrpr = document.querySelector(t.menu.insertSelector), this.node.wrpr[t.menu.insertMethod](this.node.menu);})), S.node.blck || this.bind('initMenu:before', (() => { 934 const e = c('a.mm-wrapper__blocker.mm-blocker.mm-slideout'); 935 e.id = i(), e.setAttribute('aria-label', this.i18n(t.screenReader.closeMenu)), e.setAttribute('inert', 'true'), document.querySelector(t.menu.insertSelector).append(e), S.node.blck = e; 936 })), this.bind('initMenu:after', (() => { 937 this.setPage(S.node.page), this.node.menu.classList.add('mm-menu--offcanvas'), this.node.menu.setAttribute('inert', 'true'), T.includes(e.position) && (this.node.wrpr.classList.add(`mm-wrapper--position-${e.position}`), this.node.menu.classList.add(`mm-menu--position-${e.position}`)); 938 let t = window.location.hash; 939 if (t) { 940 let e = r(this.node.menu.id); 941 e && e == t.slice(1) && setTimeout((() => {this.open();}), 1e3); 942 } 943 })), document.addEventListener('click', (e => { 944 var t; 945 switch (null === (t = e.target.closest('a')) || void 0 === t ? void 0 : t.getAttribute('href')) { 946 case`#${r(this.node.menu.id)}`: 947 e.preventDefault(), this.open(); 948 break; 949 case`#${r(S.node.page.id)}`: 950 e.preventDefault(), this.close(); 951 } 952 })), document.addEventListener('keyup', (e => {'Escape' == e.key && this.close();}))); 953 }, 954 scrollBugFix: function () { 955 if (!A || !this.opts.offCanvas.use) return; 956 if (this.opts.scrollBugFix = this.opts.scrollBugFix || {}, !n(this.opts.scrollBugFix, x).fix) return; 957 const e = (e => { 958 let t = '', n = null; 959 return e.addEventListener('touchstart', (e => {1 === e.touches.length && (t = '', n = e.touches[0].pageY);})), e.addEventListener('touchend', (e => {0 === e.touches.length && (t = '', n = null);})), e.addEventListener('touchmove', (e => { 960 if (t = '', n && 1 === e.touches.length) { 961 const s = e.changedTouches[0].pageY; 962 s > n ? t = 'down' : s < n && (t = 'up'), n = s; 963 } 964 })), { get: () => t }; 965 })(this.node.menu); 966 this.node.menu.addEventListener('scroll', (e => {e.preventDefault(), e.stopPropagation();}), { passive: !1 }), this.node.menu.addEventListener('touchmove', (t => { 967 let n = t.target.closest('.mm-panel, .mm-iconbar__top, .mm-iconbar__bottom'); 968 n && n.closest('.mm-listitem--vertical') && (n = p(n, '.mm-panel').pop()), n ? (n.scrollHeight === n.offsetHeight || 0 == n.scrollTop && 'down' == e.get() || n.scrollHeight == n.scrollTop + n.offsetHeight && 'up' == e.get()) && t.stopPropagation() : t.stopPropagation(); 969 }), { passive: !1 }), this.bind('open:after', (() => { 970 var e = h(this.node.pnls, '.mm-panel--opened')[0]; 971 e && (e.scrollTop = 0); 972 })), window.addEventListener('orientationchange', (e => { 973 var t = h(this.node.pnls, '.mm-panel--opened')[0]; 974 t && (t.scrollTop = 0, t.style['-webkit-overflow-scrolling'] = 'auto', t.style['-webkit-overflow-scrolling'] = 'touch'); 975 })); 976 }, 977 theme: function () { 978 this.opts.theme = this.opts.theme || 'light'; 979 const e = this.opts.theme; 980 C.includes(e) || (this.opts.theme = C[0]), this._api.push('theme'), this.bind('initMenu:after', (() => {this.theme(this.opts.theme);})); 981 }, 982 backButton: function () { 983 if (this.opts.backButton = this.opts.backButton || {}, !this.opts.offCanvas.use) return; 984 const e = n(this.opts.backButton, N), t = `#${this.node.menu.id}`; 985 if (e.close) { 986 let e = []; 987 const n = () => {e = [t], h(this.node.pnls, '.mm-panel--opened, .mm-panel--parent').forEach((t => {e.push('#' + t.id);}));}; 988 this.bind('open:after', (() => {history.pushState(null, '', location.pathname + location.search + t);})), this.bind('open:after', n), this.bind('openPanel:after', n), this.bind('close:after', (() => {e = [], history.back(), history.pushState(null, '', location.pathname + location.search);})), window.addEventListener('popstate', (() => { 989 if (this.node.menu.matches('.mm-menu--opened') && e.length) { 990 e = e.slice(0, -1); 991 const n = e[e.length - 1];
992 n == t ? this.close() : (this.openPanel(this.node.menu.querySelector(n)), history.pushState(null, '', location.pathname + location.search + t)); 993 } 994 })); 995 } 996 e.open && window.addEventListener('popstate', (e => {this.node.menu.matches('.mm-menu--opened') || location.hash != t || this.open();})); 997 }, 998 counters: function () { 999 if (this.opts.counters = this.opts.counters || {}, !n(this.opts.counters, $).add) return; 1000 const e = e => { 1001 const t = this.node.pnls.querySelector(`#${e.dataset.mmParent}`); 1002 if (!t) return; 1003 const n = t.querySelector('.mm-counter'); 1004 if (!n) return; 1005 const s = []; 1006 h(e, '.mm-listview').forEach((e => {s.push(...h(e, '.mm-listitem'));})), n.innerHTML = u(s).length.toString(); 1007 }, 1008 t = new MutationObserver((t => {t.forEach((t => {'class' == t.attributeName && e(t.target.closest('.mm-panel'));}));})); 1009 this.bind('initListview:after', (t => { 1010 const n = t.closest('.mm-panel'), s = this.node.pnls.querySelector(`#${n.dataset.mmParent}`); 1011 if (!s) return; 1012 const i = h(s, '.mm-btn')[0]; 1013 if (i) { 1014 if (!h(i, '.mm-counter').length) { 1015 const e = c('span.mm-counter'); 1016 e.setAttribute('aria-hidden', 'true'), i.prepend(e); 1017 } 1018 e(n); 1019 } 1020 })), this.bind('initListitem:after', (e => { 1021 const n = e.closest('.mm-panel'); 1022 n && this.node.pnls.querySelector(`#${n.dataset.mmParent}`) && t.observe(e, { attributes: !0 }); 1023 })); 1024 }, 1025 iconbar: function () { 1026 this.opts.iconbar = this.opts.iconbar || {}; 1027 const e = n(this.opts.iconbar, O); 1028 if (!e.use) return; 1029 let t; 1030 if (['top', 'bottom'].forEach(((n, i) => { 1031 let a = e[n]; 1032 'array' != s(a) && (a = [a]); 1033 const o = c('div.mm-iconbar__' + n); 1034 for (let e = 0, t = a.length; e < t; e++) 'string' == typeof a[e] ? o.innerHTML += a[e] : o.append(a[e]); 1035 o.children.length && (t || (t = c('div.mm-iconbar')), t.append(o)); 1036 })), t) { 1037 this.bind('initMenu:after', (() => {this.node.menu.prepend(t);})); 1038 let n = 'mm-menu--iconbar-' + e.position, s = () => {this.node.menu.classList.add(n);}, 1039 i = () => {this.node.menu.classList.remove(n);}; 1040 if ('boolean' == typeof e.use ? this.bind('initMenu:after', s) : g(e.use, s, i), 'tabs' == e.type) { 1041 t.classList.add('mm-iconbar--tabs'), t.addEventListener('click', (e => { 1042 const t = e.target.closest('.mm-iconbar__tab'); 1043 if (t) if (t.matches('.mm-iconbar__tab--selected')) e.stopImmediatePropagation(); else try { 1044 const n = d(this.node.menu, `${t.getAttribute('href')}.mm-panel`)[0]; 1045 n && (e.preventDefault(), e.stopImmediatePropagation(), this.openPanel(n, !1)); 1046 } catch (e) {} 1047 })); 1048 const e = n => { 1049 d(t, 'a').forEach((e => {e.classList.remove('mm-iconbar__tab--selected');})); 1050 const s = d(t, '[href="#' + n.id + '"]')[0]; 1051 if (s) s.classList.add('mm-iconbar__tab--selected'); else { 1052 const t = d(this.node.pnls, `#${n.dataset.mmParent}`)[0]; 1053 t && e(t.closest('.mm-panel')); 1054 } 1055 }; 1056 this.bind('openPanel:before', e); 1057 } 1058 } 1059 }, 1060 iconPanels: function () { 1061 this.opts.iconPanels = this.opts.iconPanels || {}; 1062 const e = n(this.opts.iconPanels, H); 1063 let t = !1; 1064 if ('first' == e.visible && (t = !0, e.visible = 1), e.visible = Math.min(3, Math.max(1, e.visible)), e.visible++, e.add) { 1065 this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--iconpanel');})); 1066 const n = ['mm-panel--iconpanel-0', 'mm-panel--iconpanel-1', 'mm-panel--iconpanel-2', 'mm-panel--iconpanel-3']; 1067 t ? this.bind('initMenu:after', (() => { 1068 var e; 1069 null === (e = h(this.node.pnls, '.mm-panel')[0]) || void 0 === e || e.classList.add('mm-panel--iconpanel-first'); 1070 })) : this.bind('openPanel:after', (t => { 1071 if (t.closest('.mm-listitem--vertical')) return; 1072 let s = h(this.node.pnls, '.mm-panel'); 1073 s = s.filter((e => e.matches('.mm-panel--parent'))), s.push(t), s = s.slice(-e.visible), s.forEac
1073h(((e, t) => {e.classList.remove('mm-panel--iconpanel-first', ...n), e.classList.add(`mm-panel--iconpanel-${t}`);})); 1074 })); 1075 } 1076 }, 1077 navbars: I, 1078 pageScroll: function () { 1079 this.opts.pageScroll = this.opts.pageScroll || {}, this.conf.pageScroll = this.conf.pageScroll || {}; 1080 const e = n(this.opts.pageScroll, j), t = n(this.conf.pageScroll, B); 1081 var s; 1082 1083 function i () { 1084 s && window.scrollTo({ 1085 top: s.getBoundingClientRect().top + document.scrollingElement.scrollTop - t.scrollOffset, 1086 behavior: 'smooth' 1087 }), s = null; 1088 } 1089 1090 function a (e) { 1091 try {if ('#' == e.slice(0, 1)) return d(S.node.page, e)[0];} catch (e) {} 1092 return null; 1093 } 1094 1095 if (this.opts.offCanvas.use && e.scroll && (this.bind('close:after', (() => {i();})), this.node.menu.addEventListener('click', (e => { 1096 var t, n; 1097 const o = (null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('a[href]')) || void 0 === n ? void 0 : n.getAttribute('href')) || ''; 1098 (s = a(o)) && (e.preventDefault(), this.node.menu.matches('.mm-menu--sidebar-expanded') && this.node.wrpr.matches('.mm-wrapper--sidebar-expanded') ? i() : this.close()); 1099 }))), e.update) { 1100 let e = []; 1101 this.bind('initListview:after', (t => { 1102 const n = h(t, '.mm-listitem'); 1103 f(n).forEach((t => { 1104 const n = a(t.getAttribute('href')); 1105 n && e.unshift(n); 1106 })); 1107 })); 1108 let n = -1; 1109 window.addEventListener('scroll', (s => { 1110 const i = window.scrollY; 1111 for (var a = 0; a < e.length; a++) if (e[a].offsetTop < i + t.updateOffset) { 1112 if (n !== a) { 1113 n = a; 1114 let t = h(this.node.pnls, '.mm-panel--opened')[0], s = d(t, '.mm-listitem'), i = f(s); 1115 i = i.filter((t => t.matches('[href="#' + e[a].id + '"]'))), i.length && this.setSelected(i[0].parentElement); 1116 } 1117 break; 1118 } 1119 }), { passive: !0 }); 1120 } 1121 }, 1122 searchfield: function () { 1123 this.opts.searchfield = this.opts.searchfield || {}, this.conf.searchfield = this.conf.searchfield || {}; 1124 const e = n(this.opts.searchfield, R); 1125 if (n(this.conf.searchfield, D), e.add) { 1126 switch (e.addTo) { 1127 case'panels': 1128 e.addTo = '.mm-panel'; 1129 break; 1130 case'searchpanel': 1131 e.addTo = '.mm-panel--search'; 1132 } 1133 'panels' === e.searchIn && (e.searchIn = '.mm-panel'), this.bind('initPanel:after', (t => {t.matches(e.addTo) && !t.closest('.mm-listitem--vertical') && Z.call(this, t);})), this.bind('initMenu:after', (() => { 1134 const t = F.call(this); 1135 Z.call(this, t), d(this.node.menu, e.addTo).forEach((n => { 1136 if (!n.matches('.mm-panel')) { 1137 const s = W.call(this, !0); 1138 n.append(s); 1139 const i = d(s, 'input')[0]; 1140 e.splash.length ? (i.addEventListener('focusin', (() => {this.openPanel(t, !1, !1);})), this.bind('openPanel:after', (e => {e.matches('.mm-panel--search') ? s.classList.add('mm-searchfield--cancelable') : s.classList.remove('mm-searchfield--cancelable');}))) : (this.bind('search:after', (() => {this.openPanel(t, !1, !1);})), i.addEventListener('focusout', (() => {i.value.length || this.closePanel(t, !1);}))), z.call(this, s); 1141 } 1142 })); 1143 })), this.bind('close:before', (() => {d(this.node.menu, '.mm-searchfield input').forEach((e => {e.blur();}));})); 1144 } 1145 }, 1146 sectionIndexer: function () { 1147 this.opts.sectionIndexer = this.opts.sectionIndexer || {}, n(this.opts.sectionIndexer, X).add && this.bind('initPanels:after', (() => { 1148 if (!this.node.indx) { 1149 let e = ''; 1150 'abcdefghijklmnopqrstuvwxyz'.split('').forEach((t => {e += '<a href="#">' + t + '</a>';})); 1151 let t = c('div.mm-sectionindexer'); 1152 t.innerHTML = e, this.node.pnls.prepend(t), this.node.indx = t, this.node.indx.addEventListener('click', (e => {e.target.matches('a') && e.preventDefault();})); 1153 let n = e => { 1154 if (!e.target.matches('a')) return; 1155 const t = e.target.textContent, n = h(this.node.pnls, '.mm-panel--opened')[0]; 1156 let s = -1, i = n.scrollTop; 1157 n.scrollTop = 0, d(n, '.mm-divider').filter((e =>
1157 !e.matches('.mm-hidden'))).forEach((e => {s < 0 && t == e.textContent.trim().slice(0, 1).toLowerCase() && (s = e.offsetTop);})), n.scrollTop = s > -1 ? s : i; 1158 }; 1159 A ? (this.node.indx.addEventListener('touchstart', n), this.node.indx.addEventListener('touchmove', n)) : this.node.indx.addEventListener('mouseover', n); 1160 } 1161 this.bind('openPanel:before', (e => { 1162 const t = d(e, '.mm-divider').filter((e => !e.matches('.mm-hidden'))).length; 1163 this.node.indx.classList[t ? 'add' : 'remove']('mm-sectionindexer--active'); 1164 })); 1165 })); 1166 }, 1167 setSelected: function () { 1168 this.opts.setSelected = this.opts.setSelected || {}; 1169 const e = n(this.opts.setSelected, J); 1170 if ('detect' == e.current) { 1171 const e = t => { 1172 t = t.split('?')[0].split('#')[0]; 1173 const n = this.node.menu.querySelector('a[href="' + t + '"], a[href="' + t + '/"]'); 1174 if (n) this.setSelected(n.parentElement); else { 1175 const n = t.split('/').slice(0, -1); 1176 n.length && e(n.join('/')); 1177 } 1178 }; 1179 this.bind('initMenu:after', (() => {e.call(this, window.location.href);})); 1180 } else e.current || this.bind('initListview:after', (e => {h(e, '.mm-listitem--selected').forEach((e => {e.classList.remove('mm-listitem--selected');}));})); 1181 e.hover && this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--selected-hover');})), e.parent && (this.bind('openPanel:after', (e => { 1182 d(this.node.pnls, '.mm-listitem--selected-parent').forEach((e => {e.classList.remove('mm-listitem--selected-parent');})); 1183 let t = e; 1184 for (; t;) { 1185 let e = d(this.node.pnls, `#${t.dataset.mmParent}`)[0]; 1186 t = null == e ? void 0 : e.closest('.mm-panel'), e && !e.matches('.mm-listitem--vertical') && e.classList.add('mm-listitem--selected-parent'); 1187 } 1188 })), this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--selected-parent');}))); 1189 }, 1190 sidebar: function () { 1191 if (!this.opts.offCanvas.use) return; 1192 this.opts.sidebar = this.opts.sidebar || {}; 1193 const e = n(this.opts.sidebar, Q); 1194 if (e.collapsed.use) { 1195 this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--sidebar-collapsed');})); 1196 let t = () => {this.node.wrpr.classList.add('mm-wrapper--sidebar-collapsed');}, 1197 n = () => {this.node.wrpr.classList.remove('mm-wrapper--sidebar-collapsed');}; 1198 'boolean' == typeof e.collapsed.use ? this.bind('initMenu:after', t) : g(e.collapsed.use, t, n); 1199 } 1200 if (e.expanded.use) { 1201 this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--sidebar-expanded');})); 1202 let t = !1, 1203 n = () => {t = !0, this.node.wrpr.classList.add('mm-wrapper--sidebar-expanded'), this.node.menu.removeAttribute('aria-modal'), this.open(), S.node.page.removeAttribute('inert');}, 1204 s = () => {t = !1, this.node.wrpr.classList.remove('mm-wrapper--sidebar-expanded'), this.node.menu.setAttribute('aria-modal', 'true'), this.close();}; 1205 'boolean' == typeof e.expanded.use ? this.bind('initMenu:after', n) : g(e.expanded.use, n, s), this.bind('close:after', (() => {t && window.sessionStorage.setItem('mmenuExpandedState', 'closed');})), this.bind('open:after', (() => {t && (window.sessionStorage.setItem('mmenuExpandedState', 'open'), S.node.page.removeAttribute('inert'));})); 1206 let i = e.expanded.initial; 1207 const a = window.sessionStorage.getItem('mmenuExpandedState'); 1208 switch (a) { 1209 case'open': 1210 case'closed': 1211 i = a; 1212 } 1213 'closed' === i && this.bind('init:after', (() => {this.close();})); 1214 } 1215 } 1216 }, window && (window.Mmenu = S); 1217})(); 1218 1219document.addEventListener('DOMContentLoaded', function () { 1220 // 1. OBERSTE EBENE: Klick auf <li> öffnet das erste Untermenü, schlieÃt andere 1221 document.querySelectorAll('ul#nav-ul > li').forEach(function (li) { 1222 const submenu = li.querySelector('ul'); 1223 if (submenu) { 1224 li.style.cursor = 'pointer'; 1225 li.addEventListener('click', function (e) { 1226 // Nicht auslösen, wenn auf einen Link geklickt wird 1227 if (e.target.tagName.toLowerCase() === 'a') return; 1228 1229 const isOpen = li.classList.contains('open'); 1230 // SchlieÃe alle anderen Menüpunkte auf derselben Ebene! 1231 document.querySelectorAll('ul#nav-ul > li.open').forEach(function (otherLi) { 1232 if (otherLi !== li) { 1233 otherLi.classList.remove('open', 'current'); 1234 const otherSubmenu = otherLi.querySelector('ul'); 1235 if (otherSubmenu) { 1236 otherSubmenu.classList.remove('show'); 1237 otherSubmenu.style.display = 'none'; 1238 } 1239 } 1240 }); 1241 1242 // Toggle den aktuellen Menüpunkt 1243 li.classList.toggle('open', !isOpen); 1244 li.classList.toggle('current', !isOpen); 1245 submenu.classList.toggle('show', !isOpen); 1246 submenu.style.display = isOpen ? 'none' : 'block'; 1247 }); 1248 } 1249 }); 1250 1251 // 2. UNTERMENÃS: Füge Toggle-Button ein und verwalte aufklappen/zu klappen 1252 document.querySelectorAll('ul#nav-ul ul ul').forEach(function (submenu) { 1253 const li = submenu.parentElement; 1254 if (!li.querySelector('.submenu-toggle')) { 1255 const btn = document.createElement('button'); 1256 btn.type = 'button'; 1257 btn.className = 'submenu-toggle ToggleBtn clickable'; 1258 btn.textContent = '+'; 1259 li.insertBefore(btn, submenu); 1260 } 1261 }); 1262 1263 // Klick-Handler für die Toggle-Buttons in Untermenüs (ab Ebene 2) â Accordion-Logik: 1264 document.querySelectorAll('.submenu-toggle').forEach(function (btn) { 1265 btn.addEventListener('click', function (e) { 1266 e.preventDefault(); 1267 e.stopPropagation(); 1268 const li = btn.closest('li'); 1269 const submenu = li.querySelector('ul'); 1270 const isOpen = li.classList.contains('open'); 1271 1272 // Accordion-Logik: schlieÃe alle anderen Untermenüs auf dieser Ebene 1273 const siblingLis = Array.from(li.parentElement.children) 1274 .filter(el => el !== li && el.tagName.toLowerCase() === 'li'); 1275 siblingLis.forEach(function (sibling) { 1276 sibling.classList.remove('open', 'current'); 1277 const sibSubmenu = sibling.querySelector('ul'); 1278 if (sibSubmenu) { 1279 sibSubmenu.classList.remove('show'); 1280 sibSubmenu.style.display = 'none'; 1281 } 1282 const sibBtn = sibling.querySelector('.submenu-toggle'); 1283 if (sibBtn) sibBtn.textContent = '+'; 1284 }); 1285 1286 li.classList.toggle('open', !isOpen); 1287 li.classList.toggle('current', !isOpen); 1288 if (submenu) { 1289 submenu.classList.toggle('show', !isOpen); 1290 submenu.style.display = isOpen ? 'none' : 'block'; 1291 } 1292 btn.textContent = isOpen ? '+' : 'â'; 1293 }); 1294 }); 1295}); 1296 1297/** 1298 * stacktable.js 1299 * Author & copyright (c) 2012: John Polacek 1300 * CardTable by: Justin McNally (2015) 1301 * Dual MIT & GPL license 1302 * 1303 * Page: http://johnpolacek.github.com/stacktable.js 1304 * Repo: https://github.com/johnpolacek/stacktable.js/ 1305 * 1306 * jQuery plugin for stacking tables on small screens 1307 * Requires jQuery version 1.7 or above 1308 * 1309 */ 1310;(function($) { 1311 $.fn.cardtable = function(options) { 1312 var $tables = this, 1313 defaults = {headIndex:0}, 1314 settings = $.extend({}, defaults, options), 1315 headIndex; 1316 1317 // checking the "headIndex" option presence... or defaults it to 0 1318 if(options && options.headIndex) 1319 headIndex = options.headIndex; 1320 else 1321 headIndex = 0; 1322 1323 return $tables.each(function() { 1324 var $table = $(this); 1325 if ($table.hasClass('stacktable')) { 1326 return; 1327 } 1328 var table_css = $(this).prop('class'); 1329 var $stacktable = $('<div></div>'); 1330 if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass); 1331 var markup = ''; 1332 var $caption, $topRow, headMarkup, bodyMarkup, tr_class; 1333 1334 $table.addClass('stacktable large-only'); 1335 1336 $caption = $table.find(">caption").clone(); 1337 $topRow = $table.find('>thead>tr,>tbody>tr,>tfoot>tr,>tr').eq(0); 1338 1339 // avoid duplication when paginating 1340 $table.siblings().filter('.small-only').remove(); 1341 1342 // using rowIndex and cellIndex in order to reduce ambiguity 1343 $table.find('>tbody>tr').each(function() { 1344 1345 // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records 1346 headMarkup = ''; 1347 bodyMarkup = ''; 1348 tr_class = $(this).prop('class'); 1349 // for the first row, "headIndex" cell is the head of the table 1350 // for the other rows, put the "headIndex" cell as the head for that row 1351 // then iterate through the key/values 1352 $(this).find('>td,>th').each(function(cellIndex) { 1353 if ($(this).html() !== ''){ 1354 bodyMarkup += '<tr class="' + tr_class +'">'; 1355 if ($topRow.find('>td,>th').eq(cellIndex).html()){ 1356 bodyMarkup += '<td class="st-key">
vendor: 5,006 bytes, lines 1356-1472
1356'+$topRow.find('>td,>th').eq(cellIndex).html()+'</td>'; 1357 } else { 1358 bodyMarkup += '<td class="st-key"></td>'; 1359 } 1360 bodyMarkup += '<td class="st-val '+$(this).prop('class') +'">'+$(this).html()+'</td>'; 1361 bodyMarkup += '</tr>'; 1362 } 1363 }); 1364 1365 markup += '<table class=" '+ table_css +' stacktable small-only"><tbody>' + headMarkup + bodyMarkup + '</tbody></table>'; 1366 }); 1367 1368 $table.find('>tfoot>tr>td').each(function(rowIndex,value) { 1369 if ($.trim($(value).text()) !== '') { 1370 markup += '<table class="'+ table_css + ' stacktable small-only"><tbody><tr><td>' + $(value).html() + '</td></tr></tbody></table>'; 1371 } 1372 }); 1373 1374 $stacktable.prepend($caption); 1375 $stacktable.append($(markup)); 1376 $table.before($stacktable); 1377 }); 1378 }; 1379 1380 $.fn.stacktable = function(options) { 1381 var $tables = this, 1382 defaults = {headIndex:0,displayHeader:true}, 1383 settings = $.extend({}, defaults, options), 1384 headIndex; 1385 1386 // checking the "headIndex" option presence... or defaults it to 0 1387 if(options && options.headIndex) 1388 headIndex = options.headIndex; 1389 else 1390 headIndex = 0; 1391 1392 return $tables.each(function() { 1393 var table_css = $(this).prop('class'); 1394 var $stacktable = $('<table class="'+ table_css +' stacktable small-only"><tbody></tbody></table>'); 1395 if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass); 1396 var markup = ''; 1397 var $table, $caption, $topRow, headMarkup, bodyMarkup, tr_class, displayHeader; 1398 1399 $table = $(this); 1400 $table.addClass('stacktable large-only'); 1401 $caption = $table.find(">caption").clone(); 1402 $topRow = $table.find('>thead>tr,>tbody>tr,>tfoot>tr').eq(0); 1403 1404 displayHeader = $table.data('display-header') === undefined ? settings.displayHeader : $table.data('display-header'); 1405 1406 // using rowIndex and cellIndex in order to reduce ambiguity 1407 $table.find('>tbody>tr').each(function(rowIndex) { 1408 1409 // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records 1410 headMarkup = ''; 1411 bodyMarkup = ''; 1412 tr_class = $(this).prop('class'); 1413 1414 // for the first row, "headIndex" cell is the head of the table 1415 if (rowIndex === 0) { 1416 // the main heading goes into the markup variable 1417 if (displayHeader) { 1418 markup += '<tr class=" '+tr_class +' "><th class="st-head-row st-head-row-main" colspan="2">'+$(this).find('>th,>td').eq(headIndex).html()+'</th></tr>'; 1419 } 1420 } else { 1421 // for the other rows, put the "headIndex" cell as the head for that row 1422 // then iterate through the key/values 1423 $(this).find('>td,>th').each(function(cellIndex) { 1424 if (cellIndex === headIndex) { 1425 headMarkup = '<tr class="'+ tr_class+'"><th class="st-head-row" colspan="2">'+$(this).html()+'</th></tr>'; 1426 } else { 1427 if ($(this).html() !== ''){ 1428 bodyMarkup += '<tr class="' + tr_class +'">'; 1429 if ($topRow.find('>td,>th').eq(cellIndex).html()){ 1430 bodyMarkup += '<td class="st-key">'+$topRow.find('>td,>th').eq(cellIndex).html()+'</td>'; 1431 } else { 1432 bodyMarkup += '<td class="st-key"></td>'; 1433 } 1434 bodyMarkup += '<td class="st-val '+$(this).prop('class') +'">'+$(this).html()+'</td>'; 1435 bodyMarkup += '</tr>'; 1436 } 1437 } 1438 }); 1439 1440 markup += headMarkup + bodyMarkup; 1441 } 1442 }); 1443 1444 $stacktable.prepend($caption); 1445 $stacktable.append($(markup)); 1446 $table.before($stacktable); 1447 }); 1448 }; 1449 1450 $.fn.stackcolumns = function(options) { 1451 var $tables = this, 1452 defaults = {}, 1453 settings = $.extend({}, defaults, options); 1454 1455 return $tables.each(function() { 1456 var $table = $(this); 1457 var num_cols = $table.find('>thead>tr,>tbody>tr,>tfoot>tr').eq(0).find('>td,>th').length; //first table <tr> must not contain colspans, or add sum(colspan-1) here. 1458 if(num_cols<3) //stackcolumns has no effect on tables with less than 3 columns 1459 return; 1460 1461 var $stackcolumns = $('<table class="stacktable small-only"></table>'); 1462 if (typeof settings.myClass !== 'undefined') $stackcolumns.addClass(settings.myClass); 1463 $table.addClass('stacktable large-only'); 1464 var tb = $('<tbody></tbody>'); 1465 var col_i = 1; //col index starts at 0 -> start copy at second column. 1466 1467 while (col_i < num_cols) { 1468 $table.find('>thead>tr,>tbody>tr,>tfoot>tr').each(function(index) { 1469 var tem = $('<tr></tr>'); // todo opt. copy styles of $this; todo check if parent is thead or tfoot to handle accordingly 1470 if(index === 0) tem.addClass("st-head-row st-head-row-main"); 1471 var first = $(this).find('>td,>th').eq(0).clone().addClass("st-key"); 1472 var target = col_i;
1473 // if colspan apply, recompute target for second cell. 1474 if ($(this).find("*[colspan]").length) { 1475 var i =0; 1476 $(this).find('>td,>th').each(function() { 1477 var cs = $(this).attr("colspan"); 1478 if (cs) { 1479 cs = parseInt(cs, 10); 1480 target -= cs-1; 1481 if ((i+cs) > (col_i)) //out of current bounds 1482 target += i + cs - col_i -1; 1483 i += cs; 1484 } else { 1485 i++; 1486 } 1487 1488 if (i > col_i) 1489 return false; //target is set; break. 1490 }); 1491 } 1492 var second = $(this).find('>td,>th').eq(target).clone().addClass("st-val").removeAttr("colspan"); 1493 tem.append(first, second); 1494 tb.append(tem); 1495 }); 1496 ++col_i; 1497 } 1498 1499 $stackcolumns.append($(tb)); 1500 $table.before($stackcolumns); 1501 }); 1502 }; 1503 1504}(jQuery)); 1505 1506document.body.addEventListener("click", BodyClick); 1507 1508function BodyClick(event) 1509{ 1510 var target = event.target || event.srcElement; 1511 if(!target.classList.contains("clickable")) 1512 { 1513 var el = document.getElementsByClassName("level-01"); 1514 for(i = 0; i<el.length; i++) 1515 { 1516 el[i].parentNode.classList.remove("active"); 1517 el[i].classList.remove("show"); 1518 } 1519 el = document.getElementsByClassName("level-02"); 1520 for(i = 0; i<el.length; i++) 1521 { 1522 el[i].parentNode.classList.remove("active"); 1523 el[i].classList.remove("show"); 1524 } 1525 el = document.getElementsByClassName("ToggleBtn"); 1526 for(i = 0; i<el.length; i++) 1527 { 1528 el[i].innerHTML = "+"; 1529 } 1530 } 1531} 1532 1533function HideChildLevels(el) 1534{ 1535 for(var i = 0; i < el.children.length; i++) 1536 { 1537 el.children[i].lastElementChild.classList.remove("show"); 1538 } 1539} 1540 1541function ToggleLevel01(el) 1542{ 1543 var co = document.getElementsByClassName("level-01"); 1544 if(co) 1545 { 1546 for(var i = 0; i < co.length; i++) 1547 { 1548 if(co[i] != el.nextElementSibling) 1549 { 1550 HideChildLevels(co[i]); 1551 co[i].parentNode.classList.remove("active"); 1552 co[i].classList.remove("show"); 1553 } 1554 } 1555 } 1556 1557 var btns = document.getElementsByClassName("ToggleBtn"); 1558 for(i = 0; i<btns.length; i++) 1559 { 1560 btns[i].innerHTML = "+"; 1561 } 1562 1563 if(el.nextElementSibling.classList.contains("show")) 1564 { 1565 el.parentNode.classList.remove("active"); 1566 el.nextElementSibling.classList.remove("show"); 1567 } else { 1568 el.parentNode.classList.add("active"); 1569 el.nextElementSibling.classList.add("show"); 1570 } 1571} 1572 1573function ToggleLevel02(el) 1574{ 1575 var co = document.getElementsByClassName("level-02"); 1576 if(co) 1577 { 1578 for(var i = 0; i < co.length; i++) 1579 { 1580 if(co[i] != el.nextElementSibling) 1581 { 1582 if(co[i].previousElementSibling.innerHTML == "-") 1583 { 1584 co[i].previousElementSibling.innerHTML = "+"; 1585 } 1586 co[i].parentNode.classList.remove("active"); 1587 co[i].classList.remove("show"); 1588 } 1589 } 1590 } 1591 1592 if(el.nextElementSibling.classList.contains("show")) 1593 { 1594 el.parentNode.classList.remove("active"); 1595 el.nextElementSibling.classList.remove("show"); 1596 if(el.innerHTML == "-") 1597 { 1598 el.innerHTML = "+"; 1599 } 1600 } else { 1601 el.parentNode.classList.add("active"); 1602 el.nextElementSibling.classList.add("show"); 1603 if(el.innerHTML == "+") 1604 { 1605 el.innerHTML = "-"; 1606 } 1607 } 1608} 1609 1610// Polyfills 1611 1612// Source: https://gist.github.com/k-gun/c2ea7c49edf7b757fe9561ba37cb19ca 1613/** 1614 * Element.prototype.classList for IE8/9, Safari. 1615 * @author Kerem GüneŠ<[email protected]> 1616 * @copyright Released under the MIT License <https://opensource.org/licenses/MIT> 1617 * @version 1.2 1618 * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList 1619 */ 1620;(function() { 1621 // Helpers. 1622 var trim = function(s) { 1623 return s.replace(/^\s+|\s+$/g, ''); 1624 }, 1625 regExp = function(name) { 1626 return new RegExp('(^|\\s+)'+ name +'(\\s+|$)'); 1627 }, 1628 forEach = function(list, fn, scope) { 1629 for (var i = 0; i < list.length; i++) { 1630 fn.call(scope, list[i]); 1631 } 1632 }; 1633 1634 // Class list object with basic methods. 1635 function ClassList(element) { 1636 this.element = element; 1637 } 1638 1639 ClassList.prototype = { 1640 add: function() {
1641 forEach(arguments, function(name) { 1642 if (!this.contains(name)) { 1643 this.element.className = trim(this.element.className +' '+ name); 1644 } 1645 }, this); 1646 }, 1647 remove: function() { 1648 forEach(arguments, function(name) { 1649 this.element.className = trim(this.element.className.replace(regExp(name), ' ')); 1650 }, this); 1651 }, 1652 toggle: function(name) { 1653 return this.contains(name) ? (this.remove(name), false) : (this.add(name), true); 1654 }, 1655 contains: function(name) { 1656 return regExp(name).test(this.element.className); 1657 }, 1658 item: function(i) { 1659 return this.element.className.split(/\s+/)[i] || null; 1660 }, 1661 // bonus 1662 replace: function(oldName, newName) { 1663 this.remove(oldName), this.add(newName); 1664 } 1665 }; 1666 1667 // IE8/9, Safari 1668 // Remove this if statements to override native classList. 1669 if (!('classList' in Element.prototype)) { 1670 // Use this if statement to override native classList that does not have for example replace() method. 1671 // See browser compatibility: https://developer.mozilla.org/en-US/docs/Web/API/Element/classList#Browser_compatibility. 1672 // if (!('classList' in Element.prototype) || 1673 // !('classList' in Element.prototype && Element.prototype.classList.replace)) { 1674 Object.defineProperty(Element.prototype, 'classList', { 1675 get: function() { 1676 return new ClassList(this); 1677 } 1678 }); 1679 } 1680 1681 // For others replace() support. 1682 if (window.DOMTokenList && !DOMTokenList.prototype.replace) { 1683 DOMTokenList.prototype.replace = ClassList.prototype.replace; 1684 } 1685})(); 1686/*! 1687* jQuery Cookie Plugin v1.4.0 1688* https://github.com/carhartl/jquery-cookie 1689* 1690* Copyright 2013 Klaus Hartl 1691* Released under the MIT license 1692*/(function(factory){if(typeof define==='function'&&define.amd){define(['jquery'],factory);}else{factory(jQuery);}}(function($){var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s);} 1693function decode(s){return config.raw?s:decodeURIComponent(s);} 1694function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value));} 1695function parseCookieValue(s){if(s.indexOf('"')===0){s=s.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,'\\');} 1696try{s=decodeURIComponent(s.replace(pluses,' '));return config.json?JSON.parse(s):s;}catch(e){}} 1697function read(s,converter){var value=config.raw?s:parseCookieValue(s);return $.isFunction(converter)?converter(value):value;} 1698var config=$.cookie=function(key,value,options){if(value!==undefined&&!$.isFunction(value)){options=$.extend({},config.defaults,options);if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setTime(+t+days*864e+5);} 1699return(document.cookie=[encode(key),'=',stringifyCookieValue(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));} 1700var result=key?undefined:{};var cookies=document.cookie?document.cookie.split('; '):[];for(var i=0,l=cookies.length;i<l;i++){var parts=cookies[i].split('=');var name=decode(parts.shift());var cookie=parts.join('=');if(key&&key===name){result=read(cookie,value);break;} 1701if(!key&&(cookie=read(cookie))!==undefined){result[name]=cookie;}} 1702return result;};config.defaults={};$.removeCookie=function(key,options){if($.cookie(key)===undefined){return false;} 1703$.cookie(key,'',$.extend({},options,{expires:-1}));return!$.cookie(key);};})); 1704document.addEventListener('DOMContentLoaded', () => { 1705 // Select the target element 1706 const element = document.querySelector('.cookie-notice .cn-body'); 1707 1708 // Safety check: Only proceed if the element actually exists in the DOM 1709 if (element) { 1710 const heading = document.createElement('h2'); 1711 heading.textContent = 'Wir verwenden Cookies'; 1712 1713 // Insert the heading as the first child of the element 1714 element.insertAdjacentElement('afterbegin', heading); 1715 } 1716}); 1717 1718 1719(function ($) { 1720 1721 'use strict'; 1722 1723 $.fn.firstVisitPopup = function (settings) { 1724 1725 var $body = $('body'); 1726 var $dialog = $(this); 1727 var $blackout; 1728 var setCookie = function (name, value) { 1729 var date = new Date(), 1730 expires = 'expires='; 1731 date.setTime(date.getTime() + 1); 1732 expires += date.toGMTString(); 1733 document.cookie = name + '=' + value + '; ' + expires + '; path=/'; 1734 } 1735 var getCookie = function (name) { 1736 var allCookies = document.cookie.split(';'), 1737 cookieCounter = 0, 1738 currentCookie = ''; 1739 for (cookieCounter = 0; cookieCounter < allCookies.length; cookieCounter++) { 1740 currentCookie = allCookies[cookieCounter]; 1741 while (currentCookie.charAt(0) === ' ') { 1742 currentCookie = currentCookie.substring(1, currentCookie.length); 1743 } 1744 if (currentCookie.indexOf(name + '=') === 0) { 1745 return currentCookie.substring(name.length + 1, currentCookie.length); 1746 } 1747 } 1748 return false;
1749 } 1750 var showMessage = function () { 1751 $blackout.show(); 1752 $dialog.show(); 1753 } 1754 var hideMessage = function () { 1755 $blackout.hide(); 1756 $dialog.hide(); 1757 setCookie('fvpp' + settings.cookieName, 'true'); 1758 } 1759 1760 $body.append('<div id="fvpp-blackout"></div>'); 1761 $dialog.append('<a id="fvpp-close">X</a>'); 1762 $blackout = $('#fvpp-blackout'); 1763 1764 if (getCookie('fvpp' + settings.cookieName)) { 1765 hideMessage(); 1766 } else { 1767 showMessage(); 1768 } 1769 1770 $(settings.showAgainSelector).on('click', showMessage); 1771 $body.on('click', '#fvpp-blackout, #fvpp-close', hideMessage); 1772 1773 }; 1774 1775})(jQuery);
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.