aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Main.tsx2
-rw-r--r--src/util/Scripting.ts30
2 files changed, 29 insertions, 3 deletions
diff --git a/src/Main.tsx b/src/Main.tsx
index 431a5db96..78e1a8af6 100644
--- a/src/Main.tsx
+++ b/src/Main.tsx
@@ -13,6 +13,7 @@ import { ListField } from './fields/ListField';
import { DocumentView } from './views/nodes/DocumentView';
import { ContextMenu } from './views/ContextMenu';
import { TextField } from './fields/TextField';
+import { CompileScript } from './util/Scripting';
configure({
enforceActions: "observed"
@@ -45,6 +46,7 @@ document.addEventListener("pointerdown", action(function (e: PointerEvent) {
let doc3 = Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", {
x: 450, y: 500, title: "cat 1"
});
+ console.log(CompileScript("function testFunc(doc: Document): any {return doc.GetNumberField(KeyStore.X, 0)} ")());
const schemaDocs = Array.from(Array(5).keys()).map(v => Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", {
x: 50 + 100 * v, y: 50, width: 100, height: 100, title: "cat" + v
}));
diff --git a/src/util/Scripting.ts b/src/util/Scripting.ts
index bf312918e..ac7d1550a 100644
--- a/src/util/Scripting.ts
+++ b/src/util/Scripting.ts
@@ -1,7 +1,32 @@
import * as ts from "typescript"
import { Opt, Field } from "../fields/Field";
-export class ExecutableScript extends Function {
+export interface ExecutableScript {
+ (): any;
+
+ compiled: boolean;
+}
+
+function ExecScript(script: string, diagnostics: Opt<ts.Diagnostic[]>): ExecutableScript {
+ const compiled = !(diagnostics && diagnostics.some(diag => diag.category == ts.DiagnosticCategory.Error));
+
+ let func: () => Opt<Field>;
+ if (compiled) {
+ func = function (): Opt<Field> {
+ let window = undefined;
+ let document = undefined;
+ let retVal = eval.call(undefined, script);
+
+ return retVal;
+ };
+ } else {
+ func = () => undefined;
+ }
+
+ return Object.assign(func,
+ {
+ compiled
+ });
}
export function CompileScript(script: string): ExecutableScript {
@@ -10,7 +35,6 @@ export function CompileScript(script: string): ExecutableScript {
module: ts.ModuleKind.CommonJS
}
})
- console.log(result.outputText);
- return () => { };
+ return ExecScript(result.outputText, result.diagnostics);
} \ No newline at end of file