Skip to content

Commit 5677818

Browse files
committed
Add Pyodide integration
1 parent 24a4165 commit 5677818

File tree

2 files changed

+19
-23
lines changed

2 files changed

+19
-23
lines changed

_layouts/bootstrap.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
<link rel="icon" href="/assets/img/logo.png" type="image/x-icon">
88
<!-- Bootstrap CSS -->
99
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css" integrity="sha384-DyZ88mC6Up2uqS4h/KRgHuoeGwBcD4Ng9SiP4dIRy0EXTlnuz47vAwmeGwVChigm" crossorigin="anonymous">
10-
<script type="text/javascript">
10+
<!-- <script type="text/javascript">
1111
// set the pyodide files URL (packages.json, pyodide.asm.data etc)
1212
window.languagePluginUrl = 'https://cdn.jsdelivr.net/pyodide/v0.18.1/full/';
13-
</script>
13+
</script> -->
1414
<script src="https://cdn.jsdelivr.net/pyodide/v0.18.1/full/pyodide.js"></script>
1515
<link rel="stylesheet" href="/assets/css/main.css">
1616
<link rel="stylesheet" href="/assets/css/code-editor.css">

assets/js/code-editor.js

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,17 @@ editor.setTheme("ace/theme/monokai");
33
editor.session.setMode("ace/mode/python");
44

55

6-
// async function main() {
7-
// let pyodide = await loadPyodide({
8-
// indexURL: "https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",
9-
// stdin: document.getElementById('input-tmp').value
10-
// });
11-
// return pyodide;
12-
// }
13-
// let pyodideReadyPromise = main();
14-
15-
// async function run_python() {
16-
// let pyodide = await pyodideReadyPromise;
17-
// console.log(pyodide.runPython(`
18-
// input()
19-
// `));
20-
// }
21-
22-
function setup_pyodide() {
6+
async function setup_pyodide() {
237
// setup pyodide environment to run code blocks as needed
8+
let pyodide = await pyodideReadyPromise;
249
var setup_code = `
2510
import sys, io, traceback
11+
from js import document, console
2612
namespace = {} # use separate namespace to hide run_code, modules, etc.
2713
def run_code(code):
2814
"""run specified code and return stdout and stderr"""
2915
out = io.StringIO()
16+
sys.stdin = io.StringIO(document.getElementById('input-tmp').value)
3017
oldout = sys.stdout
3118
olderr = sys.stderr
3219
sys.stdout = sys.stderr = out
@@ -43,12 +30,21 @@ def run_code(code):
4330
pyodide.runPython(setup_code)
4431
}
4532

46-
function runPython() {
33+
async function runPython() {
4734
// run code currently stored in editor
48-
console.log(editor.getValue())
35+
let pyodide = await pyodideReadyPromise;
4936
pyodide.globals.code_to_run = editor.getValue()
5037
document.getElementById("output").innerText = pyodide.runPython('run_code(code_to_run)')
5138
}
5239

53-
// run setup_pyodide() when pyodide finishes loading
54-
languagePluginLoader.then(setup_pyodide)
40+
async function get_pyodide() {
41+
let pyodide = await loadPyodide({
42+
indexURL: "https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",
43+
});
44+
return pyodide;
45+
46+
}
47+
48+
let pyodideReadyPromise = get_pyodide();
49+
50+
pyodideReadyPromise.then(setup_pyodide)

0 commit comments

Comments
 (0)