From 8d27ef2e9286e17df7e5dab3a166c0b1f058a5e4 Mon Sep 17 00:00:00 2001 From: "David J. Bradshaw" Date: Sun, 30 Aug 2015 19:27:29 +0100 Subject: [PATCH] Release v3.1.1 --- README.md | 4 ++-- bower.json | 2 +- iframeResizer.jquery.json | 2 +- js/iframeResizer.contentWindow.map | 2 +- js/iframeResizer.contentWindow.min.js | 2 +- js/iframeResizer.map | 2 +- js/iframeResizer.min.js | 4 ++-- package.json | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a05527dea..1df0f6565 100644 --- a/README.md +++ b/README.md @@ -501,8 +501,8 @@ The parentIFrame methods object in the iFrame is now always available and the `e ## Version History -* v3.2.0 Added readyCallback to iFrame. Host page log messages include ref to iFrame the are operating on. IFrameResizer object on iFrame is now created during setup, rather than waiting for init message to be returned from iFrame. [#245](https://github.com/davidjbradshaw/iframe-resizer/issues/245) Fix issue with iFrame not correctly resizing when multiple images are injected into the page [[mdgbayly](https://github.com/mdgbayly)]. [#246](https://github.com/davidjbradshaw/iframe-resizer/issues/246) Fix issue with including ':' in messages passed to iFrames. -* v3.1.0 [#101](https://github.com/davidjbradshaw/iframe-resizer/issues/101) Support async loading of iFrame script. [#239](https://github.com/davidjbradshaw/iframe-resizer/issues/239) Throttle size checking to once per screen refresh (16ms). Added support for hidden iFrames in FireFox. Improved handling of parent page events. [#236](https://github.com/davidjbradshaw/iframe-resizer/issues/236) Cope with iFrames that don't have a *src* value. [#242](https://github.com/davidjbradshaw/iframe-resizer/issues/242) Fix issue where iFrame is removed and then put back with same ID [[Alban Mouton](https://github.com/albanm)]. +* v3.1.1 Added readyCallback to iFrame. Create iFrameResizer object on iFrameuring setup, rather than waiting for init message to be returned from iFrame. Add ref to iFrame in host page log messages. [#245](https://github.com/davidjbradshaw/iframe-resizer/issues/245) Fix issue with iFrame not correctly resizing when multiple images are injected into the page [[mdgbayly](https://github.com/mdgbayly)]. [#246](https://github.com/davidjbradshaw/iframe-resizer/issues/246) Fix issue with including ':' in messages passed to iFrames. +* v3.1.0 [#101](https://github.com/davidjbradshaw/iframe-resizer/issues/101) Support async loading of iFrame script. [#239](https://github.com/davidjbradshaw/iframe-resizer/issues/239) Throttle size checking to once per screen refresh (16ms). Fixed issue with hidden iFrames in FireFox. Improved handling of parent page events. [#236](https://github.com/davidjbradshaw/iframe-resizer/issues/236) Cope with iFrames that don't have a *src* value. [#242](https://github.com/davidjbradshaw/iframe-resizer/issues/242) Fix issue where iFrame is removed and then put back with same ID [[Alban Mouton](https://github.com/albanm)]. * v3.0.0 Added *taggedElement* size calculation method. [#199](https://github.com/davidjbradshaw/iframe-resizer/issues/199) Added in page options to iFrame. [#70](https://github.com/davidjbradshaw/iframe-resizer/issues/70) Added width calculation method options. Added methods to bound iFrames to comunicate from parent to iFrame. Ignore calls to setup an already bound iFrame. Improved event handling. Refactored MutationObserver functions. Moved IE8 polyfil from docs to own JS file and added *Funtion.prototype.bind()*. Added detection for tab focus. Fixed bug with nested inPageLinks. Public methods in iFrame now always enabled and option removed. Renamed enableInPageLinks to inPageLinks. Added double iFrame example. * v2.8.10 Fixed bug with resizeFrom option not having default value in iFrame, if called from old version in parent page. * v2.8.9 [#220](https://github.com/davidjbradshaw/iframe-resizer/issues/220) Switched from using *deviceorientation* to *orientationchange* event listner [[Brandon Kobel](https://github.com/kobelb)]. diff --git a/bower.json b/bower.json index 9d6c83ced..26824c91a 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "iframe-resizer", - "version": "3.1.0", + "version": "3.1.1", "homepage": "https://github.com/davidjbradshaw/iframe-resizer", "authors": [ "David J. Bradshaw " diff --git a/iframeResizer.jquery.json b/iframeResizer.jquery.json index cba4867a9..94c2cfd35 100644 --- a/iframeResizer.jquery.json +++ b/iframeResizer.jquery.json @@ -17,7 +17,7 @@ "RWD", "responsive" ], - "version": "3.1.0", + "version": "3.1.1", "author": { "name": "David J. Bradshaw", "email": "davidjbradshaw+github@gmail.com" diff --git a/js/iframeResizer.contentWindow.map b/js/iframeResizer.contentWindow.map index a7667738a..65216b17b 100644 --- a/js/iframeResizer.contentWindow.map +++ b/js/iframeResizer.contentWindow.map @@ -1 +1 @@ -{"version":3,"file":"iframeResizer.contentWindow.min.js","sources":["iframeResizer.contentWindow.js"],"names":["window","addEventListener","el","evt","func","attachEvent","throttle","context","args","result","timeout","previous","later","getNow","apply","now","remaining","throttledTimer","this","arguments","clearTimeout","setTimeout","formatLogMsg","msg","msgID","myID","log","logging","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","readyCallback","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","undefined","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","addTriggerEvent","options","addListener","eventName","handleEvent","eventType","eventNames","Array","prototype","map","initEventListeners","checkCalcMode","calcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","clearFix","createElement","clear","display","appendChild","getPagePosition","x","pageXOffset","scrollLeft","y","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","findTarget","jumpToTarget","target","jumpPosition","hash","sendMsg","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","e","preventDefault","getAttribute","forEach","call","querySelectorAll","bindLocationHash","initCheck","eventCancelTimer","enableInPageLinks","parentIFrame","close","getId","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","valString","lockTrigger","initInterval","setInterval","Math","abs","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","attributeName","event","removeEventListener","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","forceIntervalTimer","WebKitMutationObserver","getComputedBodyStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","getComputedStyle","getMaxElement","side","elements","elementsLength","length","maxVal","timer","i","getAllMeasurements","dimention","bodyOffset","bodyScroll","documentElementOffset","documentElementScroll","getTaggedElements","tag","noTaggedElementsFound","getAllElements","sizeIFrame","triggerEvent","triggerEventDesc","resizeIFrame","currentHeight","width","currentWidth","isSizeChangeDetected","checkTolarance","a","b","isForceResizableEvent","isForceResizableCalcMode","resetRequiredMethods","logIgnored","checkDownSizing","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","parent","postMessage","receiver","isMessageForUs","initFromParent","firstRun","initLock","resetFromParent","resizeFromParent","anchor","getData","getMessageType","isMiddleTier","messageFromParent","msgBody","parse","isInitMsg","true","false","callFromParent","processMessage","chkLateLoaded","readyState","resize","click","max","min","Date","getTime","offsetHeight","offset","scrollHeight","grow","lowestElement","taggedElement","scrollWidth","offsetWidth","scroll","leftMostElement"],"mappings":"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","sourcesContent":["/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\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: Ian Caunce - ian@hallnet.co.uk\n */\n\n\n;(function(window) {\n\t'use strict';\n\n\tvar\n\t\tautoResize = true,\n\t\tbase = 10,\n\t\tbodyBackground = '',\n\t\tbodyMargin = 0,\n\t\tbodyMarginStr = '',\n\t\tbodyPadding = '',\n\t\tcalculateWidth = false,\n\t\tdoubleEventList = {'resize':1,'click':1},\n\t\teventCancelTimer = 128,\n\t\tfirstRun = true,\n\t\theight = 1,\n\t\theightCalcModeDefault = 'bodyOffset',\n\t\theightCalcMode = heightCalcModeDefault,\n\t\tinitLock = true,\n\t\tinitMsg = '',\n\t\tinPageLinks = {},\n\t\tinterval = 32,\n\t\tlogging = false,\n\t\tmsgID = '[iFrameSizer]', //Must match host page msg ID\n\t\tmsgIdLen = msgID.length,\n\t\tmyID = '',\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\ttargetOriginDefault = '*',\n\t\ttolerance = 0,\n\t\ttriggerLocked = false,\n\t\ttriggerLockedTimer = null,\n\t\tthrottledTimer = 0,\n\t\twidth = 1,\n\t\twidthCalcModeDefault = 'scroll',\n\t\twidthCalcMode = widthCalcModeDefault,\n\t\tmessageCallback = function(){warn('MessageCallback function not defined');},\n\t\treadyCallback = function(){};\n\n\n\tfunction addEventListener(el,evt,func){\n\t\tif ('addEventListener' in window){\n\t\t\tel.addEventListener(evt,func, false);\n\t\t} else if ('attachEvent' in window){ //IE\n\t\t\tel.attachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\t//Based on underscore.js\n\tfunction throttle(func) {\n\t\tvar\n\t\t\tcontext, args, result,\n\t\t\ttimeout = null,\n\t\t\tprevious = 0,\n\t\t\tlater = function() {\n\t\t\t\tprevious = getNow();\n\t\t\t\ttimeout = null;\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn function() {\n\t\t\tvar now = getNow();\n\n\t\t\tif (!previous) {\n\t\t\t\tprevious = now;\n\t\t\t}\n\n\t\t\tvar remaining = throttledTimer - (now - previous);\n\n\t\t\tcontext = this;\n\t\t\targs = arguments;\n\n\t\t\tif (remaining <= 0 || remaining > throttledTimer) {\n\t\t\t\tif (timeout) {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\ttimeout = null;\n\t\t\t\t}\n\n\t\t\t\tprevious = now;\n\t\t\t\tresult = func.apply(context, args);\n\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\n\t\t\t} else if (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, remaining);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar getNow = Date.now || function() {\n\t\treturn new Date().getTime();\n\t};\n\n\n\tfunction formatLogMsg(msg){\n\t\treturn msgID + '[' + myID + ']' + ' ' + msg;\n\t}\n\n\tfunction log(msg){\n\t\tif (logging && ('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\n\tfunction init(){\n\t\treadDataFromParent();\n\t\tlog('Initialising iFrame ('+location.href+')');\n\t\treadDataFromPage();\n\t\tsetMargin();\n\t\tsetBodyStyle('background',bodyBackground);\n\t\tsetBodyStyle('padding',bodyPadding);\n\t\tinjectClearFixIntoBodyElement();\n\t\tcheckHeightMode();\n\t\tcheckWidthMode();\n\t\tstopInfiniteResizingOfIFrame();\n\t\tsetupPublicMethods();\n\t\tstartEventListeners();\n\t\tinPageLinks = setupInPageLinks();\n\t\tsendSize('init','Init message from host page');\n\t\treadyCallback();\n\t}\n\n\tfunction readDataFromParent(){\n\n\t\tfunction strBool(str){\n\t\t\treturn 'true' === str ? true : false;\n\t\t}\n\n\t\tvar data = initMsg.substr(msgIdLen).split(':');\n\n\t\tmyID = data[0];\n\t\tbodyMargin = (undefined !== data[1]) ? Number(data[1]) : bodyMargin; //For V1 compatibility\n\t\tcalculateWidth = (undefined !== data[2]) ? strBool(data[2]) : calculateWidth;\n\t\tlogging = (undefined !== data[3]) ? strBool(data[3]) : logging;\n\t\tinterval = (undefined !== data[4]) ? Number(data[4]) : interval;\n\t\tautoResize = (undefined !== data[6]) ? strBool(data[6]) : autoResize;\n\t\tbodyMarginStr = data[7];\n\t\theightCalcMode = (undefined !== data[8]) ? data[8] : heightCalcMode;\n\t\tbodyBackground = data[9];\n\t\tbodyPadding = data[10];\n\t\ttolerance = (undefined !== data[11]) ? Number(data[11]) : tolerance;\n\t\tinPageLinks.enable = (undefined !== data[12]) ? strBool(data[12]): false;\n\t\tresizeFrom = (undefined !== data[13]) ? data[13] : resizeFrom;\n\t\twidthCalcMode = (undefined !== data[14]) ? data[14] : widthCalcMode;\n\t}\n\n\tfunction readDataFromPage(){\n\t\tfunction readData(){\n\t\t\tvar data = window.iFrameResizer;\n\n\t\t\tlog('Reading data from page: ' + JSON.stringify(data));\n\n\t\t\tmessageCallback = (undefined !== data.messageCallback ) ? data.messageCallback : messageCallback;\n\t\t\treadyCallback = (undefined !== data.readyCallback ) ? data.readyCallback : readyCallback;\n\t\t\ttargetOriginDefault = (undefined !== data.targetOrigin ) ? data.targetOrigin : targetOriginDefault;\n\t\t\theightCalcMode = (undefined !== data.heightCalculationMethod ) ? data.heightCalculationMethod : heightCalcMode;\n\t\t\twidthCalcMode = (undefined !== data.widthCalculationMethod ) ? data.widthCalculationMethod : widthCalcMode;\n\t\t}\n\n\t\tif(('iFrameResizer' in window) && (Object === window.iFrameResizer.constructor)) {\n\t\t\treadData();\n\t\t}\n\t}\n\n\n\tfunction chkCSS(attr,value){\n\t\tif (-1 !== value.indexOf('-')){\n\t\t\twarn('Negative CSS value ignored for '+attr);\n\t\t\tvalue='';\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setBodyStyle(attr,value){\n\t\tif ((undefined !== value) && ('' !== value) && ('null' !== value)){\n\t\t\tdocument.body.style[attr] = value;\n\t\t\tlog('Body '+attr+' set to \"'+value+'\"');\n\t\t}\n\t}\n\n\tfunction setMargin(){\n\t\t//If called via V1 script, convert bodyMargin from int to str\n\t\tif (undefined === bodyMarginStr){\n\t\t\tbodyMarginStr = bodyMargin+'px';\n\t\t}\n\t\tchkCSS('margin',bodyMarginStr);\n\t\tsetBodyStyle('margin',bodyMarginStr);\n\t}\n\n\tfunction stopInfiniteResizingOfIFrame(){\n\t\tdocument.documentElement.style.height = '';\n\t\tdocument.body.style.height = '';\n\t\tlog('HTML & body height set to \"auto\"');\n\t}\n\n\n\tfunction addTriggerEvent(options){\n\t\tfunction addListener(eventName){\n\t\t\tfunction handleEvent(){\n\t\t\t\tsendSize(options.eventName,options.eventType);\n\t\t\t}\n\n\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t}\n\n\t\tif(options.eventNames && Array.prototype.map){\n\t\t\toptions.eventName = options.eventNames[0];\n\t\t\toptions.eventNames.map(addListener);\n\t\t} else {\n\t\t\taddListener(options.eventName);\n\t\t}\n\n\t\tlog('Added event listener: ' + options.eventType);\n\t}\n\n\tfunction initEventListeners(){\n\t\taddTriggerEvent({ eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\taddTriggerEvent({ eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\taddTriggerEvent({ eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\taddTriggerEvent({ eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\taddTriggerEvent({ eventType: 'Input', eventName: 'input' });\n\t\taddTriggerEvent({ eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\taddTriggerEvent({ eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\taddTriggerEvent({ eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\taddTriggerEvent({ eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tif('child' === resizeFrom){\n\t\t\taddTriggerEvent({ eventType: 'IFrame Resized', eventName: 'resize' });\n\t\t}\n\t}\n\n\tfunction checkCalcMode(calcMode,calcModeDefault,modes,type){\n\t\tif (calcModeDefault !== calcMode){\n\t\t\tif (!(calcMode in modes)){\n\t\t\t\twarn(calcMode + ' is not a valid option for '+type+'CalculationMethod.');\n\t\t\t\tcalcMode=calcModeDefault;\n\t\t\t}\n\t\t\tlog(type+' calculation method set to \"'+calcMode+'\"');\n\t\t}\n\t}\n\n\tfunction checkHeightMode(){\n\t\tcheckCalcMode(heightCalcMode,heightCalcModeDefault,getHeight,'height');\n\t}\n\n\tfunction checkWidthMode(){\n\t\tcheckCalcMode(widthCalcMode,widthCalcModeDefault,getWidth,'width');\n\t}\n\n\tfunction startEventListeners(){\n\t\tif ( true === autoResize ) {\n\t\t\tinitEventListeners();\n\t\t\tsetupMutationObserver();\n\t\t}\n\t\telse {\n\t\t\tlog('Auto Resize disabled');\n\t\t}\n\t}\n\n\tfunction injectClearFixIntoBodyElement(){\n\t\tvar clearFix = document.createElement('div');\n\t\tclearFix.style.clear = 'both';\n\t\tclearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n\t\tdocument.body.appendChild(clearFix);\n\t}\n\n\tfunction setupInPageLinks(){\n\n\t\tfunction getPagePosition (){\n\t\t\treturn {\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}\n\n\t\tfunction getElementPosition(el){\n\t\t\tvar\n\t\t\t\telPosition = el.getBoundingClientRect(),\n\t\t\t\tpagePosition = getPagePosition();\n\n\t\t\treturn {\n\t\t\t\tx: parseInt(elPosition.left,10) + parseInt(pagePosition.x,10),\n\t\t\t\ty: parseInt(elPosition.top,10) + parseInt(pagePosition.y,10)\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\tsendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\thash = location.split('#')[1] || location, //Remove # if present\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(target);\n\t\t\t} else {\n\t\t\t\tlog('In page link (#' + hash + ') not found in iFrame, so sending to parent');\n\t\t\t\tsendMsg(0,0,'inPageLink','#'+hash);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkLocationHash(){\n\t\t\tif ('' !== location.hash && '#' !== location.hash){\n\t\t\t\tfindTarget(location.href);\n\t\t\t}\n\t\t}\n\n\t\tfunction bindAnchors(){\n\t\t\tfunction setupLink(el){\n\t\t\t\tfunction linkClicked(e){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t/*jshint validthis:true */\n\t\t\t\t\tfindTarget(this.getAttribute('href'));\n\t\t\t\t}\n\n\t\t\t\tif ('#' !== el.getAttribute('href')){\n\t\t\t\t\taddEventListener(el,'click',linkClicked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tArray.prototype.forEach.call( document.querySelectorAll( 'a[href^=\"#\"]' ), setupLink );\n\t\t}\n\n\t\tfunction bindLocationHash(){\n\t\t\taddEventListener(window,'hashchange',checkLocationHash);\n\t\t}\n\n\t\tfunction initCheck(){ //check if page loaded with location hash after init resize\n\t\t\tsetTimeout(checkLocationHash,eventCancelTimer);\n\t\t}\n\n\t\tfunction enableInPageLinks(){\n\t\t\tif(Array.prototype.forEach && document.querySelectorAll){\n\t\t\t\tlog('Setting up location.hash handlers');\n\t\t\t\tbindAnchors();\n\t\t\t\tbindLocationHash();\n\t\t\t\tinitCheck();\n\t\t\t} else {\n\t\t\t\twarn('In page linking not fully supported in this browser! (See README.md for IE8 workaround)');\n\t\t\t}\n\t\t}\n\n\t\tif(inPageLinks.enable){\n\t\t\tenableInPageLinks();\n\t\t} else {\n\t\t\tlog('In page linking not enabled');\n\t\t}\n\n\t\treturn {\n\t\t\tfindTarget:findTarget\n\t\t};\n\t}\n\n\tfunction setupPublicMethods(){\n\t\tlog('Enable public methods');\n\n\t\twindow.parentIFrame = {\n\t\t\tclose: function closeF(){\n\t\t\t\tsendMsg(0,0,'close');\n\t\t\t},\n\n\t\t\tgetId: function getIdF(){\n\t\t\t\treturn myID;\n\t\t\t},\n\n\t\t\tmoveToAnchor: function moveToAnchorF(hash){\n\t\t\t\tinPageLinks.findTarget(hash);\n\t\t\t},\n\n\t\t\treset: function resetF(){\n\t\t\t\tresetIFrame('parentIFrame.reset');\n\t\t\t},\n\n\t\t\tscrollTo: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollTo'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tscrollToOffset: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tsendMessage: function sendMessageF(msg,targetOrigin){\n\t\t\t\tsendMsg(0,0,'message',JSON.stringify(msg),targetOrigin);\n\t\t\t},\n\n\t\t\tsetHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod){\n\t\t\t\theightCalcMode = heightCalculationMethod;\n\t\t\t\tcheckHeightMode();\n\t\t\t},\n\n\t\t\tsetWidthCalculationMethod: function setWidthCalculationMethodF(widthCalculationMethod){\n\t\t\t\twidthCalcMode = widthCalculationMethod;\n\t\t\t\tcheckWidthMode();\n\t\t\t},\n\n\t\t\tsetTargetOrigin: function setTargetOriginF(targetOrigin){\n\t\t\t\tlog('Set targetOrigin: '+targetOrigin);\n\t\t\t\ttargetOriginDefault = targetOrigin;\n\t\t\t},\n\n\t\t\tsize: function sizeF(customHeight, customWidth){\n\t\t\t\tvar valString = ''+(customHeight?customHeight:'')+(customWidth?','+customWidth:'');\n\t\t\t\tlockTrigger();\n\t\t\t\tsendSize('size','parentIFrame.size('+valString+')', customHeight, customWidth);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction initInterval(){\n\t\tif ( 0 !== interval ){\n\t\t\tlog('setInterval: '+interval+'ms');\n\t\t\tsetInterval(function(){\n\t\t\t\tsendSize('interval','setInterval: '+interval);\n\t\t\t},Math.abs(interval));\n\t\t}\n\t}\n\n\tfunction isNotSet(item){\n\t\treturn undefined === item || 0 === item;\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (element.complete === false) {\n\t\t\t\t\tlog('Attach listeners to ' + element.src);\n\t\t\t\t\telement.addEventListener('load', imageLoaded, false);\n\t\t\t\t\telement.addEventListener('error', imageLoaded, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'src'){\n\t\t\t\taddImageLoadListener(mutation.target);\n\t\t\t} else if (mutation.type === 'childList'){\n\t\t\t\tArray.prototype.forEach.call(\n\t\t\t\t\tmutation.target.querySelectorAll('img'),\n\t\t\t\t\taddImageLoadListener\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\tevent.target.removeEventListener('load', imageLoaded, false);\n\t\t\tevent.target.removeEventListener('error', imageLoaded, false);\n\t\t\tsendSize('imageLoad','Image loaded: ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction mutationObserved(mutations) {\n\t\t\tsendSize('mutationObserver','mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type);\n\n\t\t\t//Deal with WebKit asyncing image loading when tags are injected into the page\n\t\t\tmutations.forEach(addImageLoadListners);\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\tlog('Enable MutationObserver');\n\t\t\tobserver.observe(target, config);\n\t\t}\n\n\t\tvar\n\t\t\tforceIntervalTimer = 0 > interval,\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n\t\tif (MutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tcreateMutationObserver();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\twarn('MutationObserver not supported in this browser!');\n\t\t\tinitInterval();\n\t\t}\n\t}\n\n\n\t// document.documentElement.offsetHeight is not reliable, so\n\t// we have to jump through hoops to get a better value.\n\tfunction getComputedBodyStyle(prop) {\n\t\tfunction convertUnitsToPxForIE8(value) {\n\t\t\tvar PIXEL = /^\\d+(px)?$/i;\n\n\t\t\tif (PIXEL.test(value)) {\n\t\t\t\treturn parseInt(value,base);\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\tstyle = el.style.left,\n\t\t\t\truntimeStyle = el.runtimeStyle.left;\n\n\t\t\tel.runtimeStyle.left = el.currentStyle.left;\n\t\t\tel.style.left = value || 0;\n\t\t\tvalue = el.style.pixelLeft;\n\t\t\tel.style.left = style;\n\t\t\tel.runtimeStyle.left = runtimeStyle;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tvar\n\t\t\tel = document.body,\n\t\t\tretVal = 0;\n\n\t\tif (('defaultView' in document) && ('getComputedStyle' in document.defaultView)) {\n\t\t\tretVal = document.defaultView.getComputedStyle(el, null);\n\t\t\tretVal = (null !== retVal) ? retVal[prop] : 0;\n\t\t} else {//IE8\n\t\t\tretVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n\t\t}\n\n\t\treturn parseInt(retVal,base);\n\t}\n\n\t//Idea from https://github.com/guardian/iframe-messenger\n\tfunction getMaxElement(side,elements) {\n\t\tvar\n\t\t\telementsLength = elements.length,\n\t\t\tmaxVal = 0,\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\tif (elements[i].getBoundingClientRect()[side] > maxVal) {\n\t\t\t\tmaxVal = elements[i].getBoundingClientRect()[side];\n\t\t\t}\n\t\t}\n\n\t\ttimer = getNow() - timer;\n\n\t\tlog('Parsed '+elementsLength+' HTML elements');\n\t\tlog('Element position calculated in ' + timer + 'ms');\n\n\t\tif(timer > throttledTimer/2){\n\t\t\tthrottledTimer = 2*timer;\n\t\t\tlog('Event throttle increased to ' + throttledTimer + 'ms');\n\t\t}\n\n\t\treturn maxVal;\n\t}\n\n\tfunction getAllMeasurements(dimention){\n\t\treturn [\n\t\t\tdimention.bodyOffset(),\n\t\t\tdimention.bodyScroll(),\n\t\t\tdimention.documentElementOffset(),\n\t\t\tdimention.documentElementScroll()\n\t\t];\n\t}\n\n\tfunction getTaggedElements(side,tag){\n\t\tfunction noTaggedElementsFound(){\n\t\t\twarn('No tagged elements ('+tag+') found on page');\n\t\t\treturn height; //current height\n\t\t}\n\n\t\tvar elements = document.querySelectorAll('['+tag+']');\n\n\t\treturn 0 === elements.length ? noTaggedElementsFound() : getMaxElement(side,elements);\n\t}\n\n\tfunction getAllElements(){\n\t\treturn document.querySelectorAll('body *');\n\t}\n\n\tvar\n\t\tgetHeight = {\n\t\t\tbodyOffset: function getBodyOffsetHeight(){\n\t\t\t\treturn document.body.offsetHeight + getComputedBodyStyle('marginTop') + getComputedBodyStyle('marginBottom');\n\t\t\t},\n\n\t\t\toffset: function(){\n\t\t\t\treturn getHeight.bodyOffset(); //Backwards compatability\n\t\t\t},\n\n\t\t\tbodyScroll: function getBodyScrollHeight(){\n\t\t\t\treturn document.body.scrollHeight;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetHeight(){\n\t\t\t\treturn document.documentElement.offsetHeight;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollHeight(){\n\t\t\t\treturn document.documentElement.scrollHeight;\n\t\t\t},\n\n\t\t\tmax: function getMaxHeight(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tmin: function getMinHeight(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tgrow: function growHeight(){\n\t\t\t\treturn getHeight.max(); //Run max without the forced downsizing\n\t\t\t},\n\n\t\t\tlowestElement: function getBestHeight(){\n\t\t\t\treturn Math.max(getHeight.bodyOffset(), getMaxElement('bottom',getAllElements()));\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsHeight(){\n\t\t\t\treturn getTaggedElements('bottom','data-iframe-height');\n\t\t\t}\n\t\t},\n\n\t\tgetWidth = {\n\t\t\tbodyScroll: function getBodyScrollWidth(){\n\t\t\t\treturn document.body.scrollWidth;\n\t\t\t},\n\n\t\t\tbodyOffset: function getBodyOffsetWidth(){\n\t\t\t\treturn document.body.offsetWidth;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollWidth(){\n\t\t\t\treturn document.documentElement.scrollWidth;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetWidth(){\n\t\t\t\treturn document.documentElement.offsetWidth;\n\t\t\t},\n\n\t\t\tscroll: function getMaxWidth(){\n\t\t\t\treturn Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll());\n\t\t\t},\n\n\t\t\tmax: function getMaxWidth(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tmin: function getMinWidth(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tleftMostElement: function getLeftMostElement(){\n\t\t\t\treturn getMaxElement('left', getAllElements());\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsWidth(){\n\t\t\t\treturn getTaggedElements('left', 'data-iframe-width');\n\t\t\t}\n\t\t};\n\n\n\tfunction sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\n\t\tfunction resizeIFrame(){\n\t\t\theight = currentHeight;\n\t\t\twidth = currentWidth;\n\n\t\t\tsendMsg(height,width,triggerEvent);\n\t\t}\n\n\t\tfunction isSizeChangeDetected(){\n\t\t\tfunction checkTolarance(a,b){\n\t\t\t\tvar retVal = Math.abs(a-b) <= tolerance;\n\t\t\t\treturn !retVal;\n\t\t\t}\n\n\t\t\tcurrentHeight = (undefined !== customHeight) ? customHeight : getHeight[heightCalcMode]();\n\t\t\tcurrentWidth = (undefined !== customWidth ) ? customWidth : getWidth[widthCalcMode]();\n\n\t\t\treturn\tcheckTolarance(height,currentHeight) || (calculateWidth && checkTolarance(width,currentWidth));\n\t\t}\n\n\t\tfunction isForceResizableEvent(){\n\t\t\treturn !(triggerEvent in {'init':1,'interval':1,'size':1});\n\t\t}\n\n\t\tfunction isForceResizableCalcMode(){\n\t\t\treturn (heightCalcMode in resetRequiredMethods) || (calculateWidth && widthCalcMode in resetRequiredMethods);\n\t\t}\n\n\t\tfunction logIgnored(){\n\t\t\tlog('No change in size detected');\n\t\t}\n\n\t\tfunction checkDownSizing(){\n\t\t\tif (isForceResizableEvent() && isForceResizableCalcMode()){\n\t\t\t\tresetIFrame(triggerEventDesc);\n\t\t\t} else if (!(triggerEvent in {'interval':1})){\n\t\t\t\tlogIgnored();\n\t\t\t}\n\t\t}\n\n\t\tvar\tcurrentHeight,currentWidth;\n\n\t\tif (isSizeChangeDetected() || 'init' === triggerEvent){\n\t\t\tlockTrigger();\n\t\t\tresizeIFrame();\n\t\t} else {\n\t\t\tcheckDownSizing();\n\t\t}\n\t}\n\n\tvar sizeIFrameThrottled = throttle(sizeIFrame);\n\n\tfunction sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\t\tfunction recordTrigger(){\n\t\t\tif (!(triggerEvent in {'reset':1,'resetPage':1,'init':1})){\n\t\t\t\tlog( 'Trigger event: ' + triggerEventDesc );\n\t\t\t}\n\t\t}\n\n\t\tfunction isDoubleFiredEvent(){\n\t\t\treturn triggerLocked && (triggerEvent in doubleEventList);\n\t\t}\n\n\t\tif (!isDoubleFiredEvent()){\n\t\t\trecordTrigger();\n\t\t\tsizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth);\n\t\t} else {\n\t\t\tlog('Trigger event cancelled: '+triggerEvent);\n\t\t}\n\t}\n\n\tfunction lockTrigger(){\n\t\tif (!triggerLocked){\n\t\t\ttriggerLocked = true;\n\t\t\tlog('Trigger event lock on');\n\t\t}\n\t\tclearTimeout(triggerLockedTimer);\n\t\ttriggerLockedTimer = setTimeout(function(){\n\t\t\ttriggerLocked = false;\n\t\t\tlog('Trigger event lock off');\n\t\t\tlog('--');\n\t\t},eventCancelTimer);\n\t}\n\n\tfunction triggerReset(triggerEvent){\n\t\theight = getHeight[heightCalcMode]();\n\t\twidth = getWidth[widthCalcMode]();\n\n\t\tsendMsg(height,width,triggerEvent);\n\t}\n\n\tfunction resetIFrame(triggerEventDesc){\n\t\tvar hcm = heightCalcMode;\n\t\theightCalcMode = heightCalcModeDefault;\n\n\t\tlog('Reset trigger event: ' + triggerEventDesc);\n\t\tlockTrigger();\n\t\ttriggerReset('reset');\n\n\t\theightCalcMode = hcm;\n\t}\n\n\tfunction sendMsg(height,width,triggerEvent,msg,targetOrigin){\n\t\tfunction setTargetOrigin(){\n\t\t\tif (undefined === targetOrigin){\n\t\t\t\ttargetOrigin = targetOriginDefault;\n\t\t\t} else {\n\t\t\t\tlog('Message targetOrigin: '+targetOrigin);\n\t\t\t}\n\t\t}\n\n\t\tfunction sendToParent(){\n\t\t\tvar\n\t\t\t\tsize = height + ':' + width,\n\t\t\t\tmessage = myID + ':' + size + ':' + triggerEvent + (undefined !== msg ? ':' + msg : '');\n\n\t\t\tlog('Sending message to host page (' + message + ')');\n\t\t\twindow.parent.postMessage( msgID + message, targetOrigin);\n\t\t}\n\n\t\tsetTargetOrigin();\n\t\tsendToParent();\n\t}\n\n\tfunction receiver(event) {\n\t\tfunction isMessageForUs(){\n\t\t\treturn msgID === (''+event.data).substr(0,msgIdLen); //''+ Protects against non-string messages\n\t\t}\n\n\t\tfunction initFromParent(){\n\t\t\tinitMsg = event.data;\n\n\t\t\tinit();\n\t\t\tfirstRun = false;\n\t\t\tsetTimeout(function(){ initLock = false;},eventCancelTimer);\n\t\t}\n\n\t\tfunction resetFromParent(){\n\t\t\tif (!initLock){\n\t\t\t\tlog('Page size reset by host page');\n\t\t\t\ttriggerReset('resetPage');\n\t\t\t} else {\n\t\t\t\tlog('Page reset ignored by init');\n\t\t\t}\n\t\t}\n\n\t\tfunction resizeFromParent(){\n\t\t\tsendSize('resizeParent','Parent window requested size check');\n\t\t}\n\n\t\tfunction moveToAnchor(){\n\t\t\tvar anchor = getData();\n\t\t\tinPageLinks.findTarget(anchor);\n\t\t}\n\n\t\tfunction getMessageType(){\n\t\t\treturn event.data.split(']')[1].split(':')[0];\n\t\t}\n\n\t\tfunction getData(){\n\t\t\treturn event.data.substr(event.data.indexOf(':')+1);\n\t\t}\n\n\t\tfunction isMiddleTier(){\n\t\t\treturn ('iFrameResize' in window);\n\t\t}\n\n\t\tfunction messageFromParent(){\n\t\t\tvar msgBody = getData();\n\n\t\t\tlog('MessageCallback called from parent: ' + msgBody );\n\t\t\tmessageCallback(JSON.parse(msgBody));\n\t\t\tlog(' --');\n\t\t}\n\n\t\tfunction isInitMsg(){\n\t\t\t//Test if this message is from a child below us. This is an ugly test, however, updating\n\t\t\t//the message format would break backwards compatibity.\n\t\t\treturn event.data.split(':')[2] in {'true':1,'false':1};\n\t\t}\n\n\t\tfunction callFromParent(){\n\t\t\tswitch (getMessageType()){\n\t\t\tcase 'reset':\n\t\t\t\tresetFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'resize':\n\t\t\t\tresizeFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'moveToAnchor':\n\t\t\t\tmoveToAnchor();\n\t\t\t\tbreak;\n\t\t\tcase 'message':\n\t\t\t\tmessageFromParent();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!isMiddleTier() && !isInitMsg()){\n\t\t\t\t\t//warn('Unexpected message ('+event.data+')');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction processMessage(){\n\t\t\tif (false === firstRun) {\n\t\t\t\tcallFromParent();\n\t\t\t} else if (isInitMsg()) {\n\t\t\t\tinitFromParent();\n\t\t\t} else {\n\t\t\t\tlog('Ignored message of type \"' + getMessageType() + '\". Received before initialization.');\n\t\t\t}\n\t\t}\n\n\t\tif (isMessageForUs()){\n\t\t\tprocessMessage();\n\t\t}\n\t}\n\n\t//Normally the parent kicks things off when it detects the iFrame has loaded.\n\t//If this script is async-loaded, then tell parent page to retry init.\n\tfunction chkLateLoaded(){\n\t\tif('loading' !== document.readyState){\n\t\t\twindow.parent.postMessage('[iFrameResizerChild]Ready','*');\n\t\t}\n\t}\n\n\taddEventListener(window, 'message', receiver);\n\tchkLateLoaded();\n\n})(window || {});\n"]} \ No newline at end of file +{"version":3,"file":"iframeResizer.contentWindow.min.js","sources":["../src/iframeResizer.contentWindow.js"],"names":["window","addEventListener","el","evt","func","attachEvent","throttle","context","args","result","timeout","previous","later","getNow","apply","now","remaining","throttledTimer","this","arguments","clearTimeout","setTimeout","formatLogMsg","msg","msgID","myID","log","logging","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","readyCallback","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","undefined","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","addTriggerEvent","options","addListener","eventName","handleEvent","eventType","eventNames","Array","prototype","map","initEventListeners","checkCalcMode","calcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","clearFix","createElement","clear","display","appendChild","getPagePosition","x","pageXOffset","scrollLeft","y","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","findTarget","jumpToTarget","target","jumpPosition","hash","sendMsg","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","e","preventDefault","getAttribute","forEach","call","querySelectorAll","bindLocationHash","initCheck","eventCancelTimer","enableInPageLinks","parentIFrame","close","getId","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","valString","lockTrigger","initInterval","setInterval","Math","abs","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","attributeName","event","removeEventListener","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","forceIntervalTimer","WebKitMutationObserver","getComputedBodyStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","getComputedStyle","getMaxElement","side","elements","elementsLength","length","maxVal","timer","i","getAllMeasurements","dimention","bodyOffset","bodyScroll","documentElementOffset","documentElementScroll","getTaggedElements","tag","noTaggedElementsFound","getAllElements","sizeIFrame","triggerEvent","triggerEventDesc","resizeIFrame","currentHeight","width","currentWidth","isSizeChangeDetected","checkTolarance","a","b","isForceResizableEvent","isForceResizableCalcMode","resetRequiredMethods","logIgnored","checkDownSizing","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","parent","postMessage","receiver","isMessageForUs","initFromParent","firstRun","initLock","resetFromParent","resizeFromParent","anchor","getData","getMessageType","isMiddleTier","messageFromParent","msgBody","parse","isInitMsg","true","false","callFromParent","processMessage","chkLateLoaded","readyState","resize","click","max","min","Date","getTime","offsetHeight","offset","scrollHeight","grow","lowestElement","taggedElement","scrollWidth","offsetWidth","scroll","leftMostElement"],"mappings":"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","sourcesContent":["/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\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: Ian Caunce - ian@hallnet.co.uk\n */\n\n\n;(function(window) {\n\t'use strict';\n\n\tvar\n\t\tautoResize = true,\n\t\tbase = 10,\n\t\tbodyBackground = '',\n\t\tbodyMargin = 0,\n\t\tbodyMarginStr = '',\n\t\tbodyPadding = '',\n\t\tcalculateWidth = false,\n\t\tdoubleEventList = {'resize':1,'click':1},\n\t\teventCancelTimer = 128,\n\t\tfirstRun = true,\n\t\theight = 1,\n\t\theightCalcModeDefault = 'bodyOffset',\n\t\theightCalcMode = heightCalcModeDefault,\n\t\tinitLock = true,\n\t\tinitMsg = '',\n\t\tinPageLinks = {},\n\t\tinterval = 32,\n\t\tlogging = false,\n\t\tmsgID = '[iFrameSizer]', //Must match host page msg ID\n\t\tmsgIdLen = msgID.length,\n\t\tmyID = '',\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\ttargetOriginDefault = '*',\n\t\ttolerance = 0,\n\t\ttriggerLocked = false,\n\t\ttriggerLockedTimer = null,\n\t\tthrottledTimer = 0,\n\t\twidth = 1,\n\t\twidthCalcModeDefault = 'scroll',\n\t\twidthCalcMode = widthCalcModeDefault,\n\t\tmessageCallback = function(){warn('MessageCallback function not defined');},\n\t\treadyCallback = function(){};\n\n\n\tfunction addEventListener(el,evt,func){\n\t\tif ('addEventListener' in window){\n\t\t\tel.addEventListener(evt,func, false);\n\t\t} else if ('attachEvent' in window){ //IE\n\t\t\tel.attachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\t//Based on underscore.js\n\tfunction throttle(func) {\n\t\tvar\n\t\t\tcontext, args, result,\n\t\t\ttimeout = null,\n\t\t\tprevious = 0,\n\t\t\tlater = function() {\n\t\t\t\tprevious = getNow();\n\t\t\t\ttimeout = null;\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn function() {\n\t\t\tvar now = getNow();\n\n\t\t\tif (!previous) {\n\t\t\t\tprevious = now;\n\t\t\t}\n\n\t\t\tvar remaining = throttledTimer - (now - previous);\n\n\t\t\tcontext = this;\n\t\t\targs = arguments;\n\n\t\t\tif (remaining <= 0 || remaining > throttledTimer) {\n\t\t\t\tif (timeout) {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\ttimeout = null;\n\t\t\t\t}\n\n\t\t\t\tprevious = now;\n\t\t\t\tresult = func.apply(context, args);\n\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\n\t\t\t} else if (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, remaining);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar getNow = Date.now || function() {\n\t\treturn new Date().getTime();\n\t};\n\n\n\tfunction formatLogMsg(msg){\n\t\treturn msgID + '[' + myID + ']' + ' ' + msg;\n\t}\n\n\tfunction log(msg){\n\t\tif (logging && ('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\n\tfunction init(){\n\t\treadDataFromParent();\n\t\tlog('Initialising iFrame ('+location.href+')');\n\t\treadDataFromPage();\n\t\tsetMargin();\n\t\tsetBodyStyle('background',bodyBackground);\n\t\tsetBodyStyle('padding',bodyPadding);\n\t\tinjectClearFixIntoBodyElement();\n\t\tcheckHeightMode();\n\t\tcheckWidthMode();\n\t\tstopInfiniteResizingOfIFrame();\n\t\tsetupPublicMethods();\n\t\tstartEventListeners();\n\t\tinPageLinks = setupInPageLinks();\n\t\tsendSize('init','Init message from host page');\n\t\treadyCallback();\n\t}\n\n\tfunction readDataFromParent(){\n\n\t\tfunction strBool(str){\n\t\t\treturn 'true' === str ? true : false;\n\t\t}\n\n\t\tvar data = initMsg.substr(msgIdLen).split(':');\n\n\t\tmyID = data[0];\n\t\tbodyMargin = (undefined !== data[1]) ? Number(data[1]) : bodyMargin; //For V1 compatibility\n\t\tcalculateWidth = (undefined !== data[2]) ? strBool(data[2]) : calculateWidth;\n\t\tlogging = (undefined !== data[3]) ? strBool(data[3]) : logging;\n\t\tinterval = (undefined !== data[4]) ? Number(data[4]) : interval;\n\t\tautoResize = (undefined !== data[6]) ? strBool(data[6]) : autoResize;\n\t\tbodyMarginStr = data[7];\n\t\theightCalcMode = (undefined !== data[8]) ? data[8] : heightCalcMode;\n\t\tbodyBackground = data[9];\n\t\tbodyPadding = data[10];\n\t\ttolerance = (undefined !== data[11]) ? Number(data[11]) : tolerance;\n\t\tinPageLinks.enable = (undefined !== data[12]) ? strBool(data[12]): false;\n\t\tresizeFrom = (undefined !== data[13]) ? data[13] : resizeFrom;\n\t\twidthCalcMode = (undefined !== data[14]) ? data[14] : widthCalcMode;\n\t}\n\n\tfunction readDataFromPage(){\n\t\tfunction readData(){\n\t\t\tvar data = window.iFrameResizer;\n\n\t\t\tlog('Reading data from page: ' + JSON.stringify(data));\n\n\t\t\tmessageCallback = (undefined !== data.messageCallback ) ? data.messageCallback : messageCallback;\n\t\t\treadyCallback = (undefined !== data.readyCallback ) ? data.readyCallback : readyCallback;\n\t\t\ttargetOriginDefault = (undefined !== data.targetOrigin ) ? data.targetOrigin : targetOriginDefault;\n\t\t\theightCalcMode = (undefined !== data.heightCalculationMethod ) ? data.heightCalculationMethod : heightCalcMode;\n\t\t\twidthCalcMode = (undefined !== data.widthCalculationMethod ) ? data.widthCalculationMethod : widthCalcMode;\n\t\t}\n\n\t\tif(('iFrameResizer' in window) && (Object === window.iFrameResizer.constructor)) {\n\t\t\treadData();\n\t\t}\n\t}\n\n\n\tfunction chkCSS(attr,value){\n\t\tif (-1 !== value.indexOf('-')){\n\t\t\twarn('Negative CSS value ignored for '+attr);\n\t\t\tvalue='';\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setBodyStyle(attr,value){\n\t\tif ((undefined !== value) && ('' !== value) && ('null' !== value)){\n\t\t\tdocument.body.style[attr] = value;\n\t\t\tlog('Body '+attr+' set to \"'+value+'\"');\n\t\t}\n\t}\n\n\tfunction setMargin(){\n\t\t//If called via V1 script, convert bodyMargin from int to str\n\t\tif (undefined === bodyMarginStr){\n\t\t\tbodyMarginStr = bodyMargin+'px';\n\t\t}\n\t\tchkCSS('margin',bodyMarginStr);\n\t\tsetBodyStyle('margin',bodyMarginStr);\n\t}\n\n\tfunction stopInfiniteResizingOfIFrame(){\n\t\tdocument.documentElement.style.height = '';\n\t\tdocument.body.style.height = '';\n\t\tlog('HTML & body height set to \"auto\"');\n\t}\n\n\n\tfunction addTriggerEvent(options){\n\t\tfunction addListener(eventName){\n\t\t\tfunction handleEvent(){\n\t\t\t\tsendSize(options.eventName,options.eventType);\n\t\t\t}\n\n\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t}\n\n\t\tif(options.eventNames && Array.prototype.map){\n\t\t\toptions.eventName = options.eventNames[0];\n\t\t\toptions.eventNames.map(addListener);\n\t\t} else {\n\t\t\taddListener(options.eventName);\n\t\t}\n\n\t\tlog('Added event listener: ' + options.eventType);\n\t}\n\n\tfunction initEventListeners(){\n\t\taddTriggerEvent({ eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\taddTriggerEvent({ eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\taddTriggerEvent({ eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\taddTriggerEvent({ eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\taddTriggerEvent({ eventType: 'Input', eventName: 'input' });\n\t\taddTriggerEvent({ eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\taddTriggerEvent({ eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\taddTriggerEvent({ eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\taddTriggerEvent({ eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tif('child' === resizeFrom){\n\t\t\taddTriggerEvent({ eventType: 'IFrame Resized', eventName: 'resize' });\n\t\t}\n\t}\n\n\tfunction checkCalcMode(calcMode,calcModeDefault,modes,type){\n\t\tif (calcModeDefault !== calcMode){\n\t\t\tif (!(calcMode in modes)){\n\t\t\t\twarn(calcMode + ' is not a valid option for '+type+'CalculationMethod.');\n\t\t\t\tcalcMode=calcModeDefault;\n\t\t\t}\n\t\t\tlog(type+' calculation method set to \"'+calcMode+'\"');\n\t\t}\n\t}\n\n\tfunction checkHeightMode(){\n\t\tcheckCalcMode(heightCalcMode,heightCalcModeDefault,getHeight,'height');\n\t}\n\n\tfunction checkWidthMode(){\n\t\tcheckCalcMode(widthCalcMode,widthCalcModeDefault,getWidth,'width');\n\t}\n\n\tfunction startEventListeners(){\n\t\tif ( true === autoResize ) {\n\t\t\tinitEventListeners();\n\t\t\tsetupMutationObserver();\n\t\t}\n\t\telse {\n\t\t\tlog('Auto Resize disabled');\n\t\t}\n\t}\n\n\tfunction injectClearFixIntoBodyElement(){\n\t\tvar clearFix = document.createElement('div');\n\t\tclearFix.style.clear = 'both';\n\t\tclearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n\t\tdocument.body.appendChild(clearFix);\n\t}\n\n\tfunction setupInPageLinks(){\n\n\t\tfunction getPagePosition (){\n\t\t\treturn {\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}\n\n\t\tfunction getElementPosition(el){\n\t\t\tvar\n\t\t\t\telPosition = el.getBoundingClientRect(),\n\t\t\t\tpagePosition = getPagePosition();\n\n\t\t\treturn {\n\t\t\t\tx: parseInt(elPosition.left,10) + parseInt(pagePosition.x,10),\n\t\t\t\ty: parseInt(elPosition.top,10) + parseInt(pagePosition.y,10)\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\tsendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\thash = location.split('#')[1] || location, //Remove # if present\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(target);\n\t\t\t} else {\n\t\t\t\tlog('In page link (#' + hash + ') not found in iFrame, so sending to parent');\n\t\t\t\tsendMsg(0,0,'inPageLink','#'+hash);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkLocationHash(){\n\t\t\tif ('' !== location.hash && '#' !== location.hash){\n\t\t\t\tfindTarget(location.href);\n\t\t\t}\n\t\t}\n\n\t\tfunction bindAnchors(){\n\t\t\tfunction setupLink(el){\n\t\t\t\tfunction linkClicked(e){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t/*jshint validthis:true */\n\t\t\t\t\tfindTarget(this.getAttribute('href'));\n\t\t\t\t}\n\n\t\t\t\tif ('#' !== el.getAttribute('href')){\n\t\t\t\t\taddEventListener(el,'click',linkClicked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tArray.prototype.forEach.call( document.querySelectorAll( 'a[href^=\"#\"]' ), setupLink );\n\t\t}\n\n\t\tfunction bindLocationHash(){\n\t\t\taddEventListener(window,'hashchange',checkLocationHash);\n\t\t}\n\n\t\tfunction initCheck(){ //check if page loaded with location hash after init resize\n\t\t\tsetTimeout(checkLocationHash,eventCancelTimer);\n\t\t}\n\n\t\tfunction enableInPageLinks(){\n\t\t\tif(Array.prototype.forEach && document.querySelectorAll){\n\t\t\t\tlog('Setting up location.hash handlers');\n\t\t\t\tbindAnchors();\n\t\t\t\tbindLocationHash();\n\t\t\t\tinitCheck();\n\t\t\t} else {\n\t\t\t\twarn('In page linking not fully supported in this browser! (See README.md for IE8 workaround)');\n\t\t\t}\n\t\t}\n\n\t\tif(inPageLinks.enable){\n\t\t\tenableInPageLinks();\n\t\t} else {\n\t\t\tlog('In page linking not enabled');\n\t\t}\n\n\t\treturn {\n\t\t\tfindTarget:findTarget\n\t\t};\n\t}\n\n\tfunction setupPublicMethods(){\n\t\tlog('Enable public methods');\n\n\t\twindow.parentIFrame = {\n\t\t\tclose: function closeF(){\n\t\t\t\tsendMsg(0,0,'close');\n\t\t\t},\n\n\t\t\tgetId: function getIdF(){\n\t\t\t\treturn myID;\n\t\t\t},\n\n\t\t\tmoveToAnchor: function moveToAnchorF(hash){\n\t\t\t\tinPageLinks.findTarget(hash);\n\t\t\t},\n\n\t\t\treset: function resetF(){\n\t\t\t\tresetIFrame('parentIFrame.reset');\n\t\t\t},\n\n\t\t\tscrollTo: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollTo'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tscrollToOffset: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tsendMessage: function sendMessageF(msg,targetOrigin){\n\t\t\t\tsendMsg(0,0,'message',JSON.stringify(msg),targetOrigin);\n\t\t\t},\n\n\t\t\tsetHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod){\n\t\t\t\theightCalcMode = heightCalculationMethod;\n\t\t\t\tcheckHeightMode();\n\t\t\t},\n\n\t\t\tsetWidthCalculationMethod: function setWidthCalculationMethodF(widthCalculationMethod){\n\t\t\t\twidthCalcMode = widthCalculationMethod;\n\t\t\t\tcheckWidthMode();\n\t\t\t},\n\n\t\t\tsetTargetOrigin: function setTargetOriginF(targetOrigin){\n\t\t\t\tlog('Set targetOrigin: '+targetOrigin);\n\t\t\t\ttargetOriginDefault = targetOrigin;\n\t\t\t},\n\n\t\t\tsize: function sizeF(customHeight, customWidth){\n\t\t\t\tvar valString = ''+(customHeight?customHeight:'')+(customWidth?','+customWidth:'');\n\t\t\t\tlockTrigger();\n\t\t\t\tsendSize('size','parentIFrame.size('+valString+')', customHeight, customWidth);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction initInterval(){\n\t\tif ( 0 !== interval ){\n\t\t\tlog('setInterval: '+interval+'ms');\n\t\t\tsetInterval(function(){\n\t\t\t\tsendSize('interval','setInterval: '+interval);\n\t\t\t},Math.abs(interval));\n\t\t}\n\t}\n\n\tfunction isNotSet(item){\n\t\treturn undefined === item || 0 === item;\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (element.complete === false) {\n\t\t\t\t\tlog('Attach listeners to ' + element.src);\n\t\t\t\t\telement.addEventListener('load', imageLoaded, false);\n\t\t\t\t\telement.addEventListener('error', imageLoaded, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'src'){\n\t\t\t\taddImageLoadListener(mutation.target);\n\t\t\t} else if (mutation.type === 'childList'){\n\t\t\t\tArray.prototype.forEach.call(\n\t\t\t\t\tmutation.target.querySelectorAll('img'),\n\t\t\t\t\taddImageLoadListener\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\tevent.target.removeEventListener('load', imageLoaded, false);\n\t\t\tevent.target.removeEventListener('error', imageLoaded, false);\n\t\t\tsendSize('imageLoad','Image loaded: ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction mutationObserved(mutations) {\n\t\t\tsendSize('mutationObserver','mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type);\n\n\t\t\t//Deal with WebKit asyncing image loading when tags are injected into the page\n\t\t\tmutations.forEach(addImageLoadListners);\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\tlog('Enable MutationObserver');\n\t\t\tobserver.observe(target, config);\n\t\t}\n\n\t\tvar\n\t\t\tforceIntervalTimer = 0 > interval,\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n\t\tif (MutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tcreateMutationObserver();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\twarn('MutationObserver not supported in this browser!');\n\t\t\tinitInterval();\n\t\t}\n\t}\n\n\n\t// document.documentElement.offsetHeight is not reliable, so\n\t// we have to jump through hoops to get a better value.\n\tfunction getComputedBodyStyle(prop) {\n\t\tfunction convertUnitsToPxForIE8(value) {\n\t\t\tvar PIXEL = /^\\d+(px)?$/i;\n\n\t\t\tif (PIXEL.test(value)) {\n\t\t\t\treturn parseInt(value,base);\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\tstyle = el.style.left,\n\t\t\t\truntimeStyle = el.runtimeStyle.left;\n\n\t\t\tel.runtimeStyle.left = el.currentStyle.left;\n\t\t\tel.style.left = value || 0;\n\t\t\tvalue = el.style.pixelLeft;\n\t\t\tel.style.left = style;\n\t\t\tel.runtimeStyle.left = runtimeStyle;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tvar\n\t\t\tel = document.body,\n\t\t\tretVal = 0;\n\n\t\tif (('defaultView' in document) && ('getComputedStyle' in document.defaultView)) {\n\t\t\tretVal = document.defaultView.getComputedStyle(el, null);\n\t\t\tretVal = (null !== retVal) ? retVal[prop] : 0;\n\t\t} else {//IE8\n\t\t\tretVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n\t\t}\n\n\t\treturn parseInt(retVal,base);\n\t}\n\n\t//Idea from https://github.com/guardian/iframe-messenger\n\tfunction getMaxElement(side,elements) {\n\t\tvar\n\t\t\telementsLength = elements.length,\n\t\t\tmaxVal = 0,\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\tif (elements[i].getBoundingClientRect()[side] > maxVal) {\n\t\t\t\tmaxVal = elements[i].getBoundingClientRect()[side];\n\t\t\t}\n\t\t}\n\n\t\ttimer = getNow() - timer;\n\n\t\tlog('Parsed '+elementsLength+' HTML elements');\n\t\tlog('Element position calculated in ' + timer + 'ms');\n\n\t\tif(timer > throttledTimer/2){\n\t\t\tthrottledTimer = 2*timer;\n\t\t\tlog('Event throttle increased to ' + throttledTimer + 'ms');\n\t\t}\n\n\t\treturn maxVal;\n\t}\n\n\tfunction getAllMeasurements(dimention){\n\t\treturn [\n\t\t\tdimention.bodyOffset(),\n\t\t\tdimention.bodyScroll(),\n\t\t\tdimention.documentElementOffset(),\n\t\t\tdimention.documentElementScroll()\n\t\t];\n\t}\n\n\tfunction getTaggedElements(side,tag){\n\t\tfunction noTaggedElementsFound(){\n\t\t\twarn('No tagged elements ('+tag+') found on page');\n\t\t\treturn height; //current height\n\t\t}\n\n\t\tvar elements = document.querySelectorAll('['+tag+']');\n\n\t\treturn 0 === elements.length ? noTaggedElementsFound() : getMaxElement(side,elements);\n\t}\n\n\tfunction getAllElements(){\n\t\treturn document.querySelectorAll('body *');\n\t}\n\n\tvar\n\t\tgetHeight = {\n\t\t\tbodyOffset: function getBodyOffsetHeight(){\n\t\t\t\treturn document.body.offsetHeight + getComputedBodyStyle('marginTop') + getComputedBodyStyle('marginBottom');\n\t\t\t},\n\n\t\t\toffset: function(){\n\t\t\t\treturn getHeight.bodyOffset(); //Backwards compatability\n\t\t\t},\n\n\t\t\tbodyScroll: function getBodyScrollHeight(){\n\t\t\t\treturn document.body.scrollHeight;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetHeight(){\n\t\t\t\treturn document.documentElement.offsetHeight;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollHeight(){\n\t\t\t\treturn document.documentElement.scrollHeight;\n\t\t\t},\n\n\t\t\tmax: function getMaxHeight(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tmin: function getMinHeight(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tgrow: function growHeight(){\n\t\t\t\treturn getHeight.max(); //Run max without the forced downsizing\n\t\t\t},\n\n\t\t\tlowestElement: function getBestHeight(){\n\t\t\t\treturn Math.max(getHeight.bodyOffset(), getMaxElement('bottom',getAllElements()));\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsHeight(){\n\t\t\t\treturn getTaggedElements('bottom','data-iframe-height');\n\t\t\t}\n\t\t},\n\n\t\tgetWidth = {\n\t\t\tbodyScroll: function getBodyScrollWidth(){\n\t\t\t\treturn document.body.scrollWidth;\n\t\t\t},\n\n\t\t\tbodyOffset: function getBodyOffsetWidth(){\n\t\t\t\treturn document.body.offsetWidth;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollWidth(){\n\t\t\t\treturn document.documentElement.scrollWidth;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetWidth(){\n\t\t\t\treturn document.documentElement.offsetWidth;\n\t\t\t},\n\n\t\t\tscroll: function getMaxWidth(){\n\t\t\t\treturn Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll());\n\t\t\t},\n\n\t\t\tmax: function getMaxWidth(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tmin: function getMinWidth(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tleftMostElement: function getLeftMostElement(){\n\t\t\t\treturn getMaxElement('left', getAllElements());\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsWidth(){\n\t\t\t\treturn getTaggedElements('left', 'data-iframe-width');\n\t\t\t}\n\t\t};\n\n\n\tfunction sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\n\t\tfunction resizeIFrame(){\n\t\t\theight = currentHeight;\n\t\t\twidth = currentWidth;\n\n\t\t\tsendMsg(height,width,triggerEvent);\n\t\t}\n\n\t\tfunction isSizeChangeDetected(){\n\t\t\tfunction checkTolarance(a,b){\n\t\t\t\tvar retVal = Math.abs(a-b) <= tolerance;\n\t\t\t\treturn !retVal;\n\t\t\t}\n\n\t\t\tcurrentHeight = (undefined !== customHeight) ? customHeight : getHeight[heightCalcMode]();\n\t\t\tcurrentWidth = (undefined !== customWidth ) ? customWidth : getWidth[widthCalcMode]();\n\n\t\t\treturn\tcheckTolarance(height,currentHeight) || (calculateWidth && checkTolarance(width,currentWidth));\n\t\t}\n\n\t\tfunction isForceResizableEvent(){\n\t\t\treturn !(triggerEvent in {'init':1,'interval':1,'size':1});\n\t\t}\n\n\t\tfunction isForceResizableCalcMode(){\n\t\t\treturn (heightCalcMode in resetRequiredMethods) || (calculateWidth && widthCalcMode in resetRequiredMethods);\n\t\t}\n\n\t\tfunction logIgnored(){\n\t\t\tlog('No change in size detected');\n\t\t}\n\n\t\tfunction checkDownSizing(){\n\t\t\tif (isForceResizableEvent() && isForceResizableCalcMode()){\n\t\t\t\tresetIFrame(triggerEventDesc);\n\t\t\t} else if (!(triggerEvent in {'interval':1})){\n\t\t\t\tlogIgnored();\n\t\t\t}\n\t\t}\n\n\t\tvar\tcurrentHeight,currentWidth;\n\n\t\tif (isSizeChangeDetected() || 'init' === triggerEvent){\n\t\t\tlockTrigger();\n\t\t\tresizeIFrame();\n\t\t} else {\n\t\t\tcheckDownSizing();\n\t\t}\n\t}\n\n\tvar sizeIFrameThrottled = throttle(sizeIFrame);\n\n\tfunction sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\t\tfunction recordTrigger(){\n\t\t\tif (!(triggerEvent in {'reset':1,'resetPage':1,'init':1})){\n\t\t\t\tlog( 'Trigger event: ' + triggerEventDesc );\n\t\t\t}\n\t\t}\n\n\t\tfunction isDoubleFiredEvent(){\n\t\t\treturn triggerLocked && (triggerEvent in doubleEventList);\n\t\t}\n\n\t\tif (!isDoubleFiredEvent()){\n\t\t\trecordTrigger();\n\t\t\tsizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth);\n\t\t} else {\n\t\t\tlog('Trigger event cancelled: '+triggerEvent);\n\t\t}\n\t}\n\n\tfunction lockTrigger(){\n\t\tif (!triggerLocked){\n\t\t\ttriggerLocked = true;\n\t\t\tlog('Trigger event lock on');\n\t\t}\n\t\tclearTimeout(triggerLockedTimer);\n\t\ttriggerLockedTimer = setTimeout(function(){\n\t\t\ttriggerLocked = false;\n\t\t\tlog('Trigger event lock off');\n\t\t\tlog('--');\n\t\t},eventCancelTimer);\n\t}\n\n\tfunction triggerReset(triggerEvent){\n\t\theight = getHeight[heightCalcMode]();\n\t\twidth = getWidth[widthCalcMode]();\n\n\t\tsendMsg(height,width,triggerEvent);\n\t}\n\n\tfunction resetIFrame(triggerEventDesc){\n\t\tvar hcm = heightCalcMode;\n\t\theightCalcMode = heightCalcModeDefault;\n\n\t\tlog('Reset trigger event: ' + triggerEventDesc);\n\t\tlockTrigger();\n\t\ttriggerReset('reset');\n\n\t\theightCalcMode = hcm;\n\t}\n\n\tfunction sendMsg(height,width,triggerEvent,msg,targetOrigin){\n\t\tfunction setTargetOrigin(){\n\t\t\tif (undefined === targetOrigin){\n\t\t\t\ttargetOrigin = targetOriginDefault;\n\t\t\t} else {\n\t\t\t\tlog('Message targetOrigin: '+targetOrigin);\n\t\t\t}\n\t\t}\n\n\t\tfunction sendToParent(){\n\t\t\tvar\n\t\t\t\tsize = height + ':' + width,\n\t\t\t\tmessage = myID + ':' + size + ':' + triggerEvent + (undefined !== msg ? ':' + msg : '');\n\n\t\t\tlog('Sending message to host page (' + message + ')');\n\t\t\twindow.parent.postMessage( msgID + message, targetOrigin);\n\t\t}\n\n\t\tsetTargetOrigin();\n\t\tsendToParent();\n\t}\n\n\tfunction receiver(event) {\n\t\tfunction isMessageForUs(){\n\t\t\treturn msgID === (''+event.data).substr(0,msgIdLen); //''+ Protects against non-string messages\n\t\t}\n\n\t\tfunction initFromParent(){\n\t\t\tinitMsg = event.data;\n\n\t\t\tinit();\n\t\t\tfirstRun = false;\n\t\t\tsetTimeout(function(){ initLock = false;},eventCancelTimer);\n\t\t}\n\n\t\tfunction resetFromParent(){\n\t\t\tif (!initLock){\n\t\t\t\tlog('Page size reset by host page');\n\t\t\t\ttriggerReset('resetPage');\n\t\t\t} else {\n\t\t\t\tlog('Page reset ignored by init');\n\t\t\t}\n\t\t}\n\n\t\tfunction resizeFromParent(){\n\t\t\tsendSize('resizeParent','Parent window requested size check');\n\t\t}\n\n\t\tfunction moveToAnchor(){\n\t\t\tvar anchor = getData();\n\t\t\tinPageLinks.findTarget(anchor);\n\t\t}\n\n\t\tfunction getMessageType(){\n\t\t\treturn event.data.split(']')[1].split(':')[0];\n\t\t}\n\n\t\tfunction getData(){\n\t\t\treturn event.data.substr(event.data.indexOf(':')+1);\n\t\t}\n\n\t\tfunction isMiddleTier(){\n\t\t\treturn ('iFrameResize' in window);\n\t\t}\n\n\t\tfunction messageFromParent(){\n\t\t\tvar msgBody = getData();\n\n\t\t\tlog('MessageCallback called from parent: ' + msgBody );\n\t\t\tmessageCallback(JSON.parse(msgBody));\n\t\t\tlog(' --');\n\t\t}\n\n\t\tfunction isInitMsg(){\n\t\t\t//Test if this message is from a child below us. This is an ugly test, however, updating\n\t\t\t//the message format would break backwards compatibity.\n\t\t\treturn event.data.split(':')[2] in {'true':1,'false':1};\n\t\t}\n\n\t\tfunction callFromParent(){\n\t\t\tswitch (getMessageType()){\n\t\t\tcase 'reset':\n\t\t\t\tresetFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'resize':\n\t\t\t\tresizeFromParent();\n\t\t\t\tbreak;\n\t\t\tcase 'moveToAnchor':\n\t\t\t\tmoveToAnchor();\n\t\t\t\tbreak;\n\t\t\tcase 'message':\n\t\t\t\tmessageFromParent();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (!isMiddleTier() && !isInitMsg()){\n\t\t\t\t\t//warn('Unexpected message ('+event.data+')');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction processMessage(){\n\t\t\tif (false === firstRun) {\n\t\t\t\tcallFromParent();\n\t\t\t} else if (isInitMsg()) {\n\t\t\t\tinitFromParent();\n\t\t\t} else {\n\t\t\t\tlog('Ignored message of type \"' + getMessageType() + '\". Received before initialization.');\n\t\t\t}\n\t\t}\n\n\t\tif (isMessageForUs()){\n\t\t\tprocessMessage();\n\t\t}\n\t}\n\n\t//Normally the parent kicks things off when it detects the iFrame has loaded.\n\t//If this script is async-loaded, then tell parent page to retry init.\n\tfunction chkLateLoaded(){\n\t\tif('loading' !== document.readyState){\n\t\t\twindow.parent.postMessage('[iFrameResizerChild]Ready','*');\n\t\t}\n\t}\n\n\taddEventListener(window, 'message', receiver);\n\tchkLateLoaded();\n\n})(window || {});\n"]} \ No newline at end of file diff --git a/js/iframeResizer.contentWindow.min.js b/js/iframeResizer.contentWindow.min.js index 3483eabb1..7b2c8284c 100644 --- a/js/iframeResizer.contentWindow.min.js +++ b/js/iframeResizer.contentWindow.min.js @@ -1,4 +1,4 @@ -/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.1.0 - 2015-08-28 +/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.1.1 - 2015-08-30 * Desc: Include this file in any page being loaded into an iframe * to force the iframe to resize to the content size. * Requires: iframeResizer.min.js on host page. diff --git a/js/iframeResizer.map b/js/iframeResizer.map index ab37bf2a2..e7c3315df 100644 --- a/js/iframeResizer.map +++ b/js/iframeResizer.map @@ -1 +1 @@ -{"version":3,"file":"iframeResizer.min.js","sources":["iframeResizer.js"],"names":["window","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":";;;;;;;CAcC,SAAUA,GACV,YAgDA,SAASC,GAAiBC,EAAIC,EAAIC,GAC7B,oBAAsBJ,GACzBE,EAAID,iBAAiBE,EAAIC,GAAM,GACrB,eAAiBJ,IAC3BE,EAAIG,YAAY,KAAKF,EAAIC,GAI3B,QAASE,KACR,GAECC,GADAC,GAAW,MAAO,SAAU,IAAK,KAIlC,KAAKD,EAAI,EAAGA,EAAIC,EAAQC,SAAWC,EAAuBH,GAAK,EAC9DG,EAAwBV,EAAOQ,EAAQD,GAAK,wBAGxC,IACJI,EAAI,QAAQ,uCAId,QAASC,GAAQC,GAChB,GAAIC,GAAS,cAAcD,CAU3B,OARIb,GAAOe,MAAMf,EAAOgB,OAEtBF,EADGd,EAAOiB,aACDjB,EAAOiB,aAAaC,QAAQ,KAAKL,EAEjC,qBAAqBA,GAIzBC,EAIR,QAASK,GAAgBN,GACxB,MAAOO,GAAQ,IAAMR,EAAQC,GAAY,IAG1C,QAASF,GAAIE,EAASQ,IAChBC,EAAST,GAAYS,EAAST,GAAUF,IAAMY,IAAgB,gBAAoBvB,GAAOwB,SAC7FA,QAAQb,IAAIQ,EAAgBN,GAAUQ,GAIxC,QAASI,GAAKZ,EAASQ,GAClB,gBAAoBrB,GAAOwB,SAC9BA,QAAQC,KAAKN,EAAgBN,GAAUQ,GAIzC,QAASK,GAAeC,GACvB,QAASC,KACR,QAASC,KACRC,EAAQC,GACL,cAAgBA,EAAYC,MAAMC,EAAgBpB,GAGtDqB,EAAc,UACdA,EAAc,SAEdC,EAAWN,EAAOE,EAAY,aAG/B,QAASK,KACR,GAAIC,GAAOhB,EAAIiB,OAAOC,GAAUC,MAAM,IAEtC,QACCC,OAAQnB,EAASe,EAAK,IAAII,OAC1BC,GAAQL,EAAK,GACbM,OAAQN,EAAK,GACbO,MAAQP,EAAK,GACbL,KAAQK,EAAK,IAIf,QAASH,GAAcW,GACtB,GACCC,GAAOC,OAAOzB,EAAST,GAAU,MAAMgC,IACvCG,EAAOD,OAAOzB,EAAST,GAAU,MAAMgC,IACvCI,EAAYJ,EAAUK,cACtBC,EAAOJ,OAAOhB,EAAYkB,GAE3B,IAAID,EAAIF,EACP,KAAM,IAAIM,OAAM,gBAAgBP,EAAU,+BAA+BA,EAG1ElC,GAAIE,EAAS,YAAYoC,EAAU,gBAAgBD,EAAI,IAAIF,GAElDE,EAALG,IACHA,EAAKH,EACLrC,EAAIE,EAAS,OAAOoC,EAAU,kBAG3BE,EAAKL,IACRK,EAAKL,EACLnC,EAAIE,EAAS,OAAOoC,EAAU,kBAG/BlB,EAAYkB,GAAW,GAAGE,EAI3B,QAASE,KACR,QAASC,KACR,QAASC,KACR5C,EAAIE,EAAS,wDAA0D2C,EACvE,IAAIC,EACJ,KAAKA,EAAI,EAAGA,EAAID,EAAY/C,OAAQgD,IACnC,GAAID,EAAYC,KAAOC,EACtB,OAAO,CAGT,QAAO,EAGR,QAASC,KACR,GAAIC,GAActC,EAAST,GAAU+C,UAErC,OADAjD,GAAIE,EAAS,gCAAgC+C,GACtCF,IAAWE,EAGnB,MAAOJ,GAAYK,cAAgBC,MAAQP,IAAcI,IAG1D,GACCD,GAAc/B,EAAM+B,OACpBF,EAAclC,EAAST,GAAU2C,WAElC,IAAIA,GACE,GAAGE,GAAW,SAAYJ,IAC9B,KAAM,IAAIF,OACT,qCAAuCM,EACvC,QAAU3B,EAAYU,OAAOC,GAC7B,kBAAoBf,EAAMU,KAC1B,qHAKH,QAAO,EAGR,QAAS0B,KACR,MAAO3C,MAAY,GAAKC,GAAKiB,OAAO,EAAEC,IAAelB,EAAIiB,OAAOC,GAAUC,MAAM,KAAK,IAAMlB,GAG5F,QAAS0C,KAGR,GAAIC,GAAUlC,EAAYC,QAASkC,OAAO,EAAEC,QAAQ,EAAEC,UAAY,EAMlE,OAJIH,IACHtD,EAAIE,EAAS,+CAGPoD,EAGR,QAASI,GAAWC,GACnB,MAAOjD,GAAIiB,OAAOjB,EAAIkD,QAAQ,KAAKC,EAAaF,GAGjD,QAASG,GAAqBC,GAC7B/D,EAAIE,EAAS,oCAAqCkB,EAAYU,OAAOC,GAAK,cAAgBgC,EAAU,KACpGpD,EAAST,GAAU8D,iBAClBlC,OAAQV,EAAYU,OACpBmC,QAASC,KAAKC,MAAMJ,KAErB/D,EAAIE,EAAS,MAGd,QAASkE,KACR,MAAI,QAAShD,EAAYU,QACxBhB,EAAKZ,EAAS,WAAWkB,EAAYW,GAAG,gBACjC,IAED,EAGR,QAASsC,GAAmBC,GAC3B,GAAIC,GAAiBD,EAAOE,uBAI5B,OAFAC,GAAgBvE,IAGfN,EAAG8E,SAASH,EAAeI,KAAM,IAAMD,SAASE,EAAahF,EAAG,IAChEiF,EAAGH,SAASH,EAAenE,IAAK,IAAOsE,SAASE,EAAaC,EAAG,KAIlE,QAASC,GAAuBC,GAC/B,QAASC,KACRJ,EAAeK,EACfC,IACAlF,EAAIE,EAAS,MAGd,QAASiF,KACR,OACCvF,EAAGwC,OAAOhB,EAAYa,OAAS0B,EAAO/D,EACtCiF,EAAGzC,OAAOhB,EAAYY,QAAU2B,EAAOkB,GAIzC,GACClB,GAASoB,EAAYV,EAAmBjD,EAAYU,SAAWlC,EAAE,EAAEiF,EAAE,GACrEI,EAAcE,GAEfnF,GAAIE,EAAS,8CAA8CyD,EAAO/D,EAAE,MAAM+D,EAAOkB,EAAE,KAEhFxF,EAAOe,MAAMf,EAAOgB,KAClBhB,EAAOiB,aACVjB,EAAOiB,aAAa,YAAYyE,EAAU,SAAS,KAAKE,EAAYrF,EAAEqF,EAAYJ,GAElF/D,EAAKZ,EAAS,yEAGf8E,IAIF,QAASE,MACJ,IAAUvE,EAAST,GAAUkF,eAAeR,IAC/CtD,EAAgBpB,GAIlB,QAASmF,GAAWC,GACnB,QAASC,GAAajB,GACrB,GAAIkB,GAAenB,EAAmBC,EAEtCtE,GAAIE,EAAS,4BAA4BuF,EAAK,WAAWD,EAAa5F,EAAE,OAAO4F,EAAaX,GAC5FD,GACChF,EAAG4F,EAAa5F,EAChBiF,EAAGW,EAAaX,GAGjBK,IACAlF,EAAIE,EAAS,MAGd,GACCuF,GAAWH,EAASzD,MAAM,KAAK,IAAM,GACrC6D,EAAWC,mBAAmBF,GAC9BnB,EAAWsB,SAASC,eAAeH,IAAaE,SAASE,kBAAkBJ,GAAU,EAEnFrG,GAAOe,MAAMf,EAAOgB,KAClBhB,EAAOiB,aACVjB,EAAOiB,aAAayF,aAAaN,GAEjCzF,EAAIE,EAAS,iBAAiBuF,EAAK,gDAE1BnB,EACViB,EAAajB,GAEbtE,EAAIE,EAAS,iBAAiBuF,EAAK,cAIrC,QAASO,GAASvG,EAAKwG,GAClB,kBAAsBxG,IACzBA,EAAKwG,GAIP,QAASC,KAIR,OAFGvF,EAAST,GAAUiG,UAAUA,IAEzB/E,EAAYC,MACnB,IAAK,QACJ+E,EAAYhF,EAAYU,OACxB,MACD,KAAK,UACJgC,EAAqBJ,EAAW,GAChC,MACD,KAAK,WACJoB,GAAuB,EACvB,MACD,KAAK,iBACJA,GAAuB,EACvB,MACD,KAAK,aACJO,EAAW3B,EAAW,GACtB,MACD,KAAK,QACJ2C,EAAYjF,EACZ,MACD,KAAK,OACJH,IACA+E,EAASrF,EAAST,GAAUoG,aAAalF,EAAYU,QACrDkE,EAASrF,EAAST,GAAUqG,gBAAgBnF,EAC5C,MACD,SACCH,IACA+E,EAASrF,EAAST,GAAUqG,gBAAgBnF,IAI9C,QAASoF,GAAYtG,GACpB,GAAIuG,IAAU,CAOd,OALK9F,GAAST,KACbuG,GAAU,EACV3F,EAAKM,EAAYC,KAAO,oBAAsBnB,EAAW,kBAAoBQ,IAGvE+F,EAGR,QAASC,KACR,IAAK,GAAIxG,KAAYS,GACpBgG,EAAQ,wBAAwBC,EAAkB1G,GAAU0F,SAASC,eAAe3F,GAAUA,GAIhG,QAASiG,KACRxF,EAAST,GAAUiG,UAAW,EAG/B,GACCzF,GAAMM,EAAMU,KACZN,KACAlB,EAAW,IAET,+BAAgCQ,EAClCgG,IACUtD,MACVhC,EAAcK,IACdvB,EAAc2G,EAAQzF,EAAYW,IAE7BsB,KAA6BmD,EAAYtG,KAC7CF,EAAIE,EAAS,aAAaQ,GAErB0D,KAAuB1B,KAC3BwD,MAUJ,QAASE,GAAYtE,GACpB,GAAI5B,GAAW4B,EAAOC,EAEtB/B,GAAIE,EAAS,oBAAoBA,GACjC4B,EAAOgF,WAAWC,YAAYjF,GAC3BnB,EAAST,IACXS,EAAST,GAAU8G,eAAe9G,GAEnCF,EAAIE,EAAS,YACNS,GAAST,GAGjB,QAASuE,GAAgBvE,GACrB,OAAS0E,IACXA,GACChF,EAA2B6D,SAAvBpE,EAAO4H,YAA6B5H,EAAO4H,YAAcrB,SAASsB,gBAAgBC,WACtFtC,EAA2BpB,SAAvBpE,EAAO+H,YAA6B/H,EAAO+H,YAAcxB,SAASsB,gBAAgBG,WAEvFrH,EAAIE,EAAS,sBAAsB0E,EAAahF,EAAE,IAAIgF,EAAaC,IAIrE,QAASvD,GAAgBpB,GACrB,OAAS0E,IACXvF,EAAO6F,SAASN,EAAahF,EAAEgF,EAAaC,GAC5C7E,EAAIE,EAAS,sBAAsB0E,EAAahF,EAAE,IAAIgF,EAAaC,GACnED,EAAe,MAIjB,QAASyB,GAAYjF,GACpB,QAASkG,KACRnG,EAAQC,GACRuF,EAAQ,QAAQ,QAAQvF,EAAYU,OAAOV,EAAYW,IAGxD/B,EAAIoB,EAAYW,GAAG,4BAA4B,SAASX,EAAYC,KAAK,YAAY,WACrFoD,EAAgBrD,EAAYW,IAC5BP,EAAW8F,EAAMlG,EAAY,SAG9B,QAASD,GAAQC,GAChB,QAASmG,GAAajF,GACrBlB,EAAYU,OAAO0F,MAAMlF,GAAalB,EAAYkB,GAAa,KAC/DtC,EACCoB,EAAYW,GACZ,WAAa7B,EACb,KAAOoC,EACP,WAAalB,EAAYkB,GAAa,MAIxC,QAASmF,GAAQnF,GAKXoF,GAAsB,MAAQtG,EAAYkB,KAC9CoF,GAAqB,EACrB1H,EAAIE,EAAS,wDACbyH,KAIF,QAASC,GAAiBtF,GACzBiF,EAAajF,GACbmF,EAAQnF,GAGT,GAAIpC,GAAWkB,EAAYU,OAAOC,EAE/BpB,GAAST,KACPS,EAAST,GAAU2H,YAAcD,EAAiB,UAClDjH,EAAST,GAAU4H,WAAcF,EAAiB,UAIxD,QAASpG,GAAW/B,EAAK2B,EAAY2G,GACjCA,IAAY3G,EAAYC,MAAQtB,GAClCC,EAAIoB,EAAYW,GAAG,8BACnBhC,EAAsBN,IAEtBA,IAIF,QAASkH,GAAQqB,EAAUtH,EAAIoB,EAAOC,GACrC,QAASkG,KACRjI,EAAI+B,EAAG,IAAMiG,EAAY,2BAA2BjG,EAAG,MAAMrB,EAAI,KACjEoB,EAAOoG,cAAcC,YAAa1H,EAAQC,EAAK4D,GAGhD,QAAS8D,KACRtH,EAAKiB,EAAG,IAAMiG,EAAY,YAAYjG,EAAG,eACtCpB,EAASoB,UACJpB,GAASoB,GAIlBA,EAAKA,GAAMD,EAAOC,EAClB,IAAIuC,GAAS3D,EAASoB,GAAIsG,YAEvBvG,IAAU,iBAAmBA,GAC/BmG,IAEAG,IAIF,QAASxB,GAAkB1G,GAC1B,MAAOA,GACN,IAAMS,EAAST,GAAUoI,aACzB,IAAM3H,EAAST,GAAU4H,UACzB,IAAMnH,EAAST,GAAUF,IACzB,IAAMW,EAAST,GAAUqI,SACzB,IAAM5H,EAAST,GAAUsI,oBACzB,IAAM7H,EAAST,GAAUuI,WACzB,IAAM9H,EAAST,GAAUwI,WACzB,IAAM/H,EAAST,GAAUyI,wBACzB,IAAMhI,EAAST,GAAU0I,eACzB,IAAMjI,EAAST,GAAU2I,YACzB,IAAMlI,EAAST,GAAU4I,UACzB,IAAMnI,EAAST,GAAU6I,YACzB,IAAMpI,EAAST,GAAU8I,WACzB,IAAMrI,EAAST,GAAU+I,uBAG3B,QAASC,GAAYpH,EAAOqH,GAC3B,QAASC,KACR,QAASC,GAAS7B,GACZ8B,EAAAA,IAAa3I,EAAST,GAAUsH,IAAY,IAAM7G,EAAST,GAAUsH,KACzE1F,EAAO0F,MAAMA,GAAS7G,EAAST,GAAUsH,GAAS,KAClDxH,EAAIE,EAAS,OAAOsH,EAAM,MAAM7G,EAAST,GAAUsH,GAAO,OAI5D6B,EAAS,aACTA,EAAS,aACTA,EAAS,YACTA,EAAS,YAGV,QAASE,GAAYrJ,GAUpB,MATA2G,GAAM3G,EACF,KAAKA,IACR4B,EAAOC,GAAK7B,GAAYiJ,EAAQpH,IAAMyH,EAASzH,IAAM0H,IACrD7I,GAAcuI,OAAenJ,IAC7B6G,EAAM3G,EACNF,EAAIE,EAAS,4BAA6BA,EAAU,KAAO4B,EAAO4H,IAAM,MAIlExJ,EAGR,QAASyJ,KACR3J,EAAIE,EAAS,qBAAuBS,EAAST,GAAU0J,UAAY,UAAY,YAAc,QAAU1J,GACvG4B,EAAO0F,MAAMqC,UAAW,IAAUlJ,EAAST,GAAU0J,UAAY,SAAW,OAC5E9H,EAAO8H,WAAiB,IAAUjJ,EAAST,GAAU0J,UAAY,KAAO,MAMzE,QAASE,MACH,gBAAkBnJ,GAAST,GAAoB,YAAO,MAAMS,EAAST,GAAUwI,cACnF/H,EAAST,GAAUoI,aAAe3H,EAAST,GAAUwI,WACrD/H,EAAST,GAAUwI,WAAe,GAAK/H,EAAST,GAAUwI,WAAa,MAIzE,QAASqB,KAIR,GACC5D,GAAoBxF,EAAST,GAAUiG,SACvC6D,EAAoBrJ,EAAST,GAAUyI,0BAA2BsB,IAE9D9D,GAAY6D,GAChB3D,GAAavE,OAAOA,EAAQE,OAAO,EAAGC,MAAM,EAAGZ,KAAK,SAItD,QAAS6I,KACLC,SAASC,UAAUC,OACrB1J,EAAST,GAAU4B,OAAOwI,eAEzBC,MAAenE,EAAYiE,KAAK,KAAK1J,EAAST,GAAU4B,QAExDZ,OAAeyF,EAAQ0D,KAAK,KAAK,gBAAiB,SAAU1J,EAAST,GAAU4B,QAE/EiE,aAAe,SAASyE,GACvB7D,EAAQ,iBAAiB,cAAc6D,EAAQ7J,EAAST,GAAU4B,OAAO5B,IAG1EuK,YAAe,SAASxG,GACvBA,EAAUC,KAAKwG,UAAUzG,GACzB0C,EAAQ,eAAe,WAAW1C,EAAStD,EAAST,GAAU4B,OAAO5B,MASzE,QAASyK,GAAKjK,GACb,QAASkK,KACRjE,EAAQ,gBAAgBjG,EAAIoB,GAC5BiI,IAGDzK,EAAiBwC,EAAO,OAAO8I,GAC/BjE,EAAQ,OAAOjG,EAAIoB,GAGpB,QAAS+I,GAAa1B,GACrB,GAAI,gBAAoBA,GACvB,KAAM,IAAI2B,WAAU,6BAItB,QAASC,GAAY5B,GACpB,IAAK,GAAI6B,KAAUxB,GACdA,EAASyB,eAAeD,KAC3BrK,EAAST,GAAU8K,GAAU7B,EAAQ8B,eAAeD,GAAU7B,EAAQ6B,GAAUxB,EAASwB,IAK5F,QAASE,GAAiBjI,GACzB,MAAQ,KAAOA,GAAc,YAAcA,EAAc,IAAMA,EAGhE,QAASkI,GAAehC,GACvBA,EAAUA,MACVxI,EAAST,IACRiG,UAAW,EACXrE,OAAUA,EACVmB,WAAanB,EAAO4H,IAAI7H,MAAM,KAAKuJ,MAAM,EAAE,GAAGC,KAAK,MAGpDR,EAAa1B,GACb4B,EAAY5B,GAEZxI,EAAST,GAAUmI,cAAe,IAAS1H,EAAST,GAAU2C,YAAcqI,EAAgBvK,EAAST,GAAU+C,YAAc,IAG9H,QAASqI,KACR,MAAQpL,KAAYS,IAAY,iBAAmBmB,GAGpD,GAAI5B,GAAWqJ,EAAYzH,EAAOC,GAE7BuJ,KAQJxK,EAAKZ,EAAS,mCAPdiL,EAAehC,GACfQ,IACAP,IACAU,IACAa,EAAK/D,EAAkB1G,IACvBgK,KAMF,QAASqB,GAAQC,EAAGC,GACf,OAASC,IACZA,EAAQC,WAAW,WAClBD,EAAQ,KACRF,KACEC,IAIL,QAASG,GAAUC,GAClB,MAAQ,QAASA,EAAGC,aAGrB,QAASnE,KACR,QAASoE,KACR,QAASC,GAAYC,GACpB,QAASC,GAAa5J,GACrB,MAAO,QAAU3B,EAASsL,GAAWnK,OAAO0F,MAAMlF,GAG/CsJ,EAAUjL,EAASsL,GAAWnK,UAAYoK,EAAa,WAAaA,EAAa,WACpFvF,EAAQ,oBAAqB,SAAUhG,EAASsL,GAAWnK,OAAOmK,GAIpE,IAAK,GAAIA,KAAatL,GACrBqL,EAAYC,GAId,QAASE,GAAiBC,GACzBpM,EAAI,SAAS,sBAAwBoM,EAAU,GAAG9H,OAAS,IAAM8H,EAAU,GAAG/K,MAC9EkK,EAAQQ,EAAa,IAGtB,QAASM,KACR,GACC/H,GAASsB,SAAS0G,cAAc,QAEhCC,GACCC,YAAwB,EACxBC,mBAAwB,EACxBC,eAAwB,EACxBC,uBAAwB,EACxBC,WAAwB,EACxBC,SAAwB,GAGzBC,EAAW,GAAIC,GAAiBZ,EAEjCW,GAASE,QAAQ1I,EAAQiI,GAG1B,GAAIQ,GAAmB1N,EAAO0N,kBAAoB1N,EAAO4N,sBAErDF,IAAkBV,IAGvB,QAASa,KACR,QAASC,GAAcnM,GACtB,QAASE,KACRkM,EAAe,UAAUpM,EAAM,UAGhChB,EAAI,SAAS,kBAAkBgB,GAC/BuK,EAAQrK,EAAO,IAGhB,QAASmM,KACR,QAASnM,KACRkM,EAAe,cAAc,UAG3B,WAAaxH,SAAS0H,kBACxBtN,EAAI,WAAW,mCACfuL,EAAQrK,EAAO,KAIjB,QAASkM,GAAeG,EAAUvM,GACjC,QAASwM,GAAsBtN,GAC9B,MAAO,WAAaS,EAAST,GAAU8I,YACrCrI,EAAST,GAAUuI,aAClB9H,EAAST,GAAUiG,SAGvB,IAAK,GAAIjG,KAAYS,GACjB6M,EAAsBtN,IACxByG,EAAQ4G,EAAUvM,EAAM4E,SAASC,eAAe3F,GAAUA,GAK7DZ,EAAiBD,EAAO,UAAU0B,GAElCzB,EAAiBD,EAAO,SAAU,WAAW8N,EAAc,YAE3D7N,EAAiBsG,SAAS,mBAAmByH,GAC7C/N,EAAiBsG,SAAS,2BAA2ByH,GACrD/N,EAAiBD,EAAO,UAAU,WAAW8N,EAAc,WAC3D7N,EAAiBD,EAAO,QAAQ,WAAW8N,EAAc,WAI1D,QAASM,KACR,QAAS9C,GAAKxB,EAAQuE,GACrB,IAAIA,EAAQC,QACX,KAAM,IAAI7C,WAAU,oCACd,IAAI,WAAa4C,EAAQC,QAAQC,cACvC,KAAM,IAAI9C,WAAU,iCAAiC4C,EAAQC,QAAQ,KAErEzE,GAAYwE,EAASvE,GACrB0E,EAAQC,KAAKJ,GAIf,GAAIG,EAKJ,OAHAlO,KACAuN,IAEO,SAAuB/D,EAAQ7E,GAGrC,OAFAuJ,WAEc,IACd,IAAK,YACL,IAAK,SACJ1K,MAAMiH,UAAU2D,QAAQC,KACvBpI,SAASqI,iBAAkB3J,GAAU,UACrCqG,EAAKN,KAAK5G,OAAW0F,GAEtB,MACD,KAAK,SACJwB,EAAKxB,EAAQ7E,EACb,MACD,SACC,KAAM,IAAIwG,WAAU,+BAA+B,GAAS,MAG7D,MAAO+C,IAIT,QAASK,GAAyBC,GACjCA,EAAE3C,GAAG4C,aAAe,SAAwBjF,GAC3C,MAAOkF,MAAKC,OAAO,UAAUC,KAAK,SAAUC,EAAOd,GAClDxE,EAAYwE,EAASvE,KACnBsF,OAzyBL,GACChF,GAAwB,EACxB7I,GAAwB,EACxB8G,GAAwB,EACxBgH,EAAwB,UACxB7K,EAAwB6K,EAAU5O,OAClCW,EAAwB,gBACxBmB,EAAwBnB,EAAMX,OAC9B8E,EAAwB,KACxB7E,EAAwBV,EAAOU,sBAC/BkK,GAAyB9H,IAAI,EAAEwM,OAAO,EAAEC,WAAW,EAAEC,sBAAsB,GAC3ElO,KACA+K,EAAwB,KACxB7E,EAAuB,YAGvB2C,GACCf,YAA4B,EAC5BG,eAA4B,KAC5BF,WAA4B,KAC5BJ,aAA4B,EAC5BO,YAA4B,KAC5BhG,aAA4B,EAC5BkG,aAA4B,EAC5BP,qBAA4B,EAC5BG,wBAA4B,aAC5B5G,GAA4B,gBAC5BwG,SAA4B,GAC5BvI,KAA4B,EAC5B8O,UAA4BxF,EAAAA,EAC5ByF,SAA4BzF,EAAAA,EAC5B0F,UAA4B,EAC5BC,SAA4B,EAC5BjG,WAA4B,SAC5BY,WAA4B,EAC5B/B,YAA4B,EAC5BC,WAA4B,EAC5BgB,UAA4B,EAC5BG,uBAA4B,SAC5BjC,eAA4B,aAC5BV,aAA4B,aAC5BtC,gBAA4B,WAAWlD,EAAK,yCAC5CyF,gBAA4B,aAC5BnB,eAA4B,WAAW,OAAO,GAkwB5C/F,GAAO6P,QAAUhB,EAAyBgB,QAExB,kBAAXC,SAAyBA,OAAOC,IAC1CD,UAAU1B,GACkB,gBAAX4B,SAAiD,gBAAnBA,QAAOC,QACtDD,OAAOC,QAAU7B,IAEjBpO,EAAO+O,aAAe/O,EAAO+O,cAAgBX,KAG5CpO","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\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 (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\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