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