{"version":3,"sources":["iframeResizer.js"],"names":["undefined","window","$","count","logEnabled","hiddenCheckEnabled","msgHeaderLen","length","msgId","msgIdLen","pagePosition","requestAnimationFrame","resetRequiredMethods","max","scroll","bodyScroll","documentElementScroll","settings","timer","defaults","autoResize","bodyBackground","bodyMargin","bodyMarginV1","bodyPadding","checkOrigin","inPageLinks","enablePublicMethods","heightCalculationMethod","id","interval","log","maxHeight","Infinity","maxWidth","minHeight","minWidth","resizeFrom","scrolling","sizeHeight","sizeWidth","warningTimeout","tolerance","widthCalculationMethod","onClose","onClosed","onInit","onMessage","warn","onResized","onScroll","frameTimer","jQuery","fn","iFrameResize","options","this","filter","each","index","element","setupIFrame","end","info","define","amd","factory","module","exports","getMutationObserver","MutationObserver","WebKitMutationObserver","MozMutationObserver","addEventListener","el","evt","func","removeEventListener","formatLogHeader","iframeId","retStr","top","self","parentIFrame","getId","getMyID","isLogEnabled","msg","output","type","enabled","console","iFrameListener","event","resizeIFrame","ensureInRange","syncResize","setSize","messageData","setPagePosition","on","getPaddingEnds","compStyle","boxSizing","paddingTop","parseInt","paddingBottom","getBorderEnds","borderTopWidth","borderBottomWidth","Dimension","Number","min","dimension","toLowerCase","size","getMsgBody","offset","substr","indexOf","sendPageInfoToIframe","iframe","time","frameId","bodyPosition","iFramePosition","trigger","document","body","getBoundingClientRect","JSON","stringify","iframeHeight","height","iframeWidth","width","clientHeight","Math","documentElement","innerHeight","clientWidth","innerWidth","offsetTop","offsetLeft","left","scrollTop","pageYOffset","scrollLeft","pageXOffset","documentHeight","documentWidth","windowHeight","windowWidth","setTimeout","getElementPosition","target","getPagePosition","x","floor","y","scrollRequestFromChild","addOffset","newPosition","scrollTo","unsetPagePosition","funcName","val","chkEvent","retBool","retCode","data","createOutgoingMsg","iFrameReadyMsgReceived","split","getComputedStyle","loaded","true","false","hasSettings","remoteHost","origin","constructor","Array","i","checkList","Error","isMessageFromIFrame","firstRun","closeIFrame","msgBody","message","parse","setListener","sendPageInfo","stop","forEach","stopPageInfo","startPageInfoMonitor","location","hash","hashData","decodeURIComponent","getElementById","getElementsByName","jumpPosition","moveToAnchor","resetIFrame","actionMsg","retVal","TypeError","removeIframeListeners","parentNode","removeChild","error","chkZero","checkIFrames","Object","keys","key","settingId","chkDimension","style","offsetParent","checkIFrame","mutationObserved","mutations","debouce","querySelector","observe","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","fixHiddenIFrames","processDimension","setDimension","doNotSync","jasmine","calleeMsg","noResponseWarning","errorShown","contentWindow","targetOrigin","postMessage","msgTimeout","depricate","splitName","name","charAt","toUpperCase","slice","src","ensureHasId","join","checkOptions","option","prototype","hasOwnProperty","call","copyOptions","match","processOptions","overflow","setScrolling","addStyle","chkMinMax","setLimits","mutation","removedNodes","removedNode","createDestroyObserver","resetRequertMethod","iFrameResizer","close","bind","removeListeners","resize","anchor","sendMessage","tabVisible","visibilityState","sendTriggerMsg","eventName","isIFrameResizeEnabled","setupEventListeners","init","tagName","chkType","iFrames","push","vendors","setupRequestAnimationFrame","warnDeprecatedOptions","querySelectorAll"],"mappings":"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","file":"iframeResizer.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// eslint-disable-next-line sonarjs/cognitive-complexity, no-shadow-restricted-names\n;(function(undefined) {\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 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 onClose: function() {\n return true\n },\n onClosed: function() {},\n onInit: function() {},\n onMessage: function() {\n warn('onMessage function not defined')\n },\n onResized: function() {},\n onScroll: function() {\n return true\n }\n }\n\n function getMutationObserver() {\n return (\n window.MutationObserver ||\n window.WebKitMutationObserver ||\n window.MozMutationObserver\n )\n }\n\n function addEventListener(el, evt, func) {\n el.addEventListener(evt, func, false)\n }\n\n function removeEventListener(el, evt, func) {\n el.removeEventListener(evt, func, false)\n }\n\n function setupRequestAnimationFrame() {\n var vendors = ['moz', 'webkit', 'o', 'ms']\n var 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 } else {\n // Firefox extension content-scripts have a globalThis object that is not the same as window.\n // Binding `requestAnimationFrame` to window allows the function to work and prevents errors\n // being thrown when run in that context, and should be a no-op in every other context.\n requestAnimationFrame = requestAnimationFrame.bind(window);\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 // eslint-disable-next-line no-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 on('onResized', 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 var height = data[1] ? parseInt(data[1], 10) : 0;\n var iframe = settings[data[0]] && settings[data[0]].iframe;\n var compStyle = getComputedStyle(iframe)\n\n return {\n iframe: iframe,\n id: data[0],\n height: height + getPaddingEnds(compStyle) + getBorderEnds(compStyle),\n width: data[2],\n type: data[3]\n }\n }\n\n function getPaddingEnds(compStyle) {\n if (compStyle.boxSizing !== 'border-box') {\n return 0;\n }\n var top = compStyle.paddingTop ? parseInt(compStyle.paddingTop, 10) : 0\n var bot = compStyle.paddingBottom ? parseInt(compStyle.paddingBottom, 10) : 0\n return top + bot\n }\n\n function getBorderEnds(compStyle) {\n if (compStyle.boxSizing !== 'border-box') {\n return 0;\n }\n var top = compStyle.borderTopWidth ? parseInt(compStyle.borderTopWidth, 10) : 0\n var bot = compStyle.borderBottomWidth ? parseInt(compStyle.borderBottomWidth, 10) : 0\n return top + bot\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(iframeId, 'Checking ' + dimension + ' is in range ' + min + '-' + max)\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 'onMessage passed: {iframe: ' +\n messageData.iframe.id +\n ', message: ' +\n msgBody +\n '}'\n )\n on('onMessage', {\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 documentHeight: document.documentElement.clientHeight,\n documentWidth: document.documentElement.clientWidth,\n windowHeight: window.innerHeight,\n windowWidth: window.innerWidth\n })\n }\n\n function sendPageInfoToIframe(iframe, iframeId) {\n function debouncedTrigger() {\n trigger('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId)\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 !== on('onScroll', 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 on(funcName, val) {\n return chkEvent(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 closeIFrame(messageData.iframe)\n break\n\n case 'message':\n forwardMsgFromIFrame(getMsgBody(6))\n break\n\n case 'autoResize':\n settings[iframeId].autoResize = JSON.parse(getMsgBody(9))\n break\n\n case 'scrollTo':\n scrollRequestFromChild(false)\n break\n\n case 'scrollToOffset':\n scrollRequestFromChild(true)\n break\n\n case 'pageInfo':\n sendPageInfoToIframe(\n settings[iframeId] && settings[iframeId].iframe,\n iframeId\n )\n startPageInfoMonitor()\n break\n\n case 'pageInfoStop':\n stopPageInfoMonitor()\n break\n\n case 'inPageLink':\n findTarget(getMsgBody(9))\n break\n\n case 'reset':\n resetIFrame(messageData)\n break\n\n case 'init':\n resizeIFrame()\n on('onInit', messageData.iframe)\n break\n\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 // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (var iframeId in settings) {\n trigger(\n 'iFrame requested init',\n createOutgoingMsg(iframeId),\n settings[iframeId].iframe,\n iframeId\n )\n }\n }\n\n function firstRun() {\n if (settings[iframeId]) {\n settings[iframeId].firstRun = false\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 = 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 chkEvent(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 if (chkEvent(iframeId, 'onClose', iframeId) === false) {\n log(iframeId, 'Close iframe cancelled by onClose event')\n return\n }\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 (error) {\n warn(error)\n }\n\n chkEvent(iframeId, 'onClosed', 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 // including check for jasmine because had trouble getting spy to work in unit test using requestAnimationFrame\n !window.jasmine) {\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 += count++\n }\n return id\n }\n\n function ensureHasId(iframeId) {\n if ('' === iframeId) {\n // eslint-disable-next-line no-multi-assign\n iframe.id = iframeId = newId()\n logEnabled = (options || {}).log\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\n case true:\n iframe.scrolling = 'yes'\n break\n\n case false:\n iframe.scrolling = 'no'\n break\n\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 (settings[iframeId]) {\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 function createDestroyObserver(MutationObserver) {\n if (!iframe.parentNode) {\n return\n }\n\n var destroyObserver = new MutationObserver(function(mutations) {\n mutations.forEach(function(mutation) {\n var removedNodes = Array.prototype.slice.call(mutation.removedNodes) // Transform NodeList into an Array\n removedNodes.forEach(function(removedNode) {\n if (removedNode === iframe) {\n closeIFrame(iframe)\n }\n })\n })\n })\n destroyObserver.observe(iframe.parentNode, {\n childList: true\n })\n }\n\n var MutationObserver = getMutationObserver()\n if (MutationObserver) {\n createDestroyObserver(MutationObserver)\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 // eslint-disable-next-line no-restricted-syntax\n for (var option in defaults) {\n if (Object.prototype.hasOwnProperty.call(defaults, option)) {\n settings[iframeId][option] = Object.prototype.hasOwnProperty.call(\n options,\n option\n )\n ? options[option]\n : defaults[option]\n }\n }\n }\n\n function getTargetOrigin(remoteHost) {\n return '' === remoteHost || null !== remoteHost.match(/^(about:blank|javascript:|file:\\/\\/)/) ? '*' : remoteHost\n }\n\n function depricate(key) {\n var splitName = key.split('Callback')\n\n if (splitName.length === 2) {\n var name =\n 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1)\n this[name] = this[key]\n delete this[key]\n warn(\n iframeId,\n \"Deprecated: '\" +\n key +\n \"' has been renamed '\" +\n name +\n \"'. The old method will be removed in the next major version.\"\n )\n }\n }\n\n function processOptions(options) {\n options = options || {}\n settings[iframeId] = {\n firstRun: true,\n iframe: iframe,\n remoteHost:\n iframe.src &&\n iframe.src\n .split('/')\n .slice(0, 3)\n .join('/')\n }\n\n checkOptions(options)\n Object.keys(options).forEach(depricate, 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 }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n\n 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 Object.keys(settings).forEach(function(key) {\n checkIFrame(key)\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 = getMutationObserver()\n if (MutationObserver) {\n createMutationObserver()\n }\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 }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n 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 Object.keys(settings).forEach(function(iframeId) {\n if (isIFrameResizeEnabled(iframeId)) {\n trigger(eventName, event, settings[iframeId].iframe, 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\n addEventListener(document, '-webkit-visibilitychange', tabVisible)\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