From f2d3efb08e3242e2e43f57971ca4a2953dfb6485 Mon Sep 17 00:00:00 2001
From: jsteuer <jan.steuer.htw@gmail.com>
Date: Mon, 12 Aug 2019 12:40:29 +0200
Subject: [PATCH] add localstoraged based api for development
---
src/index.ts | 72 ++++++++++++++++++++++++++++++++++++
package.json | 3 +
2 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/package.json b/package.json
index b90adbd..acc5edb 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,7 @@
"version": "1.1.0",
"description": "API zur MathCoach IDE",
"types": "mathcoach-api.d.ts",
+ "main": "./src/index.ts",
"directories": {
"example": "examples"
},
@@ -17,4 +18,4 @@
},
"author": "jsteuer",
"license": ""
-}
+}
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..0513988
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,72 @@
+/// <reference path="../mathcoach-api.d.ts"/>
+
+namespace MathCoach {
+
+ export namespace Ide {
+ /**
+ * Offline MathCoach-API falls notwendig bereitstellen. Dabei wird das Dateisystem durch den
+ * LocalStorage des Browsers implementiert - einige Features der IDE (beispielsweise
+ * der Navigator) sind nicht verfügbar und führen keine Aktionen durch.
+ *
+ * **Hinweis**: Wenn die echte MathCoach-API der IDE verfügbar ist, hat der Aufruf
+ * dieser Funktion keinen Seiteneffekt.
+ *
+ * @param contextFileExtension Datei-Erweiterung der Kontext-Datei
+ *
+ */
+ export function enableOfflineUsageIfNecessary(contextFileExtension: string = "dummy.json"): boolean {
+
+ const fileIdentifier = (file: MathCoach.File) => `mock-file://${file.owner}@${file.part}/${file.path}`;
+ const traceMethod = (method: string, args?: any[]) => console.log(["[MC MOCK API]", " ", method, "(", (args ? args : [""]).join(","), ")"].join(""));
+
+ class MockAPI implements MathCoach.Api {
+
+ public ide: MathCoach.IdeApi = {
+ async getContextFile(): Promise<MathCoach.File> {
+ traceMethod("MC.ide.getContextFile");
+ return {
+ owner: "jdoe",
+ path: `/file.${contextFileExtension}`,
+ part: "vfs"
+ }
+ },
+ async getUserName(): Promise<string> {
+ traceMethod("MC.ide.getUserName");
+ return "jdoe"
+ },
+ fs: {
+ async readFile(file: MathCoach.File) {
+ traceMethod("MC.ide.fs.readFile", [JSON.stringify(file)]);
+ return localStorage.getItem(fileIdentifier(file)) || "";
+ },
+ async writeFile(file: MathCoach.File, text: string) {
+ traceMethod("MC.ide.fs.writeFile", [JSON.stringify(file), JSON.stringify(`...${text.length} chars...`)]);
+ return localStorage.setItem(fileIdentifier(file), text);
+ }
+ },
+ navigator: {
+ async navigateTo(link: string, forceOpen?: boolean) {
+ traceMethod("MC.ide.navigator.navigateTo", [JSON.stringify(link), JSON.stringify(forceOpen ? true : false)]);
+ },
+ async navigateToExercise(file: MathCoach.File, forceOpen?: boolean) {
+ traceMethod("MC.ide.navigator.navigateToExercise", [JSON.stringify(file), JSON.stringify(forceOpen ? true : false)]);
+ }
+ }
+ };
+ public async isReady(): Promise<boolean> {
+ traceMethod("MC.isReady()");
+ return true;
+ }
+ }
+ if (typeof MC === "undefined") {
+ console.warn("you are offline - offline api is used");
+ (window as any).MC = new MockAPI(); // fake the MathCoach-API
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ }
+
+}
--
Gitblit v1.10.0