hyperbook 0.89.3 → 0.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/code-input/auto-close-brackets.min.js +1 -1
- package/dist/assets/code-input/code-input.min.css +1 -1
- package/dist/assets/code-input/code-input.min.js +12 -1
- package/dist/assets/code-input/indent.min.js +1 -1
- package/dist/assets/directive-excalidraw/hyperbook-excalidraw.umd.js +1 -1
- package/dist/assets/directive-onlineide/style.css +8 -0
- package/dist/assets/directive-p5/client.js +113 -0
- package/dist/assets/directive-p5/style.css +67 -3
- package/dist/assets/directive-pyide/client.js +1215 -144
- package/dist/assets/directive-pyide/style.css +183 -6
- package/dist/assets/directive-sqlide/style.css +8 -0
- package/dist/assets/directive-typst/client.js +154 -14
- package/dist/assets/directive-typst/style.css +65 -4
- package/dist/assets/directive-webide/client.js +114 -0
- package/dist/assets/directive-webide/style.css +61 -3
- package/dist/index.js +432 -56
- package/dist/locales/de.json +12 -0
- package/dist/locales/en.json +12 -0
- package/package.json +4 -4
- package/dist/assets/directive-pyide/webworker.js +0 -86
package/dist/locales/de.json
CHANGED
|
@@ -27,14 +27,26 @@
|
|
|
27
27
|
"audio-play": "Abspielen/Pause",
|
|
28
28
|
"archive-offline": "Offline",
|
|
29
29
|
"download-offline": "Offline",
|
|
30
|
+
"ide-fullscreen-enter": "Vollbild",
|
|
31
|
+
"ide-fullscreen-exit": "Vollbild beenden",
|
|
30
32
|
"pyide-run": "Ausführen",
|
|
33
|
+
"pyide-running": "Wird ausgeführt ...",
|
|
31
34
|
"pyide-running-click-to-stop": "Wird ausgeführt (Klicken zum Stoppen) ...",
|
|
32
35
|
"pyide-running-refresh-to-stop": "Wird ausgeführt (Aktualisieren zum Stoppen) ...",
|
|
33
36
|
"pyide-test": "Testen",
|
|
37
|
+
"pyide-testing": "Test läuft ...",
|
|
34
38
|
"pyide-test-running-click-to-stop": "Test läuft (Klicken zum Stoppen) ...",
|
|
35
39
|
"pyide-test-running-refresh-to-stop": "Test läuft (Aktualisieren zum Stoppen) ...",
|
|
40
|
+
"pyide-stop": "Stoppen",
|
|
41
|
+
"pyide-stop-refresh": "Stoppen (Neuladen)",
|
|
42
|
+
"pyide-locked-other-instance-running": "Eine andere PyIDE-Instanz läuft",
|
|
43
|
+
"pyide-stopping": "Wird gestoppt ...",
|
|
44
|
+
"pyide-stop-reloading": "Zum Stoppen ist auf dieser Seite ein Neuladen nötig. Seite wird neu geladen...",
|
|
45
|
+
"pyide-stop-refresh-required": "Stopp angefordert. Wenn die Ausführung nicht stoppt, Seite neu laden oder COOP/COEP-Header aktivieren.",
|
|
36
46
|
"pyide-output": "Ausgabe",
|
|
47
|
+
"pyide-canvas": "Canvas",
|
|
37
48
|
"pyide-input": "Eingabe",
|
|
49
|
+
"pyide-input-prompt": "Eingabe erforderlich:",
|
|
38
50
|
"pyide-reset": "Zurücksetzen",
|
|
39
51
|
"pyide-copy": "Kopieren",
|
|
40
52
|
"pyide-download": "Herunterladen",
|
package/dist/locales/en.json
CHANGED
|
@@ -27,14 +27,26 @@
|
|
|
27
27
|
"audio-play": "Play/Pause",
|
|
28
28
|
"archive-offline": "Offline",
|
|
29
29
|
"download-offline": "Offline",
|
|
30
|
+
"ide-fullscreen-enter": "Fullscreen",
|
|
31
|
+
"ide-fullscreen-exit": "Exit Fullscreen",
|
|
30
32
|
"pyide-run": "Run",
|
|
33
|
+
"pyide-running": "Running ...",
|
|
31
34
|
"pyide-running-click-to-stop": "Running (Click to stop) ...",
|
|
32
35
|
"pyide-running-refresh-to-stop": "Running (Refresh to stop) ...",
|
|
33
36
|
"pyide-test": "Test",
|
|
37
|
+
"pyide-testing": "Test running ...",
|
|
34
38
|
"pyide-test-running-click-to-stop": "Test running (Click to stop) ...",
|
|
35
39
|
"pyide-test-running-refresh-to-stop": "Test running (Refresh to stop) ...",
|
|
40
|
+
"pyide-stop": "Stop",
|
|
41
|
+
"pyide-stop-refresh": "Stop (refresh)",
|
|
42
|
+
"pyide-locked-other-instance-running": "Another PyIDE instance is running",
|
|
43
|
+
"pyide-stopping": "Stopping ...",
|
|
44
|
+
"pyide-stop-reloading": "Stopping requires a refresh on this page. Reloading now...",
|
|
45
|
+
"pyide-stop-refresh-required": "Stop requested. If execution does not stop, refresh the page or enable COOP/COEP headers.",
|
|
36
46
|
"pyide-output": "Output",
|
|
47
|
+
"pyide-canvas": "Canvas",
|
|
37
48
|
"pyide-input": "Input",
|
|
49
|
+
"pyide-input-prompt": "Input required:",
|
|
38
50
|
"pyide-reset": "Reset",
|
|
39
51
|
"pyide-copy": "Copy",
|
|
40
52
|
"pyide-download": "Download",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hyperbook",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.0",
|
|
4
4
|
"author": "Mike Barkmin",
|
|
5
5
|
"homepage": "https://github.com/openpatch/hyperbook#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
"tar": "7.4.3",
|
|
57
57
|
"update-check": "1.5.4",
|
|
58
58
|
"ws": "^8.18.0",
|
|
59
|
+
"@hyperbook/fs": "0.25.0",
|
|
59
60
|
"create-hyperbook": "0.3.6",
|
|
60
|
-
"@hyperbook/
|
|
61
|
-
"@hyperbook/
|
|
62
|
-
"@hyperbook/fs": "0.25.0"
|
|
61
|
+
"@hyperbook/markdown": "0.62.0",
|
|
62
|
+
"@hyperbook/types": "0.23.0"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|
|
65
65
|
"version": "pnpm build",
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
// Setup your project to serve `py-worker.js`. You should also serve
|
|
2
|
-
// `pyodide.js`, and all its associated `.asm.js`, `.json`,
|
|
3
|
-
// and `.wasm` files as well:
|
|
4
|
-
importScripts("https://cdn.jsdelivr.net/pyodide/v0.29.0/full/pyodide.js");
|
|
5
|
-
|
|
6
|
-
class StdinHandler {
|
|
7
|
-
constructor(results, options) {
|
|
8
|
-
this.results = results;
|
|
9
|
-
this.idx = 0;
|
|
10
|
-
Object.assign(this, options);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
stdin() {
|
|
14
|
-
return this.results[this.idx++];
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function loadPyodideAndPackages() {
|
|
19
|
-
var pyodide = await loadPyodide();
|
|
20
|
-
self.pyodide = pyodide;
|
|
21
|
-
await self.pyodide.loadPackage([]);
|
|
22
|
-
}
|
|
23
|
-
let pyodideReadyPromise = loadPyodideAndPackages();
|
|
24
|
-
|
|
25
|
-
self.onmessage = async ({ data: { id, type, payload } }) => {
|
|
26
|
-
switch (type) {
|
|
27
|
-
case "run": {
|
|
28
|
-
// make sure loading is done
|
|
29
|
-
await pyodideReadyPromise;
|
|
30
|
-
// Don't bother yet with this line, suppose our API is built in such a way:
|
|
31
|
-
const { python, inputs, ...context } = payload;
|
|
32
|
-
// The worker copies the context in its own "memory" (an object mapping name to values)
|
|
33
|
-
for (const key of Object.keys(context)) {
|
|
34
|
-
self[key] = context[key];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
self.pyodide.setStdin(new StdinHandler(inputs));
|
|
38
|
-
|
|
39
|
-
self.pyodide.setStdout({
|
|
40
|
-
batched: (msg) => {
|
|
41
|
-
self.postMessage({ id, type: "stdout", payload: msg });
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
self.pyodide.setStderr({
|
|
46
|
-
batched: (msg) => {
|
|
47
|
-
self.postMessage({ id, type: "stderr", payload: msg });
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// Now is the easy part, the one that is similar to working in the main thread:
|
|
52
|
-
const filename = "<exec>";
|
|
53
|
-
try {
|
|
54
|
-
await self.pyodide.loadPackagesFromImports(python);
|
|
55
|
-
const dict = self.pyodide.globals.get("dict");
|
|
56
|
-
const globals = dict();
|
|
57
|
-
let results = await self.pyodide.runPythonAsync(python, {
|
|
58
|
-
globals,
|
|
59
|
-
locals: globals,
|
|
60
|
-
filename,
|
|
61
|
-
});
|
|
62
|
-
globals.destroy();
|
|
63
|
-
dict.destroy();
|
|
64
|
-
self.postMessage({ type: "success", id, payload: results });
|
|
65
|
-
} catch (error) {
|
|
66
|
-
// clean up trackback
|
|
67
|
-
let message = error.message;
|
|
68
|
-
if (message.startsWith("Traceback")) {
|
|
69
|
-
const lines = message?.split("\n") || [];
|
|
70
|
-
const i = lines.findIndex((line) => line.includes(filename));
|
|
71
|
-
message = lines[0] + "\n" + lines.slice(i).join("\n");
|
|
72
|
-
self.postMessage({ type: "error", payload: message, id });
|
|
73
|
-
}
|
|
74
|
-
self.postMessage({ type: "error", payload: message, id });
|
|
75
|
-
}
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
case "setInterruptBuffer": {
|
|
79
|
-
const { interruptBuffer } = payload;
|
|
80
|
-
// make sure loading is done
|
|
81
|
-
await pyodideReadyPromise;
|
|
82
|
-
self.pyodide.setInterruptBuffer(interruptBuffer);
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|