{"version":3,"sources":["iframeResizer.contentWindow.js"],"names":["undefined","noop","addEventListener","el","evt","func","options","window","passiveSupported","attachEvent","removeEventListener","detachEvent","capitalizeFirstLetter","string","charAt","toUpperCase","slice","throttle","context","args","result","timeout","previous","later","getNow","apply","now","remaining","throttledTimer","this","arguments","clearTimeout","setTimeout","formatLogMsg","msg","msgID","myID","log","logging","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","readyCallback","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","setupCustomCalcMethods","calcMode","calcFunc","customCalcMethods","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","manageTriggerEvent","listener","add","eventName","handleEvent","eventType","eventHandlersByName","passive","remove","eventNames","Array","prototype","map","method","manageEventListeners","checkCalcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","stopMsgsToParent","sendPermit","removeMsgListener","receiver","disconnectMutationObserver","bodyObserver","disconnect","stopEventListeners","clearInterval","intervalTimer","teardown","clearFix","createElement","clear","display","appendChild","getPagePosition","x","pageXOffset","scrollLeft","y","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","findTarget","jumpToTarget","target","jumpPosition","hash","sendMsg","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","e","preventDefault","getAttribute","forEach","call","querySelectorAll","bindLocationHash","initCheck","eventCancelTimer","enableInPageLinks","win","parentIFrame","resize","close","getId","getPageInfo","callback","pageInfoCallback","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","initInterval","setInterval","Math","abs","setupBodyMutationObserver","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","MutationObserver","observe","WebKitMutationObserver","forceIntervalTimer","getComputedStyle","prop","convertUnitsToPxForIE8","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","chkEventThottle","timer","getMaxElement","side","elementsLength","length","elVal","maxVal","Side","i","getAllMeasurements","dimention","bodyOffset","bodyScroll","documentElementOffset","documentElementScroll","getTaggedElements","tag","noTaggedElementsFound","getAllElements","sizeIFrame","triggerEvent","triggerEventDesc","resizeIFrame","currentHeight","width","currentWidth","isSizeChangeDetected","checkTolarance","a","b","isForceResizableEvent","isForceResizableCalcMode","resetRequiredMethods","logIgnored","checkDownSizing","lockTrigger","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","postMessage","isMessageForUs","getMessageType","getData","isMiddleTier","module","exports","jQuery","isInitMsg","true","false","callFromParent","messageType","processRequestFromParent","processMessage","firstRun","source","initLock","inPageLink","pageInfo","msgBody","parse","chkLateLoaded","readyState","parent","click","max","min","offsetHeight","scrollWidth","onceSupported","create","get","once","Date","getTime","offset","scrollHeight","custom","grow","lowestElement","taggedElement","offsetWidth","scroll","rightMostElement"],"mappings":"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","file":"iframeResizer.contentWindow.min.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://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Ian Caunce - ian@hallnet.co.uk\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 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    msgID = '[iFrameSizer]', //Must match host page msg ID\n    msgIdLen = msgID.length,\n    myID = '',\n    observer = null,\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    messageCallback = function() {\n      warn('MessageCallback function not defined');\n    },\n    readyCallback = function() {},\n    pageInfoCallback = 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    onceSupported = false;\n\n  function noop() {}\n\n  try {\n    var options = Object.create(\n      {},\n      {\n        passive: {\n          get: function() {\n            passiveSupported = true;\n          }\n        },\n        once: {\n          get: function() {\n            onceSupported = true;\n          }\n        }\n      }\n    );\n    window.addEventListener('test', noop, options);\n    window.removeEventListener('test', noop, options);\n  } catch (e) {\n    /* */\n  }\n\n  function addEventListener(el, evt, func, options) {\n    /* istanbul ignore else */ // Not testable in phantomJS\n    if ('addEventListener' in window) {\n      el.addEventListener(evt, func, passiveSupported ? options || {} : false);\n    } else if ('attachEvent' in window) {\n      //IE\n      el.attachEvent('on' + evt, func);\n    }\n  }\n\n  function removeEventListener(el, evt, func) {\n    /* istanbul ignore else */ // Not testable in phantomJS\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 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 = getNow();\n        timeout = null;\n        result = func.apply(context, args);\n        if (!timeout) {\n          context = args = null;\n        }\n      };\n\n    return function() {\n      var now = getNow();\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          context = args = null;\n        }\n      } else if (!timeout) {\n        timeout = setTimeout(later, remaining);\n      }\n\n      return result;\n    };\n  }\n\n  var getNow =\n    Date.now ||\n    function() {\n      /* istanbul ignore next */ // Not testable in PhantonJS\n      return new Date().getTime();\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      console.log(formatLogMsg(msg));\n    }\n  }\n\n  function warn(msg) {\n    if ('object' === typeof window.console) {\n      console.warn(formatLogMsg(msg));\n    }\n  }\n\n  function init() {\n    readDataFromParent();\n    log('Initialising iFrame (' + 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    startEventListeners();\n    inPageLinks = setupInPageLinks();\n    sendSize('init', 'Init message from host page');\n    readyCallback();\n  }\n\n  function readDataFromParent() {\n    function strBool(str) {\n      return 'true' === str ? true : false;\n    }\n\n    var data = initMsg.substr(msgIdLen).split(':');\n\n    myID = data[0];\n    bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin; //For V1 compatibility\n    calculateWidth = undefined !== data[2] ? strBool(data[2]) : calculateWidth;\n    logging = undefined !== data[3] ? strBool(data[3]) : logging;\n    interval = undefined !== data[4] ? Number(data[4]) : interval;\n    autoResize = undefined !== data[6] ? strBool(data[6]) : autoResize;\n    bodyMarginStr = data[7];\n    heightCalcMode = undefined !== data[8] ? data[8] : heightCalcMode;\n    bodyBackground = data[9];\n    bodyPadding = data[10];\n    tolerance = undefined !== data[11] ? Number(data[11]) : tolerance;\n    inPageLinks.enable = undefined !== data[12] ? strBool(data[12]) : false;\n    resizeFrom = undefined !== data[13] ? data[13] : resizeFrom;\n    widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode;\n  }\n\n  function readDataFromPage() {\n    function readData() {\n      var data = window.iFrameResizer;\n\n      log('Reading data from page: ' + JSON.stringify(data));\n\n      messageCallback =\n        'messageCallback' in data ? data.messageCallback : messageCallback;\n      readyCallback =\n        'readyCallback' in data ? data.readyCallback : readyCallback;\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      eventName: ['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    clearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n    document.body.appendChild(clearFix);\n  }\n\n  function setupInPageLinks() {\n    function getPagePosition() {\n      return {\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    }\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        jumpToTarget(target);\n      } else {\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      }\n    }\n\n    function checkLocationHash() {\n      if ('' !== location.hash && '#' !== location.hash) {\n        findTarget(location.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 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          //sendSize('autoResize','Auto Resize enabled');\n        } else if (false === resize && true === autoResize) {\n          autoResize = false;\n          stopEventListeners();\n        }\n\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          pageInfoCallback = callback;\n          sendMsg(0, 0, 'pageInfo');\n        } else {\n          pageInfoCallback = 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          '' +\n          (customHeight ? customHeight : '') +\n          (customWidth ? ',' + customWidth : '');\n        //lockTrigger();\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  } //Not testable in PhantomJS\n\n  /* istanbul ignore next */ function setupBodyMutationObserver() {\n    function addImageLoadListners(mutation) {\n      function addImageLoadListener(element) {\n        if (false === element.complete) {\n          log('Attach listeners to ' + element.src);\n          element.addEventListener('load', imageLoaded, false);\n          element.addEventListener('error', imageError, false);\n          elements.push(element);\n        }\n      }\n\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, undefined, undefined);\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 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; // Not testable in PhantomJS\n\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    /* istanbul ignore next */ //Not testable in PhantomJS\n    function convertUnitsToPxForIE8(value) {\n      var PIXEL = /^\\d+(px)?$/i;\n\n      if (PIXEL.test(value)) {\n        return parseInt(value, base);\n      }\n\n      var style = el.style.left,\n        runtimeStyle = el.runtimeStyle.left;\n\n      el.runtimeStyle.left = el.currentStyle.left;\n      el.style.left = value || 0;\n      value = el.style.pixelLeft;\n      el.style.left = style;\n      el.runtimeStyle.left = runtimeStyle;\n\n      return value;\n    }\n\n    var retVal = 0;\n    el = el || document.body; // Not testable in phantonJS\n\n    /* istanbul ignore else */ if (\n      'defaultView' in document &&\n      'getComputedStyle' in document.defaultView\n    ) {\n      retVal = document.defaultView.getComputedStyle(el, null);\n      retVal = null !== retVal ? retVal[prop] : 0;\n    } else {\n      //IE8\n      retVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n    }\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 = getNow();\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 = getNow() - 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(dimention) {\n    return [\n      dimention.bodyOffset(),\n      dimention.bodyScroll(),\n      dimention.documentElementOffset(),\n      dimention.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 (0 === elements.length) 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 compatability\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(\n          getWidth.bodyScroll(),\n          getWidth.documentElementScroll()\n        );\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 ? customHeight : getHeight[heightCalcMode]();\n      currentWidth =\n        undefined !== customWidth ? customWidth : getWidth[widthCalcMode]();\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      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    } else {\n      log('Trigger event cancelled: ' + triggerEvent);\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 size reset by host page');\n          triggerReset('resetPage');\n        } else {\n          log('Page reset ignored by init');\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 compatability\n\n      pageInfo: function pageInfoFromParent() {\n        var msgBody = getData();\n        log('PageInfoFromParent called from parent: ' + msgBody);\n        pageInfoCallback(JSON.parse(msgBody));\n        log(' --');\n      },\n\n      message: function messageFromParent() {\n        var msgBody = getData();\n\n        log('MessageCallback called from parent: ' + msgBody);\n        messageCallback(JSON.parse(msgBody));\n        log(' --');\n      }\n    };\n\n    function isMessageForUs() {\n      return msgID === ('' + event.data).substr(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.substr(event.data.indexOf(':') + 1);\n    }\n\n    function isMiddleTier() {\n      return (\n        (!(typeof module !== 'undefined' && module.exports) &&\n          'iFrameResize' in window) ||\n        ('jQuery' in window && '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 compatibity.\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  addEventListener(window, 'message', receiver);\n  addEventListener(window, 'readystatechange', chkLateLoaded);\n  chkLateLoaded();\n\n  \n})();\n"]}