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);
})();