1/*! 2 * Stickyfill -- `position: sticky` polyfill 3 * v. 1.1.4 | https://github.com/wilddeer/stickyfill 4 * Copyright Oleg Korsunsky | http://wd.dizaina.net/ 5 * 6 * MIT License 7 */ 8(function(doc,win){var watchArray=[],scroll,initialized=!1,html=doc.documentElement,noop=function(){},checkTimer,hiddenPropertyName='hidden',visibilityChangeEventName='visibilitychange';if(doc.webkitHidden!==undefined){hiddenPropertyName='webkitHidden';visibilityChangeEventName='webkitvisibilitychange'} 9if(!win.getComputedStyle){seppuku()} 10var prefixes=['','-webkit-','-moz-','-ms-'],block=document.createElement('div');for(var i=prefixes.length-1;i>=0;i--){try{block.style.position=prefixes[i]+'sticky'}catch(e){} 11if(block.style.position!=''){seppuku()}} 12updateScrollPos();function seppuku(){init=add=rebuild=pause=stop=kill=noop} 13function mergeObjects(targetObj,sourceObject){for(var key in sourceObject){if(sourceObject.hasOwnProperty(key)){targetObj[key]=sourceObject[key]}}} 14function parseNumeric(val){return parseFloat(val)||0} 15function updateScrollPos(){scroll={top:win.pageYOffset,left:win.pageXOffset}} 16function onScroll(){if(win.pageXOffset!=scroll.left){updateScrollPos();rebuild();return} 17if(win.pageYOffset!=scroll.top){updateScrollPos();recalcAllPos()}} 18function onWheel(event){setTimeout(function(){if(win.pageYOffset!=scroll.top){scroll.top=win.pageYOffset;recalcAllPos()}},0)} 19function recalcAllPos(){for(var i=watchArray.length-1;i>=0;i--){recalcElementPos(watchArray[i])}} 20function recalcElementPos(el){if(!el.inited)return;var currentMode=(scroll.top<=el.limit.start?0:scroll.top>=el.limit.end?2:1);if(el.mode!=currentMode){switchElementMode(el,currentMode)}} 21function fastCheck(){for(var i=watchArray.length-1;i>=0;i--){if(!watchArray[i].inited)continue;var deltaTop=Math.abs(getDocOffsetTop(watchArray[i].clone)-watchArray[i].docOffsetTop),deltaHeight=Math.abs(watchArray[i].parent.node.offsetHeight-watchArray[i].parent.height);if(deltaTop>=2||deltaHeight>=2)return!1} 22return!0} 23function initElement(el){if(isNaN(parseFloat(el.computed.top))||el.isCell||el.computed.display=='none')return;el.inited=!0;if(!el.clone)clone(el);if(el.parent.computed.position!='absolute'&&el.parent.computed.position!='relative')el.parent.node.style.position='relative';recalcElementPos(el);el.parent.height=el.parent.node.offsetHeight;el.docOffsetTop=getDocOffsetTop(el.clone)} 24function deinitElement(el){var deinitParent=!0;el.clone&&killClone(el);mergeObjects(el.node.style,el.css);for(var i=watchArray.length-1;i>=0;i--){if(watchArray[i].node!==el.node&&watchArray[i].parent.node===el.parent.node){deinitParent=!1;break}};if(deinitParent)el.parent.node.style.position=el.parent.css.position;el.mode=-1} 25function initAll(){for(var i=watchArray.length-1;i>=0;i--){initElement(watchArray[i])}} 26function deinitAll(){for(var i=watchArray.length-1;i>=0;i--){deinitElement(watchArray[i])}} 27function switchElementMode(el,mode){var nodeStyle=el.node.style;switch(mode){case 0:nodeStyle.position='absolute';nodeStyle.left=el.offset.left+'px';nodeStyle.right=el.offset.right+'px';nodeStyle.top=el.offset.top+'px';nodeStyle.bottom='auto';nodeStyle.width='auto';nodeStyle.marginLeft=0;nodeStyle.marginRight=0;nodeStyle.marginTop=0;break;case 1:nodeStyle.position='fixed';nodeStyle.left=el.box.left+'px';nodeStyle.right=el.box.right+'px';nodeStyle.top=el.css.top;nodeStyle.bottom='auto';nodeStyle.width='auto';nodeStyle.marginLeft=0;nodeStyle.marginRight=0;nodeStyle.marginTop=0;break;case 2:nodeStyle.position='absolute';nodeStyle.left=el.offset.left+'px';nodeStyle.right=el.offset.right+'px';nodeStyle.top='auto';nodeStyle.bottom=0;nodeStyle.width='auto';nodeStyle.marginLeft=0;nodeStyle.marginRight=0;break} 28el.mode=mode} 29function clone(el){el.clone=document.createElement('div');var refElement=el.node.nextSibling||el.node,cloneStyle=el.clone.style;cloneStyle.height=el.height+'px';cloneStyle.width=el.width+'px';cloneStyle.marginTop=el.computed.marginTop;cloneStyle.marginBottom=el.computed.marginBottom;cloneStyle.marginLeft=el.computed.marginLeft;cloneStyle.marginRight=el.computed.marginRight;cloneStyle.padding=cloneStyle.border=cloneStyle.borderSpacing=0;cloneStyle.fontSize='1em';cloneStyle.position='static';cloneStyle.cssFloat=el.computed.cssFloat;el.node.parentNode.insertBefore(el.clone,refElement)} 30function killClone(el){el.clone.parentNode.removeChild(el.clone);el.clone=undefined}
31function getElementParams(node){var computedStyle=getComputedStyle(node),parentNode=node.parentNode,parentComputedStyle=getComputedStyle(parentNode),cachedPosition=node.style.position;node.style.position='relative';var computed={top:computedStyle.top,marginTop:computedStyle.marginTop,marginBottom:computedStyle.marginBottom,marginLeft:computedStyle.marginLeft,marginRight:computedStyle.marginRight,cssFloat:computedStyle.cssFloat,display:computedStyle.display},numeric={top:parseNumeric(computedStyle.top),marginBottom:parseNumeric(computedStyle.marginBottom),paddingLeft:parseNumeric(computedStyle.paddingLeft),paddingRight:parseNumeric(computedStyle.paddingRight),borderLeftWidth:parseNumeric(computedStyle.borderLeftWidth),borderRightWidth:parseNumeric(computedStyle.borderRightWidth)};node.style.position=cachedPosition;var css={position:node.style.position,top:node.style.top,bottom:node.style.bottom,left:node.style.left,right:node.style.right,width:node.style.width,marginTop:node.style.marginTop,marginLeft:node.style.marginLeft,marginRight:node.style.marginRight},nodeOffset=getElementOffset(node),parentOffset=getElementOffset(parentNode),parent={node:parentNode,css:{position:parentNode.style.position},computed:{position:parentComputedStyle.position},numeric:{borderLeftWidth:parseNumeric(parentComputedStyle.borderLeftWidth),borderRightWidth:parseNumeric(parentComputedStyle.borderRightWidth),borderTopWidth:parseNumeric(parentComputedStyle.borderTopWidth),borderBottomWidth:parseNumeric(parentComputedStyle.borderBottomWidth)}},el={node:node,box:{left:nodeOffset.win.left,right:html.clientWidth-nodeOffset.win.right},offset:{top:nodeOffset.win.top-parentOffset.win.top-parent.numeric.borderTopWidth,left:nodeOffset.win.left-parentOffset.win.left-parent.numeric.borderLeftWidth,right:-nodeOffset.win.right+parentOffset.win.right-parent.numeric.borderRightWidth},css:css,isCell:computedStyle.display=='table-cell',computed:computed,numeric:numeric,width:nodeOffset.win.right-nodeOffset.win.left,height:nodeOffset.win.bottom-nodeOffset.win.top,mode:-1,inited:!1,parent:parent,limit:{start:nodeOffset.doc.top-numeric.top,end:parentOffset.doc.top+parentNode.offsetHeight-parent.numeric.borderBottomWidth-node.offsetHeight-numeric.top-numeric.marginBottom}};return el} 32function getDocOffsetTop(node){var docOffsetTop=0;while(node){docOffsetTop+=node.offsetTop;node=node.offsetParent} 33return docOffsetTop} 34function getElementOffset(node){var box=node.getBoundingClientRect();return{doc:{top:box.top+win.pageYOffset,left:box.left+win.pageXOffset},win:box}} 35function startFastCheckTimer(){checkTimer=setInterval(function(){!fastCheck()&&rebuild()},500)} 36function stopFastCheckTimer(){clearInterval(checkTimer)} 37function handlePageVisibilityChange(){if(!initialized)return;if(document[hiddenPropertyName]){stopFastCheckTimer()}else{startFastCheckTimer()}} 38function init(){if(initialized)return;updateScrollPos();initAll();win.addEventListener('scroll',onScroll);win.addEventListener('wheel',onWheel);win.addEventListener('resize',rebuild);win.addEventListener('orientationchange',rebuild);doc.addEventListener(visibilityChangeEventName,handlePageVisibilityChange);startFastCheckTimer();initialized=!0} 39function rebuild(){if(!initialized)return;deinitAll();for(var i=watchArray.length-1;i>=0;i--){watchArray[i]=getElementParams(watchArray[i].node)} 40initAll()} 41function pause(){win.removeEventListener('scroll',onScroll);win.removeEventListener('wheel',onWheel);win.removeEventListener('resize',rebuild);win.removeEventListener('orientationchange',rebuild);doc.removeEventListener(visibilityChangeEventName,handlePageVisibilityChange);stopFastCheckTimer();initialized=!1} 42function stop(){pause();deinitAll()} 43function kill(){stop();while(watchArray.length){watchArray.pop()}} 44function add(node){for(var i=watchArray.length-1;i>=0;i--){if(watchArray[i].node===node)return};var el=getElementParams(node);watchArray.push(el);if(!initialized){init()}else{initElement(el)}} 45function remove(node){for(var i=watchArray.length-1;i>=0;i--){if(watchArray[i].node===node){deinitElement(watchArray[i]);watchArray.splice(i,1)}}} 46win.Stickyfill={stickies:watchArray,add:add,remove:remove,init:init,rebuild:rebuild,pause:pause,stop:stop,kill:kill}})(document,window);if(window.jQuery){(function($){$.fn.Stickyfill=function(options){this.each(function(){Stickyfill.add(this)});return this}})(window.jQuery)}
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.