/* global discourseUrl */ /* global discourseUserName */ /* global discourseEmbedUrl */ (function() { var comments = document.getElementById('discourse-comments'), iframe = document.createElement('iframe'); if (typeof discourseUserName === 'undefined') { iframe.src = [ discourseUrl, 'embed/comments?embed_url=', encodeURIComponent(discourseEmbedUrl) ].join(''); } else { iframe.src = [ discourseUrl, 'embed/comments?embed_url=', encodeURIComponent(discourseEmbedUrl), '&discourse_username=', discourseUserName ].join(''); } iframe.id = 'discourse-embed-frame'; iframe.width = "100%"; iframe.frameBorder = "0"; iframe.scrolling = "no"; comments.appendChild(iframe); // Thanks http://amendsoft-javascript.blogspot.ca/2010/04/find-x-and-y-coordinate-of-html-control.html function findPosY(obj) { var top = 0; if(obj.offsetParent) { while(1) { top += obj.offsetTop; if(!obj.offsetParent) break; obj = obj.offsetParent; } } else if(obj.y) { top += obj.y; } return top; } function postMessageReceived(e) { if (!e) { return; } if (discourseUrl.indexOf(e.origin) === -1) { return; } if (e.data) { if (e.data.type === 'discourse-resize' && e.data.height) { iframe.height = e.data.height + "px"; } if (e.data.type === 'discourse-scroll' && e.data.top) { // find iframe offset var destY = findPosY(iframe) + e.data.top; window.scrollTo(0, destY); } } } window.addEventListener('message', postMessageReceived, false); })();