{"version":3,"file":"component-preview-iframe.bundle.min.mjs","sources":["../../../../node_modules/iframe-resizer/js/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 */\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","autoResize","bodyBackground","bodyMargin","bodyMarginStr","bodyObserver","bodyPadding","calculateWidth","doubleEventList","resize","click","eventCancelTimer","firstRun","height","heightCalcModeDefault","heightCalcMode","initLock","initMsg","inPageLinks","interval","intervalTimer","logging","mouseEvents","msgID","myID","resetRequiredMethods","max","min","bodyScroll","documentElementScroll","resizeFrom","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","func","context","args","result","timeout","previous","later","getHeight","bodyOffset","getComputedStyle","offset","scrollHeight","custom","documentElementOffset","Math","apply","getAllMeasurements","grow","lowestElement","getMaxElement","getAllElements","taggedElement","getTaggedElements","getWidth","offsetWidth","scroll","rightMostElement","sizeIFrameThrottled","sizeIFrame","Date","now","remaining","this","arguments","clearTimeout","setTimeout","iframeChildListener","data","receiver","chkLateLoaded","el","evt","capitalizeFirstLetter","string","charAt","toUpperCase","slice","formatLogMsg","msg","log","console","init","clearFix","attr","value","strBool","str","split","Number","enable","readDataFromParent","location","href","readData","iFrameResizer","JSON","stringify","keys","forEach","depricate","targetOrigin","heightCalculationMethod","widthCalculationMethod","setupCustomCalcMethods","calcMode","calcFunc","constructor","readDataFromPage","setBodyStyle","indexOf","createElement","style","clear","display","appendChild","checkHeightMode","checkWidthMode","parentIFrame","startEventListeners","manageEventListeners","disconnect","clearInterval","sendMsg","close","getId","getPageInfo","callback","moveToAnchor","hash","findTarget","reset","resetIFrame","scrollTo","x","y","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","sendSize","sendMouse","e","type","screenY","screenX","addMouseListener","name","setupMouseEvents","getPagePosition","pageXOffset","scrollLeft","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","jumpToTarget","jumpPosition","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","preventDefault","getAttribute","Array","prototype","call","querySelectorAll","bindLocationHash","initCheck","enableInPageLinks","setupInPageLinks","key","splitName","length","manageTriggerEvent","listener","add","eventName","handleEvent","eventType","remove","eventNames","map","method","checkCalcMode","calcModeDefault","modes","forceIntervalTimer","MutationObserver","WebKitMutationObserver","initInterval","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","imageError","elements","push","attributeName","removeFromArray","splice","removeImageLoadListener","imageEventTriggered","event","typeDesc","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","observe","setupBodyMutationObserver","setInterval","abs","prop","retVal","defaultView","side","elementsLength","elVal","maxVal","Side","timer","i","chkEventThottle","dimensions","tag","triggerEvent","triggerEventDesc","currentHeight","currentWidth","checkTolarance","a","b","isSizeChangeDetected","lockTrigger","resetPage","triggerReset","hcm","message","postMessage","processRequestFromParent","source","getData","inPageLink","pageInfo","msgBody","parse","getMessageType","isInitMsg","true","false","callFromParent","messageType","module","jQuery","readyState"],"mappings":"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","x_google_ignoreList":[0]}