https://erotik.com/blog/wp-content/cache/min/1/blog/wp-content/plu…/header-builder.js?ver=1790807509
1(function(){class BreakdanceHeaderBuilder{element=null;stickyScrollHideAfter=!1;stickyHideUntilScrollDistance=!1;stickyRevealOnScrollUp=!1;isBuilder=!1;lastScroll=0;timeout=null;initialHiddenClass="bde-header-builder--sticky-scroll-start-off-hidden";hiddenClass="bde-header-builder--sticky-scroll-hide";stylesClass="bde-header-builder--sticky-styles";constructor(selector,id,isBuilder){this.handleScroll=this.handleScroll.bind(this);this.isBuilder=isBuilder;this.element=document.querySelector(selector);this.stickyScrollHideAfter=this.getProp("stickyScrollHideAfter");this.stickyHideUntilScrollDistance=this.getProp("stickyHideUntilScrollDistance");this.stickyRevealOnScrollUp=this.getBooleanProp("stickyRevealOnScrollUp");this.handleScroll();this.setupListeners();this.createMarkers()} 2refresh(){this.handleSticky()} 3destroy(){this.unbindListeners();document.querySelectorAll(".bde-header-builder-marker").forEach((marker)=>marker.remove())} 4getProp(key){return parseInt(this.element.dataset[key])||!1} 5getBooleanProp(key){return!!this.element.dataset[key]} 6setupListeners(){if(!this.isSticky()){this.clearStickyStyles();return} 7window.addEventListener("scroll",this.handleScroll,{passive:!0})} 8unbindListeners(){window.removeEventListener("scroll",this.handleScroll)} 9clearStickyStyles(){this.removeClass(this.initialHiddenClass);this.removeClass(this.hiddenClass);this.removeClass("bde-header-builder--sticky-styles");this.removeClass("is-animating");this.removeClass("is-before")} 10addClass(x){this.element.classList.add(x)} 11hasClass(x){return this.element.classList.contains(x)} 12removeClass(x){this.element.classList.remove(x)} 13isSticky(){return this.hasClass("bde-header-builder--sticky")} 14isHidden(){return this.hasClass(this.hiddenClass)} 15shouldHide(scrollTop){const hideAfterDistance=this.stickyScrollHideAfter!=!1&&scrollTop>this.stickyScrollHideAfter;const hideUntilDistance=this.stickyHideUntilScrollDistance!=!1&&scrollTop<this.stickyHideUntilScrollDistance;return hideAfterDistance||hideUntilDistance} 16shouldShowAfterACertainDistance(scrollTop){return(this.stickyHideUntilScrollDistance!=!1&&scrollTop>this.stickyHideUntilScrollDistance)} 17shouldShowOnScrollUp(scrollTop){if(!this.stickyRevealOnScrollUp){return!1} 18if(this.stickyHideUntilScrollDistance>scrollTop)return!1;return scrollTop<this.lastScroll} 19handleScroll(){this.removeClass(this.initialHiddenClass);this.handleSticky();this.handleBuilderBehaviorOnScroll()} 20handleSticky(){const scrollTop=document.documentElement.scrollTop;if(scrollTop>0){this.addClass(this.stylesClass)}else if(this.stickyHideUntilScrollDistance==!1){this.removeClass(this.stylesClass)} 21if(this.shouldShowAfterACertainDistance(scrollTop)){this.removeClass(this.hiddenClass)} 22if(this.shouldHide(scrollTop)){this.addClass(this.hiddenClass)}else if(this.isHidden()){this.removeClass(this.hiddenClass)} 23if(this.shouldShowOnScrollUp(scrollTop)){this.removeClass(this.hiddenClass)} 24this.lastScroll=scrollTop} 25handleBuilderBehaviorOnScroll(){const scrollTop=document.documentElement.scrollTop;if(!this.isBuilder)return;if(this.shouldHide(scrollTop)){this.addClass("is-before");this.removeClass("is-animating")}else{this.addClass("is-animating");this.removeClass("is-before")} 26window.clearTimeout(this.timeout);this.timeout=setTimeout(()=>{this.removeClass("is-animating")},200)} 27createMarkers(){if(!this.isBuilder)return;if(this.stickyScrollHideAfter&&this.stickyHideUntilScrollDistance&&this.stickyScrollHideAfter<this.stickyHideUntilScrollDistance){this.createMarker(this.stickyScrollHideAfter,`Error: 'Hide' must be higher than 'Show'`)}else if(this.stickyScrollHideAfter){this.createMarker(this.stickyScrollHideAfter,`Hide (${this.stickyScrollHideAfter}px)`)} 28if(this.stickyHideUntilScrollDistance){this.createMarker(this.stickyHideUntilScrollDistance,`Show (${this.stickyHideUntilScrollDistance}px)`)}} 29createMarker(position,text){const marker=document.createElement("span");marker.style.top=`${position}px`;marker.classList.add("bde-header-builder-marker");const textNode=document.createTextNode(text);marker.append(textNode);document.body.append(marker)}} 30window.BreakdanceHeaderBuilder=BreakdanceHeaderBuilder})()
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.