From 94c5dbd06ea1f662ceaafede992d1f931420e70c Mon Sep 17 00:00:00 2001
From: jsteuer <jan.steuer.htw@gmail.com>
Date: Wed, 11 Dec 2019 10:04:56 +0100
Subject: [PATCH] ...

---
 README.md |  254 --------------------------------------------------
 1 files changed, 0 insertions(+), 254 deletions(-)

diff --git a/README.md b/README.md
index ff902fb..8d1c8b6 100644
--- a/README.md
+++ b/README.md
@@ -1,255 +1 @@
-
-# MathCoach IDE API
-
-In diesem Paket ([Das Gitblit Repository findet sich hier](https://newton.htwsaar.de/gitblit/summary/mathcoach!mathcoach-ide-api.git)) 
-ist die öffentliche Schnittstelle zur MathCoach Entwicklungsumgebung (IDE) definiert. Mithilfe 
-dieser Schnittstelle können externe Werkzeuge (z.B. Editoren) erstellt werden. Ziel ist, dass 
-diese Werkzeuge für den Anwender komfortable - in die IDE integriert -zur Verfügung gestellt werden 
-können. Darüber hinaus werden als Ergänzung einige Hilfsfunktionen zum Bau von Werkzeugen angeboten.
-
-![Demo](media/usage_author.gif)
-*Beispielhafte Anwendung: Eine Datei wird angelegt und einem Demo-Editor geöffnet. Dieser generiert eine
-Groovy-Aufgabe*
-
-
-## Idee
-TODO: Grafik (IDE, Werkzeug, Dateien, JSON, usw)
-
-## Entwicklung externer Werkzeuge
-
--   Externe Werkzeuge müssen unter der Domain von MathCoach erreichbar sein. Zur Entwicklungszeit legt
-    man das Werkzeug dazu im www-Verzeichnis ab.
--   Die von der IDE bereitgestellte Bibliothek muss eingebunden werden
-
-        <script src="/mathcoach/ui/ide/ide-lib.js"/>
-
--   Von nun an steht die IDE API durch die globale Variable `MC` zur Verfügung.
--   **Hinweis**: Erst, wenn das Werkzeug in die IDE integriert und aus dieser heraus
-    gestartet wurde, kann die API verwendet werden! 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 die 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 `contextFileToExerciseFile` 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 = contextFileToExerciseFile(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(contextFile, 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 wird generiert und die Vorschau zu dieser navigiert
-
-  
-
-### Hilfunktionen für Werkzeug-Entwickler
-Dieses Paket beinhaltet zusätzlich Hilfsfunktionen für Werkzeug-Entwickler.
-
-
--   **Aufgaben-Datei ableiten**: 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.
-
-        import { contextFileToExerciseFile } from "@mathcoach/ide-api";
-        let contextFile = await MC.ide.getContextFile()
-        let exerciseFile = contextFileToExerciseFile(contextFile);
-
-
--   **Standalone-Werkzeuge**: Werkzeuge können ohne IDE-Anbindung entwickelt und getestet 
-    werden. Dazu wird die IDE API nachgebildet - aktuell auf Basis des `LocalStorage` des 
-    Browsers. 
-
-        import { enableOfflineUsageIfNecessary } from "@mathcoach/ide-api";
-        let offline: boolean = enableOfflineUsageIfNecessary();
-
-        // now use the IDE API
  
-
-### Beispiele
-Im Verzeichnis `./examples/` finden sich Beispiele für externe Werkzeuge.
-
-### Kleinere Werkzeuge
-Für kleiner Werkzeuge bietet es sich an im WWW-Verzeichnis zu entwickeln  (z.B.
-`myTool/tool.html` und `myTool/tool.js`). Die MathCoach-IDE stellt Autovervollständigung beim
-Editieren der `tool.js`-Datei zur Verfügung. Da es sich um eine JavaScript-Datei handelt,
-ist keine Typsicherheit gegeben. Das Werkzeug muss lokal in die IDE integriert werden, siehe
-weiter unten.
-
-![Demo](media/usage_tool_developer.gif)
-
-### Größere Werkzeuge
-Für größere Werkzeuge sollte ein Build-System wie [webpack](https://webpack.js.org/)
-oder [PARCEL](https://parceljs.org/) in Kombination mit
-[TypeScript](https://www.typescriptlang.org/) verwendet werden. Das Werkzeug muss nach dem
-Build-Prozess in das WWW-Verzeichnis kopiert und ebenfalls lokal in die IDE integriert werden, siehe
-weiter unten.
-
-
-Die MathCoach-API kann auch als npm-Package eingebunden werden, sodass eine typsichere
-und komfortable Entwicklung (z.B. mit Visual Studio Code) möglich ist. Hierzu muss
-die `package.json` des Werkzeug-Projektes wie folgt ergänzt werden:
-
-    {
-        ...
-        "devDependencies": {
-            "@mathcoach/ide-api": "git+https://newton.htwsaar.de/gitblit/r/mathcoach/mathcoach-ide-api.git#1.1.0"
-        },
-        ...
-    }
- 
-
-Wie man der Git-Repo URL ansieht, werden Git-Tags verwendet um eine
-Versionierung [(Semantic Versioning)](https://semver.org/lang/de/)
-der API zu erreichen. Lässt man die Versionierung weg, wird die
-aktuellste Version verwendet. (Siehe Gitblit um verfügbare Versionen
-einzusehen)
-
-Bei Verwendung einer Entwicklungsumgebung wie Visual Studio Code kann die Typdefinition der
-API auch für JavaScript eingebunden werden. Hierfür ist ggf. ein spezielles Kommentar am Anfang
-der Datei notwendig (Pfad falls nötig anpassen):
-
-    /// <reference path="../node_modules/@mathcoach/ide-api/mathcoach-api.d.ts"/>
-
-
-Zertifikat von Newton hinzufügen, damit npm auf das Repository zugreifen kann.
-
-    cd /usr/local/share/ca-certificates/
-    sudo mkdir newton.htwsaar.de
-
-    sudo cp path/to/newton.htwsaar.de.crt /usr/local/share/ca-certificates/newton.htwsaar.de/
-
-    sudo chown 755 /usr/local/share/ca-certificates/newton.htwsaar.de
-    sudo chown 644 /usr/local/share/ca-certificates/newton.htwsaar.de/newton.htwsaar.de.crt
-    sudo update-ca-certificates
-
-
-
-## Werkzeuge in die IDE integrieren
-Damit die IDE das Werkzeug integrieren kann, muss eine Werkzeug-Deklaration registriert werden. Zur
-Entwicklungszeit kann der Werkzeug-Entwickler dies lokal vornehmen. Anschließend können verknüpfte
-Dateien mit dem Werkzeug geöffnet werden und erstellt werden (siehe Kontext-Menüs im IDE-Explorer).
-Eine Freischaltung des Werkzeugs für alle Autoren erfolgt durch einen Administrator.
-
-### Lokal (Nur für den Entwickler des Werkzeugs)
-In der IDE muss eine Werkzeug-Deklaration angelegt werden, dazu muss die Datei `ide-settings.json` editiert werden:
-
-    {
-        ...
-        "editor.external.declarations": [
-            {
-                "displayName": "Dummy",
-                "entry": "/mathcoach/www/YOURNAME/tool.html",
-                "description": "...",
-                "developer": "...",
-                "extension": "ext"
-            }
-            ...
-        ],
-        ...
-    }
-
-| Schlüssel | Beschreibung  | Beispiel  |
-|---------------|---|---|
-| displayName   | Der Name des Werkzeugs  |  `"Fill-In-Blank-Editor"`  |
-| entry         | Der Einstiegspunkt für das Werkzeugs muss sich auf dem selben Server wie die IDE befinden.  |  `"/mathcoach/www/YOURNAME/tool.html"`  |
-| description   | Eine kurze Beschreibung  |   |
-| developer     | Name des Werkzeug-Entwicklers  |  |
-| extension     | Dateien anhand der Datei-Erweiterung mit dem Werkzeug verknüpfen. Hier sollte etwas eindeutiges gewählt werden  | `"fib.json"` für Dateien wie `someExercise.fib.json`  |
-
-
-
-### Global (Für alle Autoren)
--   Das Werkzeug samt Werkzeug-Deklaration muss als `.zip`-Datei an einen Administrator übergeben werden
--   Der Administrator schaltet das Werkzeug nach einer kurzen Prüfung (Keine Konflikte mit anderen
-    Dateierweiterung, usw) frei. Beim nächsten Release von MathCoach ist das Werkzeug dann für alle
-    Autoren verfügbar.
-
-
-
-
-## Infos zu diesem Repository
-
-    .
-    ├── CHANGELOG.md                // Dokumentation von Änderungen der API
-    ├── examples                    // Beispiele
-    │   ├── ...
-    │   └── ...
-    ├── src                         // Hilfsfunktionen für Werkzeugentwickler
-    │   ├── index.ts                // Einstiegspunkt
-    │   └── ...
-    ├── mathcoach-api.d.ts          // Definition der API
-    ├── package.json
-    ├── package-lock.json
-    ├── README.md
-    └── tsconfig.json
-
-
-### Dokumentation erzeugen
-
-    npm install && npm run build
-
-### Release einer neuen Version
-- Version der API in der `package.json` eintragen
-- Beispiele aktualisieren
-- Release Tag setzen `git tag -a VERSION -m '...'` und pushen
-- IDE-Projekt prüfen:  `package.json`, `ide-lib.js`, ...
-
-
-
-
-
-
-
-
-
-
-
-
-
-

--
Gitblit v1.10.0-SNAPSHOT