1var greyd=greyd||{};greyd.scrollObserver=new function(){class observedElement{constructor(target,callback,type){this.target=target;this.callback=callback;this.type=typeof type==='undefined'?'once':type}} 2this.allObservedElements=[];this.allViewportElements=[];this.intersectionObserver;this.intersectionObserverConfig={root:null,rootMargin:'0px',threshold:0};this.init=function(){if("IntersectionObserver" in window){this.intersectionObserver=new IntersectionObserver((entries)=>{entries.forEach((entry)=>{if(entry.intersectionRatio>=0){this.entersViewport(entry.target)}else{this.leavesViewport(entry.target)}})},this.intersectionObserverConfig)}else{} 3document.addEventListener('scroll',this.onScroll)};this.observeElement=function(target,callback,type){if(!this.intersectionObserver){this.init()} 4this.intersectionObserver.observe(target);this.allObservedElements.push(new observedElement(target,callback,type))};this.unobserveElement=function(target){this.intersectionObserver.unobserve(target);let index=this.allObservedElements.indexOf(target);if(index>-1){this.allObservedElements.splice(index,1)} 5index=this.allViewportElements.indexOf(target);if(index>-1){this.allViewportElements.splice(index,1)}};this.entersViewport=function(target){var elements=this.getObservedElements(target);if(elements)elements.forEach((element)=>{const{callback,type}=element;if(type==='always'){this.allViewportElements.push(target)}else if(type==='once'){this.unobserveElement(target)} 6callback(target,null,!0)})};this.leavesViewport=function(target){const index=this.allViewportElements.indexOf(target);if(index>-1){this.allViewportElements.splice(index,1)} 7var elements=this.getObservedElements(target);if(elements)elements.forEach((element)=>{const{callback,type}=element;if(type==='change'){callback(target,null,!1)}})};this.whileInViewport=function(target,e){var elements=this.getObservedElements(target);if(elements)elements.forEach((element)=>{const{callback}=element;callback(target,e,!0)})};this.onScroll=function(e){if(this.allViewportElements.length===0)return;this.allViewportElements.forEach(target=>this.whileInViewport(target,e))};this.getObservedElements=function(target){const result=this.allObservedElements.filter(obj=>{return obj.target===target});return result.length?result:null};this.init=this.init.bind(this);this.observeElement=this.observeElement.bind(this);this.unobserveElement=this.unobserveElement.bind(this);this.entersViewport=this.entersViewport.bind(this);this.leavesViewport=this.leavesViewport.bind(this);this.onScroll=this.onScroll.bind(this);this.whileInViewport=this.whileInViewport.bind(this);this.getObservedElements=this.getObservedElements.bind(this)}
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.