@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.
Files changed (233) hide show
  1. package/README.md +133 -72
  2. package/dist/Components.d.ts +4 -0
  3. package/dist/Components.js +5 -0
  4. package/dist/Components.js.map +1 -0
  5. package/dist/Papyros.d.ts +18 -127
  6. package/dist/Papyros.js +39 -211
  7. package/dist/Papyros.js.map +1 -1
  8. package/dist/{Backend.d.ts → backend/Backend.d.ts} +3 -12
  9. package/dist/{Backend.js → backend/Backend.js} +4 -17
  10. package/dist/backend/Backend.js.map +1 -0
  11. package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.js +1 -1
  12. package/dist/backend/workers/javascript/JavaScriptWorker.js.map +1 -0
  13. package/dist/backend/workers/javascript/worker.js.map +1 -0
  14. package/dist/{workers → backend/workers}/python/PythonWorker.d.ts +2 -2
  15. package/dist/{workers → backend/workers}/python/PythonWorker.js +2 -2
  16. package/dist/backend/workers/python/PythonWorker.js.map +1 -0
  17. package/dist/backend/workers/python/python_package.tar.gz.load_by_url +0 -0
  18. package/dist/backend/workers/python/worker.js.map +1 -0
  19. package/dist/communication/BackendEvent.js.map +1 -0
  20. package/dist/{BackendEventQueue.d.ts → communication/BackendEventQueue.d.ts} +1 -36
  21. package/dist/{BackendEventQueue.js → communication/BackendEventQueue.js} +2 -45
  22. package/dist/communication/BackendEventQueue.js.map +1 -0
  23. package/dist/{BackendManager.d.ts → communication/BackendManager.d.ts} +2 -2
  24. package/dist/{BackendManager.js → communication/BackendManager.js} +4 -4
  25. package/dist/communication/BackendManager.js.map +1 -0
  26. package/dist/communication/InputServiceWorker.js +37 -0
  27. package/dist/communication/InputServiceWorker.js.map +1 -0
  28. package/dist/communication/InputWorker.js.map +1 -0
  29. package/dist/frontend/components/CodeRunner.d.ts +9 -0
  30. package/dist/frontend/components/CodeRunner.js +60 -0
  31. package/dist/frontend/components/CodeRunner.js.map +1 -0
  32. package/dist/frontend/components/Debugger.d.ts +7 -0
  33. package/dist/frontend/components/Debugger.js +62 -0
  34. package/dist/frontend/components/Debugger.js.map +1 -0
  35. package/dist/frontend/components/Input.d.ts +17 -0
  36. package/dist/frontend/components/Input.js +73 -0
  37. package/dist/frontend/components/Input.js.map +1 -0
  38. package/dist/frontend/components/Output.d.ts +14 -0
  39. package/dist/frontend/components/Output.js +154 -0
  40. package/dist/frontend/components/Output.js.map +1 -0
  41. package/dist/frontend/components/PapyrosElement.d.ts +8 -0
  42. package/dist/frontend/components/PapyrosElement.js +24 -0
  43. package/dist/frontend/components/PapyrosElement.js.map +1 -0
  44. package/dist/frontend/components/app/App.d.ts +24 -0
  45. package/dist/frontend/components/app/App.js +204 -0
  46. package/dist/frontend/components/app/App.js.map +1 -0
  47. package/dist/frontend/components/app/ExamplePicker.d.ts +7 -0
  48. package/dist/frontend/components/app/ExamplePicker.js +35 -0
  49. package/dist/frontend/components/app/ExamplePicker.js.map +1 -0
  50. package/dist/frontend/components/app/LanguagePicker.d.ts +7 -0
  51. package/dist/frontend/components/app/LanguagePicker.js +35 -0
  52. package/dist/frontend/components/app/LanguagePicker.js.map +1 -0
  53. package/dist/frontend/components/app/ProgrammingLanguagePicker.d.ts +7 -0
  54. package/dist/frontend/components/app/ProgrammingLanguagePicker.js +39 -0
  55. package/dist/frontend/components/app/ProgrammingLanguagePicker.js.map +1 -0
  56. package/dist/frontend/components/app/examples/JavaScriptExamples.js.map +1 -0
  57. package/dist/frontend/components/app/examples/PythonExamples.js.map +1 -0
  58. package/dist/frontend/components/app/themes/ThemePicker.d.ts +11 -0
  59. package/dist/frontend/components/app/themes/ThemePicker.js +47 -0
  60. package/dist/frontend/components/app/themes/ThemePicker.js.map +1 -0
  61. package/dist/frontend/components/app/themes/ThemedButton.d.ts +9 -0
  62. package/dist/frontend/components/app/themes/ThemedButton.js +43 -0
  63. package/dist/frontend/components/app/themes/ThemedButton.js.map +1 -0
  64. package/dist/frontend/components/code_mirror/BatchInputEditor.d.ts +8 -0
  65. package/dist/frontend/components/code_mirror/BatchInputEditor.js +54 -0
  66. package/dist/frontend/components/code_mirror/BatchInputEditor.js.map +1 -0
  67. package/dist/frontend/components/code_mirror/CodeEditor.d.ts +24 -0
  68. package/dist/frontend/components/code_mirror/CodeEditor.js +206 -0
  69. package/dist/frontend/components/code_mirror/CodeEditor.js.map +1 -0
  70. package/dist/frontend/components/code_mirror/CodeMirrorEditor.d.ts +20 -0
  71. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js +99 -0
  72. package/dist/frontend/components/code_mirror/CodeMirrorEditor.js.map +1 -0
  73. package/dist/frontend/components/code_mirror/Extensions.d.ts +15 -0
  74. package/dist/frontend/components/code_mirror/Extensions.js +169 -0
  75. package/dist/frontend/components/code_mirror/Extensions.js.map +1 -0
  76. package/dist/frontend/components/code_mirror/MaterialTheme.d.ts +5 -0
  77. package/dist/frontend/components/code_mirror/MaterialTheme.js +109 -0
  78. package/dist/frontend/components/code_mirror/MaterialTheme.js.map +1 -0
  79. package/dist/frontend/components/code_runner/ButtonLint.d.ts +9 -0
  80. package/dist/frontend/components/code_runner/ButtonLint.js +76 -0
  81. package/dist/frontend/components/code_runner/ButtonLint.js.map +1 -0
  82. package/dist/frontend/components/code_runner/Code.d.ts +7 -0
  83. package/dist/frontend/components/code_runner/Code.js +46 -0
  84. package/dist/frontend/components/code_runner/Code.js.map +1 -0
  85. package/dist/frontend/components/code_runner/RunState.d.ts +7 -0
  86. package/dist/frontend/components/code_runner/RunState.js +41 -0
  87. package/dist/frontend/components/code_runner/RunState.js.map +1 -0
  88. package/dist/frontend/components/input/BatchInput.d.ts +19 -0
  89. package/dist/frontend/components/input/BatchInput.js +92 -0
  90. package/dist/frontend/components/input/BatchInput.js.map +1 -0
  91. package/dist/frontend/components/input/InteractiveInput.d.ts +13 -0
  92. package/dist/frontend/components/input/InteractiveInput.js +73 -0
  93. package/dist/frontend/components/input/InteractiveInput.js.map +1 -0
  94. package/dist/frontend/state/Constants.d.ts +38 -0
  95. package/dist/frontend/state/Constants.js +108 -0
  96. package/dist/frontend/state/Constants.js.map +1 -0
  97. package/dist/frontend/state/Debugger.d.ts +23 -0
  98. package/dist/frontend/state/Debugger.js +80 -0
  99. package/dist/frontend/state/Debugger.js.map +1 -0
  100. package/dist/frontend/state/Examples.d.ts +11 -0
  101. package/dist/frontend/state/Examples.js +36 -0
  102. package/dist/frontend/state/Examples.js.map +1 -0
  103. package/dist/frontend/state/I18n.d.ts +16 -0
  104. package/dist/frontend/state/I18n.js +75 -0
  105. package/dist/frontend/state/I18n.js.map +1 -0
  106. package/dist/frontend/state/InputOutput.d.ts +55 -0
  107. package/dist/frontend/state/InputOutput.js +93 -0
  108. package/dist/frontend/state/InputOutput.js.map +1 -0
  109. package/dist/frontend/state/Runner.d.ts +118 -0
  110. package/dist/frontend/state/Runner.js +334 -0
  111. package/dist/frontend/state/Runner.js.map +1 -0
  112. package/dist/frontend/state/Test.d.ts +11 -0
  113. package/dist/frontend/state/Test.js +59 -0
  114. package/dist/frontend/state/Test.js.map +1 -0
  115. package/dist/frontend/state/Translations.d.ts +178 -0
  116. package/dist/frontend/state/Translations.js +188 -0
  117. package/dist/frontend/state/Translations.js.map +1 -0
  118. package/dist/frontend/state/themes/blue-dark.d.ts +2 -0
  119. package/dist/frontend/state/themes/blue-dark.js +55 -0
  120. package/dist/frontend/state/themes/blue-dark.js.map +1 -0
  121. package/dist/frontend/state/themes/blue-light.d.ts +2 -0
  122. package/dist/frontend/state/themes/blue-light.js +55 -0
  123. package/dist/frontend/state/themes/blue-light.js.map +1 -0
  124. package/dist/frontend/state/themes/green-dark.d.ts +2 -0
  125. package/dist/frontend/state/themes/green-dark.js +55 -0
  126. package/dist/frontend/state/themes/green-dark.js.map +1 -0
  127. package/dist/frontend/state/themes/green-light.d.ts +2 -0
  128. package/dist/frontend/state/themes/green-light.js +55 -0
  129. package/dist/frontend/state/themes/green-light.js.map +1 -0
  130. package/dist/frontend/state/themes/red-dark.d.ts +2 -0
  131. package/dist/frontend/state/themes/red-dark.js +55 -0
  132. package/dist/frontend/state/themes/red-dark.js.map +1 -0
  133. package/dist/frontend/state/themes/red-light.d.ts +2 -0
  134. package/dist/frontend/state/themes/red-light.js +55 -0
  135. package/dist/frontend/state/themes/red-light.js.map +1 -0
  136. package/dist/util/Util.d.ts +1 -4
  137. package/dist/util/Util.js +7 -8
  138. package/dist/util/Util.js.map +1 -1
  139. package/package.json +13 -21
  140. package/dist/App.d.ts +0 -1
  141. package/dist/App.js +0 -76
  142. package/dist/App.js.map +0 -1
  143. package/dist/Backend.js.map +0 -1
  144. package/dist/BackendEvent.js.map +0 -1
  145. package/dist/BackendEventQueue.js.map +0 -1
  146. package/dist/BackendManager.js.map +0 -1
  147. package/dist/CodeRunner.d.ts +0 -188
  148. package/dist/CodeRunner.js +0 -548
  149. package/dist/CodeRunner.js.map +0 -1
  150. package/dist/Constants.d.ts +0 -31
  151. package/dist/Constants.js +0 -36
  152. package/dist/Constants.js.map +0 -1
  153. package/dist/Debugger.d.ts +0 -18
  154. package/dist/Debugger.js +0 -86
  155. package/dist/Debugger.js.map +0 -1
  156. package/dist/InputManager.d.ts +0 -38
  157. package/dist/InputManager.js +0 -101
  158. package/dist/InputManager.js.map +0 -1
  159. package/dist/InputServiceWorker.js.map +0 -1
  160. package/dist/Library.d.ts +0 -12
  161. package/dist/Library.js +0 -9
  162. package/dist/Library.js.map +0 -1
  163. package/dist/OutputManager.d.ts +0 -90
  164. package/dist/OutputManager.js +0 -172
  165. package/dist/OutputManager.js.map +0 -1
  166. package/dist/Papyros.css +0 -657
  167. package/dist/Translations.d.ts +0 -180
  168. package/dist/Translations.js +0 -191
  169. package/dist/Translations.js.map +0 -1
  170. package/dist/editor/BatchInputEditor.d.ts +0 -41
  171. package/dist/editor/BatchInputEditor.js +0 -80
  172. package/dist/editor/BatchInputEditor.js.map +0 -1
  173. package/dist/editor/CodeEditor.d.ts +0 -81
  174. package/dist/editor/CodeEditor.js +0 -213
  175. package/dist/editor/CodeEditor.js.map +0 -1
  176. package/dist/editor/CodeMirrorEditor.d.ts +0 -133
  177. package/dist/editor/CodeMirrorEditor.js +0 -169
  178. package/dist/editor/CodeMirrorEditor.js.map +0 -1
  179. package/dist/editor/DarkTheme.d.ts +0 -1
  180. package/dist/editor/DarkTheme.js +0 -72
  181. package/dist/editor/DarkTheme.js.map +0 -1
  182. package/dist/editor/DebugExtension.d.ts +0 -11
  183. package/dist/editor/DebugExtension.js +0 -70
  184. package/dist/editor/DebugExtension.js.map +0 -1
  185. package/dist/editor/Gutters.d.ts +0 -109
  186. package/dist/editor/Gutters.js +0 -201
  187. package/dist/editor/Gutters.js.map +0 -1
  188. package/dist/editor/LineEffectExtension.d.ts +0 -13
  189. package/dist/editor/LineEffectExtension.js +0 -48
  190. package/dist/editor/LineEffectExtension.js.map +0 -1
  191. package/dist/editor/TestCodeExtension.d.ts +0 -21
  192. package/dist/editor/TestCodeExtension.js +0 -134
  193. package/dist/editor/TestCodeExtension.js.map +0 -1
  194. package/dist/examples/Examples.d.ts +0 -6
  195. package/dist/examples/Examples.js +0 -23
  196. package/dist/examples/Examples.js.map +0 -1
  197. package/dist/examples/JavaScriptExamples.js.map +0 -1
  198. package/dist/examples/PythonExamples.js.map +0 -1
  199. package/dist/input/BatchInputHandler.d.ts +0 -55
  200. package/dist/input/BatchInputHandler.js +0 -131
  201. package/dist/input/BatchInputHandler.js.map +0 -1
  202. package/dist/input/InteractiveInputHandler.d.ts +0 -27
  203. package/dist/input/InteractiveInputHandler.js +0 -89
  204. package/dist/input/InteractiveInputHandler.js.map +0 -1
  205. package/dist/input/UserInputHandler.d.ts +0 -68
  206. package/dist/input/UserInputHandler.js +0 -39
  207. package/dist/input/UserInputHandler.js.map +0 -1
  208. package/dist/util/HTMLShapes.d.ts +0 -15
  209. package/dist/util/HTMLShapes.js +0 -25
  210. package/dist/util/HTMLShapes.js.map +0 -1
  211. package/dist/util/Rendering.d.ts +0 -120
  212. package/dist/util/Rendering.js +0 -142
  213. package/dist/util/Rendering.js.map +0 -1
  214. package/dist/workers/input/InputWorker.js.map +0 -1
  215. package/dist/workers/javascript/JavaScriptWorker.js.map +0 -1
  216. package/dist/workers/javascript/worker.js.map +0 -1
  217. package/dist/workers/python/PythonWorker.js.map +0 -1
  218. package/dist/workers/python/python_package.tar.gz.load_by_url +0 -0
  219. package/dist/workers/python/worker.js.map +0 -1
  220. /package/dist/{workers → backend/workers}/javascript/JavaScriptWorker.d.ts +0 -0
  221. /package/dist/{workers → backend/workers}/javascript/worker.d.ts +0 -0
  222. /package/dist/{workers → backend/workers}/javascript/worker.js +0 -0
  223. /package/dist/{workers → backend/workers}/python/worker.d.ts +0 -0
  224. /package/dist/{workers → backend/workers}/python/worker.js +0 -0
  225. /package/dist/{BackendEvent.d.ts → communication/BackendEvent.d.ts} +0 -0
  226. /package/dist/{BackendEvent.js → communication/BackendEvent.js} +0 -0
  227. /package/dist/{InputServiceWorker.d.ts → communication/InputServiceWorker.d.ts} +0 -0
  228. /package/dist/{workers/input → communication}/InputWorker.d.ts +0 -0
  229. /package/dist/{workers/input → communication}/InputWorker.js +0 -0
  230. /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.d.ts +0 -0
  231. /package/dist/{examples → frontend/components/app/examples}/JavaScriptExamples.js +0 -0
  232. /package/dist/{examples → frontend/components/app/examples}/PythonExamples.d.ts +0 -0
  233. /package/dist/{examples → frontend/components/app/examples}/PythonExamples.js +0 -0
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"Debugger.js","sourceRoot":"","sources":["../src/Debugger.ts"],"names":[],"mappings":"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"}
@@ -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
- }
@@ -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
@@ -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
@@ -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"}
@@ -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
- }
@@ -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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"}