{"version":3,"sources":["iframeResizer.contentWindow.js"],"names":["undefined","noop","addEventListener","el","evt","func","options","window","passiveSupported","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","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","setupCustomCalcMethods","calcMode","calcFunc","customCalcMethods","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","manageTriggerEvent","listener","add","eventName","handleEvent","eventType","eventHandlersByName","passive","remove","eventNames","Array","prototype","map","method","manageEventListeners","checkCalcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","stopMsgsToParent","sendPermit","removeMsgListener","receiver","disconnectMutationObserver","bodyObserver","disconnect","stopEventListeners","clearInterval","intervalTimer","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","win","parentIFrame","resize","close","getId","getPageInfo","callback","pageInfoCallback","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","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","getComputedStyle","prop","convertUnitsToPxForIE8","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","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","lockTrigger","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","postMessage","isMessageForUs","getMessageType","getData","isMiddleTier","module","exports","jQuery","isInitMsg","true","false","callFromParent","messageType","processRequestFromParent","processMessage","firstRun","source","initLock","inPageLink","pageInfo","msgBody","parse","chkLateLoaded","readyState","parent","click","max","min","offsetHeight","scrollWidth","onceSupported","create","get","once","Date","getTime","offset","scrollHeight","custom","grow","lowestElement","taggedElement","offsetWidth","scroll","rightMostElement"],"mappings":";;;;;;;;CAWA,SAAUA,GACR,YAiEA,SAASC,MAwBT,QAASC,GAAiBC,EAAIC,EAAKC,EAAMC,GAEnC,oBAAsBC,QACxBJ,EAAGD,iBAAiBE,EAAKC,IAAMG,KAAmBF,QACzC,eAAiBC,SAE1BJ,EAAGM,YAAY,KAAOL,EAAKC,GAI/B,QAASK,GAAoBP,EAAIC,EAAKC,GAEhC,uBAAyBE,QAC3BJ,EAAGO,oBAAoBN,EAAKC,GAAM,GACzB,eAAiBE,SAE1BJ,EAAGQ,YAAY,KAAOP,EAAKC,GAI/B,QAASO,GAAsBC,GAC7B,MAAOA,GAAOC,OAAO,GAAGC,cAAgBF,EAAOG,MAAM,GAIvD,QAASC,GAASZ,GAChB,GAAIa,GACFC,EACAC,EACAC,EAAU,KACVC,EAAW,EACXC,EAAQ,WACND,EAAWE,KACXH,EAAU,KACVD,EAASf,EAAKoB,MAAMP,EAASC,GACxBE,IACHH,EAAUC,EAAO,MAIvB,OAAO,YACL,GAAIO,GAAMF,IAELF,KACHA,EAAWI,EAGb,IAAIC,GAAYC,IAAkBF,EAAMJ,EAqBxC,OAnBAJ,GAAUW,KACVV,EAAOW,UAEHH,GAAa,GAAKA,EAAYC,IAC5BP,IACFU,aAAaV,GACbA,EAAU,MAGZC,EAAWI,EACXN,EAASf,EAAKoB,MAAMP,EAASC,GAExBE,IACHH,EAAUC,EAAO,OAETE,IACVA,EAAUW,WAAWT,EAAOI,IAGvBP,GAWX,QAASa,GAAaC,GACpB,MAAOC,IAAQ,IAAMC,GAAO,KAAYF,EAG1C,QAASG,GAAIH,GACPI,IAAW,gBAAoB/B,QAAOgC,SACxCA,QAAQF,IAAIJ,EAAaC,IAI7B,QAASM,GAAKN,GACR,gBAAoB3B,QAAOgC,SAC7BA,QAAQC,KAAKP,EAAaC,IAI9B,QAASO,KACPC,IACAL,EAAI,wBAA0BM,SAASC,KAAO,KAC9CC,IACAC,IACAC,EAAa,aAAcC,GAC3BD,EAAa,UAAWE,GACxBC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,GAAcC,IACdC,EAAS,OAAQ,+BACjBC,KAGF,QAASjB,KACP,QAASkB,GAAQC,GACf,MAAO,SAAWA,EAGpB,GAAIC,GAAOC,GAAQC,OAAOC,IAAUC,MAAM,IAE1C9B,IAAO0B,EAAK,GACZK,EAAanE,IAAc8D,EAAK,GAAKM,OAAON,EAAK,IAAMK,EACvDE,GAAiBrE,IAAc8D,EAAK,GAAKF,EAAQE,EAAK,IAAMO,GAC5D/B,GAAUtC,IAAc8D,EAAK,GAAKF,EAAQE,EAAK,IAAMxB,GACrDgC,GAAWtE,IAAc8D,EAAK,GAAKM,OAAON,EAAK,IAAMQ,GACrDC,EAAavE,IAAc8D,EAAK,GAAKF,EAAQE,EAAK,IAAMS,EACxDC,EAAgBV,EAAK,GACrBW,GAAiBzE,IAAc8D,EAAK,GAAKA,EAAK,GAAKW,GACnDzB,EAAiBc,EAAK,GACtBb,EAAca,EAAK,IACnBY,GAAY1E,IAAc8D,EAAK,IAAMM,OAAON,EAAK,KAAOY,GACxDlB,GAAYmB,OAAS3E,IAAc8D,EAAK,KAAMF,EAAQE,EAAK,KAC3Dc,GAAa5E,IAAc8D,EAAK,IAAMA,EAAK,IAAMc,GACjDC,GAAgB7E,IAAc8D,EAAK,IAAMA,EAAK,IAAMe,GAGtD,QAAShC,KACP,QAASiC,KACP,GAAIhB,GAAOvD,OAAOwE,aAElB1C,GAAI,2BAA6B2C,KAAKC,UAAUnB,IAEhDoB,GACE,mBAAqBpB,GAAOA,EAAKoB,gBAAkBA,GACrDvB,GACE,iBAAmBG,GAAOA,EAAKH,cAAgBA,GACjDwB,GACE,gBAAkBrB,GAAOA,EAAKsB,aAAeD,GAC/CV,GACE,2BAA6BX,GACzBA,EAAKuB,wBACLZ,GACNI,GACE,0BAA4Bf,GACxBA,EAAKwB,uBACLT,GAGR,QAASU,GAAuBC,EAAUC,GAOxC,MANI,kBAAsBD,KACxBnD,EAAI,gBAAkBoD,EAAW,cACjCC,GAAkBD,GAAYD,EAC9BA,EAAW,UAGNA,EAIP,iBAAmBjF,SACnBoF,SAAWpF,OAAOwE,cAAca,cAEhCd,IACAL,GAAiBc,EAAuBd,GAAgB,UACxDI,GAAgBU,EAAuBV,GAAe,UAGxDxC,EAAI,mCAAqC8C,IAG3C,QAASU,GAAOC,EAAMC,GAKpB,OAJK,IAAMA,EAAMC,QAAQ,OACvBxD,EAAK,kCAAoCsD,GACzCC,EAAQ,IAEHA,EAGT,QAAShD,GAAa+C,EAAMC,GACtB/F,IAAc+F,GAAS,KAAOA,GAAS,SAAWA,IACpDE,SAASC,KAAKC,MAAML,GAAQC,EAC5B1D,EAAI,QAAUyD,EAAO,YAAcC,EAAQ,MAI/C,QAASjD,KAEH9C,IAAcwE,IAChBA,EAAgBL,EAAa,MAG/BpB,EAAa,SAAU8C,EAAO,SAAUrB,IAG1C,QAASnB,KACP4C,SAASG,gBAAgBD,MAAME,OAAS,GACxCJ,SAASC,KAAKC,MAAME,OAAS,GAC7BhE,EAAI,oCAGN,QAASiE,GAAmBhG,GAC1B,GAAIiG,IACFC,IAAK,SAASC,GACZ,QAASC,KACPhD,EAASpD,EAAQmG,UAAWnG,EAAQqG,WAGtCC,GAAoBH,GAAaC,EAEjCxG,EAAiBK,OAAQkG,EAAWC,GAAeG,SAAS,KAE9DC,OAAQ,SAASL,GACf,GAAIC,GAAcE,GAAoBH,SAC/BG,IAAoBH,GAE3B/F,EAAoBH,OAAQkG,EAAWC,IAIvCpG,GAAQyG,YAAcC,MAAMC,UAAUC,KACxC5G,EAAQmG,UAAYnG,EAAQyG,WAAW,GACvCzG,EAAQyG,WAAWG,IAAIX,EAASjG,EAAQ6G,UAExCZ,EAASjG,EAAQ6G,QAAQ7G,EAAQmG,WAGnCpE,EACEzB,EAAsBN,EAAQ6G,QAC5B,oBACA7G,EAAQqG,WAId,QAASS,GAAqBD,GAC5Bb,GACEa,OAAQA,EACRR,UAAW,kBACXI,YAAa,iBAAkB,0BAEjCT,GACEa,OAAQA,EACRR,UAAW,sBACXI,YAAa,qBAAsB,8BAErCT,GACEa,OAAQA,EACRR,UAAW,gBACXI,YAAa,eAAgB,wBAE/BT,GACEa,OAAQA,EACRR,UAAW,QACXF,UAAW,UAEbH,GACEa,OAAQA,EACRR,UAAW,WACXF,UAAW,YAEbH,GACEa,OAAQA,EACRR,UAAW,aACXF,UAAW,cAEbH,GACEa,OAAQA,EACRR,UAAW,qBACXF,UAAW,sBAEbH,GACEa,OAAQA,EACRR,UAAW,QACXF,WAAY,aAAc,iBAE5BH,GACEa,OAAQA,EACRR,UAAW,qBACXF,UAAW,qBAEbH,GACEa,OAAQA,EACRR,UAAW,cACXF,UAAW,eAEbH,GACEa,OAAQA,EACRR,UAAW,YACXF,UAAW,aAEbH,GACEa,OAAQA,EACRR,UAAW,eACXF,UAAW,gBAEbH,GACEa,OAAQA,EACRR,UAAW,mBACXI,YACE,kBACA,wBACA,oBACA,mBACA,sBAGJT,GACEa,OAAQA,EACRR,UAAW,uBACXI,YACE,sBACA,4BACA,wBACA,uBACA,0BAGJT,GACEa,OAAQA,EACRR,UAAW,iBACXI,YACE,gBACA,sBACA,kBACA,iBACA,oBAGA,UAAYnC,IACd0B,GACEa,OAAQA,EACRR,UAAW,iBACXF,UAAW,WAKjB,QAASY,GAAc7B,EAAU8B,EAAiBC,EAAOC,GAWvD,MAVIF,KAAoB9B,IAChBA,IAAY+B,KAChB/E,EACEgD,EAAW,8BAAgCgC,EAAO,sBAEpDhC,EAAW8B,GAEbjF,EAAImF,EAAO,+BAAiChC,EAAW,MAGlDA,EAGT,QAASrC,KACPsB,GAAiB4C,EACf5C,GACAgD,GACAC,GACA,UAIJ,QAAStE,KACPyB,GAAgBwC,EACdxC,GACA8C,GACAC,GACA,SAIJ,QAASrE,MACH,IAASgB,GACX6C,EAAqB,OACrBS,KAEAxF,EAAI,wBAIR,QAASyF,KACPzF,EAAI,6BACJ0F,IAAa,EAGf,QAASC,KACP3F,EAAI,kCACJ3B,EAAoBH,OAAQ,UAAW0H,GAGzC,QAASC,KACH,OAASC,GAEXA,EAAaC,aAIjB,QAASC,KACPjB,EAAqB,UACrBc,IACAI,cAAcC,IAGhB,QAASC,KACPV,IACAE,KACI,IAASzD,GAAY8D,IAG3B,QAASnF,KACP,GAAIuF,GAAWxC,SAASyC,cAAc,MACtCD,GAAStC,MAAMwC,MAAQ,OACvBF,EAAStC,MAAMyC,QAAU,QACzB3C,SAASC,KAAK2C,YAAYJ,GAG5B,QAAShF,KACP,QAASqF,KACP,OACEC,EACExI,OAAOyI,cAAgBhJ,EACnBO,OAAOyI,YACP/C,SAASG,gBAAgB6C,WAC/BC,EACE3I,OAAO4I,cAAgBnJ,EACnBO,OAAO4I,YACPlD,SAASG,gBAAgBgD,WAInC,QAASC,GAAmBlJ,GAC1B,GAAImJ,GAAanJ,EAAGoJ,wBAClBC,EAAeV,GAEjB,QACEC,EAAGU,SAASH,EAAWI,KAAM,IAAMD,SAASD,EAAaT,EAAG,IAC5DG,EAAGO,SAASH,EAAWK,IAAK,IAAMF,SAASD,EAAaN,EAAG,KAI/D,QAASU,GAAWjH,GAClB,QAASkH,GAAaC,GACpB,GAAIC,GAAeV,EAAmBS,EAEtCzH,GACE,4BACE2H,EACA,WACAD,EAAahB,EACb,OACAgB,EAAab,GAEjBe,EAAQF,EAAab,EAAGa,EAAahB,EAAG,kBAG1C,GAAIiB,GAAOrH,EAASuB,MAAM,KAAK,IAAMvB,EACnCuH,EAAWC,mBAAmBH,GAC9BF,EACE7D,SAASmE,eAAeF,IACxBjE,SAASoE,kBAAkBH,GAAU,EAErClK,KAAc8J,EAChBD,EAAaC,IAEbzH,EACE,kBACE2H,EACA,+CAEJC,EAAQ,EAAG,EAAG,aAAc,IAAMD,IAItC,QAASM,KACH,KAAO3H,SAASqH,MAAQ,MAAQrH,SAASqH,MAC3CJ,EAAWjH,SAASC,MAIxB,QAAS2H,KACP,QAASC,GAAUrK,GACjB,QAASsK,GAAYC,GACnBA,EAAEC,iBAGFf,EAAW/H,KAAK+I,aAAa,SAG3B,MAAQzK,EAAGyK,aAAa,SAC1B1K,EAAiBC,EAAI,QAASsK,GAIlCzD,MAAMC,UAAU4D,QAAQC,KACtB7E,SAAS8E,iBAAiB,gBAC1BP,GAIJ,QAASQ,KACP9K,EAAiBK,OAAQ,aAAc+J,GAGzC,QAASW,KAEPjJ,WAAWsI,EAAmBY,IAGhC,QAASC,KAEHnE,MAAMC,UAAU4D,SAAW5E,SAAS8E,kBACtC1I,EAAI,qCACJkI,IACAS,IACAC,KAEAzI,EACE,2FAWN,MANIgB,IAAYmB,OACdwG,IAEA9I,EAAI,gCAIJuH,WAAYA,GAIhB,QAAStG,KACPjB,EAAI,yBAEJ+I,GAAIC,cACF9G,WAAY,SAAqB+G,GAU/B,OATI,IAASA,IAAU,IAAU/G,GAC/BA,GAAa,EACbhB,MAES,IAAU+H,IAAU,IAAS/G,IACtCA,GAAa,EACb8D,KAGK9D,GAGTgH,MAAO,WACLtB,EAAQ,EAAG,EAAG,SACdzB,KAGFgD,MAAO,WACL,MAAOpJ,KAGTqJ,YAAa,SAAsBC,GAC7B,kBAAsBA,IACxBC,GAAmBD,EACnBzB,EAAQ,EAAG,EAAG,cAEd0B,GAAmB,aACnB1B,EAAQ,EAAG,EAAG,kBAIlB2B,aAAc,SAAuB5B,GACnCxG,GAAYoG,WAAWI,IAGzB6B,MAAO,WACLC,EAAY,uBAGdC,SAAU,SAAmBhD,EAAGG,GAC9Be,EAAQf,EAAGH,EAAG,aAGhBiD,eAAgB,SAAmBjD,EAAGG,GACpCe,EAAQf,EAAGH,EAAG,mBAGhBkD,YAAa,SAAsB/J,EAAKkD,GACtC6E,EAAQ,EAAG,EAAG,UAAWjF,KAAKC,UAAU/C,GAAMkD,IAGhD8G,2BAA4B,SAC1B7G,GAEAZ,GAAiBY,EACjBlC,KAGFgJ,0BAA2B,SACzB7G,GAEAT,GAAgBS,EAChBlC,KAGFgJ,gBAAiB,SAA0BhH,GACzC/C,EAAI,qBAAuB+C,GAC3BD,GAAsBC,GAGxBiH,KAAM,SAAeC,EAAcC,GAMjC7I,EACE,OACA,sBALC4I,GAA8B,KAC9BC,EAAc,IAAMA,EAAc,IAIA,IACnCD,EACAC,KAMR,QAASC,KACH,IAAMlI,KACRjC,EAAI,gBAAkBiC,GAAW,MACjCiE,GAAgBkE,YAAY,WAC1B/I,EAAS,WAAY,gBAAkBY,KACtCoI,KAAKC,IAAIrI,MAIW,QAASsI,KAClC,QAASC,GAAqBC,GAC5B,QAASC,GAAqBC,IACxB,IAAUA,EAAQC,WACpB5K,EAAI,uBAAyB2K,EAAQE,KACrCF,EAAQ9M,iBAAiB,OAAQiN,GAAa,GAC9CH,EAAQ9M,iBAAiB,QAASkN,GAAY,GAC9CC,EAASC,KAAKN,IAII,eAAlBF,EAAStF,MAAoD,QAA3BsF,EAASS,cAC7CR,EAAqBD,EAAShD,QACH,cAAlBgD,EAAStF,MAClBR,MAAMC,UAAU4D,QAAQC,KACtBgC,EAAShD,OAAOiB,iBAAiB,OACjCgC,GAKN,QAASS,GAAgBR,GACvBK,EAASI,OAAOJ,EAASrH,QAAQgH,GAAU,GAG7C,QAASU,GAAwBV,GAC/B3K,EAAI,yBAA2B2K,EAAQE,KACvCF,EAAQtM,oBAAoB,OAAQyM,GAAa,GACjDH,EAAQtM,oBAAoB,QAAS0M,GAAY,GACjDI,EAAgBR,GAGlB,QAASW,GAAoBC,EAAOpG,EAAMqG,GACxCH,EAAwBE,EAAM9D,QAC9BpG,EAAS8D,EAAMqG,EAAW,KAAOD,EAAM9D,OAAOoD,IAAKlN,EAAWA,GAGhE,QAASmN,GAAYS,GACnBD,EAAoBC,EAAO,YAAa,gBAG1C,QAASR,GAAWQ,GAClBD,EAAoBC,EAAO,kBAAmB,qBAGhD,QAASE,GAAiBC,GACxBrK,EACE,mBACA,qBAAuBqK,EAAU,GAAGjE,OAAS,IAAMiE,EAAU,GAAGvG,MAIlEuG,EAAUlD,QAAQgC,GAGpB,QAASmB,KACP,GAAIlE,GAAS7D,SAASgI,cAAc,QAClCC,GACEC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,EAQb,OALAC,GAAW,GAAIC,GAAiBZ,GAEhCzL,EAAI,gCACJoM,EAASE,QAAQ7E,EAAQoE,GAElBO,EAGT,GAAIpB,MACFqB,EACEnO,OAAOmO,kBAAoBnO,OAAOqO,uBACpCH,EAAWT,GAEb,QACE5F,WAAY,WACN,cAAgBqG,KAClBpM,EAAI,oCACJoM,EAASrG,aACTiF,EAASxC,QAAQ6C,MAMzB,QAAS7F,KACP,GAAIgH,GAAqB,EAAIvK,EAG3B/D,QAAOmO,kBACPnO,OAAOqO,uBAEHC,EACFrC,IAEArE,EAAeyE,KAGjBvK,EAAI,mDACJmK,KAMJ,QAASsC,GAAiBC,EAAM5O,GAE9B,QAAS6O,GAAuBjJ,GAG9B,GAFY,cAEFkJ,KAAKlJ,GACb,MAAO0D,UAAS1D,EAAOmJ,EAGzB,IAAI/I,GAAQhG,EAAGgG,MAAMuD,KACnByF,EAAehP,EAAGgP,aAAazF,IAQjC,OANAvJ,GAAGgP,aAAazF,KAAOvJ,EAAGiP,aAAa1F,KACvCvJ,EAAGgG,MAAMuD,KAAO3D,GAAS,EACzBA,EAAQ5F,EAAGgG,MAAMkJ,UACjBlP,EAAGgG,MAAMuD,KAAOvD,EAChBhG,EAAGgP,aAAazF,KAAOyF,EAEhBpJ,EAGT,GAAIuJ,GAAS,CAcb,OAbAnP,GAAKA,GAAM8F,SAASC,KAGlB,eAAiBD,WACjB,oBAAsBA,UAASsJ,aAE/BD,EAASrJ,SAASsJ,YAAYT,iBAAiB3O,EAAI,MACnDmP,EAAS,OAASA,EAASA,EAAOP,GAAQ,GAG1CO,EAASN,EAAuB7O,EAAGiP,aAAaL,IAG3CtF,SAAS6F,EAAQJ,GAG1B,QAASM,GAAgBC,GACnBA,EAAQ7N,GAAiB,IAC3BA,GAAiB,EAAI6N,EACrBpN,EAAI,+BAAiCT,GAAiB,OAK1D,QAAS8N,GAAcC,EAAMtC,GAO3B,IAAK,GANDuC,GAAiBvC,EAASwC,OAC5BC,EAAQ,EACRC,EAAS,EACTC,EAAOpP,EAAsB+O,GAC7BF,EAAQjO,KAEDyO,EAAI,EAAGA,EAAIL,EAAgBK,KAClCH,EACEzC,EAAS4C,GAAG1G,wBAAwBoG,GACpCb,EAAiB,SAAWkB,EAAM3C,EAAS4C,KACjCF,IACVA,EAASD,EAWb,OAPAL,GAAQjO,KAAWiO,EAEnBpN,EAAI,UAAYuN,EAAiB,kBACjCvN,EAAI,kCAAoCoN,EAAQ,MAEhDD,EAAgBC,GAETM,EAGT,QAASG,GAAmBC,GAC1B,OACEA,EAAUC,aACVD,EAAUE,aACVF,EAAUG,wBACVH,EAAUI,yBAId,QAASC,GAAkBb,EAAMc,GAC/B,QAASC,KAEP,MADAlO,GAAK,uBAAyBiO,EAAM,mBAC7BxK,SAAS8E,iBAAiB,UAGnC,GAAIsC,GAAWpH,SAAS8E,iBAAiB,IAAM0F,EAAM,IAIrD,OAFI,KAAMpD,EAASwC,QAAQa,IAEpBhB,EAAcC,EAAMtC,GAG7B,QAASsD,KACP,MAAO1K,UAAS8E,iBAAiB,UAoGnC,QAAS6F,GACPC,EACAC,EACAxE,EACAC,GAEA,QAASwE,KACP1K,GAAS2K,EACTC,GAAQC,EAERjH,EAAQ5D,GAAQ4K,GAAOJ,GAGzB,QAASM,KACP,QAASC,GAAeC,EAAGC,GAEzB,QADa5E,KAAKC,IAAI0E,EAAIC,IAAM5M,IASlC,MALAsM,GACEhR,IAAcsM,EAAeA,EAAe5E,GAAUjD,MACxDyM,EACElR,IAAcuM,EAAcA,EAAc3E,GAAS/C,MAGnDuM,EAAe/K,GAAQ2K,IACtB3M,IAAkB+M,EAAeH,GAAOC,GAI7C,QAASK,KACP,QAASV,KAAkBpO,KAAM,EAAG6B,SAAU,EAAG+H,KAAM,IAGzD,QAASmF,KACP,MACE/M,MAAkBgN,KACjBpN,IAAkBQ,KAAiB4M,IAIxC,QAASC,KACPrP,EAAI,8BAGN,QAASsP,KACHJ,KAA2BC,IAC7B1F,EAAYgF,GACDD,KAAkBvM,SAAU,IACvCoN,IAIJ,GAAIV,GAAeE,CAEfC,MAA0B,SAAWN,GACvCe,IACAb,KAEAY,IAMJ,QAASjO,GAASmN,EAAcC,EAAkBxE,EAAcC,GAC9D,QAASsF,KACDhB,KAAkBhF,MAAO,EAAGiG,UAAW,EAAGrP,KAAM,IACpDJ,EAAI,kBAAoByO,GAI5B,QAASiB,KACP,MAAOC,KAAiBnB,IAAgBoB,IAGrCF,IAaH1P,EAAI,4BAA8BwO,IAZlCgB,IACqB,SAAjBhB,EACFD,EAAWC,EAAcC,EAAkBxE,EAAcC,GAEzD2F,GACErB,EACAC,EACAxE,EACAC,IAQR,QAASqF,KACFI,KACHA,IAAgB,EAChB3P,EAAI,0BAENN,aAAaoQ,IACbA,GAAqBnQ,WAAW,WAC9BgQ,IAAgB,EAChB3P,EAAI,0BACJA,EAAI,OACH6I,IAGL,QAASkH,GAAavB,GACpBxK,GAASqB,GAAUjD,MACnBwM,GAAQrJ,GAAS/C,MAEjBoF,EAAQ5D,GAAQ4K,GAAOJ,GAGzB,QAAS/E,GAAYgF,GACnB,GAAIuB,GAAM5N,EACVA,IAAiBgD,GAEjBpF,EAAI,wBAA0ByO,GAC9Bc,IACAQ,EAAa,SAEb3N,GAAiB4N,EAGnB,QAASpI,GAAQ5D,EAAQ4K,EAAOJ,EAAc3O,EAAKkD,GACjD,QAASgH,KACHpM,IAAcoF,EAChBA,EAAeD,GAEf9C,EAAI,yBAA2B+C,GAInC,QAASkN,KACP,GAAIjG,GAAOhG,EAAS,IAAM4K,EACxBsB,EACEnQ,GACA,IACAiK,EACA,IACAwE,GACC7Q,IAAckC,EAAM,IAAMA,EAAM,GAErCG,GAAI,iCAAmCkQ,EAAU,KACjDzI,GAAO0I,YAAYrQ,GAAQoQ,EAASnN,IAGlC,IAAS2C,KACXqE,IACAkG,KAIJ,QAASrK,GAAS2F,GAiDhB,QAAS6E,KACP,MAAOtQ,OAAW,GAAKyL,EAAM9J,MAAME,OAAO,EAAGC,IAG/C,QAASyO,KACP,MAAO9E,GAAM9J,KAAKI,MAAM,KAAK,GAAGA,MAAM,KAAK,GAG7C,QAASyO,KACP,MAAO/E,GAAM9J,KAAKE,OAAO4J,EAAM9J,KAAKkC,QAAQ,KAAO,GAGrD,QAAS4M,KACP,QACuB,mBAAXC,SAA0BA,OAAOC,UACzC,gBAAkBvS,SACnB,UAAYA,SAAU,gBAAkBA,QAAOwS,OAAO9L,UAI3D,QAAS+L,KAGP,MAAOpF,GAAM9J,KAAKI,MAAM,KAAK,KAAQ+O,KAAM,EAAGC,MAAO,GAGvD,QAASC,KACP,GAAIC,GAAcV,GAEdU,KAAeC,GACjBA,EAAyBD,KACfR,KAAmBI,KAC7BxQ,EAAK,uBAAyBoL,EAAM9J,KAAO,KAI/C,QAASwP,MACH,IAAUC,GACZJ,IACSH,IACTK,EAAyB5Q,OAEzBJ,EACE,4BACEqQ,IACA,sCA7FR,GAAIW,IACF5Q,KAAM,WACJsB,GAAU6J,EAAM9J,KAChBgG,GAAS8D,EAAM4F,OAEf/Q,IACA8Q,IAAW,EACXvR,WAAW,WACTyR,IAAW,GACVvI,KAGLW,MAAO,WACA4H,GAIHpR,EAAI,+BAHJA,EAAI,gCACJ+P,EAAa,eAMjB9G,OAAQ,WACN5H,EAAS,eAAgB,uCAG3BkI,aAAc,WACZpI,GAAYoG,WAAW+I,MAEzBe,WAAY,WACV7R,KAAK+J,gBAGP+H,SAAU,WACR,GAAIC,GAAUjB,GACdtQ,GAAI,0CAA4CuR,GAChDjI,GAAiB3G,KAAK6O,MAAMD,IAC5BvR,EAAI,QAGNkQ,QAAS,WACP,GAAIqB,GAAUjB,GAEdtQ,GAAI,uCAAyCuR,GAC7C1O,GAAgBF,KAAK6O,MAAMD,IAC3BvR,EAAI,QAsDJoQ,MACFa,IAMJ,QAASQ,KACH,YAAc7N,SAAS8N,YACzBxT,OAAOyT,OAAOxB,YAAY,4BAA6B,KA7wC3D,GAAsB,mBAAXjS,QAAX,CAEA,GAAIgE,IAAa,EACf2K,EAAO,GACPlM,EAAiB,GACjBmB,EAAa,EACbK,EAAgB,GAChB2D,EAAe,KACflF,EAAc,GACdoB,IAAiB,EACjB4N,IAAoB3G,OAAQ,EAAG2I,MAAO,GACtC/I,GAAmB,IACnBqI,IAAW,EACXlN,GAAS,EACToB,GAAwB,aACxBhD,GAAiBgD,GACjBgM,IAAW,EACX1P,GAAU,GACVP,MACAc,GAAW,GACXiE,GAAgB,KAChBjG,IAAU,EACVH,GAAQ,gBACR8B,GAAW9B,GAAM0N,OACjBzN,GAAO,GAEPqP,IACEyC,IAAK,EACLC,IAAK,EACL9D,WAAY,EACZE,sBAAuB,GAEzB3L,GAAa,QACbmD,IAAa,EACb+B,GAASvJ,OAAOyT,OAChB7O,GAAsB,IACtBT,GAAY,EACZsN,IAAgB,EAChBG,GAAqB,KACrBvQ,GAAiB,GACjBqP,GAAQ,EACRtJ,GAAuB,SACvB9C,GAAgB8C,GAChByD,GAAM7K,OACN2E,GAAkB,WAChB1C,EAAK,yCAEPmB,GAAgB,aAChBgI,GAAmB,aACnBjG,IACEW,OAAQ,WAEN,MADA7D,GAAK,kDACEyD,SAASG,gBAAgBgO,cAElCnD,MAAO,WAEL,MADAzO,GAAK,iDACEyD,SAASC,KAAKmO,cAGzBzN,MACApG,IAAmB,EACnB8T,IAAgB,CAIlB,KACE,GAAIhU,IAAUqF,OAAO4O,WAGjB1N,SACE2N,IAAK,WACHhU,IAAmB,IAGvBiU,MACED,IAAK,WACHF,IAAgB,KAKxB/T,QAAOL,iBAAiB,OAAQD,EAAMK,IACtCC,OAAOG,oBAAoB,OAAQT,EAAMK,IACzC,MAAOoK,KA4ET,GAAIlJ,IACFkT,KAAKhT,KACL,WAEE,OAAO,GAAIgT,OAAOC,WAowBlBjN,IACA0I,WAAY,WACV,MACEnK,UAASC,KAAKkO,aACdtF,EAAiB,aACjBA,EAAiB,iBAIrB8F,OAAQ,WACN,MAAOlN,IAAU0I,cAGnBC,WAAY,WACV,MAAOpK,UAASC,KAAK2O,cAGvBC,OAAQ,WACN,MAAOpP,IAAkBW,UAG3BiK,sBAAuB,WACrB,MAAOrK,UAASG,gBAAgBgO,cAGlC7D,sBAAuB,WACrB,MAAOtK,UAASG,gBAAgByO,cAGlCX,IAAK,WACH,MAAOxH,MAAKwH,IAAIzS,MAAM,KAAMyO,EAAmBxI,MAGjDyM,IAAK,WACH,MAAOzH,MAAKyH,IAAI1S,MAAM,KAAMyO,EAAmBxI,MAGjDqN,KAAM,WACJ,MAAOrN,IAAUwM,OAGnBc,cAAe,WACb,MAAOtI,MAAKwH,IACVxM,GAAU0I,cAAgB1I,GAAU4I,wBACpCZ,EAAc,SAAUiB,OAI5BsE,cAAe,WACb,MAAOzE,GAAkB,SAAU,wBAGvC5I,IACEyI,WAAY,WACV,MAAOpK,UAASC,KAAKmO,aAGvBjE,WAAY,WACV,MAAOnK,UAASC,KAAKgP,aAGvBJ,OAAQ,WACN,MAAOpP,IAAkBuL,SAG3BV,sBAAuB,WACrB,MAAOtK,UAASG,gBAAgBiO,aAGlC/D,sBAAuB,WACrB,MAAOrK,UAASG,gBAAgB8O,aAGlCC,OAAQ,WACN,MAAOzI,MAAKwH,IACVtM,GAASyI,aACTzI,GAAS2I,0BAIb2D,IAAK,WACH,MAAOxH,MAAKwH,IAAIzS,MAAM,KAAMyO,EAAmBtI,MAGjDuM,IAAK,WACH,MAAOzH,MAAKyH,IAAI1S,MAAM,KAAMyO,EAAmBtI,MAGjDwN,iBAAkB,WAChB,MAAO1F,GAAc,QAASiB,MAGhCsE,cAAe,WACb,MAAOzE,GAAkB,QAAS,uBAmEpC0B,GAAsBjR,EAAS2P,EA0MnC1Q,GAAiBK,OAAQ,UAAW0H,GACpC/H,EAAiBK,OAAQ,mBAAoBuT,GAC7CA","file":"iframeResizer.contentWindow.min.js","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(function(undefined) {\n 'use strict';\n\n if (typeof window === 'undefined') return; // don't run for server side render\n\n var autoResize = true,\n base = 10,\n bodyBackground = '',\n bodyMargin = 0,\n bodyMarginStr = '',\n bodyObserver = null,\n bodyPadding = '',\n calculateWidth = false,\n doubleEventList = { resize: 1, click: 1 },\n eventCancelTimer = 128,\n firstRun = true,\n height = 1,\n heightCalcModeDefault = 'bodyOffset',\n heightCalcMode = heightCalcModeDefault,\n initLock = true,\n initMsg = '',\n inPageLinks = {},\n interval = 32,\n intervalTimer = null,\n logging = false,\n msgID = '[iFrameSizer]', //Must match host page msg ID\n msgIdLen = msgID.length,\n myID = '',\n observer = null,\n resetRequiredMethods = {\n max: 1,\n min: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n },\n resizeFrom = 'child',\n sendPermit = true,\n target = window.parent,\n targetOriginDefault = '*',\n tolerance = 0,\n triggerLocked = false,\n triggerLockedTimer = null,\n throttledTimer = 16,\n width = 1,\n widthCalcModeDefault = 'scroll',\n widthCalcMode = widthCalcModeDefault,\n win = window,\n messageCallback = function() {\n warn('MessageCallback function not defined');\n },\n readyCallback = function() {},\n pageInfoCallback = function() {},\n customCalcMethods = {\n height: function() {\n warn('Custom height calculation function not defined');\n return document.documentElement.offsetHeight;\n },\n width: function() {\n warn('Custom width calculation function not defined');\n return document.body.scrollWidth;\n }\n },\n eventHandlersByName = {},\n passiveSupported = false,\n onceSupported = false;\n\n function noop() {}\n\n try {\n var options = Object.create(\n {},\n {\n passive: {\n get: function() {\n passiveSupported = true;\n }\n },\n once: {\n get: function() {\n onceSupported = true;\n }\n }\n }\n );\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop, options);\n } catch (e) {\n /* */\n }\n\n function addEventListener(el, evt, func, options) {\n /* istanbul ignore else */ // Not testable in phantomJS\n if ('addEventListener' in window) {\n el.addEventListener(evt, func, passiveSupported ? options || {} : false);\n } else if ('attachEvent' in window) {\n //IE\n el.attachEvent('on' + evt, func);\n }\n }\n\n function removeEventListener(el, evt, func) {\n /* istanbul ignore else */ // Not testable in phantomJS\n if ('removeEventListener' in window) {\n el.removeEventListener(evt, func, false);\n } else if ('detachEvent' in window) {\n //IE\n el.detachEvent('on' + evt, func);\n }\n }\n\n function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n //Based on underscore.js\n function throttle(func) {\n var context,\n args,\n result,\n timeout = null,\n previous = 0,\n later = function() {\n previous = getNow();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n\n return function() {\n var now = getNow();\n\n if (!previous) {\n previous = now;\n }\n\n var remaining = throttledTimer - (now - previous);\n\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > throttledTimer) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n }\n\n var getNow =\n Date.now ||\n function() {\n /* istanbul ignore next */ // Not testable in PhantonJS\n return new Date().getTime();\n };\n\n function formatLogMsg(msg) {\n return msgID + '[' + myID + ']' + ' ' + msg;\n }\n\n function log(msg) {\n if (logging && 'object' === typeof window.console) {\n console.log(formatLogMsg(msg));\n }\n }\n\n function warn(msg) {\n if ('object' === typeof window.console) {\n console.warn(formatLogMsg(msg));\n }\n }\n\n function init() {\n readDataFromParent();\n log('Initialising iFrame (' + location.href + ')');\n readDataFromPage();\n setMargin();\n setBodyStyle('background', bodyBackground);\n setBodyStyle('padding', bodyPadding);\n injectClearFixIntoBodyElement();\n checkHeightMode();\n checkWidthMode();\n stopInfiniteResizingOfIFrame();\n setupPublicMethods();\n startEventListeners();\n inPageLinks = setupInPageLinks();\n sendSize('init', 'Init message from host page');\n readyCallback();\n }\n\n function readDataFromParent() {\n function strBool(str) {\n return 'true' === str ? true : false;\n }\n\n var data = initMsg.substr(msgIdLen).split(':');\n\n myID = data[0];\n bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin; //For V1 compatibility\n calculateWidth = undefined !== data[2] ? strBool(data[2]) : calculateWidth;\n logging = undefined !== data[3] ? strBool(data[3]) : logging;\n interval = undefined !== data[4] ? Number(data[4]) : interval;\n autoResize = undefined !== data[6] ? strBool(data[6]) : autoResize;\n bodyMarginStr = data[7];\n heightCalcMode = undefined !== data[8] ? data[8] : heightCalcMode;\n bodyBackground = data[9];\n bodyPadding = data[10];\n tolerance = undefined !== data[11] ? Number(data[11]) : tolerance;\n inPageLinks.enable = undefined !== data[12] ? strBool(data[12]) : false;\n resizeFrom = undefined !== data[13] ? data[13] : resizeFrom;\n widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode;\n }\n\n function readDataFromPage() {\n function readData() {\n var data = window.iFrameResizer;\n\n log('Reading data from page: ' + JSON.stringify(data));\n\n messageCallback =\n 'messageCallback' in data ? data.messageCallback : messageCallback;\n readyCallback =\n 'readyCallback' in data ? data.readyCallback : readyCallback;\n targetOriginDefault =\n 'targetOrigin' in data ? data.targetOrigin : targetOriginDefault;\n heightCalcMode =\n 'heightCalculationMethod' in data\n ? data.heightCalculationMethod\n : heightCalcMode;\n widthCalcMode =\n 'widthCalculationMethod' in data\n ? data.widthCalculationMethod\n : widthCalcMode;\n }\n\n function setupCustomCalcMethods(calcMode, calcFunc) {\n if ('function' === typeof calcMode) {\n log('Setup custom ' + calcFunc + 'CalcMethod');\n customCalcMethods[calcFunc] = calcMode;\n calcMode = 'custom';\n }\n\n return calcMode;\n }\n\n if (\n 'iFrameResizer' in window &&\n Object === window.iFrameResizer.constructor\n ) {\n readData();\n heightCalcMode = setupCustomCalcMethods(heightCalcMode, 'height');\n widthCalcMode = setupCustomCalcMethods(widthCalcMode, 'width');\n }\n\n log('TargetOrigin for parent set to: ' + targetOriginDefault);\n }\n\n function chkCSS(attr, value) {\n if (-1 !== value.indexOf('-')) {\n warn('Negative CSS value ignored for ' + attr);\n value = '';\n }\n return value;\n }\n\n function setBodyStyle(attr, value) {\n if (undefined !== value && '' !== value && 'null' !== value) {\n document.body.style[attr] = value;\n log('Body ' + attr + ' set to \"' + value + '\"');\n }\n }\n\n function setMargin() {\n //If called via V1 script, convert bodyMargin from int to str\n if (undefined === bodyMarginStr) {\n bodyMarginStr = bodyMargin + 'px';\n }\n\n setBodyStyle('margin', chkCSS('margin', bodyMarginStr));\n }\n\n function stopInfiniteResizingOfIFrame() {\n document.documentElement.style.height = '';\n document.body.style.height = '';\n log('HTML & body height set to \"auto\"');\n }\n\n function manageTriggerEvent(options) {\n var listener = {\n add: function(eventName) {\n function handleEvent() {\n sendSize(options.eventName, options.eventType);\n }\n\n eventHandlersByName[eventName] = handleEvent;\n\n addEventListener(window, eventName, handleEvent, { passive: true });\n },\n remove: function(eventName) {\n var handleEvent = eventHandlersByName[eventName];\n delete eventHandlersByName[eventName];\n\n removeEventListener(window, eventName, handleEvent);\n }\n };\n\n if (options.eventNames && Array.prototype.map) {\n options.eventName = options.eventNames[0];\n options.eventNames.map(listener[options.method]);\n } else {\n listener[options.method](options.eventName);\n }\n\n log(\n capitalizeFirstLetter(options.method) +\n ' event listener: ' +\n options.eventType\n );\n }\n\n function manageEventListeners(method) {\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Start',\n eventNames: ['animationstart', 'webkitAnimationStart']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Iteration',\n eventNames: ['animationiteration', 'webkitAnimationIteration']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Animation End',\n eventNames: ['animationend', 'webkitAnimationEnd']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Input',\n eventName: 'input'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Up',\n eventName: 'mouseup'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Down',\n eventName: 'mousedown'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Orientation Change',\n eventName: 'orientationchange'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Print',\n eventName: ['afterprint', 'beforeprint']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Ready State Change',\n eventName: 'readystatechange'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Start',\n eventName: 'touchstart'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch End',\n eventName: 'touchend'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Cancel',\n eventName: 'touchcancel'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Start',\n eventNames: [\n 'transitionstart',\n 'webkitTransitionStart',\n 'MSTransitionStart',\n 'oTransitionStart',\n 'otransitionstart'\n ]\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Iteration',\n eventNames: [\n 'transitioniteration',\n 'webkitTransitionIteration',\n 'MSTransitionIteration',\n 'oTransitionIteration',\n 'otransitioniteration'\n ]\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition End',\n eventNames: [\n 'transitionend',\n 'webkitTransitionEnd',\n 'MSTransitionEnd',\n 'oTransitionEnd',\n 'otransitionend'\n ]\n });\n if ('child' === resizeFrom) {\n manageTriggerEvent({\n method: method,\n eventType: 'IFrame Resized',\n eventName: 'resize'\n });\n }\n }\n\n function checkCalcMode(calcMode, calcModeDefault, modes, type) {\n if (calcModeDefault !== calcMode) {\n if (!(calcMode in modes)) {\n warn(\n calcMode + ' is not a valid option for ' + type + 'CalculationMethod.'\n );\n calcMode = calcModeDefault;\n }\n log(type + ' calculation method set to \"' + calcMode + '\"');\n }\n\n return calcMode;\n }\n\n function checkHeightMode() {\n heightCalcMode = checkCalcMode(\n heightCalcMode,\n heightCalcModeDefault,\n getHeight,\n 'height'\n );\n }\n\n function checkWidthMode() {\n widthCalcMode = checkCalcMode(\n widthCalcMode,\n widthCalcModeDefault,\n getWidth,\n 'width'\n );\n }\n\n function startEventListeners() {\n if (true === autoResize) {\n manageEventListeners('add');\n setupMutationObserver();\n } else {\n log('Auto Resize disabled');\n }\n }\n\n function stopMsgsToParent() {\n log('Disable outgoing messages');\n sendPermit = false;\n }\n\n function removeMsgListener() {\n log('Remove event listener: Message');\n removeEventListener(window, 'message', receiver);\n }\n\n function disconnectMutationObserver() {\n if (null !== bodyObserver) {\n /* istanbul ignore next */ // Not testable in PhantonJS\n bodyObserver.disconnect();\n }\n }\n\n function stopEventListeners() {\n manageEventListeners('remove');\n disconnectMutationObserver();\n clearInterval(intervalTimer);\n }\n\n function teardown() {\n stopMsgsToParent();\n removeMsgListener();\n if (true === autoResize) stopEventListeners();\n }\n\n function injectClearFixIntoBodyElement() {\n var clearFix = document.createElement('div');\n clearFix.style.clear = 'both';\n clearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n document.body.appendChild(clearFix);\n }\n\n function setupInPageLinks() {\n function getPagePosition() {\n return {\n x:\n window.pageXOffset !== undefined\n ? window.pageXOffset\n : document.documentElement.scrollLeft,\n y:\n window.pageYOffset !== undefined\n ? window.pageYOffset\n : document.documentElement.scrollTop\n };\n }\n\n function getElementPosition(el) {\n var elPosition = el.getBoundingClientRect(),\n pagePosition = getPagePosition();\n\n return {\n x: parseInt(elPosition.left, 10) + parseInt(pagePosition.x, 10),\n y: parseInt(elPosition.top, 10) + parseInt(pagePosition.y, 10)\n };\n }\n\n function findTarget(location) {\n function jumpToTarget(target) {\n var jumpPosition = getElementPosition(target);\n\n log(\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n );\n sendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n }\n\n var hash = location.split('#')[1] || location, //Remove # if present\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0];\n\n if (undefined !== target) {\n jumpToTarget(target);\n } else {\n log(\n 'In page link (#' +\n hash +\n ') not found in iFrame, so sending to parent'\n );\n sendMsg(0, 0, 'inPageLink', '#' + hash);\n }\n }\n\n function checkLocationHash() {\n if ('' !== location.hash && '#' !== location.hash) {\n findTarget(location.href);\n }\n }\n\n function bindAnchors() {\n function setupLink(el) {\n function linkClicked(e) {\n e.preventDefault();\n\n /*jshint validthis:true */\n findTarget(this.getAttribute('href'));\n }\n\n if ('#' !== el.getAttribute('href')) {\n addEventListener(el, 'click', linkClicked);\n }\n }\n\n Array.prototype.forEach.call(\n document.querySelectorAll('a[href^=\"#\"]'),\n setupLink\n );\n }\n\n function bindLocationHash() {\n addEventListener(window, 'hashchange', checkLocationHash);\n }\n\n function initCheck() {\n //check if page loaded with location hash after init resize\n setTimeout(checkLocationHash, eventCancelTimer);\n }\n\n function enableInPageLinks() {\n /* istanbul ignore else */ // Not testable in phantonJS\n if (Array.prototype.forEach && document.querySelectorAll) {\n log('Setting up location.hash handlers');\n bindAnchors();\n bindLocationHash();\n initCheck();\n } else {\n warn(\n 'In page linking not fully supported in this browser! (See README.md for IE8 workaround)'\n );\n }\n }\n\n if (inPageLinks.enable) {\n enableInPageLinks();\n } else {\n log('In page linking not enabled');\n }\n\n return {\n findTarget: findTarget\n };\n }\n\n function setupPublicMethods() {\n log('Enable public methods');\n\n win.parentIFrame = {\n autoResize: function autoResizeF(resize) {\n if (true === resize && false === autoResize) {\n autoResize = true;\n startEventListeners();\n //sendSize('autoResize','Auto Resize enabled');\n } else if (false === resize && true === autoResize) {\n autoResize = false;\n stopEventListeners();\n }\n\n return autoResize;\n },\n\n close: function closeF() {\n sendMsg(0, 0, 'close');\n teardown();\n },\n\n getId: function getIdF() {\n return myID;\n },\n\n getPageInfo: function getPageInfoF(callback) {\n if ('function' === typeof callback) {\n pageInfoCallback = callback;\n sendMsg(0, 0, 'pageInfo');\n } else {\n pageInfoCallback = function() {};\n sendMsg(0, 0, 'pageInfoStop');\n }\n },\n\n moveToAnchor: function moveToAnchorF(hash) {\n inPageLinks.findTarget(hash);\n },\n\n reset: function resetF() {\n resetIFrame('parentIFrame.reset');\n },\n\n scrollTo: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollTo'); // X&Y reversed at sendMsg uses height/width\n },\n\n scrollToOffset: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n },\n\n sendMessage: function sendMessageF(msg, targetOrigin) {\n sendMsg(0, 0, 'message', JSON.stringify(msg), targetOrigin);\n },\n\n setHeightCalculationMethod: function setHeightCalculationMethodF(\n heightCalculationMethod\n ) {\n heightCalcMode = heightCalculationMethod;\n checkHeightMode();\n },\n\n setWidthCalculationMethod: function setWidthCalculationMethodF(\n widthCalculationMethod\n ) {\n widthCalcMode = widthCalculationMethod;\n checkWidthMode();\n },\n\n setTargetOrigin: function setTargetOriginF(targetOrigin) {\n log('Set targetOrigin: ' + targetOrigin);\n targetOriginDefault = targetOrigin;\n },\n\n size: function sizeF(customHeight, customWidth) {\n var valString =\n '' +\n (customHeight ? customHeight : '') +\n (customWidth ? ',' + customWidth : '');\n //lockTrigger();\n sendSize(\n 'size',\n 'parentIFrame.size(' + valString + ')',\n customHeight,\n customWidth\n );\n }\n };\n }\n\n function initInterval() {\n if (0 !== interval) {\n log('setInterval: ' + interval + 'ms');\n intervalTimer = setInterval(function() {\n sendSize('interval', 'setInterval: ' + interval);\n }, Math.abs(interval));\n }\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function setupBodyMutationObserver() {\n function addImageLoadListners(mutation) {\n function addImageLoadListener(element) {\n if (false === element.complete) {\n log('Attach listeners to ' + element.src);\n element.addEventListener('load', imageLoaded, false);\n element.addEventListener('error', imageError, false);\n elements.push(element);\n }\n }\n\n if (mutation.type === 'attributes' && mutation.attributeName === 'src') {\n addImageLoadListener(mutation.target);\n } else if (mutation.type === 'childList') {\n Array.prototype.forEach.call(\n mutation.target.querySelectorAll('img'),\n addImageLoadListener\n );\n }\n }\n\n function removeFromArray(element) {\n elements.splice(elements.indexOf(element), 1);\n }\n\n function removeImageLoadListener(element) {\n log('Remove listeners from ' + element.src);\n element.removeEventListener('load', imageLoaded, false);\n element.removeEventListener('error', imageError, false);\n removeFromArray(element);\n }\n\n function imageEventTriggered(event, type, typeDesc) {\n removeImageLoadListener(event.target);\n sendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined);\n }\n\n function imageLoaded(event) {\n imageEventTriggered(event, 'imageLoad', 'Image loaded');\n }\n\n function imageError(event) {\n imageEventTriggered(event, 'imageLoadFailed', 'Image load failed');\n }\n\n function mutationObserved(mutations) {\n sendSize(\n 'mutationObserver',\n 'mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type\n );\n\n //Deal with WebKit asyncing image loading when tags are injected into the page\n mutations.forEach(addImageLoadListners);\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n };\n\n observer = new MutationObserver(mutationObserved);\n\n log('Create body MutationObserver');\n observer.observe(target, config);\n\n return observer;\n }\n\n var elements = [],\n MutationObserver =\n window.MutationObserver || window.WebKitMutationObserver,\n observer = createMutationObserver();\n\n return {\n disconnect: function() {\n if ('disconnect' in observer) {\n log('Disconnect body MutationObserver');\n observer.disconnect();\n elements.forEach(removeImageLoadListener);\n }\n }\n };\n }\n\n function setupMutationObserver() {\n var forceIntervalTimer = 0 > interval; // Not testable in PhantomJS\n\n /* istanbul ignore if */ if (\n window.MutationObserver ||\n window.WebKitMutationObserver\n ) {\n if (forceIntervalTimer) {\n initInterval();\n } else {\n bodyObserver = setupBodyMutationObserver();\n }\n } else {\n log('MutationObserver not supported in this browser!');\n initInterval();\n }\n }\n\n // document.documentElement.offsetHeight is not reliable, so\n // we have to jump through hoops to get a better value.\n function getComputedStyle(prop, el) {\n /* istanbul ignore next */ //Not testable in PhantomJS\n function convertUnitsToPxForIE8(value) {\n var PIXEL = /^\\d+(px)?$/i;\n\n if (PIXEL.test(value)) {\n return parseInt(value, base);\n }\n\n var style = el.style.left,\n runtimeStyle = el.runtimeStyle.left;\n\n el.runtimeStyle.left = el.currentStyle.left;\n el.style.left = value || 0;\n value = el.style.pixelLeft;\n el.style.left = style;\n el.runtimeStyle.left = runtimeStyle;\n\n return value;\n }\n\n var retVal = 0;\n el = el || document.body; // Not testable in phantonJS\n\n /* istanbul ignore else */ if (\n 'defaultView' in document &&\n 'getComputedStyle' in document.defaultView\n ) {\n retVal = document.defaultView.getComputedStyle(el, null);\n retVal = null !== retVal ? retVal[prop] : 0;\n } else {\n //IE8\n retVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n }\n\n return parseInt(retVal, base);\n }\n\n function chkEventThottle(timer) {\n if (timer > throttledTimer / 2) {\n throttledTimer = 2 * timer;\n log('Event throttle increased to ' + throttledTimer + 'ms');\n }\n }\n\n //Idea from https://github.com/guardian/iframe-messenger\n function getMaxElement(side, elements) {\n var elementsLength = elements.length,\n elVal = 0,\n maxVal = 0,\n Side = capitalizeFirstLetter(side),\n timer = getNow();\n\n for (var i = 0; i < elementsLength; i++) {\n elVal =\n elements[i].getBoundingClientRect()[side] +\n getComputedStyle('margin' + Side, elements[i]);\n if (elVal > maxVal) {\n maxVal = elVal;\n }\n }\n\n timer = getNow() - timer;\n\n log('Parsed ' + elementsLength + ' HTML elements');\n log('Element position calculated in ' + timer + 'ms');\n\n chkEventThottle(timer);\n\n return maxVal;\n }\n\n function getAllMeasurements(dimention) {\n return [\n dimention.bodyOffset(),\n dimention.bodyScroll(),\n dimention.documentElementOffset(),\n dimention.documentElementScroll()\n ];\n }\n\n function getTaggedElements(side, tag) {\n function noTaggedElementsFound() {\n warn('No tagged elements (' + tag + ') found on page');\n return document.querySelectorAll('body *');\n }\n\n var elements = document.querySelectorAll('[' + tag + ']');\n\n if (0 === elements.length) noTaggedElementsFound();\n\n return getMaxElement(side, elements);\n }\n\n function getAllElements() {\n return document.querySelectorAll('body *');\n }\n\n var getHeight = {\n bodyOffset: function getBodyOffsetHeight() {\n return (\n document.body.offsetHeight +\n getComputedStyle('marginTop') +\n getComputedStyle('marginBottom')\n );\n },\n\n offset: function() {\n return getHeight.bodyOffset(); //Backwards compatability\n },\n\n bodyScroll: function getBodyScrollHeight() {\n return document.body.scrollHeight;\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.height();\n },\n\n documentElementOffset: function getDEOffsetHeight() {\n return document.documentElement.offsetHeight;\n },\n\n documentElementScroll: function getDEScrollHeight() {\n return document.documentElement.scrollHeight;\n },\n\n max: function getMaxHeight() {\n return Math.max.apply(null, getAllMeasurements(getHeight));\n },\n\n min: function getMinHeight() {\n return Math.min.apply(null, getAllMeasurements(getHeight));\n },\n\n grow: function growHeight() {\n return getHeight.max(); //Run max without the forced downsizing\n },\n\n lowestElement: function getBestHeight() {\n return Math.max(\n getHeight.bodyOffset() || getHeight.documentElementOffset(),\n getMaxElement('bottom', getAllElements())\n );\n },\n\n taggedElement: function getTaggedElementsHeight() {\n return getTaggedElements('bottom', 'data-iframe-height');\n }\n },\n getWidth = {\n bodyScroll: function getBodyScrollWidth() {\n return document.body.scrollWidth;\n },\n\n bodyOffset: function getBodyOffsetWidth() {\n return document.body.offsetWidth;\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.width();\n },\n\n documentElementScroll: function getDEScrollWidth() {\n return document.documentElement.scrollWidth;\n },\n\n documentElementOffset: function getDEOffsetWidth() {\n return document.documentElement.offsetWidth;\n },\n\n scroll: function getMaxWidth() {\n return Math.max(\n getWidth.bodyScroll(),\n getWidth.documentElementScroll()\n );\n },\n\n max: function getMaxWidth() {\n return Math.max.apply(null, getAllMeasurements(getWidth));\n },\n\n min: function getMinWidth() {\n return Math.min.apply(null, getAllMeasurements(getWidth));\n },\n\n rightMostElement: function rightMostElement() {\n return getMaxElement('right', getAllElements());\n },\n\n taggedElement: function getTaggedElementsWidth() {\n return getTaggedElements('right', 'data-iframe-width');\n }\n };\n\n function sizeIFrame(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n ) {\n function resizeIFrame() {\n height = currentHeight;\n width = currentWidth;\n\n sendMsg(height, width, triggerEvent);\n }\n\n function isSizeChangeDetected() {\n function checkTolarance(a, b) {\n var retVal = Math.abs(a - b) <= tolerance;\n return !retVal;\n }\n\n currentHeight =\n undefined !== customHeight ? customHeight : getHeight[heightCalcMode]();\n currentWidth =\n undefined !== customWidth ? customWidth : getWidth[widthCalcMode]();\n\n return (\n checkTolarance(height, currentHeight) ||\n (calculateWidth && checkTolarance(width, currentWidth))\n );\n }\n\n function isForceResizableEvent() {\n return !(triggerEvent in { init: 1, interval: 1, size: 1 });\n }\n\n function isForceResizableCalcMode() {\n return (\n heightCalcMode in resetRequiredMethods ||\n (calculateWidth && widthCalcMode in resetRequiredMethods)\n );\n }\n\n function logIgnored() {\n log('No change in size detected');\n }\n\n function checkDownSizing() {\n if (isForceResizableEvent() && isForceResizableCalcMode()) {\n resetIFrame(triggerEventDesc);\n } else if (!(triggerEvent in { interval: 1 })) {\n logIgnored();\n }\n }\n\n var currentHeight, currentWidth;\n\n if (isSizeChangeDetected() || 'init' === triggerEvent) {\n lockTrigger();\n resizeIFrame();\n } else {\n checkDownSizing();\n }\n }\n\n var sizeIFrameThrottled = throttle(sizeIFrame);\n\n function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth) {\n function recordTrigger() {\n if (!(triggerEvent in { reset: 1, resetPage: 1, init: 1 })) {\n log('Trigger event: ' + triggerEventDesc);\n }\n }\n\n function isDoubleFiredEvent() {\n return triggerLocked && triggerEvent in doubleEventList;\n }\n\n if (!isDoubleFiredEvent()) {\n recordTrigger();\n if (triggerEvent === 'init') {\n sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth);\n } else {\n sizeIFrameThrottled(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n );\n }\n } else {\n log('Trigger event cancelled: ' + triggerEvent);\n }\n }\n\n function lockTrigger() {\n if (!triggerLocked) {\n triggerLocked = true;\n log('Trigger event lock on');\n }\n clearTimeout(triggerLockedTimer);\n triggerLockedTimer = setTimeout(function() {\n triggerLocked = false;\n log('Trigger event lock off');\n log('--');\n }, eventCancelTimer);\n }\n\n function triggerReset(triggerEvent) {\n height = getHeight[heightCalcMode]();\n width = getWidth[widthCalcMode]();\n\n sendMsg(height, width, triggerEvent);\n }\n\n function resetIFrame(triggerEventDesc) {\n var hcm = heightCalcMode;\n heightCalcMode = heightCalcModeDefault;\n\n log('Reset trigger event: ' + triggerEventDesc);\n lockTrigger();\n triggerReset('reset');\n\n heightCalcMode = hcm;\n }\n\n function sendMsg(height, width, triggerEvent, msg, targetOrigin) {\n function setTargetOrigin() {\n if (undefined === targetOrigin) {\n targetOrigin = targetOriginDefault;\n } else {\n log('Message targetOrigin: ' + targetOrigin);\n }\n }\n\n function sendToParent() {\n var size = height + ':' + width,\n message =\n myID +\n ':' +\n size +\n ':' +\n triggerEvent +\n (undefined !== msg ? ':' + msg : '');\n\n log('Sending message to host page (' + message + ')');\n target.postMessage(msgID + message, targetOrigin);\n }\n\n if (true === sendPermit) {\n setTargetOrigin();\n sendToParent();\n }\n }\n\n function receiver(event) {\n var processRequestFromParent = {\n init: function initFromParent() {\n initMsg = event.data;\n target = event.source;\n\n init();\n firstRun = false;\n setTimeout(function() {\n initLock = false;\n }, eventCancelTimer);\n },\n\n reset: function resetFromParent() {\n if (!initLock) {\n log('Page size reset by host page');\n triggerReset('resetPage');\n } else {\n log('Page reset ignored by init');\n }\n },\n\n resize: function resizeFromParent() {\n sendSize('resizeParent', 'Parent window requested size check');\n },\n\n moveToAnchor: function moveToAnchorF() {\n inPageLinks.findTarget(getData());\n },\n inPageLink: function inPageLinkF() {\n this.moveToAnchor();\n }, //Backward compatability\n\n pageInfo: function pageInfoFromParent() {\n var msgBody = getData();\n log('PageInfoFromParent called from parent: ' + msgBody);\n pageInfoCallback(JSON.parse(msgBody));\n log(' --');\n },\n\n message: function messageFromParent() {\n var msgBody = getData();\n\n log('MessageCallback called from parent: ' + msgBody);\n messageCallback(JSON.parse(msgBody));\n log(' --');\n }\n };\n\n function isMessageForUs() {\n return msgID === ('' + event.data).substr(0, msgIdLen); //''+ Protects against non-string messages\n }\n\n function getMessageType() {\n return event.data.split(']')[1].split(':')[0];\n }\n\n function getData() {\n return event.data.substr(event.data.indexOf(':') + 1);\n }\n\n function isMiddleTier() {\n return (\n (!(typeof module !== 'undefined' && module.exports) &&\n 'iFrameResize' in window) ||\n ('jQuery' in window && 'iFrameResize' in window.jQuery.prototype)\n );\n }\n\n function isInitMsg() {\n //Test if this message is from a child below us. This is an ugly test, however, updating\n //the message format would break backwards compatibity.\n return event.data.split(':')[2] in { true: 1, false: 1 };\n }\n\n function callFromParent() {\n var messageType = getMessageType();\n\n if (messageType in processRequestFromParent) {\n processRequestFromParent[messageType]();\n } else if (!isMiddleTier() && !isInitMsg()) {\n warn('Unexpected message (' + event.data + ')');\n }\n }\n\n function processMessage() {\n if (false === firstRun) {\n callFromParent();\n } else if (isInitMsg()) {\n processRequestFromParent.init();\n } else {\n log(\n 'Ignored message of type \"' +\n getMessageType() +\n '\". Received before initialization.'\n );\n }\n }\n\n if (isMessageForUs()) {\n processMessage();\n }\n }\n\n //Normally the parent kicks things off when it detects the iFrame has loaded.\n //If this script is async-loaded, then tell parent page to retry init.\n function chkLateLoaded() {\n if ('loading' !== document.readyState) {\n window.parent.postMessage('[iFrameResizerChild]Ready', '*');\n }\n }\n\n addEventListener(window, 'message', receiver);\n addEventListener(window, 'readystatechange', chkLateLoaded);\n chkLateLoaded();\n\n \n})();\n"]}