{"version":3,"sources":["iframeResizer.js"],"names":["undefined","getMutationObserver","window","MutationObserver","WebKitMutationObserver","MozMutationObserver","addEventListener","obj","evt","func","attachEvent","removeEventListener","el","detachEvent","setupRequestAnimationFrame","x","vendors","length","requestAnimationFrame","log","getMyID","iframeId","retStr","top","self","parentIFrame","getId","formatLogHeader","msgId","isLogEnabled","settings","logEnabled","msg","output","info","warn","type","enabled","console","iFrameListener","event","resizeIFrame","resize","setSize","messageData","setPagePosition","callback","ensureInRange","syncResize","processMsg","data","substr","msgIdLen","split","iframe","id","height","width","Dimension","max","Number","min","dimension","toLowerCase","size","isMessageFromIFrame","checkAllowedOrigin","checkList","i","retCode","checkOrigin","origin","checkSingle","remoteHost","constructor","Array","Error","isMessageForUs","isMessageFromMetaParent","true","false","getMsgBody","offset","indexOf","msgHeaderLen","forwardMsgFromIFrame","msgBody","message","JSON","parse","getPageInfo","bodyPosition","document","body","getBoundingClientRect","iFramePosition","stringify","iframeHeight","iframeWidth","clientHeight","Math","documentElement","innerHeight","clientWidth","innerWidth","offsetTop","parseInt","offsetLeft","left","scrollTop","pageYOffset","scrollLeft","pageXOffset","sendPageInfoToIframe","debouncedTrigger","trigger","debounceFrameEvents","startPageInfoMonitor","setListener","sendPageInfo","stop","forEach","start","stopPageInfo","stopPageInfoMonitor","checkIFrameExists","retBool","getElementPosition","target","getPagePosition","floor","pagePosition","y","scrollRequestFromChild","addOffset","reposition","newPosition","scrollTo","calcOffset","scrollParent","unsetPagePosition","findTarget","location","jumpToTarget","jumpPosition","hash","jumpToParent","moveToAnchor","hashData","decodeURIComponent","getElementById","getElementsByName","funcName","val","chkCallback","actionMsg","firstRun","closeRequestCallback","closeIFrame","resetIFrame","hasSettings","iFrameReadyMsgReceived","createOutgoingMsg","logId","loaded","retVal","TypeError","removeIframeListeners","parentNode","removeChild","e","reset","setDimension","style","chkZero","hiddenCheckEnabled","fixHiddenIFrames","processDimension","sizeHeight","sizeWidth","doNotSync","calleeMsg","noResponseWarning","postMessageToIFrame","targetOrigin","contentWindow","postMessage","iFrameNotFound","chkAndSend","warnOnNoResponse","warning","errorShown","warningTimeout","msgTimeout","setTimeout","bodyMarginV1","interval","enablePublicMethods","autoResize","bodyMargin","heightCalculationMethod","bodyBackground","bodyPadding","tolerance","inPageLinks","resizeFrom","widthCalculationMethod","setupIFrame","options","setLimits","addStyle","Infinity","chkMinMax","newId","defaults","count","ensureHasId","src","setScrolling","scrolling","overflow","setupBodyMarginValues","checkReset","resetRequertMethod","resetRequiredMethods","setupIFrameObject","Function","prototype","bind","iFrameResizer","close","removeListeners","anchor","sendMessage","init","iFrameLoaded","createDestroyObserver","mutations","mutation","slice","call","removedNodes","removedNode","observe","childList","checkOptions","copyOptions","option","hasOwnProperty","getTargetOrigin","processOptions","join","beenHere","debouce","fn","time","timer","frameId","frameTimer","checkIFrames","checkIFrame","settingId","chkDimension","isVisible","offsetParent","mutationObserved","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","subtree","resizeIFrames","sendTriggerMsg","tabVisible","visibilityState","eventName","isIFrameResizeEnabled","setupEventListeners","factory","element","chkType","tagName","toUpperCase","iFrames","push","warnDeprecatedOptions","querySelectorAll","createJQueryPublicMethod","$","iFrameResize","index","this","filter","each","end","msgHeader","scroll","bodyScroll","documentElementScroll","maxHeight","maxWidth","minHeight","minWidth","closedCallback","initCallback","messageCallback","resizedCallback","scrollCallback","jQuery","define","amd","module","exports"],"mappings":"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","file":"iframeResizer.min.js","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://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Reed Dadoune - reed@dadoune.com\n */\n\n(function(undefined) {\n  'use strict';\n\n  if (typeof window === 'undefined') return; // don't run for server side render\n\n  var count = 0,\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 = {\n      max: 1,\n      scroll: 1,\n      bodyScroll: 1,\n      documentElementScroll: 1\n    },\n    settings = {},\n    timer = null,\n    logId = 'Host Page',\n    defaults = {\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      log: false,\n      maxHeight: Infinity,\n      maxWidth: Infinity,\n      minHeight: 0,\n      minWidth: 0,\n      resizeFrom: 'parent',\n      scrolling: false,\n      sizeHeight: true,\n      sizeWidth: false,\n      warningTimeout: 5000,\n      tolerance: 0,\n      widthCalculationMethod: 'scroll',\n      closedCallback: function() {},\n      initCallback: function() {},\n      messageCallback: function() {\n        warn('MessageCallback function not defined');\n      },\n      resizedCallback: function() {},\n      scrollCallback: function() {\n        return true;\n      }\n    };\n\n  function getMutationObserver() {\n    return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n  }\n\n  function addEventListener(obj, evt, func) {\n    /* istanbul ignore else */ // Not testable in PhantonJS\n    if ('addEventListener' in window) {\n      obj.addEventListener(evt, func, false);\n    } else if ('attachEvent' in window) {\n      //IE\n      obj.attachEvent('on' + evt, func);\n    }\n  }\n\n  function removeEventListener(el, evt, func) {\n    /* istanbul ignore else */ // Not testable in phantonJS\n    if ('removeEventListener' in window) {\n      el.removeEventListener(evt, func, false);\n    } else if ('detachEvent' in window) {\n      //IE\n      el.detachEvent('on' + evt, func);\n    }\n  }\n\n  function setupRequestAnimationFrame() {\n    var vendors = ['moz', 'webkit', 'o', 'ms'],\n      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      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      if (window.parentIFrame && window.parentIFrame.getId) {\n        retStr = window.parentIFrame.getId() + ': ' + iframeId;\n      } else {\n        retStr = 'Nested host page: ' + iframeId;\n      }\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      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        callback('resizedCallback', messageData);\n      }\n\n      ensureInRange('Height');\n      ensureInRange('Width');\n\n      syncResize(resize, messageData, 'init');\n    }\n\n    function processMsg() {\n      var data = msg.substr(msgIdLen).split(':');\n\n      return {\n        iframe: settings[data[0]] && settings[data[0]].iframe,\n        id: data[0],\n        height: data[1],\n        width: data[2],\n        type: data[3]\n      };\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(\n        iframeId,\n        'Checking ' + dimension + ' is in range ' + min + '-' + max\n      );\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).substr(0, msgIdLen) &&\n        msg.substr(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 compatibity.\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.substr(msg.indexOf(':') + msgHeaderLen + offset);\n    }\n\n    function forwardMsgFromIFrame(msgBody) {\n      log(\n        iframeId,\n        'MessageCallback passed: {iframe: ' +\n          messageData.iframe.id +\n          ', message: ' +\n          msgBody +\n          '}'\n      );\n      callback('messageCallback', {\n        iframe: messageData.iframe,\n        message: JSON.parse(msgBody)\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      });\n    }\n\n    function sendPageInfoToIframe(iframe, iframeId) {\n      function debouncedTrigger() {\n        trigger(\n          'Send Page Info',\n          'pageInfo:' + getPageInfo(),\n          iframe,\n          iframeId\n        );\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        scrollParent();\n      } else {\n        reposition();\n      }\n    }\n\n    function scrollTo() {\n      if (false !== callback('scrollCallback', pagePosition)) {\n        setPagePosition(iframeId);\n      } else {\n        unsetPagePosition();\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        jumpToParent();\n      } else {\n        log(iframeId, 'In page link #' + hash + ' not found');\n      }\n    }\n\n    function callback(funcName, val) {\n      return chkCallback(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          if (settings[iframeId].closeRequestCallback)\n            chkCallback(\n              iframeId,\n              'closeRequestCallback',\n              settings[iframeId].iframe\n            );\n          else closeIFrame(messageData.iframe);\n          break;\n        case 'message':\n          forwardMsgFromIFrame(getMsgBody(6));\n          break;\n        case 'scrollTo':\n          scrollRequestFromChild(false);\n          break;\n        case 'scrollToOffset':\n          scrollRequestFromChild(true);\n          break;\n        case 'pageInfo':\n          sendPageInfoToIframe(\n            settings[iframeId] && settings[iframeId].iframe,\n            iframeId\n          );\n          startPageInfoMonitor();\n          break;\n        case 'pageInfoStop':\n          stopPageInfoMonitor();\n          break;\n        case 'inPageLink':\n          findTarget(getMsgBody(9));\n          break;\n        case 'reset':\n          resetIFrame(messageData);\n          break;\n        case 'init':\n          resizeIFrame();\n          callback('initCallback', messageData.iframe);\n          break;\n        default:\n          resizeIFrame();\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      for (var iframeId in settings) {\n        trigger(\n          'iFrame requested init',\n          createOutgoingMsg(iframeId),\n          document.getElementById(iframeId),\n          iframeId\n        );\n      }\n    }\n\n    function firstRun() {\n      if (settings[iframeId]) {\n        settings[iframeId].firstRun = false;\n      }\n    }\n\n    function clearWarningTimeout() {\n      if (settings[iframeId]) {\n        clearTimeout(settings[iframeId].msgTimeout);\n        settings[iframeId].warningTimeout = 0;\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 = logId = 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 chkCallback(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    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 (e) {}\n\n    chkCallback(iframeId, 'closedCallback', iframeId);\n    log(iframeId, '--');\n    removeIframeListeners(iframe);\n  }\n\n  function getPagePosition(iframeId) {\n    if (null === pagePosition) {\n      pagePosition = {\n        x:\n          window.pageXOffset !== undefined\n            ? window.pageXOffset\n            : document.documentElement.scrollLeft,\n        y:\n          window.pageYOffset !== undefined\n            ? window.pageYOffset\n            : document.documentElement.scrollTop\n      };\n      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 (doNotSync !== messageData.type && requestAnimationFrame) {\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  }\n\n  function setupIFrame(iframe, options) {\n    function setLimits() {\n      function addStyle(style) {\n        if (\n          Infinity !== settings[iframeId][style] &&\n          0 !== settings[iframeId][style]\n        ) {\n          iframe.style[style] = settings[iframeId][style] + 'px';\n          log(\n            iframeId,\n            'Set ' + style + ' = ' + settings[iframeId][style] + 'px'\n          );\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 = id + count++;\n      }\n      return id;\n    }\n\n    function ensureHasId(iframeId) {\n      logId = iframeId;\n      if ('' === iframeId) {\n        iframe.id = iframeId = newId();\n        logEnabled = (options || {}).log;\n        logId = iframeId;\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        case true:\n          iframe.scrolling = 'yes';\n          break;\n        case false:\n          iframe.scrolling = 'no';\n          break;\n        default:\n          iframe.scrolling = settings[iframeId]\n            ? settings[iframeId].scrolling\n            : 'no';\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 (Function.prototype.bind && settings[iframeId]) {\n        //Ignore unpolyfilled IE8.\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;\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      }\n\n      var MutationObserver = getMutationObserver();\n      if (MutationObserver) {\n        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      for (var option in defaults) {\n        if (defaults.hasOwnProperty(option)) {\n          settings[iframeId][option] = options.hasOwnProperty(option)\n            ? options[option]\n            : defaults[option];\n        }\n      }\n    }\n\n    function getTargetOrigin(remoteHost) {\n      return '' === remoteHost || 'file://' === remoteHost ? '*' : remoteHost;\n    }\n\n    function processOptions(options) {\n      options = options || {};\n      settings[iframeId] = {\n        firstRun: true,\n        iframe: iframe,\n        remoteHost: iframe.src\n          .split('/')\n          .slice(0, 3)\n          .join('/')\n      };\n\n      checkOptions(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      processOptions(options);\n      setScrolling();\n      setLimits();\n      setupBodyMarginValues();\n      init(createOutgoingMsg(iframeId));\n      setupIFrameObject();\n    } else {\n      warn(iframeId, 'Ignored iFrame, already setup.');\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  } //Not testable in PhantomJS\n\n  /* istanbul ignore next */ 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      for (var settingId in settings) {\n        checkIFrame(settingId);\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  } //Not testable in PhantomJS\n\n  /* istanbul ignore next */ function tabVisible() {\n    function resize() {\n      sendTriggerMsg('Tab Visable', 'resize');\n    }\n\n    if ('hidden' !== document.visibilityState) {\n      log('document', 'Trigger event: Visiblity 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    for (var iframeId in settings) {\n      if (isIFrameResizeEnabled(iframeId)) {\n        trigger(eventName, event, document.getElementById(iframeId), 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    addEventListener(document, '-webkit-visibilitychange', tabVisible); //Andriod 4.4\n    addEventListener(window, 'focusin', function() {\n      resizeIFrames('focus');\n    }); //IE8-9\n    addEventListener(window, 'focus', function() {\n      resizeIFrames('focus');\n    });\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        case 'object':\n          init(options, target);\n          break;\n        default:\n          throw new TypeError('Unexpected data type (' + typeof target + ')');\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')\n          .each(init)\n          .end();\n      };\n    }\n  }\n\n  if (window.jQuery) {\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"]}