;(function(undefined){if(typeof window==='undefined')return var count=0,logEnabled=false,hiddenCheckEnabled=false,msgHeader='message',msgHeaderLen=msgHeader.length,msgId='[iFrameSizer]',msgIdLen=msgId.length,pagePosition=null,requestAnimationFrame=window.requestAnimationFrame,resetRequiredMethods={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},settings={},timer=null,defaults={autoResize:true,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:true,inPageLinks:false,enablePublicMethods:true,heightCalculationMethod:'bodyOffset',id:'iFrameResizer',interval:32,log:false,maxHeight:Infinity,maxWidth:Infinity,minHeight:0,minWidth:0,resizeFrom:'parent',scrolling:false,sizeHeight:true,sizeWidth:false,warningTimeout:5000,tolerance:0,widthCalculationMethod:'scroll',onClose:function(){return true},onClosed:function(){},onInit:function(){},onMessage:function(){warn('onMessage function not defined')},onResized:function(){},onScroll:function(){return true}} function getMutationObserver(){return(window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver)} function addEventListener(el,evt,func){el.addEventListener(evt,func,false)} function removeEventListener(el,evt,func){el.removeEventListener(evt,func,false)} function setupRequestAnimationFrame(){var vendors=['moz','webkit','o','ms'] var x for(x=0;xmax){size=max log(iframeId,'Set '+dimension+' to max value')} messageData[dimension]=''+size} function isMessageFromIFrame(){function checkAllowedOrigin(){function checkList(){var i=0,retCode=false log(iframeId,'Checking connection is from allowed list of origins: '+ checkOrigin) for(;isettings[iframeId]['max'+dimension]){throw new Error('Value for min'+ dimension+ ' can not be greater than max'+ dimension)}} chkMinMax('Height') chkMinMax('Width') addStyle('maxHeight') addStyle('minHeight') addStyle('maxWidth') addStyle('minWidth')} function newId(){var id=(options&&options.id)||defaults.id+count++ if(null!==document.getElementById(id)){id+=count++} return id} function ensureHasId(iframeId){if(''===iframeId){iframe.id=iframeId=newId() logEnabled=(options||{}).log log(iframeId,'Added missing iframe ID: '+iframeId+' ('+iframe.src+')')} return iframeId} function setScrolling(){log(iframeId,'IFrame scrolling '+ (settings[iframeId]&&settings[iframeId].scrolling?'enabled':'disabled')+ ' for '+ iframeId) iframe.style.overflow=false===(settings[iframeId]&&settings[iframeId].scrolling)?'hidden':'auto' switch(settings[iframeId]&&settings[iframeId].scrolling){case 'omit':break case true:iframe.scrolling='yes' break case false:iframe.scrolling='no' break default:iframe.scrolling=settings[iframeId]?settings[iframeId].scrolling:'no'}} function setupBodyMarginValues(){if('number'===typeof(settings[iframeId]&&settings[iframeId].bodyMargin)||'0'===(settings[iframeId]&&settings[iframeId].bodyMargin)){settings[iframeId].bodyMarginV1=settings[iframeId].bodyMargin settings[iframeId].bodyMargin=''+settings[iframeId].bodyMargin+'px'}} function checkReset(){var firstRun=settings[iframeId]&&settings[iframeId].firstRun,resetRequertMethod=settings[iframeId]&&settings[iframeId].heightCalculationMethod in resetRequiredMethods if(!firstRun&&resetRequertMethod){resetIFrame({iframe:iframe,height:0,width:0,type:'init'})}} function setupIFrameObject(){if(settings[iframeId]){settings[iframeId].iframe.iFrameResizer={close:closeIFrame.bind(null,settings[iframeId].iframe),removeListeners:removeIframeListeners.bind(null,settings[iframeId].iframe),resize:trigger.bind(null,'Window resize','resize',settings[iframeId].iframe),moveToAnchor:function(anchor){trigger('Move to anchor','moveToAnchor:'+anchor,settings[iframeId].iframe,iframeId)},sendMessage:function(message){message=JSON.stringify(message) trigger('Send Message','message:'+message,settings[iframeId].iframe,iframeId)}}}} function init(msg){function iFrameLoaded(){trigger('iFrame.onload',msg,iframe,undefined,true) checkReset()} function createDestroyObserver(MutationObserver){if(!iframe.parentNode){return} var destroyObserver=new MutationObserver(function(mutations){mutations.forEach(function(mutation){var removedNodes=Array.prototype.slice.call(mutation.removedNodes) removedNodes.forEach(function(removedNode){if(removedNode===iframe){closeIFrame(iframe)}})})}) destroyObserver.observe(iframe.parentNode,{childList:true})} var MutationObserver=getMutationObserver() if(MutationObserver){createDestroyObserver(MutationObserver)} addEventListener(iframe,'load',iFrameLoaded) trigger('init',msg,iframe,undefined,true)} function checkOptions(options){if('object'!==typeof options){throw new TypeError('Options is not an object')}} function copyOptions(options){for(var option in defaults){if(Object.prototype.hasOwnProperty.call(defaults,option)){settings[iframeId][option]=Object.prototype.hasOwnProperty.call(options,option)?options[option]:defaults[option]}}} function getTargetOrigin(remoteHost){return ''===remoteHost||null!==remoteHost.match(/^(about:blank|javascript:|file:\/\/)/)?'*':remoteHost} function depricate(key){var splitName=key.split('Callback') if(splitName.length===2){var name='on'+splitName[0].charAt(0).toUpperCase()+splitName[0].slice(1) this[name]=this[key] delete this[key] warn(iframeId,"Deprecated: '"+ key+ "' has been renamed '"+ name+ "'. The old method will be removed in the next major version.")}} function processOptions(options){options=options||{} settings[iframeId]={firstRun:true,iframe:iframe,remoteHost:iframe.src&&iframe.src.split('/').slice(0,3).join('/')} checkOptions(options) Object.keys(options).forEach(depricate,options) copyOptions(options) if(settings[iframeId]){settings[iframeId].targetOrigin=true===settings[iframeId].checkOrigin?getTargetOrigin(settings[iframeId].remoteHost):'*'}} function beenHere(){return iframeId in settings&&'iFrameResizer'in iframe} var iframeId=ensureHasId(iframe.id) if(!beenHere()){processOptions(options) setScrolling() setLimits() setupBodyMarginValues() init(createOutgoingMsg(iframeId)) setupIFrameObject()}else{warn(iframeId,'Ignored iFrame, already setup.')}} function debouce(fn,time){if(null===timer){timer=setTimeout(function(){timer=null fn()},time)}} var frameTimer={} function debounceFrameEvents(fn,time,frameId){if(!frameTimer[frameId]){frameTimer[frameId]=setTimeout(function(){frameTimer[frameId]=null fn()},time)}} function fixHiddenIFrames(){function checkIFrames(){function checkIFrame(settingId){function chkDimension(dimension){return('0px'===(settings[settingId]&&settings[settingId].iframe.style[dimension]))} function isVisible(el){return null!==el.offsetParent} if(settings[settingId]&&isVisible(settings[settingId].iframe)&&(chkDimension('height')||chkDimension('width'))){trigger('Visibility change','resize',settings[settingId].iframe,settingId)}} Object.keys(settings).forEach(function(key){checkIFrame(key)})} function mutationObserved(mutations){log('window','Mutation observed: '+mutations[0].target+' '+mutations[0].type) debouce(checkIFrames,16)} function createMutationObserver(){var target=document.querySelector('body'),config={attributes:true,attributeOldValue:false,characterData:true,characterDataOldValue:false,childList:true,subtree:true},observer=new MutationObserver(mutationObserved) observer.observe(target,config)} var MutationObserver=getMutationObserver() if(MutationObserver){createMutationObserver()}} function resizeIFrames(event){function resize(){sendTriggerMsg('Window '+event,'resize')} log('window','Trigger event: '+event) debouce(resize,16)} function tabVisible(){function resize(){sendTriggerMsg('Tab Visable','resize')} if('hidden'!==document.visibilityState){log('document','Trigger event: Visiblity change') debouce(resize,16)}} function sendTriggerMsg(eventName,event){function isIFrameResizeEnabled(iframeId){return(settings[iframeId]&&'parent'===settings[iframeId].resizeFrom&&settings[iframeId].autoResize&&!settings[iframeId].firstRun)} Object.keys(settings).forEach(function(iframeId){if(isIFrameResizeEnabled(iframeId)){trigger(eventName,event,settings[iframeId].iframe,iframeId)}})} function setupEventListeners(){addEventListener(window,'message',iFrameListener) addEventListener(window,'resize',function(){resizeIFrames('resize')}) addEventListener(document,'visibilitychange',tabVisible) addEventListener(document,'-webkit-visibilitychange',tabVisible)} function factory(){function init(options,element){function chkType(){if(!element.tagName){throw new TypeError('Object is not a valid DOM element')}else if('IFRAME'!==element.tagName.toUpperCase()){throw new TypeError('Expected