Inhaltsverzeichnis
keine Gliederung
(function(){'use strict';function startTracker(){var CONFIG={selectors:'h2, h3, h4',threshold:0.35,throttle:80,range:2,excludeTexts:['Von $1','*Edit'],excludeContainers:['.deki-page-titlex','#siteSubx'],bottomDefault:110,bottomMenuOpen:300,maxRetries:30,retryDelay:300,longPageThreshold:3000};var panel=document.getElementById('trackerPageContent');var list=document.getElementById('trackerList');var menuToggle=document.querySelector('.menu-toggle-icon');if(!panel||!list)return;var headings=[];var currentIndex=-1;var timer;var menuOpen=false;var showThreshold=0;var scrollThreshold=0;var useIconTrigger=false;function checkPageHeight(){var pageHeight=Math.max(document.documentElement.scrollHeight||0,document.body.scrollHeight||0);if(pageHeight<CONFIG.longPageThreshold){var triggerIcon=document.querySelector('img[src="/skins/common/icons/icon-trans.gif"][width="185"]');if(triggerIcon){var rect=triggerIcon.getBoundingClientRect();showThreshold=rect.bottom+(window.pageYOffset||document.documentElement.scrollTop);useIconTrigger=true}}else{useIconTrigger=false;scrollThreshold=window.innerHeight}}if(menuToggle){menuToggle.addEventListener('click',function(){menuOpen=!menuOpen;panel.style.bottom=menuOpen?CONFIG.bottomMenuOpen+'px':CONFIG.bottomDefault+'px'})}function collectHeadings(){var seenTexts=[];headings=Array.from(document.querySelectorAll(CONFIG.selectors)).filter(function(h){for(var i=0;i<CONFIG.excludeContainers.length;i++){if(h.closest(CONFIG.excludeContainers[i]))return false}return true}).map(function(h){return{el:h,text:h.textContent.trim()}}).filter(function(h){for(var i=0;i<CONFIG.excludeTexts.length;i++){var pattern=CONFIG.excludeTexts[i];if(pattern.startsWith('*')&&h.text.endsWith(pattern.substring(1)))return false;if(pattern.endsWith('*')&&h.text.startsWith(pattern.slice(0,-1)))return false;if(h.text===pattern)return false}if(seenTexts.includes(h.text))return false;seenTexts.push(h.text);return true})}function getTop(el){var rect=el.getBoundingClientRect();return rect.top+(window.pageYOffset||document.documentElement.scrollTop)}function findCurrent(){if(!headings.length)return 0;var scrollPos=window.pageYOffset||document.documentElement.scrollTop;var viewportHeight=window.innerHeight;var pageHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);if(scrollPos+viewportHeight>=pageHeight-100){return headings.length-1}var triggerPoint=scrollPos+(viewportHeight*CONFIG.threshold);for(var i=headings.length-1;i>=0;i--){var top=getTop(headings[i].el);if(triggerPoint>=top){return i}}return 0}function updateVisibility(){var scrollPos=window.pageYOffset||document.documentElement.scrollTop;if(useIconTrigger){if(scrollPos>showThreshold){panel.classList.add('visible')}else{panel.classList.remove('visible')}}else{if(scrollPos>scrollThreshold){panel.classList.add('long-page')}else{panel.classList.remove('long-page')}}}function render(){list.innerHTML='';if(!headings.length)return;var start=Math.max(0,currentIndex-CONFIG.range);var end=Math.min(headings.length-1,currentIndex+CONFIG.range);for(var i=start;i<=end;i++){var item=document.createElement('div');item.className='tracker-item';if(i===currentIndex)item.classList.add('current');else if(Math.abs(i-currentIndex)===1)item.classList.add('near');else item.classList.add('far');item.textContent=headings[i].text;list.appendChild(item)}}function update(){updateVisibility();if(!headings.length)return;var idx=findCurrent();if(idx!==currentIndex){currentIndex=idx;render()}}window.addEventListener('scroll',function(){clearTimeout(timer);timer=setTimeout(update,CONFIG.throttle)},{passive:true});window.addEventListener('resize',function(){checkPageHeight();update()});function init(attempt){checkPageHeight();collectHeadings();if(headings.length>0){currentIndex=findCurrent();render();updateVisibility();return}if(attempt<CONFIG.maxRetries){setTimeout(function(){init(attempt+1)},CONFIG.retryDelay)}}if(document.readyState==='complete'){setTimeout(function(){init(0)},2000)}else{window.addEventListener('load',function(){setTimeout(function(){init(0)},2000)})}}if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',startTracker)}else{startTracker()}})();
<div id="trackerPageContent"><div class="tracker-list" id="trackerList"></div></div>
#trackerPageContent{position:fixed;bottom:110px;left:20px;width:250px;z-index:2147483000;pointer-events:none;opacity:0;transition:bottom .3s,opacity .4s}#trackerPageContent.long-page,#trackerPageContent.visible{opacity:1!important}.tracker-list{display:flex;flex-direction:column;gap:6px}.tracker-item{line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .25s}.tracker-item.current{font-size:22px;font-weight:600;color:#06C}.tracker-item.near{font-size:16px;color:#777}.tracker-item.far{font-size:14px;color:#7777776b}