1(()=>{"use strict";class e{expandAccordionElement(e,n,i){clearTimeout(e.heightChangeTimer),e.style.visibility="hidden",e.style.position="absolute",e.style.top="-2000%",e.style.height="auto",e.style.display="block",requestAnimationFrame(function(){const s=e.offsetHeight-(n||0);e.style.height="0",e.style.position="static",e.style.top="auto",e.style.display="block",e.style.visibility="visible",requestAnimationFrame(function(){e.style.height=s+"px",e.heightChangeTimer=setTimeout(function(){i&&(e.style.height="auto")},350)})})}collapseAccordionElement(e){requestAnimationFrame(function(){e.style.height=e.offsetHeight+"px",requestAnimationFrame(function(){e.style.height="0"})})}}class n{static getYearMonthDay(e){const n=(e.getMonth()+1).toString(),i=e.getDate().toString();return{year:e.getFullYear().toString().padStart(4,"0"),month:n.length<2?"0"+n:n,day:i.length<2?"0"+i:i}}static isValid(e){return e instanceof Date&&!isNaN(e.getTime())}static parseIsoDate(e){if("string"!=typeof e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return null;const n=new Date(e);return this.isValid(n)?n:null}static formatDateToGerman(e){if(!this.isValid(e))return"";const{year:n,month:i,day:s}=this.getYearMonthDay(e);return s+"."+i+"."+n}static formatToIso(e){if(!this.isValid(e))return"";const{year:n,month:i,day:s}=this.getYearMonthDay(e);return n+"-"+i+"-"+s}}class i extends e{constructor(e){super(),this.timelineContainer=e}openPeriod(e){const n=document.querySelector(`.news-timeline-years-container[data-period="${e}"]`);if(n)if(n.classList.contains("news-timeline-years-container-expanded"))this.collapseAllContainerYears(),n.classList.remove("news-timeline-years-container-expanded");else{this.collapseAllContainerYears(),n.classList.add("news-timeline-years-container-expanded"),this.expandElement(n);const i=document.querySelector(`.news-timeline-period-row[data-period="${e}"]`);i&&i.classList.add("news-timeline-hidden")}}collapseAllContainerYears(){document.querySelectorAll(".news-timeline-hidden").forEach(e=>e.classList.remove("news-timeline-hidden")),document.querySelectorAll(".news-timeline-years-container").forEach(e=>{e.classList.contains("news-timeline-years-container-expanded")&&(this.collapseAccordionElement(e),e.classList.remove("news-timeline-years-container-expanded"))})}expandElement(e){e.classList.add("news-timeline-years-container-expanded"),this.expandAccordionElement(e,1,!0)}}class s{constructor(e,n){return this.isEnglish="en"===e,this.timelineContainer=n,this.years=(()=>{const e=[],n=(new Date).getFullYear();let i=2009;for(;i<=n;)e.push(i),i++;return e.reverse()})(),this.renderTimeline(),this.newsAccordionManager=new i(n),this.timelineContainer.addEventListener("click",e=>{if(e.target.classList.contains("news-timeline-year"))this.onYearClick(e);else if(e.target.classList.contains("news-timeline-year-title")){this.removeAllNewsEntries();const n=e.target.dataset.year,i=document.querySelector(`.news-year-title-container[data-year="${n}"]`);setTimeout(()=>{window.scrollTo({top:i.offsetTop-200,behavior:"smooth"})},100)}}),this}removeAllNewsEntries(){document.querySelectorAll(".news-timeline-year-container-expanded").forEach(e=>{e.classList.remove("news-timeline-year-container-expanded"),e.innerHTML=""}),document.querySelectorAll(".news-year-title-container-expanded").forEach(e=>e.classList.remove("news-year-title-container-expanded"))}renderEntry(e){return`\n <div class="area-background text-shark px-20 py-20 d-flex">\n ${e.imagePath?`\n\n <div style="flex-basis: 23rem; padding: 0.8rem 2.5rem 0.8rem 0.5rem;" class="flex-shrink-0 flex-grow-0 news-timeline-image">\n <img\n class="width-100"\n src="${encodeURI(e.imagePath)}"\n />\n\n </div>\n <div class="flex-grow">\n <h3 class="text-shark">${this.isEnglish&&e.englishEnabled?e.titleEn:e.title}</h3>\n ${this.isEnglish&&e.englishEnabled?e.contentEn:e.content}\n <div class="pt-20">\n <a href="${this.isEnglish?"/en/news/"+e.id:"/news/"+e.id}">\n ${this.isEnglish&&e.englishEnabled?"Read more":"Mehr lesen"}\n </a>\n </div>\n </div>\n `:`\n <div>\n <h3 class="text-shark">${this.isEnglish&&e.englishEnabled?e.titleEn:e.title}</h3>\n ${this.isEnglish&&e.englishEnabled?e.contentEn:e.content}\n <div class="pt-20">\n <a href="${this.isEnglish?"/en/news/"+e.id:"/news/"+e.id}">\n ${this.isEnglish&&e.englishEnabled?"Read more":"Mehr lesen"}\n </a>\n </div>\n </div>\n `}\n </div>\n `}renderEntries(e,i,s){let t="",a=i;t+=`\n <div class="d-flex">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n </div>\n </div>\n <div class="news-timeline-entries-start news-entries-row news-entries-row-left">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n <div class="py-5">\n <div class="text-shark pt-5">\n <h2 class="text-shark hover-pointer news-timeline-year-title" data-year="${e}">Jahr ${e}</h2>\n </div>\n </div>\n </div>\n </div>\n `;
1for(const e of s)t+=`\n <div class="news-entries-row${a?" news-entries-row-left":""}">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box">\n <div class="news-timeline-mid-line"></div>\n <div class="news-timeline-entry-mid-point"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content ${a?" news-entries-side-box-left":""}">\n <div class="py-5" style="overflow-wrap: anywhere;">\n <div class="text-shark pt-5 ${a?"news-entries-date-right":""}">\n ${n.formatDateToGerman(new Date(e.date))}\n </div>\n ${this.renderEntry(e)}\n </div>\n </div>\n </div>\n `,a=!a;t+='\n <div class="d-flex news-hide-on-900">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box pb-10">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n </div>\n </div>\n <div class="news-timeline-entries-end">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n </div>\n </div>\n <div class="d-flex">\n <div class="news-entries-side-box news-side-box-width-empty">\n\n </div>\n <div class="news-timeline-mid-box pb-10">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n </div>\n </div>\n ';const d=document.querySelector(`.news-year-title-container[data-year="${e}"]`),l=document.querySelector(`.news-timeline-year-container[data-year="${e}"]`);d&&d.classList.add("news-year-title-container-expanded"),l&&(l.classList.add("news-timeline-year-container-expanded"),l.innerHTML=t,setTimeout(()=>{window.scrollTo({top:l.offsetTop,behavior:"smooth"})},100))}onYearClick(e){const n=parseInt(e.target.dataset.year);this.loadAndRenderNewsEntries(n,!0)}loadAndRenderNewsEntries(e,n){fetch("/public-api/news/getNewsEntriesByYear",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({year:e})}).then(e=>e.json()).then(i=>{var s;const t=i.payload.newsEntries;this.removeAllNewsEntries(),this.renderEntries(e,n,t),(null===(s=null==i?void 0:i.payload)||void 0===s?void 0:s.newsEntries)||alert("Fehler")})}renderYears(e){let n="",i=!0;for(const s of e)n+=`\n <div class="news-year-title-container ${i?"news-year-title-container-left":""}"\n data-year="${s}">\n <div class="news-year-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box">\n <div class="news-timeline-mid-line"></div>\n <div class="news-timeline-year-mid-point"></div>\n </div>\n <div class="news-year-side-box news-side-box-width-content ${i?"news-year-side-box-left":""}">\n <div\n class="news-timeline-year text-shark px-5 py-5 hover-pointer"\n data-year="${s}"\n >\n ${s}\n </div>\n </div>\n </div>\n <div class="news-timeline-year-container" data-year="${s}"></div>\n `,i=!i;
1n+='\n <div class="d-flex">\n <div class="news-entries-side-box news-side-box-width-empty">\n </div>\n <div class="news-timeline-mid-box pb-5">\n <div class="news-timeline-mid-line"></div>\n </div>\n <div class="news-entries-side-box news-side-box-width-content">\n </div>\n </div>\n ',this.timelineContainer.innerHTML=n}renderTimeline(){this.renderYears(this.years)}}window.createNewsTimelineManager=(e,n)=>new s(e,n)})();
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.