1(function () { 2 IntersectionObserversManager = ASPx.CreateClass(null, { 3 constructor: function() { 4 this.rootElementToObserverMap = this.createMap(); 5 this.elementToHandlerMap = this.createMap(); 6 this.clearInvalidElementsInterval = null; 7 this.clearInvalidElementsPeriod = 5000; 8 }, 9 AddTargetElement: function(element, rootElement, visibilityChangedHandler) { 10 this.addTargetElementCore(element, rootElement, visibilityChangedHandler); 11 }, 12 SubscribeElemensVisibilityChangeInBrowserWindow: function (element, visibilityChangedHandler) { 13 this.addTargetElementCore(element, null, visibilityChangedHandler); 14 }, 15 createMap: function() { 16 return new Map(); 17 }, 18 getObserver: function() { 19 return IntersectionObserver; 20 }, 21 initializeObserver: function(rootElement) { 22 if(!this.rootElementToObserverMap.get(rootElement)) { 23 var options = { 24 root: rootElement, 25 rootMargin: '-1px', 26 threshold: 0.0 27 }; 28 var observerClass = this.getObserver(); 29 var observer = new observerClass(this.visibilityChanged.bind(this), options); 30 this.rootElementToObserverMap.set(rootElement, observer); 31 } 32 }, 33 addTargetElementCore: function(element, rootElement, visibilityChangedHandler) { 34 this.initializeObserver(rootElement); 35 if(!this.isAlreadyObserved(element)) { 36 var observer = this.rootElementToObserverMap.get(rootElement); 37 if(observer) { 38 observer.observe(element); 39 this.setObservedMarker(element); 40 this.setElementVisibilityChangedHandler(element, visibilityChangedHandler, observer); 41 if(this.clearInvalidElementsInterval === null) { 42 this.clearInvalidElementsInterval = setInterval(this.removeDeletedElements.bind(this), this.clearInvalidElementsPeriod); 43 } 44 } 45 } 46 }, 47 visibilityChanged: function(entries, observer) { 48 entries.forEach(function (entry) { 49 if(ASPx.IsExistsElement(entry.target)){ 50 var element = this.elementToHandlerMap.get(observer); 51 if(element) { 52 var handler = element.get(entry.target); 53 if(handler) 54 handler(entry.isIntersecting); 55 } 56 } 57 }.bind(this)); 58 }, 59 removeDeletedElements: function() { 60 this.elementToHandlerMap.forEach(function(elements, observer) { 61 elements.forEach(function(handler, element) { 62 if(!ASPx.IsExistsElement(element)) { 63 elements.delete(element); 64 } 65 }.bind(this)); 66 if(elements.size === 0) { 67 this.elementToHandlerMap.delete(observer); 68 } 69 }.bind(this)); 70 if(this.elementToHandlerMap.size === 0) { 71 clearInterval(this.clearInvalidElementsInterval); 72 this.clearInvalidElementsInterval = null; 73 } 74 }, 75 setElementVisibilityChangedHandler: function(element, visibilityChangedHandler, observer) { 76 if(!this.elementToHandlerMap.get(observer)) 77 this.elementToHandlerMap.set(observer, this.createMap()); 78 var el = this.elementToHandlerMap.get(observer); 79 if(el) 80 el.set(element, visibilityChangedHandler); 81 }, 82 isAlreadyObserved: function(element) { 83 return !!element.dxObserved; 84 }, 85 setObservedMarker: function(element) { 86 element.dxObserved = true; 87 }, 88 reset: function() { 89 this.rootElementToObserverMap.forEach(function(observer, rootElement) { 90 observer.disconnect(); 91 }.bind(this)); 92 this.rootElementToObserverMap = this.createMap(); 93 this.elementToHandlerMap = this.createMap(); 94 this.clearInvalidElementsInterval = null; 95 this.clearInvalidElementsPeriod = 5000; 96 } 97 }); 98 IntersectionObserversManagerForOldBrowsers = ASPx.CreateClass(null, { 99 SubscribeElemensVisibilityChangeInBrowserWindow: function() { } 100 }); 101 ASPx.IntersectionObserversManager = ASPx.IntersectionObserversManager || ((typeof(IntersectionObserver) !== "undefined") ? new IntersectionObserversManager() : new IntersectionObserversManagerForOldBrowsers()); 102} 103)(ASPx); 104
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.