(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 ${data.timestamp} 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); }())