jsteuer
2019-07-06 6f8bd7e98be91c60386f2e2291a41cfc1004c8b0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
(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);
 
}())