Hong-Phuc Bui
2023-05-19 9ec93ac8d9477c671e7fbceb6c2e2fe9b13423fb
update typescript
9 files modified
20 files added
17 files deleted
61284 ■■■■ changed files
dist/es6/MathCoach.js 1 ●●●● patch | view | raw | blame | history
dist/es6/index.js 1 ●●●● patch | view | raw | blame | history
dist/es6/index.js.map 2 ●●● patch | view | raw | blame | history
dist/lib/mathcoach-ide-tool-utils.js 10 ●●●● patch | view | raw | blame | history
dist/lib/mathcoach-ide-tool-utils.js.map 2 ●●● patch | view | raw | blame | history
dist/lib/standalone-usage.html 14 ●●●●● patch | view | raw | blame | history
docs/.nojekyll 1 ●●●● patch | view | raw | blame | history
docs/assets/css/main.css 2683 ●●●●● patch | view | raw | blame | history
docs/assets/highlight.css 113 ●●●●● patch | view | raw | blame | history
docs/assets/images/icons.png patch | view | raw | blame | history
docs/assets/images/icons@2x.png patch | view | raw | blame | history
docs/assets/images/widgets.png patch | view | raw | blame | history
docs/assets/images/widgets@2x.png patch | view | raw | blame | history
docs/assets/js/main.js 1 ●●●● patch | view | raw | blame | history
docs/assets/js/search.js 3 ●●●●● patch | view | raw | blame | history
docs/assets/main.js 58 ●●●●● patch | view | raw | blame | history
docs/assets/search.js 1 ●●●● patch | view | raw | blame | history
docs/assets/style.css 1367 ●●●●● patch | view | raw | blame | history
docs/classes/Helpers.InMemoryStorage.html 203 ●●●●● patch | view | raw | blame | history
docs/classes/helpers.inmemorystorage.html 2987 ●●●●● patch | view | raw | blame | history
docs/functions/Helpers.contextFileToExerciseFile.html 79 ●●●●● patch | view | raw | blame | history
docs/functions/Helpers.createStorageBasedApi.html 87 ●●●●● patch | view | raw | blame | history
docs/functions/Helpers.enableOfflineUsageIfNecessary.html 82 ●●●●● patch | view | raw | blame | history
docs/functions/Helpers.isFile.html 73 ●●●●● patch | view | raw | blame | history
docs/globals.html 3121 ●●●●● patch | view | raw | blame | history
docs/index.html 3446 ●●●●● patch | view | raw | blame | history
docs/interfaces/MathCoach.Api.html 121 ●●●●● patch | view | raw | blame | history
docs/interfaces/MathCoach.File.html 112 ●●●●● patch | view | raw | blame | history
docs/interfaces/MathCoach.FileSystemApi.html 128 ●●●●● patch | view | raw | blame | history
docs/interfaces/MathCoach.IdeApi.html 133 ●●●●● patch | view | raw | blame | history
docs/interfaces/MathCoach.NavigatorApi.html 132 ●●●●● patch | view | raw | blame | history
docs/interfaces/mathcoach.api.html 2866 ●●●●● patch | view | raw | blame | history
docs/interfaces/mathcoach.file.html 2855 ●●●●● patch | view | raw | blame | history
docs/interfaces/mathcoach.filesystemapi.html 2878 ●●●●● patch | view | raw | blame | history
docs/interfaces/mathcoach.ideapi.html 2898 ●●●●● patch | view | raw | blame | history
docs/interfaces/mathcoach.navigatorapi.html 2880 ●●●●● patch | view | raw | blame | history
docs/modules.html 61 ●●●●● patch | view | raw | blame | history
docs/modules/Helpers.html 76 ●●●●● patch | view | raw | blame | history
docs/modules/MathCoach.html 79 ●●●●● patch | view | raw | blame | history
docs/modules/__global.html 2780 ●●●●● patch | view | raw | blame | history
docs/modules/helpers.html 2949 ●●●●● patch | view | raw | blame | history
docs/modules/mathcoach.html 2789 ●●●●● patch | view | raw | blame | history
examples/standalone-usage.html 14 ●●●●● patch | view | raw | blame | history
invalide-npm-cache.sh patch | view | raw | blame | history
package-lock.json 23183 ●●●● patch | view | raw | blame | history
package.json 15 ●●●● patch | view | raw | blame | history
dist/es6/MathCoach.js
@@ -1 +1,2 @@
export {};
//# sourceMappingURL=MathCoach.js.map
dist/es6/index.js
@@ -1,2 +1,3 @@
export * from "./MathCoach";
export * from "./Helpers";
//# sourceMappingURL=index.js.map
dist/es6/index.js.map
@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAA"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
dist/lib/mathcoach-ide-tool-utils.js
@@ -1,8 +1,8 @@
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"TGp0":[function(require,module,exports) {
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"TGp+":[function(require,module,exports) {
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
},{}],"R81e":[function(require,module,exports) {
"use strict";var e,t=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{f(n.next(e))}catch(t){o(t)}}function a(e){try{f(n.throw(e))}catch(t){o(t)}}function f(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}f((n=n.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),function(e){function i(e="dummy.json",i=("undefined"==typeof localStorage?new r:localStorage)){const o=e=>`mock-file://${e.owner}@${e.part}/${e.path}`,s=(e,t)=>console.log(["[MC MOCK API]"," ",e,"(",(t||[""]).join(","),")"].join("")),a=(e,t)=>(i,n,r=!1)=>{if(void 0===n){if(r)return;throw new Error(`missing parameter '${i}'`)}if(t(n))throw new Error(`parameter '${i}' is invalid: ${e}`)},f=a("not a string",e=>"string"!=typeof e),u=a("not a boolean",e=>"boolean"!=typeof e),d=a("not a valid file",e=>!n(e));return{ide:{getContextFile(){return t(this,void 0,void 0,function*(){return s("MC.ide.getContextFile"),{owner:"jdoe",path:`/file.${e}`,part:"vfs"}})},getUserName(){return t(this,void 0,void 0,function*(){return s("MC.ide.getUserName"),"jdoe"})},fs:{readFile(e){return t(this,void 0,void 0,function*(){return s("MC.ide.fs.readFile",[JSON.stringify(e)]),d("file",e),i.getItem(o(e))||""})},writeFile(e,n){return t(this,void 0,void 0,function*(){return s("MC.ide.fs.writeFile",[JSON.stringify(e),JSON.stringify(`...${n.length} chars...`)]),d("file",e),f("text",n),i.setItem(o(e),n)})}},navigator:{navigateTo(e,i){return t(this,void 0,void 0,function*(){s("MC.ide.navigator.navigateTo",[JSON.stringify(e),JSON.stringify(!!i)]),f("link",e),u("forceOpen",i,!0)})},navigateToExercise(e,i){return t(this,void 0,void 0,function*(){s("MC.ide.navigator.navigateToExercise",[JSON.stringify(e),JSON.stringify(!!i)]),d("file",e),u("forceOpen",i,!0)})}}},isReady(){return t(this,void 0,void 0,function*(){return s("MC.isReady"),!0})}}}function n(e){return!(!e||!e.owner||"string"!=typeof e.owner||!e.part||"string"!=typeof e.part||"vfs"!==e.part&&"www"!==e.part||!e.path||"string"!=typeof e.path||0!==e.path.indexOf("/"))}e.enableOfflineUsageIfNecessary=function(e="dummy.json"){if("undefined"==typeof MC)return console.warn("you are offline - offline api is used"),("undefined"==typeof window?{}:window).MC=i(e),!0;return!1},e.createStorageBasedApi=i,e.isFile=n,e.contextFileToExerciseFile=function(e){if(n(e))return{part:e.part,owner:e.owner,path:e.path.split(".")[0]+".groovy"};throw new Error("no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}")};class r{constructor(){this.items=new Map}get length(){return this.items.size}clear(){this.items.clear()}getItem(e){const t=this.items.get(e);return t||null}key(e){throw new Error("InMemoryStorage: key function is not implemented now")}removeItem(e){this.items.delete(e)}setItem(e,t){this.items.set(e,t)}}e.InMemoryStorage=r}(e=exports.Helpers||(exports.Helpers={}));
},{}],"QCba":[function(require,module,exports) {
"use strict";function e(e){for(var r in e)exports.hasOwnProperty(r)||(exports[r]=e[r])}Object.defineProperty(exports,"__esModule",{value:!0}),e(require("./MathCoach")),e(require("./Helpers"));
},{"./MathCoach":"TGp0","./Helpers":"R81e"}]},{},["QCba"], "MC_IDE_TOOL_UTILS")
"use strict";var e,t=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(r,o){function s(e){try{f(n.next(e))}catch(t){o(t)}}function a(e){try{f(n.throw(e))}catch(t){o(t)}}function f(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,a)}f((n=n.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.Helpers=void 0,function(e){function i(e="dummy.json",i=("undefined"==typeof localStorage?new r:localStorage)){const o=e=>`mock-file://${e.owner}@${e.part}/${e.path}`,s=(e,t)=>console.log(["[MC MOCK API]"," ",e,"(",(t||[""]).join(","),")"].join("")),a=(e,t)=>(i,n,r=!1)=>{if(void 0===n){if(r)return;throw new Error(`missing parameter '${i}'`)}if(t(n))throw new Error(`parameter '${i}' is invalid: ${e}`)},f=a("not a string",e=>"string"!=typeof e),u=a("not a boolean",e=>"boolean"!=typeof e),d=a("not a valid file",e=>!n(e));return{ide:{getContextFile(){return t(this,void 0,void 0,function*(){return s("MC.ide.getContextFile"),{owner:"jdoe",path:`/file.${e}`,part:"vfs"}})},getUserName(){return t(this,void 0,void 0,function*(){return s("MC.ide.getUserName"),"jdoe"})},fs:{readFile(e){return t(this,void 0,void 0,function*(){return s("MC.ide.fs.readFile",[JSON.stringify(e)]),d("file",e),i.getItem(o(e))||""})},writeFile(e,n){return t(this,void 0,void 0,function*(){return s("MC.ide.fs.writeFile",[JSON.stringify(e),JSON.stringify(`...${n.length} chars...`)]),d("file",e),f("text",n),i.setItem(o(e),n)})}},navigator:{navigateTo(e,i){return t(this,void 0,void 0,function*(){s("MC.ide.navigator.navigateTo",[JSON.stringify(e),JSON.stringify(!!i)]),f("link",e),u("forceOpen",i,!0)})},navigateToExercise(e,i){return t(this,void 0,void 0,function*(){s("MC.ide.navigator.navigateToExercise",[JSON.stringify(e),JSON.stringify(!!i)]),d("file",e),u("forceOpen",i,!0)})}}},isReady(){return t(this,void 0,void 0,function*(){return s("MC.isReady"),!0})}}}function n(e){return!(!e||!e.owner||"string"!=typeof e.owner||!e.part||"string"!=typeof e.part||"vfs"!==e.part&&"www"!==e.part||!e.path||"string"!=typeof e.path||0!==e.path.indexOf("/"))}e.enableOfflineUsageIfNecessary=function(e="dummy.json"){if("undefined"==typeof MC)return console.warn("you are offline - offline api is used"),("undefined"==typeof window?{}:window).MC=i(e),!0;return!1},e.createStorageBasedApi=i,e.isFile=n,e.contextFileToExerciseFile=function(e){if(n(e))return{part:e.part,owner:e.owner,path:e.path.split(".")[0]+".groovy"};throw new Error("no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}")};class r{constructor(){this.items=new Map}get length(){return this.items.size}clear(){this.items.clear()}getItem(e){const t=this.items.get(e);return t||null}key(e){throw new Error("InMemoryStorage: key function is not implemented now")}removeItem(e){this.items.delete(e)}setItem(e,t){this.items.set(e,t)}}e.InMemoryStorage=r}(e=exports.Helpers||(exports.Helpers={}));
},{}],"7QCb":[function(require,module,exports) {
"use strict";var e=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&("get"in o?t.__esModule:!o.writable&&!o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,o)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),t=this&&this.__exportStar||function(t,r){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(r,i)||e(r,t,i)};Object.defineProperty(exports,"__esModule",{value:!0}),t(require("./MathCoach"),exports),t(require("./Helpers"),exports);
},{"./MathCoach":"TGp+","./Helpers":"R81e"}]},{},["7QCb"], "MC_IDE_TOOL_UTILS")
//# sourceMappingURL=mathcoach-ide-tool-utils.js.map
dist/lib/mathcoach-ide-tool-utils.js.map
@@ -1 +1 @@
{"version":3,"sources":["Helpers.ts","index.ts"],"names":[],"mappings":"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","file":"mathcoach-ide-tool-utils.js","sourceRoot":"../../src","sourcesContent":["import { MathCoach } from \"./MathCoach\"; \n \n/**\n * Hilfsfunktionen für Werkzeug-Entwickler. Diese werden nicht durch die `ide-lib.js` \n * ausgeliefert!\n */\nexport namespace Helpers {\n\n    /**\n     * Bildet die MathCoach API nach, sodass diese auch Offline (ohne IDE) \n     * verfügbar ist. (Siehe auch `createStorageBasedApi`).\n     * \n     * **Hinweis**: Wenn die echte MathCoach-API der IDE verfügbar ist, hat der Aufruf \n     * dieser Funktion keinen Seiteneffekt.\n     * \n     * Anwendungsbeispiel \n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      Helpers.enableOfflineUsageIfNecessary();\n     *      MC.isReady() // use the api\n     * \n     * @param contextFileExtension Datei-Erweiterung der Kontext-Datei (Das Werkzeug soll \n     * jedoch unabhängig von der Endung arbeiten können)\n     * @returns Gibt `true` zurück, wenn die Offline-Funktionalität aktiviert \n     * wurde, andernfalls `false`\n     */\n    export function enableOfflineUsageIfNecessary(contextFileExtension: string = \"dummy.json\"): boolean {\n        if (typeof MC === \"undefined\") {\n            console.warn(\"you are offline - offline api is used\");\n            const WINDOW = (typeof window === \"undefined\") ? {} as any : window;\n            WINDOW.MC = createStorageBasedApi(contextFileExtension);\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Implementierung der MathCoach API zu Testzwecken.\n     * \n     * Das Dateisystem wird durch einen Storage implementiert. Einige Features der \n     * IDE (beispielsweise der Navigator) sind nicht verfügbar und führen keine Aktionen \n     * durch. Alle Aktionen werden in der Browser-Console geloggt.\n     * \n     * Anwendungsbeispiel\n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      const _MC = Helpers.createStorageBasedApi();\n     *      const contextFile = await _MC.ide.getContextFile() // use the api\n     * \n     * @param contextFileExtension Die Datei-Erweiterung der Kontext-Datei. Das Werkzeug sollte\n     *      unabhängig davon implementiert sein, da der Administrator der MathCoach IDE unter \n     *      Umständen auf eine Alternative ausweichen muss.\n     * @param storage Storage-Implementierung, die zum Speichern von Dateien verwendet werden \n     *      soll. Standardmäßig wird der `LocalStorage` des Browsers verwendet \n     *      bzw. falls nicht verfügbar der `InMemoryStorage`.\n     * \n     */\n    export function createStorageBasedApi(\n        contextFileExtension: string = \"dummy.json\",\n        storage: Storage = (typeof localStorage === \"undefined\") ? new InMemoryStorage() : localStorage\n    ): MathCoach.Api {\n        const fileIdentifier = (file: MathCoach.File) => `mock-file://${file.owner}@${file.part}/${file.path}`;\n        const traceMethod = (method: string, args?: any[]) => console.log([\"[MC MOCK API]\", \" \", method, \"(\", (args ? args : [\"\"]).join(\",\"), \")\"].join(\"\"));\n        const runtimeCheck = (errorMessage: string, isInvalid: (param: any) => boolean) => {\n            return (paramName: string, value: any, optional: boolean = false) => {\n                if (value === undefined) {\n                    if (optional) {\n                        return;\n                    } else {\n                        throw new Error(`missing parameter '${paramName}'`);\n                    }\n                }\n                if (isInvalid(value)) {\n                    throw new Error(`parameter '${paramName}' is invalid: ${errorMessage}`);\n                }\n            }\n        }\n        const runtimeCheckString = runtimeCheck(\"not a string\", v => typeof v !== \"string\");\n        const runtimeCheckBoolean = runtimeCheck(\"not a boolean\", v => typeof v !== \"boolean\");\n        const runtimeCheckFile = runtimeCheck(\"not a valid file\", v => !isFile(v));\n        const api: MathCoach.Api = {\n            ide: {\n                async getContextFile(): Promise<MathCoach.File> {\n                    traceMethod(\"MC.ide.getContextFile\");\n                    return {\n                        owner: \"jdoe\",\n                        path: `/file.${contextFileExtension}`,\n                        part: \"vfs\"\n                    }\n                },\n                async getUserName(): Promise<string> {\n                    traceMethod(\"MC.ide.getUserName\");\n                    return \"jdoe\"\n                },\n                fs: {\n                    async readFile(file: MathCoach.File) {\n                        traceMethod(\"MC.ide.fs.readFile\", [JSON.stringify(file)]);\n                        runtimeCheckFile(\"file\", file);\n                        return storage.getItem(fileIdentifier(file)) || \"\";\n                    },\n                    async writeFile(file: MathCoach.File, text: string) {\n                        traceMethod(\"MC.ide.fs.writeFile\", [JSON.stringify(file), JSON.stringify(`...${text.length} chars...`)]);\n                        runtimeCheckFile(\"file\", file);\n                        runtimeCheckString(\"text\", text);\n                        return storage.setItem(fileIdentifier(file), text);\n                    }\n                },\n                navigator: {\n                    async navigateTo(link: string, forceOpen?: boolean) {\n                        traceMethod(\"MC.ide.navigator.navigateTo\", [JSON.stringify(link), JSON.stringify(forceOpen ? true : false)]);\n                        runtimeCheckString(\"link\", link);\n                        runtimeCheckBoolean(\"forceOpen\", forceOpen, true);\n                    },\n                    async navigateToExercise(file: MathCoach.File, forceOpen?: boolean) {\n                        traceMethod(\"MC.ide.navigator.navigateToExercise\", [JSON.stringify(file), JSON.stringify(forceOpen ? true : false)]);\n                        runtimeCheckFile(\"file\", file);\n                        runtimeCheckBoolean(\"forceOpen\", forceOpen, true);\n                    }\n                }\n            },\n            async isReady() {\n                traceMethod(\"MC.isReady\");\n                return true;\n            }\n        };\n        return api;\n    }\n\n\n    /**\n     * Type Guard, der prüft, ob es sich um eine gültige `MathCoach.File`-Referenz handelt.\n     * \n     * @param maybeFile Ein beliebiges Objekt, das geprüft werden soll\n     */\n    export function isFile(maybeFile: any): maybeFile is MathCoach.File {\n        return (maybeFile ? true : false)\n            && (maybeFile.owner ? true : false) && (typeof maybeFile.owner === \"string\")\n            && (maybeFile.part ? true : false) && (typeof maybeFile.part === \"string\")\n            && (maybeFile.part === \"vfs\" || maybeFile.part === \"www\")\n            && (maybeFile.path ? true : false) && (typeof maybeFile.path === \"string\")\n            && (maybeFile.path.indexOf(\"/\") === 0)\n    }\n\n\n    /**\n     * Bildet die Kontext-Datei auf eine Aufgaben-Datei mit selben Namen ab.\n     * \n     * Ein Werkzeug speichert sein Datenmodell in der sogenannten Kontext-Datei. Soll \n     * eine MathCoach-Aufgabe generiert werden, ist es sinnvoll, wenn die Aufgaben-Datei\n     * den selben Namen wie die Kontext-Datei trägt (natürlich mit anderer Dateiendung).\n     * \n     * Beispielsweise wird eine Dateireferenz mit dem Pfad `\"/path/to/myExercise.mcq.json\"` \n     * auf eine Dateireferenz mit dem Pfad `\"/path/to/myExercise.groovy\"` abgebildet.\n     * \n     * Anwendungsbeispiel\n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      const contextFile: MathCoach.File = await MC.ide.getContextFile();\n     *      const exerciseFile: MathCoach.File = Helpers.contextFileToExerciseFile(contextFile);\n     */\n    export function contextFileToExerciseFile(contextFile: MathCoach.File): MathCoach.File {\n        if (isFile(contextFile)) {\n            let exerciseFile: MathCoach.File = {\n                part: contextFile.part,\n                owner: contextFile.owner,\n                path: contextFile.path.split(\".\")[0] + \".groovy\"\n            };\n            return exerciseFile;\n        } else {\n            throw new Error(\"no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}\")\n        }\n    }\n\n    /**\n     * Storage auf Basis einer Map. Kann z.B. bei Unit-Tests verwendet\n     * werden, beid denen der LocalStorage nicht verfügbar ist.\n     */\n    export class InMemoryStorage implements Storage {\n\n        private readonly items: Map<string, string> = new Map();\n\n        get length(): number {\n            return this.items.size;\n        }\n        clear(): void {\n            this.items.clear();\n        }\n        getItem(key: string): string | null {\n            const value = this.items.get(key);\n            return value ? value : null;\n        }\n        key(_index: number): string | null {\n            throw new Error(\"InMemoryStorage: key function is not implemented now\");\n        }\n        removeItem(key: string): void {\n            this.items.delete(key);\n        }\n        setItem(key: string, value: string): void {\n            this.items.set(key, value);\n        }\n\n    }\n\n}\n\n","export * from \"./MathCoach\"\nexport * from \"./Helpers\"\n"]}
{"version":3,"sources":["Helpers.ts","index.ts"],"names":[],"mappings":"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","file":"mathcoach-ide-tool-utils.js","sourceRoot":"../../src","sourcesContent":["import { MathCoach } from \"./MathCoach\"; \n \n/**\n * Hilfsfunktionen für Werkzeug-Entwickler. Diese werden nicht durch die `ide-lib.js` \n * ausgeliefert!\n */\nexport namespace Helpers {\n\n    /**\n     * Bildet die MathCoach API nach, sodass diese auch Offline (ohne IDE) \n     * verfügbar ist. (Siehe auch `createStorageBasedApi`).\n     * \n     * **Hinweis**: Wenn die echte MathCoach-API der IDE verfügbar ist, hat der Aufruf \n     * dieser Funktion keinen Seiteneffekt.\n     * \n     * Anwendungsbeispiel \n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      Helpers.enableOfflineUsageIfNecessary();\n     *      MC.isReady() // use the api\n     * \n     * @param contextFileExtension Datei-Erweiterung der Kontext-Datei (Das Werkzeug soll \n     * jedoch unabhängig von der Endung arbeiten können)\n     * @returns Gibt `true` zurück, wenn die Offline-Funktionalität aktiviert \n     * wurde, andernfalls `false`\n     */\n    export function enableOfflineUsageIfNecessary(contextFileExtension: string = \"dummy.json\"): boolean {\n        if (typeof MC === \"undefined\") {\n            console.warn(\"you are offline - offline api is used\");\n            const WINDOW = (typeof window === \"undefined\") ? {} as any : window;\n            WINDOW.MC = createStorageBasedApi(contextFileExtension);\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Implementierung der MathCoach API zu Testzwecken.\n     * \n     * Das Dateisystem wird durch einen Storage implementiert. Einige Features der \n     * IDE (beispielsweise der Navigator) sind nicht verfügbar und führen keine Aktionen \n     * durch. Alle Aktionen werden in der Browser-Console geloggt.\n     * \n     * Anwendungsbeispiel\n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      const _MC = Helpers.createStorageBasedApi();\n     *      const contextFile = await _MC.ide.getContextFile() // use the api\n     * \n     * @param contextFileExtension Die Datei-Erweiterung der Kontext-Datei. Das Werkzeug sollte\n     *      unabhängig davon implementiert sein, da der Administrator der MathCoach IDE unter \n     *      Umständen auf eine Alternative ausweichen muss.\n     * @param storage Storage-Implementierung, die zum Speichern von Dateien verwendet werden \n     *      soll. Standardmäßig wird der `LocalStorage` des Browsers verwendet \n     *      bzw. falls nicht verfügbar der `InMemoryStorage`.\n     * \n     */\n    export function createStorageBasedApi(\n        contextFileExtension: string = \"dummy.json\",\n        storage: Storage = (typeof localStorage === \"undefined\") ? new InMemoryStorage() : localStorage\n    ): MathCoach.Api {\n        const fileIdentifier = (file: MathCoach.File) => `mock-file://${file.owner}@${file.part}/${file.path}`;\n        const traceMethod = (method: string, args?: any[]) => console.log([\"[MC MOCK API]\", \" \", method, \"(\", (args ? args : [\"\"]).join(\",\"), \")\"].join(\"\"));\n        const runtimeCheck = (errorMessage: string, isInvalid: (param: any) => boolean) => {\n            return (paramName: string, value: any, optional: boolean = false) => {\n                if (value === undefined) {\n                    if (optional) {\n                        return;\n                    } else {\n                        throw new Error(`missing parameter '${paramName}'`);\n                    }\n                }\n                if (isInvalid(value)) {\n                    throw new Error(`parameter '${paramName}' is invalid: ${errorMessage}`);\n                }\n            }\n        }\n        const runtimeCheckString = runtimeCheck(\"not a string\", v => typeof v !== \"string\");\n        const runtimeCheckBoolean = runtimeCheck(\"not a boolean\", v => typeof v !== \"boolean\");\n        const runtimeCheckFile = runtimeCheck(\"not a valid file\", v => !isFile(v));\n        const api: MathCoach.Api = {\n            ide: {\n                async getContextFile(): Promise<MathCoach.File> {\n                    traceMethod(\"MC.ide.getContextFile\");\n                    return {\n                        owner: \"jdoe\",\n                        path: `/file.${contextFileExtension}`,\n                        part: \"vfs\"\n                    }\n                },\n                async getUserName(): Promise<string> {\n                    traceMethod(\"MC.ide.getUserName\");\n                    return \"jdoe\"\n                },\n                fs: {\n                    async readFile(file: MathCoach.File) {\n                        traceMethod(\"MC.ide.fs.readFile\", [JSON.stringify(file)]);\n                        runtimeCheckFile(\"file\", file);\n                        return storage.getItem(fileIdentifier(file)) || \"\";\n                    },\n                    async writeFile(file: MathCoach.File, text: string) {\n                        traceMethod(\"MC.ide.fs.writeFile\", [JSON.stringify(file), JSON.stringify(`...${text.length} chars...`)]);\n                        runtimeCheckFile(\"file\", file);\n                        runtimeCheckString(\"text\", text);\n                        return storage.setItem(fileIdentifier(file), text);\n                    }\n                },\n                navigator: {\n                    async navigateTo(link: string, forceOpen?: boolean) {\n                        traceMethod(\"MC.ide.navigator.navigateTo\", [JSON.stringify(link), JSON.stringify(forceOpen ? true : false)]);\n                        runtimeCheckString(\"link\", link);\n                        runtimeCheckBoolean(\"forceOpen\", forceOpen, true);\n                    },\n                    async navigateToExercise(file: MathCoach.File, forceOpen?: boolean) {\n                        traceMethod(\"MC.ide.navigator.navigateToExercise\", [JSON.stringify(file), JSON.stringify(forceOpen ? true : false)]);\n                        runtimeCheckFile(\"file\", file);\n                        runtimeCheckBoolean(\"forceOpen\", forceOpen, true);\n                    }\n                }\n            },\n            async isReady() {\n                traceMethod(\"MC.isReady\");\n                return true;\n            }\n        };\n        return api;\n    }\n\n\n    /**\n     * Type Guard, der prüft, ob es sich um eine gültige `MathCoach.File`-Referenz handelt.\n     * \n     * @param maybeFile Ein beliebiges Objekt, das geprüft werden soll\n     */\n    export function isFile(maybeFile: any): maybeFile is MathCoach.File {\n        return (maybeFile ? true : false)\n            && (maybeFile.owner ? true : false) && (typeof maybeFile.owner === \"string\")\n            && (maybeFile.part ? true : false) && (typeof maybeFile.part === \"string\")\n            && (maybeFile.part === \"vfs\" || maybeFile.part === \"www\")\n            && (maybeFile.path ? true : false) && (typeof maybeFile.path === \"string\")\n            && (maybeFile.path.indexOf(\"/\") === 0)\n    }\n\n\n    /**\n     * Bildet die Kontext-Datei auf eine Aufgaben-Datei mit selben Namen ab.\n     * \n     * Ein Werkzeug speichert sein Datenmodell in der sogenannten Kontext-Datei. Soll \n     * eine MathCoach-Aufgabe generiert werden, ist es sinnvoll, wenn die Aufgaben-Datei\n     * den selben Namen wie die Kontext-Datei trägt (natürlich mit anderer Dateiendung).\n     * \n     * Beispielsweise wird eine Dateireferenz mit dem Pfad `\"/path/to/myExercise.mcq.json\"` \n     * auf eine Dateireferenz mit dem Pfad `\"/path/to/myExercise.groovy\"` abgebildet.\n     * \n     * Anwendungsbeispiel\n     * \n     *      import { Helpers } from \"@mathcoach/ide-api\";\n     *      const contextFile: MathCoach.File = await MC.ide.getContextFile();\n     *      const exerciseFile: MathCoach.File = Helpers.contextFileToExerciseFile(contextFile);\n     */\n    export function contextFileToExerciseFile(contextFile: MathCoach.File): MathCoach.File {\n        if (isFile(contextFile)) {\n            let exerciseFile: MathCoach.File = {\n                part: contextFile.part,\n                owner: contextFile.owner,\n                path: contextFile.path.split(\".\")[0] + \".groovy\"\n            };\n            return exerciseFile;\n        } else {\n            throw new Error(\"no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}\")\n        }\n    }\n\n    /**\n     * Storage auf Basis einer Map. Kann z.B. bei Unit-Tests verwendet\n     * werden, beid denen der LocalStorage nicht verfügbar ist.\n     */\n    export class InMemoryStorage implements Storage {\n\n        private readonly items: Map<string, string> = new Map();\n\n        get length(): number {\n            return this.items.size;\n        }\n        clear(): void {\n            this.items.clear();\n        }\n        getItem(key: string): string | null {\n            const value = this.items.get(key);\n            return value ? value : null;\n        }\n        key(_index: number): string | null {\n            throw new Error(\"InMemoryStorage: key function is not implemented now\");\n        }\n        removeItem(key: string): void {\n            this.items.delete(key);\n        }\n        setItem(key: string, value: string): void {\n            this.items.set(key, value);\n        }\n\n    }\n\n}\n\n","export * from \"./MathCoach\"\nexport * from \"./Helpers\"\n"]}
dist/lib/standalone-usage.html
New file
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MC IDE Example</title>
</head>
<body>
<script src="mathcoach-ide-tool-utils.js"></script>
<script>
    console.log(window.MC_IDE_TOOL_UTILS);
</script>
</body>
</html>
docs/.nojekyll
New file
@@ -0,0 +1 @@
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
docs/assets/css/main.css
File was deleted
docs/assets/highlight.css
New file
@@ -0,0 +1,113 @@
:root {
    --light-hl-0: #000000;
    --dark-hl-0: #D4D4D4;
    --light-hl-1: #001080;
    --dark-hl-1: #9CDCFE;
    --light-hl-2: #A31515;
    --dark-hl-2: #CE9178;
    --light-hl-3: #AF00DB;
    --dark-hl-3: #C586C0;
    --light-hl-4: #0000FF;
    --dark-hl-4: #569CD6;
    --light-hl-5: #0070C1;
    --dark-hl-5: #4FC1FF;
    --light-hl-6: #008000;
    --dark-hl-6: #6A9955;
    --light-hl-7: #795E26;
    --dark-hl-7: #DCDCAA;
    --light-hl-8: #267F99;
    --dark-hl-8: #4EC9B0;
    --light-hl-9: #800000;
    --dark-hl-9: #808080;
    --light-hl-10: #800000;
    --dark-hl-10: #569CD6;
    --light-hl-11: #E50000;
    --dark-hl-11: #9CDCFE;
    --light-hl-12: #098658;
    --dark-hl-12: #B5CEA8;
    --light-code-background: #FFFFFF;
    --dark-code-background: #1E1E1E;
}
@media (prefers-color-scheme: light) { :root {
    --hl-0: var(--light-hl-0);
    --hl-1: var(--light-hl-1);
    --hl-2: var(--light-hl-2);
    --hl-3: var(--light-hl-3);
    --hl-4: var(--light-hl-4);
    --hl-5: var(--light-hl-5);
    --hl-6: var(--light-hl-6);
    --hl-7: var(--light-hl-7);
    --hl-8: var(--light-hl-8);
    --hl-9: var(--light-hl-9);
    --hl-10: var(--light-hl-10);
    --hl-11: var(--light-hl-11);
    --hl-12: var(--light-hl-12);
    --code-background: var(--light-code-background);
} }
@media (prefers-color-scheme: dark) { :root {
    --hl-0: var(--dark-hl-0);
    --hl-1: var(--dark-hl-1);
    --hl-2: var(--dark-hl-2);
    --hl-3: var(--dark-hl-3);
    --hl-4: var(--dark-hl-4);
    --hl-5: var(--dark-hl-5);
    --hl-6: var(--dark-hl-6);
    --hl-7: var(--dark-hl-7);
    --hl-8: var(--dark-hl-8);
    --hl-9: var(--dark-hl-9);
    --hl-10: var(--dark-hl-10);
    --hl-11: var(--dark-hl-11);
    --hl-12: var(--dark-hl-12);
    --code-background: var(--dark-code-background);
} }
:root[data-theme='light'] {
    --hl-0: var(--light-hl-0);
    --hl-1: var(--light-hl-1);
    --hl-2: var(--light-hl-2);
    --hl-3: var(--light-hl-3);
    --hl-4: var(--light-hl-4);
    --hl-5: var(--light-hl-5);
    --hl-6: var(--light-hl-6);
    --hl-7: var(--light-hl-7);
    --hl-8: var(--light-hl-8);
    --hl-9: var(--light-hl-9);
    --hl-10: var(--light-hl-10);
    --hl-11: var(--light-hl-11);
    --hl-12: var(--light-hl-12);
    --code-background: var(--light-code-background);
}
:root[data-theme='dark'] {
    --hl-0: var(--dark-hl-0);
    --hl-1: var(--dark-hl-1);
    --hl-2: var(--dark-hl-2);
    --hl-3: var(--dark-hl-3);
    --hl-4: var(--dark-hl-4);
    --hl-5: var(--dark-hl-5);
    --hl-6: var(--dark-hl-6);
    --hl-7: var(--dark-hl-7);
    --hl-8: var(--dark-hl-8);
    --hl-9: var(--dark-hl-9);
    --hl-10: var(--dark-hl-10);
    --hl-11: var(--dark-hl-11);
    --hl-12: var(--dark-hl-12);
    --code-background: var(--dark-code-background);
}
.hl-0 { color: var(--hl-0); }
.hl-1 { color: var(--hl-1); }
.hl-2 { color: var(--hl-2); }
.hl-3 { color: var(--hl-3); }
.hl-4 { color: var(--hl-4); }
.hl-5 { color: var(--hl-5); }
.hl-6 { color: var(--hl-6); }
.hl-7 { color: var(--hl-7); }
.hl-8 { color: var(--hl-8); }
.hl-9 { color: var(--hl-9); }
.hl-10 { color: var(--hl-10); }
.hl-11 { color: var(--hl-11); }
.hl-12 { color: var(--hl-12); }
pre, code { background: var(--code-background); }
docs/assets/images/icons.png
Binary files differ
docs/assets/images/icons@2x.png
Binary files differ
docs/assets/images/widgets.png
Binary files differ
docs/assets/images/widgets@2x.png
Binary files differ
docs/assets/js/main.js
File was deleted
docs/assets/js/search.js
File was deleted
docs/assets/main.js
New file
@@ -0,0 +1,58 @@
"use strict";
"use strict";(()=>{var Se=Object.create;var re=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,Qe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ie=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Te(e))!Qe.call(t,i)&&i!==r&&re(t,i,{get:()=>e[i],enumerable:!(n=we(e,i))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?Se(ke(t)):{},Ie(e||!t||!t.__esModule?re(r,"default",{value:t,enumerable:!0}):r,t));var ae=Pe((se,oe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var s=n[i],o=e[s];if(Array.isArray(o)){r[s]=o.slice();continue}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){r[s]=o;continue}throw new TypeError("clone is not deep and does not support nested objects")}return r},t.FieldRef=function(e,r,n){this.docRef=e,this.fieldName=r,this._stringValue=n},t.FieldRef.joiner="/",t.FieldRef.fromString=function(e){var r=e.indexOf(t.FieldRef.joiner);if(r===-1)throw"malformed field ref string";var n=e.slice(0,r),i=e.slice(r+1);return new t.FieldRef(i,n,e)},t.FieldRef.prototype.toString=function(){return this._stringValue==null&&(this._stringValue=this.fieldName+t.FieldRef.joiner+this.docRef),this._stringValue};t.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var r=0;r<this.length;r++)this.elements[e[r]]=!0}else this.length=0},t.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},t.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},t.Set.prototype.contains=function(e){return!!this.elements[e]},t.Set.prototype.intersect=function(e){var r,n,i,s=[];if(e===t.Set.complete)return this;if(e===t.Set.empty)return e;this.length<e.length?(r=this,n=e):(r=e,n=this),i=Object.keys(r.elements);for(var o=0;o<i.length;o++){var a=i[o];a in n.elements&&s.push(a)}return new t.Set(s)},t.Set.prototype.union=function(e){return e===t.Set.complete?t.Set.complete:e===t.Set.empty?this:new t.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},t.idf=function(e,r){var n=0;for(var i in e)i!="_index"&&(n+=Object.keys(e[i]).length);var s=(r-n+.5)/(n+.5);return Math.log(1+Math.abs(s))},t.Token=function(e,r){this.str=e||"",this.metadata=r||{}},t.Token.prototype.toString=function(){return this.str},t.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},t.Token.prototype.clone=function(e){return e=e||function(r){return r},new t.Token(e(this.str,this.metadata),this.metadata)};t.tokenizer=function(e,r){if(e==null||e==null)return[];if(Array.isArray(e))return e.map(function(m){return new t.Token(t.utils.asString(m).toLowerCase(),t.utils.clone(r))});for(var n=e.toString().toLowerCase(),i=n.length,s=[],o=0,a=0;o<=i;o++){var l=n.charAt(o),u=o-a;if(l.match(t.tokenizer.separator)||o==i){if(u>0){var d=t.utils.clone(r)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(n.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index.
`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n<r;n++){for(var i=this._stack[n],s=[],o=0;o<e.length;o++){var a=i(e[o],o,e);if(!(a==null||a===""))if(Array.isArray(a))for(var l=0;l<a.length;l++)s.push(a[l]);else s.push(a)}e=s}return e},t.Pipeline.prototype.runString=function(e,r){var n=new t.Token(e,r);return this.run([n]).map(function(i){return i.toString()})},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})};t.Vector=function(e){this._magnitude=0,this.elements=e||[]},t.Vector.prototype.positionForIndex=function(e){if(this.elements.length==0)return 0;for(var r=0,n=this.elements.length/2,i=n-r,s=Math.floor(i/2),o=this.elements[s*2];i>1&&(o<e&&(r=s),o>e&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(o<e)return(s+1)*2},t.Vector.prototype.insert=function(e,r){this.upsert(e,r,function(){throw"duplicate index"})},t.Vector.prototype.upsert=function(e,r,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],r):this.elements.splice(i,0,e,r)},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,r=this.elements.length,n=1;n<r;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},t.Vector.prototype.dot=function(e){for(var r=0,n=this.elements,i=e.elements,s=n.length,o=i.length,a=0,l=0,u=0,d=0;u<s&&d<o;)a=n[u],l=i[d],a<l?u+=2:a>l?d+=2:a==l&&(r+=n[u+1]*i[d+1],u+=2,d+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r<this.elements.length;r+=2,n++)e[n]=this.elements[r];return e},t.Vector.prototype.toJSON=function(){return this.elements};t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",s=n+"[^aeiouy]*",o=i+"[aeiou]*",a="^("+s+")?"+o+s,l="^("+s+")?"+o+s+"("+o+")?$",u="^("+s+")?"+o+s+o+s,d="^("+s+")?"+i,m=new RegExp(a),y=new RegExp(u),b=new RegExp(l),g=new RegExp(d),E=/^(.+?)(ss|i)es$/,f=/^(.+?)([^s])s$/,p=/^(.+?)eed$/,w=/^(.+?)(ed|ing)$/,S=/.$/,k=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),B=new RegExp("^"+s+i+"[^aeiouwxy]$"),A=/^(.+?[^aeiou])y$/,j=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,q=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,V=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,$=/^(.+?)(s|t)(ion)$/,I=/^(.+?)e$/,z=/ll$/,W=new RegExp("^"+s+i+"[^aeiouwxy]$"),H=function(c){var v,C,T,h,x,O,F;if(c.length<3)return c;if(T=c.substr(0,1),T=="y"&&(c=T.toUpperCase()+c.substr(1)),h=E,x=f,h.test(c)?c=c.replace(h,"$1$2"):x.test(c)&&(c=c.replace(x,"$1$2")),h=p,x=w,h.test(c)){var L=h.exec(c);h=m,h.test(L[1])&&(h=S,c=c.replace(h,""))}else if(x.test(c)){var L=x.exec(c);v=L[1],x=g,x.test(v)&&(c=v,x=k,O=_,F=B,x.test(c)?c=c+"e":O.test(c)?(h=S,c=c.replace(h,"")):F.test(c)&&(c=c+"e"))}if(h=A,h.test(c)){var L=h.exec(c);v=L[1],c=v+"i"}if(h=j,h.test(c)){var L=h.exec(c);v=L[1],C=L[2],h=m,h.test(v)&&(c=v+e[C])}if(h=q,h.test(c)){var L=h.exec(c);v=L[1],C=L[2],h=m,h.test(v)&&(c=v+r[C])}if(h=V,x=$,h.test(c)){var L=h.exec(c);v=L[1],h=y,h.test(v)&&(c=v)}else if(x.test(c)){var L=x.exec(c);v=L[1]+L[2],x=y,x.test(v)&&(c=v)}if(h=I,h.test(c)){var L=h.exec(c);v=L[1],h=y,x=b,O=W,(h.test(v)||x.test(v)&&!O.test(v))&&(c=v)}return h=z,x=y,h.test(c)&&x.test(c)&&(h=S,c=c.replace(h,"")),T=="y"&&(c=T.toLowerCase()+c.substr(1)),c};return function(R){return R.update(H)}}(),t.Pipeline.registerFunction(t.stemmer,"stemmer");t.generateStopWordFilter=function(e){var r=e.reduce(function(n,i){return n[i]=i,n},{});return function(n){if(n&&r[n.toString()]!==n.toString())return n}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter");t.trimmer=function(e){return e.update(function(r){return r.replace(/^\W+/,"").replace(/\W+$/,"")})},t.Pipeline.registerFunction(t.trimmer,"trimmer");t.TokenSet=function(){this.final=!1,this.edges={},this.id=t.TokenSet._nextId,t.TokenSet._nextId+=1},t.TokenSet._nextId=1,t.TokenSet.fromArray=function(e){for(var r=new t.TokenSet.Builder,n=0,i=e.length;n<i;n++)r.insert(e[n]);return r.finish(),r.root},t.TokenSet.fromClause=function(e){return"editDistance"in e?t.TokenSet.fromFuzzyString(e.term,e.editDistance):t.TokenSet.fromString(e.term)},t.TokenSet.fromFuzzyString=function(e,r){for(var n=new t.TokenSet,i=[{node:n,editsRemaining:r,str:e}];i.length;){var s=i.pop();if(s.str.length>0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),y;m in s.node.edges?y=s.node.edges[m]:(y=new t.TokenSet,s.node.edges[m]=y),s.str.length==1&&(y.final=!0),i.push({node:y,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if(o=="*")r.edges[o]=r,r.final=a;else{var l=new t.TokenSet;l.final=a,r.edges[o]=l,r=l}}return n},t.TokenSet.prototype.toArray=function(){for(var e=[],r=[{prefix:"",node:this}];r.length;){var n=r.pop(),i=Object.keys(n.node.edges),s=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<s;o++){var a=i[o];r.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},t.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",r=Object.keys(this.edges).sort(),n=r.length,i=0;i<n;i++){var s=r[i],o=this.edges[s];e=e+s+o.id}return e},t.TokenSet.prototype.intersect=function(e){for(var r=new t.TokenSet,n=void 0,i=[{qNode:e,output:r,node:this}];i.length;){n=i.pop();for(var s=Object.keys(n.qNode.edges),o=s.length,a=Object.keys(n.node.edges),l=a.length,u=0;u<o;u++)for(var d=s[u],m=0;m<l;m++){var y=a[m];if(y==d||d=="*"){var b=n.node.edges[y],g=n.qNode.edges[d],E=b.final&&g.final,f=void 0;y in n.output.edges?(f=n.output.edges[y],f.final=f.final||E):(f=new t.TokenSet,f.final=E,n.output.edges[y]=f),i.push({qNode:g,output:f,node:b})}}}return r},t.TokenSet.Builder=function(){this.previousWord="",this.root=new t.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},t.TokenSet.Builder.prototype.insert=function(e){var r,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),this.uncheckedNodes.length==0?r=this.root:r=this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var s=new t.TokenSet,o=e[i];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=e},t.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},t.TokenSet.Builder.prototype.minimize=function(e){for(var r=this.uncheckedNodes.length-1;r>=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l<this.fields.length;l++)i[this.fields[l]]=new t.Vector;e.call(r,r);for(var l=0;l<r.clauses.length;l++){var u=r.clauses[l],d=null,m=t.Set.empty;u.usePipeline?d=this.pipeline.runString(u.term,{fields:u.fields}):d=[u.term];for(var y=0;y<d.length;y++){var b=d[y];u.term=b;var g=t.TokenSet.fromClause(u),E=this.tokenSet.intersect(g).toArray();if(E.length===0&&u.presence===t.Query.presence.REQUIRED){for(var f=0;f<u.fields.length;f++){var p=u.fields[f];o[p]=t.Set.empty}break}for(var w=0;w<E.length;w++)for(var S=E[w],k=this.invertedIndex[S],_=k._index,f=0;f<u.fields.length;f++){var p=u.fields[f],B=k[p],A=Object.keys(B),j=S+"/"+p,q=new t.Set(A);if(u.presence==t.Query.presence.REQUIRED&&(m=m.union(q),o[p]===void 0&&(o[p]=t.Set.complete)),u.presence==t.Query.presence.PROHIBITED){a[p]===void 0&&(a[p]=t.Set.empty),a[p]=a[p].union(q);continue}if(i[p].upsert(_,u.boost,function(Ee,be){return Ee+be}),!s[j]){for(var V=0;V<A.length;V++){var $=A[V],I=new t.FieldRef($,p),z=B[$],W;(W=n[I])===void 0?n[I]=new t.MatchData(S,p,z):W.add(S,p,z)}s[j]=!0}}}if(u.presence===t.Query.presence.REQUIRED)for(var f=0;f<u.fields.length;f++){var p=u.fields[f];o[p]=o[p].intersect(m)}}for(var H=t.Set.complete,R=t.Set.empty,l=0;l<this.fields.length;l++){var p=this.fields[l];o[p]&&(H=H.intersect(o[p])),a[p]&&(R=R.union(a[p]))}var c=Object.keys(n),v=[],C=Object.create(null);if(r.isNegated()){c=Object.keys(this.fieldVectors);for(var l=0;l<c.length;l++){var I=c[l],T=t.FieldRef.fromString(I);n[I]=new t.MatchData}}for(var l=0;l<c.length;l++){var T=t.FieldRef.fromString(c[l]),h=T.docRef;if(H.contains(h)&&!R.contains(h)){var x=this.fieldVectors[T],O=i[T.fieldName].similarity(x),F;if((F=C[h])!==void 0)F.score+=O,F.matchData.combine(n[T]);else{var L={ref:h,score:O,matchData:n[T]};C[h]=L,v.push(L)}}}return v.sort(function(xe,Le){return Le.score-xe.score})},t.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(n){return[n,this.invertedIndex[n]]},this),r=Object.keys(this.fieldVectors).map(function(n){return[n,this.fieldVectors[n].toJSON()]},this);return{version:t.version,fields:this.fields,fieldVectors:r,invertedIndex:e,pipeline:this.pipeline.toJSON()}},t.Index.load=function(e){var r={},n={},i=e.fieldVectors,s=Object.create(null),o=e.invertedIndex,a=new t.TokenSet.Builder,l=t.Pipeline.load(e.pipeline);e.version!=t.version&&t.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+t.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var d=i[u],m=d[0],y=d[1];n[m]=new t.Vector(y)}for(var u=0;u<o.length;u++){var d=o[u],b=d[0],g=d[1];a.insert(b),s[b]=g}return a.finish(),r.fields=e.fields,r.fieldVectors=n,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=l,new t.Index(r)};t.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=t.tokenizer,this.pipeline=new t.Pipeline,this.searchPipeline=new t.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},t.Builder.prototype.ref=function(e){this._ref=e},t.Builder.prototype.field=function(e,r){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=r||{}},t.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s<i.length;s++){var o=i[s],a=this._fields[o].extractor,l=a?a(e):e[o],u=this.tokenizer(l,{fields:[o]}),d=this.pipeline.run(u),m=new t.FieldRef(n,o),y=Object.create(null);this.fieldTermFrequencies[m]=y,this.fieldLengths[m]=0,this.fieldLengths[m]+=d.length;for(var b=0;b<d.length;b++){var g=d[b];if(y[g]==null&&(y[g]=0),y[g]+=1,this.invertedIndex[g]==null){var E=Object.create(null);E._index=this.termIndex,this.termIndex+=1;for(var f=0;f<i.length;f++)E[i[f]]=Object.create(null);this.invertedIndex[g]=E}this.invertedIndex[g][o][n]==null&&(this.invertedIndex[g][o][n]=Object.create(null));for(var p=0;p<this.metadataWhitelist.length;p++){var w=this.metadataWhitelist[p],S=g.metadata[w];this.invertedIndex[g][o][n][w]==null&&(this.invertedIndex[g][o][n][w]=[]),this.invertedIndex[g][o][n][w].push(S)}}}},t.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),r=e.length,n={},i={},s=0;s<r;s++){var o=t.FieldRef.fromString(e[s]),a=o.fieldName;i[a]||(i[a]=0),i[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}for(var l=Object.keys(this._fields),s=0;s<l.length;s++){var u=l[s];n[u]=n[u]/i[u]}this.averageFieldLength=n},t.Builder.prototype.createFieldVectors=function(){for(var e={},r=Object.keys(this.fieldTermFrequencies),n=r.length,i=Object.create(null),s=0;s<n;s++){for(var o=t.FieldRef.fromString(r[s]),a=o.fieldName,l=this.fieldLengths[o],u=new t.Vector,d=this.fieldTermFrequencies[o],m=Object.keys(d),y=m.length,b=this._fields[a].boost||1,g=this._documents[o.docRef].boost||1,E=0;E<y;E++){var f=m[E],p=d[f],w=this.invertedIndex[f]._index,S,k,_;i[f]===void 0?(S=t.idf(this.invertedIndex[f],this.documentCount),i[f]=S):S=i[f],k=S*((this._k1+1)*p)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[a]))+p),k*=b,k*=g,_=Math.round(k*1e3)/1e3,u.insert(w,_)}e[o]=u}this.fieldVectors=e},t.Builder.prototype.createTokenSet=function(){this.tokenSet=t.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},t.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new t.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},t.Builder.prototype.use=function(e){var r=Array.prototype.slice.call(arguments,1);r.unshift(this),e.apply(this,r)},t.MatchData=function(e,r,n){for(var i=Object.create(null),s=Object.keys(n||{}),o=0;o<s.length;o++){var a=s[o];i[a]=n[a].slice()}this.metadata=Object.create(null),e!==void 0&&(this.metadata[e]=Object.create(null),this.metadata[e][r]=i)},t.MatchData.prototype.combine=function(e){for(var r=Object.keys(e.metadata),n=0;n<r.length;n++){var i=r[n],s=Object.keys(e.metadata[i]);this.metadata[i]==null&&(this.metadata[i]=Object.create(null));for(var o=0;o<s.length;o++){var a=s[o],l=Object.keys(e.metadata[i][a]);this.metadata[i][a]==null&&(this.metadata[i][a]=Object.create(null));for(var u=0;u<l.length;u++){var d=l[u];this.metadata[i][a][d]==null?this.metadata[i][a][d]=e.metadata[i][a][d]:this.metadata[i][a][d]=this.metadata[i][a][d].concat(e.metadata[i][a][d])}}}},t.MatchData.prototype.add=function(e,r,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][r]=n;return}if(!(r in this.metadata[e])){this.metadata[e][r]=n;return}for(var i=Object.keys(n),s=0;s<i.length;s++){var o=i[s];o in this.metadata[e][r]?this.metadata[e][r][o]=this.metadata[e][r][o].concat(n[o]):this.metadata[e][r][o]=n[o]}},t.Query=function(e){this.clauses=[],this.allFields=e},t.Query.wildcard=new String("*"),t.Query.wildcard.NONE=0,t.Query.wildcard.LEADING=1,t.Query.wildcard.TRAILING=2,t.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},t.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=t.Query.wildcard.NONE),e.wildcard&t.Query.wildcard.LEADING&&e.term.charAt(0)!=t.Query.wildcard&&(e.term="*"+e.term),e.wildcard&t.Query.wildcard.TRAILING&&e.term.slice(-1)!=t.Query.wildcard&&(e.term=""+e.term+"*"),"presence"in e||(e.presence=t.Query.presence.OPTIONAL),this.clauses.push(e),this},t.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=t.Query.presence.PROHIBITED)return!1;return!0},t.Query.prototype.term=function(e,r){if(Array.isArray(e))return e.forEach(function(i){this.term(i,t.utils.clone(r))},this),this;var n=r||{};return n.term=e.toString(),this.clause(n),this},t.QueryParseError=function(e,r,n){this.name="QueryParseError",this.message=e,this.start=r,this.end=n},t.QueryParseError.prototype=new Error,t.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},t.QueryLexer.prototype.run=function(){for(var e=t.QueryLexer.lexText;e;)e=e(this)},t.QueryLexer.prototype.sliceString=function(){for(var e=[],r=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(r,n)),r=n+1;return e.push(this.str.slice(r,this.pos)),this.escapeCharPositions.length=0,e.join("")},t.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},t.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},t.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos<this.length},t.QueryLexer.EOS="EOS",t.QueryLexer.FIELD="FIELD",t.QueryLexer.TERM="TERM",t.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",t.QueryLexer.BOOST="BOOST",t.QueryLexer.PRESENCE="PRESENCE",t.QueryLexer.lexField=function(e){return e.backup(),e.emit(t.QueryLexer.FIELD),e.ignore(),t.QueryLexer.lexText},t.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof se=="object"?oe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ne=[];function G(t,e){ne.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){ne.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n,app:this}),n.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),r=e?.parentElement;for(;r&&!r.classList.contains(".tsd-navigation");)r instanceof HTMLDetailsElement&&(r.open=!0),r=r.parentElement;if(e){let n=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=n}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let r=e.parentElement;for(;r&&r.tagName!=="SECTION";)r=r.parentElement;if(r&&r.offsetParent==null){this.alwaysVisibleMember=r,r.classList.add("always-visible");let n=document.createElement("p");n.classList.add("warning"),n.textContent="This member is normally hidden due to your filter settings.",r.prepend(n)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let r;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(r),r=setTimeout(()=>{e.classList.remove("visible"),r=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let r;return()=>{clearTimeout(r),r=setTimeout(()=>t(),e)}};var ce=Ce(ae());function de(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("tsd-search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Oe(t,n,r,s)}function Oe(t,e,r,n){r.addEventListener("input",ie(()=>{Re(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Fe(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function _e(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ce.Index.load(window.searchData.index))}function Re(t,e,r,n){if(_e(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let o=0;o<s.length;o++){let a=s[o],l=n.data.rows[Number(a.ref)],u=1;l.name.toLowerCase().startsWith(i.toLowerCase())&&(u*=1+1/(1+Math.abs(l.name.length-i.length))),a.score*=u}s.sort((o,a)=>a.score-o.score);for(let o=0,a=Math.min(10,s.length);o<a;o++){let l=n.data.rows[Number(s[o].ref)],u=le(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(u+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(u=`<span class="parent">${le(l.parent,i)}.</span>${u}`);let d=document.createElement("li");d.classList.value=l.classes??"";let m=document.createElement("a");m.href=n.base+l.url,m.innerHTML=u,d.append(m),e.appendChild(d)}}function ue(t,e){let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let n=r;if(e===1)do n=n.nextElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove("current"),n.classList.add("current"))}}function Fe(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function le(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(K(t.substring(s,o)),`<b>${K(t.substring(o,o+n.length))}</b>`),s=o+n.length,o=r.indexOf(n,s);return i.push(K(t.substring(s))),i.join("")}var Me={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#039;",'"':"&quot;"};function K(t){return t.replace(/[&<>"'"]/g,e=>Me[e])}var P=class{constructor(e){this.el=e.el,this.app=e.app}};var M="mousedown",fe="mousemove",N="mouseup",J={x:0,y:0},he=!1,ee=!1,De=!1,D=!1,pe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(pe?"is-mobile":"not-mobile");pe&&"ontouchstart"in document.documentElement&&(De=!0,M="touchstart",fe="touchmove",N="touchend");document.addEventListener(M,t=>{ee=!0,D=!1;let e=M=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=M=="touchstart"?t.targetTouches[0]:t,r=J.x-(e.pageX||0),n=J.y-(e.pageY||0);D=Math.sqrt(r*r+n*n)>10}});document.addEventListener(N,()=>{ee=!1});document.addEventListener("click",t=>{he&&(t.preventDefault(),t.stopImmediatePropagation(),he=!1)});var X=class extends P{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(M,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){D||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!D&&this.active&&r.target.closest(".col-sidebar")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),n.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var me=document.head.appendChild(document.createElement("style"));me.dataset.for="filters";var Y=class extends P{constructor(r){super(r);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),me.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; }
`}fromLocalStorage(){let r=Q.getItem(this.key);return r?r==="true":this.el.checked}setLocalStorage(r){Q.setItem(this.key,r.toString()),this.value=r,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let n=Array.from(r.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);r.style.display=n?"none":"block"})}};var Z=class extends P{constructor(r){super(r);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update()),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ve(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}de();G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var ge=document.getElementById("tsd-theme");ge&&ve(ge);var Ae=new U;Object.defineProperty(window,"app",{value:Ae});document.querySelectorAll("summary a").forEach(t=>{t.addEventListener("click",()=>{location.assign(t.href)})});})();
/*! Bundled license information:
lunr/lunr.js:
  (**
   * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
   * Copyright (C) 2020 Oliver Nightingale
   * @license MIT
   *)
  (*!
   * lunr.utils
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.Set
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.tokenizer
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.Pipeline
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.Vector
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.stemmer
   * Copyright (C) 2020 Oliver Nightingale
   * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
   *)
  (*!
   * lunr.stopWordFilter
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.trimmer
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.TokenSet
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.Index
   * Copyright (C) 2020 Oliver Nightingale
   *)
  (*!
   * lunr.Builder
   * Copyright (C) 2020 Oliver Nightingale
   *)
*/
docs/assets/search.js
New file
@@ -0,0 +1 @@
window.searchData = JSON.parse("{\"rows\":[{\"kind\":4,\"name\":\"MathCoach\",\"url\":\"modules/MathCoach.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Api\",\"url\":\"interfaces/MathCoach.Api.html\",\"classes\":\"\",\"parent\":\"MathCoach\"},{\"kind\":1024,\"name\":\"ide\",\"url\":\"interfaces/MathCoach.Api.html#ide\",\"classes\":\"\",\"parent\":\"MathCoach.Api\"},{\"kind\":2048,\"name\":\"isReady\",\"url\":\"interfaces/MathCoach.Api.html#isReady\",\"classes\":\"\",\"parent\":\"MathCoach.Api\"},{\"kind\":256,\"name\":\"IdeApi\",\"url\":\"interfaces/MathCoach.IdeApi.html\",\"classes\":\"\",\"parent\":\"MathCoach\"},{\"kind\":2048,\"name\":\"getUserName\",\"url\":\"interfaces/MathCoach.IdeApi.html#getUserName\",\"classes\":\"\",\"parent\":\"MathCoach.IdeApi\"},{\"kind\":2048,\"name\":\"getContextFile\",\"url\":\"interfaces/MathCoach.IdeApi.html#getContextFile\",\"classes\":\"\",\"parent\":\"MathCoach.IdeApi\"},{\"kind\":1024,\"name\":\"fs\",\"url\":\"interfaces/MathCoach.IdeApi.html#fs\",\"classes\":\"\",\"parent\":\"MathCoach.IdeApi\"},{\"kind\":1024,\"name\":\"navigator\",\"url\":\"interfaces/MathCoach.IdeApi.html#navigator\",\"classes\":\"\",\"parent\":\"MathCoach.IdeApi\"},{\"kind\":256,\"name\":\"NavigatorApi\",\"url\":\"interfaces/MathCoach.NavigatorApi.html\",\"classes\":\"\",\"parent\":\"MathCoach\"},{\"kind\":2048,\"name\":\"navigateTo\",\"url\":\"interfaces/MathCoach.NavigatorApi.html#navigateTo\",\"classes\":\"\",\"parent\":\"MathCoach.NavigatorApi\"},{\"kind\":2048,\"name\":\"navigateToExercise\",\"url\":\"interfaces/MathCoach.NavigatorApi.html#navigateToExercise\",\"classes\":\"\",\"parent\":\"MathCoach.NavigatorApi\"},{\"kind\":256,\"name\":\"FileSystemApi\",\"url\":\"interfaces/MathCoach.FileSystemApi.html\",\"classes\":\"\",\"parent\":\"MathCoach\"},{\"kind\":2048,\"name\":\"readFile\",\"url\":\"interfaces/MathCoach.FileSystemApi.html#readFile\",\"classes\":\"\",\"parent\":\"MathCoach.FileSystemApi\"},{\"kind\":2048,\"name\":\"writeFile\",\"url\":\"interfaces/MathCoach.FileSystemApi.html#writeFile\",\"classes\":\"\",\"parent\":\"MathCoach.FileSystemApi\"},{\"kind\":256,\"name\":\"File\",\"url\":\"interfaces/MathCoach.File.html\",\"classes\":\"\",\"parent\":\"MathCoach\"},{\"kind\":1024,\"name\":\"owner\",\"url\":\"interfaces/MathCoach.File.html#owner\",\"classes\":\"\",\"parent\":\"MathCoach.File\"},{\"kind\":1024,\"name\":\"part\",\"url\":\"interfaces/MathCoach.File.html#part\",\"classes\":\"\",\"parent\":\"MathCoach.File\"},{\"kind\":1024,\"name\":\"path\",\"url\":\"interfaces/MathCoach.File.html#path\",\"classes\":\"\",\"parent\":\"MathCoach.File\"},{\"kind\":4,\"name\":\"Helpers\",\"url\":\"modules/Helpers.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"enableOfflineUsageIfNecessary\",\"url\":\"functions/Helpers.enableOfflineUsageIfNecessary.html\",\"classes\":\"\",\"parent\":\"Helpers\"},{\"kind\":64,\"name\":\"createStorageBasedApi\",\"url\":\"functions/Helpers.createStorageBasedApi.html\",\"classes\":\"\",\"parent\":\"Helpers\"},{\"kind\":64,\"name\":\"isFile\",\"url\":\"functions/Helpers.isFile.html\",\"classes\":\"\",\"parent\":\"Helpers\"},{\"kind\":64,\"name\":\"contextFileToExerciseFile\",\"url\":\"functions/Helpers.contextFileToExerciseFile.html\",\"classes\":\"\",\"parent\":\"Helpers\"},{\"kind\":128,\"name\":\"InMemoryStorage\",\"url\":\"classes/Helpers.InMemoryStorage.html\",\"classes\":\"\",\"parent\":\"Helpers\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Helpers.InMemoryStorage.html#constructor\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":1024,\"name\":\"items\",\"url\":\"classes/Helpers.InMemoryStorage.html#items\",\"classes\":\"tsd-is-private\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":262144,\"name\":\"length\",\"url\":\"classes/Helpers.InMemoryStorage.html#length\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":2048,\"name\":\"clear\",\"url\":\"classes/Helpers.InMemoryStorage.html#clear\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":2048,\"name\":\"getItem\",\"url\":\"classes/Helpers.InMemoryStorage.html#getItem\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":2048,\"name\":\"key\",\"url\":\"classes/Helpers.InMemoryStorage.html#key\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":2048,\"name\":\"removeItem\",\"url\":\"classes/Helpers.InMemoryStorage.html#removeItem\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"},{\"kind\":2048,\"name\":\"setItem\",\"url\":\"classes/Helpers.InMemoryStorage.html#setItem\",\"classes\":\"\",\"parent\":\"Helpers.InMemoryStorage\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,31.209]],[\"comment/0\",[]],[\"name/1\",[1,31.209]],[\"comment/1\",[]],[\"name/2\",[2,31.209]],[\"comment/2\",[]],[\"name/3\",[3,31.209]],[\"comment/3\",[]],[\"name/4\",[4,31.209]],[\"comment/4\",[]],[\"name/5\",[5,31.209]],[\"comment/5\",[]],[\"name/6\",[6,31.209]],[\"comment/6\",[]],[\"name/7\",[7,31.209]],[\"comment/7\",[]],[\"name/8\",[8,31.209]],[\"comment/8\",[]],[\"name/9\",[9,31.209]],[\"comment/9\",[]],[\"name/10\",[10,31.209]],[\"comment/10\",[]],[\"name/11\",[11,31.209]],[\"comment/11\",[]],[\"name/12\",[12,31.209]],[\"comment/12\",[]],[\"name/13\",[13,31.209]],[\"comment/13\",[]],[\"name/14\",[14,31.209]],[\"comment/14\",[]],[\"name/15\",[15,31.209]],[\"comment/15\",[]],[\"name/16\",[16,31.209]],[\"comment/16\",[]],[\"name/17\",[17,31.209]],[\"comment/17\",[]],[\"name/18\",[18,31.209]],[\"comment/18\",[]],[\"name/19\",[19,31.209]],[\"comment/19\",[]],[\"name/20\",[20,31.209]],[\"comment/20\",[]],[\"name/21\",[21,31.209]],[\"comment/21\",[]],[\"name/22\",[22,31.209]],[\"comment/22\",[]],[\"name/23\",[23,31.209]],[\"comment/23\",[]],[\"name/24\",[24,31.209]],[\"comment/24\",[]],[\"name/25\",[25,31.209]],[\"comment/25\",[]],[\"name/26\",[26,31.209]],[\"comment/26\",[]],[\"name/27\",[27,31.209]],[\"comment/27\",[]],[\"name/28\",[28,31.209]],[\"comment/28\",[]],[\"name/29\",[29,31.209]],[\"comment/29\",[]],[\"name/30\",[30,31.209]],[\"comment/30\",[]],[\"name/31\",[31,31.209]],[\"comment/31\",[]],[\"name/32\",[32,31.209]],[\"comment/32\",[]]],\"invertedIndex\":[[\"api\",{\"_index\":1,\"name\":{\"1\":{}},\"comment\":{}}],[\"clear\",{\"_index\":28,\"name\":{\"28\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":25,\"name\":{\"25\":{}},\"comment\":{}}],[\"contextfiletoexercisefile\",{\"_index\":23,\"name\":{\"23\":{}},\"comment\":{}}],[\"createstoragebasedapi\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"enableofflineusageifnecessary\",{\"_index\":20,\"name\":{\"20\":{}},\"comment\":{}}],[\"file\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"filesystemapi\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"fs\",{\"_index\":7,\"name\":{\"7\":{}},\"comment\":{}}],[\"getcontextfile\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"getitem\",{\"_index\":29,\"name\":{\"29\":{}},\"comment\":{}}],[\"getusername\",{\"_index\":5,\"name\":{\"5\":{}},\"comment\":{}}],[\"helpers\",{\"_index\":19,\"name\":{\"19\":{}},\"comment\":{}}],[\"ide\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"ideapi\",{\"_index\":4,\"name\":{\"4\":{}},\"comment\":{}}],[\"inmemorystorage\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"isfile\",{\"_index\":22,\"name\":{\"22\":{}},\"comment\":{}}],[\"isready\",{\"_index\":3,\"name\":{\"3\":{}},\"comment\":{}}],[\"items\",{\"_index\":26,\"name\":{\"26\":{}},\"comment\":{}}],[\"key\",{\"_index\":30,\"name\":{\"30\":{}},\"comment\":{}}],[\"length\",{\"_index\":27,\"name\":{\"27\":{}},\"comment\":{}}],[\"mathcoach\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"navigateto\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"navigatetoexercise\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"navigator\",{\"_index\":8,\"name\":{\"8\":{}},\"comment\":{}}],[\"navigatorapi\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"owner\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"part\",{\"_index\":17,\"name\":{\"17\":{}},\"comment\":{}}],[\"path\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"readfile\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"removeitem\",{\"_index\":31,\"name\":{\"31\":{}},\"comment\":{}}],[\"setitem\",{\"_index\":32,\"name\":{\"32\":{}},\"comment\":{}}],[\"writefile\",{\"_index\":14,\"name\":{\"14\":{}},\"comment\":{}}]],\"pipeline\":[]}}");
docs/assets/style.css
New file
@@ -0,0 +1,1367 @@
:root {
    /* Light */
    --light-color-background: #f2f4f8;
    --light-color-background-secondary: #eff0f1;
    --light-color-warning-text: #222;
    --light-color-background-warning: #e6e600;
    --light-color-icon-background: var(--light-color-background);
    --light-color-accent: #c5c7c9;
    --light-color-active-menu-item: var(--light-color-accent);
    --light-color-text: #222;
    --light-color-text-aside: #6e6e6e;
    --light-color-link: #1f70c2;
    --light-color-ts-project: #b111c9;
    --light-color-ts-module: var(--light-color-ts-project);
    --light-color-ts-namespace: var(--light-color-ts-project);
    --light-color-ts-enum: #7e6f15;
    --light-color-ts-enum-member: var(--light-color-ts-enum);
    --light-color-ts-variable: #4760ec;
    --light-color-ts-function: #572be7;
    --light-color-ts-class: #1f70c2;
    --light-color-ts-interface: #108024;
    --light-color-ts-constructor: var(--light-color-ts-class);
    --light-color-ts-property: var(--light-color-ts-variable);
    --light-color-ts-method: var(--light-color-ts-function);
    --light-color-ts-call-signature: var(--light-color-ts-method);
    --light-color-ts-index-signature: var(--light-color-ts-property);
    --light-color-ts-constructor-signature: var(--light-color-ts-constructor);
    --light-color-ts-parameter: var(--light-color-ts-variable);
    /* type literal not included as links will never be generated to it */
    --light-color-ts-type-parameter: var(--light-color-ts-type-alias);
    --light-color-ts-accessor: var(--light-color-ts-property);
    --light-color-ts-get-signature: var(--light-color-ts-accessor);
    --light-color-ts-set-signature: var(--light-color-ts-accessor);
    /* object literal not included as it is not used and will be removed in 0.25 */
    --light-color-ts-type-alias: #d51270;
    /* reference not included as links will be colored with the kind that it points to */
    --light-external-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23000' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>");
    --light-color-scheme: light;
    /* Dark */
    --dark-color-background: #2b2e33;
    --dark-color-background-secondary: #1e2024;
    --dark-color-background-warning: #bebe00;
    --dark-color-warning-text: #222;
    --dark-color-icon-background: var(--dark-color-background-secondary);
    --dark-color-accent: #9096a2;
    --dark-color-active-menu-item: #5d5d6a;
    --dark-color-text: #f5f5f5;
    --dark-color-text-aside: #dddddd;
    --dark-color-link: #00aff4;
    --dark-color-ts-project: #e358ff;
    --dark-color-ts-module: var(--dark-color-ts-project);
    --dark-color-ts-namespace: var(--dark-color-ts-project);
    --dark-color-ts-enum: #f4d93e;
    --dark-color-ts-enum-member: var(--dark-color-ts-enum);
    --dark-color-ts-variable: #798dff;
    --dark-color-ts-function: #a280ff;
    --dark-color-ts-class: #8ac4ff;
    --dark-color-ts-interface: #6cff87;
    --dark-color-ts-constructor: var(--dark-color-ts-class);
    --dark-color-ts-property: var(--dark-color-ts-variable);
    --dark-color-ts-method: var(--dark-color-ts-function);
    --dark-color-ts-call-signature: var(--dark-color-ts-method);
    --dark-color-ts-index-signature: var(--dark-color-ts-property);
    --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor);
    --dark-color-ts-parameter: var(--dark-color-ts-variable);
    /* type literal not included as links will never be generated to it */
    --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias);
    --dark-color-ts-accessor: var(--dark-color-ts-property);
    --dark-color-ts-get-signature: var(--dark-color-ts-accessor);
    --dark-color-ts-set-signature: var(--dark-color-ts-accessor);
    /* object literal not included as it is not used and will be removed in 0.25 */
    --dark-color-ts-type-alias: #ff6492;
    /* reference not included as links will be colored with the kind that it points to */
    --dark-external-icon: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='10' height='10'><path fill-opacity='0' stroke='%23fff' stroke-width='10' d='m43,35H5v60h60V57M45,5v10l10,10-30,30 20,20 30-30 10,10h10V5z'/></svg>");
    --dark-color-scheme: dark;
}
@media (prefers-color-scheme: light) {
    :root {
        --color-background: var(--light-color-background);
        --color-background-secondary: var(--light-color-background-secondary);
        --color-background-warning: var(--light-color-background-warning);
        --color-warning-text: var(--light-color-warning-text);
        --color-icon-background: var(--light-color-icon-background);
        --color-accent: var(--light-color-accent);
        --color-active-menu-item: var(--light-color-active-menu-item);
        --color-text: var(--light-color-text);
        --color-text-aside: var(--light-color-text-aside);
        --color-link: var(--light-color-link);
        --color-ts-module: var(--light-color-ts-module);
        --color-ts-namespace: var(--light-color-ts-namespace);
        --color-ts-enum: var(--light-color-ts-enum);
        --color-ts-enum-member: var(--light-color-ts-enum-member);
        --color-ts-variable: var(--light-color-ts-variable);
        --color-ts-function: var(--light-color-ts-function);
        --color-ts-class: var(--light-color-ts-class);
        --color-ts-interface: var(--light-color-ts-interface);
        --color-ts-constructor: var(--light-color-ts-constructor);
        --color-ts-property: var(--light-color-ts-property);
        --color-ts-method: var(--light-color-ts-method);
        --color-ts-call-signature: var(--light-color-ts-call-signature);
        --color-ts-index-signature: var(--light-color-ts-index-signature);
        --color-ts-constructor-signature: var(
            --light-color-ts-constructor-signature
        );
        --color-ts-parameter: var(--light-color-ts-parameter);
        --color-ts-type-parameter: var(--light-color-ts-type-parameter);
        --color-ts-accessor: var(--light-color-ts-accessor);
        --color-ts-get-signature: var(--light-color-ts-get-signature);
        --color-ts-set-signature: var(--light-color-ts-set-signature);
        --color-ts-type-alias: var(--light-color-ts-type-alias);
        --external-icon: var(--light-external-icon);
        --color-scheme: var(--light-color-scheme);
    }
}
@media (prefers-color-scheme: dark) {
    :root {
        --color-background: var(--dark-color-background);
        --color-background-secondary: var(--dark-color-background-secondary);
        --color-background-warning: var(--dark-color-background-warning);
        --color-warning-text: var(--dark-color-warning-text);
        --color-icon-background: var(--dark-color-icon-background);
        --color-accent: var(--dark-color-accent);
        --color-active-menu-item: var(--dark-color-active-menu-item);
        --color-text: var(--dark-color-text);
        --color-text-aside: var(--dark-color-text-aside);
        --color-link: var(--dark-color-link);
        --color-ts-module: var(--dark-color-ts-module);
        --color-ts-namespace: var(--dark-color-ts-namespace);
        --color-ts-enum: var(--dark-color-ts-enum);
        --color-ts-enum-member: var(--dark-color-ts-enum-member);
        --color-ts-variable: var(--dark-color-ts-variable);
        --color-ts-function: var(--dark-color-ts-function);
        --color-ts-class: var(--dark-color-ts-class);
        --color-ts-interface: var(--dark-color-ts-interface);
        --color-ts-constructor: var(--dark-color-ts-constructor);
        --color-ts-property: var(--dark-color-ts-property);
        --color-ts-method: var(--dark-color-ts-method);
        --color-ts-call-signature: var(--dark-color-ts-call-signature);
        --color-ts-index-signature: var(--dark-color-ts-index-signature);
        --color-ts-constructor-signature: var(
            --dark-color-ts-constructor-signature
        );
        --color-ts-parameter: var(--dark-color-ts-parameter);
        --color-ts-type-parameter: var(--dark-color-ts-type-parameter);
        --color-ts-accessor: var(--dark-color-ts-accessor);
        --color-ts-get-signature: var(--dark-color-ts-get-signature);
        --color-ts-set-signature: var(--dark-color-ts-set-signature);
        --color-ts-type-alias: var(--dark-color-ts-type-alias);
        --external-icon: var(--dark-external-icon);
        --color-scheme: var(--dark-color-scheme);
    }
}
html {
    color-scheme: var(--color-scheme);
}
body {
    margin: 0;
}
:root[data-theme="light"] {
    --color-background: var(--light-color-background);
    --color-background-secondary: var(--light-color-background-secondary);
    --color-background-warning: var(--light-color-background-warning);
    --color-warning-text: var(--light-color-warning-text);
    --color-icon-background: var(--light-color-icon-background);
    --color-accent: var(--light-color-accent);
    --color-active-menu-item: var(--light-color-active-menu-item);
    --color-text: var(--light-color-text);
    --color-text-aside: var(--light-color-text-aside);
    --color-link: var(--light-color-link);
    --color-ts-module: var(--light-color-ts-module);
    --color-ts-namespace: var(--light-color-ts-namespace);
    --color-ts-enum: var(--light-color-ts-enum);
    --color-ts-enum-member: var(--light-color-ts-enum-member);
    --color-ts-variable: var(--light-color-ts-variable);
    --color-ts-function: var(--light-color-ts-function);
    --color-ts-class: var(--light-color-ts-class);
    --color-ts-interface: var(--light-color-ts-interface);
    --color-ts-constructor: var(--light-color-ts-constructor);
    --color-ts-property: var(--light-color-ts-property);
    --color-ts-method: var(--light-color-ts-method);
    --color-ts-call-signature: var(--light-color-ts-call-signature);
    --color-ts-index-signature: var(--light-color-ts-index-signature);
    --color-ts-constructor-signature: var(
        --light-color-ts-constructor-signature
    );
    --color-ts-parameter: var(--light-color-ts-parameter);
    --color-ts-type-parameter: var(--light-color-ts-type-parameter);
    --color-ts-accessor: var(--light-color-ts-accessor);
    --color-ts-get-signature: var(--light-color-ts-get-signature);
    --color-ts-set-signature: var(--light-color-ts-set-signature);
    --color-ts-type-alias: var(--light-color-ts-type-alias);
    --external-icon: var(--light-external-icon);
    --color-scheme: var(--light-color-scheme);
}
:root[data-theme="dark"] {
    --color-background: var(--dark-color-background);
    --color-background-secondary: var(--dark-color-background-secondary);
    --color-background-warning: var(--dark-color-background-warning);
    --color-warning-text: var(--dark-color-warning-text);
    --color-icon-background: var(--dark-color-icon-background);
    --color-accent: var(--dark-color-accent);
    --color-active-menu-item: var(--dark-color-active-menu-item);
    --color-text: var(--dark-color-text);
    --color-text-aside: var(--dark-color-text-aside);
    --color-link: var(--dark-color-link);
    --color-ts-module: var(--dark-color-ts-module);
    --color-ts-namespace: var(--dark-color-ts-namespace);
    --color-ts-enum: var(--dark-color-ts-enum);
    --color-ts-enum-member: var(--dark-color-ts-enum-member);
    --color-ts-variable: var(--dark-color-ts-variable);
    --color-ts-function: var(--dark-color-ts-function);
    --color-ts-class: var(--dark-color-ts-class);
    --color-ts-interface: var(--dark-color-ts-interface);
    --color-ts-constructor: var(--dark-color-ts-constructor);
    --color-ts-property: var(--dark-color-ts-property);
    --color-ts-method: var(--dark-color-ts-method);
    --color-ts-call-signature: var(--dark-color-ts-call-signature);
    --color-ts-index-signature: var(--dark-color-ts-index-signature);
    --color-ts-constructor-signature: var(
        --dark-color-ts-constructor-signature
    );
    --color-ts-parameter: var(--dark-color-ts-parameter);
    --color-ts-type-parameter: var(--dark-color-ts-type-parameter);
    --color-ts-accessor: var(--dark-color-ts-accessor);
    --color-ts-get-signature: var(--dark-color-ts-get-signature);
    --color-ts-set-signature: var(--dark-color-ts-set-signature);
    --color-ts-type-alias: var(--dark-color-ts-type-alias);
    --external-icon: var(--dark-external-icon);
    --color-scheme: var(--dark-color-scheme);
}
.always-visible,
.always-visible .tsd-signatures {
    display: inherit !important;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    line-height: 1.2;
}
h1 > a,
h2 > a,
h3 > a,
h4 > a,
h5 > a,
h6 > a {
    text-decoration: none;
    color: var(--color-text);
}
h1 {
    font-size: 1.875rem;
    margin: 0.67rem 0;
}
h2 {
    font-size: 1.5rem;
    margin: 0.83rem 0;
}
h3 {
    font-size: 1.25rem;
    margin: 1rem 0;
}
h4 {
    font-size: 1.05rem;
    margin: 1.33rem 0;
}
h5 {
    font-size: 1rem;
    margin: 1.5rem 0;
}
h6 {
    font-size: 0.875rem;
    margin: 2.33rem 0;
}
.uppercase {
    text-transform: uppercase;
}
dl,
menu,
ol,
ul {
    margin: 1em 0;
}
dd {
    margin: 0 0 0 40px;
}
.container {
    max-width: 1700px;
    padding: 0 2rem;
}
/* Footer */
.tsd-generator {
    border-top: 1px solid var(--color-accent);
    padding-top: 1rem;
    padding-bottom: 1rem;
    max-height: 3.5rem;
}
.tsd-generator > p {
    margin-top: 0;
    margin-bottom: 0;
    padding: 0 1rem;
}
.container-main {
    margin: 0 auto;
    /* toolbar, footer, margin */
    min-height: calc(100vh - 41px - 56px - 4rem);
}
@keyframes fade-in {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@keyframes fade-out {
    from {
        opacity: 1;
        visibility: visible;
    }
    to {
        opacity: 0;
    }
}
@keyframes fade-in-delayed {
    0% {
        opacity: 0;
    }
    33% {
        opacity: 0;
    }
    100% {
        opacity: 1;
    }
}
@keyframes fade-out-delayed {
    0% {
        opacity: 1;
        visibility: visible;
    }
    66% {
        opacity: 0;
    }
    100% {
        opacity: 0;
    }
}
@keyframes pop-in-from-right {
    from {
        transform: translate(100%, 0);
    }
    to {
        transform: translate(0, 0);
    }
}
@keyframes pop-out-to-right {
    from {
        transform: translate(0, 0);
        visibility: visible;
    }
    to {
        transform: translate(100%, 0);
    }
}
body {
    background: var(--color-background);
    font-family: "Segoe UI", sans-serif;
    font-size: 16px;
    color: var(--color-text);
}
a {
    color: var(--color-link);
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}
a.external[target="_blank"] {
    background-image: var(--external-icon);
    background-position: top 3px right;
    background-repeat: no-repeat;
    padding-right: 13px;
}
code,
pre {
    font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
    padding: 0.2em;
    margin: 0;
    font-size: 0.875rem;
    border-radius: 0.8em;
}
pre {
    position: relative;
    white-space: pre;
    white-space: pre-wrap;
    word-wrap: break-word;
    padding: 10px;
    border: 1px solid var(--color-accent);
}
pre code {
    padding: 0;
    font-size: 100%;
}
pre > button {
    position: absolute;
    top: 10px;
    right: 10px;
    opacity: 0;
    transition: opacity 0.1s;
    box-sizing: border-box;
}
pre:hover > button,
pre > button.visible {
    opacity: 1;
}
blockquote {
    margin: 1em 0;
    padding-left: 1em;
    border-left: 4px solid gray;
}
.tsd-typography {
    line-height: 1.333em;
}
.tsd-typography ul {
    list-style: square;
    padding: 0 0 0 20px;
    margin: 0;
}
.tsd-typography h4,
.tsd-typography .tsd-index-panel h3,
.tsd-index-panel .tsd-typography h3,
.tsd-typography h5,
.tsd-typography h6 {
    font-size: 1em;
    margin: 0;
}
.tsd-typography h5,
.tsd-typography h6 {
    font-weight: normal;
}
.tsd-typography p,
.tsd-typography ul,
.tsd-typography ol {
    margin: 1em 0;
}
.tsd-breadcrumb {
    margin: 0;
    padding: 0;
    color: var(--color-text-aside);
}
.tsd-breadcrumb a {
    color: var(--color-text-aside);
    text-decoration: none;
}
.tsd-breadcrumb a:hover {
    text-decoration: underline;
}
.tsd-breadcrumb li {
    display: inline;
}
.tsd-breadcrumb li:after {
    content: " / ";
}
.tsd-comment-tags {
    display: flex;
    flex-direction: column;
}
dl.tsd-comment-tag-group {
    display: flex;
    align-items: center;
    overflow: hidden;
    margin: 0.5em 0;
}
dl.tsd-comment-tag-group dt {
    display: flex;
    margin-right: 0.5em;
    font-size: 0.875em;
    font-weight: normal;
}
dl.tsd-comment-tag-group dd {
    margin: 0;
}
code.tsd-tag {
    padding: 0.25em 0.4em;
    border: 0.1em solid var(--color-accent);
    margin-right: 0.25em;
    font-size: 70%;
}
h1 code.tsd-tag:first-of-type {
    margin-left: 0.25em;
}
dl.tsd-comment-tag-group dd:before,
dl.tsd-comment-tag-group dd:after {
    content: " ";
}
dl.tsd-comment-tag-group dd pre,
dl.tsd-comment-tag-group dd:after {
    clear: both;
}
dl.tsd-comment-tag-group p {
    margin: 0;
}
.tsd-panel.tsd-comment .lead {
    font-size: 1.1em;
    line-height: 1.333em;
    margin-bottom: 2em;
}
.tsd-panel.tsd-comment .lead:last-child {
    margin-bottom: 0;
}
.tsd-filter-visibility h4 {
    font-size: 1rem;
    padding-top: 0.75rem;
    padding-bottom: 0.5rem;
    margin: 0;
}
.tsd-filter-item:not(:last-child) {
    margin-bottom: 0.5rem;
}
.tsd-filter-input {
    display: flex;
    width: fit-content;
    width: -moz-fit-content;
    align-items: center;
    user-select: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    cursor: pointer;
}
.tsd-filter-input input[type="checkbox"] {
    cursor: pointer;
    position: absolute;
    width: 1.5em;
    height: 1.5em;
    opacity: 0;
}
.tsd-filter-input input[type="checkbox"]:disabled {
    pointer-events: none;
}
.tsd-filter-input svg {
    cursor: pointer;
    width: 1.5em;
    height: 1.5em;
    margin-right: 0.5em;
    border-radius: 0.33em;
    /* Leaving this at full opacity breaks event listeners on Firefox.
    Don't remove unless you know what you're doing. */
    opacity: 0.99;
}
.tsd-filter-input input[type="checkbox"]:focus + svg {
    transform: scale(0.95);
}
.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg {
    transform: scale(1);
}
.tsd-checkbox-background {
    fill: var(--color-accent);
}
input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark {
    stroke: var(--color-text);
}
.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background {
    fill: var(--color-background);
    stroke: var(--color-accent);
    stroke-width: 0.25rem;
}
.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark {
    stroke: var(--color-accent);
}
.tsd-theme-toggle {
    padding-top: 0.75rem;
}
.tsd-theme-toggle > h4 {
    display: inline;
    vertical-align: middle;
    margin-right: 0.75rem;
}
.tsd-hierarchy {
    list-style: square;
    margin: 0;
}
.tsd-hierarchy .target {
    font-weight: bold;
}
.tsd-panel-group.tsd-index-group {
    margin-bottom: 0;
}
.tsd-index-panel .tsd-index-list {
    list-style: none;
    line-height: 1.333em;
    margin: 0;
    padding: 0.25rem 0 0 0;
    overflow: hidden;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    column-gap: 1rem;
    grid-template-rows: auto;
}
@media (max-width: 1024px) {
    .tsd-index-panel .tsd-index-list {
        grid-template-columns: repeat(2, 1fr);
    }
}
@media (max-width: 768px) {
    .tsd-index-panel .tsd-index-list {
        grid-template-columns: repeat(1, 1fr);
    }
}
.tsd-index-panel .tsd-index-list li {
    -webkit-page-break-inside: avoid;
    -moz-page-break-inside: avoid;
    -ms-page-break-inside: avoid;
    -o-page-break-inside: avoid;
    page-break-inside: avoid;
}
.tsd-flag {
    display: inline-block;
    padding: 0.25em 0.4em;
    border-radius: 4px;
    color: var(--color-comment-tag-text);
    background-color: var(--color-comment-tag);
    text-indent: 0;
    font-size: 75%;
    line-height: 1;
    font-weight: normal;
}
.tsd-anchor {
    position: relative;
    top: -100px;
}
.tsd-member {
    position: relative;
}
.tsd-member .tsd-anchor + h3 {
    display: flex;
    align-items: center;
    margin-top: 0;
    margin-bottom: 0;
    border-bottom: none;
}
.tsd-navigation.settings {
    margin: 1rem 0;
}
.tsd-navigation > a,
.tsd-navigation .tsd-accordion-summary {
    width: calc(100% - 0.5rem);
}
.tsd-navigation a,
.tsd-navigation summary > span,
.tsd-page-navigation a {
    display: inline-flex;
    align-items: center;
    padding: 0.25rem;
    color: var(--color-text);
    text-decoration: none;
    box-sizing: border-box;
}
.tsd-navigation a.current,
.tsd-page-navigation a.current {
    background: var(--color-active-menu-item);
}
.tsd-navigation a:hover,
.tsd-page-navigation a:hover {
    text-decoration: underline;
}
.tsd-navigation ul,
.tsd-page-navigation ul {
    margin-top: 0;
    margin-bottom: 0;
    padding: 0;
    list-style: none;
}
.tsd-navigation li,
.tsd-page-navigation li {
    padding: 0;
    max-width: 100%;
}
.tsd-nested-navigation {
    margin-left: 3rem;
}
.tsd-nested-navigation > li > details {
    margin-left: -1.5rem;
}
.tsd-small-nested-navigation {
    margin-left: 1.5rem;
}
.tsd-small-nested-navigation > li > details {
    margin-left: -1.5rem;
}
.tsd-nested-navigation > li > a,
.tsd-nested-navigation > li > span {
    width: calc(100% - 1.75rem - 0.5rem);
}
.tsd-page-navigation ul {
    padding-left: 1.75rem;
}
#tsd-sidebar-links a {
    margin-top: 0;
    margin-bottom: 0.5rem;
    line-height: 1.25rem;
}
#tsd-sidebar-links a:last-of-type {
    margin-bottom: 0;
}
a.tsd-index-link {
    padding: 0.25rem 0 !important;
    font-size: 1rem;
    line-height: 1.25rem;
    display: inline-flex;
    align-items: center;
    color: var(--color-text);
}
.tsd-accordion-summary {
    list-style-type: none; /* hide marker on non-safari */
    outline: none; /* broken on safari, so just hide it */
}
.tsd-accordion-summary::-webkit-details-marker {
    display: none; /* hide marker on safari */
}
.tsd-accordion-summary,
.tsd-accordion-summary a {
    user-select: none;
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    cursor: pointer;
}
.tsd-accordion-summary a {
    width: calc(100% - 1.5rem);
}
.tsd-accordion-summary > * {
    margin-top: 0;
    margin-bottom: 0;
    padding-top: 0;
    padding-bottom: 0;
}
.tsd-index-accordion .tsd-accordion-summary > svg {
    margin-left: 0.25rem;
}
.tsd-index-content > :not(:first-child) {
    margin-top: 0.75rem;
}
.tsd-index-heading {
    margin-top: 1.5rem;
    margin-bottom: 0.75rem;
}
.tsd-kind-icon {
    margin-right: 0.5rem;
    width: 1.25rem;
    height: 1.25rem;
    min-width: 1.25rem;
    min-height: 1.25rem;
}
.tsd-kind-icon path {
    transform-origin: center;
    transform: scale(1.1);
}
.tsd-signature > .tsd-kind-icon {
    margin-right: 0.8rem;
}
.tsd-panel {
    margin-bottom: 2.5rem;
}
.tsd-panel.tsd-member {
    margin-bottom: 4rem;
}
.tsd-panel:empty {
    display: none;
}
.tsd-panel > h1,
.tsd-panel > h2,
.tsd-panel > h3 {
    margin: 1.5rem -1.5rem 0.75rem -1.5rem;
    padding: 0 1.5rem 0.75rem 1.5rem;
}
.tsd-panel > h1.tsd-before-signature,
.tsd-panel > h2.tsd-before-signature,
.tsd-panel > h3.tsd-before-signature {
    margin-bottom: 0;
    border-bottom: none;
}
.tsd-panel-group {
    margin: 4rem 0;
}
.tsd-panel-group.tsd-index-group {
    margin: 2rem 0;
}
.tsd-panel-group.tsd-index-group details {
    margin: 2rem 0;
}
#tsd-search {
    transition: background-color 0.2s;
}
#tsd-search .title {
    position: relative;
    z-index: 2;
}
#tsd-search .field {
    position: absolute;
    left: 0;
    top: 0;
    right: 2.5rem;
    height: 100%;
}
#tsd-search .field input {
    box-sizing: border-box;
    position: relative;
    top: -50px;
    z-index: 1;
    width: 100%;
    padding: 0 10px;
    opacity: 0;
    outline: 0;
    border: 0;
    background: transparent;
    color: var(--color-text);
}
#tsd-search .field label {
    position: absolute;
    overflow: hidden;
    right: -40px;
}
#tsd-search .field input,
#tsd-search .title,
#tsd-toolbar-links a {
    transition: opacity 0.2s;
}
#tsd-search .results {
    position: absolute;
    visibility: hidden;
    top: 40px;
    width: 100%;
    margin: 0;
    padding: 0;
    list-style: none;
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);
}
#tsd-search .results li {
    padding: 0 10px;
    background-color: var(--color-background);
}
#tsd-search .results li:nth-child(even) {
    background-color: var(--color-background-secondary);
}
#tsd-search .results li.state {
    display: none;
}
#tsd-search .results li.current,
#tsd-search .results li:hover {
    background-color: var(--color-accent);
}
#tsd-search .results a {
    display: block;
}
#tsd-search .results a:before {
    top: 10px;
}
#tsd-search .results span.parent {
    color: var(--color-text-aside);
    font-weight: normal;
}
#tsd-search.has-focus {
    background-color: var(--color-accent);
}
#tsd-search.has-focus .field input {
    top: 0;
    opacity: 1;
}
#tsd-search.has-focus .title,
#tsd-search.has-focus #tsd-toolbar-links a {
    z-index: 0;
    opacity: 0;
}
#tsd-search.has-focus .results {
    visibility: visible;
}
#tsd-search.loading .results li.state.loading {
    display: block;
}
#tsd-search.failure .results li.state.failure {
    display: block;
}
#tsd-toolbar-links {
    position: absolute;
    top: 0;
    right: 2rem;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: flex-end;
}
#tsd-toolbar-links a {
    margin-left: 1.5rem;
}
#tsd-toolbar-links a:hover {
    text-decoration: underline;
}
.tsd-signature {
    margin: 0 0 1rem 0;
    padding: 1rem 0.5rem;
    border: 1px solid var(--color-accent);
    font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
    font-size: 14px;
    overflow-x: auto;
}
.tsd-signature-symbol {
    color: var(--color-text-aside);
    font-weight: normal;
}
.tsd-signature-type {
    font-style: italic;
    font-weight: normal;
}
.tsd-signatures {
    padding: 0;
    margin: 0 0 1em 0;
    list-style-type: none;
}
.tsd-signatures .tsd-signature {
    margin: 0;
    border-color: var(--color-accent);
    border-width: 1px 0;
    transition: background-color 0.1s;
}
.tsd-description .tsd-signatures .tsd-signature {
    border-width: 1px;
}
ul.tsd-parameter-list,
ul.tsd-type-parameter-list {
    list-style: square;
    margin: 0;
    padding-left: 20px;
}
ul.tsd-parameter-list > li.tsd-parameter-signature,
ul.tsd-type-parameter-list > li.tsd-parameter-signature {
    list-style: none;
    margin-left: -20px;
}
ul.tsd-parameter-list h5,
ul.tsd-type-parameter-list h5 {
    font-size: 16px;
    margin: 1em 0 0.5em 0;
}
.tsd-sources {
    margin-top: 1rem;
    font-size: 0.875em;
}
.tsd-sources a {
    color: var(--color-text-aside);
    text-decoration: underline;
}
.tsd-sources ul {
    list-style: none;
    padding: 0;
}
.tsd-page-toolbar {
    position: sticky;
    z-index: 1;
    top: 0;
    left: 0;
    width: 100%;
    color: var(--color-text);
    background: var(--color-background-secondary);
    border-bottom: 1px var(--color-accent) solid;
    transition: transform 0.3s ease-in-out;
}
.tsd-page-toolbar a {
    color: var(--color-text);
    text-decoration: none;
}
.tsd-page-toolbar a.title {
    font-weight: bold;
}
.tsd-page-toolbar a.title:hover {
    text-decoration: underline;
}
.tsd-page-toolbar .tsd-toolbar-contents {
    display: flex;
    justify-content: space-between;
    height: 2.5rem;
    margin: 0 auto;
}
.tsd-page-toolbar .table-cell {
    position: relative;
    white-space: nowrap;
    line-height: 40px;
}
.tsd-page-toolbar .table-cell:first-child {
    width: 100%;
}
.tsd-page-toolbar .tsd-toolbar-icon {
    box-sizing: border-box;
    line-height: 0;
    padding: 12px 0;
}
.tsd-widget {
    display: inline-block;
    overflow: hidden;
    opacity: 0.8;
    height: 40px;
    transition: opacity 0.1s, background-color 0.2s;
    vertical-align: bottom;
    cursor: pointer;
}
.tsd-widget:hover {
    opacity: 0.9;
}
.tsd-widget.active {
    opacity: 1;
    background-color: var(--color-accent);
}
.tsd-widget.no-caption {
    width: 40px;
}
.tsd-widget.no-caption:before {
    margin: 0;
}
.tsd-widget.options,
.tsd-widget.menu {
    display: none;
}
input[type="checkbox"] + .tsd-widget:before {
    background-position: -120px 0;
}
input[type="checkbox"]:checked + .tsd-widget:before {
    background-position: -160px 0;
}
img {
    max-width: 100%;
}
.tsd-anchor-icon {
    display: inline-flex;
    align-items: center;
    margin-left: 0.5rem;
    vertical-align: middle;
    color: var(--color-text);
}
.tsd-anchor-icon svg {
    width: 1em;
    height: 1em;
    visibility: hidden;
}
.tsd-anchor-link:hover > .tsd-anchor-icon svg {
    visibility: visible;
}
.deprecated {
    text-decoration: line-through;
}
.warning {
    padding: 1rem;
    color: var(--color-warning-text);
    background: var(--color-background-warning);
}
.tsd-kind-project {
    color: var(--color-ts-project);
}
.tsd-kind-module {
    color: var(--color-ts-module);
}
.tsd-kind-namespace {
    color: var(--color-ts-namespace);
}
.tsd-kind-enum {
    color: var(--color-ts-enum);
}
.tsd-kind-enum-member {
    color: var(--color-ts-enum-member);
}
.tsd-kind-variable {
    color: var(--color-ts-variable);
}
.tsd-kind-function {
    color: var(--color-ts-function);
}
.tsd-kind-class {
    color: var(--color-ts-class);
}
.tsd-kind-interface {
    color: var(--color-ts-interface);
}
.tsd-kind-constructor {
    color: var(--color-ts-constructor);
}
.tsd-kind-property {
    color: var(--color-ts-property);
}
.tsd-kind-method {
    color: var(--color-ts-method);
}
.tsd-kind-call-signature {
    color: var(--color-ts-call-signature);
}
.tsd-kind-index-signature {
    color: var(--color-ts-index-signature);
}
.tsd-kind-constructor-signature {
    color: var(--color-ts-constructor-signature);
}
.tsd-kind-parameter {
    color: var(--color-ts-parameter);
}
.tsd-kind-type-literal {
    color: var(--color-ts-type-literal);
}
.tsd-kind-type-parameter {
    color: var(--color-ts-type-parameter);
}
.tsd-kind-accessor {
    color: var(--color-ts-accessor);
}
.tsd-kind-get-signature {
    color: var(--color-ts-get-signature);
}
.tsd-kind-set-signature {
    color: var(--color-ts-set-signature);
}
.tsd-kind-type-alias {
    color: var(--color-ts-type-alias);
}
/* if we have a kind icon, don't color the text by kind */
.tsd-kind-icon ~ span {
    color: var(--color-text);
}
* {
    scrollbar-width: thin;
    scrollbar-color: var(--color-accent) var(--color-icon-background);
}
*::-webkit-scrollbar {
    width: 0.75rem;
}
*::-webkit-scrollbar-track {
    background: var(--color-icon-background);
}
*::-webkit-scrollbar-thumb {
    background-color: var(--color-accent);
    border-radius: 999rem;
    border: 0.25rem solid var(--color-icon-background);
}
/* mobile */
@media (max-width: 769px) {
    .tsd-widget.options,
    .tsd-widget.menu {
        display: inline-block;
    }
    .container-main {
        display: flex;
    }
    html .col-content {
        float: none;
        max-width: 100%;
        width: 100%;
    }
    html .col-sidebar {
        position: fixed !important;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
        z-index: 1024;
        top: 0 !important;
        bottom: 0 !important;
        left: auto !important;
        right: 0 !important;
        padding: 1.5rem 1.5rem 0 0;
        width: 75vw;
        visibility: hidden;
        background-color: var(--color-background);
        transform: translate(100%, 0);
    }
    html .col-sidebar > *:last-child {
        padding-bottom: 20px;
    }
    html .overlay {
        content: "";
        display: block;
        position: fixed;
        z-index: 1023;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: rgba(0, 0, 0, 0.75);
        visibility: hidden;
    }
    .to-has-menu .overlay {
        animation: fade-in 0.4s;
    }
    .to-has-menu .col-sidebar {
        animation: pop-in-from-right 0.4s;
    }
    .from-has-menu .overlay {
        animation: fade-out 0.4s;
    }
    .from-has-menu .col-sidebar {
        animation: pop-out-to-right 0.4s;
    }
    .has-menu body {
        overflow: hidden;
    }
    .has-menu .overlay {
        visibility: visible;
    }
    .has-menu .col-sidebar {
        visibility: visible;
        transform: translate(0, 0);
        display: flex;
        flex-direction: column;
        gap: 1.5rem;
        max-height: 100vh;
        padding: 1rem 2rem;
    }
    .has-menu .tsd-navigation {
        max-height: 100%;
    }
}
/* one sidebar */
@media (min-width: 770px) {
    .container-main {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
        grid-template-areas: "sidebar content";
        margin: 2rem auto;
    }
    .col-sidebar {
        grid-area: sidebar;
    }
    .col-content {
        grid-area: content;
        padding: 0 1rem;
    }
}
@media (min-width: 770px) and (max-width: 1399px) {
    .col-sidebar {
        max-height: calc(100vh - 2rem - 42px);
        overflow: auto;
        position: sticky;
        top: 42px;
        padding-top: 1rem;
    }
    .site-menu {
        margin-top: 1rem;
    }
}
/* two sidebars */
@media (min-width: 1200px) {
    .container-main {
        grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem);
        grid-template-areas: "sidebar content toc";
    }
    .col-sidebar {
        display: contents;
    }
    .page-menu {
        grid-area: toc;
        padding-left: 1rem;
    }
    .site-menu {
        grid-area: sidebar;
    }
    .site-menu {
        margin-top: 1rem 0;
    }
    .page-menu,
    .site-menu {
        max-height: calc(100vh - 2rem - 42px);
        overflow: auto;
        position: sticky;
        top: 42px;
    }
}
docs/classes/Helpers.InMemoryStorage.html
New file
@@ -0,0 +1,203 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>InMemoryStorage | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/Helpers.html">Helpers</a></li>
<li><a href="Helpers.InMemoryStorage.html">InMemoryStorage</a></li></ul>
<h1>Class InMemoryStorage</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Storage auf Basis einer Map. Kann z.B. bei Unit-Tests verwendet
werden, beid denen der LocalStorage nicht verfügbar ist.</p>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">InMemoryStorage</span></li></ul></section>
<section class="tsd-panel">
<h4>Implements</h4>
<ul class="tsd-hierarchy">
<li><span class="tsd-signature-type ">Storage</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:179</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Constructors</h3>
<div class="tsd-index-list"><a href="Helpers.InMemoryStorage.html#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#4D7FFF" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-512-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-512-text"></path></svg><span>constructor</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Properties</h3>
<div class="tsd-index-list"><a href="Helpers.InMemoryStorage.html#items" class="tsd-index-link tsd-is-private"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-1024-path"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)" id="icon-1024-text"></path></svg><span>items</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Accessors</h3>
<div class="tsd-index-list"><a href="Helpers.InMemoryStorage.html#length" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4D4D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-262144-path"></rect><path d="M8.85 16L11.13 7.24H12.582L14.85 16H13.758L13.182 13.672H10.53L9.954 16H8.85ZM10.746 12.76H12.954L12.282 10.06C12.154 9.548 12.054 9.12 11.982 8.776C11.91 8.432 11.866 8.208 11.85 8.104C11.834 8.208 11.79 8.432 11.718 8.776C11.646 9.12 11.546 9.544 11.418 10.048L10.746 12.76Z" fill="var(--color-text)" id="icon-262144-text"></path></svg><span>length</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Methods</h3>
<div class="tsd-index-list"><a href="Helpers.InMemoryStorage.html#clear" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-2048-path"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)" id="icon-2048-text"></path></svg><span>clear</span></a>
<a href="Helpers.InMemoryStorage.html#getItem" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>get<wbr/>Item</span></a>
<a href="Helpers.InMemoryStorage.html#key" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>key</span></a>
<a href="Helpers.InMemoryStorage.html#removeItem" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>remove<wbr/>Item</span></a>
<a href="Helpers.InMemoryStorage.html#setItem" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>set<wbr/>Item</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Constructors</h2>
<section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="constructor.new_InMemoryStorage"><span class="tsd-kind-constructor-signature">new <wbr/>In<wbr/>Memory<wbr/>Storage</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Helpers.InMemoryStorage.html" class="tsd-signature-type tsd-kind-class">InMemoryStorage</a><a href="#constructor.new_InMemoryStorage" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<h4 class="tsd-returns-title">Returns <a href="Helpers.InMemoryStorage.html" class="tsd-signature-type tsd-kind-class">InMemoryStorage</a></h4></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Properties</h2>
<section class="tsd-panel tsd-member tsd-is-private"><a id="items" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagPrivate">Private</code> <code class="tsd-tag ts-flagReadonly">Readonly</code> <span>items</span><a href="#items" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">items</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type ">Map</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">, </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol"> = ...</span></div><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:181</li></ul></aside></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Accessors</h2>
<section class="tsd-panel tsd-member"><a id="length" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>length</span><a href="#length" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature" id="length.length-1"><span class="tsd-signature-symbol">get</span> length<span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></li>
<li class="tsd-description">
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.length</p>
<ul>
<li>Defined in Helpers.ts:183</li></ul></aside></li></ul></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="clear" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>clear</span><a href="#clear" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="clear.clear-1"><span class="tsd-kind-call-signature">clear</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#clear.clear-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.clear</p>
<ul>
<li>Defined in Helpers.ts:186</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="getItem" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>get<wbr/>Item</span><a href="#getItem" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="getItem.getItem-1"><span class="tsd-kind-call-signature">get<wbr/>Item</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">key</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><a href="#getItem.getItem-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">key</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.getItem</p>
<ul>
<li>Defined in Helpers.ts:189</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="key" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>key</span><a href="#key" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="key.key-1"><span class="tsd-kind-call-signature">key</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">_index</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span><a href="#key.key-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">_index</span>: <span class="tsd-signature-type">number</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.key</p>
<ul>
<li>Defined in Helpers.ts:193</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="removeItem" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>remove<wbr/>Item</span><a href="#removeItem" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="removeItem.removeItem-1"><span class="tsd-kind-call-signature">remove<wbr/>Item</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">key</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#removeItem.removeItem-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">key</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.removeItem</p>
<ul>
<li>Defined in Helpers.ts:196</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="setItem" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>set<wbr/>Item</span><a href="#setItem" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="setItem.setItem-1"><span class="tsd-kind-call-signature">set<wbr/>Item</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">key</span>, <span class="tsd-kind-parameter">value</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#setItem.setItem-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">key</span>: <span class="tsd-signature-type">string</span></h5></li>
<li>
<h5><span class="tsd-kind-parameter">value</span>: <span class="tsd-signature-type">string</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4><aside class="tsd-sources">
<p>Implementation of Storage.setItem</p>
<ul>
<li>Defined in Helpers.ts:199</li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#constructor" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-512-path"></use><use href="#icon-512-text"></use></svg><span>constructor</span></a></li>
<li><a href="#items" class="tsd-is-private"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>items</span></a></li>
<li><a href="#length" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-262144-path"></use><use href="#icon-262144-text"></use></svg><span>length</span></a></li>
<li><a href="#clear" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>clear</span></a></li>
<li><a href="#getItem" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>get<wbr/>Item</span></a></li>
<li><a href="#key" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>key</span></a></li>
<li><a href="#removeItem" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>remove<wbr/>Item</span></a></li>
<li><a href="#setItem" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>set<wbr/>Item</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="Helpers.InMemoryStorage.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/classes/helpers.inmemorystorage.html
File was deleted
docs/functions/Helpers.contextFileToExerciseFile.html
New file
@@ -0,0 +1,79 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>contextFileToExerciseFile | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/Helpers.html">Helpers</a></li>
<li><a href="Helpers.contextFileToExerciseFile.html">contextFileToExerciseFile</a></li></ul>
<h1>Function contextFileToExerciseFile</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="contextFileToExerciseFile"><span class="tsd-kind-call-signature">context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">contextFile</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a><a href="#contextFileToExerciseFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Bildet die Kontext-Datei auf eine Aufgaben-Datei mit selben Namen ab.</p>
<p>Ein Werkzeug speichert sein Datenmodell in der sogenannten Kontext-Datei. Soll
eine MathCoach-Aufgabe generiert werden, ist es sinnvoll, wenn die Aufgaben-Datei
den selben Namen wie die Kontext-Datei trägt (natürlich mit anderer Dateiendung).</p>
<p>Beispielsweise wird eine Dateireferenz mit dem Pfad <code>&quot;/path/to/myExercise.mcq.json&quot;</code>
auf eine Dateireferenz mit dem Pfad <code>&quot;/path/to/myExercise.groovy&quot;</code> abgebildet.</p>
<p>Anwendungsbeispiel</p>
<pre><code><span class="hl-0"> </span><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">contextFile</span><span class="hl-0">: </span><span class="hl-8">MathCoach</span><span class="hl-0">.</span><span class="hl-8">File</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">exerciseFile</span><span class="hl-0">: </span><span class="hl-8">MathCoach</span><span class="hl-0">.</span><span class="hl-8">File</span><span class="hl-0"> = </span><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">contextFileToExerciseFile</span><span class="hl-0">(</span><span class="hl-1">contextFile</span><span class="hl-0">);</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">contextFile</span>: <a href="../interfaces/MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="../interfaces/MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:162</li></ul></aside></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="Helpers.contextFileToExerciseFile.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/functions/Helpers.createStorageBasedApi.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>createStorageBasedApi | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/Helpers.html">Helpers</a></li>
<li><a href="Helpers.createStorageBasedApi.html">createStorageBasedApi</a></li></ul>
<h1>Function createStorageBasedApi</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="createStorageBasedApi"><span class="tsd-kind-call-signature">create<wbr/>Storage<wbr/>Based<wbr/>Api</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">contextFileExtension</span><span class="tsd-signature-symbol">?</span>, <span class="tsd-kind-parameter">storage</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../interfaces/MathCoach.Api.html" class="tsd-signature-type tsd-kind-interface">Api</a><a href="#createStorageBasedApi" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Implementierung der MathCoach API zu Testzwecken.</p>
<p>Das Dateisystem wird durch einen Storage implementiert. Einige Features der
IDE (beispielsweise der Navigator) sind nicht verfügbar und führen keine Aktionen
durch. Alle Aktionen werden in der Browser-Console geloggt.</p>
<p>Anwendungsbeispiel</p>
<pre><code><span class="hl-0"> </span><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">_MC</span><span class="hl-0"> = </span><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">createStorageBasedApi</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">contextFile</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-1">_MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">() </span><span class="hl-6">// use the api</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">contextFileExtension</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> = &quot;dummy.json&quot;</span></h5>
<div class="tsd-comment tsd-typography"><p>Die Datei-Erweiterung der Kontext-Datei. Das Werkzeug sollte
     unabhängig davon implementiert sein, da der Administrator der MathCoach IDE unter
     Umständen auf eine Alternative ausweichen muss.</p>
</div></li>
<li>
<h5><span class="tsd-kind-parameter">storage</span>: <span class="tsd-signature-type ">Storage</span><span class="tsd-signature-symbol"> = ...</span></h5>
<div class="tsd-comment tsd-typography"><p>Storage-Implementierung, die zum Speichern von Dateien verwendet werden
     soll. Standardmäßig wird der <code>LocalStorage</code> des Browsers verwendet
     bzw. falls nicht verfügbar der <code>InMemoryStorage</code>.</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <a href="../interfaces/MathCoach.Api.html" class="tsd-signature-type tsd-kind-interface">Api</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:59</li></ul></aside></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="Helpers.createStorageBasedApi.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/functions/Helpers.enableOfflineUsageIfNecessary.html
New file
@@ -0,0 +1,82 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>enableOfflineUsageIfNecessary | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/Helpers.html">Helpers</a></li>
<li><a href="Helpers.enableOfflineUsageIfNecessary.html">enableOfflineUsageIfNecessary</a></li></ul>
<h1>Function enableOfflineUsageIfNecessary</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="enableOfflineUsageIfNecessary"><span class="tsd-kind-call-signature">enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">contextFileExtension</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><a href="#enableOfflineUsageIfNecessary" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Bildet die MathCoach API nach, sodass diese auch Offline (ohne IDE)
verfügbar ist. (Siehe auch <code>createStorageBasedApi</code>).</p>
<p><strong>Hinweis</strong>: Wenn die echte MathCoach-API der IDE verfügbar ist, hat der Aufruf
dieser Funktion keinen Seiteneffekt.</p>
<p>Anwendungsbeispiel </p>
<pre><code><span class="hl-0"> </span><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">enableOfflineUsageIfNecessary</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-7">isReady</span><span class="hl-0">() </span><span class="hl-6">// use the api</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">contextFileExtension</span>: <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> = &quot;dummy.json&quot;</span></h5>
<div class="tsd-comment tsd-typography"><p>Datei-Erweiterung der Kontext-Datei (Das Werkzeug soll
jedoch unabhängig von der Endung arbeiten können)</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><p>Gibt <code>true</code> zurück, wenn die Offline-Funktionalität aktiviert
wurde, andernfalls <code>false</code></p>
<aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:27</li></ul></aside></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="Helpers.enableOfflineUsageIfNecessary.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/functions/Helpers.isFile.html
New file
@@ -0,0 +1,73 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>isFile | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/Helpers.html">Helpers</a></li>
<li><a href="Helpers.isFile.html">isFile</a></li></ul>
<h1>Function isFile</h1></div>
<section class="tsd-panel">
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="isFile"><span class="tsd-kind-call-signature">is<wbr/>File</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">maybeFile</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-kind-parameter">maybeFile</span><span class="tsd-signature-symbol"> is </span><a href="../interfaces/MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Type Guard, der prüft, ob es sich um eine gültige <code>MathCoach.File</code>-Referenz handelt.</p>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">maybeFile</span>: <span class="tsd-signature-type">any</span></h5>
<div class="tsd-comment tsd-typography"><p>Ein beliebiges Objekt, das geprüft werden soll</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-kind-parameter">maybeFile</span><span class="tsd-signature-symbol"> is </span><a href="../interfaces/MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h4><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:136</li></ul></aside></li></ul></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="Helpers.isFile.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/globals.html
File was deleted
docs/index.html
@@ -1,3122 +1,326 @@
<!doctype html>
<html class="minimal no-js">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>@mathcoach/ide-api | @mathcoach/ide-api</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type="text/css">/*! normalize.css v1.1.3 | MIT License | git.io/normalize */
/* ==========================================================================
 * * HTML5 display definitions
 * * ========================================================================== */
/**
 * * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
  display: block;
}
/**
 * * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */
audio, canvas, video {
  display: inline-block;
  *display: inline;
  *zoom: 1;
}
/**
 * * Prevent modern browsers from displaying `audio` without controls.
 * * Remove excess height in iOS 5 devices. */
audio:not([controls]) {
  display: none;
  height: 0;
}
/**
 * * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4.
 * * Known issue: no IE 6 support. */
[hidden] {
  display: none;
}
/* ==========================================================================
 * * Base
 * * ========================================================================== */
/**
 * * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using
 * *    `em` units.
 * * 2. Prevent iOS text size adjust after orientation change, without disabling
 * *    user zoom. */
html {
  font-size: 100%;
  /* 1 */
  -ms-text-size-adjust: 100%;
  /* 2 */
  -webkit-text-size-adjust: 100%;
  /* 2 */
  font-family: sans-serif;
}
/**
 * * Address `font-family` inconsistency between `textarea` and other form
 * * elements. */
button, input, select, textarea {
  font-family: sans-serif;
}
/**
 * * Address margins handled incorrectly in IE 6/7. */
body {
  margin: 0;
}
/* ==========================================================================
 * * Links
 * * ========================================================================== */
/**
 * * Address `outline` inconsistency between Chrome and other browsers. */
a:focus {
  outline: thin dotted;
}
a:active, a:hover {
  outline: 0;
}
/**
 * * Improve readability when focused and also mouse hovered in all browsers. */
/* ==========================================================================
 * * Typography
 * * ========================================================================== */
/**
 * * Address font sizes and margins set differently in IE 6/7.
 * * Address font sizes within `section` and `article` in Firefox 4+, Safari 5,
 * * and Chrome. */
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
h2 {
  font-size: 1.5em;
  margin: 0.83em 0;
}
h3 {
  font-size: 1.17em;
  margin: 1em 0;
}
h4, .tsd-index-panel h3 {
  font-size: 1em;
  margin: 1.33em 0;
}
h5 {
  font-size: 0.83em;
  margin: 1.67em 0;
}
h6 {
  font-size: 0.67em;
  margin: 2.33em 0;
}
/**
 * * Address styling not present in IE 7/8/9, Safari 5, and Chrome. */
abbr[title] {
  border-bottom: 1px dotted;
}
/**
 * * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */
b, strong {
  font-weight: bold;
}
blockquote {
  margin: 1em 40px;
}
/**
 * * Address styling not present in Safari 5 and Chrome. */
dfn {
  font-style: italic;
}
/**
 * * Address differences between Firefox and other browsers.
 * * Known issue: no IE 6/7 normalization. */
hr {
  box-sizing: content-box;
  height: 0;
}
/**
 * * Address styling not present in IE 6/7/8/9. */
mark {
  background: #ff0;
  color: #000;
}
/**
 * * Address margins set differently in IE 6/7. */
p, pre {
  margin: 1em 0;
}
/**
 * * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */
code, kbd, pre, samp {
  font-family: monospace, serif;
  _font-family: "courier new", monospace;
  font-size: 1em;
}
/**
 * * Improve readability of pre-formatted text in all browsers. */
pre {
  white-space: pre;
  white-space: pre-wrap;
  word-wrap: break-word;
}
/**
 * * Address CSS quotes not supported in IE 6/7. */
q {
  quotes: none;
}
q:before, q:after {
  content: "";
  content: none;
}
/**
 * * Address `quotes` property not supported in Safari 4. */
/**
 * * Address inconsistent and variable font size in all browsers. */
small {
  font-size: 80%;
}
/**
 * * Prevent `sub` and `sup` affecting `line-height` in all browsers. */
sub {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
/* ==========================================================================
 * * Lists
 * * ========================================================================== */
/**
 * * Address margins set differently in IE 6/7. */
dl, menu, ol, ul {
  margin: 1em 0;
}
dd {
  margin: 0 0 0 40px;
}
/**
 * * Address paddings set differently in IE 6/7. */
menu, ol, ul {
  padding: 0 0 0 40px;
}
/**
 * * Correct list images handled incorrectly in IE 7. */
nav ul, nav ol {
  list-style: none;
  list-style-image: none;
}
/* ==========================================================================
 * * Embedded content
 * * ========================================================================== */
/**
 * * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3.
 * * 2. Improve image quality when scaled in IE 7. */
img {
  border: 0;
  /* 1 */
  -ms-interpolation-mode: bicubic;
}
/* 2 */
/**
 * * Correct overflow displayed oddly in IE 9. */
svg:not(:root) {
  overflow: hidden;
}
/* ==========================================================================
 * * Figures
 * * ========================================================================== */
/**
 * * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */
figure, form {
  margin: 0;
}
/* ==========================================================================
 * * Forms
 * * ========================================================================== */
/**
 * * Correct margin displayed oddly in IE 6/7. */
/**
 * * Define consistent border, margin, and padding. */
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
/**
 * * 1. Correct color not being inherited in IE 6/7/8/9.
 * * 2. Correct text not wrapping in Firefox 3.
 * * 3. Correct alignment displayed oddly in IE 6/7. */
legend {
  border: 0;
  /* 1 */
  padding: 0;
  white-space: normal;
  /* 2 */
  *margin-left: -7px;
}
/* 3 */
/**
 * * 1. Correct font size not being inherited in all browsers.
 * * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5,
 * *    and Chrome.
 * * 3. Improve appearance and consistency in all browsers. */
button, input, select, textarea {
  font-size: 100%;
  /* 1 */
  margin: 0;
  /* 2 */
  vertical-align: baseline;
  /* 3 */
  *vertical-align: middle;
}
/* 3 */
/**
 * * Address Firefox 3+ setting `line-height` on `input` using `!important` in
 * * the UA stylesheet. */
button, input {
  line-height: normal;
}
/**
 * * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * * All other form control elements do not inherit `text-transform` values.
 * * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+.
 * * Correct `select` style inheritance in Firefox 4+ and Opera. */
button, select {
  text-transform: none;
}
/**
 * * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 * *    and `video` controls.
 * * 2. Correct inability to style clickable `input` types in iOS.
 * * 3. Improve usability and consistency of cursor style between image-type
 * *    `input` and others.
 * * 4. Remove inner spacing in IE 7 without affecting normal text inputs.
 * *    Known issue: inner spacing remains in IE 6. */
button, html input[type=button] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */
  *overflow: visible;
}
/* 4 */
input[type=reset], input[type=submit] {
  -webkit-appearance: button;
  /* 2 */
  cursor: pointer;
  /* 3 */
  *overflow: visible;
}
/* 4 */
/**
 * * Re-set default cursor for disabled elements. */
button[disabled], html input[disabled] {
  cursor: default;
}
/**
 * * 1. Address box sizing set to content-box in IE 8/9.
 * * 2. Remove excess padding in IE 8/9.
 * * 3. Remove excess padding in IE 7.
 * *    Known issue: excess padding remains in IE 6. */
input {
  /* 3 */
}
input[type=checkbox], input[type=radio] {
  box-sizing: border-box;
  /* 1 */
  padding: 0;
  /* 2 */
  *height: 13px;
  /* 3 */
  *width: 13px;
}
input[type=search] {
  -webkit-appearance: textfield;
  /* 1 */
  /* 2 */
  box-sizing: content-box;
}
input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
  -webkit-appearance: none;
}
/**
 * * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
 * * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
 * *    (include `-moz` to future-proof). */
/**
 * * Remove inner padding and search cancel button in Safari 5 and Chrome
 * * on OS X. */
/**
 * * Remove inner padding and border in Firefox 3+. */
button::-moz-focus-inner, input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
/**
 * * 1. Remove default vertical scrollbar in IE 6/7/8/9.
 * * 2. Improve readability and alignment in all browsers. */
textarea {
  overflow: auto;
  /* 1 */
  vertical-align: top;
}
/* 2 */
/* ==========================================================================
 * * Tables
 * * ========================================================================== */
/**
 * * Remove most spacing between table cells. */
table {
  border-collapse: collapse;
  border-spacing: 0;
}
/* *
 * *Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name> */
.hljs {
  display: inline-block;
  padding: 0.5em;
  background: white;
  color: black;
}
.hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket {
  color: #008000;
}
.hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title {
  color: #00f;
}
.xml .hljs-tag {
  color: #00f;
}
.xml .hljs-tag .hljs-value {
  color: #00f;
}
.hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value {
  color: #a31515;
}
.ruby .hljs-symbol {
  color: #a31515;
}
.ruby .hljs-symbol .hljs-string {
  color: #a31515;
}
.hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute {
  color: #a31515;
}
.ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt {
  color: #2b91af;
}
.hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag {
  color: #808080;
}
.vhdl .hljs-typename {
  font-weight: bold;
}
.vhdl .hljs-string {
  color: #666666;
}
.vhdl .hljs-literal {
  color: #a31515;
}
.vhdl .hljs-attribute {
  color: #00b0e8;
}
.xml .hljs-attribute {
  color: #f00;
}
ul.tsd-descriptions > li > :first-child, .tsd-panel > :first-child, .col > :first-child, .col-11 > :first-child, .col-10 > :first-child, .col-9 > :first-child, .col-8 > :first-child, .col-7 > :first-child, .col-6 > :first-child, .col-5 > :first-child, .col-4 > :first-child, .col-3 > :first-child, .col-2 > :first-child, .col-1 > :first-child,
ul.tsd-descriptions > li > :first-child > :first-child,
.tsd-panel > :first-child > :first-child,
.col > :first-child > :first-child,
.col-11 > :first-child > :first-child,
.col-10 > :first-child > :first-child,
.col-9 > :first-child > :first-child,
.col-8 > :first-child > :first-child,
.col-7 > :first-child > :first-child,
.col-6 > :first-child > :first-child,
.col-5 > :first-child > :first-child,
.col-4 > :first-child > :first-child,
.col-3 > :first-child > :first-child,
.col-2 > :first-child > :first-child,
.col-1 > :first-child > :first-child,
ul.tsd-descriptions > li > :first-child > :first-child > :first-child,
.tsd-panel > :first-child > :first-child > :first-child,
.col > :first-child > :first-child > :first-child,
.col-11 > :first-child > :first-child > :first-child,
.col-10 > :first-child > :first-child > :first-child,
.col-9 > :first-child > :first-child > :first-child,
.col-8 > :first-child > :first-child > :first-child,
.col-7 > :first-child > :first-child > :first-child,
.col-6 > :first-child > :first-child > :first-child,
.col-5 > :first-child > :first-child > :first-child,
.col-4 > :first-child > :first-child > :first-child,
.col-3 > :first-child > :first-child > :first-child,
.col-2 > :first-child > :first-child > :first-child,
.col-1 > :first-child > :first-child > :first-child {
  margin-top: 0;
}
ul.tsd-descriptions > li > :last-child, .tsd-panel > :last-child, .col > :last-child, .col-11 > :last-child, .col-10 > :last-child, .col-9 > :last-child, .col-8 > :last-child, .col-7 > :last-child, .col-6 > :last-child, .col-5 > :last-child, .col-4 > :last-child, .col-3 > :last-child, .col-2 > :last-child, .col-1 > :last-child,
ul.tsd-descriptions > li > :last-child > :last-child,
.tsd-panel > :last-child > :last-child,
.col > :last-child > :last-child,
.col-11 > :last-child > :last-child,
.col-10 > :last-child > :last-child,
.col-9 > :last-child > :last-child,
.col-8 > :last-child > :last-child,
.col-7 > :last-child > :last-child,
.col-6 > :last-child > :last-child,
.col-5 > :last-child > :last-child,
.col-4 > :last-child > :last-child,
.col-3 > :last-child > :last-child,
.col-2 > :last-child > :last-child,
.col-1 > :last-child > :last-child,
ul.tsd-descriptions > li > :last-child > :last-child > :last-child,
.tsd-panel > :last-child > :last-child > :last-child,
.col > :last-child > :last-child > :last-child,
.col-11 > :last-child > :last-child > :last-child,
.col-10 > :last-child > :last-child > :last-child,
.col-9 > :last-child > :last-child > :last-child,
.col-8 > :last-child > :last-child > :last-child,
.col-7 > :last-child > :last-child > :last-child,
.col-6 > :last-child > :last-child > :last-child,
.col-5 > :last-child > :last-child > :last-child,
.col-4 > :last-child > :last-child > :last-child,
.col-3 > :last-child > :last-child > :last-child,
.col-2 > :last-child > :last-child > :last-child,
.col-1 > :last-child > :last-child > :last-child {
  margin-bottom: 0;
}
.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 40px;
}
@media (max-width: 640px) {
  .container {
    padding: 0 20px;
  }
}
.container-main {
  padding-bottom: 200px;
}
.row {
  display: -ms-flexbox;
  display: flex;
  position: relative;
  margin: 0 -10px;
}
.row:after {
  visibility: hidden;
  display: block;
  content: "";
  clear: both;
  height: 0;
}
.col, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 {
  box-sizing: border-box;
  float: left;
  padding: 0 10px;
}
.col-1 {
  width: 8.3333333333%;
}
.offset-1 {
  margin-left: 8.3333333333%;
}
.col-2 {
  width: 16.6666666667%;
}
.offset-2 {
  margin-left: 16.6666666667%;
}
.col-3 {
  width: 25%;
}
.offset-3 {
  margin-left: 25%;
}
.col-4 {
  width: 33.3333333333%;
}
.offset-4 {
  margin-left: 33.3333333333%;
}
.col-5 {
  width: 41.6666666667%;
}
.offset-5 {
  margin-left: 41.6666666667%;
}
.col-6 {
  width: 50%;
}
.offset-6 {
  margin-left: 50%;
}
.col-7 {
  width: 58.3333333333%;
}
.offset-7 {
  margin-left: 58.3333333333%;
}
.col-8 {
  width: 66.6666666667%;
}
.offset-8 {
  margin-left: 66.6666666667%;
}
.col-9 {
  width: 75%;
}
.offset-9 {
  margin-left: 75%;
}
.col-10 {
  width: 83.3333333333%;
}
.offset-10 {
  margin-left: 83.3333333333%;
}
.col-11 {
  width: 91.6666666667%;
}
.offset-11 {
  margin-left: 91.6666666667%;
}
.tsd-kind-icon {
  display: block;
  position: relative;
  padding-left: 20px;
  text-indent: -20px;
}
.tsd-kind-icon:before {
  content: "";
  display: inline-block;
  vertical-align: middle;
  width: 17px;
  height: 17px;
  margin: 0 3px 2px 0;
  background-image: url(data:image/png;base64,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);
}
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
  .tsd-kind-icon:before {
    background-image: url(data:image/png;base64,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);
    background-size: 238px 204px;
  }
}
.tsd-signature.tsd-kind-icon:before {
  background-position: 0 -153px;
}
.tsd-kind-object-literal > .tsd-kind-icon:before {
  background-position: 0px -17px;
}
.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -17px;
}
.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -17px;
}
.tsd-kind-class > .tsd-kind-icon:before {
  background-position: 0px -34px;
}
.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -34px;
}
.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -34px;
}
.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before {
  background-position: 0px -51px;
}
.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -51px;
}
.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -51px;
}
.tsd-kind-interface > .tsd-kind-icon:before {
  background-position: 0px -68px;
}
.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -68px;
}
.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -68px;
}
.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before {
  background-position: 0px -85px;
}
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -85px;
}
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -85px;
}
.tsd-kind-namespace > .tsd-kind-icon:before {
  background-position: 0px -102px;
}
.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -102px;
}
.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -102px;
}
.tsd-kind-module > .tsd-kind-icon:before {
  background-position: 0px -102px;
}
.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -102px;
}
.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -102px;
}
.tsd-kind-enum > .tsd-kind-icon:before {
  background-position: 0px -119px;
}
.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -119px;
}
.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -119px;
}
.tsd-kind-enum-member > .tsd-kind-icon:before {
  background-position: 0px -136px;
}
.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -136px;
}
.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -136px;
}
.tsd-kind-signature > .tsd-kind-icon:before {
  background-position: 0px -153px;
}
.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -153px;
}
.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -153px;
}
.tsd-kind-type-alias > .tsd-kind-icon:before {
  background-position: 0px -170px;
}
.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -170px;
}
.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -170px;
}
.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before {
  background-position: 0px -187px;
}
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -17px -187px;
}
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
  background-position: -34px -187px;
}
.tsd-kind-variable > .tsd-kind-icon:before {
  background-position: -136px -0px;
}
.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -0px;
}
.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -0px;
}
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -0px;
}
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -0px;
}
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -0px;
}
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -0px;
}
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -0px;
}
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -0px;
}
.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -0px;
}
.tsd-kind-property > .tsd-kind-icon:before {
  background-position: -136px -0px;
}
.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -0px;
}
.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -0px;
}
.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -0px;
}
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -0px;
}
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -0px;
}
.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -0px;
}
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -0px;
}
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -0px;
}
.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -0px;
}
.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -0px;
}
.tsd-kind-get-signature > .tsd-kind-icon:before {
  background-position: -136px -17px;
}
.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -17px;
}
.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -17px;
}
.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -17px;
}
.tsd-kind-set-signature > .tsd-kind-icon:before {
  background-position: -136px -34px;
}
.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -34px;
}
.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -34px;
}
.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -34px;
}
.tsd-kind-accessor > .tsd-kind-icon:before {
  background-position: -136px -51px;
}
.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -51px;
}
.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -51px;
}
.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -51px;
}
.tsd-kind-function > .tsd-kind-icon:before {
  background-position: -136px -68px;
}
.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -68px;
}
.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -68px;
}
.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -68px;
}
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -68px;
}
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -68px;
}
.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -68px;
}
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -68px;
}
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -68px;
}
.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -68px;
}
.tsd-kind-method > .tsd-kind-icon:before {
  background-position: -136px -68px;
}
.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -68px;
}
.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -68px;
}
.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -68px;
}
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -68px;
}
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -68px;
}
.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -68px;
}
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -68px;
}
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -68px;
}
.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -68px;
}
.tsd-kind-call-signature > .tsd-kind-icon:before {
  background-position: -136px -68px;
}
.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -68px;
}
.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -68px;
}
.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -68px;
}
.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before {
  background-position: -136px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -85px;
}
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -85px;
}
.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before {
  background-position: -136px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -85px;
}
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -85px;
}
.tsd-kind-constructor > .tsd-kind-icon:before {
  background-position: -136px -102px;
}
.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -102px;
}
.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -102px;
}
.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -102px;
}
.tsd-kind-constructor-signature > .tsd-kind-icon:before {
  background-position: -136px -102px;
}
.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -102px;
}
.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -102px;
}
.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -102px;
}
.tsd-kind-index-signature > .tsd-kind-icon:before {
  background-position: -136px -119px;
}
.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -119px;
}
.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -119px;
}
.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -119px;
}
.tsd-kind-event > .tsd-kind-icon:before {
  background-position: -136px -136px;
}
.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -136px;
}
.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -136px;
}
.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -136px;
}
.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -136px;
}
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -136px;
}
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -136px;
}
.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -136px;
}
.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -136px;
}
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -136px;
}
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -136px;
}
.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -136px;
}
.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -136px;
}
.tsd-is-static > .tsd-kind-icon:before {
  background-position: -136px -153px;
}
.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -153px;
}
.tsd-is-static.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -153px;
}
.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -153px;
}
.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -153px;
}
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -153px;
}
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -153px;
}
.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -153px;
}
.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -153px;
}
.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -153px;
}
.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -153px;
}
.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -153px;
}
.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -153px;
}
.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before {
  background-position: -136px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -170px;
}
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -170px;
}
.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before {
  background-position: -136px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -170px;
}
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -170px;
}
.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before {
  background-position: -136px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -170px;
}
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -170px;
}
.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before {
  background-position: -136px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -153px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
  background-position: -51px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -68px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -85px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -102px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
  background-position: -170px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
  background-position: -187px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
  background-position: -119px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
  background-position: -204px -187px;
}
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
  background-position: -221px -187px;
}
.no-transition {
  transition: none !important;
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  from {
    opacity: 1;
    visibility: visible;
  }
  to {
    opacity: 0;
  }
}
@keyframes fade-in-delayed {
  0% {
    opacity: 0;
  }
  33% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}
@keyframes fade-out-delayed {
  0% {
    opacity: 1;
    visibility: visible;
  }
  66% {
    opacity: 0;
  }
  100% {
    opacity: 0;
  }
}
@keyframes shift-to-left {
  from {
    transform: translate(0, 0);
  }
  to {
    transform: translate(-25%, 0);
  }
}
@keyframes unshift-to-left {
  from {
    transform: translate(-25%, 0);
  }
  to {
    transform: translate(0, 0);
  }
}
@keyframes pop-in-from-right {
  from {
    transform: translate(100%, 0);
  }
  to {
    transform: translate(0, 0);
  }
}
@keyframes pop-out-to-right {
  from {
    transform: translate(0, 0);
    visibility: visible;
  }
  to {
    transform: translate(100%, 0);
  }
}
body {
  background: #fdfdfd;
  font-family: "Segoe UI", sans-serif;
  font-size: 16px;
  color: #222;
}
a {
  color: #4da6ff;
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}
code, pre {
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
  padding: 0.2em;
  margin: 0;
  font-size: 14px;
  background-color: rgba(0, 0, 0, 0.04);
}
pre {
  padding: 10px;
}
pre code {
  padding: 0;
  font-size: 100%;
  background-color: transparent;
}
.tsd-typography {
  line-height: 1.333em;
}
.tsd-typography ul {
  list-style: square;
  padding: 0 0 0 20px;
  margin: 0;
}
.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 {
  font-size: 1em;
  margin: 0;
}
.tsd-typography h5, .tsd-typography h6 {
  font-weight: normal;
}
.tsd-typography p, .tsd-typography ul, .tsd-typography ol {
  margin: 1em 0;
}
@media (min-width: 901px) and (max-width: 1024px) {
  html.default .col-content {
    width: 72%;
  }
  html.default .col-menu {
    width: 28%;
  }
  html.default .tsd-navigation {
    padding-left: 10px;
  }
}
@media (max-width: 900px) {
  html.default .col-content {
    float: none;
    width: 100%;
  }
  html.default .col-menu {
    position: fixed !important;
    overflow: auto;
    -webkit-overflow-scrolling: touch;
    z-index: 1024;
    top: 0 !important;
    bottom: 0 !important;
    left: auto !important;
    right: 0 !important;
    width: 100%;
    padding: 20px 20px 0 0;
    max-width: 450px;
    visibility: hidden;
    background-color: #fff;
    transform: translate(100%, 0);
  }
  html.default .col-menu > *:last-child {
    padding-bottom: 20px;
  }
  html.default .overlay {
    content: "";
    display: block;
    position: fixed;
    z-index: 1023;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(0, 0, 0, 0.75);
    visibility: hidden;
  }
  html.default.to-has-menu .overlay {
    animation: fade-in 0.4s;
  }
  html.default.to-has-menu header,
html.default.to-has-menu footer,
html.default.to-has-menu .col-content {
    animation: shift-to-left 0.4s;
  }
  html.default.to-has-menu .col-menu {
    animation: pop-in-from-right 0.4s;
  }
  html.default.from-has-menu .overlay {
    animation: fade-out 0.4s;
  }
  html.default.from-has-menu header,
html.default.from-has-menu footer,
html.default.from-has-menu .col-content {
    animation: unshift-to-left 0.4s;
  }
  html.default.from-has-menu .col-menu {
    animation: pop-out-to-right 0.4s;
  }
  html.default.has-menu body {
    overflow: hidden;
  }
  html.default.has-menu .overlay {
    visibility: visible;
  }
  html.default.has-menu header,
html.default.has-menu footer,
html.default.has-menu .col-content {
    transform: translate(-25%, 0);
  }
  html.default.has-menu .col-menu {
    visibility: visible;
    transform: translate(0, 0);
  }
}
.tsd-page-title {
  padding: 70px 0 20px 0;
  margin: 0 0 40px 0;
  background: #fff;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.35);
}
.tsd-page-title h1 {
  margin: 0;
}
.tsd-breadcrumb {
  margin: 0;
  padding: 0;
  color: #808080;
}
.tsd-breadcrumb a {
  color: #808080;
  text-decoration: none;
}
.tsd-breadcrumb a:hover {
  text-decoration: underline;
}
.tsd-breadcrumb li {
  display: inline;
}
.tsd-breadcrumb li:after {
  content: " / ";
}
html.minimal .container {
  margin: 0;
}
html.minimal .container-main {
  padding-top: 50px;
  padding-bottom: 0;
}
html.minimal .content-wrap {
  padding-left: 300px;
}
html.minimal .tsd-navigation {
  position: fixed !important;
  overflow: auto;
  -webkit-overflow-scrolling: touch;
  box-sizing: border-box;
  z-index: 1;
  left: 0;
  top: 40px;
  bottom: 0;
  width: 300px;
  padding: 20px;
  margin: 0;
}
html.minimal .tsd-member .tsd-member {
  margin-left: 0;
}
html.minimal .tsd-page-toolbar {
  position: fixed;
  z-index: 2;
}
html.minimal #tsd-filter .tsd-filter-group {
  right: 0;
  transform: none;
}
html.minimal footer {
  background-color: transparent;
}
html.minimal footer .container {
  padding: 0;
}
html.minimal .tsd-generator {
  padding: 0;
}
@media (max-width: 900px) {
  html.minimal .tsd-navigation {
    display: none;
  }
  html.minimal .content-wrap {
    padding-left: 0;
  }
}
dl.tsd-comment-tags {
  overflow: hidden;
}
dl.tsd-comment-tags dt {
  float: left;
  padding: 1px 5px;
  margin: 0 10px 0 0;
  border-radius: 4px;
  border: 1px solid #808080;
  color: #808080;
  font-size: 0.8em;
  font-weight: normal;
}
dl.tsd-comment-tags dd {
  margin: 0 0 10px 0;
}
dl.tsd-comment-tags dd:before, dl.tsd-comment-tags dd:after {
  display: table;
  content: " ";
}
dl.tsd-comment-tags dd pre, dl.tsd-comment-tags dd:after {
  clear: both;
}
dl.tsd-comment-tags p {
  margin: 0;
}
.tsd-panel.tsd-comment .lead {
  font-size: 1.1em;
  line-height: 1.333em;
  margin-bottom: 2em;
}
.tsd-panel.tsd-comment .lead:last-child {
  margin-bottom: 0;
}
.toggle-protected .tsd-is-private {
  display: none;
}
.toggle-public .tsd-is-private,
.toggle-public .tsd-is-protected,
.toggle-public .tsd-is-private-protected {
  display: none;
}
.toggle-inherited .tsd-is-inherited {
  display: none;
}
.toggle-only-exported .tsd-is-not-exported {
  display: none;
}
.toggle-externals .tsd-is-external {
  display: none;
}
#tsd-filter {
  position: relative;
  display: inline-block;
  height: 40px;
  vertical-align: bottom;
}
.no-filter #tsd-filter {
  display: none;
}
#tsd-filter .tsd-filter-group {
  display: inline-block;
  height: 40px;
  vertical-align: bottom;
  white-space: nowrap;
}
#tsd-filter input {
  display: none;
}
@media (max-width: 900px) {
  #tsd-filter .tsd-filter-group {
    display: block;
    position: absolute;
    top: 40px;
    right: 20px;
    height: auto;
    background-color: #fff;
    visibility: hidden;
    transform: translate(50%, 0);
    box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);
  }
  .has-options #tsd-filter .tsd-filter-group {
    visibility: visible;
  }
  .to-has-options #tsd-filter .tsd-filter-group {
    animation: fade-in 0.2s;
  }
  .from-has-options #tsd-filter .tsd-filter-group {
    animation: fade-out 0.2s;
  }
  #tsd-filter label,
#tsd-filter .tsd-select {
    display: block;
    padding-right: 20px;
  }
}
footer {
  border-top: 1px solid #eee;
  background-color: #fff;
}
footer.with-border-bottom {
  border-bottom: 1px solid #eee;
}
footer .tsd-legend-group {
  font-size: 0;
}
footer .tsd-legend {
  display: inline-block;
  width: 25%;
  padding: 0;
  font-size: 16px;
  list-style: none;
  line-height: 1.333em;
  vertical-align: top;
}
@media (max-width: 900px) {
  footer .tsd-legend {
    width: 50%;
  }
}
.tsd-hierarchy {
  list-style: square;
  padding: 0 0 0 20px;
  margin: 0;
}
.tsd-hierarchy .target {
  font-weight: bold;
}
.tsd-index-panel .tsd-index-content {
  margin-bottom: -30px !important;
}
.tsd-index-panel .tsd-index-section {
  margin-bottom: 30px !important;
}
.tsd-index-panel h3 {
  margin: 0 -20px 10px -20px;
  padding: 0 20px 10px 20px;
  border-bottom: 1px solid #eee;
}
.tsd-index-panel ul.tsd-index-list {
  -moz-column-count: 3;
  -ms-column-count: 3;
  -o-column-count: 3;
  column-count: 3;
  -moz-column-gap: 20px;
  -ms-column-gap: 20px;
  -o-column-gap: 20px;
  column-gap: 20px;
  padding: 0;
  list-style: none;
  line-height: 1.333em;
}
@media (max-width: 900px) {
  .tsd-index-panel ul.tsd-index-list {
    -moz-column-count: 1;
    -ms-column-count: 1;
    -o-column-count: 1;
    column-count: 1;
  }
}
@media (min-width: 901px) and (max-width: 1024px) {
  .tsd-index-panel ul.tsd-index-list {
    -moz-column-count: 2;
    -ms-column-count: 2;
    -o-column-count: 2;
    column-count: 2;
  }
}
.tsd-index-panel ul.tsd-index-list li {
  -webkit-page-break-inside: avoid;
  -moz-page-break-inside: avoid;
  -ms-page-break-inside: avoid;
  -o-page-break-inside: avoid;
  page-break-inside: avoid;
}
.tsd-index-panel a,
.tsd-index-panel .tsd-parent-kind-module a {
  color: #9600ff;
}
.tsd-index-panel .tsd-parent-kind-interface a {
  color: #7da01f;
}
.tsd-index-panel .tsd-parent-kind-enum a {
  color: #cc9900;
}
.tsd-index-panel .tsd-parent-kind-class a {
  color: #4da6ff;
}
.tsd-index-panel .tsd-kind-module a {
  color: #9600ff;
}
.tsd-index-panel .tsd-kind-interface a {
  color: #7da01f;
}
.tsd-index-panel .tsd-kind-enum a {
  color: #cc9900;
}
.tsd-index-panel .tsd-kind-class a {
  color: #4da6ff;
}
.tsd-index-panel .tsd-is-private a {
  color: #808080;
}
.tsd-flag {
  display: inline-block;
  padding: 1px 5px;
  border-radius: 4px;
  color: #fff;
  background-color: #808080;
  text-indent: 0;
  font-size: 14px;
  font-weight: normal;
}
.tsd-anchor {
  position: absolute;
  top: -100px;
}
.tsd-member {
  position: relative;
}
.tsd-member .tsd-anchor + h3 {
  margin-top: 0;
  margin-bottom: 0;
  border-bottom: none;
}
.tsd-navigation {
  margin: 0 0 0 40px;
}
.tsd-navigation a {
  display: block;
  padding-top: 2px;
  padding-bottom: 2px;
  border-left: 2px solid transparent;
  color: #222;
  text-decoration: none;
  transition: border-left-color 0.1s;
}
.tsd-navigation a:hover {
  text-decoration: underline;
}
.tsd-navigation ul {
  margin: 0;
  padding: 0;
  list-style: none;
}
.tsd-navigation li {
  padding: 0;
}
.tsd-navigation.primary {
  padding-bottom: 40px;
}
.tsd-navigation.primary a {
  display: block;
  padding-top: 6px;
  padding-bottom: 6px;
}
.tsd-navigation.primary ul li a {
  padding-left: 5px;
}
.tsd-navigation.primary ul li li a {
  padding-left: 25px;
}
.tsd-navigation.primary ul li li li a {
  padding-left: 45px;
}
.tsd-navigation.primary ul li li li li a {
  padding-left: 65px;
}
.tsd-navigation.primary ul li li li li li a {
  padding-left: 85px;
}
.tsd-navigation.primary ul li li li li li li a {
  padding-left: 105px;
}
.tsd-navigation.primary > ul {
  border-bottom: 1px solid #eee;
}
.tsd-navigation.primary li {
  border-top: 1px solid #eee;
}
.tsd-navigation.primary li.current > a {
  font-weight: bold;
}
.tsd-navigation.primary li.label span {
  display: block;
  padding: 20px 0 6px 5px;
  color: #808080;
}
.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a {
  padding-top: 20px;
}
.tsd-navigation.secondary {
  max-height: calc(100vh - 1rem - 40px);
  overflow: auto;
  position: -webkit-sticky;
  position: sticky;
  top: calc(.5rem + 40px);
  transition: 0.3s;
}
.tsd-navigation.secondary.tsd-navigation--toolbar-hide {
  max-height: calc(100vh - 1rem);
  top: 0.5rem;
}
.tsd-navigation.secondary ul {
  transition: opacity 0.2s;
}
.tsd-navigation.secondary ul li a {
  padding-left: 25px;
}
.tsd-navigation.secondary ul li li a {
  padding-left: 45px;
}
.tsd-navigation.secondary ul li li li a {
  padding-left: 65px;
}
.tsd-navigation.secondary ul li li li li a {
  padding-left: 85px;
}
.tsd-navigation.secondary ul li li li li li a {
  padding-left: 105px;
}
.tsd-navigation.secondary ul li li li li li li a {
  padding-left: 125px;
}
.tsd-navigation.secondary ul.current a {
  border-left-color: #eee;
}
.tsd-navigation.secondary li.focus > a,
.tsd-navigation.secondary ul.current li.focus > a {
  border-left-color: #000;
}
.tsd-navigation.secondary li.current {
  margin-top: 20px;
  margin-bottom: 20px;
  border-left-color: #eee;
}
.tsd-navigation.secondary li.current > a {
  font-weight: bold;
}
@media (min-width: 901px) {
  .menu-sticky-wrap {
    position: static;
  }
}
.tsd-panel {
  margin: 20px 0;
  padding: 20px;
  background-color: #fff;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);
}
.tsd-panel:empty {
  display: none;
}
.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 {
  margin: 1.5em -20px 10px -20px;
  padding: 0 20px 10px 20px;
  border-bottom: 1px solid #eee;
}
.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature {
  margin-bottom: 0;
  border-bottom: 0;
}
.tsd-panel table {
  display: block;
  width: 100%;
  overflow: auto;
  margin-top: 10px;
  word-break: normal;
  word-break: keep-all;
}
.tsd-panel table th {
  font-weight: bold;
}
.tsd-panel table th, .tsd-panel table td {
  padding: 6px 13px;
  border: 1px solid #ddd;
}
.tsd-panel table tr {
  background-color: #fff;
  border-top: 1px solid #ccc;
}
.tsd-panel table tr:nth-child(2n) {
  background-color: #f8f8f8;
}
.tsd-panel-group {
  margin: 60px 0;
}
.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 {
  padding-left: 20px;
  padding-right: 20px;
}
#tsd-search {
  transition: background-color 0.2s;
}
#tsd-search .title {
  position: relative;
  z-index: 2;
}
#tsd-search .field {
  position: absolute;
  left: 0;
  top: 0;
  right: 40px;
  height: 40px;
}
#tsd-search .field input {
  box-sizing: border-box;
  position: relative;
  top: -50px;
  z-index: 1;
  width: 100%;
  padding: 0 10px;
  opacity: 0;
  outline: 0;
  border: 0;
  background: transparent;
  color: #222;
}
#tsd-search .field label {
  position: absolute;
  overflow: hidden;
  right: -40px;
}
#tsd-search .field input,
#tsd-search .title {
  transition: opacity 0.2s;
}
#tsd-search .results {
  position: absolute;
  visibility: hidden;
  top: 40px;
  width: 100%;
  margin: 0;
  padding: 0;
  list-style: none;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);
}
#tsd-search .results li {
  padding: 0 10px;
  background-color: #fdfdfd;
}
#tsd-search .results li:nth-child(even) {
  background-color: #fff;
}
#tsd-search .results li.state {
  display: none;
}
#tsd-search .results li.current,
#tsd-search .results li:hover {
  background-color: #eee;
}
#tsd-search .results a {
  display: block;
}
#tsd-search .results a:before {
  top: 10px;
}
#tsd-search .results span.parent {
  color: #808080;
  font-weight: normal;
}
#tsd-search.has-focus {
  background-color: #eee;
}
#tsd-search.has-focus .field input {
  top: 0;
  opacity: 1;
}
#tsd-search.has-focus .title {
  z-index: 0;
  opacity: 0;
}
#tsd-search.has-focus .results {
  visibility: visible;
}
#tsd-search.loading .results li.state.loading {
  display: block;
}
#tsd-search.failure .results li.state.failure {
  display: block;
}
.tsd-signature {
  margin: 0 0 1em 0;
  padding: 10px;
  border: 1px solid #eee;
  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
  font-size: 14px;
}
.tsd-signature.tsd-kind-icon {
  padding-left: 30px;
}
.tsd-signature.tsd-kind-icon:before {
  top: 10px;
  left: 10px;
}
.tsd-panel > .tsd-signature {
  margin-left: -20px;
  margin-right: -20px;
  border-width: 1px 0;
}
.tsd-panel > .tsd-signature.tsd-kind-icon {
  padding-left: 40px;
}
.tsd-panel > .tsd-signature.tsd-kind-icon:before {
  left: 20px;
}
.tsd-signature-symbol {
  color: #808080;
  font-weight: normal;
}
.tsd-signature-type {
  font-style: italic;
  font-weight: normal;
}
.tsd-signatures {
  padding: 0;
  margin: 0 0 1em 0;
  border: 1px solid #eee;
}
.tsd-signatures .tsd-signature {
  margin: 0;
  border-width: 1px 0 0 0;
  transition: background-color 0.1s;
}
.tsd-signatures .tsd-signature:first-child {
  border-top-width: 0;
}
.tsd-signatures .tsd-signature.current {
  background-color: #eee;
}
.tsd-signatures.active > .tsd-signature {
  cursor: pointer;
}
.tsd-panel > .tsd-signatures {
  margin-left: -20px;
  margin-right: -20px;
  border-width: 1px 0;
}
.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon {
  padding-left: 40px;
}
.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before {
  left: 20px;
}
.tsd-panel > a.anchor + .tsd-signatures {
  border-top-width: 0;
  margin-top: -20px;
}
ul.tsd-descriptions {
  position: relative;
  overflow: hidden;
  transition: height 0.3s;
  padding: 0;
  list-style: none;
}
ul.tsd-descriptions.active > .tsd-description {
  display: none;
}
ul.tsd-descriptions.active > .tsd-description.current {
  display: block;
}
ul.tsd-descriptions.active > .tsd-description.fade-in {
  animation: fade-in-delayed 0.3s;
}
ul.tsd-descriptions.active > .tsd-description.fade-out {
  animation: fade-out-delayed 0.3s;
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  right: 0;
  opacity: 0;
  visibility: hidden;
}
ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 {
  font-size: 16px;
  margin: 1em 0 0.5em 0;
}
ul.tsd-parameters,
ul.tsd-type-parameters {
  list-style: square;
  margin: 0;
  padding-left: 20px;
}
ul.tsd-parameters > li.tsd-parameter-signature,
ul.tsd-type-parameters > li.tsd-parameter-signature {
  list-style: none;
  margin-left: -20px;
}
ul.tsd-parameters h5,
ul.tsd-type-parameters h5 {
  font-size: 16px;
  margin: 1em 0 0.5em 0;
}
ul.tsd-parameters .tsd-comment,
ul.tsd-type-parameters .tsd-comment {
  margin-top: -0.5em;
}
.tsd-sources {
  font-size: 14px;
  color: #808080;
  margin: 0 0 1em 0;
}
.tsd-sources a {
  color: #808080;
  text-decoration: underline;
}
.tsd-sources ul, .tsd-sources p {
  margin: 0 !important;
}
.tsd-sources ul {
  list-style: none;
  padding: 0;
}
.tsd-page-toolbar {
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  width: 100%;
  height: 40px;
  color: #333;
  background: #fff;
  border-bottom: 1px solid #eee;
  transition: transform 0.3s linear;
}
.tsd-page-toolbar a {
  color: #333;
  text-decoration: none;
}
.tsd-page-toolbar a.title {
  font-weight: bold;
}
.tsd-page-toolbar a.title:hover {
  text-decoration: underline;
}
.tsd-page-toolbar .table-wrap {
  display: table;
  width: 100%;
  height: 40px;
}
.tsd-page-toolbar .table-cell {
  display: table-cell;
  position: relative;
  white-space: nowrap;
  line-height: 40px;
}
.tsd-page-toolbar .table-cell:first-child {
  width: 100%;
}
.tsd-page-toolbar--hide {
  transform: translateY(-100%);
}
.tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before {
  content: "";
  display: inline-block;
  width: 40px;
  height: 40px;
  margin: 0 -8px 0 0;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAAoCAQAAAAlSeuiAAABp0lEQVR4Ae3aUa3jQAyF4QNhIBTCQiiEQlgIhRAGhTAQBkIgBEIgDITZZGXNjZTePiSWYqn/54dGfbAq+SiTutWXAgAAAAAAAAAAAAA8NCz1UFSD2lKDS5d3NVzZj/BVNasaLoRZRUmj2lLrVVHWMUntQ13Wj/i1pWa9lprX6xMRnH4dx6Rjsn26+v+12ms+EcB37P0r+qH+DNQGXgMFcHzbregQ78B8eQCTJk0e979ZW7PdA2O49ceDsYexKgUNoI3EKYDWL3D8miaPh/uXtl6BHqEHFQvgXau/FsCiIWAAbST2fpQRT0sl70j3z5ZiBdD7CG5WZX8kxwmgjbiP5GQA9/3O2XaxnnHi53AEE0AbRh+JQwC3/fzC4hcb6xPvS4i3QaMdwX+0utsRPEY6gm2wNhKHAG77eUi7SIcK4G4NY4GMIan2u2Cxqzncl5DUn7Q8ArjvZ8JFOsl/Ed0jyBom+BomQKSto+9PcblHMM4iuu4X0QQw5hrGQY/gUxFkjZuf4m4alXVU+1De/VhEn5CvDSB/RsBzqWgAAAAAAAAAAAAAAACAfyyYJ5nhVuwIAAAAAElFTkSuQmCC);
  background-repeat: no-repeat;
  text-indent: -1024px;
  vertical-align: bottom;
}
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
  .tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAABQCAMAAAC+sjQXAAAAM1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjBUbJAAAAEXRSTlMA3/+/UCBw7xCPYIBAMM+vn1qYQ7QAAALCSURBVHgB7MGBAAAAAICg/akXqQIAAAAAAAAAAAAAAAAAAJids9mdE4bhoDNZCITP93/aSmhV/9uwPWyi8jtkblws2IxsYpz9LwSAaJW8AreE16PxOsMYE6Q4DiYKF7X+8ZHXc/E608xv5snEyIuZrVwMZjbnujR6T3gsXmcLOIRNzD+Ig2UuVtt2+NbAiX/wVLzOlviD9L2BOfGBlL/3D1I+uDjGBJArBPxU3x+K15kCQFo2s21JAOHrKpz4SPrWv4IKA+uFaR6vMwMcb+emA2DWEfDglrkLqEBOKVslA8Dx14oPMiV4CtywWxdQgAwkq2QE0uTXUwJGk2G9s3mTFNBzAkC7HKPsX72AEVjMnAWIpsPCRRjXdQxcjCYpoOcEgHY5Rtk/slWSgM3M2aSeeVgjAOeVpKcdgGMdNAXMuIAqOcZzqF8L+WcAsi8wkTeheCWMegL6mgCorHHyEJ5TVfxrLWDrTUjZdhnhjYqAnlN8TaoELOLVC0gucmoz/3RKcPs2jAs4+J5ET8AEZF+TSgGLeC1V8YuGQQU2IV1Asq9JCwE9XitZVPxr34bpJRj8PqsFLOK108W9aVrWZRrR7Sm2HL4JCToCujHZ6gUs4jUz0P1TEvD+U5wMa363YeziBODIq1YbJrsv9QKW8Ry1nNp+GAHvuingRTfmYcjBf0QpAS37bdUL6PFKtHJq63EsZ5cxcKMkDVIClu1dAK1PcJ5TFQ0M9wZKDCPs3BD7MIJGTs3WfiTfDVQYx5q5ZekCauTU3P5Q0ukGCgh49oFURdobWBY9N/CxEuwGjpGLuPhTdwH1x7HqDDxNgRP2zQ8lraFyF/yJ9vH6QGqtgSbBOU8/j2VORz+Wqfle2d5Ae4R+ML0z7Y+W4P7XHN3AU+tzyK/24EAGAAAAYJC/9T2+CgAAAAAAAAAAAAAAAAAAAADgJpfzHyIKFFBKAAAAAElFTkSuQmCC);
    background-size: 320px 40px;
  }
}
.tsd-widget {
  display: inline-block;
  overflow: hidden;
  opacity: 0.6;
  height: 40px;
  transition: opacity 0.1s, background-color 0.2s;
  vertical-align: bottom;
  cursor: pointer;
}
.tsd-widget:hover {
  opacity: 0.8;
}
.tsd-widget.active {
  opacity: 1;
  background-color: #eee;
}
.tsd-widget.no-caption {
  width: 40px;
}
.tsd-widget.no-caption:before {
  margin: 0;
}
.tsd-widget.search:before {
  background-position: 0 0;
}
.tsd-widget.menu:before {
  background-position: -40px 0;
}
.tsd-widget.options:before {
  background-position: -80px 0;
}
.tsd-widget.options, .tsd-widget.menu {
  display: none;
}
@media (max-width: 900px) {
  .tsd-widget.options, .tsd-widget.menu {
    display: inline-block;
  }
}
input[type=checkbox] + .tsd-widget:before {
  background-position: -120px 0;
}
input[type=checkbox]:checked + .tsd-widget:before {
  background-position: -160px 0;
}
.tsd-select {
  position: relative;
  display: inline-block;
  height: 40px;
  transition: opacity 0.1s, background-color 0.2s;
  vertical-align: bottom;
  cursor: pointer;
}
.tsd-select .tsd-select-label {
  opacity: 0.6;
  transition: opacity 0.2s;
}
.tsd-select .tsd-select-label:before {
  background-position: -240px 0;
}
.tsd-select.active .tsd-select-label {
  opacity: 0.8;
}
.tsd-select.active .tsd-select-list {
  visibility: visible;
  opacity: 1;
  transition-delay: 0s;
}
.tsd-select .tsd-select-list {
  position: absolute;
  visibility: hidden;
  top: 40px;
  left: 0;
  margin: 0;
  padding: 0;
  opacity: 0;
  list-style: none;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.25);
  transition: visibility 0s 0.2s, opacity 0.2s;
}
.tsd-select .tsd-select-list li {
  padding: 0 20px 0 0;
  background-color: #fdfdfd;
}
.tsd-select .tsd-select-list li:before {
  background-position: 40px 0;
}
.tsd-select .tsd-select-list li:nth-child(even) {
  background-color: #fff;
}
.tsd-select .tsd-select-list li:hover {
  background-color: #eee;
}
.tsd-select .tsd-select-list li.selected:before {
  background-position: -200px 0;
}
@media (max-width: 900px) {
  .tsd-select .tsd-select-list {
    top: 0;
    left: auto;
    right: 100%;
    margin-right: -5px;
  }
  .tsd-select .tsd-select-label:before {
    background-position: -280px 0;
  }
}
img {
  max-width: 100%;
}</style>
</head>
<body>
<header>
    <div class="tsd-page-toolbar">
        <div class="container">
            <div class="table-wrap">
                <div class="table-cell">
                    <strong><a href="index.html">@mathcoach/ide-api</a></strong>
                </div>
                <div class="table-cell" id="tsd-widgets">
                    <div id="tsd-filter">
                        <a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
                        <div class="tsd-filter-group">
                            <div class="tsd-select" id="tsd-filter-visibility">
                                <span class="tsd-select-label">All</span>
                                <ul class="tsd-select-list">
                                    <li data-value="public">Public</li>
                                    <li data-value="protected">Public/Protected</li>
                                    <li data-value="private" class="selected">All</li>
                                </ul>
                            </div>
                            <input type="checkbox" id="tsd-filter-inherited" checked />
                            <label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
                            <input type="checkbox" id="tsd-filter-only-exported" />
                            <label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
                        </div>
                    </div>
                    <a href="#typedoc-main-index" class="tsd-widget menu no-caption">Menu</a>
                </div>
            </div>
        </div>
    </div>
</header>
<nav class="tsd-navigation secondary">
    <ul>
    </ul>
</nav>
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base=".">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
    <div class="content-wrap">
        <div class="tsd-panel tsd-typography">
            <a href="#mathcoach-ide-api-smallcodeversion-400codesmall" id="mathcoach-ide-api-smallcodeversion-400codesmall" style="color: inherit; text-decoration: none;">
                <h1>MathCoach IDE API <small><code>Version 4.0.0</code></small></h1>
            </a>
            <p>In diesem Paket (<a href="https://bayes.htwsaar.de/gitblit/summary/mathcoach!mathcoach-ide-api.git">Das Gitblit Repository findet sich hier</a>)
                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.</p>
            <p><img src="media/usage_author.gif" alt="Demo"></p>
            <p><em>Beispielhafte Anwendung: Eine Datei (<code>file.demo.json</code> - auch &quot;Kontext-Datei&quot; genannt) wird angelegt. Diese kann direkt durch das Werkzeug (Demo-Editor) geladen werden. Das Werkzeug kann die Kontext-Datei beschreiben (um zu demonstrieren, dass es ein internes Datenmodell persistent speichern kann). Weiterhin kann das Werkzeug eine Groovy-Aufgabe generieren und die Aufgaben-Vorschau anzeigen lassen.</em></p>
            <a href="#idee" id="idee" style="color: inherit; text-decoration: none;">
                <h2>Idee</h2>
            </a>
            <p>Grundlegende Idee ist, dass ein externes Werkzeug nahtlos in die MathCoach IDE integriert werden
                kann. Bestimmte Dateien werden anhand ihrer Dateiendung mit dem Werkzeug verknüpft, sodass der
                Benutzer das passende Werkzeug durch einen einfache Klick im Datei-Explorer starten kann. Diese
                Datei wird im folgenden <em>Kontext-Datei</em> genannt und soll dazu dienen, das interene Datenmodell (also
                alle Informationen, die der Benutzer im Werkzeug angibt) zu speichern. Das Werkzeug soll das gespeicherte
            Datenmodell zu einem späteren Zeitpunkt wieder laden können.</p>
            <p>Ein Werkzeug kann beispielsweise MathCoach-Aufgaben (Groovy-Datei) generieren. Weitere Funktionalitäten
                der IDE - beispielsweise das Starten der generierten Aufgabe in der Aufgaben-Vorschau der IDE - sind
            ebenfalls für den Werkzeugentwickler verfügbar.</p>
            <p>Das Realisieren von Werkzeugen auf diese Art und Weise hat zahlreiche Vorteile:</p>
            <ul>
                <li>Werkzeuge werden einheitliche und benutzerfreundlich zur Verfügung gestellt</li>
                <li>Grundlegende Funktionalitäten (Anlegen von Dateien, Navigieren im Dateisystem) werden bereits
                durch die IDE bereitgestellt. So können Werkzeug-Entwickler ihren Fokus auf das Werkzeug legen.</li>
                <li>Die IDE kann gefährliche Situationen (z.B. das Überschreiben von Dateien) abfangen
                und den Benutzer entscheiden lassen, wie fortgefahren werden soll.</li>
            </ul>
            <a href="#entwicklung-externer-werkzeuge" id="entwicklung-externer-werkzeuge" style="color: inherit; text-decoration: none;">
                <h2>Entwicklung externer Werkzeuge</h2>
            </a>
            <p>Externe Werkzeuge laufen ausschließlich im Webbrowser des Benutzers - es muss also
                auf <code>HTML</code>, <code>JavaScript</code> und <code>CSS</code> gesetzt werden. Außerdem muss das Werkzeug unter
                der Domain des jeweiligen MathCoach-Servers erreichbar sein. Zur Entwicklungszeit legt man das Werkzeug
                dazu im www-Verzeichnis ab. Die von der IDE bereitgestellte <code>ide-lib.js</code> Bibliothek
            muss eingebunden werden.</p>
            <pre><code><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/mathcoach/ui/ide/ide-lib.js"</span>/&gt;</span> </code></pre><p>Dabei darf der MathCoach-Server <strong>nicht</strong> fest in die URL eincodiert werden. Andernfalls
                kann es zu Problemen kommen, wenn das Werkzeug auf unterschiedlichen Server bereitgestellt
                wird oder ohne IDE lauffähig sein soll. Bei korrekter Verwendung steht die IDE API nun
            durch die globale Varialbe <code>MC</code> zur Verfügung - <a href="./interfaces/mathcoach.api.html">Dokumentation der IDE API</a>.</p>
            <blockquote>
                <p><strong>Hinweis</strong>: Es steht <strong>ausschließlich</strong> die API, welche über die globale Variable <code>MC</code>
                    definiert ist, zur Verfügung! Hilfsfunktionen wie <code>Helpers.enableOfflineUsageIfNecessary()</code>
                    sind grundsätzlich nicht verfügbar und müssen vom Werkzeugentwickler eingebunden
                werden - siehe &quot;Hilfunktionen für Werkzeug-Entwickler&quot; weiter unten.</p>
            </blockquote>
            <blockquote>
                <p><strong>Hinweis</strong>: Erst, wenn das Werkzeug in die IDE integriert und aus dieser heraus
                    gestartet wurde, kann die IDE API verwendet werden! Soll das Werkzeug auch ohne die
                    IDE nutzbar sein (z.B. zum Testen), muss dies bei der Implementierung berücksichtigt
                    werden. Konnte die <code>ide-lib.js</code> nicht eingebunden werden (weil das Werkzeug ohne IDE
                    gestartet wurde - darum darf auch kein Server fest eincodiert werden), steht die
                    globale Variable <code>MC</code> nicht zur Verfügung (<code>typeof MC === &quot;undefined&quot;</code>). Hier kann das
                    Werkezug eine Fallunterscheidung treffen und beispielsweise eine eigene Implementierung
                    über die globale Variable <code>MC</code> bereitstellen. Siehe auch <code>Helpers.enableOfflineUsageIfNecessary()</code>
                weiter unten.</p>
            </blockquote>
            <a href="#empfohlenes-vorgehen" id="empfohlenes-vorgehen" style="color: inherit; text-decoration: none;">
                <h3>Empfohlenes Vorgehen</h3>
            </a>
            <p>Damit externe Werkzeuge ein einheitliches Verhalten aufweisen, sollte wie folgt vorgegangen werden.</p>
            <p>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 oder die IDE (aus
            welchen Gründen auch immer) nicht einsatzbereit ist.</p>
            <pre><code><span class="hljs-keyword">if</span>(<span class="hljs-keyword">typeof</span> MC === <span class="hljs-string">"undefined"</span>){
    <span class="hljs-comment">// Hinweis: Hier kann die IDE API nachgebildet werden,</span>
    <span class="hljs-comment">// sodass das Werkzeug auch "Offline" funktioniert. </span>
    <span class="hljs-comment">// Also: MC = { isReady: async () =&gt; true, ...}</span>
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"IDE Lib nicht eingebunden"</span>); <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> show error to user</span>
}
<span class="hljs-keyword">const</span> isReady = <span class="hljs-keyword">await</span> MC.isReady();
<span class="hljs-keyword">if</span>(!isReady){
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"Die MathCoach-API ist nicht einsatzbereit."</span>); <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> show error to user</span>
}
...</code></pre><p>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.</p>
            <p>Ist der Inhalt der Kontext-Datei leer, wurde die Datei neu angelegt und zum ersten mal geöffnet.
            Nun soll das Werkzeug:</p>
            <ul>
                <li>Sich initialisieren. Es ist sinnvoll, dass das Werkzeug mit einem beispielhaften
                Datenmodell inititalisiert wird.</li>
                <li>Das interne Datenmodell in die Kontext-Datei schreiben </li>
                <li>Die zugehörige Aufgabe generieren. Siehe auch <code>contextFileToExerciseFile</code> in der <a href="./modules/helpers.html">Dokumentation der Hilfsfunktionen</a>.</li>
            </ul>
            <p>Andernfalls kann das zuvor gespeichertes Datenmodell aus der Kontext-Datei 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.</p>
            <pre><code><span class="hljs-keyword">let</span> contextFile = await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.get<span class="hljs-constructor">ContextFile()</span>; <span class="hljs-comment">// Datei, mit der der Editor gestartet wurde</span>
<span class="hljs-keyword">let</span> contextFileContent = await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.fs.read<span class="hljs-constructor">File(<span class="hljs-params">contextFile</span>)</span>;
<span class="hljs-keyword">let</span> contextFileIsEmpty = contextFileContent<span class="hljs-operator"> === </span><span class="hljs-string">""</span>;
<span class="hljs-keyword">let</span> exerciseFile = context<span class="hljs-constructor">FileToExerciseFile(<span class="hljs-params">contextFile</span>)</span>;
<span class="hljs-keyword">if</span>(contextFileIsEmpty){
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> Datenmodell anlegen (Idealerweise mit beispielhaften Inhalt)</span>
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> Datenmodell in Kontext-Datei schreiben, z.B. mit JSON.stringify(...)</span>
    <span class="hljs-keyword">let</span> dataModelAsString = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">JSON</span>.</span></span>stringify({<span class="hljs-comment">/* TODO */</span>});
    await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.fs.write<span class="hljs-constructor">File(<span class="hljs-params">contextFile</span>, <span class="hljs-params">dataModelAsString</span>)</span>;
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> Aufgabe generieren</span>
    <span class="hljs-keyword">let</span> generatedExerciseCode = <span class="hljs-string">"startup { print('Hallo Welt!') }"</span>;
    await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.fs.write<span class="hljs-constructor">File(<span class="hljs-params">exerciseFile</span>, <span class="hljs-params">generatedExerciseCode</span>)</span>;
}<span class="hljs-keyword">else</span>{
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> Datenmodell laden, z.B. mit JSON.parse(contextFileContent)</span>
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> (Aufgabe neu generieren)</span>
    <span class="hljs-comment">// <span class="hljs-doctag">TODO:</span> init application based on your data model</span>
}
<span class="hljs-comment">// Aufgabe anzeigen</span>
await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.navigator.navigate<span class="hljs-constructor">ToExercise(<span class="hljs-params">exerciseFile</span>)</span>;</code></pre><p>Jedes Werkzeug sollte über eine &quot;Speichern&quot;-Funktion verfügen, mit der der Benutzer:</p>
            <ul>
                <li>Das interne Datenmodell in die Kontext-Datei speichert (sodass es später wieder geladen werden kann)</li>
                <li>Die zugehörige Aufgabe wird generiert und die Vorschau zu dieser navigiert</li>
            </ul>
            <a href="#hilfsunktionen-für-werkzeug-entwickler-ide-tool-utils" id="hilfsunktionen-für-werkzeug-entwickler-ide-tool-utils" style="color: inherit; text-decoration: none;">
                <h3>Hilfsunktionen für Werkzeug-Entwickler (IDE-Tool-Utils)</h3>
            </a>
            <p><a href="./modules/helpers.html">Dokumentation der Hilfsfunktionen</a></p>
            <p>Dieses Paket beinhaltet zusätzlich Hilfsfunktionen (auch IDE-Tool-Utils genannt) für
                Werkzeug-Entwickler. Diese sind aktuell in <code>TypeScript</code> implementiert, liegen jedoch
                auch als ES6-JavaScript und Standalone-Bibliothek zur direkten Verwendung vor. Keine der
            Hilfsfunktionen wird durch die <code>ide-lib.js</code> ausgeliefert!</p>
            <blockquote>
                <p><strong>Hinweis</strong>: Hilfunktionen ohne Build-System bereitzustellen gestaltet sich schwierig und
                bringt große Nachteile mit sich:</p>
                <ul>
                    <li>Als reine JavaScript-Datei - platziert auf einem Server - ist die die
                        Offline-Fähigkeit (siehe <code>Helpers.enableOfflineUsageIfNecessary()</code>) von Werkzeugen nicht
                    gewährleistet, da eine Internetverbindung zum Zugriff notwendig ist.</li>
                    <li>Werden Dateien oder Code-Ausschnitte von Hand kopiert, muss der Werkzeug-Entwickler sich
                    um das Aktualisieren kümmern. </li>
                </ul>
                <p>Als Kompromiss werden die Hilsfunktionen als reine JavaScript-Datei (ES5 oder ES6)
                bereitgestellt, sodass diese auch ohne TypeScript nutzbar sind.</p>
            </blockquote>
            <p>Die IDE-Tool-Utils können wie folgt genutzt werden</p>
            <a href="#build-system-mit-typescript-empfohlen" id="build-system-mit-typescript-empfohlen" style="color: inherit; text-decoration: none;">
                <h4>Build-System mit TypeScript (empfohlen)</h4>
            </a>
            <p>Das Paket <code>@mathcaoch/ide-api</code> muss als npm-Abhängikeit in der <code>package.json</code> des Werkzeugs
                angegeben werden. Fortan können die in TypeScript implementierten Hilfsfunktionen - aber
                auch die Schnittstellen der IDE-API - komfortabel verwendet werden. Eine bestmögliche Typsicherheit ist
            gegeben.</p>
            <pre><code>import { Helpers, MathCoach } from <span class="hljs-string">"@mathcoach/ide-api"</span>;
<span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Helpers</span>.</span></span>enable<span class="hljs-constructor">OfflineUsageIfNecessary()</span><span class="hljs-operator">
...
</span>const file:MathCoach.File = await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.get<span class="hljs-constructor">ContextFile()</span></code></pre>
            <a href="#build-system-es6-javascript" id="build-system-es6-javascript" style="color: inherit; text-decoration: none;">
                <h4>Build-System ES6+ JavaScript</h4>
            </a>
            <p>Das Paket <code>@mathcaoch/ide-api</code> muss als npm-Abhängikeit in der <code>package.json</code> des Werkzeugs
                angegeben werden. Fortan können die in ES6 JavaScript vorliegenden Hilfsfunktionen
            verwendet werden. Die Entwicklungsumgebung sollte grundlegende Hilfen (Autovervollständigung und eingebettete Dokumentation) anbieten.</p>
            <pre><code>import { Helpers } from <span class="hljs-string">"@mathcoach/ide-api/dist/es6"</span>
<span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Helpers</span>.</span></span>enable<span class="hljs-constructor">OfflineUsageIfNecessary()</span>;<span class="hljs-operator">
...
</span>const file = await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">MC</span>.</span></span>ide.get<span class="hljs-constructor">ContextFile()</span>;</code></pre>
            <a href="#standalone" id="standalone" style="color: inherit; text-decoration: none;">
                <h4>Standalone</h4>
            </a>
            <p>Die Hilfsfunktionen liegen als eigenständige Bibliothek vor ( siehe
                <code>./dist/lib/mathcoach-ide-tool-utils.js</code>). Diese muss händisch kopiert, in das Werkzeug
                eingebunden und mit ihm ausgeliefert werden. Über die globale Variable <code>MC_IDE_TOOL_UTILS</code>
                können die Hilfsfunktionen angesprochen werden. Die verwendete Entwicklungsumgebung kann
            in der Regel nur wenig Unterstütztung anbieten (siehe auch <em>Typdefinition auch ohne Build-System nutzen</em>).</p>
            <pre><code><span class="xml">// tool.html
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/mathcoach/ui/ide/ide-lib.js"</span>/&gt;</span><span class="handlebars"><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"mathcoach-ide-tool-utils.js"</span>/&gt;</span><span class="handlebars"><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"tool.js"</span>/&gt;</span><span class="actionscript">
<span class="hljs-comment">// tool.js</span>
<span class="hljs-keyword">const</span> </span></span></span></span></span></span><span class="hljs-template-variable">{ Helpers }</span><span class="xml"><span class="javascript"> = MC_IDE_TOOL_UTILS;
Helpers.enableOfflineUsageIfNecessary();
...
const file = <span class="hljs-keyword">await</span> MC.ide.getContextFile();</span></span></code></pre>
            <a href="#beispiele" id="beispiele" style="color: inherit; text-decoration: none;">
                <h3>Beispiele</h3>
            </a>
            <p>Im Verzeichnis <code>./examples/</code> finden sich Beispiele für externe Werkzeuge.</p>
            <a href="#entwicklung-kleinerer-werkzeuge" id="entwicklung-kleinerer-werkzeuge" style="color: inherit; text-decoration: none;">
                <h3>Entwicklung kleinerer Werkzeuge</h3>
            </a>
            <p>Für kleiner Werkzeuge bietet es sich an im www-Verzeichnis zu entwickeln  (z.B.
                <code>myTool/tool.html</code> und <code>myTool/tool.js</code>). Die MathCoach-IDE stellt Autovervollständigung beim
                Editieren der <code>tool.js</code>-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.</p>
            <p><img src="media/usage_tool_developer.gif" alt="Demo"></p>
            <p><em>Über einen Deklarations-Eintrag in der Datei <code>ide-settings.json</code> kann ein Werkzeug (lokal) in
                    die IDE integriert werden. Der Benutzer kann über das Kontext-Menü Dateien, die mit dem Werkzeug
                    geöffnet werden können, anlegen. Wird im WWW-Teil des Dateisystems entwickelt, bietet die IDE
            grundlegende Unterstütztung beim Editieren von JavaScript-Dateien</em></p>
            <a href="#entwicklung-größerer-werkzeuge" id="entwicklung-größerer-werkzeuge" style="color: inherit; text-decoration: none;">
                <h3>Entwicklung größerer Werkzeuge</h3>
            </a>
            <p>Für größere Werkzeuge sollten etablierte Entwicklungswerkzeuge verwendet werden, beispielsweise:</p>
            <ul>
                <li><a href="https://nodejs.org/en/">npm</a> um externe Bibliotheken (u.A. dieses Paket) einzubinden</li>
                <li><a href="https://webpack.js.org/">webpack</a> oder <a href="https://parceljs.org/">Parcel</a> als Build-System um den Quellcode des Werkzeuges zu &quot;bündeln&quot;</li>
                <li><a href="https://www.typescriptlang.org/">TypeScript</a> zum typsischeren Programmieren (und/oder Dateien zu ES6 oder ES5 konformen JavaScript umzuformen)</li>
                <li><a href="https://git-scm.com/">Git</a> zur Versionierung des Quellcodes</li>
                <li><a href="https://code.visualstudio.com/">Visual Studio Code</a> als Entwicklungsumgebung</li>
                <li>Unit und End-To-End Tests</li>
            </ul>
            <p>Das &quot;gebündelte&quot; Werkzeug muss nach dem Build-Prozess in das WWW-Verzeichnis kopiert und ebenfalls
            lokal in die IDE integriert werden, siehe weiter unten.</p>
            <a href="#mathcoach-api-als-npm-package-einbinden" id="mathcoach-api-als-npm-package-einbinden" style="color: inherit; text-decoration: none;">
                <h4>MathCoach-API als npm-Package einbinden</h4>
            </a>
            <p>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. Außerdem wird es
                möglich die angebotenen <a href="./modules/helpers.html">Hilfsfunktionen</a> zu einzubinden. Hierzu muss
            die <code>package.json</code> des Werkzeug-Projektes wie folgt ergänzt werden:</p>
            <pre><code>{
    ...
    <span class="hljs-string">"devDependencies"</span>: {
        <span class="hljs-string">"@mathcoach/ide-api"</span>: <span class="hljs-string">"git+https://bayes.htwsaar.de/gitblit/r/mathcoach/mathcoach-ide-api.git"</span>
    },
    ...
}</code></pre><p>Der Git-Repo URL kann man eine Versionsnummer anhängen (z.B. <code>&quot;.../mathcoach/mathcoach-ide-api.git#3.0.0&quot;</code>
                für Version <code>3.0.0</code>), sodass die API, falls notwendig, versioniert <a href="https://semver.org/lang/de/">(Semantic Versioning)</a> werden kann. Verfügbare Versionen sind Git-Tags und können in der Weboberfläche des Git-Repositories
            oder über die Konsole (<code>git tag --list</code>) eingesehen werden. </p>
            <p>Nun können Hilfsfunktionen (in TypeScript) wie folgt eingebunden werden.  </p>
            <pre><code><span class="hljs-section">import</span> { <span class="hljs-attribute">Helpers</span> } from <span class="hljs-string">"<span class="hljs-variable">@mathcoach</span>/ide-api"</span>;</code></pre><p>Die Typedefinition sollte automatisch verfügbar sein, sodass der Umgang mit der
                IDE API (Einstiegspunkt ist die globale Variable <code>MC</code>) durch eine Entwicklungsumgebung
                wie Visual Studio Code unterstützt wird. Falls nicht, muss man die Typdefinition händisch
            einbinden (siehe <em>Typdefinition auch ohne Build-System nutzen</em>).</p>
            <a href="#typdefinition-auch-ohne-build-system-nutzen" id="typdefinition-auch-ohne-build-system-nutzen" style="color: inherit; text-decoration: none;">
                <h4>Typdefinition auch ohne Build-System nutzen</h4>
            </a>
            <p>Beim Arbeiten mit Visual Studio Code kann man auch ohne Einsatz weiterer Entwicklungswerkzeuge
                und Build-Systeme von der Typdefinition der IDE API profitieren. Hierzu muss ein spezielles
                Kommentar (Triple-Slash Directive) an den Anfang der JavaScript-Datei platziert
            werden (<code>path</code> falls nötig anpassen): </p>
            <pre><code><span class="hljs-regexp">//</span><span class="hljs-regexp">/ &lt;reference path="../</span>node_modules<span class="hljs-regexp">/@mathcoach/i</span>de-api<span class="hljs-regexp">/dist/</span>es6<span class="hljs-regexp">/MathCoach.d.ts"/</span>&gt;</code></pre><p>Dies sorgt dafür, dass Visual Studio Code Autovervollständigung samt Dokumentation der
                IDE API anbieten kann. Sollte es bei Verwendung von TypeScript notwendig sein, kann man eine
            Datei wie <code>global.d.ts</code> anlegen und die Triple-Slash Directive dort einmalig hinterlegen.</p>
            <a href="#zertifikat-problem-beheben" id="zertifikat-problem-beheben" style="color: inherit; text-decoration: none;">
                <h4>Zertifikat-Problem beheben</h4>
            </a>
            <p>Falls es Probleme mit dem HTW Zertifikat gibt, muss das Zertifikat von Newton ggf. von
                Hand hinzugefügt werden. Nur so kann npm auf das Git-Repository zugreifen und den
            Inhalt automatisch herunterladen.</p>
            <pre><code><span class="hljs-keyword">cd</span> /usr/<span class="hljs-keyword">local</span>/share/<span class="hljs-keyword">ca</span>-certificates/
sudo <span class="hljs-keyword">mkdir</span> newton.htwsaar.<span class="hljs-keyword">de</span>
sudo cp path/to/newton.htwsaar.<span class="hljs-keyword">de</span>.crt /usr/<span class="hljs-keyword">local</span>/share/<span class="hljs-keyword">ca</span>-certificates/newton.htwsaar.<span class="hljs-keyword">de</span>/
sudo chown 755 /usr/<span class="hljs-keyword">local</span>/share/<span class="hljs-keyword">ca</span>-certificates/newton.htwsaar.<span class="hljs-keyword">de</span>
sudo chown 644 /usr/<span class="hljs-keyword">local</span>/share/<span class="hljs-keyword">ca</span>-certificates/newton.htwsaar.<span class="hljs-keyword">de</span>/newton.htwsaar.<span class="hljs-keyword">de</span>.crt
sudo <span class="hljs-keyword">update</span>-<span class="hljs-keyword">ca</span>-certificates</code></pre>
            <a href="#werkzeuge-in-die-ide-integrieren" id="werkzeuge-in-die-ide-integrieren" style="color: inherit; text-decoration: none;">
                <h2>Werkzeuge in die IDE integrieren</h2>
            </a>
            <p>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 und erstellt werden (siehe Kontext-Menüs im IDE-Explorer).
            Eine Freischaltung des Werkzeugs für alle Autoren erfolgt durch einen Administrator.</p>
            <a href="#lokal-nur-für-den-entwickler-des-werkzeugs" id="lokal-nur-für-den-entwickler-des-werkzeugs" style="color: inherit; text-decoration: none;">
                <h3>Lokal (Nur für den Entwickler des Werkzeugs)</h3>
            </a>
            <p>In der IDE muss eine Werkzeug-Deklaration angelegt werden, dazu muss die Einstellungsdatei <code>ide-settings.json</code>
                editiert werden. Damit Änderungen an der Einstellungsdatei wirksam werden, muss die MathCoach IDE neu
            geladen (Seite neu laden) werden.</p>
            <pre><code>{
    ...
    <span class="hljs-string">"editor.external.declarations"</span>: [
        {
            <span class="hljs-string">"displayName"</span>: <span class="hljs-string">"Dummy"</span>,
            <span class="hljs-string">"entry"</span>: <span class="hljs-string">"/mathcoach/www/YOURNAME/tool.html"</span>,
            <span class="hljs-string">"description"</span>: <span class="hljs-string">"..."</span>,
            <span class="hljs-string">"developer"</span>: <span class="hljs-string">"..."</span>,
            <span class="hljs-string">"extension"</span>: <span class="hljs-string">"fib.json"</span>
        }
        ...
    ],
    ...
}</code></pre><table>
                <thead>
                    <tr>
                        <th>Schlüssel</th>
                        <th>Beschreibung</th>
                        <th>Beispiel</th>
                    </tr>
                </thead>
                <tbody><tr>
                        <td><code>&quot;description&quot;</code></td>
                        <td>Eine kurze Beschreibung</td>
                        <td><code>&quot;Editor zum Erstellen von Fill-In-Blank Aufgaben.&quot;</code></td>
                    </tr>
                    <tr>
                        <td><code>&quot;developer&quot;</code></td>
                        <td>Namen der Werkzeug-Entwickler</td>
                        <td><code>&quot;John Doe, Jane Doe&quot;</code></td>
                    </tr>
                    <tr>
                        <td><code>&quot;displayName&quot;</code></td>
                        <td>Der Name des Werkzeugs</td>
                        <td><code>&quot;Fill-In-Blank-Editor&quot;</code></td>
                    </tr>
                    <tr>
                        <td><code>&quot;documentation&quot;</code></td>
                        <td><strong>Optional</strong>. Link zur Werkzeug-Dokumentation. Diese muss sich auf dem selben Server wie die IDE befinden.</td>
                        <td><code>&quot;/mathcoach/www/YOURNAME/fib/docs.html&quot;</code></td>
                    </tr>
                    <tr>
                        <td><code>&quot;entry&quot;</code></td>
                        <td>Der Einstiegspunkt für das Werkzeugs. Dieser muss sich auf dem selben Server wie die IDE befinden.</td>
                        <td><code>&quot;/mathcoach/www/YOURNAME/fib/tool.html&quot;</code></td>
                    </tr>
                    <tr>
                        <td><code>&quot;extension&quot;</code></td>
                        <td>Dateien anhand der Datei-Erweiterung mit dem Werkzeug verknüpfen. Hier sollte etwas Eindeutiges gewählt werden.</td>
                        <td><code>&quot;fib.json&quot;</code> für Dateien wie <code>someExercise.fib.json</code></td>
                    </tr>
            </tbody></table>
            <a href="#global-für-alle-autoren" id="global-für-alle-autoren" style="color: inherit; text-decoration: none;">
                <h3>Global (Für alle Autoren)</h3>
            </a>
            <ul>
                <li>Das Werkzeug samt Werkzeug-Deklaration muss an einen Administrator übergeben werden</li>
                <li>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.</li>
            </ul>
            <a href="#infos-zu-diesem-repository" id="infos-zu-diesem-repository" style="color: inherit; text-decoration: none;">
                <h2>Infos zu diesem Repository</h2>
            </a>
            <pre><code>.
├── CHANGELOG<span class="hljs-selector-class">.md</span>                <span class="hljs-comment">// Dokumentation von Änderungen der API</span>
├── examples                    <span class="hljs-comment">// Beispiele</span>
│   ├── ...
│   └── ...
├── media                       <span class="hljs-comment">// Grafiken</span>
│   └── ...
├── test                        <span class="hljs-comment">// Unit Tests</span>
│   └── ...
├── src                         <span class="hljs-comment">// Hilfsfunktionen für Werkzeugentwickler</span>
│   ├── index<span class="hljs-selector-class">.ts</span>                <span class="hljs-comment">// Einstiegspunkt</span>
│   └── ...
├── mathcoach-api<span class="hljs-selector-class">.d</span><span class="hljs-selector-class">.ts</span>          <span class="hljs-comment">// Typ-Definition der API</span>
├── package<span class="hljs-selector-class">.json</span>
├── package-lock<span class="hljs-selector-class">.json</span>
├── README<span class="hljs-selector-class">.md</span>
└── tsconfig.json</code></pre>
            <a href="#dokumentation-erzeugen" id="dokumentation-erzeugen" style="color: inherit; text-decoration: none;">
                <h4>Dokumentation erzeugen</h4>
            </a>
            <pre><code><span class="hljs-built_in">npm</span> install &amp;&amp; <span class="hljs-built_in">npm</span> run build</code></pre>
            <a href="#release-einer-neuen-version" id="release-einer-neuen-version" style="color: inherit; text-decoration: none;">
                <h4>Release einer neuen Version</h4>
            </a>
            <ul>
                <li>Version der API in der <code>package.json</code> eintragen</li>
                <li>Version in der Überschrift der <code>README.md</code> eintragen</li>
                <li>Beispiele und Changelog aktualisieren</li>
                <li>IDE-Projekt prüfen:  <code>package.json</code>, <code>ide-lib.js</code>, ...</li>
                <li>Final: Release Tag setzen <code>git tag -a VERSION -m &#39;...&#39;</code> und pushen</li>
            </ul>
        </div>
        <div style="position:relative;"><a name="typedoc-main-index" class="tsd-anchor"></a></div>
        <section class="tsd-panel-group tsd-index-group">
            <h2>Index</h2>
            <section class="tsd-panel tsd-index-panel">
                <div class="tsd-index-content">
                    <section class="tsd-index-section ">
                        <h3>Namespaces</h3>
                        <ul class="tsd-index-list">
                            <li class="tsd-kind-namespace"><a href="modules/helpers.html" class="tsd-kind-icon">Helpers</a></li>
                            <li class="tsd-kind-namespace"><a href="modules/mathcoach.html" class="tsd-kind-icon">Math<wbr>Coach</a></li>
                            <li class="tsd-kind-namespace"><a href="modules/__global.html" class="tsd-kind-icon">__global</a></li>
                        </ul>
                    </section>
                </div>
            </section>
        </section>
        <footer>
            <div class="container">
                <h2>Legend</h2>
                <div class="tsd-legend-group">
                </div>
            </div>
        </footer>
    </div>
</div>
<script type="text/javascript">
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";function x(e){return null!=e&&e===e.window}var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e)||(t=r(e))&&("function"!=typeof(n=v.call(t,"constructor")&&t.constructor)||a.call(n)!==l))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!=a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){function ne(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(65536+r):String.fromCharCode(r>>10|55296,1023&r|56320)}function oe(){T()}var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){for((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;o--;)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if(void 0!==t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!=m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){for(;l;){for(a=e;a=a[l];)if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){for(d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];a=++s&&a&&a[l]||(d=s=0)||u.pop();)if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)for(;(a=++s&&a&&a[l]||(d=s=0)||u.pop())&&((x?a.nodeName.toLowerCase()!==f:1!==a.nodeType)||!++d||(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a!==e)););return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){for(var n,r=a(e,o),i=r.length;i--;)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){for(var i,o=s(e,null,r,[]),a=e.length;a--;)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){for(;e=e[u];)if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){for(;e=e[u];)if((1===e.nodeType||f)&&s(e,t,n))return!0}else for(;e=e[u];)if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){for(var r=i.length;r--;)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v)for(i=Te(p,u),v(i,[],n,r),o=i.length;o--;)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a));if(e){if(y||d){if(y){for(i=[],o=p.length;o--;)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}for(o=p.length;o--;)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r&&!b.relative[e[n].type];n++);return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);for(a=e,s=[],u=b.preFilter;a;){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){for(t||(t=h(e)),n=t.length;n--;)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){for(a=0,t||o.ownerDocument===C||(T(o),n=!E);s=v[a++];)if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){for(a=0;s=y[a++];)s(c,f,t,n);if(e){if(0<u)for(;l--;)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=G.needsContext.test(e)?0:o.length;i--&&(a=o[i],!b.relative[s=a.type]);)if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;function T(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r}function S(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}var N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return void 0!==e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);function c(){for(a=a||r.once,o=i=!0;u.length;l=-1)for(t=u.shift();++l<s.length;)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1);r.memory||(t=!1),i=!1,a&&(s=t?[]:"")}var i,t,o,a,s=[],u=[],l=-1,f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){for(var n;-1<(n=k.inArray(t,s,n));)s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){function a(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}}var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred();if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();for(;t--;)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e).catch(function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(t=a?(t.call(e,r),null):(l=t,function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}function G(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType}function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;for(;n--;)delete r[t[n]]}void 0!==t&&!k.isEmptyObject(r)||(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0!==n)return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){for(t=a.length;t--;)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){function s(){--r||i.resolveWith(o,[o])}var n,r=1,i=k.Deferred(),o=this,a=this.length;for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});function se(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")}function ue(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i}function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;a--;)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){for(a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];c--;)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));for(f.textContent="",d=0;o=p[d++];)if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n)for(c=0;o=a[c++];)he.test(o.type||"")&&n.push(o);return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return void 0!==k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;l--;)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match(R)||[""]).length;l--;)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){for(f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){for(a=k.event.handlers.call(this,s,l),t=0;(i=a[t++])&&!s.isPropagationStopped();)for(s.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)});for(i in e)this.off(i,t,e[i]);return this}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],"input"===(l=(u=a[r]).nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){return k.cssProps[e]||Ve[e]||(e in Xe?e:Ve[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;n--;)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){for(var n,r=0,i=(e=m(e)?(t=e,["*"]):e.match(R)).length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){function a(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)}var i=k.isEmptyObject(t),o=k.speed(e,n,r);return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){function a(e){var t=e.stop;delete e.stop,t(o)}return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)for(;n=this[u++];)if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=e[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)for(;n=this[u++];)if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){for(a=0;o=e[a++];)for(;-1<r.indexOf(" "+o+" ");)r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"==o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a)for(t=0,n=k(this),r=bt(i);e=r[t++];)n.hasClass(e)?n.removeClass(e):n.addClass(e);else void 0!==i&&"boolean"!=o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i=e.options,o=k.makeArray(t),a=i.length;a--;)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;function Ct(e){e.stopPropagation()}var Tt=/^(?:focusinfocus|focusoutblur)$/;k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}for(i=0;(o=p[i++])&&!e.isPropagationStopped();)f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){function i(e){k.event.simulate(r,e.target,k.event.fix(e))}k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){function i(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)}var n,r=[];if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))for(;n=i[r++];)"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n)for(n={};t=Pt.exec(p);)n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),i=("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,r.left):(a=parseFloat(o)||0,parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===k.css(e,"position");)e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k}),function(){function f(){}var n="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this||{},r=n._,e=Array.prototype,o=Object.prototype,s="undefined"!=typeof Symbol?Symbol.prototype:null,u=e.push,c=e.slice,p=o.toString,i=o.hasOwnProperty,t=Array.isArray,a=Object.keys,l=Object.create,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"==typeof exports||exports.nodeType?n._=h:("undefined"!=typeof module&&!module.nodeType&&module.exports&&(exports=module.exports=h),exports._=h),h.VERSION="1.9.2";function y(u,i,n){if(void 0===i)return u;switch(null==n?3:n){case 1:return function(n){return u.call(i,n)};case 3:return function(n,r,t){return u.call(i,n,r,t)};case 4:return function(n,r,t,e){return u.call(i,n,r,t,e)}}return function(){return u.apply(i,arguments)}}function d(n,r,t){return h.iteratee!==v?h.iteratee(n,r):null==n?h.identity:h.isFunction(n)?y(n,r,t):h.isObject(n)&&!h.isArray(n)?h.matcher(n):h.property(n)}var v;h.iteratee=v=function(n,r){return d(n,r,1/0)};function g(u,i){return i=null==i?u.length-1:+i,function(){for(var n=Math.max(arguments.length-i,0),r=Array(n),t=0;t<n;t++)r[t]=arguments[t+i];switch(i){case 0:return u.call(this,r);case 1:return u.call(this,arguments[0],r);case 2:return u.call(this,arguments[0],arguments[1],r)}var e=Array(i+1);for(t=0;t<i;t++)e[t]=arguments[t];return e[i]=r,u.apply(this,e)}}function m(n){if(!h.isObject(n))return{};if(l)return l(n);f.prototype=n;var r=new f;return f.prototype=null,r}function b(r){return function(n){return null==n?void 0:n[r]}}function j(n,r){return null!=n&&i.call(n,r)}function x(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function w(n){var r=A(n);return"number"==typeof r&&0<=r&&r<=_}var _=Math.pow(2,53)-1,A=b("length");h.each=h.forEach=function(n,r,t){var e,u;if(r=y(r,t),w(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;e<u;e++)r(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=Array(u),o=0;o<u;o++){var a=e?e[o]:o;i[o]=r(n[a],a,n)}return i};function O(c){return function(n,r,t,e){var u=3<=arguments.length;return function(n,r,t,e){var u=!w(n)&&h.keys(n),i=(u||n).length,o=0<c?0:i-1;for(e||(t=n[u?u[o]:o],o+=c);0<=o&&o<i;o+=c){var a=u?u[o]:o;t=r(t,n[a],a,n)}return t}(n,y(r,e,4),t,u)}}h.reduce=h.foldl=h.inject=O(1),h.reduceRight=h.foldr=O(-1),h.find=h.detect=function(n,r,t){var e=(w(n)?h.findIndex:h.findKey)(n,r,t);if(void 0!==e&&-1!==e)return n[e]},h.filter=h.select=function(n,e,r){var u=[];return e=d(e,r),h.each(n,function(n,r,t){e(n,r,t)&&u.push(n)}),u},h.reject=function(n,r,t){return h.filter(n,h.negate(d(r)),t)},h.every=h.all=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(!r(n[o],o,n))return!1}return!0},h.some=h.any=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(r(n[o],o,n))return!0}return!1},h.contains=h.includes=h.include=function(n,r,t,e){return w(n)||(n=h.values(n)),"number"==typeof t&&!e||(t=0),0<=h.indexOf(n,r,t)},h.invoke=g(function(n,t,e){var u,i;return h.isFunction(t)?i=t:h.isArray(t)&&(u=t.slice(0,-1),t=t[t.length-1]),h.map(n,function(n){var r=i;if(!r){if(u&&u.length&&(n=x(n,u)),null==n)return;r=n[t]}return null==r?r:r.apply(n,e)})}),h.pluck=function(n,r){return h.map(n,h.property(r))},h.where=function(n,r){return h.filter(n,h.matcher(r))},h.findWhere=function(n,r){return h.find(n,h.matcher(r))},h.max=function(n,e,r){var t,u,i=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&i<t&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){u=e(n,r,t),(o<u||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},h.min=function(n,e,r){var t,u,i=1/0,o=1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&t<i&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){((u=e(n,r,t))<o||u===1/0&&i===1/0)&&(i=n,o=u)});return i},h.shuffle=function(n){return h.sample(n,1/0)},h.sample=function(n,r,t){if(null==r||t)return w(n)||(n=h.values(n)),n[h.random(n.length-1)];var e=w(n)?h.clone(n):h.values(n),u=A(e);r=Math.max(Math.min(r,u),0);for(var i=u-1,o=0;o<r;o++){var a=h.random(o,i),c=e[o];e[o]=e[a],e[a]=c}return e.slice(0,r)},h.sortBy=function(n,e,r){var u=0;return e=d(e,r),h.pluck(h.map(n,function(n,r,t){return{value:n,index:u++,criteria:e(n,r,t)}}).sort(function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(e<t||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index}),"value")};function k(o,r){return function(e,u,n){var i=r?[[],[]]:{};return u=d(u,n),h.each(e,function(n,r){var t=u(n,r,e);o(i,n,t)}),i}}h.groupBy=k(function(n,r,t){j(n,t)?n[t].push(r):n[t]=[r]}),h.indexBy=k(function(n,r,t){n[t]=r}),h.countBy=k(function(n,r,t){j(n,t)?n[t]++:n[t]=1});var S=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;h.toArray=function(n){return n?h.isArray(n)?c.call(n):h.isString(n)?n.match(S):w(n)?h.map(n,h.identity):h.values(n):[]},h.size=function(n){return null==n?0:w(n)?n.length:h.keys(n).length},h.partition=k(function(n,r,t){n[t?0:1].push(r)},!0),h.first=h.head=h.take=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[0]:h.initial(n,n.length-r)},h.initial=function(n,r,t){return c.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))},h.last=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[n.length-1]:h.rest(n,Math.max(0,n.length-r))},h.rest=h.tail=h.drop=function(n,r,t){return c.call(n,null==r||t?1:r)},h.compact=function(n){return h.filter(n,Boolean)};var M=function(n,r,t,e){for(var u=(e=e||[]).length,i=0,o=A(n);i<o;i++){var a=n[i];if(w(a)&&(h.isArray(a)||h.isArguments(a)))if(r)for(var c=0,l=a.length;c<l;)e[u++]=a[c++];else M(a,r,t,e),u=e.length;else t||(e[u++]=a)}return e};h.flatten=function(n,r){return M(n,r,!1)},h.without=g(function(n,r){return h.difference(n,r)}),h.uniq=h.unique=function(n,r,t,e){h.isBoolean(r)||(e=t,t=r,r=!1),null!=t&&(t=d(t,e));for(var u=[],i=[],o=0,a=A(n);o<a;o++){var c=n[o],l=t?t(c,o,n):c;r&&!t?(o&&i===l||u.push(c),i=l):t?h.contains(i,l)||(i.push(l),u.push(c)):h.contains(u,c)||u.push(c)}return u},h.union=g(function(n){return h.uniq(M(n,!0,!0))}),h.intersection=function(n){for(var r=[],t=arguments.length,e=0,u=A(n);e<u;e++){var i=n[e];if(!h.contains(r,i)){var o;for(o=1;o<t&&h.contains(arguments[o],i);o++);o===t&&r.push(i)}}return r},h.difference=g(function(n,r){return r=M(r,!0,!0),h.filter(n,function(n){return!h.contains(r,n)})}),h.unzip=function(n){for(var r=n&&h.max(n,A).length||0,t=Array(r),e=0;e<r;e++)t[e]=h.pluck(n,e);return t},h.zip=g(h.unzip),h.object=function(n,r){for(var t={},e=0,u=A(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t};function F(i){return function(n,r,t){r=d(r,t);for(var e=A(n),u=0<i?0:e-1;0<=u&&u<e;u+=i)if(r(n[u],u,n))return u;return-1}}h.findIndex=F(1),h.findLastIndex=F(-1),h.sortedIndex=function(n,r,t,e){for(var u=(t=d(t,e,1))(r),i=0,o=A(n);i<o;){var a=Math.floor((i+o)/2);t(n[a])<u?i=a+1:o=a}return i};function E(i,o,a){return function(n,r,t){var e=0,u=A(n);if("number"==typeof t)0<i?e=0<=t?t:Math.max(t+u,e):u=0<=t?Math.min(t+1,u):t+u+1;else if(a&&t&&u)return n[t=a(n,r)]===r?t:-1;if(r!=r)return 0<=(t=o(c.call(n,e,u),h.isNaN))?t+e:-1;for(t=0<i?e:u-1;0<=t&&t<u;t+=i)if(n[t]===r)return t;return-1}}h.indexOf=E(1,h.findIndex,h.sortedIndex),h.lastIndexOf=E(-1,h.findLastIndex),h.range=function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),i=0;i<e;i++,n+=t)u[i]=n;return u},h.chunk=function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(c.call(n,e,e+=r));return t};function N(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var i=m(n.prototype),o=n.apply(i,u);return h.isObject(o)?o:i}h.bind=g(function(r,t,e){if(!h.isFunction(r))throw new TypeError("Bind must be called on a function");var u=g(function(n){return N(r,u,t,this,e.concat(n))});return u}),h.partial=g(function(u,i){var o=h.partial.placeholder,a=function(){for(var n=0,r=i.length,t=Array(r),e=0;e<r;e++)t[e]=i[e]===o?arguments[n++]:i[e];for(;n<arguments.length;)t.push(arguments[n++]);return N(u,a,this,this,t)};return a}),(h.partial.placeholder=h).bindAll=g(function(n,r){var t=(r=M(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=h.bind(n[e],n)}}),h.memoize=function(e,u){var i=function(n){var r=i.cache,t=""+(u?u.apply(this,arguments):n);return j(r,t)||(r[t]=e.apply(this,arguments)),r[t]};return i.cache={},i},h.delay=g(function(n,r,t){return setTimeout(function(){return n.apply(null,t)},r)}),h.defer=h.partial(h.delay,h,1),h.throttle=function(t,e,u){var i,o,a,c,l=0;u||(u={});function f(){l=!1===u.leading?0:h.now(),i=null,c=t.apply(o,a),i||(o=a=null)}var n=function(){var n=h.now();l||!1!==u.leading||(l=n);var r=e-(n-l);return o=this,a=arguments,r<=0||e<r?(i&&(clearTimeout(i),i=null),l=n,c=t.apply(o,a),i||(o=a=null)):i||!1===u.trailing||(i=setTimeout(f,r)),c};return n.cancel=function(){clearTimeout(i),l=0,i=o=a=null},n},h.debounce=function(t,e,u){function a(n,r){i=null,r&&(o=t.apply(n,r))}var i,o,n=g(function(n){if(i&&clearTimeout(i),u){var r=!i;i=setTimeout(a,e),r&&(o=t.apply(this,n))}else i=h.delay(a,e,this,n);return o});return n.cancel=function(){clearTimeout(i),i=null},n},h.wrap=function(n,r){return h.partial(r,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},h.before=function(n,r){var t;return function(){return 0<--n&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}},h.once=h.partial(h.before,2),h.restArguments=g;function B(n,r){var t=T.length,e=n.constructor,u=h.isFunction(e)&&e.prototype||o,i="constructor";for(j(n,i)&&!h.contains(r,i)&&r.push(i);t--;)(i=T[t])in n&&n[i]!==u[i]&&!h.contains(r,i)&&r.push(i)}var I=!{toString:null}.propertyIsEnumerable("toString"),T=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];h.keys=function(n){if(!h.isObject(n))return[];if(a)return a(n);var r=[];for(var t in n)j(n,t)&&r.push(t);return I&&B(n,r),r},h.allKeys=function(n){if(!h.isObject(n))return[];var r=[];for(var t in n)r.push(t);return I&&B(n,r),r},h.values=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e},h.mapObject=function(n,r,t){r=d(r,t);for(var e=h.keys(n),u=e.length,i={},o=0;o<u;o++){var a=e[o];i[a]=r(n[a],a,n)}return i},h.pairs=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},h.invert=function(n){for(var r={},t=h.keys(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r},h.functions=h.methods=function(n){var r=[];for(var t in n)h.isFunction(n[t])&&r.push(t);return r.sort()};function R(c,l){return function(n){var r=arguments.length;if(l&&(n=Object(n)),r<2||null==n)return n;for(var t=1;t<r;t++)for(var e=arguments[t],u=c(e),i=u.length,o=0;o<i;o++){var a=u[o];l&&void 0!==n[a]||(n[a]=e[a])}return n}}h.extend=R(h.allKeys),h.extendOwn=h.assign=R(h.keys),h.findKey=function(n,r,t){r=d(r,t);for(var e,u=h.keys(n),i=0,o=u.length;i<o;i++)if(r(n[e=u[i]],e,n))return e};function z(n,r,t){return r in t}var q,K;h.pick=g(function(n,r){var t={},e=r[0];if(null==n)return t;h.isFunction(e)?(1<r.length&&(e=y(e,r[1])),r=h.allKeys(n)):(e=z,r=M(r,!1,!1),n=Object(n));for(var u=0,i=r.length;u<i;u++){var o=r[u],a=n[o];e(a,o,n)&&(t[o]=a)}return t}),h.omit=g(function(n,t){var r,e=t[0];return h.isFunction(e)?(e=h.negate(e),1<t.length&&(r=t[1])):(t=h.map(M(t,!1,!1),String),e=function(n,r){return!h.contains(t,r)}),h.pick(n,e,r)}),h.defaults=R(h.allKeys,!0),h.create=function(n,r){var t=m(n);return r&&h.extendOwn(t,r),t},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,r){return r(n),n},h.isMatch=function(n,r){var t=h.keys(r),e=t.length;if(null==n)return!e;for(var u=Object(n),i=0;i<e;i++){var o=t[i];if(r[o]!==u[o]||!(o in u))return!1}return!0},q=function(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var u=typeof n;return("function"==u||"object"==u||"object"==typeof r)&&K(n,r,t,e)},K=function(n,r,t,e){n instanceof h&&(n=n._wrapped),r instanceof h&&(r=r._wrapped);var u=p.call(n);if(u!==p.call(r))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+r;case"[object Number]":return+n!=+n?+r!=+r:0==+n?1/+n==1/r:+n==+r;case"[object Date]":case"[object Boolean]":return+n==+r;case"[object Symbol]":return s.valueOf.call(n)===s.valueOf.call(r)}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof r)return!1;var o=n.constructor,a=r.constructor;if(o!==a&&!(h.isFunction(o)&&o instanceof o&&h.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in r)return!1}e=e||[];for(var c=(t=t||[]).length;c--;)if(t[c]===n)return e[c]===r;if(t.push(n),e.push(r),i){if((c=n.length)!==r.length)return!1;for(;c--;)if(!q(n[c],r[c],t,e))return!1}else{var l,f=h.keys(n);if(c=f.length,h.keys(r).length!==c)return!1;for(;c--;)if(l=f[c],!j(r,l)||!q(n[l],r[l],t,e))return!1}return t.pop(),e.pop(),!0},h.isEqual=function(n,r){return q(n,r)},h.isEmpty=function(n){return null==n||(w(n)&&(h.isArray(n)||h.isString(n)||h.isArguments(n))?0===n.length:0===h.keys(n).length)},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=t||function(n){return"[object Array]"===p.call(n)},h.isObject=function(n){var r=typeof n;return"function"==r||"object"==r&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp","Error","Symbol","Map","WeakMap","Set","WeakSet"],function(r){h["is"+r]=function(n){return p.call(n)==="[object "+r+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return j(n,"callee")});var D=n.document&&n.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof D&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return!h.isSymbol(n)&&isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&isNaN(n)},h.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===p.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return void 0===n},h.has=function(n,r){if(!h.isArray(r))return j(n,r);for(var t=r.length,e=0;e<t;e++){var u=r[e];if(null==n||!i.call(n,u))return!1;n=n[u]}return!!t},h.noConflict=function(){return n._=r,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(r){return h.isArray(r)?function(n){return x(n,r)}:b(r)},h.propertyOf=function(r){return null==r?function(){}:function(n){return h.isArray(n)?x(r,n):r[n]}},h.matcher=h.matches=function(r){return r=h.extendOwn({},r),function(n){return h.isMatch(n,r)}},h.times=function(n,r,t){var e=Array(Math.max(0,n));r=y(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},h.random=function(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))},h.now=Date.now||function(){return(new Date).getTime()};function W(r){function t(n){return r[n]}var n="(?:"+h.keys(r).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}}var L={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},P=h.invert(L);h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u<e;u++){var i=null==n?void 0:n[r[u]];void 0===i&&(i=t,u=e),n=h.isFunction(i)?i.call(n):i}return n};var C=0;h.uniqueId=function(n){var r=++C+"";return n?n+r:r},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};function $(n){return"\\"+U[n]}var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g;h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}function u(n){return t.call(this,n,h)}var c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};function G(n,r){return n._chain?h(r).chain():r}h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}(),function(t){var e="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global;if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)});else if("undefined"!=typeof exports){var n,i=require("underscore");try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}(function(t,e,i,n){var r=t.Backbone,s=Array.prototype.slice;e.VERSION="1.4.0",e.$=n,e.noConflict=function(){return t.Backbone=r,this},e.emulateHTTP=!1,e.emulateJSON=!1;var h,a=e.Events={},o=/\s+/,u=function(t,e,n,r,s){var h,a=0;if(n&&"object"==typeof n){void 0!==r&&"context"in s&&void 0===s.context&&(s.context=r);for(h=i.keys(n);a<h.length;a++)e=u(t,e,h[a],n[h[a]],s)}else if(n&&o.test(n))for(h=n.split(o);a<h.length;a++)e=t(e,h[a],r,s);else e=t(e,n,r,s);return e};a.on=function(t,e,i){this._events=u(l,this._events||{},t,e,{context:i,ctx:this,listening:h}),h&&(((this._listeners||(this._listeners={}))[h.id]=h).interop=!1);return this},a.listenTo=function(t,e,n){if(!t)return this;var r=t._listenId||(t._listenId=i.uniqueId("l")),s=this._listeningTo||(this._listeningTo={}),a=h=s[r];a||(this._listenId||(this._listenId=i.uniqueId("l")),a=h=s[r]=new g(this,t));var o=c(t,e,n,this);if(h=void 0,o)throw o;return a.interop&&a.on(e,n),this};var l=function(t,e,i,n){if(i){var r=t[e]||(t[e]=[]),s=n.context,a=n.ctx,o=n.listening;o&&o.count++,r.push({callback:i,context:s,ctx:s||a,listening:o})}return t},c=function(t,e,i,n){try{t.on(e,i,n)}catch(r){return r}};a.off=function(t,e,i){return this._events&&(this._events=u(f,this._events,t,e,{context:i,listeners:this._listeners})),this},a.stopListening=function(t,e,n){var r=this._listeningTo;if(!r)return this;for(var s=t?[t._listenId]:i.keys(r),a=0;a<s.length;a++){var o=r[s[a]];if(!o)break;o.obj.off(e,n,this),o.interop&&o.off(e,n)}return i.isEmpty(r)&&(this._listeningTo=void 0),this};var f=function(t,e,n,r){if(t){var h,s=r.context,a=r.listeners,o=0;if(e||s||n){for(h=e?[e]:i.keys(t);o<h.length;o++){var u=t[e=h[o]];if(!u)break;for(var l=[],c=0;c<u.length;c++){var f=u[c];if(n&&n!==f.callback&&n!==f.callback._callback||s&&s!==f.context)l.push(f);else{var d=f.listening;d&&d.off(e,n)}}l.length?t[e]=l:delete t[e]}return t}for(h=i.keys(a);o<h.length;o++)a[h[o]].cleanup()}};a.once=function(t,e,i){var n=u(d,{},t,e,this.off.bind(this));return"string"==typeof t&&null==i&&(e=void 0),this.on(n,e,i)},a.listenToOnce=function(t,e,i){var n=u(d,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,n)};var d=function(t,e,n,r){if(n){var s=t[e]=i.once(function(){r(e,s),n.apply(this,arguments)});s._callback=n}return t};a.trigger=function(t){if(!this._events)return this;for(var e=Math.max(0,arguments.length-1),i=Array(e),n=0;n<e;n++)i[n]=arguments[n+1];return u(v,this._events,t,void 0,i),this};var v=function(t,e,i,n){if(t){var r=t[e],s=t.all;r&&s&&(s=s.slice()),r&&p(r,n),s&&p(s,[e].concat(n))}return t},p=function(t,e){var i,n=-1,r=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:for(;++n<r;)(i=t[n]).callback.call(i.ctx);return;case 1:for(;++n<r;)(i=t[n]).callback.call(i.ctx,s);return;case 2:for(;++n<r;)(i=t[n]).callback.call(i.ctx,s,a);return;case 3:for(;++n<r;)(i=t[n]).callback.call(i.ctx,s,a,o);return;default:for(;++n<r;)(i=t[n]).callback.apply(i.ctx,e);return}},g=function(t,e){this.id=t._listenId,this.listener=t,this.obj=e,this.interop=!0,this.count=0,this._events=void 0};g.prototype.on=a.on,g.prototype.off=function(t,e){(this.interop?(this._events=u(f,this._events,t,e,{context:void 0,listeners:void 0}),this._events):(this.count--,0!==this.count))||this.cleanup()},g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},a.bind=a.on,a.unbind=a.off,i.extend(e,a);var m=e.Model=function(t,e){var n=t||{};e||(e={}),this.preinitialize.apply(this,arguments),this.cid=i.uniqueId(this.cidPrefix),this.attributes={},e.collection&&(this.collection=e.collection),e.parse&&(n=this.parse(n,e)||{});var r=i.result(this,"defaults");n=i.defaults(i.extend({},r,n),r),this.set(n,e),this.changed={},this.initialize.apply(this,arguments)};i.extend(m.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return null!=this.get(t)},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,n){if(null==t)return this;var r;if("object"==typeof t?(r=t,n=e):(r={})[t]=e,n||(n={}),!this._validate(r,n))return!1;var s=n.unset,a=n.silent,o=[],h=this._changing;this._changing=!0,h||(this._previousAttributes=i.clone(this.attributes),this.changed={});var u=this.attributes,l=this.changed,c=this._previousAttributes;for(var f in r)e=r[f],i.isEqual(u[f],e)||o.push(f),i.isEqual(c[f],e)?delete l[f]:l[f]=e,s?delete u[f]:u[f]=e;if(this.idAttribute in r&&(this.id=this.get(this.idAttribute)),!a){o.length&&(this._pending=n);for(var d=0;d<o.length;d++)this.trigger("change:"+o[d],this,u[o[d]],n)}if(h)return this;if(!a)for(;this._pending;)n=this._pending,this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(t,e){return this.set(t,void 0,i.extend({},e,{unset:!0}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,i.extend({},t,{unset:!0}))},hasChanged:function(t){return null==t?!i.isEmpty(this.changed):i.has(this.changed,t)},changedAttributes:function(t){if(!t)return!!this.hasChanged()&&i.clone(this.changed);var r,e=this._changing?this._previousAttributes:this.attributes,n={};for(var s in t){var a=t[s];i.isEqual(e[s],a)||(n[s]=a,r=!0)}return!!r&&n},previous:function(t){return null!=t&&this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return i.clone(this._previousAttributes)},fetch:function(t){t=i.extend({parse:!0},t);var e=this,n=t.success;return t.success=function(i){var r=t.parse?e.parse(i,t):i;if(!e.set(r,t))return!1;n&&n.call(t.context,e,i,t),e.trigger("sync",e,i,t)},G(this,t),this.sync("read",this,t)},save:function(t,e,n){var r;null==t||"object"==typeof t?(r=t,n=e):(r={})[t]=e;var s=(n=i.extend({validate:!0,parse:!0},n)).wait;if(r&&!s){if(!this.set(r,n))return!1}else if(!this._validate(r,n))return!1;var a=this,o=n.success,h=this.attributes;n.success=function(t){a.attributes=h;var e=n.parse?a.parse(t,n):t;if(s&&(e=i.extend({},r,e)),e&&!a.set(e,n))return!1;o&&o.call(n.context,a,t,n),a.trigger("sync",a,t,n)},G(this,n),r&&s&&(this.attributes=i.extend({},h,r));var u=this.isNew()?"create":n.patch?"patch":"update";"patch"!=u||n.attrs||(n.attrs=r);var l=this.sync(u,this,n);return this.attributes=h,l},destroy:function(t){t=t?i.clone(t):{};function s(){e.stopListening(),e.trigger("destroy",e,e.collection,t)}var e=this,n=t.success,r=t.wait,a=!(t.success=function(i){r&&s(),n&&n.call(t.context,e,i,t),e.isNew()||e.trigger("sync",e,i,t)});return this.isNew()?i.defer(t.success):(G(this,t),a=this.sync("delete",this,t)),r||s(),a},url:function(){var t=i.result(this,"urlRoot")||i.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},i.extend({},t,{validate:!0}))},_validate:function(t,e){if(!e.validate||!this.validate)return!0;t=i.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;return!n||(this.trigger("invalid",this,n,i.extend(e,{validationError:n})),!1)}});function x(t,e,i){i=Math.min(Math.max(i,0),t.length);var s,n=Array(t.length-i),r=e.length;for(s=0;s<n.length;s++)n[s]=t[s+i];for(s=0;s<r;s++)t[s+i]=e[s];for(s=0;s<n.length;s++)t[s+r+i]=n[s]}var _=e.Collection=function(t,e){e||(e={}),this.preinitialize.apply(this,arguments),e.model&&(this.model=e.model),void 0!==e.comparator&&(this.comparator=e.comparator),this._reset(),this.initialize.apply(this,arguments),t&&this.reset(t,i.extend({silent:!0},e))},y={add:!0,remove:!0,merge:!0},b={add:!0,remove:!1};i.extend(_.prototype,a,{model:m,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,i.extend({merge:!1},e,b))},remove:function(t,e){e=i.extend({},e);var n=!i.isArray(t);t=n?[t]:t.slice();var r=this._removeModels(t,e);return!e.silent&&r.length&&(e.changes={added:[],merged:[],removed:r},this.trigger("update",this,e)),n?r[0]:r},set:function(t,e){if(null!=t){(e=i.extend({},y,e)).parse&&!this._isModel(t)&&(t=this.parse(t,e)||[]);var n=!i.isArray(t);t=n?[t]:t.slice();var r=e.at;null!=r&&(r=+r),r>this.length&&(r=this.length),r<0&&(r+=this.length+1);var g,m,s=[],a=[],o=[],h=[],u={},l=e.add,c=e.merge,f=e.remove,d=!1,v=this.comparator&&null==r&&!1!==e.sort,p=i.isString(this.comparator)?this.comparator:null;for(m=0;m<t.length;m++){g=t[m];var _=this.get(g);if(_){if(c&&g!==_){var b=this._isModel(g)?g.attributes:g;e.parse&&(b=_.parse(b,e)),_.set(b,e),o.push(_),v&&!d&&(d=_.hasChanged(p))}u[_.cid]||(u[_.cid]=!0,s.push(_)),t[m]=_}else l&&(g=t[m]=this._prepareModel(g,e))&&(a.push(g),this._addReference(g,e),u[g.cid]=!0,s.push(g))}if(f){for(m=0;m<this.length;m++)u[(g=this.models[m]).cid]||h.push(g);h.length&&this._removeModels(h,e)}var w=!1,E=!v&&l&&f;if(s.length&&E?(w=this.length!==s.length||i.some(this.models,function(t,e){return t!==s[e]}),this.models.length=0,x(this.models,s,0),this.length=this.models.length):a.length&&(v&&(d=!0),x(this.models,a,null==r?this.length:r),this.length=this.models.length),d&&this.sort({silent:!0}),!e.silent){for(m=0;m<a.length;m++)null!=r&&(e.index=r+m),(g=a[m]).trigger("add",g,this,e);(d||w)&&this.trigger("sort",this,e),(a.length||h.length||o.length)&&(e.changes={added:a,removed:h,merged:o},this.trigger("update",this,e))}return n?t[0]:t}},reset:function(t,e){e=e?i.clone(e):{};for(var n=0;n<this.models.length;n++)this._removeReference(this.models[n],e);return e.previousModels=this.models,this._reset(),t=this.add(t,i.extend({silent:!0},e)),e.silent||this.trigger("reset",this,e),t},push:function(t,e){return this.add(t,i.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,i.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(null!=t)return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t)]||t.cid&&this._byId[t.cid]},has:function(t){return null!=this.get(t)},at:function(t){return t<0&&(t+=this.length),this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,!0)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var n=e.length;return i.isFunction(e)&&(e=e.bind(this)),1===n||i.isString(e)?this.models=this.sortBy(e):this.models.sort(e),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return this.map(t+"")},fetch:function(t){var e=(t=i.extend({parse:!0},t)).success,n=this;return t.success=function(i){var r=t.reset?"reset":"set";n[r](i,t),e&&e.call(t.context,n,i,t),n.trigger("sync",n,i,t)},G(this,t),this.sync("read",this,t)},create:function(t,e){var n=(e=e?i.clone(e):{}).wait;if(!(t=this._prepareModel(t,e)))return!1;n||this.add(t,e);var r=this,s=e.success;return e.success=function(t,e,i){n&&r.add(t,i),s&&s.call(i.context,t,e,i)},t.save(null,e),t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},values:function(){return new E(this,k)},keys:function(){return new E(this,I)},entries:function(){return new E(this,S)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){if(this._isModel(t))return t.collection||(t.collection=this),t;var n=new(((e=e?i.clone(e):{}).collection=this).model)(t,e);return n.validationError?(this.trigger("invalid",this,n.validationError,e),!1):n},_removeModels:function(t,e){for(var i=[],n=0;n<t.length;n++){var r=this.get(t[n]);if(r){var s=this.indexOf(r);this.models.splice(s,1),this.length--,delete this._byId[r.cid];var a=this.modelId(r.attributes);null!=a&&delete this._byId[a],e.silent||(e.index=s,r.trigger("remove",r,this,e)),i.push(r),this._removeReference(r,e)}}return i},_isModel:function(t){return t instanceof m},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes);null!=i&&(this._byId[i]=t),t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes);null!=i&&delete this._byId[i],this===t.collection&&delete t.collection,t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){if(e){if(("add"===t||"remove"===t)&&i!==this)return;if("destroy"===t&&this.remove(e,n),"change"===t){var r=this.modelId(e.previousAttributes()),s=this.modelId(e.attributes);r!==s&&(null!=r&&delete this._byId[r],null!=s&&(this._byId[s]=e))}}this.trigger.apply(this,arguments)}});var w="function"==typeof Symbol&&Symbol.iterator;w&&(_.prototype[w]=_.prototype.values);var E=function(t,e){this._collection=t,this._kind=e,this._index=0},k=1,I=2,S=3;w&&(E.prototype[w]=function(){return this}),E.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var e,t=this._collection.at(this._index);if(this._index++,this._kind===k)e=t;else{var i=this._collection.modelId(t.attributes);e=this._kind===I?i:[i,t]}return{value:e,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var T=e.View=function(t){this.cid=i.uniqueId("view"),this.preinitialize.apply(this,arguments),i.extend(this,i.pick(t,H)),this._ensureElement(),this.initialize.apply(this,arguments)},P=/^(\S+)\s*(.*)$/,H=["model","collection","el","id","attributes","className","tagName","events"];i.extend(T.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(t){return this.undelegateEvents(),this._setElement(t),this.delegateEvents(),this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t),this.el=this.$el[0]},delegateEvents:function(t){if(t||(t=i.result(this,"events")),!t)return this;for(var e in this.undelegateEvents(),t){var n=t[e];if(i.isFunction(n)||(n=this[n]),n){var r=e.match(P);this.delegate(r[1],r[2],n.bind(this))}}return this},delegate:function(t,e,i){return this.$el.on(t+".delegateEvents"+this.cid,e,i),this},undelegateEvents:function(){return this.$el&&this.$el.off(".delegateEvents"+this.cid),this},undelegate:function(t,e,i){return this.$el.off(t+".delegateEvents"+this.cid,e,i),this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(this.el)this.setElement(i.result(this,"el"));else{var t=i.extend({},i.result(this,"attributes"));this.id&&(t.id=i.result(this,"id")),this.className&&(t.class=i.result(this,"className")),this.setElement(this._createElement(i.result(this,"tagName"))),this._setAttributes(t)}},_setAttributes:function(t){this.$el.attr(t)}});function A(t,e,n,r){i.each(n,function(i,n){e[n]&&(t.prototype[n]=function(t,e,i,n){switch(e){case 1:return function(){return t[i](this[n])};case 2:return function(e){return t[i](this[n],e)};case 3:return function(e,r){return t[i](this[n],C(e,this),r)};case 4:return function(e,r,s){return t[i](this[n],C(e,this),r,s)};default:return function(){var e=s.call(arguments);return e.unshift(this[n]),t[i].apply(t,e)}}}(e,i,n,r))})}var C=function(t,e){return i.isFunction(t)?t:i.isObject(t)&&!e._isModel(t)?R(t):i.isString(t)?function(e){return e.get(t)}:t},R=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};i.each([[_,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},"models"],[m,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},"attributes"]],function(t){var e=t[0],n=t[1],r=t[2];e.mixin=function(t){var n=i.reduce(i.functions(t),function(t,e){return t[e]=0,t},{});A(e,t,n,r)},A(e,i,n,r)}),e.sync=function(t,n,r){var s=j[t];i.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:s,dataType:"json"};if(r.url||(a.url=i.result(n,"url")||V()),null!=r.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(a.contentType="application/json",a.data=JSON.stringify(r.attrs||n.toJSON(r))),r.emulateJSON&&(a.contentType="application/x-www-form-urlencoded",a.data=a.data?{model:a.data}:{}),r.emulateHTTP&&("PUT"===s||"DELETE"===s||"PATCH"===s)){a.type="POST",r.emulateJSON&&(a.data._method=s);var o=r.beforeSend;r.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",s),o)return o.apply(this,arguments)}}"GET"===a.type||r.emulateJSON||(a.processData=!1);var h=r.error;r.error=function(t,e,i){r.textStatus=e,r.errorThrown=i,h&&h.call(r.context,t,e,i)};var u=r.xhr=e.ajax(i.extend(a,r));return n.trigger("request",n,u,r),u};var j={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var O=e.Router=function(t){t||(t={}),this.preinitialize.apply(this,arguments),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},U=/\((.*?)\)/g,z=/(\(\?)?:\w+/g,q=/\*\w+/g,F=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(O.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,n,r){i.isRegExp(t)||(t=this._routeToRegExp(t)),i.isFunction(n)&&(r=n,n=""),r||(r=this[n]);var s=this;return e.history.route(t,function(i){var a=s._extractParameters(t,i);!1!==s.execute(r,a,n)&&(s.trigger.apply(s,["route:"+n].concat(a)),s.trigger("route",n,a),e.history.trigger("route",s,n,a))}),this},execute:function(t,e,i){t&&t.apply(this,e)},navigate:function(t,i){return e.history.navigate(t,i),this},_bindRoutes:function(){if(this.routes){this.routes=i.result(this,"routes");for(var t,e=i.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){return e===n.length-1?t||null:t?decodeURIComponent(t):null})}});var B=e.History=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},J=/^[#\/]|\s+$/g,L=/^\/+|\/+$/g,W=/#.*$/;B.started=!1,i.extend(B.prototype,a,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===t.charAt(0)?t.slice(1):t},getFragment:function(t){return null==t&&(t=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");if(B.started=!0,this.options=i.extend({root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||7<document.documentMode),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace(L,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var n=document.body,r=n.insertBefore(this.iframe,n.firstChild).contentWindow;r.document.open(),r.document.close(),r.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?s("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?s("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),B.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!1;this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return!!this.matchRoot()&&(t=this.fragment=this.getFragment(t),i.some(this.handlers,function(e){if(e.route.test(t))return e.callback(t),!0}))},navigate:function(t,e){if(!B.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var i=this.root;""!==t&&"?"!==t.charAt(0)||(i=i.slice(0,-1)||"/");var n=i+t;t=t.replace(W,"");var r=this.decodeFragment(t);if(this.fragment!==r){if(this.fragment=r,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,n);else{if(!this._wantsHashChange)return this.location.assign(n);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;e.replace||(s.document.open(),s.document.close()),this._updateHash(s.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,i){if(i){var n=t.href.replace(/(javascript:|#).*$/,"");t.replace(n+"#"+e)}else t.hash="#"+e}}),e.history=new B;m.extend=_.extend=O.extend=T.extend=B.extend=function(t,e){var r,n=this;return r=t&&i.has(t,"constructor")?t.constructor:function(){return n.apply(this,arguments)},i.extend(r,n,e),r.prototype=i.create(n.prototype,t),(r.prototype.constructor=r).__super__=n.prototype,r};var V=function(){throw new Error('A "url" property or function must be specified')},G=function(t,e){var i=e.error;e.error=function(n){i&&i.call(e.context,t,n,e),t.trigger("error",t,n,e)}};return e}),function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.7",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return null==e?"":e.toString()},e.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i<r.length;i++){var n=r[i],s=e[n];if(Array.isArray(s))t[n]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[n]=s}}return t},e.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},e.FieldRef.joiner="/",e.FieldRef.fromString=function(t){var r=t.indexOf(e.FieldRef.joiner);if(-1===r)throw"malformed field ref string";var i=t.slice(0,r),n=t.slice(r+1);return new e.FieldRef(n,i,t)},e.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+e.FieldRef.joiner+this.docRef),this._stringValue},e.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},e.Set.complete={intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},e.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},e.Set.prototype.contains=function(e){return!!this.elements[e]},e.Set.prototype.intersect=function(t){var r,i,n,s=[];if(t===e.Set.complete)return this;if(t===e.Set.empty)return t;i=this.length<t.length?(r=this,t):(r=t,this),n=Object.keys(r.elements);for(var o=0;o<n.length;o++){var a=n[o];a in i.elements&&s.push(a)}return new e.Set(s)},e.Set.prototype.union=function(t){return t===e.Set.complete?e.Set.complete:t===e.Set.empty?this:new e.Set(Object.keys(this.elements).concat(Object.keys(t.elements)))},e.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},e.Token=function(e,t){this.str=e||"",this.metadata=t||{}},e.Token.prototype.toString=function(){return this.str},e.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},e.Token.prototype.clone=function(t){return t=t||function(e){return e},new e.Token(t(this.str,this.metadata),this.metadata)},e.tokenizer=function(t,r){if(null==t||null==t)return[];if(Array.isArray(t))return t.map(function(t){return new e.Token(e.utils.asString(t).toLowerCase(),e.utils.clone(r))});for(var i=t.toString().toLowerCase(),n=i.length,s=[],o=0,a=0;o<=n;o++){var l=o-a;if(i.charAt(o).match(e.tokenizer.separator)||o==n){if(0<l){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){t.label&&t.label in this.registeredFunctions||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var i=this._stack[r],n=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)n.push(o[a]);else n.push(o)}e=n}return e},e.Pipeline.prototype.runString=function(t,r){var i=new e.Token(t,r);return this.run([i]).map(function(e){return e.toString()})},e.Pipeline.prototype.reset=function(){this._stack=[]},e.Pipeline.prototype.toJSON=function(){return this._stack.map(function(t){return e.Pipeline.warnIfFunctionNotRegistered(t),t.label})},e.Vector=function(e){this._magnitude=0,this.elements=e||[]},e.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,i=r-t,n=Math.floor(i/2),s=this.elements[2*n];1<i&&(s<e&&(t=n),e<s&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:e<s?2*n:s<e?2*(n+1):void 0},e.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},e.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=r(this.elements[i+1],t):this.elements.splice(i,0,e,t)},e.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var i=this.elements[r];e+=i*i}return this._magnitude=Math.sqrt(e)},e.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,i=e.elements,n=r.length,s=i.length,o=0,a=0,u=0,l=0;u<n&&l<s;)(o=r[u])<(a=i[l])?u+=2:a<o?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},e.Vector.prototype.toJSON=function(){return this.elements},e.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},i="[aeiouy]",n="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),p=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,v=/^(.+?)(ed|ing)$/,g=/.$/,x=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),Q=new RegExp("^"+n+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,S=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,L=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,b=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,T=/ll$/,O=new RegExp("^"+n+i+"[^aeiouwxy]$"),I=function(r){var i,n,s,o,a,u,l;if(r.length<3)return r;if("y"==(s=r.substr(0,1))&&(r=s.toUpperCase()+r.substr(1)),a=y,(o=p).test(r)?r=r.replace(o,"$1$2"):a.test(r)&&(r=r.replace(a,"$1$2")),a=v,(o=m).test(r)){var I=o.exec(r);(o=c).test(I[1])&&(o=g,r=r.replace(o,""))}else if(a.test(r)){i=(I=a.exec(r))[1],(a=f).test(i)&&(u=w,l=Q,(a=x).test(r=i)?r+="e":u.test(r)?(o=g,r=r.replace(o,"")):l.test(r)&&(r+="e"))}(o=k).test(r)&&(r=(i=(I=o.exec(r))[1])+"i");(o=S).test(r)&&(i=(I=o.exec(r))[1],n=I[2],(o=c).test(i)&&(r=i+e[n]));(o=E).test(r)&&(i=(I=o.exec(r))[1],n=I[2],(o=c).test(i)&&(r=i+t[n]));if(a=b,(o=L).test(r))i=(I=o.exec(r))[1],(o=h).test(i)&&(r=i);else if(a.test(r)){i=(I=a.exec(r))[1]+I[2],(a=h).test(i)&&(r=i)}(o=P).test(r)&&(i=(I=o.exec(r))[1],a=d,u=O,((o=h).test(i)||a.test(i)&&!u.test(i))&&(r=i));return a=h,(o=T).test(r)&&a.test(r)&&(o=g,r=r.replace(o,"")),"y"==s&&(r=s.toLowerCase()+r.substr(1)),r};return function(e){return e.update(I)}}(),e.Pipeline.registerFunction(e.stemmer,"stemmer"),e.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},e.stopWordFilter=e.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),e.Pipeline.registerFunction(e.stopWordFilter,"stopWordFilter"),e.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},e.Pipeline.registerFunction(e.trimmer,"trimmer"),e.TokenSet=function(){this.final=!1,this.edges={},this.id=e.TokenSet._nextId,e.TokenSet._nextId+=1},e.TokenSet._nextId=1,e.TokenSet.fromArray=function(t){for(var r=new e.TokenSet.Builder,i=0,n=t.length;i<n;i++)r.insert(t[i]);return r.finish(),r.root},e.TokenSet.fromClause=function(t){return"editDistance"in t?e.TokenSet.fromFuzzyString(t.term,t.editDistance):e.TokenSet.fromString(t.term)},e.TokenSet.fromFuzzyString=function(t,r){for(var i=new e.TokenSet,n=[{node:i,editsRemaining:r,str:t}];n.length;){var s=n.pop();if(0<s.str.length){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o.final=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u.final=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),1<s.str.length&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node.final=!0),1<=s.str.length){if("*"in s.node.edges)var l=s.node.edges["*"];else{l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l.final=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(1<s.str.length){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c.final=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n<s;n++){var o=t[n],a=n==s-1;if("*"==o)(r.edges[o]=r).final=a;else{var u=new e.TokenSet;u.final=a,r.edges[o]=u,r=u}}return i},e.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),i=Object.keys(r.node.edges),n=i.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<n;s++){var o=i[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},e.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,i=0;i<r;i++){var n=t[i];e=e+n+this.edges[n].id}return e},e.TokenSet.prototype.intersect=function(t){for(var r=new e.TokenSet,i=void 0,n=[{qNode:t,output:r,node:this}];n.length;){i=n.pop();for(var s=Object.keys(i.qNode.edges),o=s.length,a=Object.keys(i.node.edges),u=a.length,l=0;l<o;l++)for(var c=s[l],h=0;h<u;h++){var d=a[h];if(d==c||"*"==c){var f=i.node.edges[d],p=i.qNode.edges[c],y=f.final&&p.final,m=void 0;d in i.output.edges?(m=i.output.edges[d]).final=m.final||y:((m=new e.TokenSet).final=y,i.output.edges[d]=m),n.push({qNode:p,output:m,node:f})}}}return r},e.TokenSet.Builder=function(){this.previousWord="",this.root=new e.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},e.TokenSet.Builder.prototype.insert=function(t){var r,i=0;if(t<this.previousWord)throw new Error("Out of order word insertion");for(var n=0;n<t.length&&n<this.previousWord.length&&t[n]==this.previousWord[n];n++)i++;this.minimize(i),r=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(n=i;n<t.length;n++){var s=new e.TokenSet,o=t[n];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=t},e.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},e.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;e<=t;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){new e.QueryParser(t,r).parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u<this.fields.length;u++)n[this.fields[u]]=new e.Vector;t.call(r,r);for(u=0;u<r.clauses.length;u++){var c,l=r.clauses[u],h=e.Set.complete;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var f=c[d];l.term=f;var p=e.TokenSet.fromClause(l),y=this.tokenSet.intersect(p).toArray();if(0===y.length&&l.presence===e.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){o[v=l.fields[m]]=e.Set.empty}break}for(var g=0;g<y.length;g++){var x=y[g],w=this.invertedIndex[x],Q=w._index;for(m=0;m<l.fields.length;m++){var k=w[v=l.fields[m]],S=Object.keys(k),E=x+"/"+v,L=new e.Set(S);if(l.presence==e.Query.presence.REQUIRED&&(h=h.union(L),void 0===o[v]&&(o[v]=e.Set.complete)),l.presence!=e.Query.presence.PROHIBITED){if(n[v].upsert(Q,l.boost,function(e,t){return e+t}),!s[E]){for(var b=0;b<S.length;b++){var P,T=S[b],O=new e.FieldRef(T,v),I=k[T];void 0===(P=i[O])?i[O]=new e.MatchData(x,v,I):P.add(x,v,I)}s[E]=!0}}else void 0===a[v]&&(a[v]=e.Set.empty),a[v]=a[v].union(L)}}}if(l.presence===e.Query.presence.REQUIRED)for(m=0;m<l.fields.length;m++){o[v=l.fields[m]]=o[v].intersect(h)}}var R=e.Set.complete,F=e.Set.empty;for(u=0;u<this.fields.length;u++){var v;o[v=this.fields[u]]&&(R=R.intersect(o[v])),a[v]&&(F=F.union(a[v]))}var C=Object.keys(i),N=[],_=Object.create(null);if(r.isNegated()){C=Object.keys(this.fieldVectors);for(u=0;u<C.length;u++){O=C[u];var j=e.FieldRef.fromString(O);i[O]=new e.MatchData}}for(u=0;u<C.length;u++){var D=(j=e.FieldRef.fromString(C[u])).docRef;if(R.contains(D)&&!F.contains(D)){var A,B=this.fieldVectors[j],V=n[j.fieldName].similarity(B);if(void 0!==(A=_[D]))A.score+=V,A.matchData.combine(i[j]);else{var z={ref:D,score:V,matchData:i[j]};_[D]=z,N.push(z)}}}return N.sort(function(e,t){return t.score-e.score})},e.Index.prototype.toJSON=function(){var t=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),r=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:e.version,fields:this.fields,fieldVectors:r,invertedIndex:t,pipeline:this.pipeline.toJSON()}},e.Index.load=function(t){var r={},i={},n=t.fieldVectors,s=Object.create(null),o=t.invertedIndex,a=new e.TokenSet.Builder,u=e.Pipeline.load(t.pipeline);t.version!=e.version&&e.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+e.version+"' does not match serialized index '"+t.version+"'");for(var l=0;l<n.length;l++){var h=(c=n[l])[0],d=c[1];i[h]=new e.Vector(d)}for(l=0;l<o.length;l++){var c,f=(c=o[l])[0],p=c[1];a.insert(f),s[f]=p}return a.finish(),r.fields=t.fields,r.fieldVectors=i,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=u,new e.Index(r)},e.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=e.tokenizer,this.pipeline=new e.Pipeline,this.searchPipeline=new e.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},e.Builder.prototype.ref=function(e){this._ref=e},e.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},e.Builder.prototype.b=function(e){this._b=e<0?0:1<e?1:e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s<n.length;s++){var o=n[s],a=this._fields[o].extractor,u=a?a(t):t[o],l=this.tokenizer(u,{fields:[o]}),c=this.pipeline.run(l),h=new e.FieldRef(i,o),d=Object.create(null);this.fieldTermFrequencies[h]=d,this.fieldLengths[h]=0,this.fieldLengths[h]+=c.length;for(var f=0;f<c.length;f++){var p=c[f];if(null==d[p]&&(d[p]=0),d[p]+=1,null==this.invertedIndex[p]){var y=Object.create(null);y._index=this.termIndex,this.termIndex+=1;for(var m=0;m<n.length;m++)y[n[m]]=Object.create(null);this.invertedIndex[p]=y}null==this.invertedIndex[p][o][i]&&(this.invertedIndex[p][o][i]=Object.create(null));for(var v=0;v<this.metadataWhitelist.length;v++){var g=this.metadataWhitelist[v],x=p.metadata[g];null==this.invertedIndex[p][o][i][g]&&(this.invertedIndex[p][o][i][g]=[]),this.invertedIndex[p][o][i][g].push(x)}}}},e.Builder.prototype.calculateAverageFieldLengths=function(){for(var t=Object.keys(this.fieldLengths),r=t.length,i={},n={},s=0;s<r;s++){var o=e.FieldRef.fromString(t[s]),a=o.fieldName;n[a]||(n[a]=0),n[a]+=1,i[a]||(i[a]=0),i[a]+=this.fieldLengths[o]}var u=Object.keys(this._fields);for(s=0;s<u.length;s++){var l=u[s];i[l]=i[l]/n[l]}this.averageFieldLength=i},e.Builder.prototype.createFieldVectors=function(){for(var t={},r=Object.keys(this.fieldTermFrequencies),i=r.length,n=Object.create(null),s=0;s<i;s++){for(var o=e.FieldRef.fromString(r[s]),a=o.fieldName,u=this.fieldLengths[o],l=new e.Vector,c=this.fieldTermFrequencies[o],h=Object.keys(c),d=h.length,f=this._fields[a].boost||1,p=this._documents[o.docRef].boost||1,y=0;y<d;y++){var m,v,g,x=h[y],w=c[x],Q=this.invertedIndex[x]._index;void 0===n[x]?(m=e.idf(this.invertedIndex[x],this.documentCount),n[x]=m):m=n[x],v=m*((this._k1+1)*w)/(this._k1*(1-this._b+this._b*(u/this.averageFieldLength[a]))+w),v*=f,v*=p,g=Math.round(1e3*v)/1e3,l.insert(Q,g)}t[o]=l}this.fieldVectors=t},e.Builder.prototype.createTokenSet=function(){this.tokenSet=e.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},e.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new e.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},e.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},e.MatchData=function(e,t,r){for(var i=Object.create(null),n=Object.keys(r||{}),s=0;s<n.length;s++){var o=n[s];i[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},e.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var i=t[r],n=Object.keys(e.metadata[i]);null==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<n.length;s++){var o=n[s],a=Object.keys(e.metadata[i][o]);null==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[i][o][l]?this.metadata[i][o][l]=e.metadata[i][o][l]:this.metadata[i][o][l]=this.metadata[i][o][l].concat(e.metadata[i][o][l])}}}},e.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var i=Object.keys(r),n=0;n<i.length;n++){var s=i[n];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},e.Query=function(e){this.clauses=[],this.allFields=e},e.Query.wildcard=new String("*"),e.Query.wildcard.NONE=0,e.Query.wildcard.LEADING=1,e.Query.wildcard.TRAILING=2,e.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},e.Query.prototype.clause=function(t){return"fields"in t||(t.fields=this.allFields),"boost"in t||(t.boost=1),"usePipeline"in t||(t.usePipeline=!0),"wildcard"in t||(t.wildcard=e.Query.wildcard.NONE),t.wildcard&e.Query.wildcard.LEADING&&t.term.charAt(0)!=e.Query.wildcard&&(t.term="*"+t.term),t.wildcard&e.Query.wildcard.TRAILING&&t.term.slice(-1)!=e.Query.wildcard&&(t.term=t.term+"*"),"presence"in t||(t.presence=e.Query.presence.OPTIONAL),this.clauses.push(t),this},e.Query.prototype.isNegated=function(){for(var t=0;t<this.clauses.length;t++)if(this.clauses[t].presence!=e.Query.presence.PROHIBITED)return!1;return!0},e.Query.prototype.term=function(t,r){if(Array.isArray(t))return t.forEach(function(t){this.term(t,e.utils.clone(r))},this),this;var i=r||{};return i.term=t.toString(),this.clause(i),this},e.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},e.QueryParseError.prototype=new Error,e.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},e.QueryLexer.prototype.run=function(){for(var t=e.QueryLexer.lexText;t;)t=t(this)},e.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,i=0;i<this.escapeCharPositions.length;i++)r=this.escapeCharPositions[i],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},e.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},e.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},e.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){for(var t,r;47<(r=(t=this.next()).charCodeAt(0))&&r<58;);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos<this.length},e.QueryLexer.EOS="EOS",e.QueryLexer.FIELD="FIELD",e.QueryLexer.TERM="TERM",e.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",e.QueryLexer.BOOST="BOOST",e.QueryLexer.PRESENCE="PRESENCE",e.QueryLexer.lexField=function(t){return t.backup(),t.emit(e.QueryLexer.FIELD),t.ignore(),e.QueryLexer.lexText},e.QueryLexer.lexTerm=function(t){if(1<t.width()&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){0<t.width()&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),0<t.width()&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),0<t.width()&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(null!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw 1<=r.str.length&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(null!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(null==n){i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(null!=r){if(-1==t.query.allFields.indexOf(r.str)){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(null==s){n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(null!=r){t.currentClause.term=r.str.toLowerCase(),-1!=r.str.indexOf("*")&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(null==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(null!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(null==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(null!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(null==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}();var __extends=this&&this.__extends||function(){var extendStatics=function(d,b){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var p in b)b.hasOwnProperty(p)&&(d[p]=b[p])})(d,b)};return function(d,b){function __(){this.constructor=d}extendStatics(d,b),d.prototype=null===b?Object.create(b):(__.prototype=b.prototype,new __)}}(),typedoc,typedoc,typedoc,typedoc,typedoc,typedoc,typedoc,typedoc,typedoc,typedoc;!function(typedoc){typedoc.$html=$("html");var services=[],components=[];typedoc.$document=$(document),typedoc.$window=$(window),typedoc.$body=$("body"),typedoc.registerService=function(constructor,name,priority){void 0===priority&&(priority=0),services.push({constructor:constructor,name:name,priority:priority,instance:null}),services.sort(function(a,b){return a.priority-b.priority})},typedoc.registerComponent=function(constructor,selector,priority,namespace){void 0===priority&&(priority=0),void 0===namespace&&(namespace="*"),components.push({selector:selector,constructor:constructor,priority:priority,namespace:namespace}),components.sort(function(a,b){return a.priority-b.priority})},"undefined"!=typeof Backbone&&(typedoc.Events=function(){},_.extend(typedoc.Events.prototype,Backbone.Events));var Application=function(_super){function Application(){var _this=_super.call(this)||this;return _this.createServices(),_this.createComponents(typedoc.$body),_this}return __extends(Application,_super),Application.prototype.createServices=function(){_(services).forEach(function(c){c.instance=new c.constructor,typedoc[c.name]=c.instance})},Application.prototype.createComponents=function($context,namespace){void 0===namespace&&(namespace="default");var result=[];return _(components).forEach(function(c){c.namespace!=namespace&&"*"!=c.namespace||$context.find(c.selector).each(function(m,el){var instance,$el=$(el);(instance=$el.data("component"))?-1==_(result).indexOf(instance)&&result.push(instance):(instance=new c.constructor({el:el}),$el.data("component",instance),result.push(instance))})}),result},Application}(typedoc.Events);typedoc.Application=Application}(typedoc||(typedoc={})),function(typedoc){var Viewport=function(_super){function Viewport(){var _this=_super.call(this)||this;return _this.scrollTop=0,_this.lastY=0,_this.width=0,_this.height=0,_this.showToolbar=!0,_this.toolbar=document.querySelector(".tsd-page-toolbar"),_this.secondaryNav=document.querySelector(".tsd-navigation.secondary"),typedoc.$window.on("scroll",_.throttle(function(){return _this.onScroll()},10)),typedoc.$window.on("resize",_.throttle(function(){return _this.onResize()},10)),_this.onResize(),_this.onScroll(),_this}return __extends(Viewport,_super),Viewport.prototype.triggerResize=function(){this.trigger("resize",this.width,this.height)},Viewport.prototype.onResize=function(){this.width=typedoc.$window.width()||0,this.height=typedoc.$window.height()||0,this.trigger("resize",this.width,this.height)},Viewport.prototype.onScroll=function(){this.scrollTop=typedoc.$window.scrollTop()||0,this.trigger("scroll",this.scrollTop),this.hideShowToolbar()},Viewport.prototype.hideShowToolbar=function(){var isShown=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||0===this.scrollTop,isShown!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.secondaryNav.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop},Viewport}(typedoc.Events);typedoc.Viewport=Viewport,typedoc.registerService(Viewport,"viewport")}(typedoc||(typedoc={})),function(typedoc){typedoc.pointerDown="mousedown",typedoc.pointerMove="mousemove",typedoc.pointerUp="mouseup",typedoc.pointerDownPosition={x:0,y:0},typedoc.preventNextClick=!1,typedoc.isPointerDown=!1,typedoc.isPointerTouch=!1,typedoc.hasPointerMoved=!1,typedoc.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),typedoc.$html.addClass(typedoc.isMobile?"is-mobile":"not-mobile"),typedoc.isMobile&&"ontouchstart"in document.documentElement&&(typedoc.isPointerTouch=!0,typedoc.pointerDown="touchstart",typedoc.pointerMove="touchmove",typedoc.pointerUp="touchend"),typedoc.$document.on(typedoc.pointerDown,function(e){typedoc.isPointerDown=!0,typedoc.hasPointerMoved=!1;var t="touchstart"==typedoc.pointerDown?e.originalEvent.targetTouches[0]:e;typedoc.pointerDownPosition.y=t.pageY||0,typedoc.pointerDownPosition.x=t.pageX||0}).on(typedoc.pointerMove,function(e){if(typedoc.isPointerDown&&!typedoc.hasPointerMoved){var t="touchstart"==typedoc.pointerDown?e.originalEvent.targetTouches[0]:e,x=typedoc.pointerDownPosition.x-(t.pageX||0),y=typedoc.pointerDownPosition.y-(t.pageY||0);typedoc.hasPointerMoved=10<Math.sqrt(x*x+y*y)}}).on(typedoc.pointerUp,function(e){typedoc.isPointerDown=!1}).on("click",function(e){typedoc.preventNextClick&&(e.preventDefault(),e.stopImmediatePropagation(),typedoc.preventNextClick=!1)})}(typedoc||(typedoc={})),function(typedoc){var FilterItem=function(){function FilterItem(key,value){this.key=key,this.value=value,this.defaultValue=value,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}return FilterItem.prototype.initialize=function(){},FilterItem.prototype.setValue=function(value){if(this.value!=value){var oldValue=this.value;this.value=value,window.localStorage[this.key]=this.toLocalStorage(value),this.handleValueChange(oldValue,value)}},FilterItem}(),FilterItemCheckbox=function(_super){function FilterItemCheckbox(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(FilterItemCheckbox,_super),FilterItemCheckbox.prototype.initialize=function(){var _this=this;this.$checkbox=$("#tsd-filter-"+this.key),this.$checkbox.on("change",function(){_this.setValue(_this.$checkbox.prop("checked"))})},FilterItemCheckbox.prototype.handleValueChange=function(oldValue,newValue){this.$checkbox.prop("checked",this.value),typedoc.$html.toggleClass("toggle-"+this.key,this.value!=this.defaultValue)},FilterItemCheckbox.prototype.fromLocalStorage=function(value){return"true"==value},FilterItemCheckbox.prototype.toLocalStorage=function(value){return value?"true":"false"},FilterItemCheckbox}(FilterItem),FilterItemSelect=function(_super){function FilterItemSelect(){return null!==_super&&_super.apply(this,arguments)||this}return __extends(FilterItemSelect,_super),FilterItemSelect.prototype.initialize=function(){var _this=this;typedoc.$html.addClass("toggle-"+this.key+this.value),this.$select=$("#tsd-filter-"+this.key),this.$select.on(typedoc.pointerDown+" mouseover",function(){_this.$select.addClass("active")}).on("mouseleave",function(){_this.$select.removeClass("active")}).on(typedoc.pointerUp,"li",function(e){_this.$select.removeClass("active"),_this.setValue(($(e.target).attr("data-value")||"").toString())}),typedoc.$document.on(typedoc.pointerDown,function(e){$(e.target).parents().addBack().is(_this.$select)||_this.$select.removeClass("active")})},FilterItemSelect.prototype.handleValueChange=function(oldValue,newValue){this.$select.find("li.selected").removeClass("selected"),this.$select.find(".tsd-select-label").text(this.$select.find('li[data-value="'+newValue+'"]').addClass("selected").text()),typedoc.$html.removeClass("toggle-"+oldValue),typedoc.$html.addClass("toggle-"+newValue)},FilterItemSelect.prototype.fromLocalStorage=function(value){return value},FilterItemSelect.prototype.toLocalStorage=function(value){return value},FilterItemSelect}(FilterItem),Filter=function(_super){function Filter(options){var _this=_super.call(this,options)||this;return _this.optionVisibility=new FilterItemSelect("visibility","private"),_this.optionInherited=new FilterItemCheckbox("inherited",!0),_this.optionExternals=new FilterItemCheckbox("externals",!0),_this.optionOnlyExported=new FilterItemCheckbox("only-exported",!1),_this}return __extends(Filter,_super),Filter.isSupported=function(){try{return void 0!==window.localStorage}catch(e){return!1}},Filter}(Backbone.View);Filter.isSupported()?typedoc.registerComponent(Filter,"#tsd-filter"):typedoc.$html.addClass("no-filter")}(typedoc||(typedoc={})),function(typedoc){var MenuHighlight=function(_super){function MenuHighlight(options){var _this=_super.call(this,options)||this;return _this.anchors=[],_this.index=0,_this.listenTo(typedoc.viewport,"resize",_this.onResize),_this.listenTo(typedoc.viewport,"scroll",_this.onScroll),_this.createAnchors(),_this}return __extends(MenuHighlight,_super),MenuHighlight.prototype.createAnchors=function(){var _this=this;this.index=0,this.anchors=[{position:0}];var base=window.location.href;-1!=base.indexOf("#")&&(base=base.substr(0,base.indexOf("#"))),this.$el.find("a").each(function(_index,el){var href=el.href;if(-1!=href.indexOf("#")&&href.substr(0,base.length)==base){var hash=href.substr(href.indexOf("#")+1),$anchor=$("a.tsd-anchor[name="+hash+"]");0!=$anchor.length&&_this.anchors.push({$link:$(el.parentNode),$anchor:$anchor,position:0})}}),this.onResize()},MenuHighlight.prototype.onResize=function(){for(var anchor,index=1,count=this.anchors.length;index<count;index++)(anchor=this.anchors[index]).position=anchor.$anchor.offset().top;this.anchors.sort(function(a,b){return a.position-b.position}),this.onScroll(typedoc.viewport.scrollTop)},MenuHighlight.prototype.onScroll=function(scrollTop){var anchors=this.anchors,index=this.index,count=anchors.length-1;for(scrollTop+=5;0<index&&anchors[index].position>scrollTop;)index-=1;for(;index<count&&anchors[index+1].position<scrollTop;)index+=1;this.index!=index&&(0<this.index&&this.anchors[this.index].$link.removeClass("focus"),this.index=index,0<this.index&&this.anchors[this.index].$link.addClass("focus"))},MenuHighlight}(Backbone.View);typedoc.MenuHighlight=MenuHighlight,typedoc.registerComponent(MenuHighlight,".menu-highlight")}(typedoc||(typedoc={})),function(typedoc){var search;!function(search){var SearchLoadingState;!function(SearchLoadingState){SearchLoadingState[SearchLoadingState.Idle=0]="Idle",SearchLoadingState[SearchLoadingState.Loading=1]="Loading",SearchLoadingState[SearchLoadingState.Ready=2]="Ready",SearchLoadingState[SearchLoadingState.Failure=3]="Failure"}(SearchLoadingState||(SearchLoadingState={}));var $el=$("#tsd-search"),$field=$("#tsd-search-field"),$results=$(".results"),base=$el.attr("data-base")+"/",query="",loadingState=SearchLoadingState.Idle,hasFocus=!1,preventPress=!1,index,resultClicked=!1;function createIndex(){var builder=new lunr.Builder;builder.pipeline.add(lunr.trimmer),builder.field("name",{boost:10}),builder.field("parent"),builder.ref("id");var rows=search.data.rows,pos=0,length=rows.length;!function batch(){for(var cycles=0;cycles++<100;)if(builder.add(rows[pos]),++pos==length)return index=builder.build(),setLoadingState(SearchLoadingState.Ready);setTimeout(batch,10)}()}function loadIndex(){loadingState==SearchLoadingState.Idle&&(setTimeout(function(){loadingState==SearchLoadingState.Idle&&setLoadingState(SearchLoadingState.Loading)},500),void 0!==search.data?createIndex():$.get($el.attr("data-index")).done(function(source){eval(source),createIndex()}).fail(function(){setLoadingState(SearchLoadingState.Failure)}))}function updateResults(){if($results.empty(),loadingState==SearchLoadingState.Ready&&query){var res=index.search("*"+query+"*");0===res.length&&(res=index.search("*"+query+"~1*"));for(var i=0,c=Math.min(10,res.length);i<c;i++){var row=search.data.rows[Number(res[i].ref)],name=row.name.replace(new RegExp(query,"i"),function(match){return"<b>"+match+"</b>"}),parent=row.parent||"";(parent=parent.replace(new RegExp(query,"i"),function(match){return"<b>"+match+"</b>"}))&&(name='<span class="parent">'+parent+".</span>"+name),$results.append('<li class="'+row.classes+'"><a href="'+base+row.url+'" class="tsd-kind-icon">'+name+"</li>")}}}function setLoadingState(value){loadingState!=value&&($el.removeClass(SearchLoadingState[loadingState].toLowerCase()),loadingState=value,$el.addClass(SearchLoadingState[loadingState].toLowerCase()),value==SearchLoadingState.Ready&&updateResults())}function setHasFocus(value){hasFocus!=value&&(hasFocus=value,$el.toggleClass("has-focus"),value?(setQuery(""),$field.val("")):$field.val(query))}function setQuery(value){query=$.trim(value),updateResults()}function setCurrentResult(dir){var $current=$results.find(".current");if(0==$current.length)$results.find(1==dir?"li:first-child":"li:last-child").addClass("current");else{var $rel=1==dir?$current.next("li"):$current.prev("li");0<$rel.length&&($current.removeClass("current"),$rel.addClass("current"))}}function gotoCurrentResult(){var $current=$results.find(".current");0==$current.length&&($current=$results.find("li:first-child")),0<$current.length&&(window.location.href=$current.find("a").prop("href"),$field.blur())}$results.on("mousedown",function(){resultClicked=!0}).on("mouseup",function(){setHasFocus(resultClicked=!1)}),$field.on("focusin",function(){setHasFocus(!0),loadIndex()}).on("focusout",function(){resultClicked?resultClicked=!1:setTimeout(function(){return setHasFocus(!1)},100)}).on("input",function(){setQuery($.trim(($field.val()||"").toString()))}).on("keydown",function(e){13==e.keyCode||27==e.keyCode||38==e.keyCode||40==e.keyCode?(preventPress=!0,e.preventDefault(),13==e.keyCode?gotoCurrentResult():27==e.keyCode?$field.blur():38==e.keyCode?setCurrentResult(-1):40==e.keyCode&&setCurrentResult(1)):preventPress=!1}).on("keypress",function(e){preventPress&&e.preventDefault()}),$("body").on("keydown",function(e){e.altKey||e.ctrlKey||e.metaKey||!hasFocus&&47<e.keyCode&&e.keyCode<112&&$field.focus()})}(search=typedoc.search||(typedoc.search={}))}(typedoc||(typedoc={})),function(typedoc){function noTransition($el,callback){$el.addClass("no-transition"),callback(),$el.offset(),$el.removeClass("no-transition")}typedoc.transition=function(tuples){for(var name in tuples)if(tuples.hasOwnProperty(name)&&void 0!==document.body.style[name])return{name:name,endEvent:tuples[name]};return null}({transition:"transitionend",OTransition:"oTransitionEnd",msTransition:"msTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"}),typedoc.noTransition=noTransition,typedoc.animateHeight=function($el,callback,success){var from=$el.height()||0,to=from;noTransition($el,function(){callback(),$el.css("height",""),to=$el.height()||0,from!=to&&typedoc.transition&&$el.css("height",from)}),from!=to&&typedoc.transition?($el.css("height",to),$el.on(typedoc.transition.endEvent,function(){noTransition($el,function(){$el.off(typedoc.transition.endEvent).css("height",""),success&&success()})})):success&&success()}}(typedoc||(typedoc={})),function(typedoc){var SignatureGroup=function(){function SignatureGroup($signature,$description){this.$signature=$signature,this.$description=$description}return SignatureGroup.prototype.addClass=function(className){return this.$signature.addClass(className),this.$description.addClass(className),this},SignatureGroup.prototype.removeClass=function(className){return this.$signature.removeClass(className),this.$description.removeClass(className),this},SignatureGroup}(),Signature=function(_super){function Signature(options){var _this=_super.call(this,options)||this;return _this.groups=[],_this.index=-1,_this.createGroups(),_this.$container&&(_this.$el.addClass("active").on("touchstart",".tsd-signature",function(event){return _this.onClick(event)}).on("click",".tsd-signature",function(event){return _this.onClick(event)}),_this.$container.addClass("active"),_this.setIndex(0)),_this}return __extends(Signature,_super),Signature.prototype.setIndex=function(index){if(index<0&&(index=0),index>this.groups.length-1&&(index=this.groups.length-1),this.index!=index){var to=this.groups[index];if(-1<this.index){var from=this.groups[this.index];typedoc.animateHeight(this.$container,function(){from.removeClass("current").addClass("fade-out"),to.addClass("current fade-in"),typedoc.viewport.triggerResize()}),setTimeout(function(){from.removeClass("fade-out"),to.removeClass("fade-in")},300)}else to.addClass("current"),typedoc.viewport.triggerResize();this.index=index}},Signature.prototype.createGroups=function(){var _this=this,$signatures=this.$el.find("> .tsd-signature");if(!($signatures.length<2)){this.$container=this.$el.siblings(".tsd-descriptions");var $descriptions=this.$container.find("> .tsd-description");this.groups=[],$signatures.each(function(index,el){_this.groups.push(new SignatureGroup($(el),$descriptions.eq(index)))})}},Signature.prototype.onClick=function(e){var _this=this;_(this.groups).forEach(function(group,index){group.$signature.is(e.currentTarget)&&_this.setIndex(index)})},Signature}(Backbone.View);typedoc.registerComponent(Signature,".tsd-signatures")}(typedoc||(typedoc={})),function(typedoc){var Toggle=function(_super){function Toggle(options){var _this=_super.call(this,options)||this;return _this.className=_this.$el.attr("data-toggle")||"",_this.$el.on(typedoc.pointerUp,function(e){return _this.onPointerUp(e)}),_this.$el.on("click",function(e){return e.preventDefault()}),typedoc.$document.on(typedoc.pointerDown,function(e){return _this.onDocumentPointerDown(e)}),typedoc.$document.on(typedoc.pointerUp,function(e){return _this.onDocumentPointerUp(e)}),_this}return __extends(Toggle,_super),Toggle.prototype.setActive=function(value){if(this.active!=value){this.active=value,typedoc.$html.toggleClass("has-"+this.className,value),this.$el.toggleClass("active",value);var transition=(this.active?"to-has-":"from-has-")+this.className;typedoc.$html.addClass(transition),setTimeout(function(){return typedoc.$html.removeClass(transition)},500)}},Toggle.prototype.onPointerUp=function(event){typedoc.hasPointerMoved||(this.setActive(!0),event.preventDefault())},Toggle.prototype.onDocumentPointerDown=function(e){if(this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu"))return;if($path.hasClass("tsd-filter-group"))return;this.setActive(!1)}},Toggle.prototype.onDocumentPointerUp=function(e){var _this=this;if(!typedoc.hasPointerMoved&&this.active){var $path=$(e.target).parents().addBack();if($path.hasClass("col-menu")){var $link=$path.filter("a");if($link.length){var href=window.location.href;-1!=href.indexOf("#")&&(href=href.substr(0,href.indexOf("#"))),$link.prop("href").substr(0,href.length)==href&&setTimeout(function(){return _this.setActive(!1)},250)}}}},Toggle}(Backbone.View);typedoc.registerComponent(Toggle,"a[data-toggle]")}(typedoc||(typedoc={})),function(typedoc){typedoc.app=new typedoc.Application}(typedoc||(typedoc={}));
</script>
</body>
</html>
<div class="col-content">
<div class="tsd-page-title">
<h2>@mathcoach/ide-api</h2></div>
<div class="tsd-panel tsd-typography"><a id="md:mathcoach-ide-api-version-400" class="tsd-anchor"></a><h1><a href="#md:mathcoach-ide-api-version-400">MathCoach IDE API <small><code>Version 4.0.0</code></small></a></h1><p>In diesem Paket (<a href="https://bayes.htwsaar.de/gitblit/summary/mathcoach!mathcoach-ide-api.git">Das Gitblit Repository findet sich hier</a>)
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.</p>
<p><img src="media/usage_author.gif" alt="Demo"></p>
<p><em>Beispielhafte Anwendung: Eine Datei (<code>file.demo.json</code> - auch &quot;Kontext-Datei&quot; genannt) wird angelegt. Diese kann direkt durch das Werkzeug (Demo-Editor) geladen werden. Das Werkzeug kann die Kontext-Datei beschreiben (um zu demonstrieren, dass es ein internes Datenmodell persistent speichern kann). Weiterhin kann das Werkzeug eine Groovy-Aufgabe generieren und die Aufgaben-Vorschau anzeigen lassen.</em></p>
<a id="md:idee" class="tsd-anchor"></a><h2><a href="#md:idee">Idee</a></h2><p>Grundlegende Idee ist, dass ein externes Werkzeug nahtlos in die MathCoach IDE integriert werden
kann. Bestimmte Dateien werden anhand ihrer Dateiendung mit dem Werkzeug verknüpft, sodass der
Benutzer das passende Werkzeug durch einen einfache Klick im Datei-Explorer starten kann. Diese
Datei wird im folgenden <em>Kontext-Datei</em> genannt und soll dazu dienen, das interene Datenmodell (also
alle Informationen, die der Benutzer im Werkzeug angibt) zu speichern. Das Werkzeug soll das gespeicherte
Datenmodell zu einem späteren Zeitpunkt wieder laden können.</p>
<p>Ein Werkzeug kann beispielsweise MathCoach-Aufgaben (Groovy-Datei) generieren. Weitere Funktionalitäten
der IDE - beispielsweise das Starten der generierten Aufgabe in der Aufgaben-Vorschau der IDE - sind
ebenfalls für den Werkzeugentwickler verfügbar.</p>
<p>Das Realisieren von Werkzeugen auf diese Art und Weise hat zahlreiche Vorteile:</p>
<ul>
<li>Werkzeuge werden einheitliche und benutzerfreundlich zur Verfügung gestellt</li>
<li>Grundlegende Funktionalitäten (Anlegen von Dateien, Navigieren im Dateisystem) werden bereits
durch die IDE bereitgestellt. So können Werkzeug-Entwickler ihren Fokus auf das Werkzeug legen.</li>
<li>Die IDE kann gefährliche Situationen (z.B. das Überschreiben von Dateien) abfangen
und den Benutzer entscheiden lassen, wie fortgefahren werden soll.</li>
</ul>
<a id="md:entwicklung-externer-werkzeuge" class="tsd-anchor"></a><h2><a href="#md:entwicklung-externer-werkzeuge">Entwicklung externer Werkzeuge</a></h2><p>Externe Werkzeuge laufen ausschließlich im Webbrowser des Benutzers - es muss also
auf <code>HTML</code>, <code>JavaScript</code> und <code>CSS</code> gesetzt werden. Außerdem muss das Werkzeug unter
der Domain des jeweiligen MathCoach-Servers erreichbar sein. Zur Entwicklungszeit legt man das Werkzeug
dazu im www-Verzeichnis ab. Die von der IDE bereitgestellte <code>ide-lib.js</code> Bibliothek
muss eingebunden werden.</p>
<pre><code><span class="hl-0">&lt;</span><span class="hl-1">script</span><span class="hl-0"> </span><span class="hl-1">src</span><span class="hl-0">=</span><span class="hl-2">&quot;/mathcoach/ui/ide/ide-lib.js&quot;</span><span class="hl-0">/&gt; </span>
</code><button>Copy</button></pre>
<p>Dabei darf der MathCoach-Server <strong>nicht</strong> fest in die URL eincodiert werden. Andernfalls
kann es zu Problemen kommen, wenn das Werkzeug auf unterschiedlichen Server bereitgestellt
wird oder ohne IDE lauffähig sein soll. Bei korrekter Verwendung steht die IDE API nun
durch die globale Varialbe <code>MC</code> zur Verfügung - <a href="./interfaces/mathcoach.api.html">Dokumentation der IDE API</a>.</p>
<blockquote>
<p><strong>Hinweis</strong>: Es steht <strong>ausschließlich</strong> die API, welche über die globale Variable <code>MC</code>
definiert ist, zur Verfügung! Hilfsfunktionen wie <code>Helpers.enableOfflineUsageIfNecessary()</code>
sind grundsätzlich nicht verfügbar und müssen vom Werkzeugentwickler eingebunden
werden - siehe &quot;Hilfunktionen für Werkzeug-Entwickler&quot; weiter unten.</p>
</blockquote>
<blockquote>
<p><strong>Hinweis</strong>: Erst, wenn das Werkzeug in die IDE integriert und aus dieser heraus
gestartet wurde, kann die IDE API verwendet werden! Soll das Werkzeug auch ohne die
IDE nutzbar sein (z.B. zum Testen), muss dies bei der Implementierung berücksichtigt
werden. Konnte die <code>ide-lib.js</code> nicht eingebunden werden (weil das Werkzeug ohne IDE
gestartet wurde - darum darf auch kein Server fest eincodiert werden), steht die
globale Variable <code>MC</code> nicht zur Verfügung (<code>typeof MC === &quot;undefined&quot;</code>). Hier kann das
Werkezug eine Fallunterscheidung treffen und beispielsweise eine eigene Implementierung
über die globale Variable <code>MC</code> bereitstellen. Siehe auch <code>Helpers.enableOfflineUsageIfNecessary()</code>
weiter unten.</p>
</blockquote>
<a id="md:empfohlenes-vorgehen" class="tsd-anchor"></a><h3><a href="#md:empfohlenes-vorgehen">Empfohlenes Vorgehen</a></h3><p>Damit externe Werkzeuge ein einheitliches Verhalten aufweisen, sollte wie folgt vorgegangen werden.</p>
<p>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 oder die IDE (aus
welchen Gründen auch immer) nicht einsatzbereit ist.</p>
<pre><code><span class="hl-3">if</span><span class="hl-0">(</span><span class="hl-4">typeof</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0"> === </span><span class="hl-2">&quot;undefined&quot;</span><span class="hl-0">){</span><br/><span class="hl-0">    </span><span class="hl-6">// Hinweis: Hier kann die IDE API nachgebildet werden,</span><br/><span class="hl-0">    </span><span class="hl-6">// sodass das Werkzeug auch &quot;Offline&quot; funktioniert. </span><br/><span class="hl-0">    </span><span class="hl-6">// Also: MC = { isReady: async () =&gt; true, ...}</span><br/><span class="hl-0">    </span><span class="hl-3">throw</span><span class="hl-0"> </span><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-7">Error</span><span class="hl-0">(</span><span class="hl-2">&quot;IDE Lib nicht eingebunden&quot;</span><span class="hl-0">); </span><span class="hl-6">// TODO: show error to user</span><br/><span class="hl-0">}</span><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">isReady</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-7">isReady</span><span class="hl-0">();</span><br/><span class="hl-3">if</span><span class="hl-0">(!</span><span class="hl-1">isReady</span><span class="hl-0">){</span><br/><span class="hl-0">    </span><span class="hl-3">throw</span><span class="hl-0"> </span><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-7">Error</span><span class="hl-0">(</span><span class="hl-2">&quot;Die MathCoach-API ist nicht einsatzbereit.&quot;</span><span class="hl-0">); </span><span class="hl-6">// TODO: show error to user</span><br/><span class="hl-0">}</span><br/><span class="hl-0">...</span>
</code><button>Copy</button></pre>
<p>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.</p>
<p>Ist der Inhalt der Kontext-Datei leer, wurde die Datei neu angelegt und zum ersten mal geöffnet.
Nun soll das Werkzeug:</p>
<ul>
<li>Sich initialisieren. Es ist sinnvoll, dass das Werkzeug mit einem beispielhaften
Datenmodell inititalisiert wird.</li>
<li>Das interne Datenmodell in die Kontext-Datei schreiben </li>
<li>Die zugehörige Aufgabe generieren. Siehe auch <code>contextFileToExerciseFile</code> in der <a href="./modules/helpers.html">Dokumentation der Hilfsfunktionen</a>.</li>
</ul>
<p>Andernfalls kann das zuvor gespeichertes Datenmodell aus der Kontext-Datei 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.</p>
<pre><code><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">contextFile</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">(); </span><span class="hl-6">// Datei, mit der der Editor gestartet wurde</span><br/><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">contextFileContent</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">fs</span><span class="hl-0">.</span><span class="hl-7">readFile</span><span class="hl-0">(</span><span class="hl-1">contextFile</span><span class="hl-0">);</span><br/><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">contextFileIsEmpty</span><span class="hl-0"> = </span><span class="hl-1">contextFileContent</span><span class="hl-0"> === </span><span class="hl-2">&quot;&quot;</span><span class="hl-0">;</span><br/><br/><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">exerciseFile</span><span class="hl-0"> = </span><span class="hl-7">contextFileToExerciseFile</span><span class="hl-0">(</span><span class="hl-1">contextFile</span><span class="hl-0">);</span><br/><br/><span class="hl-3">if</span><span class="hl-0">(</span><span class="hl-1">contextFileIsEmpty</span><span class="hl-0">){</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: Datenmodell anlegen (Idealerweise mit beispielhaften Inhalt)</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: Datenmodell in Kontext-Datei schreiben, z.B. mit JSON.stringify(...)</span><br/><span class="hl-0">    </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">dataModelAsString</span><span class="hl-0"> = </span><span class="hl-5">JSON</span><span class="hl-0">.</span><span class="hl-7">stringify</span><span class="hl-0">({</span><span class="hl-6">/* TODO */</span><span class="hl-0">});</span><br/><span class="hl-0">    </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">fs</span><span class="hl-0">.</span><span class="hl-7">writeFile</span><span class="hl-0">(</span><span class="hl-1">contextFile</span><span class="hl-0">, </span><span class="hl-1">dataModelAsString</span><span class="hl-0">);</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: Aufgabe generieren</span><br/><span class="hl-0">    </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">generatedExerciseCode</span><span class="hl-0"> = </span><span class="hl-2">&quot;startup { print(&#39;Hallo Welt!&#39;) }&quot;</span><span class="hl-0">; </span><br/><span class="hl-0">    </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">fs</span><span class="hl-0">.</span><span class="hl-7">writeFile</span><span class="hl-0">(</span><span class="hl-1">exerciseFile</span><span class="hl-0">, </span><span class="hl-1">generatedExerciseCode</span><span class="hl-0">);</span><br/><span class="hl-0">}</span><span class="hl-3">else</span><span class="hl-0">{</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: Datenmodell laden, z.B. mit JSON.parse(contextFileContent)</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: (Aufgabe neu generieren)</span><br/><span class="hl-0">    </span><span class="hl-6">// TODO: init application based on your data model</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">// Aufgabe anzeigen</span><br/><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">navigator</span><span class="hl-0">.</span><span class="hl-7">navigateToExercise</span><span class="hl-0">(</span><span class="hl-1">exerciseFile</span><span class="hl-0">);</span>
</code><button>Copy</button></pre>
<p>Jedes Werkzeug sollte über eine &quot;Speichern&quot;-Funktion verfügen, mit der der Benutzer:</p>
<ul>
<li>Das interne Datenmodell in die Kontext-Datei speichert (sodass es später wieder geladen werden kann)</li>
<li>Die zugehörige Aufgabe wird generiert und die Vorschau zu dieser navigiert</li>
</ul>
<a id="md:hilfsunktionen-für-werkzeug-entwickler-ide-tool-utils" class="tsd-anchor"></a><h3><a href="#md:hilfsunktionen-für-werkzeug-entwickler-ide-tool-utils">Hilfsunktionen für Werkzeug-Entwickler (IDE-Tool-Utils)</a></h3><p><a href="./modules/helpers.html">Dokumentation der Hilfsfunktionen</a></p>
<p>Dieses Paket beinhaltet zusätzlich Hilfsfunktionen (auch IDE-Tool-Utils genannt) für
Werkzeug-Entwickler. Diese sind aktuell in <code>TypeScript</code> implementiert, liegen jedoch
auch als ES6-JavaScript und Standalone-Bibliothek zur direkten Verwendung vor. Keine der
Hilfsfunktionen wird durch die <code>ide-lib.js</code> ausgeliefert!</p>
<blockquote>
<p><strong>Hinweis</strong>: Hilfunktionen ohne Build-System bereitzustellen gestaltet sich schwierig und
bringt große Nachteile mit sich:</p>
<ul>
<li>Als reine JavaScript-Datei - platziert auf einem Server - ist die die
Offline-Fähigkeit (siehe <code>Helpers.enableOfflineUsageIfNecessary()</code>) von Werkzeugen nicht
gewährleistet, da eine Internetverbindung zum Zugriff notwendig ist.</li>
<li>Werden Dateien oder Code-Ausschnitte von Hand kopiert, muss der Werkzeug-Entwickler sich
um das Aktualisieren kümmern.</li>
</ul>
<p>Als Kompromiss werden die Hilsfunktionen als reine JavaScript-Datei (ES5 oder ES6)
bereitgestellt, sodass diese auch ohne TypeScript nutzbar sind.</p>
</blockquote>
<p>Die IDE-Tool-Utils können wie folgt genutzt werden</p>
<a id="md:build-system-mit-typescript-empfohlen" class="tsd-anchor"></a><h4><a href="#md:build-system-mit-typescript-empfohlen">Build-System mit TypeScript (empfohlen)</a></h4><p>Das Paket <code>@mathcaoch/ide-api</code> muss als npm-Abhängikeit in der <code>package.json</code> des Werkzeugs
angegeben werden. Fortan können die in TypeScript implementierten Hilfsfunktionen - aber
auch die Schnittstellen der IDE-API - komfortabel verwendet werden. Eine bestmögliche Typsicherheit ist
gegeben.</p>
<pre><code><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0">, </span><span class="hl-1">MathCoach</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-0">;</span><br/><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">enableOfflineUsageIfNecessary</span><span class="hl-0">()</span><br/><span class="hl-0">...</span><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">file</span><span class="hl-0">:</span><span class="hl-8">MathCoach</span><span class="hl-0">.</span><span class="hl-8">File</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">()</span>
</code><button>Copy</button></pre>
<a id="md:build-system-es6-javascript" class="tsd-anchor"></a><h4><a href="#md:build-system-es6-javascript">Build-System ES6+ JavaScript</a></h4><p>Das Paket <code>@mathcaoch/ide-api</code> muss als npm-Abhängikeit in der <code>package.json</code> des Werkzeugs
angegeben werden. Fortan können die in ES6 JavaScript vorliegenden Hilfsfunktionen
verwendet werden. Die Entwicklungsumgebung sollte grundlegende Hilfen (Autovervollständigung und eingebettete Dokumentation) anbieten.</p>
<pre><code><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api/dist/es6&quot;</span><br/><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">enableOfflineUsageIfNecessary</span><span class="hl-0">();</span><br/><span class="hl-0">...</span><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">file</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">();</span>
</code><button>Copy</button></pre>
<a id="md:standalone" class="tsd-anchor"></a><h4><a href="#md:standalone">Standalone</a></h4><p>Die Hilfsfunktionen liegen als eigenständige Bibliothek vor ( siehe
<code>./dist/lib/mathcoach-ide-tool-utils.js</code>). Diese muss händisch kopiert, in das Werkzeug
eingebunden und mit ihm ausgeliefert werden. Über die globale Variable <code>MC_IDE_TOOL_UTILS</code>
können die Hilfsfunktionen angesprochen werden. Die verwendete Entwicklungsumgebung kann
in der Regel nur wenig Unterstütztung anbieten (siehe auch <em>Typdefinition auch ohne Build-System nutzen</em>).</p>
<pre><code><span class="hl-6">// tool.html</span><br/><span class="hl-0">&lt;</span><span class="hl-1">script</span><span class="hl-0"> </span><span class="hl-1">src</span><span class="hl-0">=</span><span class="hl-2">&quot;/mathcoach/ui/ide/ide-lib.js&quot;</span><span class="hl-0">/&gt; </span><br/><span class="hl-0">&lt;</span><span class="hl-1">script</span><span class="hl-0"> </span><span class="hl-1">src</span><span class="hl-0">=</span><span class="hl-2">&quot;mathcoach-ide-tool-utils.js&quot;</span><span class="hl-0">/&gt; </span><br/><span class="hl-0">&lt;</span><span class="hl-1">script</span><span class="hl-0"> </span><span class="hl-1">src</span><span class="hl-0">=</span><span class="hl-2">&quot;tool.js&quot;</span><span class="hl-0">/&gt; </span><br/><br/><span class="hl-6">// tool.js</span><br/><span class="hl-4">const</span><span class="hl-0"> { </span><span class="hl-5">Helpers</span><span class="hl-0"> } = </span><span class="hl-5">MC_IDE_TOOL_UTILS</span><span class="hl-0">;</span><br/><span class="hl-1">Helpers</span><span class="hl-0">.</span><span class="hl-7">enableOfflineUsageIfNecessary</span><span class="hl-0">();</span><br/><span class="hl-0">...</span><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">file</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">();</span>
</code><button>Copy</button></pre>
<a id="md:beispiele" class="tsd-anchor"></a><h3><a href="#md:beispiele">Beispiele</a></h3><p>Im Verzeichnis <code>./examples/</code> finden sich Beispiele für externe Werkzeuge.</p>
<a id="md:entwicklung-kleinerer-werkzeuge" class="tsd-anchor"></a><h3><a href="#md:entwicklung-kleinerer-werkzeuge">Entwicklung kleinerer Werkzeuge</a></h3><p>Für kleiner Werkzeuge bietet es sich an im www-Verzeichnis zu entwickeln  (z.B.
<code>myTool/tool.html</code> und <code>myTool/tool.js</code>). Die MathCoach-IDE stellt Autovervollständigung beim
Editieren der <code>tool.js</code>-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.</p>
<p><img src="media/usage_tool_developer.gif" alt="Demo"></p>
<p><em>Über einen Deklarations-Eintrag in der Datei <code>ide-settings.json</code> kann ein Werkzeug (lokal) in
die IDE integriert werden. Der Benutzer kann über das Kontext-Menü Dateien, die mit dem Werkzeug
geöffnet werden können, anlegen. Wird im WWW-Teil des Dateisystems entwickelt, bietet die IDE
grundlegende Unterstütztung beim Editieren von JavaScript-Dateien</em></p>
<a id="md:entwicklung-größerer-werkzeuge" class="tsd-anchor"></a><h3><a href="#md:entwicklung-größerer-werkzeuge">Entwicklung größerer Werkzeuge</a></h3><p>Für größere Werkzeuge sollten etablierte Entwicklungswerkzeuge verwendet werden, beispielsweise:</p>
<ul>
<li><a href="https://nodejs.org/en/">npm</a> um externe Bibliotheken (u.A. dieses Paket) einzubinden</li>
<li><a href="https://webpack.js.org/">webpack</a> oder <a href="https://parceljs.org/">Parcel</a> als Build-System um den Quellcode des Werkzeuges zu &quot;bündeln&quot;</li>
<li><a href="https://www.typescriptlang.org/">TypeScript</a> zum typsischeren Programmieren (und/oder Dateien zu ES6 oder ES5 konformen JavaScript umzuformen)</li>
<li><a href="https://git-scm.com/">Git</a> zur Versionierung des Quellcodes</li>
<li><a href="https://code.visualstudio.com/">Visual Studio Code</a> als Entwicklungsumgebung</li>
<li>Unit und End-To-End Tests</li>
</ul>
<p>Das &quot;gebündelte&quot; Werkzeug muss nach dem Build-Prozess in das WWW-Verzeichnis kopiert und ebenfalls
lokal in die IDE integriert werden, siehe weiter unten.</p>
<a id="md:mathcoach-api-als-npm-package-einbinden" class="tsd-anchor"></a><h4><a href="#md:mathcoach-api-als-npm-package-einbinden">MathCoach-API als npm-Package einbinden</a></h4><p>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. Außerdem wird es
möglich die angebotenen <a href="./modules/helpers.html">Hilfsfunktionen</a> zu einzubinden. Hierzu muss
die <code>package.json</code> des Werkzeug-Projektes wie folgt ergänzt werden:</p>
<pre><code><span class="hl-0">{</span><br/><span class="hl-0">    ...</span><br/><span class="hl-0">    </span><span class="hl-2">&quot;devDependencies&quot;</span><span class="hl-0">: {</span><br/><span class="hl-0">        </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;git+https://bayes.htwsaar.de/gitblit/r/mathcoach/mathcoach-ide-api.git&quot;</span><br/><span class="hl-0">    },</span><br/><span class="hl-0">    ...</span><br/><span class="hl-0">}</span>
</code><button>Copy</button></pre>
<p>Der Git-Repo URL kann man eine Versionsnummer anhängen (z.B. <code>&quot;.../mathcoach/mathcoach-ide-api.git#3.0.0&quot;</code>
für Version <code>3.0.0</code>), sodass die API, falls notwendig, versioniert <a href="https://semver.org/lang/de/">(Semantic Versioning)</a> werden kann. Verfügbare Versionen sind Git-Tags und können in der Weboberfläche des Git-Repositories
oder über die Konsole (<code>git tag --list</code>) eingesehen werden. </p>
<p>Nun können Hilfsfunktionen (in TypeScript) wie folgt eingebunden werden.  </p>
<pre><code><span class="hl-3">import</span><span class="hl-0"> { </span><span class="hl-1">Helpers</span><span class="hl-0"> } </span><span class="hl-3">from</span><span class="hl-0"> </span><span class="hl-2">&quot;@mathcoach/ide-api&quot;</span><span class="hl-0">;</span>
</code><button>Copy</button></pre>
<p>Die Typedefinition sollte automatisch verfügbar sein, sodass der Umgang mit der
IDE API (Einstiegspunkt ist die globale Variable <code>MC</code>) durch eine Entwicklungsumgebung
wie Visual Studio Code unterstützt wird. Falls nicht, muss man die Typdefinition händisch
einbinden (siehe <em>Typdefinition auch ohne Build-System nutzen</em>).</p>
<a id="md:typdefinition-auch-ohne-build-system-nutzen" class="tsd-anchor"></a><h4><a href="#md:typdefinition-auch-ohne-build-system-nutzen">Typdefinition auch ohne Build-System nutzen</a></h4><p>Beim Arbeiten mit Visual Studio Code kann man auch ohne Einsatz weiterer Entwicklungswerkzeuge
und Build-Systeme von der Typdefinition der IDE API profitieren. Hierzu muss ein spezielles
Kommentar (Triple-Slash Directive) an den Anfang der JavaScript-Datei platziert
werden (<code>path</code> falls nötig anpassen): </p>
<pre><code><span class="hl-6">/// </span><span class="hl-9">&lt;</span><span class="hl-10">reference</span><span class="hl-6"> </span><span class="hl-11">path</span><span class="hl-0">=</span><span class="hl-2">&quot;../node_modules/@mathcoach/ide-api/dist/es6/MathCoach.d.ts&quot;</span><span class="hl-9">/&gt;</span>
</code><button>Copy</button></pre>
<p>Dies sorgt dafür, dass Visual Studio Code Autovervollständigung samt Dokumentation der
IDE API anbieten kann. Sollte es bei Verwendung von TypeScript notwendig sein, kann man eine
Datei wie <code>global.d.ts</code> anlegen und die Triple-Slash Directive dort einmalig hinterlegen.</p>
<a id="md:zertifikat-problem-beheben" class="tsd-anchor"></a><h4><a href="#md:zertifikat-problem-beheben">Zertifikat-Problem beheben</a></h4><p>Falls es Probleme mit dem HTW Zertifikat gibt, muss das Zertifikat von Newton ggf. von
Hand hinzugefügt werden. Nur so kann npm auf das Git-Repository zugreifen und den
Inhalt automatisch herunterladen.</p>
<pre><code><span class="hl-1">cd</span><span class="hl-0"> /</span><span class="hl-1">usr</span><span class="hl-0">/</span><span class="hl-1">local</span><span class="hl-0">/</span><span class="hl-1">share</span><span class="hl-0">/</span><span class="hl-1">ca</span><span class="hl-0">-</span><span class="hl-1">certificates</span><span class="hl-0">/</span><br/><span class="hl-1">sudo</span><span class="hl-0"> </span><span class="hl-1">mkdir</span><span class="hl-0"> </span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><br/><br/><span class="hl-1">sudo</span><span class="hl-0"> </span><span class="hl-1">cp</span><span class="hl-0"> </span><span class="hl-1">path</span><span class="hl-0">/</span><span class="hl-1">to</span><span class="hl-0">/</span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><span class="hl-0">.</span><span class="hl-1">crt</span><span class="hl-0"> /</span><span class="hl-1">usr</span><span class="hl-0">/</span><span class="hl-1">local</span><span class="hl-0">/</span><span class="hl-1">share</span><span class="hl-0">/</span><span class="hl-1">ca</span><span class="hl-0">-</span><span class="hl-1">certificates</span><span class="hl-0">/</span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><span class="hl-0">/</span><br/><br/><span class="hl-1">sudo</span><span class="hl-0"> </span><span class="hl-1">chown</span><span class="hl-0"> </span><span class="hl-12">755</span><span class="hl-0"> /</span><span class="hl-1">usr</span><span class="hl-0">/</span><span class="hl-1">local</span><span class="hl-0">/</span><span class="hl-1">share</span><span class="hl-0">/</span><span class="hl-1">ca</span><span class="hl-0">-</span><span class="hl-1">certificates</span><span class="hl-0">/</span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><br/><span class="hl-1">sudo</span><span class="hl-0"> </span><span class="hl-1">chown</span><span class="hl-0"> </span><span class="hl-12">644</span><span class="hl-0"> /</span><span class="hl-1">usr</span><span class="hl-0">/</span><span class="hl-1">local</span><span class="hl-0">/</span><span class="hl-1">share</span><span class="hl-0">/</span><span class="hl-1">ca</span><span class="hl-0">-</span><span class="hl-1">certificates</span><span class="hl-0">/</span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><span class="hl-0">/</span><span class="hl-1">newton</span><span class="hl-0">.</span><span class="hl-1">htwsaar</span><span class="hl-0">.</span><span class="hl-1">de</span><span class="hl-0">.</span><span class="hl-1">crt</span><br/><span class="hl-1">sudo</span><span class="hl-0"> </span><span class="hl-1">update</span><span class="hl-0">-</span><span class="hl-1">ca</span><span class="hl-0">-</span><span class="hl-1">certificates</span>
</code><button>Copy</button></pre>
<a id="md:werkzeuge-in-die-ide-integrieren" class="tsd-anchor"></a><h2><a href="#md:werkzeuge-in-die-ide-integrieren">Werkzeuge in die IDE integrieren</a></h2><p>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 und erstellt werden (siehe Kontext-Menüs im IDE-Explorer).
Eine Freischaltung des Werkzeugs für alle Autoren erfolgt durch einen Administrator.</p>
<a id="md:lokal-nur-für-den-entwickler-des-werkzeugs" class="tsd-anchor"></a><h3><a href="#md:lokal-nur-für-den-entwickler-des-werkzeugs">Lokal (Nur für den Entwickler des Werkzeugs)</a></h3><p>In der IDE muss eine Werkzeug-Deklaration angelegt werden, dazu muss die Einstellungsdatei <code>ide-settings.json</code>
editiert werden. Damit Änderungen an der Einstellungsdatei wirksam werden, muss die MathCoach IDE neu
geladen (Seite neu laden) werden.</p>
<pre><code><span class="hl-0">{</span><br/><span class="hl-0">    ...</span><br/><span class="hl-0">    </span><span class="hl-2">&quot;editor.external.declarations&quot;</span><span class="hl-0">: [</span><br/><span class="hl-0">        {</span><br/><span class="hl-0">            </span><span class="hl-2">&quot;displayName&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;Dummy&quot;</span><span class="hl-0">,</span><br/><span class="hl-0">            </span><span class="hl-2">&quot;entry&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;/mathcoach/www/YOURNAME/tool.html&quot;</span><span class="hl-0">,</span><br/><span class="hl-0">            </span><span class="hl-2">&quot;description&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;...&quot;</span><span class="hl-0">,</span><br/><span class="hl-0">            </span><span class="hl-2">&quot;developer&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;...&quot;</span><span class="hl-0">,</span><br/><span class="hl-0">            </span><span class="hl-2">&quot;extension&quot;</span><span class="hl-1">:</span><span class="hl-0"> </span><span class="hl-2">&quot;fib.json&quot;</span><br/><span class="hl-0">        }</span><br/><span class="hl-0">        ...</span><br/><span class="hl-0">    ],</span><br/><span class="hl-0">    ...</span><br/><span class="hl-0">}</span>
</code><button>Copy</button></pre>
<table>
<thead>
<tr>
<th>Schlüssel</th>
<th>Beschreibung</th>
<th>Beispiel</th>
</tr>
</thead>
<tbody><tr>
<td><code>&quot;description&quot;</code></td>
<td>Eine kurze Beschreibung</td>
<td><code>&quot;Editor zum Erstellen von Fill-In-Blank Aufgaben.&quot;</code></td>
</tr>
<tr>
<td><code>&quot;developer&quot;</code></td>
<td>Namen der Werkzeug-Entwickler</td>
<td><code>&quot;John Doe, Jane Doe&quot;</code></td>
</tr>
<tr>
<td><code>&quot;displayName&quot;</code></td>
<td>Der Name des Werkzeugs</td>
<td><code>&quot;Fill-In-Blank-Editor&quot;</code></td>
</tr>
<tr>
<td><code>&quot;documentation&quot;</code></td>
<td><strong>Optional</strong>. Link zur Werkzeug-Dokumentation. Diese muss sich auf dem selben Server wie die IDE befinden.</td>
<td><code>&quot;/mathcoach/www/YOURNAME/fib/docs.html&quot;</code></td>
</tr>
<tr>
<td><code>&quot;entry&quot;</code></td>
<td>Der Einstiegspunkt für das Werkzeugs. Dieser muss sich auf dem selben Server wie die IDE befinden.</td>
<td><code>&quot;/mathcoach/www/YOURNAME/fib/tool.html&quot;</code></td>
</tr>
<tr>
<td><code>&quot;extension&quot;</code></td>
<td>Dateien anhand der Datei-Erweiterung mit dem Werkzeug verknüpfen. Hier sollte etwas Eindeutiges gewählt werden.</td>
<td><code>&quot;fib.json&quot;</code> für Dateien wie <code>someExercise.fib.json</code></td>
</tr>
</tbody></table>
<a id="md:global-für-alle-autoren" class="tsd-anchor"></a><h3><a href="#md:global-für-alle-autoren">Global (Für alle Autoren)</a></h3><ul>
<li>Das Werkzeug samt Werkzeug-Deklaration muss an einen Administrator übergeben werden</li>
<li>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.</li>
</ul>
<a id="md:infos-zu-diesem-repository" class="tsd-anchor"></a><h2><a href="#md:infos-zu-diesem-repository">Infos zu diesem Repository</a></h2><pre><code><span class="hl-0">.</span><br/><span class="hl-0">├── </span><span class="hl-5">CHANGELOG</span><span class="hl-0">.</span><span class="hl-1">md</span><span class="hl-0">                </span><span class="hl-6">// Dokumentation von Änderungen der API</span><br/><span class="hl-0">├── </span><span class="hl-1">examples</span><span class="hl-0">                    </span><span class="hl-6">// Beispiele</span><br/><span class="hl-0">│   ├── ...</span><br/><span class="hl-0">│   └── ...</span><br/><span class="hl-0">├── </span><span class="hl-1">media</span><span class="hl-0">                       </span><span class="hl-6">// Grafiken</span><br/><span class="hl-0">│   └── ...</span><br/><span class="hl-0">├── </span><span class="hl-1">test</span><span class="hl-0">                        </span><span class="hl-6">// Unit Tests</span><br/><span class="hl-0">│   └── ...</span><br/><span class="hl-0">├── </span><span class="hl-1">src</span><span class="hl-0">                         </span><span class="hl-6">// Hilfsfunktionen für Werkzeugentwickler</span><br/><span class="hl-0">│   ├── </span><span class="hl-1">index</span><span class="hl-0">.</span><span class="hl-1">ts</span><span class="hl-0">                </span><span class="hl-6">// Einstiegspunkt</span><br/><span class="hl-0">│   └── ...</span><br/><span class="hl-0">├── </span><span class="hl-1">mathcoach</span><span class="hl-0">-</span><span class="hl-1">api</span><span class="hl-0">.</span><span class="hl-1">d</span><span class="hl-0">.</span><span class="hl-1">ts</span><span class="hl-0">          </span><span class="hl-6">// Typ-Definition der API</span><br/><span class="hl-0">├── </span><span class="hl-1">package</span><span class="hl-0">.</span><span class="hl-1">json</span><br/><span class="hl-0">├── </span><span class="hl-3">package</span><span class="hl-0">-</span><span class="hl-1">lock</span><span class="hl-0">.</span><span class="hl-1">json</span><br/><span class="hl-0">├── </span><span class="hl-5">README</span><span class="hl-0">.</span><span class="hl-1">md</span><br/><span class="hl-0">└── </span><span class="hl-1">tsconfig</span><span class="hl-0">.</span><span class="hl-1">json</span>
</code><button>Copy</button></pre>
<a id="md:dokumentation-erzeugen" class="tsd-anchor"></a><h4><a href="#md:dokumentation-erzeugen">Dokumentation erzeugen</a></h4><pre><code><span class="hl-1">npm</span><span class="hl-0"> </span><span class="hl-1">install</span><span class="hl-0"> &amp;&amp; </span><span class="hl-1">npm</span><span class="hl-0"> </span><span class="hl-1">run</span><span class="hl-0"> </span><span class="hl-1">build</span>
</code><button>Copy</button></pre>
<a id="md:release-einer-neuen-version" class="tsd-anchor"></a><h4><a href="#md:release-einer-neuen-version">Release einer neuen Version</a></h4><ul>
<li>Version der API in der <code>package.json</code> eintragen</li>
<li>Version in der Überschrift der <code>README.md</code> eintragen</li>
<li>Beispiele und Changelog aktualisieren</li>
<li>IDE-Projekt prüfen:  <code>package.json</code>, <code>ide-lib.js</code>, ...</li>
<li>Final: Release Tag setzen <code>git tag -a VERSION -m &#39;...&#39;</code> und pushen</li>
</ul>
</div></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li>
<ul>
<li><a href="#md:mathcoach-ide-api-version-400"><span>Math<wbr/>Coach IDE API <wbr/>Version 4.0.0</span></a></li>
<li>
<ul>
<li><a href="#md:idee"><span>Idee</span></a></li>
<li><a href="#md:entwicklung-externer-werkzeuge"><span>Entwicklung externer <wbr/>Werkzeuge</span></a></li>
<li>
<ul>
<li><a href="#md:empfohlenes-vorgehen"><span>Empfohlenes <wbr/>Vorgehen</span></a></li>
<li><a href="#md:hilfsunktionen-für-werkzeug-entwickler-ide-tool-utils"><span>Hilfsunktionen für <wbr/>Werkzeug-<wbr/>Entwickler (IDE-<wbr/>Tool-<wbr/>Utils)</span></a></li>
<li>
<ul>
<li><a href="#md:build-system-mit-typescript-empfohlen"><span>Build-<wbr/>System mit <wbr/>Type<wbr/>Script (empfohlen)</span></a></li>
<li><a href="#md:build-system-es6-javascript"><span>Build-<wbr/>System ES6+ <wbr/>Java<wbr/>Script</span></a></li>
<li><a href="#md:standalone"><span>Standalone</span></a></li></ul></li>
<li><a href="#md:beispiele"><span>Beispiele</span></a></li>
<li><a href="#md:entwicklung-kleinerer-werkzeuge"><span>Entwicklung kleinerer <wbr/>Werkzeuge</span></a></li>
<li><a href="#md:entwicklung-größerer-werkzeuge"><span>Entwicklung größerer <wbr/>Werkzeuge</span></a></li>
<li>
<ul>
<li><a href="#md:mathcoach-api-als-npm-package-einbinden"><span>Math<wbr/>Coach-<wbr/>API als npm-<wbr/>Package einbinden</span></a></li>
<li><a href="#md:typdefinition-auch-ohne-build-system-nutzen"><span>Typdefinition auch ohne <wbr/>Build-<wbr/>System nutzen</span></a></li>
<li><a href="#md:zertifikat-problem-beheben"><span>Zertifikat-<wbr/>Problem beheben</span></a></li></ul></li></ul></li>
<li><a href="#md:werkzeuge-in-die-ide-integrieren"><span>Werkzeuge in die IDE integrieren</span></a></li>
<li>
<ul>
<li><a href="#md:lokal-nur-für-den-entwickler-des-werkzeugs"><span>Lokal (<wbr/>Nur für den <wbr/>Entwickler des <wbr/>Werkzeugs)</span></a></li>
<li><a href="#md:global-für-alle-autoren"><span>Global (<wbr/>Für alle <wbr/>Autoren)</span></a></li></ul></li>
<li><a href="#md:infos-zu-diesem-repository"><span>Infos zu diesem <wbr/>Repository</span></a></li>
<li>
<ul>
<li><a href="#md:dokumentation-erzeugen"><span>Dokumentation erzeugen</span></a></li>
<li>
<ul>
<li><a href="#md:release-einer-neuen-version"><span>Release einer neuen <wbr/>Version</span></a></li></ul></li></ul></li></ul></li></ul></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/MathCoach.Api.html
New file
@@ -0,0 +1,121 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Api | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/MathCoach.html">MathCoach</a></li>
<li><a href="MathCoach.Api.html">Api</a></li></ul>
<h1>Interface Api</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Als Einstiegspunkt dient das interface <code>MathCoach.Api</code> - eine Implementierung dieser Schnittstelle
wird von der IDE (siehe <code>ide-lib.js</code>) bereitgestellt und kann über die globale Variable
<code>MC</code> zugegriffen werden. </p>
<p>Beispiel:</p>
<pre><code><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">isReady</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">isReady</span><span class="hl-0">(); </span><span class="hl-6">// true oder false</span>
</code><button>Copy</button></pre>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">Api</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:36</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Properties</h3>
<div class="tsd-index-list"><a href="MathCoach.Api.html#ide" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-1024-path"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)" id="icon-1024-text"></path></svg><span>ide</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Methods</h3>
<div class="tsd-index-list"><a href="MathCoach.Api.html#isReady" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-2048-path"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)" id="icon-2048-text"></path></svg><span>is<wbr/>Ready</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Properties</h2>
<section class="tsd-panel tsd-member"><a id="ide" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagReadonly">Readonly</code> <span>ide</span><a href="#ide" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">ide</span><span class="tsd-signature-symbol">:</span> <a href="MathCoach.IdeApi.html" class="tsd-signature-type tsd-kind-interface">IdeApi</a></div>
<div class="tsd-comment tsd-typography"><p>Die Schnittstelle zur Entwicklungsumgebung (IDE) von MathCoach.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:40</li></ul></aside></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="isReady" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>is<wbr/>Ready</span><a href="#isReady" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="isReady.isReady-1"><span class="tsd-kind-call-signature">is<wbr/>Ready</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span><a href="#isReady.isReady-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Prüft, ob die API einsatzbereit ist. Dies sollte einmalig, beim Start des Werkzeugs,
geprüft werden. Dabei bedeutet der Rückgabewert <code>true</code>, dass das Werkzeug durch
die IDE gestartet wurde und die Kommunikation möglich ist. <code>false</code> bedeutet, dass
das Werkzeug nicht durch die IDE gestartet wurde. </p>
<p>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. </p>
<p>Anwendungsbeispiel (Prüft zusätzlich, ob die globale <code>MC</code>-Variable verfügbar ist - also
die <code>ide-lib.js</code> korrekt eingebunden und geladen wurde):</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">isReady</span><span class="hl-0"> = (</span><span class="hl-4">typeof</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0"> !== </span><span class="hl-2">&quot;undefined&quot;</span><span class="hl-0">) ? </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-7">isReady</span><span class="hl-0">() : </span><span class="hl-4">false</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-3">if</span><span class="hl-0">(</span><span class="hl-1">isReady</span><span class="hl-0">){</span><br/><span class="hl-0">     </span><span class="hl-6">// MathCoach-API is ready to use!</span><br/><span class="hl-0"> }</span><span class="hl-3">else</span><span class="hl-0">{</span><br/><span class="hl-0">     </span><span class="hl-6">// MathCoach-API is not ready...</span><br/><span class="hl-0"> }</span>
</code><button>Copy</button></pre>
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:64</li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#ide" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>ide</span></a></li>
<li><a href="#isReady" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>is<wbr/>Ready</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="MathCoach.Api.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/MathCoach.File.html
New file
@@ -0,0 +1,112 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>File | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/MathCoach.html">MathCoach</a></li>
<li><a href="MathCoach.File.html">File</a></li></ul>
<h1>Interface File</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Eindeutiger Verweis auf eine Datei. </p>
<p>Anwendungsbeispiel:</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">user</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getUserName</span><span class="hl-0">(); </span><span class="hl-6">// oder von einem anderen File-Objekt abgfragen...</span><br/><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">file</span><span class="hl-0"> = { </span><span class="hl-1">owner:</span><span class="hl-0"> </span><span class="hl-1">user</span><span class="hl-0">, </span><span class="hl-1">part:</span><span class="hl-0"> </span><span class="hl-2">&quot;vfs&quot;</span><span class="hl-0">, </span><span class="hl-1">path:</span><span class="hl-2">&quot;/myExercise.groovy&quot;</span><span class="hl-0"> }</span>
</code><button>Copy</button></pre>
<p>Siehe auch: <code>MC.ide.getContextFile()</code></p>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">File</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:171</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Properties</h3>
<div class="tsd-index-list"><a href="MathCoach.File.html#owner" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-1024-path"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)" id="icon-1024-text"></path></svg><span>owner</span></a>
<a href="MathCoach.File.html#part" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>part</span></a>
<a href="MathCoach.File.html#path" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>path</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Properties</h2>
<section class="tsd-panel tsd-member"><a id="owner" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>owner</span><a href="#owner" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">owner</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>Name des Besitzers. Hinweis: Der Besitzter kann vom angemeldeten
Benutzer abweichen (z.B. wenn das Teilen von Inhalten zukünftig unterstützt wird)</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:176</li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="part" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>part</span><a href="#part" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">part</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;vfs&quot;</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">&quot;www&quot;</span></div>
<div class="tsd-comment tsd-typography"><p>Liegt die Datei im öffentlichen (www) oder verborgenen (vfs) Dateisystem?</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:180</li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="path" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>path</span><a href="#path" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">path</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
<div class="tsd-comment tsd-typography"><p>Absoluter Pfad zur Datei. Mmuss immer mit einem Slash beginnen.</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:184</li></ul></aside></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#owner" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>owner</span></a></li>
<li><a href="#part" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>part</span></a></li>
<li><a href="#path" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>path</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="MathCoach.File.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/MathCoach.FileSystemApi.html
New file
@@ -0,0 +1,128 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>FileSystemApi | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/MathCoach.html">MathCoach</a></li>
<li><a href="MathCoach.FileSystemApi.html">FileSystemApi</a></li></ul>
<h1>Interface FileSystemApi</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Schnittstelle zum Dateisystem</p>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">FileSystemApi</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:133</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Methods</h3>
<div class="tsd-index-list"><a href="MathCoach.FileSystemApi.html#readFile" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-2048-path"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)" id="icon-2048-text"></path></svg><span>read<wbr/>File</span></a>
<a href="MathCoach.FileSystemApi.html#writeFile" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>write<wbr/>File</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="readFile" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>read<wbr/>File</span><a href="#readFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="readFile.readFile-1"><span class="tsd-kind-call-signature">read<wbr/>File</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">file</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span><a href="#readFile.readFile-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Liest eine Datei und gibt den Textinhalt zurück. </p>
<p>Anwendungsbeispiel: Lesen der Datei, mit dem das Werkzeug gestartet wurde</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">file</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">text</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">fs</span><span class="hl-0">.</span><span class="hl-7">readFile</span><span class="hl-0">(</span><span class="hl-1">file</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">// do something with the text, e.g. JSON.parse(text)</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">file</span>: <a href="MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h5>
<div class="tsd-comment tsd-typography"><p>Verweis auf die Datei</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:145</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="writeFile" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>write<wbr/>File</span><a href="#writeFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="writeFile.writeFile-1"><span class="tsd-kind-call-signature">write<wbr/>File</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">file</span>, <span class="tsd-kind-parameter">text</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#writeFile.writeFile-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Schreibt Text in eine Datei. </p>
<p>Anwendungsbeispiel: Schreiben der Datei, mit dem das Werkzeug gestartet wurde</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">file</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">(); </span><span class="hl-6">// some file reference</span><br/><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">text</span><span class="hl-0"> = </span><span class="hl-2">&quot;some text&quot;</span><span class="hl-0">; </span><span class="hl-6">// or JSON.stringify(yourDataContainer)</span><br/><span class="hl-0"> </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">fs</span><span class="hl-0">.</span><span class="hl-7">writeFile</span><span class="hl-0">(</span><span class="hl-1">file</span><span class="hl-0">,</span><span class="hl-1">text</span><span class="hl-0">);</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">file</span>: <a href="MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h5>
<div class="tsd-comment tsd-typography"><p>Verweis auf die Datei</p>
</div></li>
<li>
<h5><span class="tsd-kind-parameter">text</span>: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography"><p>Der neue Inhalt der Datei</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:158</li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#readFile" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>read<wbr/>File</span></a></li>
<li><a href="#writeFile" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>write<wbr/>File</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="MathCoach.FileSystemApi.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/MathCoach.IdeApi.html
New file
@@ -0,0 +1,133 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>IdeApi | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/MathCoach.html">MathCoach</a></li>
<li><a href="MathCoach.IdeApi.html">IdeApi</a></li></ul>
<h1>Interface IdeApi</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Schnittstelle zur IDE von MathCoach</p>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">IdeApi</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:71</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Properties</h3>
<div class="tsd-index-list"><a href="MathCoach.IdeApi.html#fs" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-1024-path"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)" id="icon-1024-text"></path></svg><span>fs</span></a>
<a href="MathCoach.IdeApi.html#navigator" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>navigator</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Methods</h3>
<div class="tsd-index-list"><a href="MathCoach.IdeApi.html#getContextFile" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-2048-path"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)" id="icon-2048-text"></path></svg><span>get<wbr/>Context<wbr/>File</span></a>
<a href="MathCoach.IdeApi.html#getUserName" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>get<wbr/>User<wbr/>Name</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Properties</h2>
<section class="tsd-panel tsd-member"><a id="fs" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagReadonly">Readonly</code> <span>fs</span><a href="#fs" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">fs</span><span class="tsd-signature-symbol">:</span> <a href="MathCoach.FileSystemApi.html" class="tsd-signature-type tsd-kind-interface">FileSystemApi</a></div>
<div class="tsd-comment tsd-typography"><p>Einstiegspunkt der Dateisystem-Schnittstelle (z.B. um Dateien zu lesen und zu schreiben)</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:93</li></ul></aside></section>
<section class="tsd-panel tsd-member"><a id="navigator" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagReadonly">Readonly</code> <span>navigator</span><a href="#navigator" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<div class="tsd-signature"><span class="tsd-kind-property">navigator</span><span class="tsd-signature-symbol">:</span> <a href="MathCoach.NavigatorApi.html" class="tsd-signature-type tsd-kind-interface">NavigatorApi</a></div>
<div class="tsd-comment tsd-typography"><p>Einstiegspunkt der Vorschau-Schnittstelle (z.B. um generierte Aufgaben zu starten)</p>
</div><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:97</li></ul></aside></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="getContextFile" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>get<wbr/>Context<wbr/>File</span><a href="#getContextFile" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="getContextFile.getContextFile-1"><span class="tsd-kind-call-signature">get<wbr/>Context<wbr/>File</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a><span class="tsd-signature-symbol">&gt;</span><a href="#getContextFile.getContextFile-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Gibt den Verweis auf die Datei zurück, mit der das Entwicklerwerkzeug gestartet wurde. </p>
<p>Anwendungsbeispiel:</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">file</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getContextFile</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> { </span><span class="hl-1">owner</span><span class="hl-0">, </span><span class="hl-1">path</span><span class="hl-0">, </span><span class="hl-1">part</span><span class="hl-0"> } = </span><span class="hl-1">file</span><span class="hl-0">;</span>
</code><button>Copy</button></pre>
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:89</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="getUserName" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>get<wbr/>User<wbr/>Name</span><a href="#getUserName" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="getUserName.getUserName-1"><span class="tsd-kind-call-signature">get<wbr/>User<wbr/>Name</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span><a href="#getUserName.getUserName-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Gibt den Namen des aktuellen Benutzers zurück, der mit dem Werkzeug arbeitet.</p>
<p>Anwendungsbeisipiel:</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">user</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">getUserName</span><span class="hl-0">();</span>
</code><button>Copy</button></pre>
</div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:80</li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#fs" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>fs</span></a></li>
<li><a href="#navigator" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-1024-path"></use><use href="#icon-1024-text"></use></svg><span>navigator</span></a></li>
<li><a href="#getContextFile" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>get<wbr/>Context<wbr/>File</span></a></li>
<li><a href="#getUserName" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>get<wbr/>User<wbr/>Name</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="MathCoach.IdeApi.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/MathCoach.NavigatorApi.html
New file
@@ -0,0 +1,132 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>NavigatorApi | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="../modules/MathCoach.html">MathCoach</a></li>
<li><a href="MathCoach.NavigatorApi.html">NavigatorApi</a></li></ul>
<h1>Interface NavigatorApi</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Schnittstelle zur Navigation der Vorschau</p>
</div></section>
<section class="tsd-panel tsd-hierarchy">
<h4>Hierarchy</h4>
<ul class="tsd-hierarchy">
<li><span class="target">NavigatorApi</span></li></ul></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:102</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
<h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex=0><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></svg> Index</h5></summary>
<div class="tsd-accordion-details">
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Methods</h3>
<div class="tsd-index-list"><a href="MathCoach.NavigatorApi.html#navigateTo" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12" id="icon-2048-path"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)" id="icon-2048-text"></path></svg><span>navigate<wbr/>To</span></a>
<a href="MathCoach.NavigatorApi.html#navigateToExercise" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>navigate<wbr/>To<wbr/>Exercise</span></a>
</div></section></div></details></section></section>
<section class="tsd-panel-group tsd-member-group">
<h2>Methods</h2>
<section class="tsd-panel tsd-member"><a id="navigateTo" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>navigate<wbr/>To</span><a href="#navigateTo" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none" id="icon-anchor-a"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" id="icon-anchor-b"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" id="icon-anchor-c"></path></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="navigateTo.navigateTo-1"><span class="tsd-kind-call-signature">navigate<wbr/>To</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">link</span>, <span class="tsd-kind-parameter">forceOpen</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#navigateTo.navigateTo-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Navigiert die Vorschau zu einem Link.</p>
<p>Anwendungsbeispiel:</p>
<pre><code><span class="hl-0"> </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">navigator</span><span class="hl-0">.</span><span class="hl-7">navigateTo</span><span class="hl-0">(</span><span class="hl-2">&quot;/mathcoach/www/yourName/readme.html&quot;</span><span class="hl-0">, </span><span class="hl-4">true</span><span class="hl-0">)</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">link</span>: <span class="tsd-signature-type">string</span></h5>
<div class="tsd-comment tsd-typography"><p>Web URL (z.B. zu einer Datei im WWW-Verzeichnis oder einer MathCoach-Aufgabe)</p>
</div></li>
<li>
<h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">forceOpen</span>: <span class="tsd-signature-type">boolean</span></h5>
<div class="tsd-comment tsd-typography"><p><code>true</code> um das Anzeigen der Vorschau zu erzwingen, <code>false</code> um nur bei bereits geöffneter Vorschau zu navigieren.</p>
</div></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:114</li></ul></aside></li></ul></section>
<section class="tsd-panel tsd-member"><a id="navigateToExercise" class="tsd-anchor"></a>
<h3 class="tsd-anchor-link"><span>navigate<wbr/>To<wbr/>Exercise</span><a href="#navigateToExercise" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></h3>
<ul class="tsd-signatures">
<li class="tsd-signature tsd-anchor-link" id="navigateToExercise.navigateToExercise-1"><span class="tsd-kind-call-signature">navigate<wbr/>To<wbr/>Exercise</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">file</span>, <span class="tsd-kind-parameter">forceOpen</span><span class="tsd-signature-symbol">?</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span><a href="#navigateToExercise.navigateToExercise-1" aria-label="Permalink" class="tsd-anchor-icon"><svg class="icon icon-tabler icon-tabler-link" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><use href="#icon-anchor-a"></use><use href="#icon-anchor-b"></use><use href="#icon-anchor-c"></use></svg></a></li>
<li class="tsd-description">
<div class="tsd-comment tsd-typography"><p>Navigiert die Vorschau zu einer MathCoach-Aufgabe.
Hinweis: Die Datei muss im <code>vfs</code>-Teil des Dateisystems liegen und
eine ausführbare MathCoach-Aufgabe sein (z.B. eine groovy-Datei).</p>
<p>Anwendungsbeispiel:</p>
<pre><code><span class="hl-0"> </span><span class="hl-4">let</span><span class="hl-0"> </span><span class="hl-1">file</span><span class="hl-0"> = { </span><span class="hl-1">part:</span><span class="hl-0"> </span><span class="hl-2">&quot;vfs&quot;</span><span class="hl-0">, </span><span class="hl-1">owner:</span><span class="hl-2">&quot;yourName&quot;</span><span class="hl-0">, </span><span class="hl-1">path:</span><span class="hl-0"> </span><span class="hl-2">&quot;/myExercise.groovy&quot;</span><span class="hl-0"> }</span><br/><span class="hl-0"> </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-1">navigator</span><span class="hl-0">.</span><span class="hl-7">navigateToExercise</span><span class="hl-0">(</span><span class="hl-1">file</span><span class="hl-0">)</span>
</code><button>Copy</button></pre>
</div>
<div class="tsd-parameters">
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameter-list">
<li>
<h5><span class="tsd-kind-parameter">file</span>: <a href="MathCoach.File.html" class="tsd-signature-type tsd-kind-interface">File</a></h5>
<div class="tsd-comment tsd-typography"><p>Datei-Verweis</p>
</div></li>
<li>
<h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">forceOpen</span>: <span class="tsd-signature-type">boolean</span></h5></li></ul></div>
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:128</li></ul></aside></li></ul></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div>
<details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>On This Page</h3></summary>
<div class="tsd-accordion-details">
<ul>
<li><a href="#navigateTo" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>navigate<wbr/>To</span></a></li>
<li><a href="#navigateToExercise" class=""><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-2048-path"></use><use href="#icon-2048-text"></use></svg><span>navigate<wbr/>To<wbr/>Exercise</span></a></li></ul></div></details></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="../modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="MathCoach.NavigatorApi.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/interfaces/mathcoach.api.html
File was deleted
docs/interfaces/mathcoach.file.html
File was deleted
docs/interfaces/mathcoach.filesystemapi.html
File was deleted
docs/interfaces/mathcoach.ideapi.html
File was deleted
docs/interfaces/mathcoach.navigatorapi.html
File was deleted
docs/modules.html
New file
@@ -0,0 +1,61 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base=".">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<h2>@mathcoach/ide-api</h2></div>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<h3 class="tsd-index-heading uppercase">Index</h3>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Namespaces</h3>
<div class="tsd-index-list"><a href="modules/Helpers.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>Helpers</span></a>
<a href="modules/MathCoach.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a>
</div></section></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="modules/Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="modules/MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/modules/Helpers.html
New file
@@ -0,0 +1,76 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Helpers | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="Helpers.html">Helpers</a></li></ul>
<h1>Namespace Helpers</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Hilfsfunktionen für Werkzeug-Entwickler. Diese werden nicht durch die <code>ide-lib.js</code>
ausgeliefert!</p>
</div></section><aside class="tsd-sources">
<ul>
<li>Defined in Helpers.ts:7</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<h3 class="tsd-index-heading uppercase">Index</h3>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Classes</h3>
<div class="tsd-index-list"><a href="../classes/Helpers.InMemoryStorage.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a>
</div></section>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Functions</h3>
<div class="tsd-index-list"><a href="../functions/Helpers.contextFileToExerciseFile.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a>
<a href="../functions/Helpers.createStorageBasedApi.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a>
<a href="../functions/Helpers.enableOfflineUsageIfNecessary.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a>
<a href="../functions/Helpers.isFile.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a>
</div></section></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" open data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="Helpers.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-128-path"></use><use href="#icon-128-text"></use></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="MathCoach.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/modules/MathCoach.html
New file
@@ -0,0 +1,79 @@
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>MathCoach | @mathcoach/ide-api</title><meta name="description" content="Documentation for @mathcoach/ide-api"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/search.js" id="tsd-search-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar">
<div class="tsd-toolbar-contents container">
<div class="table-cell" id="tsd-search" data-base="..">
<div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div>
<div class="field">
<div id="tsd-toolbar-links"></div></div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">@mathcoach/ide-api</a></div>
<div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></svg></a></div></div></header>
<div class="container container-main">
<div class="col-content">
<div class="tsd-page-title">
<ul class="tsd-breadcrumb">
<li><a href="../modules.html">@mathcoach/ide-api</a></li>
<li><a href="MathCoach.html">MathCoach</a></li></ul>
<h1>Namespace MathCoach</h1></div>
<section class="tsd-panel tsd-comment">
<div class="tsd-comment tsd-typography"><p>Der MathCoach-Namensraum ist die Sammelstelle für alle öffentlichen Schnittstellen.
Somit können auch externe Module (z.B. grafische Editoren) typsicher erstellt werden.</p>
<p>Als Einstiegspunkt dient das interface <code>MathCoach.Api</code> - eine Implementierung dieser Schnittstelle
wird von der IDE (siehe <code>ide-lib.js</code>) bereitgestellt und kann über die globale Variable
<code>MC</code> zugegriffen werden. </p>
<p>Beispiel:</p>
<pre><code><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">isReady</span><span class="hl-0"> = </span><span class="hl-3">await</span><span class="hl-0"> </span><span class="hl-5">MC</span><span class="hl-0">.</span><span class="hl-1">ide</span><span class="hl-0">.</span><span class="hl-7">isReady</span><span class="hl-0">(); </span><span class="hl-6">// true oder false</span>
</code><button>Copy</button></pre>
</div></section><aside class="tsd-sources">
<ul>
<li>Defined in MathCoach.ts:24</li></ul></aside>
<section class="tsd-panel-group tsd-index-group">
<section class="tsd-panel tsd-index-panel">
<h3 class="tsd-index-heading uppercase">Index</h3>
<section class="tsd-index-section">
<h3 class="tsd-index-heading">Interfaces</h3>
<div class="tsd-index-list"><a href="../interfaces/MathCoach.Api.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-256-path"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)" id="icon-256-text"></path></svg><span>Api</span></a>
<a href="../interfaces/MathCoach.File.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a>
<a href="../interfaces/MathCoach.FileSystemApi.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a>
<a href="../interfaces/MathCoach.IdeApi.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a>
<a href="../interfaces/MathCoach.NavigatorApi.html" class="tsd-index-link"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a>
</div></section></section></section></div>
<div class="col-sidebar">
<div class="page-menu">
<div class="tsd-navigation settings">
<details class="tsd-index-accordion"><summary class="tsd-accordion-summary">
<h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg>Settings</h3></summary>
<div class="tsd-accordion-details">
<div class="tsd-filter-visibility">
<h4 class="uppercase">Member Visibility</h4><form>
<ul id="tsd-filter-options">
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li>
<li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div>
<div class="tsd-theme-toggle">
<h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div>
<div class="site-menu">
<nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-4-path"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)" id="icon-4-text"></path></svg><span>@mathcoach/ide-<wbr/>api</span></a>
<ul class="tsd-small-nested-navigation">
<li>
<details class="tsd-index-accordion" data-key="Helpers"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="Helpers.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Helpers</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../classes/Helpers.InMemoryStorage.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-128-path"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)" id="icon-128-text"></path></svg><span>In<wbr/>Memory<wbr/>Storage</span></a></li>
<li><a href="../functions/Helpers.contextFileToExerciseFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6" id="icon-64-path"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)" id="icon-64-text"></path></svg><span>context<wbr/>File<wbr/>To<wbr/>Exercise<wbr/>File</span></a></li>
<li><a href="../functions/Helpers.createStorageBasedApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>create<wbr/>Storage<wbr/>Based<wbr/>Api</span></a></li>
<li><a href="../functions/Helpers.enableOfflineUsageIfNecessary.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>enable<wbr/>Offline<wbr/>Usage<wbr/>If<wbr/>Necessary</span></a></li>
<li><a href="../functions/Helpers.isFile.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-64-path"></use><use href="#icon-64-text"></use></svg><span>is<wbr/>File</span></a></li></ul></div></details></li>
<li>
<details class="tsd-index-accordion" open data-key="MathCoach"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></svg><a href="MathCoach.html" class="current"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-4-path"></use><use href="#icon-4-text"></use></svg><span>Math<wbr/>Coach</span></a></summary>
<div class="tsd-accordion-details">
<ul class="tsd-nested-navigation">
<li><a href="../interfaces/MathCoach.Api.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Api</span></a></li>
<li><a href="../interfaces/MathCoach.File.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File</span></a></li>
<li><a href="../interfaces/MathCoach.FileSystemApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>File<wbr/>System<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.IdeApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Ide<wbr/>Api</span></a></li>
<li><a href="../interfaces/MathCoach.NavigatorApi.html"><svg class="tsd-kind-icon" width="24" height="24" viewBox="0 0 24 24"><use href="#icon-256-path"></use><use href="#icon-256-text"></use></svg><span>Navigator<wbr/>Api</span></a></li></ul></div></details></li></ul></nav></div></div></div>
<div class="tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div>
<div class="overlay"></div></body></html>
docs/modules/__global.html
File was deleted
docs/modules/helpers.html
File was deleted
docs/modules/mathcoach.html
File was deleted
examples/standalone-usage.html
New file
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MC IDE Example</title>
</head>
<body>
<script src="mathcoach-ide-tool-utils.js"></script>
<script>
    console.log(window.MC_IDE_TOOL_UTILS);
</script>
</body>
</html>
invalide-npm-cache.sh
old mode 100644 new mode 100755
package-lock.json
Diff too large
package.json
@@ -13,20 +13,19 @@
    "ava": "3.5.0",
    "marked": "0.8.0",
    "nyc": "15.0.0",
    "parcel": "1.12.4",
    "rimraf": "3.0.2",
    "parcel": "1.12.3",
    "ts-node": "8.7.0",
    "tsconfig-paths": "3.9.0",
    "typedoc": "0.17.1",
    "typescript": "3.8.3"
    "tsconfig-paths": "4.2.0",
    "typedoc": "0.24.7",
    "typescript": "5.0.4"
  },
  "scripts": {
    "clean": "npx rimraf dist/ && rimraf docs/",
    "clean": "rm -rf dist docs .cache",
    "test": "npx nyc ava",
    "build": "npm run clean  && npm run build-docs && npm run build-utils-es6 && npm run build-utils-lib",
    "build-docs": "npx typedoc src/ --out docs/ --mode file --hideGenerator --theme minimal --includeDeclarations --excludeExternals --media ./media",
    "build-docs": "npx typedoc src/ --out docs/ --media ./media",
    "build-utils-es6": "npx tsc --project tsconfig-es6.json",
    "build-utils-lib": "npx parcel build src/index.ts --target node --bundle-node-modules --global MC_IDE_TOOL_UTILS --out-dir dist/lib --out-file mathcoach-ide-tool-utils.js --public-url ./"
    "build-utils-lib": "npx parcel build src/index.ts --target node --bundle-node-modules --global MC_IDE_TOOL_UTILS --out-dir dist/lib --out-file mathcoach-ide-tool-utils.js --public-url ./ ; cp examples/standalone-usage.html dist/lib"
  },
  "author": "jsteuer",
  "license": "",