1'use strict'; 2(function (root, factory){ 3if(typeof define==="function"&&define.amd){ 4define(factory); 5}else if(typeof exports==="object"){ 6module.exports=factory(); 7}else{ 8root.ResizeSensor=factory(); 9}}(typeof window!=='undefined' ? window:this, function (){ 10if(typeof window==="undefined"){ 11return null; 12} 13var requestAnimationFrame=window.requestAnimationFrame || 14window.mozRequestAnimationFrame || 15window.webkitRequestAnimationFrame || 16function (fn){ 17return window.setTimeout(fn, 20); 18}; 19function forEachElement(elements, callback){ 20var elementsType=Object.prototype.toString.call(elements); 21var isCollectionTyped=('[object Array]'===elementsType 22|| ('[object NodeList]'===elementsType) 23|| ('[object HTMLCollection]'===elementsType) 24|| ('[object Object]'===elementsType) 25|| ('undefined'!==typeof jQuery&&elements instanceof jQuery) 26|| ('undefined'!==typeof Elements&&elements instanceof Elements) 27); 28var i=0, j=elements.length; 29if(isCollectionTyped){ 30for (; i < j; i++){ 31callback(elements[i]); 32}}else{ 33callback(elements); 34}} 35function getElementSize(element){ 36if(!element.getBoundingClientRect){ 37return { 38width: element.offsetWidth, 39height: element.offsetHeight 40}} 41var rect=element.getBoundingClientRect(); 42return { 43width: Math.round(rect.width), 44height: Math.round(rect.height) 45}} 46var ResizeSensor=function(element, callback){ 47function EventQueue(){ 48var q=[]; 49this.add=function(ev){ 50q.push(ev); 51}; 52var i, j; 53this.call=function(){ 54for (i=0, j=q.length; i < j; i++){ 55q[i].call(); 56}}; 57this.remove=function(ev){ 58var newQueue=[]; 59for(i=0, j=q.length; i < j; i++){ 60if(q[i]!==ev) newQueue.push(q[i]); 61} 62q=newQueue; 63}; 64this.length=function(){ 65return q.length; 66}} 67function attachResizeEvent(element, resized){ 68if(!element) return; 69if(element.resizedAttached){ 70element.resizedAttached.add(resized); 71return; 72} 73element.resizedAttached=new EventQueue(); 74element.resizedAttached.add(resized); 75element.resizeSensor=document.createElement('div'); 76element.resizeSensor.dir='ltr'; 77element.resizeSensor.className='resize-sensor'; 78var style='position: absolute; left: -10px; top: -10px; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;'; 79var styleChild='position: absolute; left: 0; top: 0; transition: 0s;'; 80element.resizeSensor.style.cssText=style; 81element.resizeSensor.innerHTML = 82'<div class="resize-sensor-expand" style="' + style + '">' + 83'<div style="' + styleChild + '"></div>' + 84'</div>' + 85'<div class="resize-sensor-shrink" style="' + style + '">' + 86'<div style="' + styleChild + ' width: 200%; height: 200%"></div>' + 87'</div>'; 88element.appendChild(element.resizeSensor); 89var position=window.getComputedStyle(element).getPropertyValue('position'); 90if('absolute'!==position&&'relative'!==position&&'fixed'!==position){ 91element.style.position='relative'; 92} 93var expand=element.resizeSensor.childNodes[0]; 94var expandChild=expand.childNodes[0]; 95var shrink=element.resizeSensor.childNodes[1]; 96var dirty, rafId, newWidth, newHeight; 97var size=getElementSize(element); 98var lastWidth=size.width; 99var lastHeight=size.height; 100var reset=function(){ 101var invisible=element.offsetWidth===0&&element.offsetHeight===0; 102if(invisible){ 103var saveDisplay=element.style.display; 104element.style.display='block'; 105} 106expandChild.style.width='100000px'; 107expandChild.style.height='100000px'; 108expand.scrollLeft=100000; 109expand.scrollTop=100000; 110shrink.scrollLeft=100000; 111shrink.scrollTop=100000; 112if(invisible){ 113element.style.display=saveDisplay; 114}}; 115element.resizeSensor.resetSensor=reset; 116var onResized=function(){ 117rafId=0; 118if(!dirty) return; 119lastWidth=newWidth; 120lastHeight=newHeight; 121if(element.resizedAttached){ 122element.resizedAttached.call(); 123}}; 124var onScroll=function(){ 125var size=getElementSize(element); 126var newWidth=size.width; 127var newHeight=size.height; 128dirty=newWidth!=lastWidth||newHeight!=lastHeight; 129if(dirty&&!rafId){ 130rafId=requestAnimationFrame(onResized); 131} 132reset(); 133}; 134var addEvent=function(el, name, cb){ 135if(el.attachEvent){ 136el.attachEvent('on' + name, cb); 137}else{ 138el.addEventListener(name, cb); 139}}; 140addEvent(expand, 'scroll', onScroll); 141addEvent(shrink, 'scroll', onScroll); 142requestAnimationFrame(reset); 143} 144forEachElement(element, function(elem){ 145attachResizeEvent(elem, callback); 146}); 147this.detach=function(ev){ 148ResizeSensor.detach(element, ev); 149}; 150this.reset=function(){ 151element.resizeSensor.resetSensor(); 152};}; 153ResizeSensor.reset=function(element, ev){ 154forEachElement(element, function(elem){ 155elem.resizeSensor.resetSensor(); 156}); 157}; 158ResizeSensor.detach=function(element, ev){ 159forEachElement(element, function(elem){ 160if(!elem) return;
161if(elem.resizedAttached&&typeof ev==="function"){ 162elem.resizedAttached.remove(ev); 163if(elem.resizedAttached.length()) return; 164} 165if(elem.resizeSensor){ 166if(elem.contains(elem.resizeSensor)){ 167elem.removeChild(elem.resizeSensor); 168} 169delete elem.resizeSensor; 170delete elem.resizedAttached; 171}}); 172}; 173return ResizeSensor; 174}));
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.