{"version":3,"file":"iframeResizer.min.js","sources":["../src/iframeResizer.js"],"names":["window","addEventListener","obj","evt","func","attachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","getMyID","retStr","top","self","parentIFrame","getId","formatLogMsg","msg","msgId","logEnabled","console","warn","iFrameListener","event","resizeIFrame","resize","setSize","messageData","setPagePosition","ensureInRange","syncResize","closeIFrame","iframe","iframeId","id","parentNode","removeChild","settings","closedCallback","processMsg","data","substr","msgIdLen","split","height","width","type","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","actionMsg","firstRun","resetIFrame","initCallback","resizedCallback","hasSettings","retBool","iFrameReadyMsgReceived","trigger","createOutgoingMsg","Function","prototype","bind","iFrameResizer","close","anchor","sendMessage","stringify","pageXOffset","documentElement","scrollLeft","pageYOffset","scrollTop","reset","setDimension","style","chkZero","hiddenCheckEnabled","fixHiddenIFrames","processDimension","sizeHeight","sizeWidth","doNotSync","calleeMsg","contentWindow","postMessage","targetOrigin","bodyMarginV1","interval","enablePublicMethods","autoResize","bodyMargin","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","inPageLinks","resizeFrom","widthCalculationMethod","setupIFrame","options","setLimits","addStyle","Infinity","ensureHasId","count","src","setScrolling","scrolling","overflow","setupBodyMarginValues","checkReset","restRequertMethod","resetRequiredMethods","init","iFrameLoaded","checkOptions","TypeError","copyOptions","option","defaults","hasOwnProperty","getTargetOrigin","processOptions","slice","join","beenHere","throttle","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","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;(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\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\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(' RequestAnimationFrame not supported');\n\t\t}\n\t}\n\n\tfunction getMyID(){\n\t\tvar retStr = 'Host page';\n\n\t\tif (window.top!==window.self){\n\t\t\tif (window.parentIFrame){\n\t\t\t\tretStr = window.parentIFrame.getId();\n\t\t\t} else {\n\t\t\t\tretStr = 'Nested host page';\n\t\t\t}\n\t\t}\n\n\t\treturn retStr;\n\t}\n\n\tfunction formatLogMsg(msg){\n\t\treturn msgId + '[' + getMyID() + ']' + msg;\n\t}\n\n\tfunction log(msg){\n\t\tif (logEnabled && ('object' === typeof window.console)){\n\t\t\tconsole.log(formatLogMsg(msg));\n\t\t}\n\t}\n\n\tfunction warn(msg){\n\t\tif ('object' === typeof window.console){\n\t\t\tconsole.warn(formatLogMsg(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();\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 closeIFrame(iframe){\n\t\t\tvar iframeId = iframe.id;\n\n\t\t\tlog(' Removing iFrame: '+iframeId);\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t\tsettings[iframeId].closedCallback(iframeId);\n\t\t\tdelete settings[iframeId];\n\t\t\tlog(' --');\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(' Checking '+dimension+' is in range '+min+'-'+max);\n\n\t\t\tif (sizemax) {\n\t\t\t\tsize=max;\n\t\t\t\tlog(' 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(' 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(' 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(' 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(' 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(' --');\n\t\t}\n\n\t\tfunction checkIFrameExists(){\n\t\t\tif (null === messageData.iframe) {\n\t\t\t\twarn(' 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();\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(' --');\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(' 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(' 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\n\t\t}\n\n\t\tfunction scrollTo(){\n\t\t\tif (false !== settings[iframeId].scrollCallback(pagePosition)){\n\t\t\t\tsetPagePosition();\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(' 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(' --');\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(' 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(' In page link #'+hash+' not found');\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\tsettings[iframeId].initCallback(messageData.iframe);\n\t\t\t\tsettings[iframeId].resizedCallback(messageData);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresizeIFrame();\n\t\t\t\tsettings[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\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\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 = messageData.id;\n\n\t\t\tif (!isMessageFromMetaParent() && hasSettings(iframeId)){\n\t\t\t\tlogEnabled = settings[iframeId].log;\n\t\t\t\tlog(' 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\tlog(' Ignored: '+msg);\n\t\t}\n\n\t}\n\n\n\tfunction getPagePosition (){\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(' Get page position: '+pagePosition.x+','+pagePosition.y);\n\t\t}\n\t}\n\n\tfunction setPagePosition(){\n\t\tif(null !== pagePosition){\n\t\t\twindow.scrollTo(pagePosition.x,pagePosition.y);\n\t\t\tlog(' 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(' Size reset requested by '+('init'===messageData.type?'host page':'iFrame'));\n\t\tgetPagePosition();\n\t\tsyncResize(reset,messageData,'init');\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\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(' 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].sizeHeight) { processDimension('height'); }\n\t\tif( settings[iframeId].sizeWidth ) { processDimension('width'); }\n\t}\n\n\tfunction syncResize(func,messageData,doNotSync){\n\t\tif(doNotSync!==messageData.type && requestAnimationFrame){\n\t\t\tlog(' 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\tid = id || iframe.id;\n\n\t\tif(iframe && iframe.contentWindow){\n\t\t\tlog('[' + calleeMsg + '] Sending msg to iframe['+id+'] ('+msg+')');\n\t\t\tiframe.contentWindow.postMessage( msgId + msg, settings[id].targetOrigin );\n\t\t} else {\n\t\t\twarn('[' + 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\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\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(' 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\tif (''===iframeId){\n\t\t\t\tiframe.id = iframeId = 'iFrameResizer' + count++;\n\t\t\t\tlogEnabled = (options || {}).log;\n\t\t\t\tlog(' Added missing iframe ID: '+ iframeId +' (' + iframe.src + ')');\n\t\t\t}\n\n\t\t\treturn iframeId;\n\t\t}\n\n\t\tfunction setScrolling(){\n\t\t\tlog(' 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\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\tif ('' === remoteHost || 'file://' === remoteHost) remoteHost = '*';\n\t\t\treturn 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\n\t\t\tlogEnabled = settings[iframeId].log;\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} else {\n\t\t\twarn(' Ignored iFrame, already setup.');\n\t\t}\n\t}\n\n\tfunction throttle(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(' Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type);\n\t\t\tthrottle(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(' Trigger event: '+event);\n\t\t\tthrottle(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(' Trigger event: Visiblity change');\n\t\t\t\tthrottle(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