examples/README.md | ●●●●● patch | view | raw | blame | history | |
examples/example-ide/MyEditor/editor.html | ●●●●● patch | view | raw | blame | history | |
examples/example-ide/MyEditor/editor.js | ●●●●● patch | view | raw | blame | history | |
examples/example-ide/README.md | ●●●●● patch | view | raw | blame | history | |
examples/example-ide/code_completion.png | patch | view | raw | blame | history |
examples/README.md
New file @@ -0,0 +1,6 @@ # Beispiele - `example-ide`: Entwickeln eines externen Werkzeuges in der MathCoach-IDE - `example-vscode-advanced`: Entwickeln eines externen Werkzeuges mit VSCode, Typescript und Parcel als Build-System examples/example-ide/MyEditor/editor.html
New file @@ -0,0 +1,29 @@ <html> <head> <title></title> <meta content=""> <style> </style> </head> <body> <h1>Demo Editor!!!</h1> <p> Der Editor beschreibt die Kontext-Datei (Datei, mit dem der Editor gestartet wurde) beispielhaft. Er kann eine Aufgabe generieren und die Vorschau zu der generieren Datei navigieren. </p> <ul> <li> <button id="btn_write">Kontext-Datei schreiben</button> </li> <li> <button id="btn_generateExercise">Aufgabe generieren und anzeigen</button> </li> </ul> <script src="/mathcoach/ui/ide/api/ide-lib.js"></script> <script src="./editor.js"></script> </body> </html> examples/example-ide/MyEditor/editor.js
New file @@ -0,0 +1,68 @@ (async function () { const isReady = typeof MC !== "undefined" ? await MC.isReady() : false; if(!isReady){ alert("Die MathCoach-API ist nicht einsatzbereit. Wurde das Werkzeug nicht durch die IDE gestartet?"); throw new Error("mc api not ready"); } const btnWrite = document.getElementById("btn_write"); const btnGenerateExercise = document.getElementById("btn_generateExercise"); const user = await MC.ide.getUserName(); // Angemeldeter Benutzer const contextFile = await MC.ide.getContextFile(); // Datei, mit der der Editor gestartet wurde /** * Internes Datenmodell des Werkzeuges. Die grafische Oberfläche soll an * dieses Datenmodell gebunden sein: * - Änderungen in der grafischen Oberfläche ändern das Modell * - Änderungen des Modell aktualisieren die grafische Oberfläche */ let data = { user: user, timestamp: new Date().toTimeString() } /** * Schreibt das Datenmodell in die die Kontext-Datei (Datei, mit der das Werkzeug gestartet wurde). * Diese Datei fungiert somit als reiner Datencontainer. */ async function saveDataModel() { let text = JSON.stringify(data); // convert the data model to string await MC.ide.fs.writeFile(contextFile,text); // write the model to the file that starts the tool } btnWrite.addEventListener("click", saveDataModel); /** * Läd das Datenmodell aus der Kontext-Datei */ // async function restoreDataModel(){ /* ... TODO ... */} /** * Generiert aus dem Datenmodell eine MathCoach-Aufgabe */ async function generateExercise() { let text = ` startup { print(""" Hallo ${data.user}! Diese Aufgabe wurde um <b>${data.timestamp}</b> Uhr erstellt. """) } `; /** * Die generierte Aufgabe soll so heißen, wie die Kontext-Datei. * Der Pfad wird also wie folgt umgeformt: "/path/to/myExercise.xxx.yyy" * wird zu "path/to/myExercise.groovy" */ let path = contextFile.path.substring(0,contextFile.path.indexOf(".")) + ".groovy" let file = { owner: contextFile.owner, part: contextFile.part, path: path } await MC.ide.fs.writeFile(file, text); await MC.ide.navigator.navigateToExercise(file) } btnGenerateExercise.addEventListener("click", generateExercise); }()) examples/example-ide/README.md
New file @@ -0,0 +1,42 @@ # Beispiel: Externes Werkzeug in der MathCoach-IDE entwickeln Dieses Beispiel zeigt, wie man ein externes Werkzeug innerhalb der MathCoach-IDE entwickeln kann. Dabei stellt die IDE Autovervollständigung für JavaScript-Dateien, in denen die MathCoach-API verwendet wird, bereit.  ### Vorteile - Einfach (auf die Schnelle etwas ausprobieren) - Die MathCoach-IDE stellt Autovervollständigung bereit ### Nachteile - Keine Typsicherheit, da JavaScript verwendet wird (hier bringt die Autovervollständigung nicht viel) - Für größere und komplexere Werkzeuge eher ungeeignet ## Setup - Lade das Verzeichnis `MyEditor` in dein www-Verzeichnis von MathCoach hoch - Registriere das Werkzeug bei der IDE. Ergänze dazu die `ide-settings.json` in deinem vfs-Verzeichnis (passe die `entry`-Konfiguration entsprechend an!): { ... "editor.external.definitions": [ ... { "displayName": "MyEditor", "entry": "/mathcoach/www/<YOUR_USER_NAME>/MyEditor/editor.html", "description": "...", "developer": "Max Mustermann", "extension": "demo.json" } ... ], ... } - Lade die IDE neu (Seite neu laden, z.B. mit F5) - Im Kontextmenü des Explorers können nun MyEditor-Dateien angelegt und anschließend mit dem MyEditor geöffnet werden. examples/example-ide/code_completion.png