{"version":3,"file":"iframeResizer.min.js","sources":["../src/iframeResizer.js"],"names":["addEventListener","obj","evt","func","window","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","settings","iframeID","resizedCallback","ensureInRange","syncResize","closeIFrame","iframe","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","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","scrollToOffset","scrollCallback","findTarget","location","jumpToTarget","jumpPosition","hash","hashData","decodeURIComponent","getElementsByName","moveToAnchor","actionMsg","resetIFrame","initCallback","firstRun","undefined","pageXOffset","documentElement","scrollLeft","pageYOffset","scrollTop","reset","trigger","setDimension","style","sizeHeight","sizeWidth","doNotSync","calleeMsg","contentWindow","postMessage","setupIFrame","options","setLimits","addStyle","Infinity","ensureHasId","count","setScrolling","scrolling","overflow","setupBodyMarginValues","bodyMargin","bodyMarginV1","createOutgoingMsg","interval","enablePublicMethods","autoResize","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","enableInPageLinks","resizeFrom","init","fr","resetRequiredMethods","checkOptions","TypeError","processOptions","option","defaults","hasOwnProperty","this","throttle","fn","time","timer","setTimeout","winResize","iframeId","factory","element","tagName","toUpperCase","call","Array","prototype","forEach","querySelectorAll","createJQueryPublicMethod","$","iFrameResize","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 * 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() {\n\t'use strict';\n\n\tvar\n\t\tcount = 0,\n\t\tfirstRun = true,\n\t\tlogEnabled = 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\tenableInPageLinks : false,\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\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\tclosedCallback : function(){},\n\t\t\tinitCallback : function(){},\n\t\t\tmessageCallback : function(){},\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\tsettings[iframeID].resizedCallback(messageData);\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: 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[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\t\tfunction isMessageFromIFrame(){\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[iframeID].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 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\n\t\t\t\tiFramePosition = 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\n\t\t\t\tscrollTo();\n\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\tif (addOffset){\n\t\t\t\t\t\tparentIFrame.scrollToOffset(newPosition.x,newPosition.y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentIFrame.scrollTo(messageData.width,messageData.height);\n\t\t\t\t\t}\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\tvar hash = location.split(\"#\")[1] || \"\";\n\t\t\tvar hashData = decodeURIComponent(hash);\n\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 target = 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\tparentIFrame.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\t\t\tswitch(messageData.type){\n\t\t\t\tcase 'close':\n\t\t\t\t\tcloseIFrame(messageData.iframe);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'message':\n\t\t\t\t\tforwardMsgFromIFrame(getMsgBody(6));\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 'inPageLink':\n\t\t\t\t\tfindTarget(getMsgBody(9));\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[iframeID].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\t\t\tiframeID = null;\n\n\t\tif (isMessageForUs()){\n\t\t\tmessageData = processMsg();\n\t\t\tiframeID = messageData.id;\n\t\t\tlogEnabled = settings[iframeID].log;\n\t\t\tlog(' Received: '+msg);\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 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\t\tvar iframeID = messageData.iframe.id;\n\t\tif( settings[iframeID].sizeHeight) { setDimension('height'); }\n\t\tif( settings[iframeID].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,id){\n\t\tif(iframe && iframe.contentWindow){\n\t\t\tlog('[' + calleeMsg + '] Sending msg to iframe ('+msg+')');\n\t\t\tiframe.contentWindow.postMessage( msgId + msg, '*' );\n\t\t} else {\n\t\t\twarn('[' + calleeMsg + '] IFrame not found');\n\t\t\tif(settings[id]) delete settings[id];\n\t\t}\n\t}\n\n\n\tfunction setupIFrame(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 createOutgoingMsg(){\n\t\t\treturn iframeID +\n\t\t\t\t':' + settings[iframeID].bodyMarginV1 +\n\t\t\t\t':' + settings[iframeID].sizeWidth +\n\t\t\t\t':' + settings[iframeID].log +\n\t\t\t\t':' + settings[iframeID].interval +\n\t\t\t\t':' + settings[iframeID].enablePublicMethods +\n\t\t\t\t':' + settings[iframeID].autoResize +\n\t\t\t\t':' + settings[iframeID].bodyMargin +\n\t\t\t\t':' + settings[iframeID].heightCalculationMethod +\n\t\t\t\t':' + settings[iframeID].bodyBackground +\n\t\t\t\t':' + settings[iframeID].bodyPadding +\n\t\t\t\t':' + settings[iframeID].tolerance +\n\t\t\t\t':' + settings[iframeID].enableInPageLinks +\n\t\t\t\t':' + settings[iframeID].resizeFrom;\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[iframeID].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\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 processOptions(options){\n\t\t\toptions = options || {};\n\t\t\tsettings[iframeID] = {};\n\n\t\t\tcheckOptions(options);\n\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\n\t\t\tlogEnabled = settings[iframeID].log;\n\t\t}\n\n\t\tvar\n\t\t\t/*jshint validthis:true */\n\t\t\tiframe = this,\n\t\t\tiframeID = ensureHasId(iframe.id);\n\n\t\tprocessOptions(options);\n\t\tsetScrolling();\n\t\tsetLimits();\n\t\tsetupBodyMarginValues();\n\t\tinit(createOutgoingMsg());\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 winResize(){\n\t\tthrottle(function(){\n\t\t\tfor (var iframeId in settings){\n\t\t\t\tif('parent' === settings[iframeId].resizeFrom){\n\t\t\t\t\ttrigger('Window resize','resize',document.getElementById(iframeId),iframeId);\n\t\t\t\t}\n\t\t\t}\n\t\t},66);\n\t}\n\n\tfunction factory(){\n\t\tfunction init(element, options){\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