From 653dab8c0bd0701d8c65f33a3f5a80cd0de47cdd Mon Sep 17 00:00:00 2001 From: "David J. Bradshaw" Date: Fri, 4 Sep 2015 12:17:18 +0100 Subject: [PATCH] Release v3.2.0 --- bower.json | 2 +- iframeResizer.jquery.json | 2 +- js/iframeResizer.contentWindow.map | 2 +- js/iframeResizer.contentWindow.min.js | 4 ++-- js/iframeResizer.map | 2 +- js/iframeResizer.min.js | 4 ++-- package.json | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bower.json b/bower.json index afeb12f0e..71ebe98cf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "iframe-resizer", - "version": "3.1.1", + "version": "3.2.0", "homepage": "https://github.com/davidjbradshaw/iframe-resizer", "authors": [ "David J. Bradshaw " diff --git a/iframeResizer.jquery.json b/iframeResizer.jquery.json index 94c2cfd35..5099c5b75 100644 --- a/iframeResizer.jquery.json +++ b/iframeResizer.jquery.json @@ -17,7 +17,7 @@ "RWD", "responsive" ], - "version": "3.1.1", + "version": "3.2.0", "author": { "name": "David J. Bradshaw", "email": "davidjbradshaw+github@gmail.com" diff --git a/js/iframeResizer.contentWindow.map b/js/iframeResizer.contentWindow.map index be56e3eb3..2a20237cd 100644 --- a/js/iframeResizer.contentWindow.map +++ b/js/iframeResizer.contentWindow.map @@ -1 +1 @@ -{"version":3,"file":"iframeResizer.contentWindow.min.js","sources":["../src/iframeResizer.contentWindow.js"],"names":["window","addEventListener","el","evt","func","attachEvent","removeEventListener","detachEvent","capitalizeFirstLetter","string","charAt","toUpperCase","slice","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","manageTriggerEvent","options","handleEvent","eventName","eventType","listener","add","remove","eventNames","Array","prototype","map","method","manageEventListeners","checkCalcMode","calcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","stopMsgsToParent","sendPermit","removeMsgListener","receiver","disconnectMutationObserver","bodyObserver","disconnect","teardown","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","setupBodyMutationObserver","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","imageError","elements","push","attributeName","removeFromArray","splice","removeImageLoadListener","imageEventTriggered","event","typeDesc","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","WebKitMutationObserver","forceIntervalTimer","getComputedBodyStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","getComputedStyle","chkEventThottle","timer","getMaxElement","side","elementsLength","length","elVal","maxVal","Side","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","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\tbodyObserver = null,\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\tobserver = null,\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\tsendPermit = true,\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\tfunction removeEventListener(el,evt,func){\n\t\tif ('removeEventListener' in window){\n\t\t\tel.removeEventListener(evt,func, false);\n\t\t} else if ('detachEvent' in window){ //IE\n\t\t\tel.detachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction capitalizeFirstLetter(string) {\n\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\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 manageTriggerEvent(options){\n\t\tfunction handleEvent(){\n\t\t\tsendSize(options.eventName,options.eventType);\n\t\t}\n\n\t\tvar listener = {\n\t\t\tadd: function(eventName){\n\t\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t\t},\n\t\t\tremove: function(eventName){\n\t\t\t\tremoveEventListener(window,eventName,handleEvent);\n\t\t\t}\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(listener[options.method]);\n\t\t} else {\n\t\t\tlistener[options.method](options.eventName);\n\t\t}\n\n\t\tlog(capitalizeFirstLetter(options.method) + ' event listener: ' + options.eventType);\n\t}\n\n\tfunction manageEventListeners(method){\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Input', eventName: 'input' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tif('child' === resizeFrom){\n\t\t\tmanageTriggerEvent({method:method, 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\tmanageEventListeners('add');\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 stopMsgsToParent(){\n\t\tlog('Disable outgoing messages');\n\t\tsendPermit = false;\n\t}\n\n\tfunction removeMsgListener(){\n\t\tlog('Remove event listener: Message');\n\t\tremoveEventListener(window, 'message', receiver);\n\t}\n\n\tfunction disconnectMutationObserver(){\n\t\tif ('disconnect' in bodyObserver){\n\t\t\tbodyObserver.disconnect();\n\t\t}\n\t}\n\n\tfunction teardown(){\n\t\tstopMsgsToParent();\n\t\tremoveMsgListener();\n\t\tmanageEventListeners('remove');\n\t\tdisconnectMutationObserver();\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\tteardown();\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 setupBodyMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (false === element.complete) {\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', imageError, false);\n\t\t\t\t\telements.push(element);\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 removeFromArray(element){\n\t\t\telements.splice(elements.indexOf(element),1);\n\t\t}\n\n\t\tfunction removeImageLoadListener(element){\n\t\t\tlog('Remove listeners from ' + element.src);\n\t\t\telement.removeEventListener('load', imageLoaded, false);\n\t\t\telement.removeEventListener('error', imageError, false);\n\t\t\tremoveFromArray(element);\n\t\t}\n\n\t\tfunction imageEventTriggered(event,type,typeDesc){\n\t\t\tremoveImageLoadListener(event.target);\n\t\t\tsendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\timageEventTriggered(event,'imageLoad','Image loaded');\n\t\t}\n\n\t\tfunction imageError(event) {\n\t\t\timageEventTriggered(event,'imageLoadFailed','Image load failed');\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\tobserver = new MutationObserver(mutationObserved);\n\n\t\t\tlog('Enable MutationObserver');\n\t\t\tobserver.observe(target, config);\n\n\t\t\treturn observer;\n\t\t}\n\n\t\tvar\n\t\t\telements = [],\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver,\n\t\t\tobserver = createMutationObserver();\n\n\t\treturn {\n\t\t\tdisconnect: function (){\n\t\t\t\tif ('disconnect' in observer){\n\t\t\t\t\tlog('Disconnect MutationObserver');\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\telements.forEach(removeImageLoadListener);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tvar\tforceIntervalTimer = 0 > interval;\n\n\t\tif (window.MutationObserver || window.WebKitMutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tbodyObserver = setupBodyMutationObserver();\n\t\t\t}\n\t\t} else {\n\t\t\tlog('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\tfunction chkEventThottle(timer){\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\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\telVal = 0,\n\t\t\tmaxVal = 0,\n\t\t\tSide = capitalizeFirstLetter(side),\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\telVal = elements[i].getBoundingClientRect()[side] + getComputedBodyStyle('margin'+Side);\n\t\t\tif (elVal > maxVal) {\n\t\t\t\tmaxVal = elVal;\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\tchkEventThottle(timer);\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\tif(true === sendPermit){\n\t\t\tsetTargetOrigin();\n\t\t\tsendToParent();\n\t\t}\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","removeEventListener","detachEvent","capitalizeFirstLetter","string","charAt","toUpperCase","slice","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","manageTriggerEvent","options","handleEvent","eventName","eventType","listener","add","remove","eventNames","Array","prototype","map","method","manageEventListeners","checkCalcMode","calcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","stopMsgsToParent","sendPermit","removeMsgListener","receiver","disconnectMutationObserver","bodyObserver","disconnect","teardown","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","setupBodyMutationObserver","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","imageError","elements","push","attributeName","removeFromArray","splice","removeImageLoadListener","imageEventTriggered","event","typeDesc","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","WebKitMutationObserver","forceIntervalTimer","getComputedBodyStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","getComputedStyle","chkEventThottle","timer","getMaxElement","side","elementsLength","length","elVal","maxVal","Side","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","postMessage","isMessageForUs","initFromParent","source","firstRun","initLock","resetFromParent","resizeFromParent","anchor","getData","getMessageType","isMiddleTier","messageFromParent","msgBody","parse","isInitMsg","true","false","callFromParent","processMessage","chkLateLoaded","readyState","parent","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\tbodyObserver = null,\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\tobserver = null,\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\tsendPermit = true,\n\t\ttarget = window.parent,\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\t/* istanbul ignore else */\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\tfunction removeEventListener(el,evt,func){\n\t\t/* istanbul ignore else */\n\t\tif ('removeEventListener' in window){\n\t\t\tel.removeEventListener(evt,func, false);\n\t\t} else if ('detachEvent' in window){ //IE\n\t\t\tel.detachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction capitalizeFirstLetter(string) {\n\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\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\t/* istanbul ignore next */\n\tfunction formatLogMsg(msg){\n\t\treturn msgID + '[' + myID + ']' + ' ' + msg;\n\t}\n\n\t/* istanbul ignore next */\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\t/* istanbul ignore next */\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 manageTriggerEvent(options){\n\t\tfunction handleEvent(){\n\t\t\tsendSize(options.eventName,options.eventType);\n\t\t}\n\n\t\tvar listener = {\n\t\t\tadd: function(eventName){\n\t\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t\t},\n\t\t\tremove: function(eventName){\n\t\t\t\tremoveEventListener(window,eventName,handleEvent);\n\t\t\t}\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(listener[options.method]);\n\t\t} else {\n\t\t\tlistener[options.method](options.eventName);\n\t\t}\n\n\t\tlog(capitalizeFirstLetter(options.method) + ' event listener: ' + options.eventType);\n\t}\n\n\tfunction manageEventListeners(method){\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Input', eventName: 'input' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tif('child' === resizeFrom){\n\t\t\tmanageTriggerEvent({method:method, 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\tmanageEventListeners('add');\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 stopMsgsToParent(){\n\t\tlog('Disable outgoing messages');\n\t\tsendPermit = false;\n\t}\n\n\tfunction removeMsgListener(){\n\t\tlog('Remove event listener: Message');\n\t\tremoveEventListener(window, 'message', receiver);\n\t}\n\n\tfunction disconnectMutationObserver(){\n\t\tif (null !== bodyObserver){\n\t\t\tbodyObserver.disconnect();\n\t\t}\n\t}\n\n\tfunction teardown(){\n\t\tstopMsgsToParent();\n\t\tremoveMsgListener();\n\t\tmanageEventListeners('remove');\n\t\tdisconnectMutationObserver();\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 (undefined !== 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\t/* istanbul ignore else */\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\t/* istanbul ignore else */\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\tteardown();\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 setupBodyMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (false === element.complete) {\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', imageError, false);\n\t\t\t\t\telements.push(element);\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 removeFromArray(element){\n\t\t\telements.splice(elements.indexOf(element),1);\n\t\t}\n\n\t\tfunction removeImageLoadListener(element){\n\t\t\tlog('Remove listeners from ' + element.src);\n\t\t\telement.removeEventListener('load', imageLoaded, false);\n\t\t\telement.removeEventListener('error', imageError, false);\n\t\t\tremoveFromArray(element);\n\t\t}\n\n\t\tfunction imageEventTriggered(event,type,typeDesc){\n\t\t\tremoveImageLoadListener(event.target);\n\t\t\tsendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\timageEventTriggered(event,'imageLoad','Image loaded');\n\t\t}\n\n\t\tfunction imageError(event) {\n\t\t\timageEventTriggered(event,'imageLoadFailed','Image load failed');\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\tobserver = new MutationObserver(mutationObserved);\n\n\t\t\tlog('Enable MutationObserver');\n\t\t\tobserver.observe(target, config);\n\n\t\t\treturn observer;\n\t\t}\n\n\t\tvar\n\t\t\telements = [],\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver,\n\t\t\tobserver = createMutationObserver();\n\n\t\treturn {\n\t\t\tdisconnect: function (){\n\t\t\t\tif ('disconnect' in observer){\n\t\t\t\t\tlog('Disconnect MutationObserver');\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\telements.forEach(removeImageLoadListener);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tvar\tforceIntervalTimer = 0 > interval;\n\n\t\tif (window.MutationObserver || window.WebKitMutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tbodyObserver = setupBodyMutationObserver();\n\t\t\t}\n\t\t} else {\n\t\t\tlog('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\tfunction chkEventThottle(timer){\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\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\telVal = 0,\n\t\t\tmaxVal = 0,\n\t\t\tSide = capitalizeFirstLetter(side),\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\telVal = elements[i].getBoundingClientRect()[side] + getComputedBodyStyle('margin'+Side);\n\t\t\tif (elVal > maxVal) {\n\t\t\t\tmaxVal = elVal;\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\tchkEventThottle(timer);\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\ttarget.postMessage( msgID + message, targetOrigin);\n\t\t}\n\n\t\tif(true === sendPermit){\n\t\t\tsetTargetOrigin();\n\t\t\tsendToParent();\n\t\t}\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\t\t\ttarget = event.source;\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\t\n})(window || {});\n"]} \ No newline at end of file diff --git a/js/iframeResizer.contentWindow.min.js b/js/iframeResizer.contentWindow.min.js index 20981026e..c4f3126bf 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-09-02 +/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.2.0 - 2015-09-04 * 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. @@ -6,5 +6,5 @@ * License: MIT */ -!function(a){"use strict";function b(b,c,d){"addEventListener"in a?b.addEventListener(c,d,!1):"attachEvent"in a&&b.attachEvent("on"+c,d)}function c(b,c,d){"removeEventListener"in a?b.removeEventListener(c,d,!1):"detachEvent"in a&&b.detachEvent("on"+c,d)}function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}function e(a){var b,c,d,e=null,f=0,g=function(){f=Aa(),e=null,d=a.apply(b,c),e||(b=c=null)};return function(){var h=Aa();f||(f=h);var i=ua-(h-f);return b=this,c=arguments,0>=i||i>ua?(e&&(clearTimeout(e),e=null),f=h,d=a.apply(b,c),e||(b=c=null)):e||(e=setTimeout(g,i)),d}}function f(a){return ka+"["+ma+"] "+a}function g(b){ja&&"object"==typeof a.console&&console.log(f(b))}function h(b){"object"==typeof a.console&&console.warn(f(b))}function i(){j(),g("Initialising iFrame ("+location.href+")"),k(),n(),m("background",V),m("padding",Z),z(),s(),t(),o(),B(),u(),ha=A(),M("init","Init message from host page"),za()}function j(){function a(a){return"true"===a?!0:!1}var b=ga.substr(la).split(":");ma=b[0],W=void 0!==b[1]?Number(b[1]):W,$=void 0!==b[2]?a(b[2]):$,ja=void 0!==b[3]?a(b[3]):ja,ia=void 0!==b[4]?Number(b[4]):ia,T=void 0!==b[6]?a(b[6]):T,X=b[7],ea=void 0!==b[8]?b[8]:ea,V=b[9],Z=b[10],ra=void 0!==b[11]?Number(b[11]):ra,ha.enable=void 0!==b[12]?a(b[12]):!1,oa=void 0!==b[13]?b[13]:oa,xa=void 0!==b[14]?b[14]:xa}function k(){function b(){var b=a.iFrameResizer;g("Reading data from page: "+JSON.stringify(b)),ya=void 0!==b.messageCallback?b.messageCallback:ya,za=void 0!==b.readyCallback?b.readyCallback:za,qa=void 0!==b.targetOrigin?b.targetOrigin:qa,ea=void 0!==b.heightCalculationMethod?b.heightCalculationMethod:ea,xa=void 0!==b.widthCalculationMethod?b.widthCalculationMethod:xa}"iFrameResizer"in a&&Object===a.iFrameResizer.constructor&&b()}function l(a,b){return-1!==b.indexOf("-")&&(h("Negative CSS value ignored for "+a),b=""),b}function m(a,b){void 0!==b&&""!==b&&"null"!==b&&(document.body.style[a]=b,g("Body "+a+' set to "'+b+'"'))}function n(){void 0===X&&(X=W+"px"),l("margin",X),m("margin",X)}function o(){document.documentElement.style.height="",document.body.style.height="",g('HTML & body height set to "auto"')}function p(e){function f(){M(e.eventName,e.eventType)}var h={add:function(c){b(a,c,f)},remove:function(b){c(a,b,f)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(h[e.method])):h[e.method](e.eventName),g(d(e.method)+" event listener: "+e.eventType)}function q(a){p({method:a,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),p({method:a,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),p({method:a,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),p({method:a,eventType:"Orientation Change",eventName:"orientationchange"}),p({method:a,eventType:"Input",eventName:"input"}),p({method:a,eventType:"Print",eventName:["afterprint","beforeprint"]}),p({method:a,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),p({method:a,eventType:"Mouse Up",eventName:"mouseup"}),p({method:a,eventType:"Mouse Down",eventName:"mousedown"}),"child"===oa&&p({method:a,eventType:"IFrame Resized",eventName:"resize"})}function r(a,b,c,d){b!==a&&(a in c||(h(a+" is not a valid option for "+d+"CalculationMethod."),a=b),g(d+' calculation method set to "'+a+'"'))}function s(){r(ea,da,Ba,"height")}function t(){r(xa,wa,Ca,"width")}function u(){!0===T?(q("add"),E()):g("Auto Resize disabled")}function v(){g("Disable outgoing messages"),pa=!1}function w(){g("Remove event listener: Message"),c(a,"message",R)}function x(){"disconnect"in Y&&Y.disconnect()}function y(){v(),w(),q("remove"),x()}function z(){var a=document.createElement("div");a.style.clear="both",a.style.display="block",document.body.appendChild(a)}function A(){function c(){return{x:void 0!==a.pageXOffset?a.pageXOffset:document.documentElement.scrollLeft,y:void 0!==a.pageYOffset?a.pageYOffset:document.documentElement.scrollTop}}function d(a){var b=a.getBoundingClientRect(),d=c();return{x:parseInt(b.left,10)+parseInt(d.x,10),y:parseInt(b.top,10)+parseInt(d.y,10)}}function e(a){function b(a){var b=d(a);g("Moving to in page link (#"+c+") at x: "+b.x+" y: "+b.y),Q(b.y,b.x,"scrollToOffset")}var c=a.split("#")[1]||a,e=decodeURIComponent(c),f=document.getElementById(e)||document.getElementsByName(e)[0];f?b(f):(g("In page link (#"+c+") not found in iFrame, so sending to parent"),Q(0,0,"inPageLink","#"+c))}function f(){""!==location.hash&&"#"!==location.hash&&e(location.href)}function i(){function a(a){function c(a){a.preventDefault(),e(this.getAttribute("href"))}"#"!==a.getAttribute("href")&&b(a,"click",c)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),a)}function j(){b(a,"hashchange",f)}function k(){setTimeout(f,aa)}function l(){Array.prototype.forEach&&document.querySelectorAll?(g("Setting up location.hash handlers"),i(),j(),k()):h("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return ha.enable?l():g("In page linking not enabled"),{findTarget:e}}function B(){g("Enable public methods"),a.parentIFrame={close:function(){Q(0,0,"close"),y()},getId:function(){return ma},moveToAnchor:function(a){ha.findTarget(a)},reset:function(){P("parentIFrame.reset")},scrollTo:function(a,b){Q(b,a,"scrollTo")},scrollToOffset:function(a,b){Q(b,a,"scrollToOffset")},sendMessage:function(a,b){Q(0,0,"message",JSON.stringify(a),b)},setHeightCalculationMethod:function(a){ea=a,s()},setWidthCalculationMethod:function(a){xa=a,t()},setTargetOrigin:function(a){g("Set targetOrigin: "+a),qa=a},size:function(a,b){var c=""+(a?a:"")+(b?","+b:"");N(),M("size","parentIFrame.size("+c+")",a,b)}}}function C(){0!==ia&&(g("setInterval: "+ia+"ms"),setInterval(function(){M("interval","setInterval: "+ia)},Math.abs(ia)))}function D(){function b(a){function b(a){!1===a.complete&&(g("Attach listeners to "+a.src),a.addEventListener("load",f,!1),a.addEventListener("error",h,!1),k.push(a))}"attributes"===a.type&&"src"===a.attributeName?b(a.target):"childList"===a.type&&Array.prototype.forEach.call(a.target.querySelectorAll("img"),b)}function c(a){k.splice(k.indexOf(a),1)}function d(a){g("Remove listeners from "+a.src),a.removeEventListener("load",f,!1),a.removeEventListener("error",h,!1),c(a)}function e(a,b,c){d(a.target),M(b,c+": "+a.target.src,void 0,void 0)}function f(a){e(a,"imageLoad","Image loaded")}function h(a){e(a,"imageLoadFailed","Image load failed")}function i(a){M("mutationObserver","mutationObserver: "+a[0].target+" "+a[0].type),a.forEach(b)}function j(){var a=document.querySelector("body"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return m=new l(i),g("Enable MutationObserver"),m.observe(a,b),m}var k=[],l=a.MutationObserver||a.WebKitMutationObserver,m=j();return{disconnect:function(){"disconnect"in m&&(g("Disconnect MutationObserver"),m.disconnect(),k.forEach(d))}}}function E(){var b=0>ia;a.MutationObserver||a.WebKitMutationObserver?b?C():Y=D():(g("MutationObserver not supported in this browser!"),C())}function F(a){function b(a){var b=/^\d+(px)?$/i;if(b.test(a))return parseInt(a,U);var d=c.style.left,e=c.runtimeStyle.left;return c.runtimeStyle.left=c.currentStyle.left,c.style.left=a||0,a=c.style.pixelLeft,c.style.left=d,c.runtimeStyle.left=e,a}var c=document.body,d=0;return"defaultView"in document&&"getComputedStyle"in document.defaultView?(d=document.defaultView.getComputedStyle(c,null),d=null!==d?d[a]:0):d=b(c.currentStyle[a]),parseInt(d,U)}function G(a){a>ua/2&&(ua=2*a,g("Event throttle increased to "+ua+"ms"))}function H(a,b){for(var c=b.length,e=0,f=0,h=d(a),i=Aa(),j=0;c>j;j++)e=b[j].getBoundingClientRect()[a]+F("margin"+h),e>f&&(f=e);return i=Aa()-i,g("Parsed "+c+" HTML elements"),g("Element position calculated in "+i+"ms"),G(i),f}function I(a){return[a.bodyOffset(),a.bodyScroll(),a.documentElementOffset(),a.documentElementScroll()]}function J(a,b){function c(){return h("No tagged elements ("+b+") found on page"),ca}var d=document.querySelectorAll("["+b+"]");return 0===d.length?c():H(a,d)}function K(){return document.querySelectorAll("body *")}function L(a,b,c,d){function e(){ca=l,va=m,Q(ca,va,a)}function f(){function a(a,b){var c=Math.abs(a-b)<=ra;return!c}return l=void 0!==c?c:Ba[ea](),m=void 0!==d?d:Ca[xa](),a(ca,l)||$&&a(va,m)}function h(){return!(a in{init:1,interval:1,size:1})}function i(){return ea in na||$&&xa in na}function j(){g("No change in size detected")}function k(){h()&&i()?P(b):a in{interval:1}||j()}var l,m;f()||"init"===a?(N(),e()):k()}function M(a,b,c,d){function e(){a in{reset:1,resetPage:1,init:1}||g("Trigger event: "+b)}function f(){return sa&&a in _}f()?g("Trigger event cancelled: "+a):(e(),Da(a,b,c,d))}function N(){sa||(sa=!0,g("Trigger event lock on")),clearTimeout(ta),ta=setTimeout(function(){sa=!1,g("Trigger event lock off"),g("--")},aa)}function O(a){ca=Ba[ea](),va=Ca[xa](),Q(ca,va,a)}function P(a){var b=ea;ea=da,g("Reset trigger event: "+a),N(),O("reset"),ea=b}function Q(b,c,d,e,f){function h(){void 0===f?f=qa:g("Message targetOrigin: "+f)}function i(){var h=b+":"+c,i=ma+":"+h+":"+d+(void 0!==e?":"+e:"");g("Sending message to host page ("+i+")"),a.parent.postMessage(ka+i,f)}!0===pa&&(h(),i())}function R(b){function c(){return ka===(""+b.data).substr(0,la)}function d(){ga=b.data,i(),ba=!1,setTimeout(function(){fa=!1},aa)}function e(){fa?g("Page reset ignored by init"):(g("Page size reset by host page"),O("resetPage"))}function f(){M("resizeParent","Parent window requested size check")}function h(){var a=k();ha.findTarget(a)}function j(){return b.data.split("]")[1].split(":")[0]}function k(){return b.data.substr(b.data.indexOf(":")+1)}function l(){return"iFrameResize"in a}function m(){var a=k();g("MessageCallback called from parent: "+a),ya(JSON.parse(a)),g(" --")}function n(){return b.data.split(":")[2]in{"true":1,"false":1}}function o(){switch(j()){case"reset":e();break;case"resize":f();break;case"moveToAnchor":h();break;case"message":m();break;default:!l()&&!n()}}function p(){!1===ba?o():n()?d():g('Ignored message of type "'+j()+'". Received before initialization.')}c()&&p()}function S(){"loading"!==document.readyState&&a.parent.postMessage("[iFrameResizerChild]Ready","*")}var T=!0,U=10,V="",W=0,X="",Y=null,Z="",$=!1,_={resize:1,click:1},aa=128,ba=!0,ca=1,da="bodyOffset",ea=da,fa=!0,ga="",ha={},ia=32,ja=!1,ka="[iFrameSizer]",la=ka.length,ma="",na={max:1,min:1,bodyScroll:1,documentElementScroll:1},oa="child",pa=!0,qa="*",ra=0,sa=!1,ta=null,ua=0,va=1,wa="scroll",xa=wa,ya=function(){h("MessageCallback function not defined")},za=function(){},Aa=Date.now||function(){return(new Date).getTime()},Ba={bodyOffset:function(){return document.body.offsetHeight+F("marginTop")+F("marginBottom")},offset:function(){return Ba.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,I(Ba))},min:function(){return Math.min.apply(null,I(Ba))},grow:function(){return Ba.max()},lowestElement:function(){return Math.max(Ba.bodyOffset(),H("bottom",K()))},taggedElement:function(){return J("bottom","data-iframe-height")}},Ca={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Ca.bodyScroll(),Ca.documentElementScroll())},max:function(){return Math.max.apply(null,I(Ca))},min:function(){return Math.min.apply(null,I(Ca))},leftMostElement:function(){return H("left",K())},taggedElement:function(){return J("left","data-iframe-width")}},Da=e(L);b(a,"message",R),S()}(window||{}); +!function(a){"use strict";function b(b,c,d){"addEventListener"in a?b.addEventListener(c,d,!1):"attachEvent"in a&&b.attachEvent("on"+c,d)}function c(b,c,d){"removeEventListener"in a?b.removeEventListener(c,d,!1):"detachEvent"in a&&b.detachEvent("on"+c,d)}function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}function e(a){var b,c,d,e=null,f=0,g=function(){f=Ba(),e=null,d=a.apply(b,c),e||(b=c=null)};return function(){var h=Ba();f||(f=h);var i=va-(h-f);return b=this,c=arguments,0>=i||i>va?(e&&(clearTimeout(e),e=null),f=h,d=a.apply(b,c),e||(b=c=null)):e||(e=setTimeout(g,i)),d}}function f(a){return ka+"["+ma+"] "+a}function g(b){ja&&"object"==typeof a.console&&console.log(f(b))}function h(b){"object"==typeof a.console&&console.warn(f(b))}function i(){j(),g("Initialising iFrame ("+location.href+")"),k(),n(),m("background",V),m("padding",Z),z(),s(),t(),o(),B(),u(),ha=A(),M("init","Init message from host page"),Aa()}function j(){function a(a){return"true"===a?!0:!1}var b=ga.substr(la).split(":");ma=b[0],W=void 0!==b[1]?Number(b[1]):W,$=void 0!==b[2]?a(b[2]):$,ja=void 0!==b[3]?a(b[3]):ja,ia=void 0!==b[4]?Number(b[4]):ia,T=void 0!==b[6]?a(b[6]):T,X=b[7],ea=void 0!==b[8]?b[8]:ea,V=b[9],Z=b[10],sa=void 0!==b[11]?Number(b[11]):sa,ha.enable=void 0!==b[12]?a(b[12]):!1,oa=void 0!==b[13]?b[13]:oa,ya=void 0!==b[14]?b[14]:ya}function k(){function b(){var b=a.iFrameResizer;g("Reading data from page: "+JSON.stringify(b)),za=void 0!==b.messageCallback?b.messageCallback:za,Aa=void 0!==b.readyCallback?b.readyCallback:Aa,ra=void 0!==b.targetOrigin?b.targetOrigin:ra,ea=void 0!==b.heightCalculationMethod?b.heightCalculationMethod:ea,ya=void 0!==b.widthCalculationMethod?b.widthCalculationMethod:ya}"iFrameResizer"in a&&Object===a.iFrameResizer.constructor&&b()}function l(a,b){return-1!==b.indexOf("-")&&(h("Negative CSS value ignored for "+a),b=""),b}function m(a,b){void 0!==b&&""!==b&&"null"!==b&&(document.body.style[a]=b,g("Body "+a+' set to "'+b+'"'))}function n(){void 0===X&&(X=W+"px"),l("margin",X),m("margin",X)}function o(){document.documentElement.style.height="",document.body.style.height="",g('HTML & body height set to "auto"')}function p(e){function f(){M(e.eventName,e.eventType)}var h={add:function(c){b(a,c,f)},remove:function(b){c(a,b,f)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(h[e.method])):h[e.method](e.eventName),g(d(e.method)+" event listener: "+e.eventType)}function q(a){p({method:a,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),p({method:a,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),p({method:a,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),p({method:a,eventType:"Orientation Change",eventName:"orientationchange"}),p({method:a,eventType:"Input",eventName:"input"}),p({method:a,eventType:"Print",eventName:["afterprint","beforeprint"]}),p({method:a,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),p({method:a,eventType:"Mouse Up",eventName:"mouseup"}),p({method:a,eventType:"Mouse Down",eventName:"mousedown"}),"child"===oa&&p({method:a,eventType:"IFrame Resized",eventName:"resize"})}function r(a,b,c,d){b!==a&&(a in c||(h(a+" is not a valid option for "+d+"CalculationMethod."),a=b),g(d+' calculation method set to "'+a+'"'))}function s(){r(ea,da,Ca,"height")}function t(){r(ya,xa,Da,"width")}function u(){!0===T?(q("add"),E()):g("Auto Resize disabled")}function v(){g("Disable outgoing messages"),pa=!1}function w(){g("Remove event listener: Message"),c(a,"message",R)}function x(){null!==Y&&Y.disconnect()}function y(){v(),w(),q("remove"),x()}function z(){var a=document.createElement("div");a.style.clear="both",a.style.display="block",document.body.appendChild(a)}function A(){function c(){return{x:void 0!==a.pageXOffset?a.pageXOffset:document.documentElement.scrollLeft,y:void 0!==a.pageYOffset?a.pageYOffset:document.documentElement.scrollTop}}function d(a){var b=a.getBoundingClientRect(),d=c();return{x:parseInt(b.left,10)+parseInt(d.x,10),y:parseInt(b.top,10)+parseInt(d.y,10)}}function e(a){function b(a){var b=d(a);g("Moving to in page link (#"+c+") at x: "+b.x+" y: "+b.y),Q(b.y,b.x,"scrollToOffset")}var c=a.split("#")[1]||a,e=decodeURIComponent(c),f=document.getElementById(e)||document.getElementsByName(e)[0];void 0!==f?b(f):(g("In page link (#"+c+") not found in iFrame, so sending to parent"),Q(0,0,"inPageLink","#"+c))}function f(){""!==location.hash&&"#"!==location.hash&&e(location.href)}function i(){function a(a){function c(a){a.preventDefault(),e(this.getAttribute("href"))}"#"!==a.getAttribute("href")&&b(a,"click",c)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),a)}function j(){b(a,"hashchange",f)}function k(){setTimeout(f,aa)}function l(){Array.prototype.forEach&&document.querySelectorAll?(g("Setting up location.hash handlers"),i(),j(),k()):h("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return ha.enable?l():g("In page linking not enabled"),{findTarget:e}}function B(){g("Enable public methods"),a.parentIFrame={close:function(){Q(0,0,"close"),y()},getId:function(){return ma},moveToAnchor:function(a){ha.findTarget(a)},reset:function(){P("parentIFrame.reset")},scrollTo:function(a,b){Q(b,a,"scrollTo")},scrollToOffset:function(a,b){Q(b,a,"scrollToOffset")},sendMessage:function(a,b){Q(0,0,"message",JSON.stringify(a),b)},setHeightCalculationMethod:function(a){ea=a,s()},setWidthCalculationMethod:function(a){ya=a,t()},setTargetOrigin:function(a){g("Set targetOrigin: "+a),ra=a},size:function(a,b){var c=""+(a?a:"")+(b?","+b:"");N(),M("size","parentIFrame.size("+c+")",a,b)}}}function C(){0!==ia&&(g("setInterval: "+ia+"ms"),setInterval(function(){M("interval","setInterval: "+ia)},Math.abs(ia)))}function D(){function b(a){function b(a){!1===a.complete&&(g("Attach listeners to "+a.src),a.addEventListener("load",f,!1),a.addEventListener("error",h,!1),k.push(a))}"attributes"===a.type&&"src"===a.attributeName?b(a.target):"childList"===a.type&&Array.prototype.forEach.call(a.target.querySelectorAll("img"),b)}function c(a){k.splice(k.indexOf(a),1)}function d(a){g("Remove listeners from "+a.src),a.removeEventListener("load",f,!1),a.removeEventListener("error",h,!1),c(a)}function e(a,b,c){d(a.target),M(b,c+": "+a.target.src,void 0,void 0)}function f(a){e(a,"imageLoad","Image loaded")}function h(a){e(a,"imageLoadFailed","Image load failed")}function i(a){M("mutationObserver","mutationObserver: "+a[0].target+" "+a[0].type),a.forEach(b)}function j(){var a=document.querySelector("body"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return m=new l(i),g("Enable MutationObserver"),m.observe(a,b),m}var k=[],l=a.MutationObserver||a.WebKitMutationObserver,m=j();return{disconnect:function(){"disconnect"in m&&(g("Disconnect MutationObserver"),m.disconnect(),k.forEach(d))}}}function E(){var b=0>ia;a.MutationObserver||a.WebKitMutationObserver?b?C():Y=D():(g("MutationObserver not supported in this browser!"),C())}function F(a){function b(a){var b=/^\d+(px)?$/i;if(b.test(a))return parseInt(a,U);var d=c.style.left,e=c.runtimeStyle.left;return c.runtimeStyle.left=c.currentStyle.left,c.style.left=a||0,a=c.style.pixelLeft,c.style.left=d,c.runtimeStyle.left=e,a}var c=document.body,d=0;return"defaultView"in document&&"getComputedStyle"in document.defaultView?(d=document.defaultView.getComputedStyle(c,null),d=null!==d?d[a]:0):d=b(c.currentStyle[a]),parseInt(d,U)}function G(a){a>va/2&&(va=2*a,g("Event throttle increased to "+va+"ms"))}function H(a,b){for(var c=b.length,e=0,f=0,h=d(a),i=Ba(),j=0;c>j;j++)e=b[j].getBoundingClientRect()[a]+F("margin"+h),e>f&&(f=e);return i=Ba()-i,g("Parsed "+c+" HTML elements"),g("Element position calculated in "+i+"ms"),G(i),f}function I(a){return[a.bodyOffset(),a.bodyScroll(),a.documentElementOffset(),a.documentElementScroll()]}function J(a,b){function c(){return h("No tagged elements ("+b+") found on page"),ca}var d=document.querySelectorAll("["+b+"]");return 0===d.length?c():H(a,d)}function K(){return document.querySelectorAll("body *")}function L(a,b,c,d){function e(){ca=l,wa=m,Q(ca,wa,a)}function f(){function a(a,b){var c=Math.abs(a-b)<=sa;return!c}return l=void 0!==c?c:Ca[ea](),m=void 0!==d?d:Da[ya](),a(ca,l)||$&&a(wa,m)}function h(){return!(a in{init:1,interval:1,size:1})}function i(){return ea in na||$&&ya in na}function j(){g("No change in size detected")}function k(){h()&&i()?P(b):a in{interval:1}||j()}var l,m;f()||"init"===a?(N(),e()):k()}function M(a,b,c,d){function e(){a in{reset:1,resetPage:1,init:1}||g("Trigger event: "+b)}function f(){return ta&&a in _}f()?g("Trigger event cancelled: "+a):(e(),Ea(a,b,c,d))}function N(){ta||(ta=!0,g("Trigger event lock on")),clearTimeout(ua),ua=setTimeout(function(){ta=!1,g("Trigger event lock off"),g("--")},aa)}function O(a){ca=Ca[ea](),wa=Da[ya](),Q(ca,wa,a)}function P(a){var b=ea;ea=da,g("Reset trigger event: "+a),N(),O("reset"),ea=b}function Q(a,b,c,d,e){function f(){void 0===e?e=ra:g("Message targetOrigin: "+e)}function h(){var f=a+":"+b,h=ma+":"+f+":"+c+(void 0!==d?":"+d:"");g("Sending message to host page ("+h+")"),qa.postMessage(ka+h,e)}!0===pa&&(f(),h())}function R(b){function c(){return ka===(""+b.data).substr(0,la)}function d(){ga=b.data,qa=b.source,i(),ba=!1,setTimeout(function(){fa=!1},aa)}function e(){fa?g("Page reset ignored by init"):(g("Page size reset by host page"),O("resetPage"))}function f(){M("resizeParent","Parent window requested size check")}function h(){var a=k();ha.findTarget(a)}function j(){return b.data.split("]")[1].split(":")[0]}function k(){return b.data.substr(b.data.indexOf(":")+1)}function l(){return"iFrameResize"in a}function m(){var a=k();g("MessageCallback called from parent: "+a),za(JSON.parse(a)),g(" --")}function n(){return b.data.split(":")[2]in{"true":1,"false":1}}function o(){switch(j()){case"reset":e();break;case"resize":f();break;case"moveToAnchor":h();break;case"message":m();break;default:!l()&&!n()}}function p(){!1===ba?o():n()?d():g('Ignored message of type "'+j()+'". Received before initialization.')}c()&&p()}function S(){"loading"!==document.readyState&&a.parent.postMessage("[iFrameResizerChild]Ready","*")}var T=!0,U=10,V="",W=0,X="",Y=null,Z="",$=!1,_={resize:1,click:1},aa=128,ba=!0,ca=1,da="bodyOffset",ea=da,fa=!0,ga="",ha={},ia=32,ja=!1,ka="[iFrameSizer]",la=ka.length,ma="",na={max:1,min:1,bodyScroll:1,documentElementScroll:1},oa="child",pa=!0,qa=a.parent,ra="*",sa=0,ta=!1,ua=null,va=0,wa=1,xa="scroll",ya=xa,za=function(){h("MessageCallback function not defined")},Aa=function(){},Ba=Date.now||function(){return(new Date).getTime()},Ca={bodyOffset:function(){return document.body.offsetHeight+F("marginTop")+F("marginBottom")},offset:function(){return Ca.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,I(Ca))},min:function(){return Math.min.apply(null,I(Ca))},grow:function(){return Ca.max()},lowestElement:function(){return Math.max(Ca.bodyOffset(),H("bottom",K()))},taggedElement:function(){return J("bottom","data-iframe-height")}},Da={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Da.bodyScroll(),Da.documentElementScroll())},max:function(){return Math.max.apply(null,I(Da))},min:function(){return Math.min.apply(null,I(Da))},leftMostElement:function(){return H("left",K())},taggedElement:function(){return J("left","data-iframe-width")}},Ea=e(L);b(a,"message",R),S()}(window||{}); //# sourceMappingURL=iframeResizer.contentWindow.map \ No newline at end of file diff --git a/js/iframeResizer.map b/js/iframeResizer.map index 79bc280e6..652dc6a14 100644 --- a/js/iframeResizer.map +++ b/js/iframeResizer.map @@ -1 +1 @@ -{"version":3,"file":"iframeResizer.min.js","sources":["../src/iframeResizer.js"],"names":["window","addEventListener","obj","evt","func","attachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","getMyID","iframeId","retStr","top","self","parentIFrame","getId","formatLogHeader","msgId","isLogEnabled","settings","logEnabled","msg","output","info","warn","type","enabled","console","iFrameListener","event","resizeIFrame","resize","setSize","messageData","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","callback","message","JSON","parse","checkIFrameExists","getElementPosition","target","iFramePosition","getBoundingClientRect","getPagePosition","parseInt","left","pagePosition","y","scrollRequestFromChild","addOffset","reposition","newPosition","scrollTo","calcOffset","unsetPagePosition","findTarget","location","jumpToTarget","jumpPosition","hash","hashData","decodeURIComponent","document","getElementById","getElementsByName","moveToAnchor","funcName","val","chkCallback","actionMsg","firstRun","closeIFrame","resetIFrame","hasSettings","retBool","iFrameReadyMsgReceived","trigger","createOutgoingMsg","logId","retVal","TypeError","parentNode","removeChild","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","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","closedCallback","initCallback","messageCallback","resizedCallback","scrollCallback","jQuery","define","amd","module","exports"],"mappings":";;;;;;;CAWC,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,QAASQ,GAAaR,GACrB,MAAOS,GAAST,GAAYS,EAAST,GAAUF,IAAMY,EAGtD,QAASZ,GAAIE,EAASW,GACrBC,EAAO,MAAMZ,EAASW,EAAIH,EAAaR,IAGxC,QAASa,GAAKb,EAASW,GACtBC,EAAO,OAAOZ,EAASW,EAAIH,EAAaR,IAGzC,QAASc,GAAKd,EAASW,GACtBC,EAAO,OAAOZ,EAASW,GAAI,GAG5B,QAASC,GAAOG,EAAKf,EAASW,EAAIK,IAC7B,IAASA,GAAW,gBAAoB7B,GAAO8B,SAClDA,QAAQF,GAAMT,EAAgBN,GAAUW,GAI1C,QAASO,GAAeC,GACvB,QAASC,KACR,QAASC,KACRC,EAAQC,GACRC,EAAgBxB,GAGjByB,EAAc,UACdA,EAAc,SAEdC,EAAWL,EAAOE,EAAY,aAG/B,QAASI,KACR,GAAIC,GAAOjB,EAAIkB,OAAOC,GAAUC,MAAM,IAEtC,QACCC,OAAQvB,EAASmB,EAAK,IAAII,OAC1BC,GAAQL,EAAK,GACbM,OAAQN,EAAK,GACbO,MAAQP,EAAK,GACbb,KAAQa,EAAK,IAIf,QAASH,GAAcW,GACtB,GACCC,GAAOC,OAAO7B,EAAST,GAAU,MAAMoC,IACvCG,EAAOD,OAAO7B,EAAST,GAAU,MAAMoC,IACvCI,EAAYJ,EAAUK,cACtBC,EAAOJ,OAAOf,EAAYiB,GAE3B,IAAID,EAAIF,EACP,KAAM,IAAIM,OAAM,gBAAgBP,EAAU,+BAA+BA,EAG1EtC,GAAIE,EAAS,YAAYwC,EAAU,gBAAgBD,EAAI,IAAIF,GAElDE,EAALG,IACHA,EAAKH,EACLzC,EAAIE,EAAS,OAAOwC,EAAU,kBAG3BE,EAAKL,IACRK,EAAKL,EACLvC,EAAIE,EAAS,OAAOwC,EAAU,kBAG/BjB,EAAYiB,GAAW,GAAGE,EAI3B,QAASE,KACR,QAASC,KACR,QAASC,KACRhD,EAAIE,EAAS,wDAA0D+C,EACvE,IAAIC,EACJ,KAAKA,EAAI,EAAGA,EAAID,EAAYnD,OAAQoD,IACnC,GAAID,EAAYC,KAAOC,EACtB,OAAO,CAGT,QAAO,EAGR,QAASC,KACR,GAAIC,GAAc1C,EAAST,GAAUmD,UAErC,OADArD,GAAIE,EAAS,gCAAgCmD,GACtCF,IAAWE,EAGnB,MAAOJ,GAAYK,cAAgBC,MAAQP,IAAcI,IAG1D,GACCD,GAAc9B,EAAM8B,OACpBF,EAActC,EAAST,GAAU+C,WAElC,IAAIA,GACE,GAAGE,GAAW,SAAYJ,IAC9B,KAAM,IAAIF,OACT,qCAAuCM,EACvC,QAAU1B,EAAYS,OAAOC,GAC7B,kBAAoBd,EAAMS,KAC1B,qHAKH,QAAO,EAGR,QAAS0B,KACR,MAAO/C,MAAY,GAAKI,GAAKkB,OAAO,EAAEC,IAAenB,EAAIkB,OAAOC,GAAUC,MAAM,KAAK,IAAMtB,GAG5F,QAAS8C,KAGR,GAAIC,GAAUjC,EAAYR,QAAS0C,OAAO,EAAEC,QAAQ,EAAEC,UAAY,EAMlE,OAJIH,IACH1D,EAAIE,EAAS,+CAGPwD,EAGR,QAASI,GAAWC,GACnB,MAAOlD,GAAIkB,OAAOlB,EAAImD,QAAQ,KAAKC,EAAaF,GAGjD,QAASG,GAAqBC,GAC7BnE,EAAIE,EAAS,oCAAqCuB,EAAYS,OAAOC,GAAK,cAAgBgC,EAAU,KACpGC,EAAS,mBACRlC,OAAQT,EAAYS,OACpBmC,QAASC,KAAKC,MAAMJ,KAErBnE,EAAIE,EAAS,MAGd,QAASsE,KACR,MAAI,QAAS/C,EAAYS,QACxBlB,EAAKd,EAAS,WAAWuB,EAAYU,GAAG,gBACjC,IAED,EAGR,QAASsC,GAAmBC,GAC3B,GAAIC,GAAiBD,EAAOE,uBAI5B,OAFAC,GAAgB3E,IAGfN,EAAGkF,SAASH,EAAeI,KAAM,IAAMD,SAASE,EAAapF,EAAG,IAChEqF,EAAGH,SAASH,EAAevE,IAAK,IAAO0E,SAASE,EAAaC,EAAG,KAIlE,QAASC,GAAuBC,GAC/B,QAASC,KACRJ,EAAeK,EACfC,IACAtF,EAAIE,EAAS,MAGd,QAASqF,KACR,OACC3F,EAAG4C,OAAOf,EAAYY,OAAS0B,EAAOnE,EACtCqF,EAAGzC,OAAOf,EAAYW,QAAU2B,EAAOkB,GAIzC,GACClB,GAASoB,EAAYV,EAAmBhD,EAAYS,SAAWtC,EAAE,EAAEqF,EAAE,GACrEI,EAAcE,GAEfvF,GAAIE,EAAS,8CAA8C6D,EAAOnE,EAAE,MAAMmE,EAAOkB,EAAE,KAEhF5F,EAAOe,MAAMf,EAAOgB,KAClBhB,EAAOiB,aACVjB,EAAOiB,aAAa,YAAY6E,EAAU,SAAS,KAAKE,EAAYzF,EAAEyF,EAAYJ,GAElFjE,EAAKd,EAAS,yEAGfkF,IAIF,QAASE,MACJ,IAAUlB,EAAS,iBAAiBY,GACvCtD,EAAgBxB,GAEhBsF,IAIF,QAASC,GAAWC,GACnB,QAASC,GAAajB,GACrB,GAAIkB,GAAenB,EAAmBC,EAEtC1E,GAAIE,EAAS,4BAA4B2F,EAAK,WAAWD,EAAahG,EAAE,OAAOgG,EAAaX,GAC5FD,GACCpF,EAAGgG,EAAahG,EAChBqF,EAAGW,EAAaX,GAGjBK,IACAtF,EAAIE,EAAS,MAGd,GACC2F,GAAWH,EAASzD,MAAM,KAAK,IAAM,GACrC6D,EAAWC,mBAAmBF,GAC9BnB,EAAWsB,SAASC,eAAeH,IAAaE,SAASE,kBAAkBJ,GAAU,EAEnFzG,GAAOe,MAAMf,EAAOgB,KAClBhB,EAAOiB,aACVjB,EAAOiB,aAAa6F,aAAaN,GAEjC7F,EAAIE,EAAS,iBAAiB2F,EAAK,gDAE1BnB,EACViB,EAAajB,GAEb1E,EAAIE,EAAS,iBAAiB2F,EAAK,cAIrC,QAASzB,GAASgC,EAASC,GAC1B,MAAOC,GAAYpG,EAASkG,EAASC,GAGtC,QAASE,KAIR,OAFG5F,EAAST,GAAUsG,UAAUA,IAEzB/E,EAAYR,MACnB,IAAK,QACJwF,EAAYhF,EAAYS,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,QACJ4C,EAAYjF,EACZ,MACD,KAAK,OACJH,IACA8C,EAAS,eAAe3C,EAAYS,QACpCkC,EAAS,kBAAkB3C,EAC3B,MACD,SACCH,IACA8C,EAAS,kBAAkB3C,IAI7B,QAASkF,GAAYzG,GACpB,GAAI0G,IAAU,CAOd,OALKjG,GAAST,KACb0G,GAAU,EACV5F,EAAKS,EAAYR,KAAO,oBAAsBf,EAAW,kBAAoBW,IAGvE+F,EAGR,QAASC,KACR,IAAK,GAAI3G,KAAYS,GACpBmG,EAAQ,wBAAwBC,EAAkB7G,GAAU8F,SAASC,eAAe/F,GAAUA,GAIhG,QAASsG,KACR7F,EAAST,GAAUsG,UAAW,EAG/B,GACC3F,GAAMQ,EAAMS,KACZL,KACAvB,EAAW,IAET,+BAAgCW,EAClCgG,IACUrD,MACV/B,EAAcI,IACd3B,EAAc8G,EAAQvF,EAAYU,IAE7BsB,KAA6BkD,EAAYzG,KAC7CF,EAAIE,EAAS,aAAaW,GAErB2D,KAAuB1B,KAC3ByD,MAUJ,QAASD,GAAYpG,EAASkG,EAASC,GACtC,GACC5G,GAAO,KACPwH,EAAS,IAEV,IAAGtG,EAAST,GAAU,CAGrB,GAFAT,EAAOkB,EAAST,GAAUkG,GAEtB,kBAAsB3G,GAGzB,KAAM,IAAIyH,WAAUd,EAAS,cAAclG,EAAS,sBAFpD+G,GAASxH,EAAK4G,GAMhB,MAAOY,GAGR,QAASR,GAAYvE,GACpB,GAAIhC,GAAWgC,EAAOC,EAEtBnC,GAAIE,EAAS,oBAAoBA,GACjCgC,EAAOiF,WAAWC,YAAYlF,GAC9BoE,EAAYpG,EAAS,iBAAiBA,GACtCF,EAAIE,EAAS,YACNS,GAAST,GAGjB,QAAS2E,GAAgB3E,GACrB,OAAS8E,IACXA,GACCpF,EAA2BiE,SAAvBxE,EAAOgI,YAA6BhI,EAAOgI,YAAcrB,SAASsB,gBAAgBC,WACtFtC,EAA2BpB,SAAvBxE,EAAOmI,YAA6BnI,EAAOmI,YAAcxB,SAASsB,gBAAgBG,WAEvFzH,EAAIE,EAAS,sBAAsB8E,EAAapF,EAAE,IAAIoF,EAAaC,IAIrE,QAASvD,GAAgBxB,GACrB,OAAS8E,IACX3F,EAAOiG,SAASN,EAAapF,EAAEoF,EAAaC,GAC5CjF,EAAIE,EAAS,sBAAsB8E,EAAapF,EAAE,IAAIoF,EAAaC,GACnEO,KAIF,QAASA,KACRR,EAAe,KAGhB,QAAS0B,GAAYjF,GACpB,QAASiG,KACRlG,EAAQC,GACRqF,EAAQ,QAAQ,QAAQrF,EAAYS,OAAOT,EAAYU,IAGxDnC,EAAIyB,EAAYU,GAAG,4BAA4B,SAASV,EAAYR,KAAK,YAAY,WACrF4D,EAAgBpD,EAAYU,IAC5BP,EAAW8F,EAAMjG,EAAY,SAG9B,QAASD,GAAQC,GAChB,QAASkG,GAAajF,GACrBjB,EAAYS,OAAO0F,MAAMlF,GAAajB,EAAYiB,GAAa,KAC/D1C,EACCyB,EAAYU,GACZ,WAAajC,EACb,KAAOwC,EACP,WAAajB,EAAYiB,GAAa,MAIxC,QAASmF,GAAQnF,GAKXoF,GAAsB,MAAQrG,EAAYiB,KAC9CoF,GAAqB,EACrB9H,EAAIE,EAAS,wDACb6H,KAIF,QAASC,GAAiBtF,GACzBiF,EAAajF,GACbmF,EAAQnF,GAGT,GAAIxC,GAAWuB,EAAYS,OAAOC,EAE/BxB,GAAST,KACPS,EAAST,GAAU+H,YAAcD,EAAiB,UAClDrH,EAAST,GAAUgI,WAAcF,EAAiB,UAIxD,QAASpG,GAAWnC,EAAKgC,EAAY0G,GACjCA,IAAY1G,EAAYR,MAAQlB,GAClCC,EAAIyB,EAAYU,GAAG,8BACnBpC,EAAsBN,IAEtBA,IAIF,QAASqH,GAAQsB,EAAUvH,EAAIqB,EAAOC,GACrC,QAASkG,KACRrI,EAAImC,EAAG,IAAMiG,EAAY,2BAA2BjG,EAAG,MAAMtB,EAAI,KACjEqB,EAAOoG,cAAcC,YAAa9H,EAAQI,EAAK6D,GAGhD,QAAS8D,KACRzH,EAAKoB,EAAG,IAAMiG,EAAY,YAAYjG,EAAG,eACtCxB,EAASwB,UACJxB,GAASwB,GAIlBA,EAAKA,GAAMD,EAAOC,EAClB,IAAIuC,GAAS/D,EAASwB,GAAIsG,YAEvBvG,IAAU,iBAAmBA,GAC/BmG,IAEAG,IAIF,QAASzB,GAAkB7G,GAC1B,MAAOA,GACN,IAAMS,EAAST,GAAUwI,aACzB,IAAM/H,EAAST,GAAUgI,UACzB,IAAMvH,EAAST,GAAUF,IACzB,IAAMW,EAAST,GAAUyI,SACzB,IAAMhI,EAAST,GAAU0I,oBACzB,IAAMjI,EAAST,GAAU2I,WACzB,IAAMlI,EAAST,GAAU4I,WACzB,IAAMnI,EAAST,GAAU6I,wBACzB,IAAMpI,EAAST,GAAU8I,eACzB,IAAMrI,EAAST,GAAU+I,YACzB,IAAMtI,EAAST,GAAUgJ,UACzB,IAAMvI,EAAST,GAAUiJ,YACzB,IAAMxI,EAAST,GAAUkJ,WACzB,IAAMzI,EAAST,GAAUmJ,uBAG3B,QAASC,GAAYpH,EAAOqH,GAC3B,QAASC,KACR,QAASC,GAAS7B,GACZ8B,EAAAA,IAAa/I,EAAST,GAAU0H,IAAY,IAAMjH,EAAST,GAAU0H,KACzE1F,EAAO0F,MAAMA,GAASjH,EAAST,GAAU0H,GAAS,KAClD5H,EAAIE,EAAS,OAAO0H,EAAM,MAAMjH,EAAST,GAAU0H,GAAO,OAI5D6B,EAAS,aACTA,EAAS,aACTA,EAAS,YACTA,EAAS,YAGV,QAASE,GAAYzJ,GAUpB,MATA8G,GAAM9G,EACF,KAAKA,IACRgC,EAAOC,GAAKjC,GAAYqJ,EAAQpH,IAAMyH,EAASzH,IAAM0H,IACrDjJ,GAAc2I,OAAevJ,IAC7BgH,EAAM9G,EACNF,EAAIE,EAAS,4BAA6BA,EAAU,KAAOgC,EAAO4H,IAAM,MAIlE5J,EAGR,QAAS6J,KACR/J,EAAIE,EAAS,qBAAuBS,EAAST,GAAU8J,UAAY,UAAY,YAAc,QAAU9J,GACvGgC,EAAO0F,MAAMqC,UAAW,IAAUtJ,EAAST,GAAU8J,UAAY,SAAW,OAC5E9H,EAAO8H,WAAiB,IAAUrJ,EAAST,GAAU8J,UAAY,KAAO,MAMzE,QAASE,MACH,gBAAkBvJ,GAAST,GAAoB,YAAO,MAAMS,EAAST,GAAU4I,cACnFnI,EAAST,GAAUwI,aAAe/H,EAAST,GAAU4I,WACrDnI,EAAST,GAAU4I,WAAe,GAAKnI,EAAST,GAAU4I,WAAa,MAIzE,QAASqB,KAIR,GACC3D,GAAoB7F,EAAST,GAAUsG,SACvC4D,EAAoBzJ,EAAST,GAAU6I,0BAA2BsB,IAE9D7D,GAAY4D,GAChB1D,GAAaxE,OAAOA,EAAQE,OAAO,EAAGC,MAAM,EAAGpB,KAAK,SAItD,QAASqJ,KACLC,SAASC,UAAUC,OACrB9J,EAAST,GAAUgC,OAAOwI,eAEzBC,MAAelE,EAAYgE,KAAK,KAAK9J,EAAST,GAAUgC,QAExDX,OAAeuF,EAAQ2D,KAAK,KAAK,gBAAiB,SAAU9J,EAAST,GAAUgC,QAE/EiE,aAAe,SAASyE,GACvB9D,EAAQ,iBAAiB,cAAc8D,EAAQjK,EAAST,GAAUgC,OAAOhC,IAG1E2K,YAAe,SAASxG,GACvBA,EAAUC,KAAKwG,UAAUzG,GACzByC,EAAQ,eAAe,WAAWzC,EAAS1D,EAAST,GAAUgC,OAAOhC,MASzE,QAAS6K,GAAKlK,GACb,QAASmK,KACRlE,EAAQ,gBAAgBjG,EAAIqB,GAC5BiI,IAGD7K,EAAiB4C,EAAO,OAAO8I,GAC/BlE,EAAQ,OAAOjG,EAAIqB,GAGpB,QAAS+I,GAAa1B,GACrB,GAAI,gBAAoBA,GACvB,KAAM,IAAIrC,WAAU,6BAItB,QAASgE,GAAY3B,GACpB,IAAK,GAAI4B,KAAUvB,GACdA,EAASwB,eAAeD,KAC3BxK,EAAST,GAAUiL,GAAU5B,EAAQ6B,eAAeD,GAAU5B,EAAQ4B,GAAUvB,EAASuB,IAK5F,QAASE,GAAiBhI,GACzB,MAAQ,KAAOA,GAAc,YAAcA,EAAc,IAAMA,EAGhE,QAASiI,GAAe/B,GACvBA,EAAUA,MACV5I,EAAST,IACRsG,UAAW,EACXtE,OAAUA,EACVmB,WAAanB,EAAO4H,IAAI7H,MAAM,KAAKsJ,MAAM,EAAE,GAAGC,KAAK,MAGpDP,EAAa1B,GACb2B,EAAY3B,GAEZ5I,EAAST,GAAUuI,cAAe,IAAS9H,EAAST,GAAU+C,YAAcoI,EAAgB1K,EAAST,GAAUmD,YAAc,IAG9H,QAASoI,KACR,MAAQvL,KAAYS,IAAY,iBAAmBuB,GAGpD,GAAIhC,GAAWyJ,EAAYzH,EAAOC,GAE7BsJ,KAQJzK,EAAKd,EAAS,mCAPdoL,EAAe/B,GACfQ,IACAP,IACAU,IACAa,EAAKhE,EAAkB7G,IACvBoK,KAMF,QAASoB,GAAQC,EAAGC,GACf,OAASC,IACZA,EAAQC,WAAW,WAClBD,EAAQ,KACRF,KACEC,IAIL,QAASG,GAAUC,GAClB,MAAQ,QAASA,EAAGC,aAGrB,QAASlE,KACR,QAASmE,KACR,QAASC,GAAYC,GACpB,QAASC,GAAa3J,GACrB,MAAO,QAAU/B,EAASyL,GAAWlK,OAAO0F,MAAMlF,GAG/CqJ,EAAUpL,EAASyL,GAAWlK,UAAYmK,EAAa,WAAaA,EAAa,WACpFvF,EAAQ,oBAAqB,SAAUnG,EAASyL,GAAWlK,OAAOkK,GAIpE,IAAK,GAAIA,KAAazL,GACrBwL,EAAYC,GAId,QAASE,GAAiBC,GACzBvM,EAAI,SAAS,sBAAwBuM,EAAU,GAAG7H,OAAS,IAAM6H,EAAU,GAAGtL,MAC9EyK,EAAQQ,EAAa,IAGtB,QAASM,KACR,GACC9H,GAASsB,SAASyG,cAAc,QAEhCC,GACCC,YAAwB,EACxBC,mBAAwB,EACxBC,eAAwB,EACxBC,uBAAwB,EACxBC,WAAwB,EACxBC,SAAwB,GAGzBC,EAAW,GAAIC,GAAiBZ,EAEjCW,GAASE,QAAQzI,EAAQgI,GAG1B,GAAIQ,GAAmB7N,EAAO6N,kBAAoB7N,EAAO+N,sBAErDF,IAAkBV,IAGvB,QAASa,KACR,QAASC,GAAcjM,GACtB,QAASE,KACRgM,EAAe,UAAUlM,EAAM,UAGhCrB,EAAI,SAAS,kBAAkBqB,GAC/BqK,EAAQnK,EAAO,IAGhB,QAASiM,KACR,QAASjM,KACRgM,EAAe,cAAc,UAG3B,WAAavH,SAASyH,kBACxBzN,EAAI,WAAW,mCACf0L,EAAQnK,EAAO,KAIjB,QAASgM,GAAeG,EAAUrM,GACjC,QAASsM,GAAsBzN,GAC9B,MAAO,WAAaS,EAAST,GAAUkJ,YACrCzI,EAAST,GAAU2I,aAClBlI,EAAST,GAAUsG,SAGvB,IAAK,GAAItG,KAAYS,GACjBgN,EAAsBzN,IACxB4G,EAAQ4G,EAAUrM,EAAM2E,SAASC,eAAe/F,GAAUA,GAK7DZ,EAAiBD,EAAO,UAAU+B,GAElC9B,EAAiBD,EAAO,SAAU,WAAWiO,EAAc,YAE3DhO,EAAiB0G,SAAS,mBAAmBwH,GAC7ClO,EAAiB0G,SAAS,2BAA2BwH,GACrDlO,EAAiBD,EAAO,UAAU,WAAWiO,EAAc,WAC3DhO,EAAiBD,EAAO,QAAQ,WAAWiO,EAAc,WAI1D,QAASM,KACR,QAAS7C,GAAKxB,EAAQsE,GACrB,IAAIA,EAAQC,QACX,KAAM,IAAI5G,WAAU,oCACd,IAAI,WAAa2G,EAAQC,QAAQC,cACvC,KAAM,IAAI7G,WAAU,iCAAiC2G,EAAQC,QAAQ,KAErExE,GAAYuE,EAAStE,GACrByE,EAAQC,KAAKJ,GAIf,GAAIG,EAKJ,OAHArO,KACA0N,IAEO,SAAuB9D,EAAQ7E,GAGrC,OAFAsJ,WAEc,IACd,IAAK,YACL,IAAK,SACJzK,MAAMiH,UAAU0D,QAAQC,KACvBnI,SAASoI,iBAAkB1J,GAAU,UACrCqG,EAAKN,KAAK5G,OAAW0F,GAEtB,MACD,KAAK,SACJwB,EAAKxB,EAAQ7E,EACb,MACD,SACC,KAAM,IAAIwC,WAAU,+BAA+B,GAAS,MAG7D,MAAO8G,IAIT,QAASK,GAAyBC,GACjCA,EAAE3C,GAAG4C,aAAe,SAAwBhF,GAC3C,MAAOiF,MAAKC,OAAO,UAAUC,KAAK,SAAUC,EAAOd,GAClDvE,EAAYuE,EAAStE,KACnBqF,OAv0BL,GACC/E,GAAwB,EACxBjJ,GAAwB,EACxBkH,GAAwB,EACxB+G,EAAwB,UACxB5K,EAAwB4K,EAAU/O,OAClCW,EAAwB,gBACxBuB,EAAwBvB,EAAMX,OAC9BkF,EAAwB,KACxBjF,EAAwBV,EAAOU,sBAC/BsK,GAAyB9H,IAAI,EAAEuM,OAAO,EAAEC,WAAW,EAAEC,sBAAsB,GAC3ErO,KACAkL,EAAwB,KACxB7E,EAAuB,YAGvB4C,GACCf,YAA4B,EAC5BG,eAA4B,KAC5BF,WAA4B,KAC5BJ,aAA4B,EAC5BO,YAA4B,KAC5BhG,aAA4B,EAC5BkG,aAA4B,EAC5BP,qBAA4B,EAC5BG,wBAA4B,aAC5B5G,GAA4B,gBAC5BwG,SAA4B,GAC5B3I,KAA4B,EAC5BiP,UAA4BvF,EAAAA,EAC5BwF,SAA4BxF,EAAAA,EAC5ByF,UAA4B,EAC5BC,SAA4B,EAC5BhG,WAA4B,SAC5BY,WAA4B,EAC5B/B,YAA4B,EAC5BC,WAA4B,EAC5BgB,UAA4B,EAC5BG,uBAA4B,SAC5BgG,eAA4B,aAC5BC,aAA4B,aAC5BC,gBAA4B,WAAWvO,EAAK,yCAC5CwO,gBAA4B,aAC5BC,eAA4B,WAAW,OAAO,GAgyB5CpQ,GAAOqQ,QAAUrB,EAAyBqB,QAExB,kBAAXC,SAAyBA,OAAOC,IAC1CD,UAAU/B,GACkB,gBAAXiC,SAAiD,gBAAnBA,QAAOC,QACtDD,OAAOC,QAAUlC,IAEjBvO,EAAOkP,aAAelP,EAAOkP,cAAgBX,KAG5CvO","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;(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 isLogEnabled(iframeId){\n\t\treturn settings[iframeId] ? settings[iframeId].log : logEnabled;\n\t}\n\n\tfunction log(iframeId,msg){\n\t\toutput('log',iframeId,msg,isLogEnabled(iframeId));\n\t}\n\n\tfunction info(iframeId,msg){\n\t\toutput('info',iframeId,msg,isLogEnabled(iframeId));\n\t}\n\n\tfunction warn(iframeId,msg){\n\t\toutput('warn',iframeId,msg,true);\n\t}\n\n\tfunction output(type,iframeId,msg,enabled){\n\t\tif (true === enabled && 'object' === typeof window.console){\n\t\t\tconsole[type](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\tsetPagePosition(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\tcallback('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 !== callback('scrollCallback',pagePosition)){\n\t\t\t\tsetPagePosition(iframeId);\n\t\t\t} else {\n\t\t\t\tunsetPagePosition();\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(funcName,val){\n\t\t\treturn chkCallback(iframeId,funcName,val);\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('initCallback',messageData.iframe);\n\t\t\t\tcallback('resizedCallback',messageData);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tresizeIFrame();\n\t\t\t\tcallback('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 chkCallback(iframeId,funcName,val){\n\t\tvar\n\t\t\tfunc = null,\n\t\t\tretVal = null;\n\n\t\tif(settings[iframeId]){\n\t\t\tfunc = settings[iframeId][funcName];\n\n\t\t\tif( 'function' === typeof func){\n\t\t\t\tretVal = func(val);\n\t\t\t} else {\n\t\t\t\tthrow new TypeError(funcName+' on iFrame['+iframeId+'] is not a function');\n\t\t\t}\n\t\t}\n\n\t\treturn retVal;\n\t}\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\tchkCallback(iframeId,'closedCallback',iframeId);\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\tunsetPagePosition();\n\t\t}\n\t}\n\n\tfunction unsetPagePosition(){\n\t\tpagePosition = null;\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\tinfo(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