automatically resize sandbox iframes
This commit is contained in:
parent
51de33c2b5
commit
0580db6c68
|
@ -574,6 +574,7 @@ th-literate-program[data-mode="graphics"] {
|
||||||
& iframe {
|
& iframe {
|
||||||
border-style: none;
|
border-style: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The inner iframe is hidden until something requests display. */
|
/* The inner iframe is hidden until something requests display. */
|
||||||
|
|
|
@ -6,11 +6,5 @@ export class Sketch {
|
||||||
this.ctx = this.canvas.getContext("2d");
|
this.ctx = this.canvas.getContext("2d");
|
||||||
|
|
||||||
document.body.appendChild(this.canvas);
|
document.body.appendChild(this.canvas);
|
||||||
|
|
||||||
postMessage({
|
|
||||||
kind: "resize",
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,13 +10,28 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
canvas {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script type="importmap">{ "imports": { "treehouse/": "{{ config.site }}/static/js/" } }</script>
|
<script type="importmap">{ "imports": { "treehouse/": "{{ config.site }}/static/js/" } }</script>
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import { evaluate } from "treehouse/components/literate-programming/eval.js";
|
import { evaluate } from "treehouse/components/literate-programming/eval.js";
|
||||||
console.log("yo");
|
|
||||||
|
// I'm aware there's also ResizeObserver but it didn't seem to fire off any events when a
|
||||||
|
// canvas was added, rendering it pretty much useless.
|
||||||
|
let mutationObserver = new MutationObserver(() => {
|
||||||
|
postMessage({
|
||||||
|
kind: "resize",
|
||||||
|
width: document.body.scrollWidth,
|
||||||
|
height: document.body.scrollHeight,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
mutationObserver.observe(document.body, { subtree: true, childList: true });
|
||||||
|
|
||||||
addEventListener("message", async event => {
|
addEventListener("message", async event => {
|
||||||
let message = event.data;
|
let message = event.data;
|
||||||
if (message.action == "eval") {
|
if (message.action == "eval") {
|
||||||
|
@ -24,6 +39,7 @@
|
||||||
evaluate(message.input);
|
evaluate(message.input);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue