diff --git a/js/iframeResizer.contentWindow.js b/js/iframeResizer.contentWindow.js index 4c2fed48b..38c9a51e5 100644 --- a/js/iframeResizer.contentWindow.js +++ b/js/iframeResizer.contentWindow.js @@ -221,11 +221,30 @@ widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode } + function depricate(key) { + var splitName = key.split('Callback') + + if (splitName.length === 2) { + var name = + 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1) + this[name] = this[key] + delete this[key] + warn( + "Deprecated: '" + + key + + "' has been renamed '" + + name + + "'. The old method will be removed in the next major version." + ) + } + } + function readDataFromPage() { function readData() { var data = window.iFrameResizer log('Reading data from page: ' + JSON.stringify(data)) + Object.keys(data).forEach(depricate, data) onMessage = 'onMessage' in data ? data.onMessage : onMessage onReady = 'onReady' in data ? data.onReady : onReady diff --git a/js/iframeResizer.contentWindow.map b/js/iframeResizer.contentWindow.map index 2eb26d2b5..e8ce42850 100644 --- a/js/iframeResizer.contentWindow.map +++ b/js/iframeResizer.contentWindow.map @@ -1 +1 @@ -{"version":3,"sources":["iframeResizer.contentWindow.js"],"names":["undefined","noop","addEventListener","el","evt","func","options","passiveSupported","removeEventListener","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","window","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","onReady","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","onMessage","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","onPageInfo","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","retVal","defaultView","base","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 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 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 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 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 = 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 onReady()\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 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 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 } 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 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 '' +\n (customHeight ? customHeight : '') +\n (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, 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 / 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 ? retVal[prop] : 0\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(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 ? 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 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 onMessage(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"]} \ No newline at end of file +{"version":3,"sources":["iframeResizer.contentWindow.js"],"names":["undefined","window","autoResize","base","bodyBackground","bodyMargin","bodyMarginStr","bodyObserver","bodyPadding","calculateWidth","doubleEventList","resize","click","eventCancelTimer","firstRun","height","heightCalcModeDefault","heightCalcMode","initLock","initMsg","inPageLinks","interval","intervalTimer","logging","msgID","msgIdLen","length","myID","resetRequiredMethods","max","min","bodyScroll","documentElementScroll","resizeFrom","sendPermit","target","parent","targetOriginDefault","tolerance","triggerLocked","triggerLockedTimer","throttledTimer","width","widthCalcModeDefault","widthCalcMode","win","onMessage","warn","onReady","onPageInfo","customCalcMethods","document","documentElement","offsetHeight","body","scrollWidth","eventHandlersByName","passiveSupported","options","Object","create","passive","get","once","addEventListener","noop","removeEventListener","e","func","context","args","result","timeout","previous","later","getNow","Date","now","getTime","getHeight","bodyOffset","getComputedStyle","offset","scrollHeight","custom","documentElementOffset","Math","apply","getAllMeasurements","grow","lowestElement","getMaxElement","getAllElements","taggedElement","getTaggedElements","getWidth","offsetWidth","scroll","rightMostElement","sizeIFrameThrottled","sizeIFrame","remaining","this","arguments","clearTimeout","setTimeout","receiver","chkLateLoaded","el","evt","capitalizeFirstLetter","string","charAt","toUpperCase","slice","formatLogMsg","msg","log","console","init","clearFix","strBool","str","data","substr","split","Number","enable","readDataFromParent","location","href","setupCustomCalcMethods","calcMode","calcFunc","iFrameResizer","constructor","JSON","stringify","keys","forEach","depricate","targetOrigin","heightCalculationMethod","widthCalculationMethod","readDataFromPage","setBodyStyle","attr","value","indexOf","chkCSS","setMargin","createElement","style","clear","display","appendChild","checkHeightMode","checkWidthMode","parentIFrame","startEventListeners","stopEventListeners","close","sendMsg","getId","getPageInfo","callback","moveToAnchor","hash","findTarget","reset","resetIFrame","scrollTo","x","y","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","valString","sendSize","getElementPosition","elPosition","getBoundingClientRect","pagePosition","pageXOffset","scrollLeft","pageYOffset","scrollTop","parseInt","left","top","jumpPosition","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","Array","prototype","call","querySelectorAll","linkClicked","preventDefault","getAttribute","setupInPageLinks","key","splitName","name","manageTriggerEvent","listener","add","eventName","handleEvent","eventType","remove","eventNames","map","method","manageEventListeners","checkCalcMode","calcModeDefault","modes","type","forceIntervalTimer","MutationObserver","WebKitMutationObserver","initInterval","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","imageError","elements","push","attributeName","removeImageLoadListener","splice","imageEventTriggered","event","typeDesc","mutationObserved","mutations","config","observer","querySelector","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observe","disconnect","setupBodyMutationObserver","clearInterval","setInterval","abs","prop","retVal","defaultView","side","timer","elementsLength","elVal","maxVal","Side","i","dimention","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","exports","jQuery","readyState"],"mappings":"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","file":"iframeResizer.contentWindow.min.js"} \ No newline at end of file diff --git a/js/iframeResizer.contentWindow.min.js b/js/iframeResizer.contentWindow.min.js index 03665a82f..1a39fa37d 100644 --- a/js/iframeResizer.contentWindow.min.js +++ b/js/iframeResizer.contentWindow.min.js @@ -1,4 +1,4 @@ -/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.6.5 - 2019-02-14 +/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.6.5 - 2019-02-15 * Desc: Include this file in any page being loaded into an iframe * to force the iframe to resize to the content size. * Requires: iframeResizer.min.js on host page. @@ -6,5 +6,5 @@ * License: MIT */ -!function(a){function b(){}function c(a,b,c,d){a.addEventListener(b,c,!!Ia&&(d||{}))}function d(a,b,c){a.removeEventListener(b,c,!1)}function e(a){return a.charAt(0).toUpperCase()+a.slice(1)}function f(a){var b,c,d,e=null,f=0,g=function(){f=La(),e=null,d=a.apply(b,c),e||(b=c=null)};return function(){var h=La();f||(f=h);var i=ya-(h-f);return b=this,c=arguments,i<=0||i>ya?(e&&(clearTimeout(e),e=null),f=h,d=a.apply(b,c),e||(b=c=null)):e||(e=setTimeout(g,i)),d}}function g(a){return na+"["+pa+"] "+a}function h(a){ma&&"object"==typeof window.console&&console.log(g(a))}function i(a){"object"==typeof window.console&&console.warn(g(a))}function j(){k(),h("Initialising iFrame ("+location.href+")"),l(),o(),n("background",X),n("padding",_),B(),t(),u(),p(),D(),v(),ja=C(),O("init","Init message from host page"),Ea()}function k(){function b(a){return"true"===a}var c=ia.substr(oa).split(":");pa=c[0],Y=a!==c[1]?Number(c[1]):Y,aa=a!==c[2]?b(c[2]):aa,ma=a!==c[3]?b(c[3]):ma,ka=a!==c[4]?Number(c[4]):ka,V=a!==c[6]?b(c[6]):V,Z=c[7],ga=a!==c[8]?c[8]:ga,X=c[9],_=c[10],va=a!==c[11]?Number(c[11]):va,ja.enable=a!==c[12]&&b(c[12]),ra=a!==c[13]?c[13]:ra,Ba=a!==c[14]?c[14]:Ba}function l(){function a(){var a=window.iFrameResizer;h("Reading data from page: "+JSON.stringify(a)),Da="onMessage"in a?a.onMessage:Da,Ea="onReady"in a?a.onReady:Ea,ua="targetOrigin"in a?a.targetOrigin:ua,ga="heightCalculationMethod"in a?a.heightCalculationMethod:ga,Ba="widthCalculationMethod"in a?a.widthCalculationMethod:Ba}function b(a,b){return"function"==typeof a&&(h("Setup custom "+b+"CalcMethod"),Ga[b]=a,a="custom"),a}"iFrameResizer"in window&&Object===window.iFrameResizer.constructor&&(a(),ga=b(ga,"height"),Ba=b(Ba,"width")),h("TargetOrigin for parent set to: "+ua)}function m(a,b){return-1!==b.indexOf("-")&&(i("Negative CSS value ignored for "+a),b=""),b}function n(b,c){a!==c&&""!==c&&"null"!==c&&(document.body.style[b]=c,h("Body "+b+' set to "'+c+'"'))}function o(){a===Z&&(Z=Y+"px"),n("margin",m("margin",Z))}function p(){document.documentElement.style.height="",document.body.style.height="",h('HTML & body height set to "auto"')}function q(a){var b={add:function(b){function d(){O(a.eventName,a.eventType)}Ha[b]=d,c(window,b,d,{passive:!0})},remove:function(a){var b=Ha[a];delete Ha[a],d(window,a,b)}};a.eventNames&&Array.prototype.map?(a.eventName=a.eventNames[0],a.eventNames.map(b[a.method])):b[a.method](a.eventName),h(e(a.method)+" event listener: "+a.eventType)}function r(a){q({method:a,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),q({method:a,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),q({method:a,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),q({method:a,eventType:"Input",eventName:"input"}),q({method:a,eventType:"Mouse Up",eventName:"mouseup"}),q({method:a,eventType:"Mouse Down",eventName:"mousedown"}),q({method:a,eventType:"Orientation Change",eventName:"orientationchange"}),q({method:a,eventType:"Print",eventName:["afterprint","beforeprint"]}),q({method:a,eventType:"Ready State Change",eventName:"readystatechange"}),q({method:a,eventType:"Touch Start",eventName:"touchstart"}),q({method:a,eventType:"Touch End",eventName:"touchend"}),q({method:a,eventType:"Touch Cancel",eventName:"touchcancel"}),q({method:a,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),q({method:a,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),q({method:a,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===ra&&q({method:a,eventType:"IFrame Resized",eventName:"resize"})}function s(a,b,c,d){return b!==a&&(a in c||(i(a+" is not a valid option for "+d+"CalculationMethod."),a=b),h(d+' calculation method set to "'+a+'"')),a}function t(){ga=s(ga,fa,Ma,"height")}function u(){Ba=s(Ba,Aa,Na,"width")}function v(){!0===V?(r("add"),G()):h("Auto Resize disabled")}function w(){h("Disable outgoing messages"),sa=!1}function x(){h("Remove event listener: Message"),d(window,"message",T)}function y(){null!==$&&$.disconnect()}function z(){r("remove"),y(),clearInterval(la)}function A(){w(),x(),!0===V&&z()}function B(){var a=document.createElement("div");a.style.clear="both",a.style.display="block",document.body.appendChild(a)}function C(){function b(){return{x:window.pageXOffset!==a?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==a?window.pageYOffset:document.documentElement.scrollTop}}function d(a){var c=a.getBoundingClientRect(),d=b();return{x:parseInt(c.left,10)+parseInt(d.x,10),y:parseInt(c.top,10)+parseInt(d.y,10)}}function e(b){function c(a){var b=d(a);h("Moving to in page link (#"+e+") at x: "+b.x+" y: "+b.y),S(b.y,b.x,"scrollToOffset")}var e=b.split("#")[1]||b,f=decodeURIComponent(e),g=document.getElementById(f)||document.getElementsByName(f)[0];a!==g?c(g):(h("In page link (#"+e+") not found in iFrame, so sending to parent"),S(0,0,"inPageLink","#"+e))}function f(){""!==location.hash&&"#"!==location.hash&&e(location.href)}function g(){function a(a){function b(a){a.preventDefault(),e(this.getAttribute("href"))}"#"!==a.getAttribute("href")&&c(a,"click",b)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),a)}function j(){c(window,"hashchange",f)}function k(){setTimeout(f,ca)}function l(){Array.prototype.forEach&&document.querySelectorAll?(h("Setting up location.hash handlers"),g(),j(),k()):i("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return ja.enable?l():h("In page linking not enabled"),{findTarget:e}}function D(){h("Enable public methods"),Ca.parentIFrame={autoResize:function(a){return!0===a&&!1===V?(V=!0,v()):!1===a&&!0===V&&(V=!1,z()),V},close:function(){S(0,0,"close"),A()},getId:function(){return pa},getPageInfo:function(a){"function"==typeof a?(Fa=a,S(0,0,"pageInfo")):(Fa=function(){},S(0,0,"pageInfoStop"))},moveToAnchor:function(a){ja.findTarget(a)},reset:function(){R("parentIFrame.reset")},scrollTo:function(a,b){S(b,a,"scrollTo")},scrollToOffset:function(a,b){S(b,a,"scrollToOffset")},sendMessage:function(a,b){S(0,0,"message",JSON.stringify(a),b)},setHeightCalculationMethod:function(a){ga=a,t()},setWidthCalculationMethod:function(a){Ba=a,u()},setTargetOrigin:function(a){h("Set targetOrigin: "+a),ua=a},size:function(a,b){O("size","parentIFrame.size("+(a||"")+(b?","+b:"")+")",a,b)}}}function E(){0!==ka&&(h("setInterval: "+ka+"ms"),la=setInterval(function(){O("interval","setInterval: "+ka)},Math.abs(ka)))}function F(){function b(a){function b(a){!1===a.complete&&(h("Attach listeners to "+a.src),a.addEventListener("load",f,!1),a.addEventListener("error",g,!1),k.push(a))}"attributes"===a.type&&"src"===a.attributeName?b(a.target):"childList"===a.type&&Array.prototype.forEach.call(a.target.querySelectorAll("img"),b)}function c(a){k.splice(k.indexOf(a),1)}function d(a){h("Remove listeners from "+a.src),a.removeEventListener("load",f,!1),a.removeEventListener("error",g,!1),c(a)}function e(b,c,e){d(b.target),O(c,e+": "+b.target.src,a,a)}function f(a){e(a,"imageLoad","Image loaded")}function g(a){e(a,"imageLoadFailed","Image load failed")}function i(a){O("mutationObserver","mutationObserver: "+a[0].target+" "+a[0].type),a.forEach(b)}function j(){var a=document.querySelector("body"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return m=new l(i),h("Create body MutationObserver"),m.observe(a,b),m}var k=[],l=window.MutationObserver||window.WebKitMutationObserver,m=j();return{disconnect:function(){"disconnect"in m&&(h("Disconnect body MutationObserver"),m.disconnect(),k.forEach(d))}}}function G(){var a=0>ka;window.MutationObserver||window.WebKitMutationObserver?a?E():$=F():(h("MutationObserver not supported in this browser!"),E())}function H(a,b){var c=0;return b=b||document.body,c=document.defaultView.getComputedStyle(b,null),c=null!==c?c[a]:0,parseInt(c,W)}function I(a){a>ya/2&&(ya=2*a,h("Event throttle increased to "+ya+"ms"))}function J(a,b){for(var c=b.length,d=0,f=0,g=e(a),i=La(),j=0;jf&&(f=d);return i=La()-i,h("Parsed "+c+" HTML elements"),h("Element position calculated in "+i+"ms"),I(i),f}function K(a){return[a.bodyOffset(),a.bodyScroll(),a.documentElementOffset(),a.documentElementScroll()]}function L(a,b){function c(){return i("No tagged elements ("+b+") found on page"),document.querySelectorAll("body *")}var d=document.querySelectorAll("["+b+"]");return 0===d.length&&c(),J(a,d)}function M(){return document.querySelectorAll("body *")}function N(b,c,d,e){function f(){ea=m,za=n,S(ea,za,b)}function g(){function b(a,b){return!(Math.abs(a-b)<=va)}return m=a!==d?d:Ma[ga](),n=a!==e?e:Na[Ba](),b(ea,m)||aa&&b(za,n)}function i(){return!(b in{init:1,interval:1,size:1})}function j(){return ga in qa||aa&&Ba in qa}function k(){h("No change in size detected")}function l(){i()&&j()?R(c):b in{interval:1}||k()}var m,n;g()||"init"===b?(P(),f()):l()}function O(a,b,c,d){function e(){a in{reset:1,resetPage:1,init:1}||h("Trigger event: "+b)}function f(){return wa&&a in ba}f()?h("Trigger event cancelled: "+a):(e(),"init"===a?N(a,b,c,d):Oa(a,b,c,d))}function P(){wa||(wa=!0,h("Trigger event lock on")),clearTimeout(xa),xa=setTimeout(function(){wa=!1,h("Trigger event lock off"),h("--")},ca)}function Q(a){ea=Ma[ga](),za=Na[Ba](),S(ea,za,a)}function R(a){var b=ga;ga=fa,h("Reset trigger event: "+a),P(),Q("reset"),ga=b}function S(b,c,d,e,f){function g(){a===f?f=ua:h("Message targetOrigin: "+f)}function i(){var g=b+":"+c,i=pa+":"+g+":"+d+(a!==e?":"+e:"");h("Sending message to host page ("+i+")"),ta.postMessage(na+i,f)}!0===sa&&(g(),i())}function T(a){function b(){return na===(""+a.data).substr(0,oa)}function c(){return a.data.split("]")[1].split(":")[0]}function d(){return a.data.substr(a.data.indexOf(":")+1)}function e(){return!("undefined"!=typeof module&&module.exports)&&"iFrameResize"in window||"jQuery"in window&&"iFrameResize"in window.jQuery.prototype}function f(){return a.data.split(":")[2]in{true:1,false:1}}function g(){var b=c();b in l?l[b]():e()||f()||i("Unexpected message ("+a.data+")")}function k(){!1===da?g():f()?l.init():h('Ignored message of type "'+c()+'". Received before initialization.')}var l={init:function(){ia=a.data,ta=a.source,j(),da=!1,setTimeout(function(){ha=!1},ca)},reset:function(){ha?h("Page reset ignored by init"):(h("Page size reset by host page"),Q("resetPage"))},resize:function(){O("resizeParent","Parent window requested size check")},moveToAnchor:function(){ja.findTarget(d())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var a=d();h("PageInfoFromParent called from parent: "+a),Fa(JSON.parse(a)),h(" --")},message:function(){var a=d();h("onMessage called from parent: "+a),Da(JSON.parse(a)),h(" --")}};b()&&k()}function U(){"loading"!==document.readyState&&window.parent.postMessage("[iFrameResizerChild]Ready","*")}if("undefined"!=typeof window){var V=!0,W=10,X="",Y=0,Z="",$=null,_="",aa=!1,ba={resize:1,click:1},ca=128,da=!0,ea=1,fa="bodyOffset",ga=fa,ha=!0,ia="",ja={},ka=32,la=null,ma=!1,na="[iFrameSizer]",oa=na.length,pa="",qa={max:1,min:1,bodyScroll:1,documentElementScroll:1},ra="child",sa=!0,ta=window.parent,ua="*",va=0,wa=!1,xa=null,ya=16,za=1,Aa="scroll",Ba=Aa,Ca=window,Da=function(){i("onMessage function not defined")},Ea=function(){},Fa=function(){},Ga={height:function(){return i("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return i("Custom width calculation function not defined"),document.body.scrollWidth}},Ha={},Ia=!1,Ja=!1;try{var Ka=Object.create({},{passive:{get:function(){Ia=!0}},once:{get:function(){Ja=!0}}});window.addEventListener("test",b,Ka),window.removeEventListener("test",b,Ka)}catch(Pa){}var La=Date.now||function(){return(new Date).getTime()},Ma={bodyOffset:function(){return document.body.offsetHeight+H("marginTop")+H("marginBottom")},offset:function(){return Ma.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return Ga.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,K(Ma))},min:function(){return Math.min.apply(null,K(Ma))},grow:function(){return Ma.max()},lowestElement:function(){return Math.max(Ma.bodyOffset()||Ma.documentElementOffset(),J("bottom",M()))},taggedElement:function(){return L("bottom","data-iframe-height")}},Na={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return Ga.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Na.bodyScroll(),Na.documentElementScroll())},max:function(){return Math.max.apply(null,K(Na))},min:function(){return Math.min.apply(null,K(Na))},rightMostElement:function(){return J("right",M())},taggedElement:function(){return L("right","data-iframe-width")}},Oa=f(N);c(window,"message",T),c(window,"readystatechange",U),U()}}(); +!function(l){if("undefined"!=typeof window){var n=!0,o=10,i="",r=0,a="",t=null,u="",c=!1,s={resize:1,click:1},d=128,f=!0,m=1,g="bodyOffset",h=g,p=!0,v="",y={},b=32,e=null,w=!1,T="[iFrameSizer]",E=T.length,O="",S={max:1,min:1,bodyScroll:1,documentElementScroll:1},M="child",I=!0,N=window.parent,A="*",C=0,k=!1,z=null,R=16,x=1,L="scroll",F=L,P=window,D=function(){ue("onMessage function not defined")},j=function(){},q=function(){},H={height:function(){return ue("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return ue("Custom width calculation function not defined"),document.body.scrollWidth}},W={},B=!1;try{var U=Object.create({},{passive:{get:function(){B=!0}},once:{get:function(){!0}}});window.addEventListener("test",te,U),window.removeEventListener("test",te,U)}catch(e){}var J,V,K,Q,X,Y,G,Z=Date.now||function(){return(new Date).getTime()},$={bodyOffset:function(){return document.body.offsetHeight+be("marginTop")+be("marginBottom")},offset:function(){return $.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return H.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,Te($))},min:function(){return Math.min.apply(null,Te($))},grow:function(){return $.max()},lowestElement:function(){return Math.max($.bodyOffset()||$.documentElementOffset(),we("bottom",Oe()))},taggedElement:function(){return Ee("bottom","data-iframe-height")}},_={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return H.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(_.bodyScroll(),_.documentElementScroll())},max:function(){return Math.max.apply(null,Te(_))},min:function(){return Math.min.apply(null,Te(_))},rightMostElement:function(){return we("right",Oe())},taggedElement:function(){return Ee("right","data-iframe-width")}},ee=(J=Se,X=null,Y=0,G=function(){Y=Z(),X=null,Q=J.apply(V,K),X||(V=K=null)},function(){var e=Z();Y||(Y=e);var t=R-(e-Y);return V=this,K=arguments,t<=0||R 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 'onMessage passed: {iframe: ' +\n messageData.iframe.id +\n ', message: ' +\n msgBody +\n '}'\n )\n on('onMessage', {\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('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId)\n }\n debounceFrameEvents(debouncedTrigger, 32, iframeId)\n }\n\n function startPageInfoMonitor() {\n function setListener(type, func) {\n function sendPageInfo() {\n if (settings[id]) {\n sendPageInfoToIframe(settings[id].iframe, id)\n } else {\n stop()\n }\n }\n\n ;['scroll', 'resize'].forEach(function(evt) {\n log(id, type + evt + ' listener for sendPageInfo')\n func(window, evt, sendPageInfo)\n })\n }\n\n function stop() {\n setListener('Remove ', removeEventListener)\n }\n\n function start() {\n setListener('Add ', addEventListener)\n }\n\n var id = iframeId // Create locally scoped copy of iFrame ID\n\n start()\n\n if (settings[id]) {\n settings[id].stopPageInfo = stop\n }\n }\n\n function stopPageInfoMonitor() {\n if (settings[iframeId] && settings[iframeId].stopPageInfo) {\n settings[iframeId].stopPageInfo()\n delete settings[iframeId].stopPageInfo\n }\n }\n\n function checkIFrameExists() {\n var retBool = true\n\n if (null === messageData.iframe) {\n warn(iframeId, 'IFrame (' + messageData.id + ') not found')\n retBool = false\n }\n return retBool\n }\n\n function getElementPosition(target) {\n var iFramePosition = target.getBoundingClientRect()\n\n getPagePosition(iframeId)\n\n return {\n x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\n y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\n }\n }\n\n function scrollRequestFromChild(addOffset) {\n /* istanbul ignore next */ // Not testable in Karma\n function reposition() {\n pagePosition = newPosition\n scrollTo()\n log(iframeId, '--')\n }\n\n function calcOffset() {\n return {\n x: Number(messageData.width) + offset.x,\n y: Number(messageData.height) + offset.y\n }\n }\n\n function scrollParent() {\n if (window.parentIFrame) {\n window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\n newPosition.x,\n newPosition.y\n )\n } else {\n warn(\n iframeId,\n 'Unable to scroll to requested position, window.parentIFrame not found'\n )\n }\n }\n\n var offset = addOffset\n ? getElementPosition(messageData.iframe)\n : { x: 0, y: 0 },\n newPosition = calcOffset()\n\n log(\n iframeId,\n 'Reposition requested from iFrame (offset x:' +\n offset.x +\n ' y:' +\n offset.y +\n ')'\n )\n\n if (window.top !== window.self) {\n scrollParent()\n } else {\n reposition()\n }\n }\n\n function scrollTo() {\n if (false !== on('onScroll', 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 on(funcName, val) {\n return chkEvent(iframeId, funcName, val)\n }\n\n function actionMsg() {\n if (settings[iframeId] && settings[iframeId].firstRun) firstRun()\n\n switch (messageData.type) {\n case 'close':\n if (settings[iframeId].closeRequeston)\n chkEvent(iframeId, 'onCloseRequest', settings[iframeId].iframe)\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 on('onInit', 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 chkEvent(iframeId, funcName, val) {\n var func = null,\n retVal = null\n\n if (settings[iframeId]) {\n func = settings[iframeId][funcName]\n\n if ('function' === typeof func) {\n retVal = func(val)\n } else {\n throw new TypeError(\n funcName + ' on iFrame[' + iframeId + '] is not a function'\n )\n }\n }\n\n return retVal\n }\n\n function removeIframeListeners(iframe) {\n var iframeId = iframe.id\n delete settings[iframeId]\n }\n\n function closeIFrame(iframe) {\n var iframeId = iframe.id\n 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 chkEvent(iframeId, 'onClosed', 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 (settings[iframeId]) {\n settings[iframeId].iframe.iFrameResizer = {\n close: closeIFrame.bind(null, settings[iframeId].iframe),\n\n removeListeners: removeIframeListeners.bind(\n null,\n settings[iframeId].iframe\n ),\n\n resize: trigger.bind(\n null,\n 'Window resize',\n 'resize',\n settings[iframeId].iframe\n ),\n\n moveToAnchor: function(anchor) {\n trigger(\n 'Move to anchor',\n 'moveToAnchor:' + anchor,\n settings[iframeId].iframe,\n iframeId\n )\n },\n\n sendMessage: function(message) {\n message = JSON.stringify(message)\n trigger(\n 'Send Message',\n 'message:' + message,\n settings[iframeId].iframe,\n iframeId\n )\n }\n }\n }\n }\n\n // We have to call trigger twice, as we can not be sure if all\n // iframes have completed loading when this code runs. The\n // event listener also catches the page changing in the iFrame.\n function init(msg) {\n function iFrameLoaded() {\n trigger('iFrame.onload', msg, iframe, undefined, true)\n checkReset()\n }\n\n function createDestroyObserver(MutationObserver) {\n if (!iframe.parentNode) {\n return\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 }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n\n function fixHiddenIFrames() {\n function checkIFrames() {\n function checkIFrame(settingId) {\n function chkDimension(dimension) {\n return (\n '0px' ===\n (settings[settingId] && settings[settingId].iframe.style[dimension])\n )\n }\n\n function isVisible(el) {\n return null !== el.offsetParent\n }\n\n if (\n settings[settingId] &&\n isVisible(settings[settingId].iframe) &&\n (chkDimension('height') || chkDimension('width'))\n ) {\n trigger(\n 'Visibility change',\n 'resize',\n settings[settingId].iframe,\n settingId\n )\n }\n }\n\n 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 }\n\n //Not testable in PhantomJS\n /* istanbul ignore next */\n 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\n addEventListener(document, '-webkit-visibilitychange', tabVisible)\n\n // Andriod 4.4\n addEventListener(window, 'focusin', function() {\n resizeIFrames('focus')\n })\n\n // IE 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