(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);
|
|
}())
|