app/assets/javascripts/syndication/iframeResizer.js
window.iframeResizer = function(msgPrefix, targetOrigin, minFrameHeight) {
'use strict';
var timer, frameDefaultOverflow;
minFrameHeight = minFrameHeight || 250;
targetOrigin = targetOrigin || '*';
return {
start: function() {
if (!window.postMessage) {
return;
}
if( !window.getComputedStyle) {
window.getComputedStyle = function(e) {
return e.currentStyle;
};
}
var currentHeight = 0,
bodyNode = document.body,
frameTopMargin,
frameBtmMargin;
frameDefaultOverflow = window.getComputedStyle(bodyNode).overflow;
document.documentElement.style.overflow = 'hidden';
frameTopMargin = parseInt(window.getComputedStyle(bodyNode).marginTop, 16);
frameBtmMargin = parseInt(window.getComputedStyle(bodyNode).marginBottom, 16);
timer = setInterval(function() {
var documentHeight = Math.max(
frameTopMargin + frameBtmMargin + bodyNode.scrollHeight,
minFrameHeight
);
if (documentHeight !== currentHeight) {
window.parent.postMessage(msgPrefix + documentHeight, targetOrigin);
currentHeight = documentHeight;
}
}, 200);
},
stop: function() {
clearInterval(timer);
document.documentElement.style.overflow = frameDefaultOverflow;
}
};
};