diff --git a/client/index.html b/client/index.html index 344c6724..25ed84f5 100644 --- a/client/index.html +++ b/client/index.html @@ -184,6 +184,12 @@ clearInterval(sendSources); }, { once: true }); + window.addEventListener("message", function(event) { + if (event.data && event.data.gistId && /^[0-9a-f]+$/.test(event.data.gistId)) { + window.location.search = "gist=" + event.data.gistId; + } + }); + return $iframe; } diff --git a/client/js/frame.js b/client/js/frame.js index 7960b9c0..4530ec45 100644 --- a/client/js/frame.js +++ b/client/js/frame.js @@ -27,13 +27,25 @@ }; } + var parent; + document.addEventListener("DOMContentLoaded", function() { window.addEventListener("message", function(event) { - event.source.postMessage("trypurescript", "*"); + parent = event.source; + parent.postMessage("trypurescript", "*"); var file = evalSources(event.data)(""); if (file.main && typeof file.main === "function") { file.main(); } }, { once: true }); }, { once: true }); + + document.addEventListener("click", function(event) { + if (parent && event.target.nodeName === "A" && event.target.hostname === "gist.github.com") { + event.preventDefault(); + parent.postMessage({ + gistId: event.target.pathname.split("/").slice(-1)[0] + }, "*"); + } + }, false); })();