{"version":3,"file":"iframeResizer.min.js","sources":["iframeResizer.js"],"names":["addEventListener","obj","evt","func","window","attachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","msg","settings","console","msgId","page","iFrameListener","event","resizeIFrame","resize","setSize","messageData","setPagePosition","resizedCallback","ensureInRange","syncResize","closeIFrame","iframe","iframeID","id","parentNode","removeChild","closedCallback","processMsg","data","substr","msgIdLen","split","document","getElementById","height","width","type","Dimension","max","Number","min","dimension","toLowerCase","size","Error","isMessageFromIFrame","origin","remoteHost","src","slice","join","checkOrigin","isMessageForUs","isMessageFromMetaParent","retCode","true","false","forwardMsgFromIFrame","msgBody","indexOf","msgHeaderLen","messageCallback","message","JSON","parse","checkIFrameExists","getIFramePosition","iFramePosition","getBoundingClientRect","getPagePosition","left","pagePosition","y","top","scrollRequestFromChild","addOffset","offset","actionMsg","resetIFrame","initCallback","firstRun","undefined","pageXOffset","documentElement","scrollLeft","pageYOffset","scrollTop","scrollTo","reset","trigger","setDimension","style","sizeHeight","sizeWidth","doNotSync","calleeMsg","contentWindow","postMessage","setupIFrame","setLimits","addStyle","Infinity","ensureHasId","count","setScrolling","scrolling","overflow","setupBodyMarginValues","bodyMargin","bodyMarginV1","createOutgoingMsg","interval","enablePublicMethods","autoResize","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","init","fr","resetRequiredMethods","this","checkOptions","options","TypeError","createNativePublicFunction","element","tagName","toUpperCase","call","processOptions","option","defaults","hasOwnProperty","selecter","Array","prototype","forEach","querySelectorAll","createJQueryPublicMethod","$","fn","iFrameResize","extend","filter","each","end","msgHeader","scroll","bodyScroll","documentElementScroll","maxHeight","maxWidth","minHeight","minWidth","jQuery","define","amd","exports","module"],"mappings":"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","sourcesContent":["/*\n * File: iframeReizer.js\n * Desc: Force iframes to size to content.\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n */\n;(function() {\n 'use strict';\n\n\tvar\n\t\tcount = 0,\n\t\tfirstRun = true,\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\tpage = '', //:'+location.href, //Uncoment to debug nested iFrames\n\t\tpagePosition = null,\n\t\trequestAnimationFrame = window.requestAnimationFrame,\n\t\tresetRequiredMethods = {max:1,scroll:1,bodyScroll:1,documentElementScroll:1},\n\t\tsettings = {},\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\tenablePublicMethods : false,\n\t\t\theightCalculationMethod : 'offset',\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\tscrolling : false,\n\t\t\tsizeHeight : true,\n\t\t\tsizeWidth : false,\n\t\t\ttolerance : 0,\n\t\t\tclosedCallback : function(){},\n\t\t\tinitCallback : function(){},\n\t\t\tmessageCallback : function(){},\n\t\t\tresizedCallback : function(){}\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 log(msg){\n\t\tif (settings.log && (typeof console === 'object')){\n\t\t\tconsole.log(msgId + '[Host page'+page+']' + msg);\n\t\t}\n\t}\n\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\tsettings.resizedCallback(messageData);\n\t\t\t}\n\n\t\t\tensureInRange('Height');\n\t\t\tensureInRange('Width');\n\t\t\t\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.closedCallback(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: document.getElementById(data[0]),\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['max'+Dimension]),\n\t\t\t\tmin = Number(settings['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\t\tfunction isMessageFromIFrame(){\n\n\t\t\tvar\n\t\t\t\torigin = event.origin,\n\t\t\t\tremoteHost = messageData.iframe.src.split('/').slice(0,3).join('/');\n\n\t\t\tif (settings.checkOrigin) {\n\t\t\t\tlog(' Checking connection is from: '+remoteHost);\n\n\t\t\t\tif ((''+origin !== 'null') && (origin !== remoteHost)) {\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 adding the checkOrigin: false option.'\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); //''+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};\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 forwardMsgFromIFrame(){\n\t\t\tvar msgBody = msg.substr(msg.indexOf(':')+msgHeaderLen+6); //6 === ':0:0:' + ':' (Ideas to name this magic number most welcome)\n\n\t\t\tlog(' MessageCallback passed: {iframe: '+ messageData.iframe.id + ', message: ' + msgBody + '}');\n\t\t\tsettings.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\tthrow new Error('iFrame ('+messageData.id+') does not exist on ' + page);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction getIFramePosition(){\n\t\t\tvar iFramePosition = messageData.iframe.getBoundingClientRect();\n\n\t\t\tgetPagePosition();\n\n\t\t\treturn {\n\t\t\t\tx: Number(iFramePosition.left) + Number(pagePosition.x),\n\t\t\t\ty: Number(iFramePosition.top) + Number(pagePosition.y)\n\t\t\t};\n\t\t}\n\n\t\tfunction scrollRequestFromChild(addOffset){\n\t\t\tvar offset = addOffset ? getIFramePosition() : {x:0,y:0};\n\n\t\t\tlog(' Reposition requested from iFrame (offset x:'+offset.x+' y:'+offset.y+')');\n\t\t\tpagePosition = {\n\t\t\t\tx: Number(messageData.width) + offset.x,\n\t\t\t\ty: Number(messageData.height) + offset.y\n\t\t\t};\n\t\t\tsetPagePosition();\n\t\t}\n\n\t\tfunction actionMsg(){\n\t\t\tswitch(messageData.type){\n\t\t\t\tcase 'close':\n\t\t\t\t\tcloseIFrame(messageData.iframe);\n\t\t\t\t\tsettings.resizedCallback(messageData); //To be removed.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'message':\n\t\t\t\t\tforwardMsgFromIFrame();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollTo':\n\t\t\t\t\tscrollRequestFromChild(false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scrollToOffset':\n\t\t\t\t\tscrollRequestFromChild(true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'reset':\n\t\t\t\t\tresetIFrame(messageData);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'init':\n\t\t\t\t\tresizeIFrame();\n\t\t\t\t\tsettings.initCallback(messageData.iframe);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tresizeIFrame();\n\t\t\t}\n\t\t}\n\n\t\tvar\n\t\t\tmsg = event.data,\n\t\t\tmessageData = {};\n\n\t\tif (isMessageForUs()){\n\t\t\tlog(' Received: '+msg);\n\t\t\tmessageData = processMsg();\n\n\t\t\tif ( !isMessageFromMetaParent() && checkIFrameExists() && isMessageFromIFrame() ){\n\t\t\t\tactionMsg();\n\t\t\t\tfirstRun = false;\n\t\t\t}\n\t\t}\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 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 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);\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 (' + messageData.iframe.id +\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\tif( settings.sizeHeight) { setDimension('height'); }\n\t\tif( settings.sizeWidth ) { setDimension('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){\n\t\tlog('[' + calleeMsg + '] Sending msg to iframe ('+msg+')');\n\t\tiframe.contentWindow.postMessage( msgId + msg, '*' );\n\t}\n\n\n\tfunction setupIFrame(){\n\t\tfunction setLimits(){\n\t\t\tfunction addStyle(style){\n\t\t\t\tif ((Infinity !== settings[style]) && (0 !== settings[style])){\n\t\t\t\t\tiframe.style[style] = settings[style] + 'px';\n\t\t\t\t\tlog(' Set '+style+' = '+settings[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\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.scrolling ? 'enabled' : 'disabled') + ' for ' + iframeID);\n\t\t\tiframe.style.overflow = false === settings.scrolling ? 'hidden' : 'auto';\n\t\t\tiframe.scrolling = false === settings.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.bodyMargin)) || ('0'===settings.bodyMargin)){\n\t\t\t\tsettings.bodyMarginV1 = settings.bodyMargin;\n\t\t\t\tsettings.bodyMargin = '' + settings.bodyMargin + 'px';\n\t\t\t}\n\t\t}\n\n\t\tfunction createOutgoingMsg(){\n\t\t\treturn iframeID +\n\t\t\t\t':' + settings.bodyMarginV1 +\n\t\t\t\t':' + settings.sizeWidth +\n\t\t\t\t':' + settings.log +\n\t\t\t\t':' + settings.interval +\n\t\t\t\t':' + settings.enablePublicMethods +\n\t\t\t\t':' + settings.autoResize +\n\t\t\t\t':' + settings.bodyMargin +\n\t\t\t\t':' + settings.heightCalculationMethod +\n\t\t\t\t':' + settings.bodyBackground +\n\t\t\t\t':' + settings.bodyPadding +\n\t\t\t\t':' + settings.tolerance;\n\t\t}\n\n\t\tfunction init(msg){\n\t\t\t//We have to call trigger twice, as we can not be sure if all\n\t\t\t//iframes have completed loading when this code runs. The\n\t\t\t//event listener also catches the page changing in the iFrame.\n\t\t\taddEventListener(iframe,'load',function(){\n\t\t\t\tvar fr = firstRun; // Reduce scope of var 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\t\t\t\ttrigger('iFrame.onload',msg,iframe);\n\t\t\t\tif (!fr && settings.heightCalculationMethod in resetRequiredMethods){\n\t\t\t\t\tresetIFrame({\n\t\t\t\t\t\tiframe:iframe,\n\t\t\t\t\t\theight:0,\n\t\t\t\t\t\twidth:0,\n\t\t\t\t\t\ttype:'init'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\ttrigger('init',msg,iframe);\n\t\t}\n\n\t\tvar\n /*jshint validthis:true */\n\t\t\tiframe = this,\n\t\t\tiframeID = ensureHasId(iframe.id);\n\n\t\tsetScrolling();\n\t\tsetLimits();\n\t\tsetupBodyMarginValues();\n\t\tinit(createOutgoingMsg());\n\t}\n\n\tfunction checkOptions(options){\n\t\tif ('object' !== typeof options){\n\t\t\tthrow new TypeError('Options is not an object.');\n\t\t}\n\t}\n\n\tfunction createNativePublicFunction(){\n\t\tfunction init(element){\n\t\t\tif('IFRAME' !== element.tagName.toUpperCase()) {\n\t\t\t\tthrow new TypeError('Expected