{"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","debouce","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","closeIFrame","resetIFrame","hasSettings","iFrameReadyMsgReceived","createOutgoingMsg","logId","loaded","retVal","TypeError","parentNode","removeChild","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","anchor","sendMessage","init","iFrameLoaded","checkOptions","copyOptions","option","hasOwnProperty","getTargetOrigin","processOptions","slice","join","beenHere","fn","time","timer","checkIFrames","checkIFrame","settingId","chkDimension","isVisible","offsetParent","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","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\n;(function(undefined) {\n\t'use strict';\n\n\tif(typeof window === 'undefined') return; // don't run for server side render\n\n\tvar\n\t\tcount = 0,\n\t\tlogEnabled = false,\n\t\thiddenCheckEnabled = false,\n\t\tmsgHeader = 'message',\n\t\tmsgHeaderLen = msgHeader.length,\n\t\tmsgId = '[iFrameSizer]', //Must match iframe msg ID\n\t\tmsgIdLen = msgId.length,\n\t\tpagePosition = null,\n\t\trequestAnimationFrame = window.requestAnimationFrame,\n\t\tresetRequiredMethods = {max:1,scroll:1,bodyScroll:1,documentElementScroll:1},\n\t\tsettings = {},\n\t\ttimer = null,\n\t\tlogId = 'Host Page',\n\n\t\tdefaults = {\n\t\t\tautoResize : true,\n\t\t\tbodyBackground : null,\n\t\t\tbodyMargin : null,\n\t\t\tbodyMarginV1 : 8,\n\t\t\tbodyPadding : null,\n\t\t\tcheckOrigin : true,\n\t\t\tinPageLinks : false,\n\t\t\tenablePublicMethods : true,\n\t\t\theightCalculationMethod : 'bodyOffset',\n\t\t\tid : 'iFrameResizer',\n\t\t\tinterval : 32,\n\t\t\tlog : false,\n\t\t\tmaxHeight : Infinity,\n\t\t\tmaxWidth : Infinity,\n\t\t\tminHeight : 0,\n\t\t\tminWidth : 0,\n\t\t\tresizeFrom : 'parent',\n\t\t\tscrolling : false,\n\t\t\tsizeHeight : true,\n\t\t\tsizeWidth : false,\n\t\t\twarningTimeout : 5000,\n\t\t\ttolerance : 0,\n\t\t\twidthCalculationMethod : 'scroll',\n\t\t\tclosedCallback : function(){},\n\t\t\tinitCallback : function(){},\n\t\t\tmessageCallback : function(){warn('MessageCallback function not defined');},\n\t\t\tresizedCallback : function(){},\n\t\t\tscrollCallback : function(){return true;}\n\t\t};\n\n\tfunction addEventListener(obj,evt,func){\n\t\t/* istanbul ignore else */ // Not testable in PhantonJS\n\t\tif ('addEventListener' in window){\n\t\t\tobj.addEventListener(evt,func, false);\n\t\t} else if ('attachEvent' in window){//IE\n\t\t\tobj.attachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction removeEventListener(el,evt,func){\n\t\t/* istanbul ignore else */ // Not testable in phantonJS\n\t\tif ('removeEventListener' in window){\n\t\t\tel.removeEventListener(evt,func, false);\n\t\t} else if ('detachEvent' in window){ //IE\n\t\t\tel.detachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction setupRequestAnimationFrame(){\n\t\tvar\n\t\t\tvendors = ['moz', 'webkit', 'o', 'ms'],\n\t\t\tx;\n\n\t\t// Remove vendor prefixing if prefixed and break early if not\n\t\tfor (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\n\t\t\trequestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n\t\t}\n\n\t\tif (!(requestAnimationFrame)){\n\t\t\tlog('setup','RequestAnimationFrame not supported');\n\t\t}\n\t}\n\n\tfunction getMyID(iframeId){\n\t\tvar retStr = 'Host page: '+iframeId;\n\n\t\tif (window.top !== window.self){\n\t\t\tif (window.parentIFrame && window.parentIFrame.getId){\n\t\t\t\tretStr = window.parentIFrame.getId()+': '+iframeId;\n\t\t\t} else {\n\t\t\t\tretStr = 'Nested host page: '+iframeId;\n\t\t\t}\n\t\t}\n\n\t\treturn retStr;\n\t}\n\n\tfunction formatLogHeader(iframeId){\n\t\treturn msgId + '[' + getMyID(iframeId) + ']';\n\t}\n\n\tfunction isLogEnabled(iframeId){\n\t\treturn settings[iframeId] ? settings[iframeId].log : logEnabled;\n\t}\n\n\tfunction log(iframeId,msg){\n\t\toutput('log',iframeId,msg,isLogEnabled(iframeId));\n\t}\n\n\tfunction info(iframeId,msg){\n\t\toutput('info',iframeId,msg,isLogEnabled(iframeId));\n\t}\n\n\tfunction warn(iframeId,msg){\n\t\toutput('warn',iframeId,msg,true);\n\t}\n\n\tfunction output(type,iframeId,msg,enabled){\n\t\tif (true === enabled && 'object' === typeof window.console){\n\t\t\tconsole[type](formatLogHeader(iframeId),msg);\n\t\t}\n\t}\n\n\tfunction iFrameListener(event){\n\t\tfunction resizeIFrame(){\n\t\t\tfunction resize(){\n\t\t\t\tsetSize(messageData);\n\t\t\t\tsetPagePosition(iframeId);\n\t\t\t\tcallback('resizedCallback',messageData);\n\t\t\t}\n\n\t\t\tensureInRange('Height');\n\t\t\tensureInRange('Width');\n\n\t\t\tsyncResize(resize,messageData,'init');\n\t\t}\n\n\t\tfunction processMsg(){\n\t\t\tvar data = msg.substr(msgIdLen).split(':');\n\n\t\t\treturn {\n\t\t\t\tiframe: settings[data[0]].iframe,\n\t\t\t\tid: data[0],\n\t\t\t\theight: data[1],\n\t\t\t\twidth: data[2],\n\t\t\t\ttype: data[3]\n\t\t\t};\n\t\t}\n\n\t\tfunction ensureInRange(Dimension){\n\t\t\tvar\n\t\t\t\tmax = Number(settings[iframeId]['max' + Dimension]),\n\t\t\t\tmin = Number(settings[iframeId]['min' + Dimension]),\n\t\t\t\tdimension = Dimension.toLowerCase(),\n\t\t\t\tsize = Number(messageData[dimension]);\n\n\t\t\tlog(iframeId,'Checking ' + dimension + ' is in range ' + min + '-' + max);\n\n\t\t\tif (sizemax) {\n\t\t\t\tsize=max;\n\t\t\t\tlog(iframeId,'Set ' + dimension + ' to max value');\n\t\t\t}\n\n\t\t\tmessageData[dimension] = '' + size;\n\t\t}\n\n\n\t\tfunction isMessageFromIFrame(){\n\t\t\tfunction checkAllowedOrigin(){\n\t\t\t\tfunction checkList(){\n\t\t\t\t\tvar\n\t\t\t\t\t\ti = 0,\n\t\t\t\t\t\tretCode = false;\n\n\t\t\t\t\tlog(iframeId,'Checking connection is from allowed list of origins: ' + checkOrigin);\n\n\t\t\t\t\tfor (; i < checkOrigin.length; i++) {\n\t\t\t\t\t\tif (checkOrigin[i] === origin) {\n\t\t\t\t\t\t\tretCode = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn retCode;\n\t\t\t\t}\n\n\t\t\t\tfunction checkSingle(){\n\t\t\t\t\tvar remoteHost = settings[iframeId].remoteHost;\n\t\t\t\t\tlog(iframeId,'Checking connection is from: '+remoteHost);\n\t\t\t\t\treturn origin === remoteHost;\n\t\t\t\t}\n\n\t\t\t\treturn checkOrigin.constructor === Array ? checkList() : checkSingle();\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\torigin = event.origin,\n\t\t\t\tcheckOrigin = settings[iframeId].checkOrigin;\n\n\t\t\tif (checkOrigin && (''+origin !== 'null') && !checkAllowedOrigin()) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected message received from: ' + origin +\n\t\t\t\t\t' for ' + messageData.iframe.id +\n\t\t\t\t\t'. Message was: ' + event.data +\n\t\t\t\t\t'. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction isMessageForUs(){\n\t\t\treturn msgId === (('' + msg).substr(0,msgIdLen)) && (msg.substr(msgIdLen).split(':')[0] in settings); //''+Protects against non-string msg\n\t\t}\n\n\t\tfunction isMessageFromMetaParent(){\n\t\t\t//Test if this message is from a parent above us. This is an ugly test, however, updating\n\t\t\t//the message format would break backwards compatibity.\n\t\t\tvar retCode = messageData.type in {'true':1,'false':1,'undefined':1};\n\n\t\t\tif (retCode){\n\t\t\t\tlog(iframeId,'Ignoring init message from meta parent page');\n\t\t\t}\n\n\t\t\treturn retCode;\n\t\t}\n\n\t\tfunction getMsgBody(offset){\n\t\t\treturn msg.substr(msg.indexOf(':')+msgHeaderLen+offset);\n\t\t}\n\n\t\tfunction forwardMsgFromIFrame(msgBody){\n\t\t\tlog(iframeId,'MessageCallback passed: {iframe: '+ messageData.iframe.id + ', message: ' + msgBody + '}');\n\t\t\tcallback('messageCallback',{\n\t\t\t\tiframe: messageData.iframe,\n\t\t\t\tmessage: JSON.parse(msgBody)\n\t\t\t});\n\t\t\tlog(iframeId,'--');\n\t\t}\n\n\t\tfunction getPageInfo(){\n\t\t\tvar\n\t\t\t\tbodyPosition = document.body.getBoundingClientRect(),\n\t\t\t\tiFramePosition = messageData.iframe.getBoundingClientRect();\n\n\t\t\treturn JSON.stringify({\n\t\t\t\tiframeHeight: iFramePosition.height,\n\t\t\t\tiframeWidth: iFramePosition.width,\n\t\t\t\tclientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),\n\t\t\t\tclientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),\n\t\t\t\toffsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\n\t\t\t\toffsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\n\t\t\t\tscrollTop: window.pageYOffset,\n\t\t\t\tscrollLeft: window.pageXOffset\n\t\t\t});\n\t\t}\n\n\t\tfunction sendPageInfoToIframe(iframe,iframeId){\n\t\t\tfunction debouncedTrigger(){\n\t\t\t\ttrigger(\n\t\t\t\t\t'Send Page Info',\n\t\t\t\t\t'pageInfo:' + getPageInfo(),\n\t\t\t\t\tiframe,\n\t\t\t\t\tiframeId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdebouce(debouncedTrigger,32);\n\t\t}\n\n\n\t\tfunction startPageInfoMonitor(){\n\t\t\tfunction setListener(type,func){\n\t\t\t\tfunction sendPageInfo(){\n\t\t\t\t\tif (settings[id]){\n\t\t\t\t\t\tsendPageInfoToIframe(settings[id].iframe,id);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstop();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t['scroll','resize'].forEach(function(evt){\n\t\t\t\t\tlog(id, type + evt + ' listener for sendPageInfo');\n\t\t\t\t\tfunc(window,evt,sendPageInfo);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction stop(){\n\t\t\t\tsetListener('Remove ', removeEventListener);\n\t\t\t}\n\n\t\t\tfunction start(){\n\t\t\t\tsetListener('Add ', addEventListener);\n\t\t\t}\n\n\t\t\tvar id = iframeId; //Create locally scoped copy of iFrame ID\n\n\t\t\tstart();\n\n\t\t\tsettings[id].stopPageInfo = stop;\n\t\t}\n\n\t\tfunction stopPageInfoMonitor(){\n\t\t\tif (settings[iframeId] && settings[iframeId].stopPageInfo){\n\t\t\t\tsettings[iframeId].stopPageInfo();\n\t\t\t\tdelete settings[iframeId].stopPageInfo;\n\t\t\t}\n\t\t}\n\n\t\tfunction checkIFrameExists(){\n\t\t\tvar retBool = true;\n\n\t\t\tif (null === messageData.iframe) {\n\t\t\t\twarn(iframeId,'IFrame ('+messageData.id+') not found');\n\t\t\t\tretBool = false;\n\t\t\t}\n\t\t\treturn retBool;\n\t\t}\n\n\t\tfunction getElementPosition(target){\n\t\t\tvar iFramePosition = target.getBoundingClientRect();\n\n\t\t\tgetPagePosition(iframeId);\n\n\t\t\treturn {\n\t\t\t\tx: Math.floor( Number(iFramePosition.left) + Number(pagePosition.x) ),\n\t\t\t\ty: Math.floor( Number(iFramePosition.top) + Number(pagePosition.y) )\n\t\t\t};\n\t\t}\n\n\t\tfunction scrollRequestFromChild(addOffset){\n\t\t\t/* istanbul ignore next */ //Not testable in Karma\n\t\t\tfunction reposition(){\n\t\t\t\tpagePosition = newPosition;\n\t\t\t\tscrollTo();\n\t\t\t\tlog(iframeId,'--');\n\t\t\t}\n\n\t\t\tfunction calcOffset(){\n\t\t\t\treturn {\n\t\t\t\t\tx: Number(messageData.width) + offset.x,\n\t\t\t\t\ty: Number(messageData.height) + offset.y\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfunction scrollParent(){\n\t\t\t\tif (window.parentIFrame){\n\t\t\t\t\twindow.parentIFrame['scrollTo'+(addOffset?'Offset':'')](newPosition.x,newPosition.y);\n\t\t\t\t} else {\n\t\t\t\t\twarn(iframeId,'Unable to scroll to requested position, window.parentIFrame not found');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\toffset = addOffset ? getElementPosition(messageData.iframe) : {x:0,y:0},\n\t\t\t\tnewPosition = calcOffset();\n\n\t\t\tlog(iframeId,'Reposition requested from iFrame (offset x:'+offset.x+' y:'+offset.y+')');\n\n\t\t\tif(window.top !== window.self){\n\t\t\t\tscrollParent();\n\t\t\t} else {\n\t\t\t\treposition();\n\t\t\t}\n\t\t}\n\n\t\tfunction scrollTo(){\n\t\t\tif (false !== callback('scrollCallback',pagePosition)){\n\t\t\t\tsetPagePosition(iframeId);\n\t\t\t} else {\n\t\t\t\tunsetPagePosition();\n\t\t\t}\n\t\t}\n\n\t\tfunction findTarget(location){\n\t\t\tfunction jumpToTarget(){\n\t\t\t\tvar jumpPosition = getElementPosition(target);\n\n\t\t\t\tlog(iframeId,'Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);\n\t\t\t\tpagePosition = {\n\t\t\t\t\tx: jumpPosition.x,\n\t\t\t\t\ty: jumpPosition.y\n\t\t\t\t};\n\n\t\t\t\tscrollTo();\n\t\t\t\tlog(iframeId,'--');\n\t\t\t}\n\n\t\t\tfunction jumpToParent(){\n\t\t\t\tif (window.parentIFrame){\n\t\t\t\t\twindow.parentIFrame.moveToAnchor(hash);\n\t\t\t\t} else {\n\t\t\t\t\tlog(iframeId,'In page link #'+hash+' not found and window.parentIFrame not found');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\thash = location.split('#')[1] || '',\n\t\t\t\thashData = decodeURIComponent(hash),\n\t\t\t\ttarget = document.getElementById(hashData) || document.getElementsByName(hashData)[0];\n\n\t\t\tif (target){\n\t\t\t\tjumpToTarget();\n\t\t\t} else if(window.top!==window.self){\n\t\t\t\tjumpToParent();\n\t\t\t} else {\n\t\t\t\tlog(iframeId,'In page link #'+hash+' not found');\n\t\t\t}\n\t\t}\n\n\t\tfunction callback(funcName,val){\n\t\t\treturn chkCallback(iframeId,funcName,val);\n\t\t}\n\n\t\tfunction actionMsg(){\n\n\t\t\tif(settings[iframeId].firstRun) firstRun();\n\n\t\t\tswitch(messageData.type){\n\t\t\tcase 'close':\n\t\t\t\tcloseIFrame(messageData.iframe);\n\t\t\t\tbreak;\n\t\t\tcase 'message':\n\t\t\t\tforwardMsgFromIFrame(getMsgBody(6));\n\t\t\t\tbreak;\n\t\t\tcase 'scrollTo':\n\t\t\t\tscrollRequestFromChild(false);\n\t\t\t\tbreak;\n\t\t\tcase 'scrollToOffset':\n\t\t\t\tscrollRequestFromChild(true);\n\t\t\t\tbreak;\n\t\t\tcase 'pageInfo':\n\t\t\t\tsendPageInfoToIframe(settings[iframeId].iframe,iframeId);\n\t\t\t\tstartPageInfoMonitor();\n\t\t\t\tbreak;\n\t\t\tcase 'pageInfoStop':\n\t\t\t\tstopPageInfoMonitor();\n\t\t\t\tbreak;\n\t\t\tcase 'inPageLink':\n\t\t\t\tfindTarget(getMsgBody(9));\n\t\t\t\tbreak;\n\t\t\tcase 'reset':\n\t\t\t\tresetIFrame(messageData);\n\t\t\t\tbreak;\n\t\t\tcase 'init':\n\t\t\t\tresizeIFrame();\n\t\t\t\tcallback('initCallback',messageData.iframe);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresizeIFrame();\n\t\t\t}\n\t\t}\n\n\t\tfunction hasSettings(iframeId){\n\t\t\tvar retBool = true;\n\n\t\t\tif (!settings[iframeId]){\n\t\t\t\tretBool = false;\n\t\t\t\twarn(messageData.type + ' No settings for ' + iframeId + '. Message was: ' + msg);\n\t\t\t}\n\n\t\t\treturn retBool;\n\t\t}\n\n\t\tfunction iFrameReadyMsgReceived(){\n\t\t\tfor (var iframeId in settings){\n\t\t\t\ttrigger('iFrame requested init',createOutgoingMsg(iframeId),document.getElementById(iframeId),iframeId);\n\t\t\t}\n\t\t}\n\n\t\tfunction firstRun() {\n\t\t\tsettings[iframeId].firstRun = false;\n\t\t}\n\n\t\tfunction clearWarningTimeout() {\n\t\t\tclearTimeout(settings[iframeId].msgTimeout);\n\t\t\tsettings[iframeId].warningTimeout = 0;\n\t\t}\n\n\t\tvar\n\t\t\tmsg = event.data,\n\t\t\tmessageData = {},\n\t\t\tiframeId = null;\n\n\t\tif('[iFrameResizerChild]Ready' === msg){\n\t\t\tiFrameReadyMsgReceived();\n\t\t} else if (isMessageForUs()){\n\t\t\tmessageData = processMsg();\n\t\t\tiframeId = logId = messageData.id;\n\t\t\tsettings[iframeId].loaded = true;\n\n\t\t\tif (!isMessageFromMetaParent() && hasSettings(iframeId)){\n\t\t\t\tlog(iframeId,'Received: '+msg);\n\n\t\t\t\tif ( checkIFrameExists() && isMessageFromIFrame() ){\n\t\t\t\t\tactionMsg();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tinfo(iframeId,'Ignored: '+msg);\n\t\t}\n\n\t}\n\n\n\tfunction chkCallback(iframeId,funcName,val){\n\t\tvar\n\t\t\tfunc = null,\n\t\t\tretVal = null;\n\n\t\tif(settings[iframeId]){\n\t\t\tfunc = settings[iframeId][funcName];\n\n\t\t\tif( 'function' === typeof func){\n\t\t\t\tretVal = func(val);\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(funcName+' on iFrame['+iframeId+'] is not a function');\n\t\t\t}\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\tfunction closeIFrame(iframe){\n\t\tvar iframeId = iframe.id;\n\n\t\tlog(iframeId,'Removing iFrame: '+iframeId);\n\t\tif (iframe.parentNode) { iframe.parentNode.removeChild(iframe); }\n\t\tchkCallback(iframeId,'closedCallback',iframeId);\n\t\tlog(iframeId,'--');\n\t\tdelete settings[iframeId];\n\t}\n\n\tfunction getPagePosition(iframeId){\n\t\tif(null === pagePosition){\n\t\t\tpagePosition = {\n\t\t\t\tx: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,\n\t\t\t\ty: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop\n\t\t\t};\n\t\t\tlog(iframeId,'Get page position: '+pagePosition.x+','+pagePosition.y);\n\t\t}\n\t}\n\n\tfunction setPagePosition(iframeId){\n\t\tif(null !== pagePosition){\n\t\t\twindow.scrollTo(pagePosition.x,pagePosition.y);\n\t\t\tlog(iframeId,'Set page position: '+pagePosition.x+','+pagePosition.y);\n\t\t\tunsetPagePosition();\n\t\t}\n\t}\n\n\tfunction unsetPagePosition(){\n\t\tpagePosition = null;\n\t}\n\n\tfunction resetIFrame(messageData){\n\t\tfunction reset(){\n\t\t\tsetSize(messageData);\n\t\t\ttrigger('reset','reset',messageData.iframe,messageData.id);\n\t\t}\n\n\t\tlog(messageData.id,'Size reset requested by '+('init'===messageData.type?'host page':'iFrame'));\n\t\tgetPagePosition(messageData.id);\n\t\tsyncResize(reset,messageData,'reset');\n\t}\n\n\tfunction setSize(messageData){\n\t\tfunction setDimension(dimension){\n\t\t\tmessageData.iframe.style[dimension] = messageData[dimension] + 'px';\n\t\t\tlog(\n\t\t\t\tmessageData.id,\n\t\t\t\t'IFrame (' + iframeId +\n\t\t\t\t') ' + dimension +\n\t\t\t\t' set to ' + messageData[dimension] + 'px'\n\t\t\t);\n\t\t}\n\n\t\tfunction chkZero(dimension){\n\t\t\t//FireFox sets dimension of hidden iFrames to zero.\n\t\t\t//So if we detect that set up an event to check for\n\t\t\t//when iFrame becomes visible.\n\n\t\t\t/* istanbul ignore next */ //Not testable in PhantomJS\n\t\t\tif (!hiddenCheckEnabled && '0' === messageData[dimension]){\n\t\t\t\thiddenCheckEnabled = true;\n\t\t\t\tlog(iframeId,'Hidden iFrame detected, creating visibility listener');\n\t\t\t\tfixHiddenIFrames();\n\t\t\t}\n\t\t}\n\n\t\tfunction processDimension(dimension){\n\t\t\tsetDimension(dimension);\n\t\t\tchkZero(dimension);\n\t\t}\n\n\t\tvar iframeId = messageData.iframe.id;\n\n\t\tif(settings[iframeId]){\n\t\t\tif( settings[iframeId].sizeHeight) { processDimension('height'); }\n\t\t\tif( settings[iframeId].sizeWidth ) { processDimension('width'); }\n\t\t}\n\t}\n\n\tfunction syncResize(func,messageData,doNotSync){\n\t\t/* istanbul ignore if */ //Not testable in PhantomJS\n\t\tif(doNotSync!==messageData.type && requestAnimationFrame){\n\t\t\tlog(messageData.id,'Requesting animation frame');\n\t\t\trequestAnimationFrame(func);\n\t\t} else {\n\t\t\tfunc();\n\t\t}\n\t}\n\n\tfunction trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\n\t\tfunction postMessageToIFrame(){\n\t\t\tvar target = settings[id].targetOrigin;\n\t\t\tlog(id,'[' + calleeMsg + '] Sending msg to iframe['+id+'] ('+msg+') targetOrigin: '+target);\n\t\t\tiframe.contentWindow.postMessage( msgId + msg, target );\n\t\t}\n\n\t\tfunction iFrameNotFound(){\n\t\t\twarn(id,'[' + calleeMsg + '] IFrame('+id+') not found');\n\t\t}\n\n\t\tfunction chkAndSend(){\n\t\t\tif(iframe && 'contentWindow' in iframe && (null !== iframe.contentWindow)){ //Null test for PhantomJS\n\t\t\t\tpostMessageToIFrame();\n\t\t\t} else {\n\t\t\t\tiFrameNotFound();\n\t\t\t}\n\t\t}\n\n\t\tfunction warnOnNoResponse() {\n\t\t\tfunction warning() {\n\t\t\t\tif (settings[id] && !settings[id].loaded && !errorShown) {\n\t\t\t\t\terrorShown = true;\n\t\t\t\t\twarn(id, 'IFrame has not responded within '+ settings[id].warningTimeout/1000 +' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ingored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!!noResponseWarning && !!settings[id].warningTimeout) {\n\t\t\t\tsettings[id].msgTimeout = setTimeout(warning, settings[id].warningTimeout);\n\t\t\t}\n\t\t}\n\n\t\tvar errorShown = false;\n\n\t\tid = id || iframe.id;\n\n\t\tif(settings[id]) {\n\t\t\tchkAndSend();\n\t\t\twarnOnNoResponse();\n\t\t}\n\n\t}\n\n\tfunction createOutgoingMsg(iframeId){\n\t\treturn iframeId +\n\t\t\t':' + settings[iframeId].bodyMarginV1 +\n\t\t\t':' + settings[iframeId].sizeWidth +\n\t\t\t':' + settings[iframeId].log +\n\t\t\t':' + settings[iframeId].interval +\n\t\t\t':' + settings[iframeId].enablePublicMethods +\n\t\t\t':' + settings[iframeId].autoResize +\n\t\t\t':' + settings[iframeId].bodyMargin +\n\t\t\t':' + settings[iframeId].heightCalculationMethod +\n\t\t\t':' + settings[iframeId].bodyBackground +\n\t\t\t':' + settings[iframeId].bodyPadding +\n\t\t\t':' + settings[iframeId].tolerance +\n\t\t\t':' + settings[iframeId].inPageLinks +\n\t\t\t':' + settings[iframeId].resizeFrom +\n\t\t\t':' + settings[iframeId].widthCalculationMethod;\n\t}\n\n\tfunction setupIFrame(iframe,options){\n\t\tfunction setLimits(){\n\t\t\tfunction addStyle(style){\n\t\t\t\tif ((Infinity !== settings[iframeId][style]) && (0 !== settings[iframeId][style])){\n\t\t\t\t\tiframe.style[style] = settings[iframeId][style] + 'px';\n\t\t\t\t\tlog(iframeId,'Set '+style+' = '+settings[iframeId][style]+'px');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction chkMinMax(dimension){\n\t\t\t\tif (settings[iframeId]['min'+dimension]>settings[iframeId]['max'+dimension]){\n\t\t\t\t\tthrow new Error('Value for min'+dimension+' can not be greater than max'+dimension);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchkMinMax('Height');\n\t\t\tchkMinMax('Width');\n\n\t\t\taddStyle('maxHeight');\n\t\t\taddStyle('minHeight');\n\t\t\taddStyle('maxWidth');\n\t\t\taddStyle('minWidth');\n\t\t}\n\n\t\tfunction newId(){\n\t\t\tvar id = ((options && options.id) || defaults.id + count++);\n\t\t\tif (null !== document.getElementById(id)){\n\t\t\t\tid = id + count++;\n\t\t\t}\n\t\t\treturn id;\n\t\t}\n\n\t\tfunction ensureHasId(iframeId){\n\t\t\tlogId=iframeId;\n\t\t\tif (''===iframeId){\n\t\t\t\tiframe.id = iframeId = newId();\n\t\t\t\tlogEnabled = (options || {}).log;\n\t\t\t\tlogId=iframeId;\n\t\t\t\tlog(iframeId,'Added missing iframe ID: '+ iframeId +' (' + iframe.src + ')');\n\t\t\t}\n\n\n\t\t\treturn iframeId;\n\t\t}\n\n\t\tfunction setScrolling(){\n\t\t\tlog(iframeId,'IFrame scrolling ' + (settings[iframeId].scrolling ? 'enabled' : 'disabled') + ' for ' + iframeId);\n\t\t\tiframe.style.overflow = false === settings[iframeId].scrolling ? 'hidden' : 'auto';\n\t\t\tswitch(settings[iframeId].scrolling) {\n\t\t\t\tcase true:\n\t\t\t\t\tiframe.scrolling = 'yes';\n\t\t\t\t\tbreak;\n\t\t\t\tcase false:\n\t\t\t\t\tiframe.scrolling = 'no';\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tiframe.scrolling = settings[iframeId].scrolling;\n\t\t\t}\n\t\t}\n\n\t\t//The V1 iFrame script expects an int, where as in V2 expects a CSS\n\t\t//string value such as '1px 3em', so if we have an int for V2, set V1=V2\n\t\t//and then convert V2 to a string PX value.\n\t\tfunction setupBodyMarginValues(){\n\t\t\tif (('number'===typeof(settings[iframeId].bodyMargin)) || ('0'===settings[iframeId].bodyMargin)){\n\t\t\t\tsettings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin;\n\t\t\t\tsettings[iframeId].bodyMargin = '' + settings[iframeId].bodyMargin + 'px';\n\t\t\t}\n\t\t}\n\n\t\tfunction checkReset(){\n\t\t\t// Reduce scope of firstRun to function, because IE8's JS execution\n\t\t\t// context stack is borked and this value gets externally\n\t\t\t// changed midway through running this function!!!\n\t\t\tvar\n\t\t\t\tfirstRun = settings[iframeId].firstRun,\n\t\t\t\tresetRequertMethod = settings[iframeId].heightCalculationMethod in resetRequiredMethods;\n\n\t\t\tif (!firstRun && resetRequertMethod){\n\t\t\t\tresetIFrame({iframe:iframe, height:0, width:0, type:'init'});\n\t\t\t}\n\t\t}\n\n\t\tfunction setupIFrameObject(){\n\t\t\tif(Function.prototype.bind){ //Ignore unpolyfilled IE8.\n\t\t\t\tsettings[iframeId].iframe.iFrameResizer = {\n\n\t\t\t\t\tclose : closeIFrame.bind(null,settings[iframeId].iframe),\n\n\t\t\t\t\tresize : trigger.bind(null,'Window resize', 'resize', settings[iframeId].iframe),\n\n\t\t\t\t\tmoveToAnchor : function(anchor){\n\t\t\t\t\t\ttrigger('Move to anchor','moveToAnchor:'+anchor, settings[iframeId].iframe,iframeId);\n\t\t\t\t\t},\n\n\t\t\t\t\tsendMessage : function(message){\n\t\t\t\t\t\tmessage = JSON.stringify(message);\n\t\t\t\t\t\ttrigger('Send Message','message:'+message, settings[iframeId].iframe, iframeId);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t//We have to call trigger twice, as we can not be sure if all\n\t\t//iframes have completed loading when this code runs. The\n\t\t//event listener also catches the page changing in the iFrame.\n\t\tfunction init(msg){\n\t\t\tfunction iFrameLoaded(){\n\t\t\t\ttrigger('iFrame.onload', msg, iframe, undefined , true);\n\t\t\t\tcheckReset();\n\t\t\t}\n\n\t\t\taddEventListener(iframe,'load',iFrameLoaded);\n\t\t\ttrigger('init', msg, iframe, undefined, true);\n\t\t}\n\n\t\tfunction checkOptions(options){\n\t\t\tif ('object' !== typeof options){\n\t\t\t\tthrow new TypeError('Options is not an object');\n\t\t\t}\n\t\t}\n\n\t\tfunction copyOptions(options){\n\t\t\tfor (var option in defaults) {\n\t\t\t\tif (defaults.hasOwnProperty(option)){\n\t\t\t\t\tsettings[iframeId][option] = options.hasOwnProperty(option) ? options[option] : defaults[option];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getTargetOrigin (remoteHost){\n\t\t\treturn ('' === remoteHost || 'file://' === remoteHost) ? '*' : remoteHost;\n\t\t}\n\n\t\tfunction processOptions(options){\n\t\t\toptions = options || {};\n\t\t\tsettings[iframeId] = {\n\t\t\t\tfirstRun\t: true,\n\t\t\t\tiframe\t\t: iframe,\n\t\t\t\tremoteHost\t: iframe.src.split('/').slice(0,3).join('/')\n\t\t\t};\n\n\t\t\tcheckOptions(options);\n\t\t\tcopyOptions(options);\n\n\t\t\tsettings[iframeId].targetOrigin = true === settings[iframeId].checkOrigin ? getTargetOrigin(settings[iframeId].remoteHost) : '*';\n\t\t}\n\n\t\tfunction beenHere(){\n\t\t\treturn (iframeId in settings && 'iFrameResizer' in iframe);\n\t\t}\n\n\t\tvar iframeId = ensureHasId(iframe.id);\n\n\t\tif (!beenHere()){\n\t\t\tprocessOptions(options);\n\t\t\tsetScrolling();\n\t\t\tsetLimits();\n\t\t\tsetupBodyMarginValues();\n\t\t\tinit(createOutgoingMsg(iframeId));\n\t\t\tsetupIFrameObject();\n\t\t} else {\n\t\t\twarn(iframeId,'Ignored iFrame, already setup.');\n\t\t}\n\t}\n\n\tfunction debouce(fn,time){\n\t\tif (null === timer){\n\t\t\ttimer = setTimeout(function(){\n\t\t\t\ttimer = null;\n\t\t\t\tfn();\n\t\t\t}, time);\n\t\t}\n\t}\n\n\t/* istanbul ignore next */ //Not testable in PhantomJS\n\tfunction fixHiddenIFrames(){\n\t\tfunction checkIFrames(){\n\t\t\tfunction checkIFrame(settingId){\n\t\t\t\tfunction chkDimension(dimension){\n\t\t\t\t\treturn '0px' === settings[settingId].iframe.style[dimension];\n\t\t\t\t}\n\n\t\t\t\tfunction isVisible(el) {\n\t\t\t\t\treturn (null !== el.offsetParent);\n\t\t\t\t}\n\n\t\t\t\tif (isVisible(settings[settingId].iframe) && (chkDimension('height') || chkDimension('width'))){\n\t\t\t\t\ttrigger('Visibility change', 'resize', settings[settingId].iframe, settingId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var settingId in settings){\n\t\t\t\tcheckIFrame(settingId);\n\t\t\t}\n\t\t}\n\n\t\tfunction mutationObserved(mutations){\n\t\t\tlog('window','Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type);\n\t\t\tdebouce(checkIFrames,16);\n\t\t}\n\n\t\tfunction createMutationObserver(){\n\t\t\tvar\n\t\t\t\ttarget = document.querySelector('body'),\n\n\t\t\t\tconfig = {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tattributeOldValue : false,\n\t\t\t\t\tcharacterData : true,\n\t\t\t\t\tcharacterDataOldValue : false,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tsubtree : true\n\t\t\t\t},\n\n\t\t\t\tobserver = new MutationObserver(mutationObserved);\n\n\t\t\tobserver.observe(target, config);\n\t\t}\n\n\t\tvar MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n\t\tif (MutationObserver) createMutationObserver();\n\t}\n\n\n\tfunction resizeIFrames(event){\n\t\tfunction resize(){\n\t\t\tsendTriggerMsg('Window '+event,'resize');\n\t\t}\n\n\t\tlog('window','Trigger event: '+event);\n\t\tdebouce(resize,16);\n\t}\n\n\t/* istanbul ignore next */ //Not testable in PhantomJS\n\tfunction tabVisible() {\n\t\tfunction resize(){\n\t\t\tsendTriggerMsg('Tab Visable','resize');\n\t\t}\n\n\t\tif('hidden' !== document.visibilityState) {\n\t\t\tlog('document','Trigger event: Visiblity change');\n\t\t\tdebouce(resize,16);\n\t\t}\n\t}\n\n\tfunction sendTriggerMsg(eventName,event){\n\t\tfunction isIFrameResizeEnabled(iframeId) {\n\t\t\treturn\t'parent' === settings[iframeId].resizeFrom &&\n\t\t\t\t\tsettings[iframeId].autoResize &&\n\t\t\t\t\t!settings[iframeId].firstRun;\n\t\t}\n\n\t\tfor (var iframeId in settings){\n\t\t\tif(isIFrameResizeEnabled(iframeId)){\n\t\t\t\ttrigger(eventName, event, document.getElementById(iframeId), iframeId);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setupEventListeners(){\n\t\taddEventListener(window,'message',iFrameListener);\n\n\t\taddEventListener(window,'resize', function(){resizeIFrames('resize');});\n\n\t\taddEventListener(document,'visibilitychange',tabVisible);\n\t\taddEventListener(document,'-webkit-visibilitychange',tabVisible); //Andriod 4.4\n\t\taddEventListener(window,'focusin',function(){resizeIFrames('focus');}); //IE8-9\n\t\taddEventListener(window,'focus',function(){resizeIFrames('focus');});\n\t}\n\n\n\tfunction factory(){\n\t\tfunction init(options,element){\n\t\t\tfunction chkType(){\n\t\t\t\tif(!element.tagName) {\n\t\t\t\t\tthrow new TypeError('Object is not a valid DOM element');\n\t\t\t\t} else if ('IFRAME' !== element.tagName.toUpperCase()) {\n\t\t\t\t\tthrow new TypeError('Expected