From 57e68857a69e20adffb6e35e13754358eb1e31ea Mon Sep 17 00:00:00 2001
From: jsteuer <jan.niklas.steuer@gmail.com>
Date: Fri, 05 Jul 2019 12:39:43 +0200
Subject: [PATCH] better api docs

---
 mathcoach-api.d.ts |   86 ++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 80 insertions(+), 6 deletions(-)

diff --git a/mathcoach-api.d.ts b/mathcoach-api.d.ts
index d4ab7a2..b5ed739 100644
--- a/mathcoach-api.d.ts
+++ b/mathcoach-api.d.ts
@@ -20,9 +20,33 @@
      */
     interface Api {
         /**
-         * Die Schnittstelle zur Entwicklungsumgebung (IDE) von MathCoach
+         * Die Schnittstelle zur Entwicklungsumgebung (IDE) von MathCoach. 
          */
         readonly ide: IdeApi;
+
+        /**
+         * Prüft, ob die API einsatzbereit ist. Dies sollte einmalig, beim Start des Werkzeugs, 
+         * geprüft werden. Dabei bedeutet der Rückgabewert `true`, dass das Werkzeug durch 
+         * die IDE gestartet wurde und die Kommunikation möglich ist. `false` bedeutet, dass 
+         * das Werkzeug nicht durch die IDE gestartet wurde. 
+         * 
+         * Somit wäre es möglich ein Tool offlinefähig zu machen, indem es ggf. eine eigene
+         * Implementierung der MathCoach-API (beispielsweise unter Verwendung des LocalStorage 
+         * zum Speichern von Dateien) verwendet. 
+         * 
+         * Anwendungsbeispiel (Prüft zusätzlich, ob die globale `MC`-Variable verfügbar ist - also
+         * die `ide-lib.js` korrekt eingebunden und geladen wurde):
+         *      
+         *      let isReady = (typeof MC !== "undefined") ? await MC.isReady() : false;
+         *      if(isReady){
+         *          // MathCoach-API is ready to use!
+         *      }else{
+         *          // MathCoach-API is not ready...
+         *      }
+         *  
+         * 
+         */
+        isReady(): Promise<boolean>;
     }
 
 
@@ -31,11 +55,21 @@
     */
     interface IdeApi {
         /**
-         * Name des aktuellen Benutzers
+         * Name des aktuellen Benutzers.
+         * 
+         * Anwendungsbeisipiel:
+         * 
+         *      let user = await MC.ide.getUserName();
+         * 
          */
         getUserName(): Promise<string>;
         /**
-         * Verweis auf die Datei, mit dem das Entwicklerwerkzeug gestartet wurde.
+         * Verweis auf die Datei, mit der das Entwicklerwerkzeug gestartet wurde. 
+         * 
+         * Anwendungsbeispiel:
+         * 
+         *      let file = await MC.ide.getContextFile();
+         *      let { owner, path, part } = file; 
          */
         getContextFile(): Promise<File>;
         /**
@@ -43,7 +77,7 @@
          */
         readonly fs: FileSystemApi;
         /**
-         * Schnittstelle zur Navigations-Vorschau
+         * Schnittstelle zur Vorschau
          */
         readonly navigator: NavigatorApi;
     }
@@ -53,17 +87,43 @@
     interface NavigatorApi {
         /**
          * Navigiert die Vorschau zu einem Link.
+         * 
+         * Anwendungsbeispiel:
+         * 
+         *      await MC.ide.navigator.navigateTo("/mathcoach/www/yourName/readme.html", true)
+         * 
+         * 
          * @param link Web URL (z.B. zu einer Datei im WWW-Verzeichnis oder einer MathCoach-Aufgabe)
          * @param forceOpen `true` um das Anzeigen der Vorschau zu erzwingen, `false` um nur bei bereits geöffneter Vorschau zu navigieren.
          */
         navigateTo(link: string, forceOpen?: boolean): Promise<void>;
+
+        /**
+         * Navigiert die Vorschau zu einer MathCoach-Aufgabe.
+         * Hinweis: Die Datei muss im `vfs`-Teil des Dateisystems liegen und
+         * eine ausführbar sein (z.B. eine groovy-Datei).
+         * 
+         * Anwendungsbeispiel:
+         *      
+         *      let file = { part: "vfs", owner:"yourName", path: "/myExercise.groovy" }
+         *      await MC.ide.navigator.navigateToExercise(file)
+         * 
+         * @param file Datei-Verweis
+         */
+        navigateToExercise(file: MathCoach.File, forceOpen?: boolean): Promise<void>
     }
     /**
      * Schnittstelle zum Dateisystem
      */
     interface FileSystemApi {
         /**
-         * Liest eine Datei
+         * Liest eine Datei und gibt den Textinhalt zurück. 
+         * 
+         * Anwendungsbeispiel: Lesen der Datei, mit dem das Werkzeug gestartet wurde
+         *      
+         *      let file = await MC.ide.getContextFile();
+         *      let text = await MC.ide.fs.readFile(file);
+         *      // do something with the text, e.g. JSON.parse(text)
          * 
          * @param file Verweis auf die Datei
          */
@@ -71,13 +131,27 @@
         /**
          * Schreibt Text in eine Datei. 
          * 
+         * Anwendungsbeispiel: Schreiben der Datei, mit dem das Werkzeug gestartet wurde
+         *      
+         *      let file = await MC.ide.getContextFile(); // some file reference
+         *      let text = "some text"; // or JSON.stringify(yourDataContainer)
+         *      await MC.ide.fs.writeFile(file,text); 
+         * 
          * @param file Verweis auf die Datei
          * @param text Der neue Inhalt der Datei
          */
         writeFile(file: File, text: string): Promise<void>;
     }
     /**
-     * Eindeutiger Verweis auf eine Datei
+     * Eindeutiger Verweis auf eine Datei. 
+     * 
+     * Anwendungsbeispiel:
+     * 
+     *      let user = await MC.ide.getUserName(); // oder von einem anderen File-Objekt abgfragen...
+     *      let file = { owner: user, part: "vfs", path:"/myExercise.groovy" }
+     * 
+     * Siehe auch: `MC.ide.getContextFile()`
+     * 
      */
     interface File {
         /**

--
Gitblit v1.10.0-SNAPSHOT