@dodona/papyros 2.1.0 → 2.2.0-beta.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/App.js +3 -0
- package/dist/App.js.map +1 -1
- package/dist/CodeRunner.js +3 -3
- package/dist/Papyros.css +23 -1
- package/dist/Translations.d.ts +24 -9
- package/dist/Translations.js +14 -2
- package/dist/Translations.js.map +1 -1
- package/dist/editor/CodeEditor.d.ts +4 -0
- package/dist/editor/CodeEditor.js +17 -0
- package/dist/editor/CodeEditor.js.map +1 -1
- package/dist/editor/TestCodeExtension.d.ts +20 -0
- package/dist/editor/TestCodeExtension.js +142 -0
- package/dist/editor/TestCodeExtension.js.map +1 -0
- package/dist/workers/python/python_package.tar.gz.load_by_url +0 -0
- package/package.json +5 -4
package/dist/App.js
CHANGED
|
@@ -70,6 +70,9 @@ function startPapyros() {
|
|
|
70
70
|
setUpEditor(handler.batchEditor, LOCAL_STORAGE_KEYS.input);
|
|
71
71
|
}
|
|
72
72
|
yield papyros.launch();
|
|
73
|
+
// add test code
|
|
74
|
+
const testCode = "print('a')\nprint(\"Hello World!\")\nprint('b')";
|
|
75
|
+
papyros.codeRunner.editor.testCode = testCode;
|
|
73
76
|
});
|
|
74
77
|
}
|
|
75
78
|
startPapyros();
|
package/dist/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EACH,gBAAgB,EAChB,cAAc,EAAE,4BAA4B,EAC5C,sBAAsB,EACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAiB,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,MAAM,kBAAkB,GAAG;IACvB,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IACvC,KAAK,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;CAClD,CAAC;AAEF,SAAS,WAAW,CAAC,MAAwB,EAAE,UAAkB;IAC7D,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,CAAC,QAAQ,CACX;QACI,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE;YACvB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,EAAE,CAAC;KACX,CACJ,CAAC;AACN,CAAC;AAED,SAAe,YAAY;;QACvB,4DAA4D;QAC5D,kEAAkE;QAClE,+CAA+C;QAC/C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACpE,4BAA4B,CAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;QACzD,MAAM,MAAM,GAAkB;YAC1B,UAAU,EAAE,IAAI;YAChB,mBAAmB,EAAE,QAAQ;YAC7B,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS,CAAC,KAAK;YAC1B,cAAc,EAAE;gBACZ,iBAAiB,EAAE,sBAAsB;aAC5C;SACJ,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC;YACrE,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;gBAC7E,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,CAAC,MAAM,CAAC;YACX,iBAAiB,EAAE;gBACf,eAAe,EAAE,MAAM;aAC1B;YACD,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE;gBACV,eAAe,EAAE,YAAY;aAChC;SACJ,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,OAAO,YAAY,iBAAiB,EAAE,CAAC;YACvC,WAAW,CAAE,OAA6B,CAAC,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QAEvB,gBAAgB;QAChB,MAAM,QAAQ,GAAG,iDAAiD,CAAC;QACnE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAClD,CAAC;CAAA;AAED,YAAY,EAAE,CAAC"}
|
package/dist/CodeRunner.js
CHANGED
|
@@ -69,7 +69,7 @@ export class CodeRunner extends Renderable {
|
|
|
69
69
|
this.programmingLanguage = programmingLanguage;
|
|
70
70
|
this.editor = new CodeEditor(() => {
|
|
71
71
|
if (this.state === RunState.Ready) {
|
|
72
|
-
this.runCode(this.editor.
|
|
72
|
+
this.runCode(this.editor.getCode());
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
75
|
this.inputManager = new InputManager((input) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -113,7 +113,7 @@ export class CodeRunner extends Renderable {
|
|
|
113
113
|
buttonText: t(`Papyros.run_modes.${mode}`),
|
|
114
114
|
classNames,
|
|
115
115
|
icon: MODE_ICONS[mode]
|
|
116
|
-
}, () => this.runCode(this.editor.
|
|
116
|
+
}, () => this.runCode(this.editor.getCode(), mode));
|
|
117
117
|
}
|
|
118
118
|
/**
|
|
119
119
|
* Start the backend to enable running code
|
|
@@ -133,7 +133,7 @@ export class CodeRunner extends Renderable {
|
|
|
133
133
|
this.outputManager.onOverflow(null);
|
|
134
134
|
}));
|
|
135
135
|
this.editor.setLintingSource((view) => __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
const workerDiagnostics = yield workerProxy.lintCode(this.editor.
|
|
136
|
+
const workerDiagnostics = yield workerProxy.lintCode(this.editor.getCode());
|
|
137
137
|
return workerDiagnostics.map(d => {
|
|
138
138
|
const fromline = view.state.doc.line(d.lineNr);
|
|
139
139
|
const toLine = view.state.doc.line(d.endLineNr);
|
package/dist/Papyros.css
CHANGED
|
@@ -309,7 +309,7 @@
|
|
|
309
309
|
-o-tab-size: 4;
|
|
310
310
|
tab-size: 4;
|
|
311
311
|
/* 3 */
|
|
312
|
-
font-family: ui-sans-serif, system-ui,
|
|
312
|
+
font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
313
313
|
/* 4 */
|
|
314
314
|
}
|
|
315
315
|
|
|
@@ -504,6 +504,11 @@ Removes the default spacing and border for appropriate elements.
|
|
|
504
504
|
vertical-align: middle;
|
|
505
505
|
}
|
|
506
506
|
|
|
507
|
+
.papyros-button.btn-icon {
|
|
508
|
+
padding: 2px 8px;
|
|
509
|
+
min-width: 20px;
|
|
510
|
+
}
|
|
511
|
+
|
|
507
512
|
.cm-gutter.cm-debugline-gutter {
|
|
508
513
|
display: none !important;
|
|
509
514
|
}
|
|
@@ -512,6 +517,23 @@ Removes the default spacing and border for appropriate elements.
|
|
|
512
517
|
display: flex !important;
|
|
513
518
|
}
|
|
514
519
|
|
|
520
|
+
.papyros-test-code {
|
|
521
|
+
background-color: rgba(143, 182, 130, 0.1);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
.papyros-test-code.cm-activeLine {
|
|
525
|
+
background-color: rgba(143, 182, 130, 0.1)
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
.papyros-test-code-widget {
|
|
529
|
+
background-color: rgba(143, 182, 130, 0.1);
|
|
530
|
+
color: #7d8799;
|
|
531
|
+
display: flex;
|
|
532
|
+
justify-content: space-between;
|
|
533
|
+
align-items: center;
|
|
534
|
+
padding: 0 2px 0 6px;
|
|
535
|
+
}
|
|
536
|
+
|
|
515
537
|
.placeholder\:_tw-text-placeholder-grey::-moz-placeholder {
|
|
516
538
|
--tw-text-opacity: 1 !important;
|
|
517
539
|
color: rgb(136 136 136 / var(--tw-text-opacity)) !important;
|
package/dist/Translations.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ declare namespace ENGLISH_TRANSLATION {
|
|
|
22
22
|
export let input_disabled: string;
|
|
23
23
|
export let output: string;
|
|
24
24
|
export let output_placeholder: string;
|
|
25
|
-
export let run: string;
|
|
26
25
|
export let stop: string;
|
|
27
26
|
export let finished: string;
|
|
28
27
|
export let interrupted: string;
|
|
@@ -61,10 +60,9 @@ declare namespace ENGLISH_TRANSLATION {
|
|
|
61
60
|
let loading_1: string;
|
|
62
61
|
export { loading_1 as loading };
|
|
63
62
|
export namespace run_modes {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let
|
|
67
|
-
export { run_1 as run };
|
|
63
|
+
let doctest: string;
|
|
64
|
+
let debug: string;
|
|
65
|
+
let run: string;
|
|
68
66
|
}
|
|
69
67
|
export let used_input: string;
|
|
70
68
|
export let used_input_with_prompt: string;
|
|
@@ -74,6 +72,13 @@ declare namespace ENGLISH_TRANSLATION {
|
|
|
74
72
|
let text_2: string;
|
|
75
73
|
}
|
|
76
74
|
export { _debugger as debugger };
|
|
75
|
+
export namespace editor {
|
|
76
|
+
namespace test_code {
|
|
77
|
+
let description: string;
|
|
78
|
+
let edit: string;
|
|
79
|
+
let remove: string;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
77
82
|
}
|
|
78
83
|
declare namespace DUTCH_TRANSLATION {
|
|
79
84
|
let Papyros_1: string;
|
|
@@ -97,8 +102,6 @@ declare namespace DUTCH_TRANSLATION {
|
|
|
97
102
|
export { output_1 as output };
|
|
98
103
|
let output_placeholder_1: string;
|
|
99
104
|
export { output_placeholder_1 as output_placeholder };
|
|
100
|
-
let run_2: string;
|
|
101
|
-
export { run_2 as run };
|
|
102
105
|
let stop_1: string;
|
|
103
106
|
export { stop_1 as stop };
|
|
104
107
|
export namespace states_1 {
|
|
@@ -164,8 +167,8 @@ declare namespace DUTCH_TRANSLATION {
|
|
|
164
167
|
export { doctest_1 as doctest };
|
|
165
168
|
let debug_1: string;
|
|
166
169
|
export { debug_1 as debug };
|
|
167
|
-
let
|
|
168
|
-
export {
|
|
170
|
+
let run_1: string;
|
|
171
|
+
export { run_1 as run };
|
|
169
172
|
}
|
|
170
173
|
export { run_modes_1 as run_modes };
|
|
171
174
|
let used_input_1: string;
|
|
@@ -181,6 +184,18 @@ declare namespace DUTCH_TRANSLATION {
|
|
|
181
184
|
export { text_2_1 as text_2 };
|
|
182
185
|
}
|
|
183
186
|
export { _debugger_1 as debugger };
|
|
187
|
+
export namespace editor_1 {
|
|
188
|
+
export namespace test_code_1 {
|
|
189
|
+
let description_1: string;
|
|
190
|
+
export { description_1 as description };
|
|
191
|
+
let edit_1: string;
|
|
192
|
+
export { edit_1 as edit };
|
|
193
|
+
let remove_1: string;
|
|
194
|
+
export { remove_1 as remove };
|
|
195
|
+
}
|
|
196
|
+
export { test_code_1 as test_code };
|
|
197
|
+
}
|
|
198
|
+
export { editor_1 as editor };
|
|
184
199
|
}
|
|
185
200
|
declare const ENGLISH_PHRASES: {
|
|
186
201
|
"Go to line": string;
|
package/dist/Translations.js
CHANGED
|
@@ -15,7 +15,6 @@ const ENGLISH_TRANSLATION = {
|
|
|
15
15
|
"input_disabled": "You can only provide input when your code requires it in interactive mode",
|
|
16
16
|
"output": "Output",
|
|
17
17
|
"output_placeholder": "The output of your code will appear here.",
|
|
18
|
-
"run": "Run",
|
|
19
18
|
"stop": "Stop",
|
|
20
19
|
"finished": "Code executed in %{time} s",
|
|
21
20
|
"interrupted": "Code interrupted after %{time} s",
|
|
@@ -59,6 +58,13 @@ const ENGLISH_TRANSLATION = {
|
|
|
59
58
|
"title": "Drag the slider to walk through your code.",
|
|
60
59
|
"text_1": "This window shows how your program works step by step. Explore to see how your program builds and stores information.",
|
|
61
60
|
"text_2": "You can also use the %{previous} and %{next} buttons to go to the previous or next step. The %{first} and %{last} buttons can be used to directly jump to the first or last step respectively."
|
|
61
|
+
},
|
|
62
|
+
"editor": {
|
|
63
|
+
"test_code": {
|
|
64
|
+
"description": "This code is inserted by the testcase",
|
|
65
|
+
"edit": "Edit",
|
|
66
|
+
"remove": "Remove"
|
|
67
|
+
}
|
|
62
68
|
}
|
|
63
69
|
};
|
|
64
70
|
const DUTCH_TRANSLATION = {
|
|
@@ -74,7 +80,6 @@ const DUTCH_TRANSLATION = {
|
|
|
74
80
|
"input_disabled": "Je kan enkel invoer invullen als je code erom vraagt in interactieve modus",
|
|
75
81
|
"output": "Uitvoer",
|
|
76
82
|
"output_placeholder": "Hier komt de uitvoer van je code.",
|
|
77
|
-
"run": "Uitvoeren",
|
|
78
83
|
"stop": "Stop",
|
|
79
84
|
"states": {
|
|
80
85
|
"running": "Aan het uitvoeren",
|
|
@@ -118,6 +123,13 @@ const DUTCH_TRANSLATION = {
|
|
|
118
123
|
"title": "Verken je code stap voor stap",
|
|
119
124
|
"text_1": "Dit venster toont de werking van je programma in detail. Ontdek hoe je programma informatie opbouwt en bewaart.",
|
|
120
125
|
"text_2": "Gebruik de schuifbalk om door je code te wandelen. Je kan ook de %{previous} en %{next} knoppen gebruiken om naar de vorige of volgende stap te gaan. De %{first} en %{last} knoppen kunnen gebruikt worden om direct naar de eerste of laatste stap te gaan."
|
|
126
|
+
},
|
|
127
|
+
"editor": {
|
|
128
|
+
"test_code": {
|
|
129
|
+
"description": "Deze code werd ingevoegd door de testcase",
|
|
130
|
+
"edit": "Bewerk",
|
|
131
|
+
"remove": "Verwijder"
|
|
132
|
+
}
|
|
121
133
|
}
|
|
122
134
|
};
|
|
123
135
|
// Override some default English phrases to also use capitalized text
|
package/dist/Translations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Translations.js","sourceRoot":"","sources":["../src/Translations.js"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,uDAAuD;AACvD,6EAA6E;AAE7E,MAAM,mBAAmB,GAAG;IACxB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,MAAM;IACd,kBAAkB,EAAE,2EAA2E;IAC/F,OAAO,EAAE,OAAO;IAChB,mBAAmB,EAAE;QACjB,aAAa,EAAE,uCAAuC;QACtD,OAAO,EAAE,iDAAiD;YACtD,iDAAiD;KACxD;IACD,gBAAgB,EAAE,2EAA2E;IAC7F,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,2CAA2C;IACjE,
|
|
1
|
+
{"version":3,"file":"Translations.js","sourceRoot":"","sources":["../src/Translations.js"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export declare class CodeEditor extends CodeMirrorEditor {
|
|
|
12
12
|
static AUTOCOMPLETION: string;
|
|
13
13
|
static LINTING: string;
|
|
14
14
|
private debugLineGutter;
|
|
15
|
+
private testCodeExtension;
|
|
15
16
|
/**
|
|
16
17
|
* Construct a new CodeEditor
|
|
17
18
|
* @param {Function} onRunRequest Callback for when the user wants to run the code
|
|
@@ -19,6 +20,9 @@ export declare class CodeEditor extends CodeMirrorEditor {
|
|
|
19
20
|
* @param {number} indentLength The length in spaces for the indent unit
|
|
20
21
|
*/
|
|
21
22
|
constructor(onRunRequest: () => void, initialCode?: string, indentLength?: number);
|
|
23
|
+
set testCode(code: string);
|
|
24
|
+
getText(): string;
|
|
25
|
+
getCode(): string;
|
|
22
26
|
setDarkMode(darkMode: boolean): void;
|
|
23
27
|
/**
|
|
24
28
|
* @param {ProgrammingLanguage} language The language to use
|
|
@@ -16,6 +16,7 @@ import { darkTheme } from "./DarkTheme";
|
|
|
16
16
|
import { DebugLineGutter } from "./Gutters";
|
|
17
17
|
import { BackendManager } from "../BackendManager";
|
|
18
18
|
import { BackendEventType } from "../BackendEvent";
|
|
19
|
+
import { TestCodeExtension } from "./TestCodeExtension";
|
|
19
20
|
/**
|
|
20
21
|
* Component that provides useful features to users writing code
|
|
21
22
|
*/
|
|
@@ -61,6 +62,22 @@ export class CodeEditor extends CodeMirrorEditor {
|
|
|
61
62
|
const line = e.data.line;
|
|
62
63
|
this.debugLineGutter.markLine(this.editorView, line);
|
|
63
64
|
});
|
|
65
|
+
this.testCodeExtension = new TestCodeExtension(this.editorView);
|
|
66
|
+
this.addExtension(this.testCodeExtension.toExtension());
|
|
67
|
+
}
|
|
68
|
+
set testCode(code) {
|
|
69
|
+
this.testCodeExtension.testCode = code;
|
|
70
|
+
}
|
|
71
|
+
getText() {
|
|
72
|
+
if (this.testCodeExtension) {
|
|
73
|
+
return this.testCodeExtension.getNonTestCode();
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
return super.getText();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
getCode() {
|
|
80
|
+
return super.getText();
|
|
64
81
|
}
|
|
65
82
|
setDarkMode(darkMode) {
|
|
66
83
|
let styleExtensions = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../src/editor/CodeEditor.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../src/editor/CodeEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Extension } from "@codemirror/state";
|
|
2
|
+
import { EditorView } from "@codemirror/view";
|
|
3
|
+
export declare class TestCodeExtension {
|
|
4
|
+
private view;
|
|
5
|
+
private lines;
|
|
6
|
+
private widget;
|
|
7
|
+
private allowEdit;
|
|
8
|
+
constructor(view: EditorView);
|
|
9
|
+
private get numberOfTestLines();
|
|
10
|
+
private lineFromEnd;
|
|
11
|
+
private highlightLines;
|
|
12
|
+
private addWidget;
|
|
13
|
+
private clearAllLineEffects;
|
|
14
|
+
private getReadOnlyRanges;
|
|
15
|
+
private insertTestCode;
|
|
16
|
+
reset(keepCode?: boolean): void;
|
|
17
|
+
set testCode(code: string);
|
|
18
|
+
getNonTestCode(): string;
|
|
19
|
+
toExtension(): Extension;
|
|
20
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { StateField, StateEffect } from "@codemirror/state";
|
|
2
|
+
import { Decoration, EditorView, WidgetType } from "@codemirror/view";
|
|
3
|
+
import readOnlyRangesExtension from "codemirror-readonly-ranges";
|
|
4
|
+
import { t } from "../util/Util";
|
|
5
|
+
const addLineEffect = StateEffect.define();
|
|
6
|
+
const clearAllLineEffects = StateEffect.define();
|
|
7
|
+
const lineEffectExtension = StateField.define({
|
|
8
|
+
create() {
|
|
9
|
+
return Decoration.none;
|
|
10
|
+
},
|
|
11
|
+
update(value, transaction) {
|
|
12
|
+
let v = value.map(transaction.changes);
|
|
13
|
+
for (const effect of transaction.effects) {
|
|
14
|
+
if (effect.is(addLineEffect)) {
|
|
15
|
+
v = value.update({ add: effect.value });
|
|
16
|
+
}
|
|
17
|
+
if (effect.is(clearAllLineEffects)) {
|
|
18
|
+
v = Decoration.none;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return v;
|
|
22
|
+
},
|
|
23
|
+
provide: f => EditorView.decorations.from(f)
|
|
24
|
+
});
|
|
25
|
+
const highlightDecoration = Decoration.line({ class: "papyros-test-code" });
|
|
26
|
+
// Widget to manage the test code
|
|
27
|
+
class TestCodeWidget extends WidgetType {
|
|
28
|
+
constructor(testCodeExtension) {
|
|
29
|
+
super();
|
|
30
|
+
this.testCodeExtension = testCodeExtension;
|
|
31
|
+
}
|
|
32
|
+
toDOM() {
|
|
33
|
+
console.log("create test code widget");
|
|
34
|
+
const element = document.createElement("div");
|
|
35
|
+
element.classList.add("papyros-test-code-widget");
|
|
36
|
+
const span = document.createElement("span");
|
|
37
|
+
span.innerText = t("Papyros.editor.test_code.description");
|
|
38
|
+
element.appendChild(span);
|
|
39
|
+
const buttons = document.createElement("div");
|
|
40
|
+
const editButton = document.createElement("button");
|
|
41
|
+
editButton.classList.add("btn-secondary", "papyros-button", "btn-icon");
|
|
42
|
+
editButton.innerHTML = "<i class=\"mdi mdi-pencil\"></i>";
|
|
43
|
+
editButton.addEventListener("click", () => {
|
|
44
|
+
console.log("edit test code");
|
|
45
|
+
this.testCodeExtension.reset(true);
|
|
46
|
+
});
|
|
47
|
+
editButton.title = t("Papyros.editor.test_code.edit");
|
|
48
|
+
buttons.appendChild(editButton);
|
|
49
|
+
const deleteButton = document.createElement("button");
|
|
50
|
+
deleteButton.classList.add("btn-secondary", "papyros-button", "btn-icon");
|
|
51
|
+
deleteButton.innerHTML = "<i class=\"mdi mdi-close\"></i>";
|
|
52
|
+
deleteButton.addEventListener("click", () => {
|
|
53
|
+
console.log("remove test code");
|
|
54
|
+
this.testCodeExtension.reset();
|
|
55
|
+
});
|
|
56
|
+
deleteButton.title = t("Papyros.editor.test_code.remove");
|
|
57
|
+
buttons.appendChild(deleteButton);
|
|
58
|
+
element.appendChild(buttons);
|
|
59
|
+
return element;
|
|
60
|
+
}
|
|
61
|
+
ignoreEvent() {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export class TestCodeExtension {
|
|
66
|
+
constructor(view) {
|
|
67
|
+
this.lines = "";
|
|
68
|
+
this.allowEdit = true;
|
|
69
|
+
this.view = view;
|
|
70
|
+
this.widget = Decoration.widget({ widget: new TestCodeWidget(this), block: true, side: 1 });
|
|
71
|
+
}
|
|
72
|
+
get numberOfTestLines() {
|
|
73
|
+
return this.lines.split("\n").length;
|
|
74
|
+
}
|
|
75
|
+
lineFromEnd(line, state = undefined) {
|
|
76
|
+
const currentState = state || this.view.state;
|
|
77
|
+
const lineFromEnd = currentState.doc.lines - line;
|
|
78
|
+
return currentState.doc.line(lineFromEnd);
|
|
79
|
+
}
|
|
80
|
+
highlightLines() {
|
|
81
|
+
for (let i = 0; i < this.numberOfTestLines; i++) {
|
|
82
|
+
this.view.dispatch({
|
|
83
|
+
effects: addLineEffect.of([highlightDecoration.range(this.lineFromEnd(i).from)])
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
addWidget() {
|
|
88
|
+
this.view.dispatch({
|
|
89
|
+
effects: addLineEffect.of([this.widget.range(this.lineFromEnd(this.numberOfTestLines).to)])
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
clearAllLineEffects() {
|
|
93
|
+
this.view.dispatch({
|
|
94
|
+
effects: clearAllLineEffects.of(null)
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
getReadOnlyRanges(state) {
|
|
98
|
+
if (this.allowEdit) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
return [{
|
|
102
|
+
from: this.lineFromEnd(this.numberOfTestLines - 1, state).from,
|
|
103
|
+
to: undefined // until last line
|
|
104
|
+
}];
|
|
105
|
+
}
|
|
106
|
+
insertTestCode(code) {
|
|
107
|
+
this.view.dispatch({ changes: { from: this.lineFromEnd(0).to, insert: "\n" } });
|
|
108
|
+
this.view.dispatch({ changes: { from: this.lineFromEnd(0).to, insert: code } });
|
|
109
|
+
this.lines = code;
|
|
110
|
+
}
|
|
111
|
+
reset(keepCode = false) {
|
|
112
|
+
this.allowEdit = true;
|
|
113
|
+
this.clearAllLineEffects();
|
|
114
|
+
if (this.lines === "") {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!keepCode) {
|
|
118
|
+
this.view.dispatch({ changes: { from: this.lineFromEnd(this.numberOfTestLines).to, to: this.lineFromEnd(0).to, insert: "" } });
|
|
119
|
+
}
|
|
120
|
+
this.lines = "";
|
|
121
|
+
}
|
|
122
|
+
set testCode(code) {
|
|
123
|
+
this.reset();
|
|
124
|
+
if (code === "") {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
this.insertTestCode(code);
|
|
128
|
+
this.allowEdit = false;
|
|
129
|
+
this.highlightLines();
|
|
130
|
+
this.addWidget();
|
|
131
|
+
}
|
|
132
|
+
getNonTestCode() {
|
|
133
|
+
if (this.allowEdit) {
|
|
134
|
+
return this.view.state.doc.toString();
|
|
135
|
+
}
|
|
136
|
+
return this.view.state.doc.sliceString(0, this.lineFromEnd(this.numberOfTestLines).to);
|
|
137
|
+
}
|
|
138
|
+
toExtension() {
|
|
139
|
+
return [lineEffectExtension, readOnlyRangesExtension(this.getReadOnlyRanges.bind(this))];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=TestCodeExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestCodeExtension.js","sourceRoot":"","sources":["../../src/editor/TestCodeExtension.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dodona/papyros",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0-beta.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"homepage": ".",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@types/escape-html": "^1.0.3",
|
|
8
8
|
"@types/i18n-js": "^3.8.7",
|
|
9
9
|
"@types/jest": "^29.5.10",
|
|
10
|
-
"@types/serviceworker": "^0.0.
|
|
10
|
+
"@types/serviceworker": "^0.0.82",
|
|
11
11
|
"@typescript-eslint/eslint-plugin": "^6.9.0",
|
|
12
12
|
"@typescript-eslint/parser": "^6.9.0",
|
|
13
13
|
"autoprefixer": "^10.4.16",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"jest": "^29.7.0",
|
|
21
21
|
"jest-environment-jsdom": "^29.7.0",
|
|
22
22
|
"postcss": "^8.4.31",
|
|
23
|
-
"postcss-import": "^
|
|
24
|
-
"postcss-loader": "^
|
|
23
|
+
"postcss-import": "^16.0.0",
|
|
24
|
+
"postcss-loader": "^8.0.0",
|
|
25
25
|
"style-loader": "^3.3.3",
|
|
26
26
|
"tailwindcss": "^3.3.5",
|
|
27
27
|
"terser-webpack-plugin": "^5.3.9",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"@codemirror/view": "^6.22.1",
|
|
48
48
|
"@dodona/trace-component": "1.1.6",
|
|
49
49
|
"@lezer/common": "^1.1.0",
|
|
50
|
+
"codemirror-readonly-ranges": "^0.1.0-alpha.2",
|
|
50
51
|
"comlink": "^4.4.1",
|
|
51
52
|
"comsync": "^0.0.9",
|
|
52
53
|
"escape-html": "^1.0.3",
|