{"version":3,"file":"iframeResizer.min.js","sources":["../src/iframeResizer.js"],"names":["window","__testHooks__","parent","addEventListener","obj","evt","func","attachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","getMyID","iframeId","retStr","top","self","parentIFrame","getId","formatLogHeader","msgId","msg","settings","logEnabled","console","warn","iFrameListener","event","resizeIFrame","resize","setSize","messageData","type","setPagePosition","ensureInRange","syncResize","processMsg","data","substr","msgIdLen","split","iframe","id","height","width","Dimension","max","Number","min","dimension","toLowerCase","size","Error","isMessageFromIFrame","checkAllowedOrigin","checkList","checkOrigin","i","origin","checkSingle","remoteHost","constructor","Array","isMessageForUs","isMessageFromMetaParent","retCode","true","false","undefined","getMsgBody","offset","indexOf","msgHeaderLen","forwardMsgFromIFrame","msgBody","messageCallback","message","JSON","parse","checkIFrameExists","getElementPosition","target","iFramePosition","getBoundingClientRect","getPagePosition","parseInt","left","pagePosition","y","scrollRequestFromChild","addOffset","reposition","newPosition","scrollTo","calcOffset","scrollCallback","findTarget","location","jumpToTarget","jumpPosition","hash","hashData","decodeURIComponent","document","getElementById","getElementsByName","moveToAnchor","callback","val","actionMsg","firstRun","closeIFrame","resetIFrame","initCallback","resizedCallback","hasSettings","retBool","iFrameReadyMsgReceived","trigger","createOutgoingMsg","logId","parentNode","removeChild","closedCallback","pageXOffset","documentElement","scrollLeft","pageYOffset","scrollTop","reset","setDimension","style","chkZero","hiddenCheckEnabled","fixHiddenIFrames","processDimension","sizeHeight","sizeWidth","doNotSync","calleeMsg","postMessageToIFrame","contentWindow","postMessage","iFrameNotFound","targetOrigin","bodyMarginV1","interval","enablePublicMethods","autoResize","bodyMargin","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","inPageLinks","resizeFrom","widthCalculationMethod","setupIFrame","options","setLimits","addStyle","Infinity","ensureHasId","defaults","count","src","setScrolling","scrolling","overflow","setupBodyMarginValues","checkReset","restRequertMethod","resetRequiredMethods","setupIFrameObject","Function","prototype","bind","iFrameResizer","close","anchor","sendMessage","stringify","init","iFrameLoaded","checkOptions","TypeError","copyOptions","option","hasOwnProperty","getTargetOrigin","processOptions","slice","join","beenHere","debouce","fn","time","timer","setTimeout","isVisible","el","offsetParent","checkIFrames","checkIFrame","settingId","chkDimension","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","WebKitMutationObserver","setupEventListeners","resizeIFrames","sendTriggerMsg","tabVisible","visibilityState","eventName","isIFrameResizeEnabled","factory","element","tagName","toUpperCase","iFrames","push","forEach","call","querySelectorAll","createJQueryPublicMethod","$","iFrameResize","this","filter","each","index","end","msgHeader","scroll","bodyScroll","documentElementScroll","maxHeight","maxWidth","minHeight","minWidth","jQuery","define","amd","module","exports"],"mappings":"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","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// TEST-CODE-START //\n\nwindow.__testHooks__ = window.__testHooks__  || {};\nwindow.__testHooks__.parent = {};\n\n// TEST-CODE-END //\n\n\n;(function(window) {\n\t'use strict';\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\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\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\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 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){\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\n\tfunction formatLogHeader(iframeId){\n\t\treturn msgId + '[' + getMyID(iframeId) + ']';\n\t}\n\n\tfunction log(iframeId,msg){\n\t\tif ((settings[iframeId] ? settings[iframeId].log : logEnabled) && ('object' === typeof window.console)){\n\t\t\tconsole.log(formatLogHeader(iframeId),msg);\n\t\t}\n\t}\n\n\tfunction warn(iframeId,msg){\n\t\tif ('object' === typeof window.console){\n\t\t\tconsole.warn(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\tif('resetPage' === messageData.type) setPagePosition(iframeId);\n\t\t\t}\n\n\t\t\tensureInRange('Height');\n\t\t\tensureInRange('Width');\n\n\t\t\tsyncResize(resize,messageData,'resetPage');\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\tif (min>max){\n\t\t\t\tthrow new Error('Value for min'+Dimension+' can not be greater than max'+Dimension);\n\t\t\t}\n\n\t\t\tlog(iframeId,'Checking '+dimension+' is in range '+min+'-'+max);\n\n\t\t\tif (size<min) {\n\t\t\t\tsize=min;\n\t\t\t\tlog(iframeId,'Set '+dimension+' to min value');\n\t\t\t}\n\n\t\t\tif (size>max) {\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\tlog(iframeId,'Checking connection is from allowed list of origins: ' + checkOrigin);\n\t\t\t\t\tvar i;\n\t\t\t\t\tfor (i = 0; i < checkOrigin.length; i++) {\n\t\t\t\t\t\tif (checkOrigin[i] === origin) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\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) {\n\t\t\t\tif ((''+origin !== 'null') && !checkAllowedOrigin()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Unexpected message received from: ' + origin +\n\t\t\t\t\t\t' for ' + messageData.iframe.id +\n\t\t\t\t\t\t'. Message was: ' + event.data +\n\t\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\t);\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\tsettings[iframeId].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 checkIFrameExists(){\n\t\t\tif (null === messageData.iframe) {\n\t\t\t\twarn(iframeId,'IFrame ('+messageData.id+') not found');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\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: parseInt(iFramePosition.left, 10) + parseInt(pagePosition.x, 10),\n\t\t\t\ty: parseInt(iFramePosition.top, 10)  + parseInt(pagePosition.y, 10)\n\t\t\t};\n\t\t}\n\n\t\tfunction scrollRequestFromChild(addOffset){\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\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\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} else {\n\t\t\t\treposition();\n\t\t\t}\n\t\t}\n\n\t\tfunction scrollTo(){\n\t\t\tif (false !== settings[iframeId].scrollCallback(pagePosition)){\n\t\t\t\tsetPagePosition(iframeId);\n\t\t\t}\n\t\t}\n\n\t\tfunction findTarget(location){\n\t\t\tfunction jumpToTarget(target){\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\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(window.top!==window.self){\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} else if (target){\n\t\t\t\tjumpToTarget(target);\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(func,val){\n\t\t\tif( 'function' === typeof func){\n\t\t\t\tfunc(val);\n\t\t\t}\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 '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(settings[iframeId].initCallback,messageData.iframe);\n\t\t\t\tcallback(settings[iframeId].resizedCallback,messageData);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresizeIFrame();\n\t\t\t\tcallback(settings[iframeId].resizedCallback,messageData);\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\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\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\t//log(iframeId,'Ignored: '+msg);\n\t\t}\n\n\t}\n\n\n\tfunction closeIFrame(iframe){\n\t\tvar iframeId = iframe.id;\n\n\t\tlog(iframeId,'Removing iFrame: '+iframeId);\n\t\tiframe.parentNode.removeChild(iframe);\n\t\tif(settings[iframeId]) {\n\t\t\tsettings[iframeId].closedCallback(iframeId);\n\t\t}\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\tpagePosition = null;\n\t\t}\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\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\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){\n\t\tfunction postMessageToIFrame(){\n\t\t\tlog(id,'[' + calleeMsg + '] Sending msg to iframe['+id+'] ('+msg+')');\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\tif(settings[id]) {\n\t\t\t\tdelete settings[id];\n\t\t\t}\n\t\t}\n\n\t\tid = id || iframe.id;\n\t\tvar target = settings[id].targetOrigin;\n\n\t\tif(iframe && 'contentWindow' in iframe){\n\t\t\tpostMessageToIFrame();\n\t\t} else {\n\t\t\tiFrameNotFound();\n\t\t}\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\taddStyle('maxHeight');\n\t\t\taddStyle('minHeight');\n\t\t\taddStyle('maxWidth');\n\t\t\taddStyle('minWidth');\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 = (options.id || defaults.id) + count++;\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\tiframe.scrolling      = false === settings[iframeId].scrolling ? 'no' : 'yes';\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\trestRequertMethod = settings[iframeId].heightCalculationMethod in resetRequiredMethods;\n\n\t\t\tif (!firstRun && restRequertMethod){\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','inPageLink:'+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);\n\t\t\t\tcheckReset();\n\t\t\t}\n\n\t\t\taddEventListener(iframe,'load',iFrameLoaded);\n\t\t\ttrigger('init',msg,iframe);\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\tfunction isVisible(el) {\n\t\treturn (null !== el.offsetParent);\n\t}\n\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\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\tfunction setupEventListeners(){\n\t\tfunction resizeIFrames(event){\n\t\t\tfunction resize(){\n\t\t\t\tsendTriggerMsg('Window '+event,'resize');\n\t\t\t}\n\n\t\t\tlog('window','Trigger event: '+event);\n\t\t\tdebouce(resize,16);\n\t\t}\n\n\t\tfunction tabVisible() {\n\t\t\tfunction resize(){\n\t\t\t\tsendTriggerMsg('Tab Visable','resize');\n\t\t\t}\n\n\t\t\tif('hidden' !== document.visibilityState) {\n\t\t\t\tlog('document','Trigger event: Visiblity change');\n\t\t\t\tdebouce(resize,16);\n\t\t\t}\n\t\t}\n\n\t\tfunction sendTriggerMsg(eventName,event){\n\t\t\tfunction isIFrameResizeEnabled(iframeId) {\n\t\t\t\treturn\t'parent' === settings[iframeId].resizeFrom &&\n\t\t\t\t\t\tsettings[iframeId].autoResize &&\n\t\t\t\t\t\t!settings[iframeId].firstRun;\n\t\t\t}\n\n\t\t\tfor (var iframeId in settings){\n\t\t\t\tif(isIFrameResizeEnabled(iframeId)){\n\t\t\t\t\ttrigger(eventName,event,document.getElementById(iframeId),iframeId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\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\tif(!element.tagName) {\n\t\t\t\tthrow new TypeError('Object is not a valid DOM element');\n\t\t\t} else if ('IFRAME' !== element.tagName.toUpperCase()) {\n\t\t\t\tthrow new TypeError('Expected <IFRAME> tag, found <'+element.tagName+'>.');\n\t\t\t} else {\n\t\t\t\tsetupIFrame(element, options);\n\t\t\t\tiFrames.push(element);\n\t\t\t}\n\t\t}\n\n\t\tvar iFrames;\n\n\t\tsetupRequestAnimationFrame();\n\t\tsetupEventListeners();\n\n\t\treturn function iFrameResizeF(options,target){\n\t\t\tiFrames = []; //Only return iFrames past in on this call\n\n\t\t\tswitch (typeof(target)){\n\t\t\tcase 'undefined':\n\t\t\tcase 'string':\n\t\t\t\tArray.prototype.forEach.call(\n\t\t\t\t\tdocument.querySelectorAll( target || 'iframe' ),\n\t\t\t\t\tinit.bind(undefined, options)\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'object':\n\t\t\t\tinit(options,target);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError('Unexpected data type ('+typeof(target)+').');\n\t\t\t}\n\n\t\t\treturn iFrames;\n\t\t};\n\t}\n\n\tfunction createJQueryPublicMethod($){\n\t\t$.fn.iFrameResize = function $iFrameResizeF(options) {\n\t\t\treturn this.filter('iframe').each(function (index, element) {\n\t\t\t\tsetupIFrame(element, options);\n\t\t\t}).end();\n\t\t};\n\t}\n\n\tif (window.jQuery) { createJQueryPublicMethod(jQuery); }\n\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([],factory);\n\t} else if (typeof module === 'object' && typeof module.exports === 'object') { //Node for browserfy\n\t\tmodule.exports = factory();\n\t} else {\n\t\twindow.iFrameResize = window.iFrameResize || factory();\n\t}\n\n})(window || {});\n"]}
