From 5ffcf8a467bdee1a85aba3b5aafd04c2be05f486 Mon Sep 17 00:00:00 2001
From: jsteuer <jan.steuer.htw@gmail.com>
Date: Tue, 10 Dec 2019 14:33:51 +0100
Subject: [PATCH] readme tmp
---
README.md | 85 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 84 insertions(+), 1 deletions(-)
diff --git a/README.md b/README.md
index ecec13f..434a589 100644
--- a/README.md
+++ b/README.md
@@ -22,17 +22,100 @@
gestartet wurde, kann die API verwendet werden! (Hinweis: durch nachbilden der API kann
eine Nutzung ohne IDE ermöglicht werden, siehe `enableOfflineUsageIfNecessary`)
+
+### Empfohlenes Vorgehen
+Damit externe Werkzeuge ein einheitliches Verhalten aufweisen, sollte wie folgt vorgegangen werden.
+
+Als erstes muss sichergestellt werden, dass die MathCoach IDE API auch verfügbar ist. Dies ist beispielsweise
+nicht der Fall, wenn das Werkzeug ohne die IDE gestartet wurde (und nicht offline-fähig ist) oder diee IDE (aus
+welchen Gründen auch immer) nicht einsatzbereit ist.
+
+ if(typeof MC !== "undefined"){
+ throw new Error("IDE Lib nicht eingebunden"); // TODO: show error to user
+ }
+ const isReady = await MC.isReady();
+ if(!isReady){
+ throw new Error("Die MathCoach-API ist nicht einsatzbereit."); // TODO: show error to user
+ }
+
+Von nun an kann die IDE API vollständig genutzt werden. Zunächst sollte die Kontext-Datei (die Datei,
+mit der das Werkzeug gestartet wurde) geladen werden.
+
+Ist der Inhalt der Kontext-Datei leer, wurde das Werkzeug vermutlich zum ersten mal gestartet das Werkzeug:
+- Sich initialisieren (z.B. mit einem leeren oder beispielhaften internem Datenmodell)
+- Das interne Datenmodell in die Kontext-Datei schreiben
+- Die zugehörige Aufgabe generieren. Siehe auch `createExerciseFile` weiter unten.
+
+Andernfalls kann das zuvor gespeichertes Datenmodell in den Editor geladen werden.
+
+Anschließend sollte die generierten Aufgaben in der Vorschau gestartet werden, sodass der Benutzer besser
+abschätzen kann, wie sich Änderungen im Werkzeug auf die Aufgabe auswirken.
+
+
+ let contextFile = await MC.ide.getContextFile(); // Datei, mit der der Editor gestartet wurde
+ let contextFileContent = await MC.ide.fs.readFile(contextFile);
+ let contextFileIsEmpty = contextFileContent === "";
+
+ let exerciseFile = createExerciseFile(contextFile);
+
+ if(contextFileIsEmpty){
+ // TODO: init application with new data model (maybe with example contents)
+ // write serialized model to context file, e.g. using JSON.stringify(...)
+ let dataModelAsString = JSON.stringify({/* TODO */});
+ await MC.ide.fs.writeFile(file, dataModelAsString);
+ // generate exercise
+ let generatedExerciseCode = "startup { print('Hallo Welt!') }"; // TODO
+ await MC.ide.fs.writeFile(exerciseFile, generatedExerciseCode);
+ }else{
+ // TODO: load data model, e.g. using JSON.parse(contextFileContent)
+ // TODO: (overwrite context file and generated exercise file)
+ // TODO: init application based on your data model
+ }
+
+ // show preview
+ await MC.ide.navigator.navigateToExercise(exerciseFile);
+
+Jedes Werkzeug sollte über eine "Speichern"-Funktion verfügen, mit der der Benutzer:
+- Das interne Datenmodell in die Kontext-Datei speichert (sodass es später wieder geladen werden kann)
+- Die zugehörige Aufgabe generiert
+- Die Vorschau zur generierten Aufgabe navigiert
+
+
+### Aufgaben-Datei generieren
+
+Die generierte Aufgabe soll wie die Kontext-Datei benannt sein, sodass diese vom Benutzer schnell
+zugeordnet werden können. Beispielsweise soll ein Werkzeug, welches mit der
+Kontext-Datei `/path/to/myExercise.mcq.json` gestartet wird die Aufgabe `/path/to/myExercise.groovy`
+erzeugen.
+
+ /**
+ * Kontext-Datei (z.B. "/path/to/myExercise.mcq.json") auf
+ * Aufgaben-Datei (z.B. "/path/to/myExercise.groovy") abbilden.
+ */
+ export function createExerciseFile(contextFile: MathCoach.File): MathCoach.File {
+ let file: MathCoach.File = {
+ part: contextFile.part,
+ owner: contextFile.owner,
+ path: contextFile.path.split(".")[0] + ".groovy"
+ };
+ return file;
+ }
+
+
+
### Beispiele
Im Verzeichnis `./examples/` finden sich Beispiele für externe Werkzeuge.
### Hilfunktionen für Werkzeug-Entwickler
Dieses Paket beinhaltet zusätzlich Hilfsfunktionen für Werkzeug-Entwickler. Beispielsweise kann
ein Werkzeug ohne IDE-Anbindung genutzt werden, indem die API nachgebildet wird - aktuell auf
-Basis des LocalStorage des Browsers.
+Basis des LocalStorage des Browsers. Dies ist besonders während der Entwicklung nützlich.
import { enableOfflineUsageIfNecessary } from "@mathcoach/ide-api";
let offline: boolean = enableOfflineUsageIfNecessary();
+ // now use the IDE API
+
### Kleinere Werkzeuge
Für kleiner Werkzeuge bietet es sich an im WWW-Verzeichnis zu entwickeln (z.B.
--
Gitblit v1.10.0