{"version":3,"file":"detect-element-resize.js","sources":["detect-element-resize.js"],"sourcesContent":["/**\r\n* Detect Element Resize\r\n*\r\n* https://github.com/sdecima/javascript-detect-element-resize\r\n* Sebastian Decima\r\n*\r\n* version: 0.5.3\r\n**/\r\n\r\n(function () {\r\n\tvar attachEvent = document.attachEvent,\r\n\t\tstylesCreated = false;\r\n\r\n\tif (!attachEvent) {\r\n\t\tvar requestFrame = (function(){\r\n\t\t\tvar raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame ||\r\n\t\t\t\t\t\t\t\tfunction(fn){ return window.setTimeout(fn, 20); };\r\n\t\t\treturn function(fn){ return raf(fn); };\r\n\t\t})();\r\n\r\n\t\tvar cancelFrame = (function(){\r\n\t\t\tvar cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame ||\r\n\t\t\t\t\t\t\t\t window.clearTimeout;\r\n\t\t return function(id){ return cancel(id); };\r\n\t\t})();\r\n\r\n\t\tfunction resetTriggers(element){\r\n\t\t\tvar triggers = element.__resizeTriggers__,\r\n\t\t\t\texpand = triggers.firstElementChild,\r\n\t\t\t\tcontract = triggers.lastElementChild,\r\n\t\t\t\texpandChild = expand.firstElementChild;\r\n\t\t\tcontract.scrollLeft = contract.scrollWidth;\r\n\t\t\tcontract.scrollTop = contract.scrollHeight;\r\n\t\t\texpandChild.style.width = expand.offsetWidth + 1 + 'px';\r\n\t\t\texpandChild.style.height = expand.offsetHeight + 1 + 'px';\r\n\t\t\texpand.scrollLeft = expand.scrollWidth;\r\n\t\t\texpand.scrollTop = expand.scrollHeight;\r\n\t\t};\r\n\r\n\t\tfunction checkTriggers(element){\r\n\t\t\treturn element.offsetWidth != element.__resizeLast__.width ||\r\n\t\t\t\t\t\t element.offsetHeight != element.__resizeLast__.height;\r\n\t\t}\r\n\r\n\t\tfunction scrollListener(e){\r\n\t\t\tvar element = this;\r\n\t\t\tresetTriggers(this);\r\n\t\t\tif (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\r\n\t\t\tthis.__resizeRAF__ = requestFrame(function(){\r\n\t\t\t\tif (checkTriggers(element)) {\r\n\t\t\t\t\telement.__resizeLast__.width = element.offsetWidth;\r\n\t\t\t\t\telement.__resizeLast__.height = element.offsetHeight;\r\n\t\t\t\t\telement.__resizeListeners__.forEach(function(fn){\r\n\t\t\t\t\t\tfn.call(element, e);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t/* Detect CSS Animations support to detect element display/re-attach */\r\n\t\tvar animation = false,\r\n\t\t\tanimationstring = 'animation',\r\n\t\t\tkeyframeprefix = '',\r\n\t\t\tanimationstartevent = 'animationstart',\r\n\t\t\tdomPrefixes = 'Webkit Moz O ms'.split(' '),\r\n\t\t\tstartEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\r\n\t\t\tpfx = '';\r\n\t\t{\r\n\t\t\tvar elm = document.createElement('fakeelement');\r\n\t\t\tif( elm.style.animationName !== undefined ) { animation = true; }\r\n\r\n\t\t\tif( animation === false ) {\r\n\t\t\t\tfor( var i = 0; i < domPrefixes.length; i++ ) {\r\n\t\t\t\t\tif( elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined ) {\r\n\t\t\t\t\t\tpfx = domPrefixes[ i ];\r\n\t\t\t\t\t\tanimationstring = pfx + 'Animation';\r\n\t\t\t\t\t\tkeyframeprefix = '-' + pfx.toLowerCase() + '-';\r\n\t\t\t\t\t\tanimationstartevent = startEvents[ i ];\r\n\t\t\t\t\t\tanimation = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar animationName = 'resizeanim';\r\n\t\tvar animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\r\n\t\tvar animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\r\n\t}\r\n\r\n\tfunction createStyles() {\r\n\t\tif (!stylesCreated) {\r\n\t\t\t//opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\r\n\t\t\tvar css = (animationKeyframes ? animationKeyframes : '') +\r\n\t\t\t\t\t'.resize-triggers { ' + (animationStyle ? animationStyle : '') + 'visibility: hidden; opacity: 0; } ' +\r\n\t\t\t\t\t'.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \\\" \\\"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\r\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0],\r\n\t\t\t\tstyle = document.createElement('style');\r\n\r\n\t\t\tstyle.type = 'text/css';\r\n\t\t\tif (style.styleSheet) {\r\n\t\t\t\tstyle.styleSheet.cssText = css;\r\n\t\t\t} else {\r\n\t\t\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\t\t}\r\n\r\n\t\t\thead.appendChild(style);\r\n\t\t\tstylesCreated = true;\r\n\t\t}\r\n\t}\r\n\r\n\twindow.addResizeListener = function(element, fn){\r\n\t\tif (attachEvent) element.attachEvent('onresize', fn);\r\n\t\telse {\r\n\t\t\tif (!element.__resizeTriggers__) {\r\n\t\t\t\tif (getComputedStyle(element).position == 'static') element.style.position = 'relative';\r\n\t\t\t\tcreateStyles();\r\n\t\t\t\telement.__resizeLast__ = {};\r\n\t\t\t\telement.__resizeListeners__ = [];\r\n\t\t\t\t(element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers';\r\n\t\t\t\telement.__resizeTriggers__.innerHTML = '
' +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'';\r\n\t\t\t\telement.appendChild(element.__resizeTriggers__);\r\n\t\t\t\tresetTriggers(element);\r\n\t\t\t\telement.addEventListener('scroll', scrollListener, true);\r\n\r\n\t\t\t\t/* Listen for a css animation to detect element display/re-attach */\r\n\t\t\t\tanimationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function(e) {\r\n\t\t\t\t\tif(e.animationName == animationName)\r\n\t\t\t\t\t\tresetTriggers(element);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telement.__resizeListeners__.push(fn);\r\n\t\t}\r\n\t};\r\n\r\n\twindow.removeResizeListener = function(element, fn){\r\n\t\tif (attachEvent) element.detachEvent('onresize', fn);\r\n\t\telse {\r\n\t\t\telement.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\r\n\t\t\tif (!element.__resizeListeners__.length) {\r\n\t\t\t\t\telement.removeEventListener('scroll', scrollListener);\r\n\t\t\t\t\telement.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n})();\r\n"],"names":["cancel","raf","attachEvent","document","stylesCreated","window","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","fn","setTimeout","requestFrame","cancelFrame","cancelAnimationFrame","mozCancelAnimationFrame","webkitCancelAnimationFrame","clearTimeout","id","resetTriggers","element","triggers","__resizeTriggers__","expand","firstElementChild","contract","lastElementChild","expandChild","scrollLeft","scrollWidth","scrollTop","scrollHeight","style","width","offsetWidth","height","offsetHeight","scrollListener","e","this","__resizeRAF__","__resizeLast__","__resizeListeners__","forEach","call","animation","keyframeprefix","animationstartevent","domPrefixes","split","startEvents","pfx","elm","createElement","undefined","animationName","i","length","toLowerCase","animationKeyframes","animationStyle","addResizeListener","css","head","getComputedStyle","position","getElementsByTagName","type","styleSheet","cssText","appendChild","createTextNode","className","innerHTML","addEventListener","push","removeResizeListener","detachEvent","splice","indexOf","removeEventListener","removeChild"],"mappings":"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"}