{"version":3,"file":"component-preview.bundle.min.mjs","sources":["../../../../node_modules/iframe-resizer/js/iframeResizer.js","../../../../node_modules/iframe-resizer/js/iframeResizer.contentWindow.js","../../../../node_modules/iframe-resizer/index.js","../../src/javascripts/component-preview.mjs"],"sourcesContent":["/*\n * File: iframeResizer.js\n * Desc: Force iframes to size to content.\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\n * Doc: https://iframe-resizer.com\n * Author: David J. Bradshaw - info@iframe-resizer.com\n */\n\nconsole.info(`\nIFRAME-RESIZER\n\nIframe-Resizer 5 is now available via the following two packages:\n\n * @iframe-resizer/parent\n * @iframe-resizer/child\n\nAdditionally their are also new versions of iframe-resizer for React, Vue, and jQuery.\n\nVersion 5 of iframe-resizer has been extensively rewritten to use modern browser APIs, which has enabled significantly better performance and greater accuracy in the detection of content resizing events.\n\nPlease see https://iframe-resizer.com/upgrade for more details.\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 VERSION = '4.3.11'\n\n  var count = 0,\n    destroyObserver,\n    logEnabled = false,\n    hiddenCheckEnabled = false,\n    msgHeader = 'message',\n    msgHeaderLen = msgHeader.length,\n    msgId = '[iFrameSizer]', // Must match iframe msg ID\n    msgIdLen = msgId.length,\n    pagePosition = null,\n    requestAnimationFrame = window.requestAnimationFrame,\n    resetRequiredMethods = Object.freeze({\n      max: 1,\n      scroll: 1,\n      bodyScroll: 1,\n      documentElementScroll: 1\n    }),\n    settings = {},\n    timer = null,\n    defaults = Object.freeze({\n      autoResize: true,\n      bodyBackground: null,\n      bodyMargin: null,\n      bodyMarginV1: 8,\n      bodyPadding: null,\n      checkOrigin: true,\n      inPageLinks: false,\n      enablePublicMethods: true,\n      heightCalculationMethod: 'bodyOffset',\n      id: 'iFrameResizer',\n      interval: 32,\n      license: '1jqr0si6pnt',\n      log: false,\n      maxHeight: Infinity,\n      maxWidth: Infinity,\n      minHeight: 0,\n      minWidth: 0,\n      mouseEvents: true,\n      resizeFrom: 'parent',\n      scrolling: false,\n      sizeHeight: true,\n      sizeWidth: false,\n      warningTimeout: 5000,\n      tolerance: 0,\n      widthCalculationMethod: 'scroll',\n      onClose: function () {\n        return true\n      },\n      onClosed: function () {},\n      onInit: function () {},\n      onMessage: function () {\n        warn('onMessage function not defined')\n      },\n      onMouseEnter: function () {},\n      onMouseLeave: function () {},\n      onResized: function () {},\n      onScroll: function () {\n        return true\n      }\n    })\n\n  function getMutationObserver() {\n    return (\n      window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    )\n  }\n\n  function addEventListener(el, evt, func) {\n    el.addEventListener(evt, func, false)\n  }\n\n  function removeEventListener(el, evt, func) {\n    el.removeEventListener(evt, func, false)\n  }\n\n  function setupRequestAnimationFrame() {\n    var vendors = ['moz', 'webkit', 'o', 'ms']\n    var x\n\n    // Remove vendor prefixing if prefixed and break early if not\n    for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\n      requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']\n    }\n\n    if (requestAnimationFrame) {\n      // Firefox extension content-scripts have a globalThis object that is not the same as window.\n      // Binding `requestAnimationFrame` to window allows the function to work and prevents errors\n      // being thrown when run in that context, and should be a no-op in every other context.\n      requestAnimationFrame = requestAnimationFrame.bind(window)\n    } else {\n      log('setup', 'RequestAnimationFrame not supported')\n    }\n  }\n\n  function getMyID(iframeId) {\n    var retStr = 'Host page: ' + iframeId\n\n    if (window.top !== window.self) {\n      retStr =\n        window.parentIFrame && window.parentIFrame.getId\n          ? window.parentIFrame.getId() + ': ' + iframeId\n          : 'Nested host page: ' + iframeId\n    }\n\n    return retStr\n  }\n\n  function formatLogHeader(iframeId) {\n    return msgId + '[' + getMyID(iframeId) + ']'\n  }\n\n  function isLogEnabled(iframeId) {\n    return settings[iframeId] ? settings[iframeId].log : logEnabled\n  }\n\n  function log(iframeId, msg) {\n    output('log', iframeId, msg, isLogEnabled(iframeId))\n  }\n\n  function info(iframeId, msg) {\n    output('info', iframeId, msg, isLogEnabled(iframeId))\n  }\n\n  function warn(iframeId, msg) {\n    output('warn', iframeId, msg, true)\n  }\n\n  function output(type, iframeId, msg, enabled) {\n    if (true === enabled && 'object' === typeof window.console) {\n      // eslint-disable-next-line no-console\n      console[type](formatLogHeader(iframeId), msg)\n    }\n  }\n\n  function iFrameListener(event) {\n    function resizeIFrame() {\n      function resize() {\n        setSize(messageData)\n        setPagePosition(iframeId)\n        on('onResized', messageData)\n      }\n\n      ensureInRange('Height')\n      ensureInRange('Width')\n\n      syncResize(resize, messageData, 'init')\n    }\n\n    function processMsg() {\n      var data = msg.slice(msgIdLen).split(':')\n      var height = data[1] ? parseInt(data[1], 10) : 0\n      var iframe = settings[data[0]] && settings[data[0]].iframe\n      var compStyle = getComputedStyle(iframe)\n\n      return {\n        iframe: iframe,\n        id: data[0],\n        height: height + getPaddingEnds(compStyle) + getBorderEnds(compStyle),\n        width: data[2],\n        type: data[3]\n      }\n    }\n\n    function getPaddingEnds(compStyle) {\n      if (compStyle.boxSizing !== 'border-box') {\n        return 0\n      }\n      var top = compStyle.paddingTop ? parseInt(compStyle.paddingTop, 10) : 0\n      var bot = compStyle.paddingBottom\n        ? parseInt(compStyle.paddingBottom, 10)\n        : 0\n      return top + bot\n    }\n\n    function getBorderEnds(compStyle) {\n      if (compStyle.boxSizing !== 'border-box') {\n        return 0\n      }\n      var top = compStyle.borderTopWidth\n        ? parseInt(compStyle.borderTopWidth, 10)\n        : 0\n      var bot = compStyle.borderBottomWidth\n        ? parseInt(compStyle.borderBottomWidth, 10)\n        : 0\n      return top + bot\n    }\n\n    function ensureInRange(Dimension) {\n      var max = Number(settings[iframeId]['max' + Dimension]),\n        min = Number(settings[iframeId]['min' + Dimension]),\n        dimension = Dimension.toLowerCase(),\n        size = Number(messageData[dimension])\n\n      log(iframeId, 'Checking ' + dimension + ' is in range ' + min + '-' + max)\n\n      if (size < min) {\n        size = min\n        log(iframeId, 'Set ' + dimension + ' to min value')\n      }\n\n      if (size > max) {\n        size = max\n        log(iframeId, 'Set ' + dimension + ' to max value')\n      }\n\n      messageData[dimension] = '' + size\n    }\n\n    function isMessageFromIFrame() {\n      function checkAllowedOrigin() {\n        function checkList() {\n          var i = 0,\n            retCode = false\n\n          log(\n            iframeId,\n            'Checking connection is from allowed list of origins: ' +\n              checkOrigin\n          )\n\n          for (; i < checkOrigin.length; i++) {\n            if (checkOrigin[i] === origin) {\n              retCode = true\n              break\n            }\n          }\n          return retCode\n        }\n\n        function checkSingle() {\n          var remoteHost = settings[iframeId] && settings[iframeId].remoteHost\n          log(iframeId, 'Checking connection is from: ' + remoteHost)\n          return origin === remoteHost\n        }\n\n        return checkOrigin.constructor === Array ? checkList() : checkSingle()\n      }\n\n      var origin = event.origin,\n        checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin\n\n      if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) {\n        throw new Error(\n          'Unexpected message received from: ' +\n            origin +\n            ' for ' +\n            messageData.iframe.id +\n            '. Message was: ' +\n            event.data +\n            '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\n        )\n      }\n\n      return true\n    }\n\n    function isMessageForUs() {\n      return (\n        msgId === ('' + msg).slice(0, msgIdLen) &&\n        msg.slice(msgIdLen).split(':')[0] in settings\n      ) // ''+Protects against non-string msg\n    }\n\n    function isMessageFromMetaParent() {\n      // Test if this message is from a parent above us. This is an ugly test, however, updating\n      // the message format would break backwards compatibility.\n      var retCode = messageData.type in { true: 1, false: 1, undefined: 1 }\n\n      if (retCode) {\n        log(iframeId, 'Ignoring init message from meta parent page')\n      }\n\n      return retCode\n    }\n\n    function getMsgBody(offset) {\n      return msg.slice(msg.indexOf(':') + msgHeaderLen + offset)\n    }\n\n    function forwardMsgFromIFrame(msgBody) {\n      log(\n        iframeId,\n        'onMessage passed: {iframe: ' +\n          messageData.iframe.id +\n          ', message: ' +\n          msgBody +\n          '}'\n      )\n\n      on('onMessage', {\n        iframe: messageData.iframe,\n        message: JSON.parse(msgBody)\n      })\n\n      log(iframeId, '--')\n    }\n\n    function getPageInfo() {\n      var bodyPosition = document.body.getBoundingClientRect(),\n        iFramePosition = messageData.iframe.getBoundingClientRect()\n\n      return JSON.stringify({\n        iframeHeight: iFramePosition.height,\n        iframeWidth: iFramePosition.width,\n        clientHeight: Math.max(\n          document.documentElement.clientHeight,\n          window.innerHeight || 0\n        ),\n        clientWidth: Math.max(\n          document.documentElement.clientWidth,\n          window.innerWidth || 0\n        ),\n        offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\n        offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\n        scrollTop: window.pageYOffset,\n        scrollLeft: window.pageXOffset,\n        documentHeight: document.documentElement.clientHeight,\n        documentWidth: document.documentElement.clientWidth,\n        windowHeight: window.innerHeight,\n        windowWidth: window.innerWidth\n      })\n    }\n\n    function sendPageInfoToIframe(iframe, iframeId) {\n      function debouncedTrigger() {\n        trigger('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId)\n      }\n      debounceFrameEvents(debouncedTrigger, 32, iframeId)\n    }\n\n    function startPageInfoMonitor() {\n      function setListener(type, func) {\n        function sendPageInfo() {\n          if (settings[id]) {\n            sendPageInfoToIframe(settings[id].iframe, id)\n          } else {\n            stop()\n          }\n        }\n\n        ;['scroll', 'resize'].forEach(function (evt) {\n          log(id, type + evt + ' listener for sendPageInfo')\n          func(window, evt, sendPageInfo)\n        })\n      }\n\n      function stop() {\n        setListener('Remove ', removeEventListener)\n      }\n\n      function start() {\n        setListener('Add ', addEventListener)\n      }\n\n      var id = iframeId // Create locally scoped copy of iFrame ID\n\n      start()\n\n      if (settings[id]) {\n        settings[id].stopPageInfo = stop\n      }\n    }\n\n    function stopPageInfoMonitor() {\n      if (settings[iframeId] && settings[iframeId].stopPageInfo) {\n        settings[iframeId].stopPageInfo()\n        delete settings[iframeId].stopPageInfo\n      }\n    }\n\n    function checkIFrameExists() {\n      var retBool = true\n\n      if (null === messageData.iframe) {\n        warn(iframeId, 'IFrame (' + messageData.id + ') not found')\n        retBool = false\n      }\n      return retBool\n    }\n\n    function getElementPosition(target) {\n      var iFramePosition = target.getBoundingClientRect()\n\n      getPagePosition(iframeId)\n\n      return {\n        x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\n        y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\n      }\n    }\n\n    function scrollRequestFromChild(addOffset) {\n      /* istanbul ignore next */ // Not testable in Karma\n      function reposition() {\n        pagePosition = newPosition\n        scrollTo()\n        log(iframeId, '--')\n      }\n\n      function calcOffset() {\n        return {\n          x: Number(messageData.width) + offset.x,\n          y: Number(messageData.height) + offset.y\n        }\n      }\n\n      function scrollParent() {\n        if (window.parentIFrame) {\n          window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\n            newPosition.x,\n            newPosition.y\n          )\n        } else {\n          warn(\n            iframeId,\n            'Unable to scroll to requested position, window.parentIFrame not found'\n          )\n        }\n      }\n\n      var offset = addOffset\n          ? getElementPosition(messageData.iframe)\n          : { x: 0, y: 0 },\n        newPosition = calcOffset()\n\n      log(\n        iframeId,\n        'Reposition requested from iFrame (offset x:' +\n          offset.x +\n          ' y:' +\n          offset.y +\n          ')'\n      )\n\n      if (window.top === window.self) {\n        reposition()\n      } else {\n        scrollParent()\n      }\n    }\n\n    function scrollTo() {\n      if (false === on('onScroll', pagePosition)) {\n        unsetPagePosition()\n      } else {\n        setPagePosition(iframeId)\n      }\n    }\n\n    function findTarget(location) {\n      function jumpToTarget() {\n        var jumpPosition = getElementPosition(target)\n\n        log(\n          iframeId,\n          'Moving to in page link (#' +\n            hash +\n            ') at x: ' +\n            jumpPosition.x +\n            ' y: ' +\n            jumpPosition.y\n        )\n        pagePosition = {\n          x: jumpPosition.x,\n          y: jumpPosition.y\n        }\n\n        scrollTo()\n        log(iframeId, '--')\n      }\n\n      function jumpToParent() {\n        if (window.parentIFrame) {\n          window.parentIFrame.moveToAnchor(hash)\n        } else {\n          log(\n            iframeId,\n            'In page link #' +\n              hash +\n              ' not found and window.parentIFrame not found'\n          )\n        }\n      }\n\n      var hash = location.split('#')[1] || '',\n        hashData = decodeURIComponent(hash),\n        target =\n          document.getElementById(hashData) ||\n          document.getElementsByName(hashData)[0]\n\n      if (target) {\n        jumpToTarget()\n      } else if (window.top === window.self) {\n        log(iframeId, 'In page link #' + hash + ' not found')\n      } else {\n        jumpToParent()\n      }\n    }\n\n    function onMouse(event) {\n      var mousePos = {}\n\n      if (Number(messageData.width) === 0 && Number(messageData.height) === 0) {\n        var data = getMsgBody(9).split(':')\n        mousePos = {\n          x: data[1],\n          y: data[0]\n        }\n      } else {\n        mousePos = {\n          x: messageData.width,\n          y: messageData.height\n        }\n      }\n\n      on(event, {\n        iframe: messageData.iframe,\n        screenX: Number(mousePos.x),\n        screenY: Number(mousePos.y),\n        type: messageData.type\n      })\n    }\n\n    function on(funcName, val) {\n      return chkEvent(iframeId, funcName, val)\n    }\n\n    function actionMsg() {\n      if (settings[iframeId] && settings[iframeId].firstRun) firstRun()\n\n      switch (messageData.type) {\n        case 'close': {\n          closeIFrame(messageData.iframe)\n          break\n        }\n\n        case 'message': {\n          forwardMsgFromIFrame(getMsgBody(6))\n          break\n        }\n\n        case 'mouseenter': {\n          onMouse('onMouseEnter')\n          break\n        }\n\n        case 'mouseleave': {\n          onMouse('onMouseLeave')\n          break\n        }\n\n        case 'autoResize': {\n          settings[iframeId].autoResize = JSON.parse(getMsgBody(9))\n          break\n        }\n\n        case 'scrollTo': {\n          scrollRequestFromChild(false)\n          break\n        }\n\n        case 'scrollToOffset': {\n          scrollRequestFromChild(true)\n          break\n        }\n\n        case 'pageInfo': {\n          sendPageInfoToIframe(\n            settings[iframeId] && settings[iframeId].iframe,\n            iframeId\n          )\n          startPageInfoMonitor()\n          break\n        }\n\n        case 'pageInfoStop': {\n          stopPageInfoMonitor()\n          break\n        }\n\n        case 'inPageLink': {\n          findTarget(getMsgBody(9))\n          break\n        }\n\n        case 'reset': {\n          resetIFrame(messageData)\n          break\n        }\n\n        case 'init': {\n          resizeIFrame()\n          on('onInit', messageData.iframe)\n          break\n        }\n\n        default: {\n          if (\n            Number(messageData.width) === 0 &&\n            Number(messageData.height) === 0\n          ) {\n            warn(\n              'Unsupported message received (' +\n                messageData.type +\n                '), this is likely due to the iframe containing a later ' +\n                'version of iframe-resizer than the parent page'\n            )\n          } else {\n            resizeIFrame()\n          }\n        }\n      }\n    }\n\n    function hasSettings(iframeId) {\n      var retBool = true\n\n      if (!settings[iframeId]) {\n        retBool = false\n        warn(\n          messageData.type +\n            ' No settings for ' +\n            iframeId +\n            '. Message was: ' +\n            msg\n        )\n      }\n\n      return retBool\n    }\n\n    function iFrameReadyMsgReceived() {\n      // eslint-disable-next-line no-restricted-syntax, guard-for-in\n      for (var iframeId in settings) {\n        trigger(\n          'iFrame requested init',\n          createOutgoingMsg(iframeId),\n          settings[iframeId].iframe,\n          iframeId\n        )\n      }\n    }\n\n    function firstRun() {\n      if (settings[iframeId]) {\n        settings[iframeId].firstRun = false\n      }\n    }\n\n    var msg = event.data,\n      messageData = {},\n      iframeId = null\n\n    if ('[iFrameResizerChild]Ready' === msg) {\n      iFrameReadyMsgReceived()\n    } else if (isMessageForUs()) {\n      messageData = processMsg()\n      iframeId = messageData.id\n      if (settings[iframeId]) {\n        settings[iframeId].loaded = true\n      }\n\n      if (!isMessageFromMetaParent() && hasSettings(iframeId)) {\n        log(iframeId, 'Received: ' + msg)\n\n        if (checkIFrameExists() && isMessageFromIFrame()) {\n          actionMsg()\n        }\n      }\n    } else {\n      info(iframeId, 'Ignored: ' + msg)\n    }\n  }\n\n  function chkEvent(iframeId, funcName, val) {\n    var func = null,\n      retVal = null\n\n    if (settings[iframeId]) {\n      func = settings[iframeId][funcName]\n\n      if ('function' === typeof func) {\n        retVal = func(val)\n      } else {\n        throw new TypeError(\n          funcName + ' on iFrame[' + iframeId + '] is not a function'\n        )\n      }\n    }\n\n    return retVal\n  }\n\n  function removeIframeListeners(iframe) {\n    var iframeId = iframe.id\n    delete settings[iframeId]\n  }\n\n  function closeIFrame(iframe) {\n    var iframeId = iframe.id\n    if (chkEvent(iframeId, 'onClose', iframeId) === false) {\n      log(iframeId, 'Close iframe cancelled by onClose event')\n      return\n    }\n    log(iframeId, 'Removing iFrame: ' + iframeId)\n\n    try {\n      // Catch race condition error with React\n      if (iframe.parentNode) {\n        iframe.parentNode.removeChild(iframe)\n      }\n    } catch (error) {\n      warn(error)\n    }\n\n    chkEvent(iframeId, 'onClosed', iframeId)\n    log(iframeId, '--')\n    removeIframeListeners(iframe)\n    if (destroyObserver) {\n      destroyObserver.disconnect()\n      destroyObserver = null\n    }\n  }\n\n  function getPagePosition(iframeId) {\n    if (null === pagePosition) {\n      pagePosition = {\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      log(\n        iframeId,\n        'Get page position: ' + pagePosition.x + ',' + pagePosition.y\n      )\n    }\n  }\n\n  function setPagePosition(iframeId) {\n    if (null !== pagePosition) {\n      window.scrollTo(pagePosition.x, pagePosition.y)\n      log(\n        iframeId,\n        'Set page position: ' + pagePosition.x + ',' + pagePosition.y\n      )\n      unsetPagePosition()\n    }\n  }\n\n  function unsetPagePosition() {\n    pagePosition = null\n  }\n\n  function resetIFrame(messageData) {\n    function reset() {\n      setSize(messageData)\n      trigger('reset', 'reset', messageData.iframe, messageData.id)\n    }\n\n    log(\n      messageData.id,\n      'Size reset requested by ' +\n        ('init' === messageData.type ? 'host page' : 'iFrame')\n    )\n    getPagePosition(messageData.id)\n    syncResize(reset, messageData, 'reset')\n  }\n\n  function setSize(messageData) {\n    function setDimension(dimension) {\n      if (!messageData.id) {\n        log('undefined', 'messageData id not set')\n        return\n      }\n      messageData.iframe.style[dimension] = messageData[dimension] + 'px'\n      log(\n        messageData.id,\n        'IFrame (' +\n          iframeId +\n          ') ' +\n          dimension +\n          ' set to ' +\n          messageData[dimension] +\n          'px'\n      )\n    }\n\n    function chkZero(dimension) {\n      // FireFox sets dimension of hidden iFrames to zero.\n      // So if we detect that set up an event to check for\n      // when iFrame becomes visible.\n\n      /* istanbul ignore next */ // Not testable in PhantomJS\n      if (!hiddenCheckEnabled && '0' === messageData[dimension]) {\n        hiddenCheckEnabled = true\n        log(iframeId, 'Hidden iFrame detected, creating visibility listener')\n        fixHiddenIFrames()\n      }\n    }\n\n    function processDimension(dimension) {\n      setDimension(dimension)\n      chkZero(dimension)\n    }\n\n    var iframeId = messageData.iframe.id\n\n    if (settings[iframeId]) {\n      if (settings[iframeId].sizeHeight) {\n        processDimension('height')\n      }\n      if (settings[iframeId].sizeWidth) {\n        processDimension('width')\n      }\n    }\n  }\n\n  function syncResize(func, messageData, doNotSync) {\n    /* istanbul ignore if */ // Not testable in PhantomJS\n    if (\n      doNotSync !== messageData.type &&\n      requestAnimationFrame &&\n      // including check for jasmine because had trouble getting spy to work in unit test using requestAnimationFrame\n      !window.jasmine\n    ) {\n      log(messageData.id, 'Requesting animation frame')\n      requestAnimationFrame(func)\n    } else {\n      func()\n    }\n  }\n\n  function trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\n    function postMessageToIFrame() {\n      var target = settings[id] && settings[id].targetOrigin\n      log(\n        id,\n        '[' +\n          calleeMsg +\n          '] Sending msg to iframe[' +\n          id +\n          '] (' +\n          msg +\n          ') targetOrigin: ' +\n          target\n      )\n      iframe.contentWindow.postMessage(msgId + msg, target)\n    }\n\n    function iFrameNotFound() {\n      warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found')\n    }\n\n    function chkAndSend() {\n      if (\n        iframe &&\n        'contentWindow' in iframe &&\n        null !== iframe.contentWindow\n      ) {\n        // Null test for PhantomJS\n        postMessageToIFrame()\n      } else {\n        iFrameNotFound()\n      }\n    }\n\n    function warnOnNoResponse() {\n      function warning() {\n        if (settings[id] && !settings[id].loaded && !errorShown) {\n          errorShown = true\n          warn(\n            id,\n            'IFrame has not responded within ' +\n              settings[id].warningTimeout / 1000 +\n              ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.'\n          )\n        }\n      }\n\n      if (\n        !!noResponseWarning &&\n        settings[id] &&\n        !!settings[id].warningTimeout\n      ) {\n        settings[id].msgTimeout = setTimeout(\n          warning,\n          settings[id].warningTimeout\n        )\n      }\n    }\n\n    var errorShown = false\n\n    id = id || iframe.id\n\n    if (settings[id]) {\n      chkAndSend()\n      warnOnNoResponse()\n    }\n  }\n\n  function createOutgoingMsg(iframeId) {\n    return (\n      iframeId +\n      ':' +\n      settings[iframeId].bodyMarginV1 +\n      ':' +\n      settings[iframeId].sizeWidth +\n      ':' +\n      settings[iframeId].log +\n      ':' +\n      settings[iframeId].interval +\n      ':' +\n      settings[iframeId].enablePublicMethods +\n      ':' +\n      settings[iframeId].autoResize +\n      ':' +\n      settings[iframeId].bodyMargin +\n      ':' +\n      settings[iframeId].heightCalculationMethod +\n      ':' +\n      settings[iframeId].bodyBackground +\n      ':' +\n      settings[iframeId].bodyPadding +\n      ':' +\n      settings[iframeId].tolerance +\n      ':' +\n      settings[iframeId].inPageLinks +\n      ':' +\n      settings[iframeId].resizeFrom +\n      ':' +\n      settings[iframeId].widthCalculationMethod +\n      ':' +\n      settings[iframeId].mouseEvents\n    )\n  }\n\n  function isNumber(value) {\n    return typeof value === 'number'\n  }\n\n  function setupIFrame(iframe, options) {\n    function setLimits() {\n      function addStyle(style) {\n        var styleValue = settings[iframeId][style]\n        if (Infinity !== styleValue && 0 !== styleValue) {\n          iframe.style[style] = isNumber(styleValue)\n            ? styleValue + 'px'\n            : styleValue\n          log(iframeId, 'Set ' + style + ' = ' + iframe.style[style])\n        }\n      }\n\n      function chkMinMax(dimension) {\n        if (\n          settings[iframeId]['min' + dimension] >\n          settings[iframeId]['max' + dimension]\n        ) {\n          throw new Error(\n            'Value for min' +\n              dimension +\n              ' can not be greater than max' +\n              dimension\n          )\n        }\n      }\n\n      chkMinMax('Height')\n      chkMinMax('Width')\n\n      addStyle('maxHeight')\n      addStyle('minHeight')\n      addStyle('maxWidth')\n      addStyle('minWidth')\n    }\n\n    function newId() {\n      var id = (options && options.id) || defaults.id + count++\n      if (null !== document.getElementById(id)) {\n        id += count++\n      }\n      return id\n    }\n\n    function ensureHasId(iframeId) {\n      if (typeof iframeId !== 'string') {\n        throw new TypeError('Invaild id for iFrame. Expected String')\n      }\n\n      if ('' === iframeId) {\n        // eslint-disable-next-line no-multi-assign\n        iframe.id = iframeId = newId()\n        logEnabled = (options || {}).log\n        log(\n          iframeId,\n          'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')'\n        )\n      }\n\n      return iframeId\n    }\n\n    function setScrolling() {\n      log(\n        iframeId,\n        'IFrame scrolling ' +\n          (settings[iframeId] && settings[iframeId].scrolling\n            ? 'enabled'\n            : 'disabled') +\n          ' for ' +\n          iframeId\n      )\n      iframe.style.overflow =\n        false === (settings[iframeId] && settings[iframeId].scrolling)\n          ? 'hidden'\n          : 'auto'\n      switch (settings[iframeId] && settings[iframeId].scrolling) {\n        case 'omit': {\n          break\n        }\n\n        case true: {\n          iframe.scrolling = 'yes'\n          break\n        }\n\n        case false: {\n          iframe.scrolling = 'no'\n          break\n        }\n\n        default: {\n          iframe.scrolling = settings[iframeId]\n            ? settings[iframeId].scrolling\n            : 'no'\n        }\n      }\n    }\n\n    // The V1 iFrame script expects an int, where as in V2 expects a CSS\n    // string value such as '1px 3em', so if we have an int for V2, set V1=V2\n    // and then convert V2 to a string PX value.\n    function setupBodyMarginValues() {\n      if (\n        'number' ===\n          typeof (settings[iframeId] && settings[iframeId].bodyMargin) ||\n        '0' === (settings[iframeId] && settings[iframeId].bodyMargin)\n      ) {\n        settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin\n        settings[iframeId].bodyMargin =\n          '' + settings[iframeId].bodyMargin + 'px'\n      }\n    }\n\n    function checkReset() {\n      // Reduce scope of firstRun to function, because IE8's JS execution\n      // context stack is borked and this value gets externally\n      // changed midway through running this function!!!\n      var firstRun = settings[iframeId] && settings[iframeId].firstRun,\n        resetRequertMethod =\n          settings[iframeId] &&\n          settings[iframeId].heightCalculationMethod in resetRequiredMethods\n\n      if (!firstRun && resetRequertMethod) {\n        resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' })\n      }\n    }\n\n    function setupIFrameObject() {\n      if (settings[iframeId]) {\n        settings[iframeId].iframe.iFrameResizer = {\n          close: closeIFrame.bind(null, settings[iframeId].iframe),\n\n          removeListeners: removeIframeListeners.bind(\n            null,\n            settings[iframeId].iframe\n          ),\n\n          resize: trigger.bind(\n            null,\n            'Window resize',\n            'resize',\n            settings[iframeId].iframe\n          ),\n\n          moveToAnchor: function (anchor) {\n            trigger(\n              'Move to anchor',\n              'moveToAnchor:' + anchor,\n              settings[iframeId].iframe,\n              iframeId\n            )\n          },\n\n          sendMessage: function (message) {\n            message = JSON.stringify(message)\n            trigger(\n              'Send Message',\n              'message:' + message,\n              settings[iframeId].iframe,\n              iframeId\n            )\n          }\n        }\n      }\n    }\n\n    // We have to call trigger twice, as we can not be sure if all\n    // iframes have completed loading when this code runs. The\n    // event listener also catches the page changing in the iFrame.\n    function init(msg) {\n      function iFrameLoaded() {\n        trigger('iFrame.onload', msg, iframe, undefined, true)\n        checkReset()\n      }\n\n      function createDestroyObserver(MutationObserver) {\n        if (!iframe.parentNode) {\n          return null\n        }\n\n        var destroyObserver = new MutationObserver(function (mutations) {\n          mutations.forEach(function (mutation) {\n            var removedNodes = Array.prototype.slice.call(mutation.removedNodes) // Transform NodeList into an Array\n            removedNodes.forEach(function (removedNode) {\n              if (removedNode === iframe) {\n                closeIFrame(iframe)\n              }\n            })\n          })\n        })\n        destroyObserver.observe(iframe.parentNode, {\n          childList: true\n        })\n        return destroyObserver\n      }\n\n      var MutationObserver = getMutationObserver()\n      if (MutationObserver) {\n        destroyObserver = createDestroyObserver(MutationObserver)\n      }\n\n      addEventListener(iframe, 'load', iFrameLoaded)\n      trigger('init', msg, iframe, undefined, true)\n    }\n\n    function checkOptions(options) {\n      if ('object' !== typeof options) {\n        throw new TypeError('Options is not an object')\n      }\n    }\n\n    function copyOptions(options) {\n      // eslint-disable-next-line no-restricted-syntax\n      for (var option in defaults) {\n        if (Object.prototype.hasOwnProperty.call(defaults, option)) {\n          settings[iframeId][option] = Object.prototype.hasOwnProperty.call(\n            options,\n            option\n          )\n            ? options[option]\n            : defaults[option]\n        }\n      }\n    }\n\n    function getTargetOrigin(remoteHost) {\n      return '' === remoteHost ||\n        null !== remoteHost.match(/^(about:blank|javascript:|file:\\/\\/)/)\n        ? '*'\n        : remoteHost\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          iframeId,\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 processOptions(options) {\n      options = options || {}\n\n      settings[iframeId] = Object.create(null) // Protect against prototype attacks\n      settings[iframeId].iframe = iframe\n      settings[iframeId].firstRun = true\n      settings[iframeId].remoteHost =\n        iframe.src && iframe.src.split('/').slice(0, 3).join('/')\n\n      checkOptions(options)\n      Object.keys(options).forEach(depricate, options)\n      copyOptions(options)\n\n      if (settings[iframeId]) {\n        settings[iframeId].targetOrigin =\n          true === settings[iframeId].checkOrigin\n            ? getTargetOrigin(settings[iframeId].remoteHost)\n            : '*'\n      }\n    }\n\n    function beenHere() {\n      return iframeId in settings && 'iFrameResizer' in iframe\n    }\n\n    var iframeId = ensureHasId(iframe.id)\n\n    if (beenHere()) {\n      warn(iframeId, 'Ignored iFrame, already setup.')\n    } else {\n      processOptions(options)\n      setScrolling()\n      setLimits()\n      setupBodyMarginValues()\n      init(createOutgoingMsg(iframeId))\n      setupIFrameObject()\n    }\n  }\n\n  function debouce(fn, time) {\n    if (null === timer) {\n      timer = setTimeout(function () {\n        timer = null\n        fn()\n      }, time)\n    }\n  }\n\n  var frameTimer = {}\n  function debounceFrameEvents(fn, time, frameId) {\n    if (!frameTimer[frameId]) {\n      frameTimer[frameId] = setTimeout(function () {\n        frameTimer[frameId] = null\n        fn()\n      }, time)\n    }\n  }\n\n  // Not testable in PhantomJS\n  /* istanbul ignore next */\n\n  function fixHiddenIFrames() {\n    function checkIFrames() {\n      function checkIFrame(settingId) {\n        function chkDimension(dimension) {\n          return (\n            '0px' ===\n            (settings[settingId] && settings[settingId].iframe.style[dimension])\n          )\n        }\n\n        function isVisible(el) {\n          return null !== el.offsetParent\n        }\n\n        if (\n          settings[settingId] &&\n          isVisible(settings[settingId].iframe) &&\n          (chkDimension('height') || chkDimension('width'))\n        ) {\n          trigger(\n            'Visibility change',\n            'resize',\n            settings[settingId].iframe,\n            settingId\n          )\n        }\n      }\n\n      Object.keys(settings).forEach(function (key) {\n        checkIFrame(key)\n      })\n    }\n\n    function mutationObserved(mutations) {\n      log(\n        'window',\n        'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type\n      )\n      debouce(checkIFrames, 16)\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        observer = new MutationObserver(mutationObserved)\n\n      observer.observe(target, config)\n    }\n\n    var MutationObserver = getMutationObserver()\n    if (MutationObserver) {\n      createMutationObserver()\n    }\n  }\n\n  function resizeIFrames(event) {\n    function resize() {\n      sendTriggerMsg('Window ' + event, 'resize')\n    }\n\n    log('window', 'Trigger event: ' + event)\n    debouce(resize, 16)\n  }\n\n  // Not testable in PhantomJS\n  /* istanbul ignore next */\n  function tabVisible() {\n    function resize() {\n      sendTriggerMsg('Tab Visible', 'resize')\n    }\n\n    if ('hidden' !== document.visibilityState) {\n      log('document', 'Trigger event: Visibility change')\n      debouce(resize, 16)\n    }\n  }\n\n  function sendTriggerMsg(eventName, event) {\n    function isIFrameResizeEnabled(iframeId) {\n      return (\n        settings[iframeId] &&\n        'parent' === settings[iframeId].resizeFrom &&\n        settings[iframeId].autoResize &&\n        !settings[iframeId].firstRun\n      )\n    }\n\n    Object.keys(settings).forEach(function (iframeId) {\n      if (isIFrameResizeEnabled(iframeId)) {\n        trigger(eventName, event, settings[iframeId].iframe, iframeId)\n      }\n    })\n  }\n\n  function setupEventListeners() {\n    addEventListener(window, 'message', iFrameListener)\n\n    addEventListener(window, 'resize', function () {\n      resizeIFrames('resize')\n    })\n\n    addEventListener(document, 'visibilitychange', tabVisible)\n\n    addEventListener(document, '-webkit-visibilitychange', tabVisible)\n  }\n\n  function factory() {\n    function init(options, element) {\n      function chkType() {\n        if (!element.tagName) {\n          throw new TypeError('Object is not a valid DOM element')\n        } else if ('IFRAME' !== element.tagName.toUpperCase()) {\n          throw new TypeError(\n            'Expected <IFRAME> tag, found <' + element.tagName + '>'\n          )\n        }\n      }\n\n      if (element) {\n        chkType()\n        setupIFrame(element, options)\n        iFrames.push(element)\n      }\n    }\n\n    function warnDeprecatedOptions(options) {\n      if (options && options.enablePublicMethods) {\n        warn(\n          'enablePublicMethods option has been removed, public methods are now always available in the iFrame'\n        )\n      }\n    }\n\n    var iFrames\n\n    setupRequestAnimationFrame()\n    setupEventListeners()\n\n    return function iFrameResizeF(options, target) {\n      iFrames = [] // Only return iFrames past in on this call\n\n      warnDeprecatedOptions(options)\n\n      switch (typeof target) {\n        case 'undefined':\n        case 'string': {\n          Array.prototype.forEach.call(\n            document.querySelectorAll(target || 'iframe'),\n            init.bind(undefined, options)\n          )\n          break\n        }\n\n        case 'object': {\n          init(options, target)\n          break\n        }\n\n        default: {\n          throw new TypeError('Unexpected data type (' + typeof target + ')')\n        }\n      }\n\n      return iFrames\n    }\n  }\n\n  function createJQueryPublicMethod($) {\n    if (!$.fn) {\n      info('', 'Unable to bind to jQuery, it is not fully loaded.')\n    } else if (!$.fn.iFrameResize) {\n      $.fn.iFrameResize = function $iFrameResizeF(options) {\n        function init(index, element) {\n          setupIFrame(element, options)\n        }\n\n        return this.filter('iframe').each(init).end()\n      }\n    }\n  }\n\n  if (window.jQuery !== undefined) {\n    createJQueryPublicMethod(window.jQuery)\n  }\n\n  if (typeof define === 'function' && define.amd) {\n    define([], factory)\n  } else if (typeof module === 'object' && typeof module.exports === 'object') {\n    // Node for browserfy\n    module.exports = factory()\n  }\n  window.iFrameResize = window.iFrameResize || factory()\n})()\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","const iframeResize = require('./js/iframeResizer')\n\nmodule.exports = {\n  iframeResize: iframeResize,\n  iframeResizer: iframeResize, // Backwards compatibility\n  contentWindow: require('./js/iframeResizer.contentWindow')\n}\n","import { iframeResize } from 'iframe-resizer'\n\nconst $examples = document.querySelectorAll('iframe.js-component-preview')\n\n/**\n * Resize component preview iframe\n *\n * @this {HTMLIFrameElement}\n */\nfunction resize() {\n  iframeResize(\n    {\n      // Omit scrolling as this otherwise adds the iframe `scrolling` attribute\n      // which is deprecated\n      scrolling: 'omit',\n      onInit: () => {\n        // Set the y axis overflow of the HTML element within the resized iframe\n        // to 'hidden'.\n        // This is to remove a functionally useless visible scrollbar within\n        // component preview iframes that appears because we're omitting scrolling\n        // via iframe-resizer and we've set `overflow-y: scroll` on `govuk-template`\n        // which we need to override to remove the scroll bar.\n        // We need to do this at the js level rather than in sass in case\n        // iframe-resizer fails to run, leaving us with a bunch of iframes whose\n        // sizes might mean we need to scroll to see the whole component, which\n        // we wouldn't be able to do if this was applied by default.\n        this.contentWindow.document.documentElement.style.overflowY = 'hidden'\n      }\n    },\n    this\n  )\n}\n\n/**\n * Defer resize for lazy-loaded iframes\n */\ndocument.addEventListener('DOMContentLoaded', () =>\n  $examples.forEach(($example) =>\n    $example.loading === 'lazy'\n      ? $example.addEventListener('load', resize)\n      : resize.call($example)\n  )\n)\n"],"names":["console","info","undefined","window","destroyObserver","$","count","logEnabled","hiddenCheckEnabled","msgId","pagePosition","requestAnimationFrame","resetRequiredMethods","Object","freeze","max","scroll","bodyScroll","documentElementScroll","settings","timer","defaults","autoResize","bodyBackground","bodyMargin","bodyMarginV1","bodyPadding","checkOrigin","inPageLinks","enablePublicMethods","heightCalculationMethod","id","interval","license","log","maxHeight","Infinity","maxWidth","minHeight","minWidth","mouseEvents","resizeFrom","scrolling","sizeHeight","sizeWidth","warningTimeout","tolerance","widthCalculationMethod","onClose","onClosed","onInit","onMessage","warn","onMouseEnter","onMouseLeave","onResized","onScroll","frameTimer","jQuery","fn","iFrameResize","options","this","filter","each","index","element","setupIFrame","end","module","exports","factory","getMutationObserver","MutationObserver","WebKitMutationObserver","MozMutationObserver","addEventListener","el","evt","func","removeEventListener","formatLogHeader","iframeId","retStr","top","self","parentIFrame","getId","getMyID","isLogEnabled","msg","output","type","enabled","iFrameListener","event","resizeIFrame","ensureInRange","syncResize","setSize","messageData","setPagePosition","on","getPaddingEnds","compStyle","boxSizing","paddingTop","parseInt","paddingBottom","getBorderEnds","borderTopWidth","borderBottomWidth","Dimension","Number","min","dimension","toLowerCase","size","getMsgBody","offset","slice","indexOf","msgHeader","sendPageInfoToIframe","iframe","time","frameId","bodyPosition","iFramePosition","trigger","document","body","getBoundingClientRect","JSON","stringify","iframeHeight","height","iframeWidth","width","clientHeight","Math","documentElement","innerHeight","clientWidth","innerWidth","offsetTop","offsetLeft","left","scrollTop","pageYOffset","scrollLeft","pageXOffset","documentHeight","documentWidth","windowHeight","windowWidth","setTimeout","getElementPosition","target","getPagePosition","x","floor","y","scrollRequestFromChild","addOffset","newPosition","scrollTo","unsetPagePosition","onMouse","mousePos","data","split","screenX","screenY","funcName","val","chkEvent","retBool","retCode","createOutgoingMsg","iFrameReadyMsgReceived","getComputedStyle","loaded","true","false","hasSettings","remoteHost","origin","constructor","Array","i","length","checkList","Error","isMessageFromIFrame","firstRun","closeIFrame","msgBody","message","parse","setListener","sendPageInfo","stop","forEach","stopPageInfo","startPageInfoMonitor","hash","hashData","decodeURIComponent","getElementById","getElementsByName","jumpPosition","moveToAnchor","resetIFrame","actionMsg","retVal","TypeError","removeIframeListeners","parentNode","removeChild","error","disconnect","chkZero","checkIFrames","checkIFrame","settingId","chkDimension","style","isVisible","offsetParent","keys","key","mutationObserved","mutations","debouce","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observe","fixHiddenIFrames","processDimension","setDimension","doNotSync","jasmine","calleeMsg","noResponseWarning","errorShown","contentWindow","targetOrigin","postMessage","msgTimeout","depricate","splitName","name","charAt","toUpperCase","src","ensureHasId","create","join","checkOptions","option","prototype","hasOwnProperty","call","copyOptions","match","processOptions","overflow","setScrolling","addStyle","styleValue","chkMinMax","setLimits","mutation","removedNodes","removedNode","createDestroyObserver","resetRequertMethod","iFrameResizer","close","bind","removeListeners","resize","anchor","sendMessage","tabVisible","visibilityState","sendTriggerMsg","eventName","isIFrameResizeEnabled","setupEventListeners","init","tagName","chkType","iFrames","push","vendors","setupRequestAnimationFrame","warnDeprecatedOptions","querySelectorAll","bodyMarginStr","bodyObserver","calculateWidth","doubleEventList","click","eventCancelTimer","heightCalcModeDefault","heightCalcMode","initLock","initMsg","intervalTimer","logging","msgID","myID","parent","targetOriginDefault","triggerLocked","triggerLockedTimer","throttledTimer","widthCalcModeDefault","widthCalcMode","win","onReady","onPageInfo","customCalcMethods","offsetHeight","scrollWidth","eventHandlersByName","passiveSupported","passive","get","noop","context","args","result","timeout","previous","later","getHeight","bodyOffset","scrollHeight","custom","documentElementOffset","apply","getAllMeasurements","grow","lowestElement","getMaxElement","getAllElements","taggedElement","getTaggedElements","getWidth","offsetWidth","rightMostElement","sizeIFrameThrottled","sizeIFrame","Date","now","remaining","arguments","clearTimeout","iframeChildListener","receiver","chkLateLoaded","capitalizeFirstLetter","string","formatLogMsg","clearFix","attr","value","strBool","str","enable","readDataFromParent","location","href","readData","setupCustomCalcMethods","calcMode","calcFunc","readDataFromPage","setBodyStyle","createElement","clear","display","appendChild","checkHeightMode","checkWidthMode","startEventListeners","manageEventListeners","clearInterval","sendMsg","getPageInfo","callback","findTarget","reset","scrollToOffset","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","customHeight","customWidth","sendSize","sendMouse","e","addMouseListener","setupMouseEvents","elPosition","jumpToTarget","checkLocationHash","bindAnchors","setupLink","linkClicked","preventDefault","getAttribute","bindLocationHash","initCheck","enableInPageLinks","setupInPageLinks","manageTriggerEvent","listener","add","handleEvent","eventType","remove","eventNames","map","method","checkCalcMode","calcModeDefault","modes","forceIntervalTimer","initInterval","addImageLoadListners","addImageLoadListener","complete","imageLoaded","imageError","elements","attributeName","removeFromArray","splice","removeImageLoadListener","imageEventTriggered","typeDesc","observer","setupBodyMutationObserver","setInterval","abs","prop","defaultView","side","elementsLength","elVal","maxVal","Side","chkEventThottle","dimensions","tag","triggerEvent","triggerEventDesc","currentHeight","currentWidth","checkTolarance","a","b","isSizeChangeDetected","lockTrigger","resetPage","triggerReset","hcm","processRequestFromParent","source","getData","inPageLink","pageInfo","getMessageType","isInitMsg","callFromParent","messageType","readyState","iframeResize","require$$0","iframeResizer","require$$1","$examples","overflowY","$example","loading"],"mappings":"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","x_google_ignoreList":[0,1,2]}