@dodona/papyros 3.0.2 → 4.0.0-beta.2
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/README.md +133 -72
- package/dist/Components.d.ts +4 -0
- package/dist/Components.js +5 -0
- package/dist/Components.js.map +1 -0
- package/dist/Papyros.d.ts +18 -127
- package/dist/Papyros.js +39 -211
- package/dist/Papyros.js.map +1 -1
- package/dist/{Backend.d.ts → backend/Backend.d.ts} +3 -12
- package/dist/{Backend.js → backend/Backend.js} +4 -17
- package/dist/backend/Backend.js.map +1 -0
- package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.js +1 -1
- package/dist/backend/workers/javascript/JavaScriptWorker.js.map +1 -0
- package/dist/backend/workers/javascript/worker.js.map +1 -0
- package/dist/{workers → backend/workers}/python/PythonWorker.d.ts +2 -2
- package/dist/{workers → backend/workers}/python/PythonWorker.js +2 -2
- package/dist/backend/workers/python/PythonWorker.js.map +1 -0
- package/dist/backend/workers/python/python_package.tar.gz.load_by_url +0 -0
- package/dist/backend/workers/python/worker.js.map +1 -0
- package/dist/communication/BackendEvent.js.map +1 -0
- package/dist/{BackendEventQueue.d.ts → communication/BackendEventQueue.d.ts} +1 -36
- package/dist/{BackendEventQueue.js → communication/BackendEventQueue.js} +2 -45
- package/dist/communication/BackendEventQueue.js.map +1 -0
- package/dist/{BackendManager.d.ts → communication/BackendManager.d.ts} +2 -2
- package/dist/{BackendManager.js → communication/BackendManager.js} +4 -4
- package/dist/communication/BackendManager.js.map +1 -0
- package/dist/communication/InputServiceWorker.js +37 -0
- package/dist/communication/InputServiceWorker.js.map +1 -0
- package/dist/communication/InputWorker.js.map +1 -0
- package/dist/frontend/components/CodeRunner.d.ts +9 -0
- package/dist/frontend/components/CodeRunner.js +60 -0
- package/dist/frontend/components/CodeRunner.js.map +1 -0
- package/dist/frontend/components/Debugger.d.ts +7 -0
- package/dist/frontend/components/Debugger.js +62 -0
- package/dist/frontend/components/Debugger.js.map +1 -0
- package/dist/frontend/components/Input.d.ts +17 -0
- package/dist/frontend/components/Input.js +73 -0
- package/dist/frontend/components/Input.js.map +1 -0
- package/dist/frontend/components/Output.d.ts +14 -0
- package/dist/frontend/components/Output.js +154 -0
- package/dist/frontend/components/Output.js.map +1 -0
- package/dist/frontend/components/PapyrosElement.d.ts +8 -0
- package/dist/frontend/components/PapyrosElement.js +24 -0
- package/dist/frontend/components/PapyrosElement.js.map +1 -0
- package/dist/frontend/components/app/App.d.ts +24 -0
- package/dist/frontend/components/app/App.js +204 -0
- package/dist/frontend/components/app/App.js.map +1 -0
- package/dist/frontend/components/app/ExamplePicker.d.ts +7 -0
- package/dist/frontend/components/app/ExamplePicker.js +35 -0
- package/dist/frontend/components/app/ExamplePicker.js.map +1 -0
- package/dist/frontend/components/app/LanguagePicker.d.ts +7 -0
- package/dist/frontend/components/app/LanguagePicker.js +35 -0
- package/dist/frontend/components/app/LanguagePicker.js.map +1 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.d.ts +7 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.js +39 -0
- package/dist/frontend/components/app/ProgrammingLanguagePicker.js.map +1 -0
- package/dist/frontend/components/app/examples/JavaScriptExamples.js.map +1 -0
- package/dist/frontend/components/app/examples/PythonExamples.js.map +1 -0
- package/dist/frontend/components/app/themes/ThemePicker.d.ts +11 -0
- package/dist/frontend/components/app/themes/ThemePicker.js +47 -0
- package/dist/frontend/components/app/themes/ThemePicker.js.map +1 -0
- package/dist/frontend/components/app/themes/ThemedButton.d.ts +9 -0
- package/dist/frontend/components/app/themes/ThemedButton.js +43 -0
- package/dist/frontend/components/app/themes/ThemedButton.js.map +1 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.d.ts +8 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.js +54 -0
- package/dist/frontend/components/code_mirror/BatchInputEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/CodeEditor.d.ts +24 -0
- package/dist/frontend/components/code_mirror/CodeEditor.js +206 -0
- package/dist/frontend/components/code_mirror/CodeEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +20 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +99 -0
- package/dist/frontend/components/code_mirror/CodeMirrorEditor.js.map +1 -0
- package/dist/frontend/components/code_mirror/Extensions.d.ts +15 -0
- package/dist/frontend/components/code_mirror/Extensions.js +169 -0
- package/dist/frontend/components/code_mirror/Extensions.js.map +1 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.d.ts +5 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.js +109 -0
- package/dist/frontend/components/code_mirror/MaterialTheme.js.map +1 -0
- package/dist/frontend/components/code_runner/ButtonLint.d.ts +9 -0
- package/dist/frontend/components/code_runner/ButtonLint.js +76 -0
- package/dist/frontend/components/code_runner/ButtonLint.js.map +1 -0
- package/dist/frontend/components/code_runner/Code.d.ts +7 -0
- package/dist/frontend/components/code_runner/Code.js +46 -0
- package/dist/frontend/components/code_runner/Code.js.map +1 -0
- package/dist/frontend/components/code_runner/RunState.d.ts +7 -0
- package/dist/frontend/components/code_runner/RunState.js +41 -0
- package/dist/frontend/components/code_runner/RunState.js.map +1 -0
- package/dist/frontend/components/input/BatchInput.d.ts +19 -0
- package/dist/frontend/components/input/BatchInput.js +92 -0
- package/dist/frontend/components/input/BatchInput.js.map +1 -0
- package/dist/frontend/components/input/InteractiveInput.d.ts +13 -0
- package/dist/frontend/components/input/InteractiveInput.js +73 -0
- package/dist/frontend/components/input/InteractiveInput.js.map +1 -0
- package/dist/frontend/state/Constants.d.ts +38 -0
- package/dist/frontend/state/Constants.js +108 -0
- package/dist/frontend/state/Constants.js.map +1 -0
- package/dist/frontend/state/Debugger.d.ts +23 -0
- package/dist/frontend/state/Debugger.js +80 -0
- package/dist/frontend/state/Debugger.js.map +1 -0
- package/dist/frontend/state/Examples.d.ts +11 -0
- package/dist/frontend/state/Examples.js +36 -0
- package/dist/frontend/state/Examples.js.map +1 -0
- package/dist/frontend/state/I18n.d.ts +16 -0
- package/dist/frontend/state/I18n.js +75 -0
- package/dist/frontend/state/I18n.js.map +1 -0
- package/dist/frontend/state/InputOutput.d.ts +55 -0
- package/dist/frontend/state/InputOutput.js +93 -0
- package/dist/frontend/state/InputOutput.js.map +1 -0
- package/dist/frontend/state/Runner.d.ts +118 -0
- package/dist/frontend/state/Runner.js +334 -0
- package/dist/frontend/state/Runner.js.map +1 -0
- package/dist/frontend/state/Test.d.ts +11 -0
- package/dist/frontend/state/Test.js +59 -0
- package/dist/frontend/state/Test.js.map +1 -0
- package/dist/frontend/state/Translations.d.ts +178 -0
- package/dist/frontend/state/Translations.js +188 -0
- package/dist/frontend/state/Translations.js.map +1 -0
- package/dist/frontend/state/themes/blue-dark.d.ts +2 -0
- package/dist/frontend/state/themes/blue-dark.js +55 -0
- package/dist/frontend/state/themes/blue-dark.js.map +1 -0
- package/dist/frontend/state/themes/blue-light.d.ts +2 -0
- package/dist/frontend/state/themes/blue-light.js +55 -0
- package/dist/frontend/state/themes/blue-light.js.map +1 -0
- package/dist/frontend/state/themes/green-dark.d.ts +2 -0
- package/dist/frontend/state/themes/green-dark.js +55 -0
- package/dist/frontend/state/themes/green-dark.js.map +1 -0
- package/dist/frontend/state/themes/green-light.d.ts +2 -0
- package/dist/frontend/state/themes/green-light.js +55 -0
- package/dist/frontend/state/themes/green-light.js.map +1 -0
- package/dist/frontend/state/themes/red-dark.d.ts +2 -0
- package/dist/frontend/state/themes/red-dark.js +55 -0
- package/dist/frontend/state/themes/red-dark.js.map +1 -0
- package/dist/frontend/state/themes/red-light.d.ts +2 -0
- package/dist/frontend/state/themes/red-light.js +55 -0
- package/dist/frontend/state/themes/red-light.js.map +1 -0
- package/dist/util/Util.d.ts +1 -4
- package/dist/util/Util.js +7 -8
- package/dist/util/Util.js.map +1 -1
- package/package.json +13 -21
- package/dist/App.d.ts +0 -1
- package/dist/App.js +0 -76
- package/dist/App.js.map +0 -1
- package/dist/Backend.js.map +0 -1
- package/dist/BackendEvent.js.map +0 -1
- package/dist/BackendEventQueue.js.map +0 -1
- package/dist/BackendManager.js.map +0 -1
- package/dist/CodeRunner.d.ts +0 -188
- package/dist/CodeRunner.js +0 -548
- package/dist/CodeRunner.js.map +0 -1
- package/dist/Constants.d.ts +0 -31
- package/dist/Constants.js +0 -36
- package/dist/Constants.js.map +0 -1
- package/dist/Debugger.d.ts +0 -18
- package/dist/Debugger.js +0 -86
- package/dist/Debugger.js.map +0 -1
- package/dist/InputManager.d.ts +0 -38
- package/dist/InputManager.js +0 -101
- package/dist/InputManager.js.map +0 -1
- package/dist/InputServiceWorker.js.map +0 -1
- package/dist/Library.d.ts +0 -12
- package/dist/Library.js +0 -9
- package/dist/Library.js.map +0 -1
- package/dist/OutputManager.d.ts +0 -90
- package/dist/OutputManager.js +0 -172
- package/dist/OutputManager.js.map +0 -1
- package/dist/Papyros.css +0 -657
- package/dist/Translations.d.ts +0 -180
- package/dist/Translations.js +0 -191
- package/dist/Translations.js.map +0 -1
- package/dist/editor/BatchInputEditor.d.ts +0 -41
- package/dist/editor/BatchInputEditor.js +0 -80
- package/dist/editor/BatchInputEditor.js.map +0 -1
- package/dist/editor/CodeEditor.d.ts +0 -81
- package/dist/editor/CodeEditor.js +0 -213
- package/dist/editor/CodeEditor.js.map +0 -1
- package/dist/editor/CodeMirrorEditor.d.ts +0 -133
- package/dist/editor/CodeMirrorEditor.js +0 -169
- package/dist/editor/CodeMirrorEditor.js.map +0 -1
- package/dist/editor/DarkTheme.d.ts +0 -1
- package/dist/editor/DarkTheme.js +0 -72
- package/dist/editor/DarkTheme.js.map +0 -1
- package/dist/editor/DebugExtension.d.ts +0 -11
- package/dist/editor/DebugExtension.js +0 -70
- package/dist/editor/DebugExtension.js.map +0 -1
- package/dist/editor/Gutters.d.ts +0 -109
- package/dist/editor/Gutters.js +0 -201
- package/dist/editor/Gutters.js.map +0 -1
- package/dist/editor/LineEffectExtension.d.ts +0 -13
- package/dist/editor/LineEffectExtension.js +0 -48
- package/dist/editor/LineEffectExtension.js.map +0 -1
- package/dist/editor/TestCodeExtension.d.ts +0 -21
- package/dist/editor/TestCodeExtension.js +0 -134
- package/dist/editor/TestCodeExtension.js.map +0 -1
- package/dist/examples/Examples.d.ts +0 -6
- package/dist/examples/Examples.js +0 -23
- package/dist/examples/Examples.js.map +0 -1
- package/dist/examples/JavaScriptExamples.js.map +0 -1
- package/dist/examples/PythonExamples.js.map +0 -1
- package/dist/input/BatchInputHandler.d.ts +0 -55
- package/dist/input/BatchInputHandler.js +0 -131
- package/dist/input/BatchInputHandler.js.map +0 -1
- package/dist/input/InteractiveInputHandler.d.ts +0 -27
- package/dist/input/InteractiveInputHandler.js +0 -89
- package/dist/input/InteractiveInputHandler.js.map +0 -1
- package/dist/input/UserInputHandler.d.ts +0 -68
- package/dist/input/UserInputHandler.js +0 -39
- package/dist/input/UserInputHandler.js.map +0 -1
- package/dist/util/HTMLShapes.d.ts +0 -15
- package/dist/util/HTMLShapes.js +0 -25
- package/dist/util/HTMLShapes.js.map +0 -1
- package/dist/util/Rendering.d.ts +0 -120
- package/dist/util/Rendering.js +0 -142
- package/dist/util/Rendering.js.map +0 -1
- package/dist/workers/input/InputWorker.js.map +0 -1
- package/dist/workers/javascript/JavaScriptWorker.js.map +0 -1
- package/dist/workers/javascript/worker.js.map +0 -1
- package/dist/workers/python/PythonWorker.js.map +0 -1
- package/dist/workers/python/python_package.tar.gz.load_by_url +0 -0
- package/dist/workers/python/worker.js.map +0 -1
- /package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/javascript/worker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/javascript/worker.js +0 -0
- /package/dist/{workers → backend/workers}/python/worker.d.ts +0 -0
- /package/dist/{workers → backend/workers}/python/worker.js +0 -0
- /package/dist/{BackendEvent.d.ts → communication/BackendEvent.d.ts} +0 -0
- /package/dist/{BackendEvent.js → communication/BackendEvent.js} +0 -0
- /package/dist/{InputServiceWorker.d.ts → communication/InputServiceWorker.d.ts} +0 -0
- /package/dist/{workers/input → communication}/InputWorker.d.ts +0 -0
- /package/dist/{workers/input → communication}/InputWorker.js +0 -0
- /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.d.ts +0 -0
- /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.js +0 -0
- /package/dist/{examples → frontend/components/app/examples}/PythonExamples.d.ts +0 -0
- /package/dist/{examples → frontend/components/app/examples}/PythonExamples.js +0 -0
package/dist/Debugger.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Renderable, RenderOptions } from "./util/Rendering";
|
|
2
|
-
import "@dodona/trace-component";
|
|
3
|
-
export type FrameState = {
|
|
4
|
-
line: number;
|
|
5
|
-
outputs: number;
|
|
6
|
-
inputs: number;
|
|
7
|
-
};
|
|
8
|
-
export declare class Debugger extends Renderable<RenderOptions> {
|
|
9
|
-
private frameStates;
|
|
10
|
-
private currentOutputs;
|
|
11
|
-
private currentInputs;
|
|
12
|
-
private traceComponent;
|
|
13
|
-
private traceBuffer;
|
|
14
|
-
constructor();
|
|
15
|
-
protected _render(options: RenderOptions): void;
|
|
16
|
-
reset(): void;
|
|
17
|
-
clearBuffer(): void;
|
|
18
|
-
}
|
package/dist/Debugger.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Renderable, renderWithOptions } from "./util/Rendering";
|
|
2
|
-
import { getElement, t } from "./util/Util";
|
|
3
|
-
import { BackendManager } from "./BackendManager";
|
|
4
|
-
import { BackendEventType } from "./BackendEvent";
|
|
5
|
-
import "@dodona/trace-component";
|
|
6
|
-
const TRACE_COMPONENT_ID = "trace-component";
|
|
7
|
-
const EXECUTION_LIMIT = 10000;
|
|
8
|
-
function createDelayer() {
|
|
9
|
-
let timer;
|
|
10
|
-
return (callback, ms) => {
|
|
11
|
-
clearTimeout(timer);
|
|
12
|
-
timer = setTimeout(callback, ms);
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
const delay = createDelayer();
|
|
16
|
-
export class Debugger extends Renderable {
|
|
17
|
-
constructor() {
|
|
18
|
-
super();
|
|
19
|
-
this.frameStates = [];
|
|
20
|
-
this.currentOutputs = 0;
|
|
21
|
-
this.currentInputs = 0;
|
|
22
|
-
this.traceBuffer = [];
|
|
23
|
-
this.reset();
|
|
24
|
-
BackendManager.subscribe(BackendEventType.Start, () => {
|
|
25
|
-
this.reset();
|
|
26
|
-
});
|
|
27
|
-
BackendManager.subscribe(BackendEventType.Output, () => {
|
|
28
|
-
this.currentOutputs++;
|
|
29
|
-
});
|
|
30
|
-
BackendManager.subscribe(BackendEventType.Input, () => {
|
|
31
|
-
this.currentInputs++;
|
|
32
|
-
});
|
|
33
|
-
BackendManager.subscribe(BackendEventType.Frame, e => {
|
|
34
|
-
const frame = JSON.parse(e.data);
|
|
35
|
-
const frameState = {
|
|
36
|
-
line: frame.line,
|
|
37
|
-
outputs: this.currentOutputs,
|
|
38
|
-
inputs: this.currentInputs
|
|
39
|
-
};
|
|
40
|
-
this.frameStates.push(frameState);
|
|
41
|
-
this.traceBuffer.push(frame);
|
|
42
|
-
if (this.traceBuffer.length > 100) {
|
|
43
|
-
this.clearBuffer();
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
delay(() => this.clearBuffer(), 100);
|
|
47
|
-
}
|
|
48
|
-
if (this.frameStates.length >= EXECUTION_LIMIT) {
|
|
49
|
-
BackendManager.publish({
|
|
50
|
-
type: BackendEventType.Stop,
|
|
51
|
-
data: "Execution limit reached"
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
_render(options) {
|
|
57
|
-
renderWithOptions(options, `
|
|
58
|
-
<tc-trace id="${TRACE_COMPONENT_ID}"></tc-trace>
|
|
59
|
-
`);
|
|
60
|
-
this.traceComponent = getElement(TRACE_COMPONENT_ID);
|
|
61
|
-
this.traceComponent.translations = t("Papyros.debugger");
|
|
62
|
-
this.traceComponent.addEventListener("frame-change", e => {
|
|
63
|
-
const frame = e.detail.frame;
|
|
64
|
-
BackendManager.publish({
|
|
65
|
-
type: BackendEventType.FrameChange,
|
|
66
|
-
data: this.frameStates[frame]
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
reset() {
|
|
71
|
-
this.frameStates = [];
|
|
72
|
-
this.currentOutputs = 0;
|
|
73
|
-
this.currentInputs = 0;
|
|
74
|
-
if (this.traceComponent) {
|
|
75
|
-
this.traceComponent.trace = [];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
clearBuffer() {
|
|
79
|
-
var _a;
|
|
80
|
-
for (const frame of this.traceBuffer) {
|
|
81
|
-
(_a = this.traceComponent) === null || _a === void 0 ? void 0 : _a.addFrame(frame);
|
|
82
|
-
}
|
|
83
|
-
this.traceBuffer = [];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=Debugger.js.map
|
package/dist/Debugger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Debugger.js","sourceRoot":"","sources":["../src/Debugger.ts"],"names":[],"mappings":"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"}
|
package/dist/InputManager.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { UserInputHandler } from "./input/UserInputHandler";
|
|
2
|
-
import { Renderable, RenderOptions } from "./util/Rendering";
|
|
3
|
-
import { EditorStyling } from "./editor/CodeMirrorEditor";
|
|
4
|
-
export declare enum InputMode {
|
|
5
|
-
Interactive = "interactive",
|
|
6
|
-
Batch = "batch"
|
|
7
|
-
}
|
|
8
|
-
export declare const INPUT_MODES: InputMode[];
|
|
9
|
-
export interface InputManagerRenderOptions extends RenderOptions {
|
|
10
|
-
/**
|
|
11
|
-
* Option to allow styling the editor area of the input handler
|
|
12
|
-
*/
|
|
13
|
-
inputStyling?: Partial<EditorStyling>;
|
|
14
|
-
}
|
|
15
|
-
export declare class InputManager extends Renderable<InputManagerRenderOptions> {
|
|
16
|
-
private inputMode;
|
|
17
|
-
private inputHandlers;
|
|
18
|
-
private waiting;
|
|
19
|
-
private prompt;
|
|
20
|
-
private sendInput;
|
|
21
|
-
constructor(sendInput: (input: string) => void, inputMode: InputMode);
|
|
22
|
-
private buildInputHandlerMap;
|
|
23
|
-
getInputMode(): InputMode;
|
|
24
|
-
setInputMode(inputMode: InputMode): void;
|
|
25
|
-
getInputHandler(inputMode: InputMode): UserInputHandler;
|
|
26
|
-
get inputHandler(): UserInputHandler;
|
|
27
|
-
isWaiting(): boolean;
|
|
28
|
-
protected _render(options: InputManagerRenderOptions): void;
|
|
29
|
-
private waitWithPrompt;
|
|
30
|
-
private onUserInput;
|
|
31
|
-
/**
|
|
32
|
-
* Asynchronously handle an input request by prompting the user for input
|
|
33
|
-
* @param {BackendEvent} e Event containing the input data
|
|
34
|
-
*/
|
|
35
|
-
private onInputRequest;
|
|
36
|
-
private onRunStart;
|
|
37
|
-
private onRunEnd;
|
|
38
|
-
}
|
package/dist/InputManager.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { SWITCH_INPUT_MODE_A_ID, USER_INPUT_WRAPPER_ID } from "./Constants";
|
|
2
|
-
import { BackendEventType } from "./BackendEvent";
|
|
3
|
-
import { addListener, getElement, t } from "./util/Util";
|
|
4
|
-
import { InteractiveInputHandler } from "./input/InteractiveInputHandler";
|
|
5
|
-
import { BatchInputHandler } from "./input/BatchInputHandler";
|
|
6
|
-
import { BackendManager } from "./BackendManager";
|
|
7
|
-
import { Renderable, renderWithOptions } from "./util/Rendering";
|
|
8
|
-
export var InputMode;
|
|
9
|
-
(function (InputMode) {
|
|
10
|
-
InputMode["Interactive"] = "interactive";
|
|
11
|
-
InputMode["Batch"] = "batch";
|
|
12
|
-
})(InputMode || (InputMode = {}));
|
|
13
|
-
export const INPUT_MODES = [InputMode.Batch, InputMode.Interactive];
|
|
14
|
-
export class InputManager extends Renderable {
|
|
15
|
-
constructor(sendInput, inputMode) {
|
|
16
|
-
super();
|
|
17
|
-
this.onUserInput = this.onUserInput.bind(this);
|
|
18
|
-
this.inputHandlers = this.buildInputHandlerMap();
|
|
19
|
-
this.inputMode = inputMode;
|
|
20
|
-
this.sendInput = sendInput;
|
|
21
|
-
this.waiting = false;
|
|
22
|
-
this.prompt = "";
|
|
23
|
-
BackendManager.subscribe(BackendEventType.Start, () => this.onRunStart());
|
|
24
|
-
BackendManager.subscribe(BackendEventType.End, () => this.onRunEnd());
|
|
25
|
-
BackendManager.subscribe(BackendEventType.Input, e => this.onInputRequest(e));
|
|
26
|
-
}
|
|
27
|
-
buildInputHandlerMap() {
|
|
28
|
-
const interactiveInputHandler = new InteractiveInputHandler(this.onUserInput);
|
|
29
|
-
const batchInputHandler = new BatchInputHandler(this.onUserInput);
|
|
30
|
-
return new Map([
|
|
31
|
-
[InputMode.Interactive, interactiveInputHandler],
|
|
32
|
-
[InputMode.Batch, batchInputHandler]
|
|
33
|
-
]);
|
|
34
|
-
}
|
|
35
|
-
getInputMode() {
|
|
36
|
-
return this.inputMode;
|
|
37
|
-
}
|
|
38
|
-
setInputMode(inputMode) {
|
|
39
|
-
this.inputHandler.toggle(false);
|
|
40
|
-
this.inputMode = inputMode;
|
|
41
|
-
this.render();
|
|
42
|
-
this.inputHandler.toggle(true);
|
|
43
|
-
}
|
|
44
|
-
getInputHandler(inputMode) {
|
|
45
|
-
return this.inputHandlers.get(inputMode);
|
|
46
|
-
}
|
|
47
|
-
get inputHandler() {
|
|
48
|
-
return this.getInputHandler(this.inputMode);
|
|
49
|
-
}
|
|
50
|
-
isWaiting() {
|
|
51
|
-
return this.waiting;
|
|
52
|
-
}
|
|
53
|
-
_render(options) {
|
|
54
|
-
let switchMode = "";
|
|
55
|
-
const otherMode = this.inputMode === InputMode.Interactive ?
|
|
56
|
-
InputMode.Batch : InputMode.Interactive;
|
|
57
|
-
switchMode = `<a id="${SWITCH_INPUT_MODE_A_ID}" data-value="${otherMode}"
|
|
58
|
-
class="_tw-flex _tw-flex-row-reverse hover:_tw-cursor-pointer _tw-text-blue-500">
|
|
59
|
-
${t(`Papyros.switch_input_mode_to.${otherMode}`)}
|
|
60
|
-
</a>`;
|
|
61
|
-
renderWithOptions(options, `
|
|
62
|
-
<div id="${USER_INPUT_WRAPPER_ID}" class="_tw-my-1">
|
|
63
|
-
</div>
|
|
64
|
-
${switchMode}`);
|
|
65
|
-
addListener(SWITCH_INPUT_MODE_A_ID, im => this.setInputMode(im), "click", "data-value");
|
|
66
|
-
this.inputHandler.render({
|
|
67
|
-
parentElementId: USER_INPUT_WRAPPER_ID,
|
|
68
|
-
darkMode: options.darkMode,
|
|
69
|
-
inputStyling: options.inputStyling
|
|
70
|
-
});
|
|
71
|
-
this.inputHandler.waitWithPrompt(this.waiting, this.prompt);
|
|
72
|
-
}
|
|
73
|
-
waitWithPrompt(waiting, prompt = "") {
|
|
74
|
-
this.waiting = waiting;
|
|
75
|
-
this.prompt = prompt;
|
|
76
|
-
this.inputHandler.waitWithPrompt(this.waiting, this.prompt);
|
|
77
|
-
}
|
|
78
|
-
onUserInput(line) {
|
|
79
|
-
this.sendInput(line);
|
|
80
|
-
this.waitWithPrompt(false);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Asynchronously handle an input request by prompting the user for input
|
|
84
|
-
* @param {BackendEvent} e Event containing the input data
|
|
85
|
-
*/
|
|
86
|
-
onInputRequest(e) {
|
|
87
|
-
this.waitWithPrompt(true, e.data);
|
|
88
|
-
}
|
|
89
|
-
onRunStart() {
|
|
90
|
-
// Prevent switching input mode during runs
|
|
91
|
-
getElement(SWITCH_INPUT_MODE_A_ID).hidden = true;
|
|
92
|
-
this.waitWithPrompt(false);
|
|
93
|
-
this.inputHandler.onRunStart();
|
|
94
|
-
}
|
|
95
|
-
onRunEnd() {
|
|
96
|
-
getElement(SWITCH_INPUT_MODE_A_ID).hidden = false;
|
|
97
|
-
this.inputHandler.onRunEnd();
|
|
98
|
-
this.waitWithPrompt(false);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=InputManager.js.map
|
package/dist/InputManager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InputManager.js","sourceRoot":"","sources":["../src/InputManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InputServiceWorker.js","sourceRoot":"","sources":["../src/InputServiceWorker.ts"],"names":[],"mappings":";;;;;;;;;AAAA;;GAEG;AACH,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,4DAA4D;AAC5D,8BAA8B;AAC9B,yDAAyD;AACzD,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,+DAA+D;AAClF,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AAE7C,gBAAgB,CAAC,OAAO,EAAE,UAAgB,KAAiB;;QACvD,IAAI,CAAC,CAAA,MAAM,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;YAChD,iCAAiC;YACjC,4CAA4C;YAC5C,oEAAoE;YACpE,OAAO;QACX,CAAC;IACL,CAAC;CAAA,CAAC,CAAC;AACH,uDAAuD;AACvD,gBAAgB,CAAC,SAAS,EAAE,UAAU,KAAsB;IACxD,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,KAAsB;IACzD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC"}
|
package/dist/Library.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { BackendEvent } from "./BackendEvent";
|
|
2
|
-
import { CodeEditor } from "./editor/CodeEditor";
|
|
3
|
-
import { InputManager, InputMode } from "./InputManager";
|
|
4
|
-
import { FriendlyError, OutputManager } from "./OutputManager";
|
|
5
|
-
import { Papyros, PapyrosConfig, PapyrosRenderOptions } from "./Papyros";
|
|
6
|
-
import { CodeRunner, RunState } from "./CodeRunner";
|
|
7
|
-
import { BackendManager } from "./BackendManager";
|
|
8
|
-
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
9
|
-
import { WorkerDiagnostic } from "./Backend";
|
|
10
|
-
import { ButtonOptions, RenderOptions } from "./util/Rendering";
|
|
11
|
-
export type { BackendEvent, FriendlyError, WorkerDiagnostic, PapyrosConfig, PapyrosRenderOptions, RenderOptions, ButtonOptions };
|
|
12
|
-
export { Papyros, ProgrammingLanguage, BackendManager, CodeEditor, CodeRunner, RunState, InputManager, InputMode, OutputManager };
|
package/dist/Library.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { CodeEditor } from "./editor/CodeEditor";
|
|
2
|
-
import { InputManager, InputMode } from "./InputManager";
|
|
3
|
-
import { OutputManager } from "./OutputManager";
|
|
4
|
-
import { Papyros } from "./Papyros";
|
|
5
|
-
import { CodeRunner, RunState } from "./CodeRunner";
|
|
6
|
-
import { BackendManager } from "./BackendManager";
|
|
7
|
-
import { ProgrammingLanguage } from "./ProgrammingLanguage";
|
|
8
|
-
export { Papyros, ProgrammingLanguage, BackendManager, CodeEditor, CodeRunner, RunState, InputManager, InputMode, OutputManager };
|
|
9
|
-
//# sourceMappingURL=Library.js.map
|
package/dist/Library.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Library.js","sourceRoot":"","sources":["../src/Library.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAuC,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAU5D,OAAO,EACH,OAAO,EACP,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,aAAa,EAChB,CAAC"}
|
package/dist/OutputManager.d.ts
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { BackendEvent } from "./BackendEvent";
|
|
2
|
-
import { Renderable, RenderOptions } from "./util/Rendering";
|
|
3
|
-
/**
|
|
4
|
-
* Shape of Error objects that are easy to interpret
|
|
5
|
-
*/
|
|
6
|
-
export interface FriendlyError {
|
|
7
|
-
/**
|
|
8
|
-
* The name of the Error
|
|
9
|
-
*/
|
|
10
|
-
name: string;
|
|
11
|
-
/**
|
|
12
|
-
* Traceback for where in the code the Error occurred
|
|
13
|
-
*/
|
|
14
|
-
traceback?: string;
|
|
15
|
-
/**
|
|
16
|
-
* General information about this type of Error
|
|
17
|
-
*/
|
|
18
|
-
info?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Information about what went wrong in this case
|
|
21
|
-
*/
|
|
22
|
-
what?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Information about why this is wrong and how to fix it
|
|
25
|
-
*/
|
|
26
|
-
why?: string;
|
|
27
|
-
/**
|
|
28
|
-
* Where specifically in the source code the Error occurred
|
|
29
|
-
*/
|
|
30
|
-
where?: string;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Component for displaying code output or errors to the user
|
|
34
|
-
*/
|
|
35
|
-
export declare class OutputManager extends Renderable {
|
|
36
|
-
/**
|
|
37
|
-
* Store the HTML that is rendered to restore when changing language/theme
|
|
38
|
-
*/
|
|
39
|
-
private content;
|
|
40
|
-
/**
|
|
41
|
-
* Whether overflow has occurred
|
|
42
|
-
*/
|
|
43
|
-
private overflown;
|
|
44
|
-
/**
|
|
45
|
-
* Function to call when the user wants to download overflow results
|
|
46
|
-
*/
|
|
47
|
-
private downloadCallback;
|
|
48
|
-
private _debugMode;
|
|
49
|
-
set debugMode(value: boolean);
|
|
50
|
-
constructor();
|
|
51
|
-
/**
|
|
52
|
-
* Retrieve the parent element containing all output parts
|
|
53
|
-
*/
|
|
54
|
-
private get outputArea();
|
|
55
|
-
/**
|
|
56
|
-
* Render an element in the next position of the output area
|
|
57
|
-
* @param {string} html Safe string version of the next child to render
|
|
58
|
-
* @param {boolean} isNewElement Whether this a newly generated element
|
|
59
|
-
*/
|
|
60
|
-
private renderNextElement;
|
|
61
|
-
/**
|
|
62
|
-
* Convert a piece of text to a span element for displaying
|
|
63
|
-
* @param {string} text The text content for the span
|
|
64
|
-
* @param {boolean} ignoreEmpty Whether to remove empty lines in the text
|
|
65
|
-
* @param {string} className Optional class name for the span
|
|
66
|
-
* @return {string} String version of the created span
|
|
67
|
-
*/
|
|
68
|
-
private spanify;
|
|
69
|
-
/**
|
|
70
|
-
* Display output to the user, based on its content type
|
|
71
|
-
* @param {BackendEvent} output Event containing the output data
|
|
72
|
-
*/
|
|
73
|
-
showOutput(output: BackendEvent): void;
|
|
74
|
-
/**
|
|
75
|
-
* Display to the user that overflow has occurred, limiting the shown output
|
|
76
|
-
* @param {function():void | null} downloadCallback Optional callback to download overflow
|
|
77
|
-
*/
|
|
78
|
-
onOverflow(downloadCallback: (() => void) | null): void;
|
|
79
|
-
/**
|
|
80
|
-
* Display an error to the user
|
|
81
|
-
* @param {BackendEvent} error Event containing the error data
|
|
82
|
-
*/
|
|
83
|
-
showError(error: BackendEvent): void;
|
|
84
|
-
protected _render(options: RenderOptions): void;
|
|
85
|
-
/**
|
|
86
|
-
* Clear the contents of the output area
|
|
87
|
-
*/
|
|
88
|
-
reset(): void;
|
|
89
|
-
private onRunEnd;
|
|
90
|
-
}
|
package/dist/OutputManager.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import escapeHTML from "escape-html";
|
|
2
|
-
import { BackendEventType } from "./BackendEvent";
|
|
3
|
-
import { BackendManager } from "./BackendManager";
|
|
4
|
-
import { renderInCircle } from "./util/HTMLShapes";
|
|
5
|
-
import { getElement, parseData, t } from "./util/Util";
|
|
6
|
-
import { LogType, papyrosLog } from "./util/Logging";
|
|
7
|
-
import { Renderable, renderWithOptions } from "./util/Rendering";
|
|
8
|
-
import { OUTPUT_AREA_ID, OUTPUT_OVERFLOW_ID } from "./Constants";
|
|
9
|
-
/**
|
|
10
|
-
* Component for displaying code output or errors to the user
|
|
11
|
-
*/
|
|
12
|
-
export class OutputManager extends Renderable {
|
|
13
|
-
set debugMode(value) {
|
|
14
|
-
this.outputArea.classList.toggle("papyros-debug", value);
|
|
15
|
-
this._debugMode = value;
|
|
16
|
-
}
|
|
17
|
-
constructor() {
|
|
18
|
-
super();
|
|
19
|
-
this._debugMode = false;
|
|
20
|
-
this.content = [];
|
|
21
|
-
this.overflown = false;
|
|
22
|
-
this.downloadCallback = null;
|
|
23
|
-
BackendManager.subscribe(BackendEventType.Start, () => this.reset());
|
|
24
|
-
BackendManager.subscribe(BackendEventType.Output, e => this.showOutput(e));
|
|
25
|
-
BackendManager.subscribe(BackendEventType.Error, e => this.showError(e));
|
|
26
|
-
BackendManager.subscribe(BackendEventType.End, () => this.onRunEnd());
|
|
27
|
-
BackendManager.subscribe(BackendEventType.FrameChange, e => {
|
|
28
|
-
const outputsToHighlight = e.data.outputs;
|
|
29
|
-
const outputElements = this.outputArea.children;
|
|
30
|
-
for (let i = 0; i < outputElements.length; i++) {
|
|
31
|
-
const outputElement = outputElements[i];
|
|
32
|
-
outputElement.classList.toggle("papyros-highlight-debugged", i < outputsToHighlight);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Retrieve the parent element containing all output parts
|
|
38
|
-
*/
|
|
39
|
-
get outputArea() {
|
|
40
|
-
return getElement(OUTPUT_AREA_ID);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Render an element in the next position of the output area
|
|
44
|
-
* @param {string} html Safe string version of the next child to render
|
|
45
|
-
* @param {boolean} isNewElement Whether this a newly generated element
|
|
46
|
-
*/
|
|
47
|
-
renderNextElement(html, isNewElement = true) {
|
|
48
|
-
if (isNewElement) { // Only save new ones to prevent duplicating
|
|
49
|
-
this.content.push(html);
|
|
50
|
-
}
|
|
51
|
-
this.outputArea.insertAdjacentHTML("beforeend", html);
|
|
52
|
-
// Ensure overflowElement is at the bottom
|
|
53
|
-
const overflowElement = document.getElementById(OUTPUT_OVERFLOW_ID);
|
|
54
|
-
if (overflowElement) {
|
|
55
|
-
this.outputArea.append(overflowElement);
|
|
56
|
-
}
|
|
57
|
-
// Scroll to bottom to show latest output
|
|
58
|
-
this.outputArea.scrollTop = this.outputArea.scrollHeight;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Convert a piece of text to a span element for displaying
|
|
62
|
-
* @param {string} text The text content for the span
|
|
63
|
-
* @param {boolean} ignoreEmpty Whether to remove empty lines in the text
|
|
64
|
-
* @param {string} className Optional class name for the span
|
|
65
|
-
* @return {string} String version of the created span
|
|
66
|
-
*/
|
|
67
|
-
spanify(text, ignoreEmpty = false, className = "") {
|
|
68
|
-
let spanText = text;
|
|
69
|
-
if (spanText.includes("\n") && spanText !== "\n") {
|
|
70
|
-
spanText = spanText.split("\n")
|
|
71
|
-
.filter(line => !ignoreEmpty || line.trim().length > 0)
|
|
72
|
-
.join("\n");
|
|
73
|
-
}
|
|
74
|
-
return `<span class="${className}">${escapeHTML(spanText)}</span>`;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Display output to the user, based on its content type
|
|
78
|
-
* @param {BackendEvent} output Event containing the output data
|
|
79
|
-
*/
|
|
80
|
-
showOutput(output) {
|
|
81
|
-
const data = parseData(output.data, output.contentType);
|
|
82
|
-
if (output.contentType && output.contentType.startsWith("img")) {
|
|
83
|
-
this.renderNextElement(`<img src="data:${output.contentType}, ${data}"></img>`);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.renderNextElement(this.spanify(data, false));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Display to the user that overflow has occurred, limiting the shown output
|
|
91
|
-
* @param {function():void | null} downloadCallback Optional callback to download overflow
|
|
92
|
-
*/
|
|
93
|
-
onOverflow(downloadCallback) {
|
|
94
|
-
this.overflown = true;
|
|
95
|
-
this.downloadCallback = downloadCallback;
|
|
96
|
-
if (document.getElementById(OUTPUT_OVERFLOW_ID) == null) {
|
|
97
|
-
this.renderNextElement(`
|
|
98
|
-
<div id=${OUTPUT_OVERFLOW_ID}><span class="_tw-text-red-500
|
|
99
|
-
_tw-text-bold">${t("Papyros.output_overflow")}</span>
|
|
100
|
-
<a class="hover:_tw-cursor-pointer _tw-text-blue-500"
|
|
101
|
-
hidden>${t("Papyros.output_overflow_download")}</a>
|
|
102
|
-
</div>`, false);
|
|
103
|
-
}
|
|
104
|
-
const overflowDiv = getElement(OUTPUT_OVERFLOW_ID);
|
|
105
|
-
if (this.downloadCallback !== null) {
|
|
106
|
-
const overflowLink = overflowDiv.lastElementChild;
|
|
107
|
-
overflowLink.hidden = false;
|
|
108
|
-
overflowLink.addEventListener("click", this.downloadCallback);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Display an error to the user
|
|
113
|
-
* @param {BackendEvent} error Event containing the error data
|
|
114
|
-
*/
|
|
115
|
-
showError(error) {
|
|
116
|
-
let errorHTML = "";
|
|
117
|
-
const errorData = parseData(error.data, error.contentType);
|
|
118
|
-
papyrosLog(LogType.Debug, "Showing error: ", errorData);
|
|
119
|
-
if (typeof (errorData) === "string") {
|
|
120
|
-
errorHTML = this.spanify(errorData, false, "_tw-text-red-500");
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
const errorObject = errorData;
|
|
124
|
-
let shortTraceback = (errorObject.where || "").trim();
|
|
125
|
-
// Prepend a bit of indentation, so every part has indentation
|
|
126
|
-
if (shortTraceback) {
|
|
127
|
-
shortTraceback = this.spanify(" " + shortTraceback, true, "where");
|
|
128
|
-
}
|
|
129
|
-
errorHTML += "<div class=\"_tw-text-red-500 _tw-text-bold\">";
|
|
130
|
-
const infoQM = renderInCircle("?", escapeHTML(errorObject.info), "_tw-text-blue-500 _tw-border-blue-500 dark:_tw-text-dark-mode-blue dark:_tw-border-dark-mode-blue");
|
|
131
|
-
const tracebackEM = renderInCircle("!", escapeHTML(errorObject.traceback), "_tw-text-red-500 _tw-border-red-500");
|
|
132
|
-
errorHTML += `${infoQM}${errorObject.name} traceback:${tracebackEM}\n`;
|
|
133
|
-
errorHTML += shortTraceback;
|
|
134
|
-
errorHTML += "</div>\n";
|
|
135
|
-
if (errorObject.what) {
|
|
136
|
-
errorHTML += this.spanify(errorObject.what.trim(), true, "what") + "\n";
|
|
137
|
-
}
|
|
138
|
-
if (errorObject.why) {
|
|
139
|
-
errorHTML += this.spanify(errorObject.why.trim(), true, "why") + "\n";
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
this.renderNextElement(errorHTML);
|
|
143
|
-
}
|
|
144
|
-
_render(options) {
|
|
145
|
-
renderWithOptions(options, `
|
|
146
|
-
<div id=${OUTPUT_AREA_ID} class="_tw-border-2 _tw-w-full _tw-min-h-1/4
|
|
147
|
-
_tw-max-h-3/5 _tw-overflow-auto papyros-font-family
|
|
148
|
-
_tw-py-1 _tw-px-2 _tw-whitespace-pre _tw-rounded-lg dark:_tw-border-dark-mode-content
|
|
149
|
-
with-placeholder ${this._debugMode ? "papyros-debug" : ""}" data-placeholder="${t("Papyros.output_placeholder")}"></div>
|
|
150
|
-
`);
|
|
151
|
-
// Restore previously rendered items
|
|
152
|
-
this.content.forEach(html => this.renderNextElement(html, false));
|
|
153
|
-
if (this.overflown) {
|
|
154
|
-
this.onOverflow(this.downloadCallback);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Clear the contents of the output area
|
|
159
|
-
*/
|
|
160
|
-
reset() {
|
|
161
|
-
this.content = [];
|
|
162
|
-
this.overflown = false;
|
|
163
|
-
this.downloadCallback = null;
|
|
164
|
-
this.render();
|
|
165
|
-
}
|
|
166
|
-
onRunEnd() {
|
|
167
|
-
if (this.outputArea.childElementCount === 0) {
|
|
168
|
-
this.outputArea.setAttribute("data-placeholder", t("Papyros.no_output"));
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=OutputManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OutputManager.js","sourceRoot":"","sources":["../src/OutputManager.ts"],"names":[],"mappings":"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"}
|