{"version":3,"sources":["iframeResizer.js"],"names":["undefined","addEventListener","obj","evt","func","window","attachEvent","removeEventListener","el","detachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","getMyID","iframeId","retStr","top","self","parentIFrame","getId","formatLogHeader","msgId","isLogEnabled","settings","logEnabled","msg","output","info","warn","type","enabled","console","iFrameListener","event","resizeIFrame","resize","setSize","messageData","setPagePosition","callback","ensureInRange","syncResize","processMsg","data","substr","msgIdLen","split","iframe","id","height","width","Dimension","max","Number","min","dimension","toLowerCase","size","isMessageFromIFrame","checkAllowedOrigin","checkList","i","retCode","checkOrigin","origin","checkSingle","remoteHost","constructor","Array","Error","isMessageForUs","isMessageFromMetaParent","true","false","getMsgBody","offset","indexOf","msgHeaderLen","forwardMsgFromIFrame","msgBody","message","JSON","parse","getPageInfo","bodyPosition","document","body","getBoundingClientRect","iFramePosition","stringify","iframeHeight","iframeWidth","clientHeight","Math","documentElement","innerHeight","clientWidth","innerWidth","offsetTop","parseInt","offsetLeft","left","scrollTop","pageYOffset","scrollLeft","pageXOffset","sendPageInfoToIframe","debouncedTrigger","trigger","debounceFrameEvents","startPageInfoMonitor","setListener","sendPageInfo","stop","forEach","start","stopPageInfo","stopPageInfoMonitor","checkIFrameExists","retBool","getElementPosition","target","getPagePosition","floor","pagePosition","y","scrollRequestFromChild","addOffset","reposition","newPosition","scrollTo","calcOffset","scrollParent","unsetPagePosition","findTarget","location","jumpToTarget","jumpPosition","hash","jumpToParent","moveToAnchor","hashData","decodeURIComponent","getElementById","getElementsByName","funcName","val","chkCallback","actionMsg","firstRun","closeRequestCallback","closeIFrame","resetIFrame","hasSettings","iFrameReadyMsgReceived","createOutgoingMsg","logId","loaded","retVal","TypeError","removeIframeListeners","parentNode","removeChild","e","reset","setDimension","style","chkZero","hiddenCheckEnabled","fixHiddenIFrames","processDimension","sizeHeight","sizeWidth","doNotSync","calleeMsg","noResponseWarning","postMessageToIFrame","targetOrigin","contentWindow","postMessage","iFrameNotFound","chkAndSend","warnOnNoResponse","warning","errorShown","warningTimeout","msgTimeout","setTimeout","bodyMarginV1","interval","enablePublicMethods","autoResize","bodyMargin","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","inPageLinks","resizeFrom","widthCalculationMethod","setupIFrame","options","setLimits","addStyle","Infinity","chkMinMax","newId","defaults","count","ensureHasId","src","setScrolling","scrolling","overflow","setupBodyMarginValues","checkReset","resetRequertMethod","resetRequiredMethods","setupIFrameObject","Function","prototype","bind","iFrameResizer","close","removeListeners","anchor","sendMessage","init","iFrameLoaded","checkOptions","copyOptions","option","hasOwnProperty","getTargetOrigin","processOptions","slice","join","beenHere","debouce","fn","time","timer","frameId","frameTimer","checkIFrames","checkIFrame","settingId","chkDimension","isVisible","offsetParent","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","MutationObserver","observe","WebKitMutationObserver","resizeIFrames","sendTriggerMsg","tabVisible","visibilityState","eventName","isIFrameResizeEnabled","setupEventListeners","factory","element","chkType","tagName","toUpperCase","iFrames","push","warnDeprecatedOptions","call","querySelectorAll","createJQueryPublicMethod","$","iFrameResize","index","this","filter","each","end","msgHeader","scroll","bodyScroll","documentElementScroll","maxHeight","maxWidth","minHeight","minWidth","closedCallback","initCallback","messageCallback","resizedCallback","scrollCallback","jQuery","define","amd","module","exports"],"mappings":"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","file":"iframeResizer.min.js","sourcesContent":["/*\n * File: iframeResizer.js\n * Desc: Force iframes to size to content.\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Reed Dadoune - reed@dadoune.com\n */\n\n(function(undefined) {\n 'use strict';\n\n if (typeof window === 'undefined') return; // don't run for server side render\n\n var count = 0,\n logEnabled = false,\n hiddenCheckEnabled = false,\n msgHeader = 'message',\n msgHeaderLen = msgHeader.length,\n msgId = '[iFrameSizer]', //Must match iframe msg ID\n msgIdLen = msgId.length,\n pagePosition = null,\n requestAnimationFrame = window.requestAnimationFrame,\n resetRequiredMethods = {\n max: 1,\n scroll: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n },\n settings = {},\n timer = null,\n logId = 'Host Page',\n defaults = {\n autoResize: true,\n bodyBackground: null,\n bodyMargin: null,\n bodyMarginV1: 8,\n bodyPadding: null,\n checkOrigin: true,\n inPageLinks: false,\n enablePublicMethods: true,\n heightCalculationMethod: 'bodyOffset',\n id: 'iFrameResizer',\n interval: 32,\n log: false,\n maxHeight: Infinity,\n maxWidth: Infinity,\n minHeight: 0,\n minWidth: 0,\n resizeFrom: 'parent',\n scrolling: false,\n sizeHeight: true,\n sizeWidth: false,\n warningTimeout: 5000,\n tolerance: 0,\n widthCalculationMethod: 'scroll',\n closedCallback: function() {},\n initCallback: function() {},\n messageCallback: function() {\n warn('MessageCallback function not defined');\n },\n resizedCallback: function() {},\n scrollCallback: function() {\n return true;\n }\n };\n\n function addEventListener(obj, evt, func) {\n /* istanbul ignore else */ // Not testable in PhantonJS\n if ('addEventListener' in window) {\n obj.addEventListener(evt, func, false);\n } else if ('attachEvent' in window) {\n //IE\n obj.attachEvent('on' + evt, func);\n }\n }\n\n function removeEventListener(el, evt, func) {\n /* istanbul ignore else */ // Not testable in phantonJS\n if ('removeEventListener' in window) {\n el.removeEventListener(evt, func, false);\n } else if ('detachEvent' in window) {\n //IE\n el.detachEvent('on' + evt, func);\n }\n }\n\n function setupRequestAnimationFrame() {\n var vendors = ['moz', 'webkit', 'o', 'ms'],\n x;\n\n // Remove vendor prefixing if prefixed and break early if not\n for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\n requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n }\n\n if (!requestAnimationFrame) {\n log('setup', 'RequestAnimationFrame not supported');\n }\n }\n\n function getMyID(iframeId) {\n var retStr = 'Host page: ' + iframeId;\n\n if (window.top !== window.self) {\n if (window.parentIFrame && window.parentIFrame.getId) {\n retStr = window.parentIFrame.getId() + ': ' + iframeId;\n } else {\n retStr = 'Nested host page: ' + iframeId;\n }\n }\n\n return retStr;\n }\n\n function formatLogHeader(iframeId) {\n return msgId + '[' + getMyID(iframeId) + ']';\n }\n\n function isLogEnabled(iframeId) {\n return settings[iframeId] ? settings[iframeId].log : logEnabled;\n }\n\n function log(iframeId, msg) {\n output('log', iframeId, msg, isLogEnabled(iframeId));\n }\n\n function info(iframeId, msg) {\n output('info', iframeId, msg, isLogEnabled(iframeId));\n }\n\n function warn(iframeId, msg) {\n output('warn', iframeId, msg, true);\n }\n\n function output(type, iframeId, msg, enabled) {\n if (true === enabled && 'object' === typeof window.console) {\n console[type](formatLogHeader(iframeId), msg);\n }\n }\n\n function iFrameListener(event) {\n function resizeIFrame() {\n function resize() {\n setSize(messageData);\n setPagePosition(iframeId);\n callback('resizedCallback', messageData);\n }\n\n ensureInRange('Height');\n ensureInRange('Width');\n\n syncResize(resize, messageData, 'init');\n }\n\n function processMsg() {\n var data = msg.substr(msgIdLen).split(':');\n\n return {\n iframe: settings[data[0]] && settings[data[0]].iframe,\n id: data[0],\n height: data[1],\n width: data[2],\n type: data[3]\n };\n }\n\n function ensureInRange(Dimension) {\n var max = Number(settings[iframeId]['max' + Dimension]),\n min = Number(settings[iframeId]['min' + Dimension]),\n dimension = Dimension.toLowerCase(),\n size = Number(messageData[dimension]);\n\n log(\n iframeId,\n 'Checking ' + dimension + ' is in range ' + min + '-' + max\n );\n\n if (size < min) {\n size = min;\n log(iframeId, 'Set ' + dimension + ' to min value');\n }\n\n if (size > max) {\n size = max;\n log(iframeId, 'Set ' + dimension + ' to max value');\n }\n\n messageData[dimension] = '' + size;\n }\n\n function isMessageFromIFrame() {\n function checkAllowedOrigin() {\n function checkList() {\n var i = 0,\n retCode = false;\n\n log(\n iframeId,\n 'Checking connection is from allowed list of origins: ' +\n checkOrigin\n );\n\n for (; i < checkOrigin.length; i++) {\n if (checkOrigin[i] === origin) {\n retCode = true;\n break;\n }\n }\n return retCode;\n }\n\n function checkSingle() {\n var remoteHost = settings[iframeId] && settings[iframeId].remoteHost;\n log(iframeId, 'Checking connection is from: ' + remoteHost);\n return origin === remoteHost;\n }\n\n return checkOrigin.constructor === Array ? checkList() : checkSingle();\n }\n\n var origin = event.origin,\n checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin;\n\n if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) {\n throw new Error(\n 'Unexpected message received from: ' +\n origin +\n ' for ' +\n messageData.iframe.id +\n '. Message was: ' +\n event.data +\n '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\n );\n }\n\n return true;\n }\n\n function isMessageForUs() {\n return (\n msgId === ('' + msg).substr(0, msgIdLen) &&\n msg.substr(msgIdLen).split(':')[0] in settings\n ); //''+Protects against non-string msg\n }\n\n function isMessageFromMetaParent() {\n //Test if this message is from a parent above us. This is an ugly test, however, updating\n //the message format would break backwards compatibity.\n var retCode = messageData.type in { true: 1, false: 1, undefined: 1 };\n\n if (retCode) {\n log(iframeId, 'Ignoring init message from meta parent page');\n }\n\n return retCode;\n }\n\n function getMsgBody(offset) {\n return msg.substr(msg.indexOf(':') + msgHeaderLen + offset);\n }\n\n function forwardMsgFromIFrame(msgBody) {\n log(\n iframeId,\n 'MessageCallback passed: {iframe: ' +\n messageData.iframe.id +\n ', message: ' +\n msgBody +\n '}'\n );\n callback('messageCallback', {\n iframe: messageData.iframe,\n message: JSON.parse(msgBody)\n });\n log(iframeId, '--');\n }\n\n function getPageInfo() {\n var bodyPosition = document.body.getBoundingClientRect(),\n iFramePosition = messageData.iframe.getBoundingClientRect();\n\n return JSON.stringify({\n iframeHeight: iFramePosition.height,\n iframeWidth: iFramePosition.width,\n clientHeight: Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n ),\n clientWidth: Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n ),\n offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\n offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset\n });\n }\n\n function sendPageInfoToIframe(iframe, iframeId) {\n function debouncedTrigger() {\n trigger(\n 'Send Page Info',\n 'pageInfo:' + getPageInfo(),\n iframe,\n iframeId\n );\n }\n debounceFrameEvents(debouncedTrigger, 32, iframeId);\n }\n\n function startPageInfoMonitor() {\n function setListener(type, func) {\n function sendPageInfo() {\n if (settings[id]) {\n sendPageInfoToIframe(settings[id].iframe, id);\n } else {\n stop();\n }\n }\n\n ['scroll', 'resize'].forEach(function(evt) {\n log(id, type + evt + ' listener for sendPageInfo');\n func(window, evt, sendPageInfo);\n });\n }\n\n function stop() {\n setListener('Remove ', removeEventListener);\n }\n\n function start() {\n setListener('Add ', addEventListener);\n }\n\n var id = iframeId; //Create locally scoped copy of iFrame ID\n\n start();\n\n if (settings[id]) {\n settings[id].stopPageInfo = stop;\n }\n }\n\n function stopPageInfoMonitor() {\n if (settings[iframeId] && settings[iframeId].stopPageInfo) {\n settings[iframeId].stopPageInfo();\n delete settings[iframeId].stopPageInfo;\n }\n }\n\n function checkIFrameExists() {\n var retBool = true;\n\n if (null === messageData.iframe) {\n warn(iframeId, 'IFrame (' + messageData.id + ') not found');\n retBool = false;\n }\n return retBool;\n }\n\n function getElementPosition(target) {\n var iFramePosition = target.getBoundingClientRect();\n\n getPagePosition(iframeId);\n\n return {\n x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\n y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\n };\n }\n\n function scrollRequestFromChild(addOffset) {\n /* istanbul ignore next */ //Not testable in Karma\n function reposition() {\n pagePosition = newPosition;\n scrollTo();\n log(iframeId, '--');\n }\n\n function calcOffset() {\n return {\n x: Number(messageData.width) + offset.x,\n y: Number(messageData.height) + offset.y\n };\n }\n\n function scrollParent() {\n if (window.parentIFrame) {\n window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\n newPosition.x,\n newPosition.y\n );\n } else {\n warn(\n iframeId,\n 'Unable to scroll to requested position, window.parentIFrame not found'\n );\n }\n }\n\n var offset = addOffset\n ? getElementPosition(messageData.iframe)\n : { x: 0, y: 0 },\n newPosition = calcOffset();\n\n log(\n iframeId,\n 'Reposition requested from iFrame (offset x:' +\n offset.x +\n ' y:' +\n offset.y +\n ')'\n );\n\n if (window.top !== window.self) {\n scrollParent();\n } else {\n reposition();\n }\n }\n\n function scrollTo() {\n if (false !== callback('scrollCallback', pagePosition)) {\n setPagePosition(iframeId);\n } else {\n unsetPagePosition();\n }\n }\n\n function findTarget(location) {\n function jumpToTarget() {\n var jumpPosition = getElementPosition(target);\n\n log(\n iframeId,\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n );\n pagePosition = {\n x: jumpPosition.x,\n y: jumpPosition.y\n };\n\n scrollTo();\n log(iframeId, '--');\n }\n\n function jumpToParent() {\n if (window.parentIFrame) {\n window.parentIFrame.moveToAnchor(hash);\n } else {\n log(\n iframeId,\n 'In page link #' +\n hash +\n ' not found and window.parentIFrame not found'\n );\n }\n }\n\n var hash = location.split('#')[1] || '',\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0];\n\n if (target) {\n jumpToTarget();\n } else if (window.top !== window.self) {\n jumpToParent();\n } else {\n log(iframeId, 'In page link #' + hash + ' not found');\n }\n }\n\n function callback(funcName, val) {\n return chkCallback(iframeId, funcName, val);\n }\n\n function actionMsg() {\n if (settings[iframeId] && settings[iframeId].firstRun) firstRun();\n\n switch (messageData.type) {\n case 'close':\n if (settings[iframeId].closeRequestCallback)\n chkCallback(\n iframeId,\n 'closeRequestCallback',\n settings[iframeId].iframe\n );\n else closeIFrame(messageData.iframe);\n break;\n case 'message':\n forwardMsgFromIFrame(getMsgBody(6));\n break;\n case 'scrollTo':\n scrollRequestFromChild(false);\n break;\n case 'scrollToOffset':\n scrollRequestFromChild(true);\n break;\n case 'pageInfo':\n sendPageInfoToIframe(\n settings[iframeId] && settings[iframeId].iframe,\n iframeId\n );\n startPageInfoMonitor();\n break;\n case 'pageInfoStop':\n stopPageInfoMonitor();\n break;\n case 'inPageLink':\n findTarget(getMsgBody(9));\n break;\n case 'reset':\n resetIFrame(messageData);\n break;\n case 'init':\n resizeIFrame();\n callback('initCallback', messageData.iframe);\n break;\n default:\n resizeIFrame();\n }\n }\n\n function hasSettings(iframeId) {\n var retBool = true;\n\n if (!settings[iframeId]) {\n retBool = false;\n warn(\n messageData.type +\n ' No settings for ' +\n iframeId +\n '. Message was: ' +\n msg\n );\n }\n\n return retBool;\n }\n\n function iFrameReadyMsgReceived() {\n for (var iframeId in settings) {\n trigger(\n 'iFrame requested init',\n createOutgoingMsg(iframeId),\n document.getElementById(iframeId),\n iframeId\n );\n }\n }\n\n function firstRun() {\n if (settings[iframeId]) {\n settings[iframeId].firstRun = false;\n }\n }\n\n function clearWarningTimeout() {\n if (settings[iframeId]) {\n clearTimeout(settings[iframeId].msgTimeout);\n settings[iframeId].warningTimeout = 0;\n }\n }\n\n var msg = event.data,\n messageData = {},\n iframeId = null;\n\n if ('[iFrameResizerChild]Ready' === msg) {\n iFrameReadyMsgReceived();\n } else if (isMessageForUs()) {\n messageData = processMsg();\n iframeId = logId = messageData.id;\n if (settings[iframeId]) {\n settings[iframeId].loaded = true;\n }\n\n if (!isMessageFromMetaParent() && hasSettings(iframeId)) {\n log(iframeId, 'Received: ' + msg);\n\n if (checkIFrameExists() && isMessageFromIFrame()) {\n actionMsg();\n }\n }\n } else {\n info(iframeId, 'Ignored: ' + msg);\n }\n }\n\n function chkCallback(iframeId, funcName, val) {\n var func = null,\n retVal = null;\n\n if (settings[iframeId]) {\n func = settings[iframeId][funcName];\n\n if ('function' === typeof func) {\n retVal = func(val);\n } else {\n throw new TypeError(\n funcName + ' on iFrame[' + iframeId + '] is not a function'\n );\n }\n }\n\n return retVal;\n }\n\n function removeIframeListeners(iframe) {\n var iframeId = iframe.id;\n delete settings[iframeId];\n }\n\n function closeIFrame(iframe) {\n var iframeId = iframe.id;\n log(iframeId, 'Removing iFrame: ' + iframeId);\n\n try {\n // Catch race condition error with React\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n } catch (e) {}\n\n chkCallback(iframeId, 'closedCallback', iframeId);\n log(iframeId, '--');\n removeIframeListeners(iframe);\n }\n\n function getPagePosition(iframeId) {\n if (null === pagePosition) {\n pagePosition = {\n x:\n window.pageXOffset !== undefined\n ? window.pageXOffset\n : document.documentElement.scrollLeft,\n y:\n window.pageYOffset !== undefined\n ? window.pageYOffset\n : document.documentElement.scrollTop\n };\n log(\n iframeId,\n 'Get page position: ' + pagePosition.x + ',' + pagePosition.y\n );\n }\n }\n\n function setPagePosition(iframeId) {\n if (null !== pagePosition) {\n window.scrollTo(pagePosition.x, pagePosition.y);\n log(\n iframeId,\n 'Set page position: ' + pagePosition.x + ',' + pagePosition.y\n );\n unsetPagePosition();\n }\n }\n\n function unsetPagePosition() {\n pagePosition = null;\n }\n\n function resetIFrame(messageData) {\n function reset() {\n setSize(messageData);\n trigger('reset', 'reset', messageData.iframe, messageData.id);\n }\n\n log(\n messageData.id,\n 'Size reset requested by ' +\n ('init' === messageData.type ? 'host page' : 'iFrame')\n );\n getPagePosition(messageData.id);\n syncResize(reset, messageData, 'reset');\n }\n\n function setSize(messageData) {\n function setDimension(dimension) {\n if (!messageData.id) {\n log('undefined', 'messageData id not set');\n return;\n }\n messageData.iframe.style[dimension] = messageData[dimension] + 'px';\n log(\n messageData.id,\n 'IFrame (' +\n iframeId +\n ') ' +\n dimension +\n ' set to ' +\n messageData[dimension] +\n 'px'\n );\n }\n\n function chkZero(dimension) {\n //FireFox sets dimension of hidden iFrames to zero.\n //So if we detect that set up an event to check for\n //when iFrame becomes visible.\n\n /* istanbul ignore next */ //Not testable in PhantomJS\n if (!hiddenCheckEnabled && '0' === messageData[dimension]) {\n hiddenCheckEnabled = true;\n log(iframeId, 'Hidden iFrame detected, creating visibility listener');\n fixHiddenIFrames();\n }\n }\n\n function processDimension(dimension) {\n setDimension(dimension);\n chkZero(dimension);\n }\n\n var iframeId = messageData.iframe.id;\n\n if (settings[iframeId]) {\n if (settings[iframeId].sizeHeight) {\n processDimension('height');\n }\n if (settings[iframeId].sizeWidth) {\n processDimension('width');\n }\n }\n }\n\n function syncResize(func, messageData, doNotSync) {\n /* istanbul ignore if */ //Not testable in PhantomJS\n if (doNotSync !== messageData.type && requestAnimationFrame) {\n log(messageData.id, 'Requesting animation frame');\n requestAnimationFrame(func);\n } else {\n func();\n }\n }\n\n function trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\n function postMessageToIFrame() {\n var target = settings[id] && settings[id].targetOrigin;\n log(\n id,\n '[' +\n calleeMsg +\n '] Sending msg to iframe[' +\n id +\n '] (' +\n msg +\n ') targetOrigin: ' +\n target\n );\n iframe.contentWindow.postMessage(msgId + msg, target);\n }\n\n function iFrameNotFound() {\n warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found');\n }\n\n function chkAndSend() {\n if (\n iframe &&\n 'contentWindow' in iframe &&\n null !== iframe.contentWindow\n ) {\n //Null test for PhantomJS\n postMessageToIFrame();\n } else {\n iFrameNotFound();\n }\n }\n\n function warnOnNoResponse() {\n function warning() {\n if (settings[id] && !settings[id].loaded && !errorShown) {\n errorShown = true;\n warn(\n id,\n 'IFrame has not responded within ' +\n settings[id].warningTimeout / 1000 +\n ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.'\n );\n }\n }\n\n if (\n !!noResponseWarning &&\n settings[id] &&\n !!settings[id].warningTimeout\n ) {\n settings[id].msgTimeout = setTimeout(\n warning,\n settings[id].warningTimeout\n );\n }\n }\n\n var errorShown = false;\n\n id = id || iframe.id;\n\n if (settings[id]) {\n chkAndSend();\n warnOnNoResponse();\n }\n }\n\n function createOutgoingMsg(iframeId) {\n return (\n iframeId +\n ':' +\n settings[iframeId].bodyMarginV1 +\n ':' +\n settings[iframeId].sizeWidth +\n ':' +\n settings[iframeId].log +\n ':' +\n settings[iframeId].interval +\n ':' +\n settings[iframeId].enablePublicMethods +\n ':' +\n settings[iframeId].autoResize +\n ':' +\n settings[iframeId].bodyMargin +\n ':' +\n settings[iframeId].heightCalculationMethod +\n ':' +\n settings[iframeId].bodyBackground +\n ':' +\n settings[iframeId].bodyPadding +\n ':' +\n settings[iframeId].tolerance +\n ':' +\n settings[iframeId].inPageLinks +\n ':' +\n settings[iframeId].resizeFrom +\n ':' +\n settings[iframeId].widthCalculationMethod\n );\n }\n\n function setupIFrame(iframe, options) {\n function setLimits() {\n function addStyle(style) {\n if (\n Infinity !== settings[iframeId][style] &&\n 0 !== settings[iframeId][style]\n ) {\n iframe.style[style] = settings[iframeId][style] + 'px';\n log(\n iframeId,\n 'Set ' + style + ' = ' + settings[iframeId][style] + 'px'\n );\n }\n }\n\n function chkMinMax(dimension) {\n if (\n settings[iframeId]['min' + dimension] >\n settings[iframeId]['max' + dimension]\n ) {\n throw new Error(\n 'Value for min' +\n dimension +\n ' can not be greater than max' +\n dimension\n );\n }\n }\n\n chkMinMax('Height');\n chkMinMax('Width');\n\n addStyle('maxHeight');\n addStyle('minHeight');\n addStyle('maxWidth');\n addStyle('minWidth');\n }\n\n function newId() {\n var id = (options && options.id) || defaults.id + count++;\n if (null !== document.getElementById(id)) {\n id = id + count++;\n }\n return id;\n }\n\n function ensureHasId(iframeId) {\n logId = iframeId;\n if ('' === iframeId) {\n iframe.id = iframeId = newId();\n logEnabled = (options || {}).log;\n logId = iframeId;\n log(\n iframeId,\n 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')'\n );\n }\n\n return iframeId;\n }\n\n function setScrolling() {\n log(\n iframeId,\n 'IFrame scrolling ' +\n (settings[iframeId] && settings[iframeId].scrolling\n ? 'enabled'\n : 'disabled') +\n ' for ' +\n iframeId\n );\n iframe.style.overflow =\n false === (settings[iframeId] && settings[iframeId].scrolling)\n ? 'hidden'\n : 'auto';\n switch (settings[iframeId] && settings[iframeId].scrolling) {\n case 'omit':\n break;\n case true:\n iframe.scrolling = 'yes';\n break;\n case false:\n iframe.scrolling = 'no';\n break;\n default:\n iframe.scrolling = settings[iframeId]\n ? settings[iframeId].scrolling\n : 'no';\n }\n }\n\n //The V1 iFrame script expects an int, where as in V2 expects a CSS\n //string value such as '1px 3em', so if we have an int for V2, set V1=V2\n //and then convert V2 to a string PX value.\n function setupBodyMarginValues() {\n if (\n 'number' ===\n typeof (settings[iframeId] && settings[iframeId].bodyMargin) ||\n '0' === (settings[iframeId] && settings[iframeId].bodyMargin)\n ) {\n settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin;\n settings[iframeId].bodyMargin =\n '' + settings[iframeId].bodyMargin + 'px';\n }\n }\n\n function checkReset() {\n // Reduce scope of firstRun to function, because IE8's JS execution\n // context stack is borked and this value gets externally\n // changed midway through running this function!!!\n var firstRun = settings[iframeId] && settings[iframeId].firstRun,\n resetRequertMethod =\n settings[iframeId] &&\n settings[iframeId].heightCalculationMethod in resetRequiredMethods;\n\n if (!firstRun && resetRequertMethod) {\n resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' });\n }\n }\n\n function setupIFrameObject() {\n if (Function.prototype.bind && settings[iframeId]) {\n //Ignore unpolyfilled IE8.\n settings[iframeId].iframe.iFrameResizer = {\n close: closeIFrame.bind(null, settings[iframeId].iframe),\n\n removeListeners: removeIframeListeners.bind(\n null,\n settings[iframeId].iframe\n ),\n\n resize: trigger.bind(\n null,\n 'Window resize',\n 'resize',\n settings[iframeId].iframe\n ),\n\n moveToAnchor: function(anchor) {\n trigger(\n 'Move to anchor',\n 'moveToAnchor:' + anchor,\n settings[iframeId].iframe,\n iframeId\n );\n },\n\n sendMessage: function(message) {\n message = JSON.stringify(message);\n trigger(\n 'Send Message',\n 'message:' + message,\n settings[iframeId].iframe,\n iframeId\n );\n }\n };\n }\n }\n\n //We have to call trigger twice, as we can not be sure if all\n //iframes have completed loading when this code runs. The\n //event listener also catches the page changing in the iFrame.\n function init(msg) {\n function iFrameLoaded() {\n trigger('iFrame.onload', msg, iframe, undefined, true);\n checkReset();\n }\n\n addEventListener(iframe, 'load', iFrameLoaded);\n trigger('init', msg, iframe, undefined, true);\n }\n\n function checkOptions(options) {\n if ('object' !== typeof options) {\n throw new TypeError('Options is not an object');\n }\n }\n\n function copyOptions(options) {\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option)) {\n settings[iframeId][option] = options.hasOwnProperty(option)\n ? options[option]\n : defaults[option];\n }\n }\n }\n\n function getTargetOrigin(remoteHost) {\n return '' === remoteHost || 'file://' === remoteHost ? '*' : remoteHost;\n }\n\n function processOptions(options) {\n options = options || {};\n settings[iframeId] = {\n firstRun: true,\n iframe: iframe,\n remoteHost: iframe.src\n .split('/')\n .slice(0, 3)\n .join('/')\n };\n\n checkOptions(options);\n copyOptions(options);\n\n if (settings[iframeId]) {\n settings[iframeId].targetOrigin =\n true === settings[iframeId].checkOrigin\n ? getTargetOrigin(settings[iframeId].remoteHost)\n : '*';\n }\n }\n\n function beenHere() {\n return iframeId in settings && 'iFrameResizer' in iframe;\n }\n\n var iframeId = ensureHasId(iframe.id);\n\n if (!beenHere()) {\n processOptions(options);\n setScrolling();\n setLimits();\n setupBodyMarginValues();\n init(createOutgoingMsg(iframeId));\n setupIFrameObject();\n } else {\n warn(iframeId, 'Ignored iFrame, already setup.');\n }\n }\n\n function debouce(fn, time) {\n if (null === timer) {\n timer = setTimeout(function() {\n timer = null;\n fn();\n }, time);\n }\n }\n\n var frameTimer = {};\n function debounceFrameEvents(fn, time, frameId) {\n if (!frameTimer[frameId]) {\n frameTimer[frameId] = setTimeout(function() {\n frameTimer[frameId] = null;\n fn();\n }, time);\n }\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function fixHiddenIFrames() {\n function checkIFrames() {\n function checkIFrame(settingId) {\n function chkDimension(dimension) {\n return (\n '0px' ===\n (settings[settingId] && settings[settingId].iframe.style[dimension])\n );\n }\n\n function isVisible(el) {\n return null !== el.offsetParent;\n }\n\n if (\n settings[settingId] &&\n isVisible(settings[settingId].iframe) &&\n (chkDimension('height') || chkDimension('width'))\n ) {\n trigger(\n 'Visibility change',\n 'resize',\n settings[settingId].iframe,\n settingId\n );\n }\n }\n\n for (var settingId in settings) {\n checkIFrame(settingId);\n }\n }\n\n function mutationObserved(mutations) {\n log(\n 'window',\n 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type\n );\n debouce(checkIFrames, 16);\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n },\n observer = new MutationObserver(mutationObserved);\n\n observer.observe(target, config);\n }\n\n var MutationObserver =\n window.MutationObserver || window.WebKitMutationObserver;\n\n if (MutationObserver) createMutationObserver();\n }\n\n function resizeIFrames(event) {\n function resize() {\n sendTriggerMsg('Window ' + event, 'resize');\n }\n\n log('window', 'Trigger event: ' + event);\n debouce(resize, 16);\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function tabVisible() {\n function resize() {\n sendTriggerMsg('Tab Visable', 'resize');\n }\n\n if ('hidden' !== document.visibilityState) {\n log('document', 'Trigger event: Visiblity change');\n debouce(resize, 16);\n }\n }\n\n function sendTriggerMsg(eventName, event) {\n function isIFrameResizeEnabled(iframeId) {\n return (\n settings[iframeId] &&\n 'parent' === settings[iframeId].resizeFrom &&\n settings[iframeId].autoResize &&\n !settings[iframeId].firstRun\n );\n }\n\n for (var iframeId in settings) {\n if (isIFrameResizeEnabled(iframeId)) {\n trigger(eventName, event, document.getElementById(iframeId), iframeId);\n }\n }\n }\n\n function setupEventListeners() {\n addEventListener(window, 'message', iFrameListener);\n\n addEventListener(window, 'resize', function() {\n resizeIFrames('resize');\n });\n\n addEventListener(document, 'visibilitychange', tabVisible);\n addEventListener(document, '-webkit-visibilitychange', tabVisible); //Andriod 4.4\n addEventListener(window, 'focusin', function() {\n resizeIFrames('focus');\n }); //IE8-9\n addEventListener(window, 'focus', function() {\n resizeIFrames('focus');\n });\n }\n\n function factory() {\n function init(options, element) {\n function chkType() {\n if (!element.tagName) {\n throw new TypeError('Object is not a valid DOM element');\n } else if ('IFRAME' !== element.tagName.toUpperCase()) {\n throw new TypeError(\n 'Expected