|   | 
| // // Falls mathcoach-ide-tool-utils.js eingebunden wurde | 
| // const { Helpers } = MC_IDE_TOOL_UTILS; | 
| // Helpers.enableOfflineUsageIfNecessary(); // Hilfsfunktion verwenden | 
|   | 
|   | 
| (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); | 
|   | 
| }()) |