(() => { var $b2e1fd3e30ab1f5c$exports = {}; (function(undefined) { if (typeof window === "undefined") return; // don't run for server side render var autoResize = true, base = 10, bodyBackground = "", bodyMargin = 0, bodyMarginStr = "", bodyObserver = null, bodyPadding = "", calculateWidth = false, doubleEventList = { resize: 1, click: 1 }, eventCancelTimer = 128, firstRun = true, height1 = 1, heightCalcModeDefault = "bodyOffset", heightCalcMode = heightCalcModeDefault, initLock = true, initMsg = "", inPageLinks = {}, interval = 32, intervalTimer = null, logging = false, mouseEvents = false, msgID = "[iFrameSizer]", msgIdLen = msgID.length, myID = "", resetRequiredMethods = { max: 1, min: 1, bodyScroll: 1, documentElementScroll: 1 }, resizeFrom = "child", sendPermit = true, target1 = window.parent, targetOriginDefault = "*", tolerance = 0, triggerLocked = false, triggerLockedTimer = null, throttledTimer = 16, width1 = 1, widthCalcModeDefault = "scroll", widthCalcMode = widthCalcModeDefault, win = window, onMessage = function() { warn("onMessage function not defined"); }, onReady = function() {}, onPageInfo = function() {}, customCalcMethods = { height: function() { warn("Custom height calculation function not defined"); return document.documentElement.offsetHeight; }, width: function() { warn("Custom width calculation function not defined"); return document.body.scrollWidth; } }, eventHandlersByName = {}, passiveSupported = false; function noop() {} try { var options = Object.create({}, { passive: { get: function() { passiveSupported = true; } } }); window.addEventListener("test", noop, options); window.removeEventListener("test", noop, options); } catch (error) { /* */ } function addEventListener(el, evt, func, options) { el.addEventListener(evt, func, passiveSupported ? options || {} : false); } function removeEventListener(el, evt, func) { el.removeEventListener(evt, func, false); } function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } // Based on underscore.js function throttle(func) { var context, args, result, timeout = null, previous = 0, later = function() { previous = Date.now(); timeout = null; result = func.apply(context, args); if (!timeout) // eslint-disable-next-line no-multi-assign context = args = null; }; return function() { var now = Date.now(); if (!previous) previous = now; var remaining = throttledTimer - (now - previous); context = this; args = arguments; if (remaining <= 0 || remaining > throttledTimer) { if (timeout) { clearTimeout(timeout); timeout = null; } previous = now; result = func.apply(context, args); if (!timeout) // eslint-disable-next-line no-multi-assign context = args = null; } else if (!timeout) timeout = setTimeout(later, remaining); return result; }; } function formatLogMsg(msg) { return msgID + "[" + myID + "] " + msg; } function log(msg) { if (logging && "object" === typeof window.console) // eslint-disable-next-line no-console console.log(formatLogMsg(msg)); } function warn(msg) { if ("object" === typeof window.console) // eslint-disable-next-line no-console console.warn(formatLogMsg(msg)); } function init() { readDataFromParent(); log("Initialising iFrame (" + window.location.href + ")"); readDataFromPage(); setMargin(); setBodyStyle("background", bodyBackground); setBodyStyle("padding", bodyPadding); injectClearFixIntoBodyElement(); checkHeightMode(); checkWidthMode(); stopInfiniteResizingOfIFrame(); setupPublicMethods(); setupMouseEvents(); startEventListeners(); inPageLinks = setupInPageLinks(); sendSize("init", "Init message from host page"); onReady(); } function readDataFromParent() { function strBool(str) { return "true" === str; } var data = initMsg.substr(msgIdLen).split(":"); myID = data[0]; bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin // For V1 compatibility ; calculateWidth = undefined !== data[2] ? strBool(data[2]) : calculateWidth; logging = undefined !== data[3] ? strBool(data[3]) : logging; interval = undefined !== data[4] ? Number(data[4]) : interval; autoResize = undefined !== data[6] ? strBool(data[6]) : autoResize; bodyMarginStr = data[7]; heightCalcMode = undefined !== data[8] ? data[8] : heightCalcMode; bodyBackground = data[9]; bodyPadding = data[10]; tolerance = undefined !== data[11] ? Number(data[11]) : tolerance; inPageLinks.enable = undefined !== data[12] ? strBool(data[12]) : false; resizeFrom = undefined !== data[13] ? data[13] : resizeFrom; widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode; mouseEvents = undefined !== data[15] ? Boolean(data[15]) : mouseEvents; } 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("Deprecated: '" + key + "' has been renamed '" + name + "'. The old method will be removed in the next major version."); } } function readDataFromPage() { function readData() { var data = window.iFrameResizer; log("Reading data from page: " + JSON.stringify(data)); Object.keys(data).forEach(depricate, data); onMessage = "onMessage" in data ? data.onMessage : onMessage; onReady = "onReady" in data ? data.onReady : onReady; targetOriginDefault = "targetOrigin" in data ? data.targetOrigin : targetOriginDefault; heightCalcMode = "heightCalculationMethod" in data ? data.heightCalculationMethod : heightCalcMode; widthCalcMode = "widthCalculationMethod" in data ? data.widthCalculationMethod : widthCalcMode; } function setupCustomCalcMethods(calcMode, calcFunc) { if ("function" === typeof calcMode) { log("Setup custom " + calcFunc + "CalcMethod"); customCalcMethods[calcFunc] = calcMode; calcMode = "custom"; } return calcMode; } if ("iFrameResizer" in window && Object === window.iFrameResizer.constructor) { readData(); heightCalcMode = setupCustomCalcMethods(heightCalcMode, "height"); widthCalcMode = setupCustomCalcMethods(widthCalcMode, "width"); } log("TargetOrigin for parent set to: " + targetOriginDefault); } function chkCSS(attr, value) { if (-1 !== value.indexOf("-")) { warn("Negative CSS value ignored for " + attr); value = ""; } return value; } function setBodyStyle(attr, value) { if (undefined !== value && "" !== value && "null" !== value) { document.body.style[attr] = value; log("Body " + attr + ' set to "' + value + '"'); } } function setMargin() { // If called via V1 script, convert bodyMargin from int to str if (undefined === bodyMarginStr) bodyMarginStr = bodyMargin + "px"; setBodyStyle("margin", chkCSS("margin", bodyMarginStr)); } function stopInfiniteResizingOfIFrame() { document.documentElement.style.height = ""; document.body.style.height = ""; log('HTML & body height set to "auto"'); } function manageTriggerEvent(options) { var listener = { add: function(eventName) { function handleEvent() { sendSize(options.eventName, options.eventType); } eventHandlersByName[eventName] = handleEvent; addEventListener(window, eventName, handleEvent, { passive: true }); }, remove: function(eventName) { var handleEvent = eventHandlersByName[eventName]; delete eventHandlersByName[eventName]; removeEventListener(window, eventName, handleEvent); } }; if (options.eventNames && Array.prototype.map) { options.eventName = options.eventNames[0]; options.eventNames.map(listener[options.method]); } else listener[options.method](options.eventName); log(capitalizeFirstLetter(options.method) + " event listener: " + options.eventType); } function manageEventListeners(method) { manageTriggerEvent({ method: method, eventType: "Animation Start", eventNames: [ "animationstart", "webkitAnimationStart" ] }); manageTriggerEvent({ method: method, eventType: "Animation Iteration", eventNames: [ "animationiteration", "webkitAnimationIteration" ] }); manageTriggerEvent({ method: method, eventType: "Animation End", eventNames: [ "animationend", "webkitAnimationEnd" ] }); manageTriggerEvent({ method: method, eventType: "Input", eventName: "input" }); manageTriggerEvent({ method: method, eventType: "Mouse Up", eventName: "mouseup" }); manageTriggerEvent({ method: method, eventType: "Mouse Down", eventName: "mousedown" }); manageTriggerEvent({ method: method, eventType: "Orientation Change", eventName: "orientationchange" }); manageTriggerEvent({ method: method, eventType: "Print", eventName: [ "afterprint", "beforeprint" ] }); manageTriggerEvent({ method: method, eventType: "Ready State Change", eventName: "readystatechange" }); manageTriggerEvent({ method: method, eventType: "Touch Start", eventName: "touchstart" }); manageTriggerEvent({ method: method, eventType: "Touch End", eventName: "touchend" }); manageTriggerEvent({ method: method, eventType: "Touch Cancel", eventName: "touchcancel" }); manageTriggerEvent({ method: method, eventType: "Transition Start", eventNames: [ "transitionstart", "webkitTransitionStart", "MSTransitionStart", "oTransitionStart", "otransitionstart" ] }); manageTriggerEvent({ method: method, eventType: "Transition Iteration", eventNames: [ "transitioniteration", "webkitTransitionIteration", "MSTransitionIteration", "oTransitionIteration", "otransitioniteration" ] }); manageTriggerEvent({ method: method, eventType: "Transition End", eventNames: [ "transitionend", "webkitTransitionEnd", "MSTransitionEnd", "oTransitionEnd", "otransitionend" ] }); if ("child" === resizeFrom) manageTriggerEvent({ method: method, eventType: "IFrame Resized", eventName: "resize" }); } function checkCalcMode(calcMode, calcModeDefault, modes, type) { if (calcModeDefault !== calcMode) { if (!(calcMode in modes)) { warn(calcMode + " is not a valid option for " + type + "CalculationMethod."); calcMode = calcModeDefault; } log(type + ' calculation method set to "' + calcMode + '"'); } return calcMode; } function checkHeightMode() { heightCalcMode = checkCalcMode(heightCalcMode, heightCalcModeDefault, getHeight, "height"); } function checkWidthMode() { widthCalcMode = checkCalcMode(widthCalcMode, widthCalcModeDefault, getWidth, "width"); } function startEventListeners() { if (true === autoResize) { manageEventListeners("add"); setupMutationObserver(); } else log("Auto Resize disabled"); } // function stopMsgsToParent() { // log('Disable outgoing messages') // sendPermit = false // } // function removeMsgListener() { // log('Remove event listener: Message') // removeEventListener(window, 'message', receiver) // } function disconnectMutationObserver() { if (null !== bodyObserver) /* istanbul ignore next */ // Not testable in PhantonJS bodyObserver.disconnect(); } function stopEventListeners() { manageEventListeners("remove"); disconnectMutationObserver(); clearInterval(intervalTimer); } // function teardown() { // stopMsgsToParent() // removeMsgListener() // if (true === autoResize) stopEventListeners() // } function injectClearFixIntoBodyElement() { var clearFix = document.createElement("div"); clearFix.style.clear = "both"; // Guard against the following having been globally redefined in CSS. clearFix.style.display = "block"; clearFix.style.height = "0"; document.body.appendChild(clearFix); } function setupInPageLinks() { function getPagePosition() { return { x: window.pageXOffset !== undefined ? window.pageXOffset : document.documentElement.scrollLeft, y: window.pageYOffset !== undefined ? window.pageYOffset : document.documentElement.scrollTop }; } function getElementPosition(el) { var elPosition = el.getBoundingClientRect(), pagePosition = getPagePosition(); return { x: parseInt(elPosition.left, 10) + parseInt(pagePosition.x, 10), y: parseInt(elPosition.top, 10) + parseInt(pagePosition.y, 10) }; } function findTarget(location) { function jumpToTarget(target) { var jumpPosition = getElementPosition(target); log("Moving to in page link (#" + hash + ") at x: " + jumpPosition.x + " y: " + jumpPosition.y); sendMsg(jumpPosition.y, jumpPosition.x, "scrollToOffset") // X&Y reversed at sendMsg uses height/width ; } var hash = location.split("#")[1] || location, hashData = decodeURIComponent(hash), target2 = document.getElementById(hashData) || document.getElementsByName(hashData)[0]; if (undefined !== target2) jumpToTarget(target2); else { log("In page link (#" + hash + ") not found in iFrame, so sending to parent"); sendMsg(0, 0, "inPageLink", "#" + hash); } } function checkLocationHash() { var hash = window.location.hash; var href = window.location.href; if ("" !== hash && "#" !== hash) findTarget(href); } function bindAnchors() { function setupLink(el) { function linkClicked(e) { e.preventDefault(); /* jshint validthis:true */ findTarget(this.getAttribute("href")); } if ("#" !== el.getAttribute("href")) addEventListener(el, "click", linkClicked); } Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'), setupLink); } function bindLocationHash() { addEventListener(window, "hashchange", checkLocationHash); } function initCheck() { // Check if page loaded with location hash after init resize setTimeout(checkLocationHash, eventCancelTimer); } function enableInPageLinks() { /* istanbul ignore else */ // Not testable in phantonJS if (Array.prototype.forEach && document.querySelectorAll) { log("Setting up location.hash handlers"); bindAnchors(); bindLocationHash(); initCheck(); } else warn("In page linking not fully supported in this browser! (See README.md for IE8 workaround)"); } if (inPageLinks.enable) enableInPageLinks(); else log("In page linking not enabled"); return { findTarget: findTarget }; } function setupMouseEvents() { if (mouseEvents !== true) return; function sendMouse(e) { sendMsg(0, 0, e.type, e.screenY + ":" + e.screenX); } function addMouseListener(evt, name) { log("Add event listener: " + name); addEventListener(window.document, evt, sendMouse); } addMouseListener("mouseenter", "Mouse Enter"); addMouseListener("mouseleave", "Mouse Leave"); } function setupPublicMethods() { log("Enable public methods"); win.parentIFrame = { autoResize: function autoResizeF(resize) { if (true === resize && false === autoResize) { autoResize = true; startEventListeners(); } else if (false === resize && true === autoResize) { autoResize = false; stopEventListeners(); } sendMsg(0, 0, "autoResize", JSON.stringify(autoResize)); return autoResize; }, close: function closeF() { sendMsg(0, 0, "close"); // teardown() }, getId: function getIdF() { return myID; }, getPageInfo: function getPageInfoF(callback) { if ("function" === typeof callback) { onPageInfo = callback; sendMsg(0, 0, "pageInfo"); } else { onPageInfo = function() {}; sendMsg(0, 0, "pageInfoStop"); } }, moveToAnchor: function moveToAnchorF(hash) { inPageLinks.findTarget(hash); }, reset: function resetF() { resetIFrame("parentIFrame.reset"); }, scrollTo: function scrollToF(x, y) { sendMsg(y, x, "scrollTo") // X&Y reversed at sendMsg uses height/width ; }, scrollToOffset: function scrollToF(x, y) { sendMsg(y, x, "scrollToOffset") // X&Y reversed at sendMsg uses height/width ; }, sendMessage: function sendMessageF(msg, targetOrigin) { sendMsg(0, 0, "message", JSON.stringify(msg), targetOrigin); }, setHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod) { heightCalcMode = heightCalculationMethod; checkHeightMode(); }, setWidthCalculationMethod: function setWidthCalculationMethodF(widthCalculationMethod) { widthCalcMode = widthCalculationMethod; checkWidthMode(); }, setTargetOrigin: function setTargetOriginF(targetOrigin) { log("Set targetOrigin: " + targetOrigin); targetOriginDefault = targetOrigin; }, size: function sizeF(customHeight, customWidth) { var valString = "" + (customHeight || "") + (customWidth ? "," + customWidth : ""); sendSize("size", "parentIFrame.size(" + valString + ")", customHeight, customWidth); } }; } function initInterval() { if (0 !== interval) { log("setInterval: " + interval + "ms"); intervalTimer = setInterval(function() { sendSize("interval", "setInterval: " + interval); }, Math.abs(interval)); } } // Not testable in PhantomJS /* istanbul ignore next */ function setupBodyMutationObserver() { function addImageLoadListners(mutation) { function addImageLoadListener(element) { if (false === element.complete) { log("Attach listeners to " + element.src); element.addEventListener("load", imageLoaded, false); element.addEventListener("error", imageError, false); elements.push(element); } } if (mutation.type === "attributes" && mutation.attributeName === "src") addImageLoadListener(mutation.target); else if (mutation.type === "childList") Array.prototype.forEach.call(mutation.target.querySelectorAll("img"), addImageLoadListener); } function removeFromArray(element) { elements.splice(elements.indexOf(element), 1); } function removeImageLoadListener(element) { log("Remove listeners from " + element.src); element.removeEventListener("load", imageLoaded, false); element.removeEventListener("error", imageError, false); removeFromArray(element); } function imageEventTriggered(event, type, typeDesc) { removeImageLoadListener(event.target); sendSize(type, typeDesc + ": " + event.target.src); } function imageLoaded(event) { imageEventTriggered(event, "imageLoad", "Image loaded"); } function imageError(event) { imageEventTriggered(event, "imageLoadFailed", "Image load failed"); } function mutationObserved(mutations) { sendSize("mutationObserver", "mutationObserver: " + mutations[0].target + " " + mutations[0].type); // Deal with WebKit / Blink asyncing image loading when tags are injected into the page mutations.forEach(addImageLoadListners); } function createMutationObserver() { var target = document.querySelector("body"), config = { attributes: true, attributeOldValue: false, characterData: true, characterDataOldValue: false, childList: true, subtree: true }; observer = new MutationObserver(mutationObserved); log("Create body MutationObserver"); observer.observe(target, config); return observer; } var elements = [], MutationObserver = window.MutationObserver || window.WebKitMutationObserver, observer = createMutationObserver(); return { disconnect: function() { if ("disconnect" in observer) { log("Disconnect body MutationObserver"); observer.disconnect(); elements.forEach(removeImageLoadListener); } } }; } function setupMutationObserver() { var forceIntervalTimer = 0 > interval; // Not testable in PhantomJS /* istanbul ignore if */ if (window.MutationObserver || window.WebKitMutationObserver) { if (forceIntervalTimer) initInterval(); else bodyObserver = setupBodyMutationObserver(); } else { log("MutationObserver not supported in this browser!"); initInterval(); } } // document.documentElement.offsetHeight is not reliable, so // we have to jump through hoops to get a better value. function getComputedStyle(prop, el) { var retVal = 0; el = el || document.body // Not testable in phantonJS ; retVal = document.defaultView.getComputedStyle(el, null); retVal = null !== retVal ? retVal[prop] : 0; return parseInt(retVal, base); } function chkEventThottle(timer) { if (timer > throttledTimer / 2) { throttledTimer = 2 * timer; log("Event throttle increased to " + throttledTimer + "ms"); } } // Idea from https://github.com/guardian/iframe-messenger function getMaxElement(side, elements) { var elementsLength = elements.length, elVal = 0, maxVal = 0, Side = capitalizeFirstLetter(side), timer = Date.now(); for(var i = 0; i < elementsLength; i++){ elVal = elements[i].getBoundingClientRect()[side] + getComputedStyle("margin" + Side, elements[i]); if (elVal > maxVal) maxVal = elVal; } timer = Date.now() - timer; log("Parsed " + elementsLength + " HTML elements"); log("Element position calculated in " + timer + "ms"); chkEventThottle(timer); return maxVal; } function getAllMeasurements(dimensions) { return [ dimensions.bodyOffset(), dimensions.bodyScroll(), dimensions.documentElementOffset(), dimensions.documentElementScroll() ]; } function getTaggedElements(side, tag) { function noTaggedElementsFound() { warn("No tagged elements (" + tag + ") found on page"); return document.querySelectorAll("body *"); } var elements = document.querySelectorAll("[" + tag + "]"); if (elements.length === 0) noTaggedElementsFound(); return getMaxElement(side, elements); } function getAllElements() { return document.querySelectorAll("body *"); } var getHeight = { bodyOffset: function getBodyOffsetHeight() { return document.body.offsetHeight + getComputedStyle("marginTop") + getComputedStyle("marginBottom"); }, offset: function() { return getHeight.bodyOffset() // Backwards compatability ; }, bodyScroll: function getBodyScrollHeight() { return document.body.scrollHeight; }, custom: function getCustomWidth() { return customCalcMethods.height(); }, documentElementOffset: function getDEOffsetHeight() { return document.documentElement.offsetHeight; }, documentElementScroll: function getDEScrollHeight() { return document.documentElement.scrollHeight; }, max: function getMaxHeight() { return Math.max.apply(null, getAllMeasurements(getHeight)); }, min: function getMinHeight() { return Math.min.apply(null, getAllMeasurements(getHeight)); }, grow: function growHeight() { return getHeight.max() // Run max without the forced downsizing ; }, lowestElement: function getBestHeight() { return Math.max(getHeight.bodyOffset() || getHeight.documentElementOffset(), getMaxElement("bottom", getAllElements())); }, taggedElement: function getTaggedElementsHeight() { return getTaggedElements("bottom", "data-iframe-height"); } }, getWidth = { bodyScroll: function getBodyScrollWidth() { return document.body.scrollWidth; }, bodyOffset: function getBodyOffsetWidth() { return document.body.offsetWidth; }, custom: function getCustomWidth() { return customCalcMethods.width(); }, documentElementScroll: function getDEScrollWidth() { return document.documentElement.scrollWidth; }, documentElementOffset: function getDEOffsetWidth() { return document.documentElement.offsetWidth; }, scroll: function getMaxWidth() { return Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll()); }, max: function getMaxWidth() { return Math.max.apply(null, getAllMeasurements(getWidth)); }, min: function getMinWidth() { return Math.min.apply(null, getAllMeasurements(getWidth)); }, rightMostElement: function rightMostElement() { return getMaxElement("right", getAllElements()); }, taggedElement: function getTaggedElementsWidth() { return getTaggedElements("right", "data-iframe-width"); } }; function sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth) { function resizeIFrame() { height1 = currentHeight; width1 = currentWidth; sendMsg(height1, width1, triggerEvent); } function isSizeChangeDetected() { function checkTolarance(a, b) { var retVal = Math.abs(a - b) <= tolerance; return !retVal; } currentHeight = undefined !== customHeight ? customHeight : getHeight[heightCalcMode](); currentWidth = undefined !== customWidth ? customWidth : getWidth[widthCalcMode](); return checkTolarance(height1, currentHeight) || calculateWidth && checkTolarance(width1, currentWidth); } function isForceResizableEvent() { return !(triggerEvent in { init: 1, interval: 1, size: 1 }); } function isForceResizableCalcMode() { return heightCalcMode in resetRequiredMethods || calculateWidth && widthCalcMode in resetRequiredMethods; } function logIgnored() { log("No change in size detected"); } function checkDownSizing() { if (isForceResizableEvent() && isForceResizableCalcMode()) resetIFrame(triggerEventDesc); else if (!(triggerEvent in { interval: 1 })) logIgnored(); } var currentHeight, currentWidth; if (isSizeChangeDetected() || "init" === triggerEvent) { lockTrigger(); resizeIFrame(); } else checkDownSizing(); } var sizeIFrameThrottled = throttle(sizeIFrame); function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth) { function recordTrigger() { if (!(triggerEvent in { reset: 1, resetPage: 1, init: 1 })) log("Trigger event: " + triggerEventDesc); } function isDoubleFiredEvent() { return triggerLocked && triggerEvent in doubleEventList; } if (!isDoubleFiredEvent()) { recordTrigger(); if (triggerEvent === "init") sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth); else sizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth); } else log("Trigger event cancelled: " + triggerEvent); } function lockTrigger() { if (!triggerLocked) { triggerLocked = true; log("Trigger event lock on"); } clearTimeout(triggerLockedTimer); triggerLockedTimer = setTimeout(function() { triggerLocked = false; log("Trigger event lock off"); log("--"); }, eventCancelTimer); } function triggerReset(triggerEvent) { height1 = getHeight[heightCalcMode](); width1 = getWidth[widthCalcMode](); sendMsg(height1, width1, triggerEvent); } function resetIFrame(triggerEventDesc) { var hcm = heightCalcMode; heightCalcMode = heightCalcModeDefault; log("Reset trigger event: " + triggerEventDesc); lockTrigger(); triggerReset("reset"); heightCalcMode = hcm; } function sendMsg(height, width, triggerEvent, msg, targetOrigin) { function setTargetOrigin() { if (undefined === targetOrigin) targetOrigin = targetOriginDefault; else log("Message targetOrigin: " + targetOrigin); } function sendToParent() { var size = height + ":" + width, message = myID + ":" + size + ":" + triggerEvent + (undefined !== msg ? ":" + msg : ""); log("Sending message to host page (" + message + ")"); target1.postMessage(msgID + message, targetOrigin); } if (true === sendPermit) { setTargetOrigin(); sendToParent(); } } function receiver(event) { var processRequestFromParent = { init: function initFromParent() { initMsg = event.data; target1 = event.source; init(); firstRun = false; setTimeout(function() { initLock = false; }, eventCancelTimer); }, reset: function resetFromParent() { if (!initLock) { log("Page size reset by host page"); triggerReset("resetPage"); } else log("Page reset ignored by init"); }, resize: function resizeFromParent() { sendSize("resizeParent", "Parent window requested size check"); }, moveToAnchor: function moveToAnchorF() { inPageLinks.findTarget(getData()); }, inPageLink: function inPageLinkF() { this.moveToAnchor(); }, pageInfo: function pageInfoFromParent() { var msgBody = getData(); log("PageInfoFromParent called from parent: " + msgBody); onPageInfo(JSON.parse(msgBody)); log(" --"); }, message: function messageFromParent() { var msgBody = getData(); log("onMessage called from parent: " + msgBody); // eslint-disable-next-line sonarjs/no-extra-arguments onMessage(JSON.parse(msgBody)); log(" --"); } }; function isMessageForUs() { return msgID === ("" + event.data).substr(0, msgIdLen) // ''+ Protects against non-string messages ; } function getMessageType() { return event.data.split("]")[1].split(":")[0]; } function getData() { return event.data.substr(event.data.indexOf(":") + 1); } function isMiddleTier() { return !$b2e1fd3e30ab1f5c$exports && "iFrameResize" in window || "jQuery" in window && "iFrameResize" in window.jQuery.prototype; } function isInitMsg() { // Test if this message is from a child below us. This is an ugly test, however, updating // the message format would break backwards compatibity. return event.data.split(":")[2] in { true: 1, false: 1 }; } function callFromParent() { var messageType = getMessageType(); if (messageType in processRequestFromParent) processRequestFromParent[messageType](); else if (!isMiddleTier() && !isInitMsg()) warn("Unexpected message (" + event.data + ")"); } function processMessage() { if (false === firstRun) callFromParent(); else if (isInitMsg()) processRequestFromParent.init(); else log('Ignored message of type "' + getMessageType() + '". Received before initialization.'); } if (isMessageForUs()) processMessage(); } // Normally the parent kicks things off when it detects the iFrame has loaded. // If this script is async-loaded, then tell parent page to retry init. function chkLateLoaded() { if ("loading" !== document.readyState) window.parent.postMessage("[iFrameResizerChild]Ready", "*"); } addEventListener(window, "message", receiver); addEventListener(window, "readystatechange", chkLateLoaded); chkLateLoaded(); })(); })(); //# sourceMappingURL=embed.js.map