PageSourceSearch

https://www.haus-des-meeres.at/js/news.js

js haus-des-meeres.at collected 2026-10-02 04:28:41 UTC 11,642 bytes, 1 lines download raw bytes

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.