diff options
author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-05 14:51:05 -0500 |
---|---|---|
committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-05 18:48:56 -0500 |
commit | 164f7e35edae1ee037905549ecbe90584272b4d5 (patch) | |
tree | db0beed0b0a2298e8b36603ca6b066f19479dfea | |
parent | 1e3b49bc7399aa0334355cea0f766c1ea7322ff9 (diff) |
Got scripting running
-rw-r--r-- | src/Main.tsx | 89 | ||||
-rw-r--r-- | src/util/Scripting.ts | 13 |
2 files changed, 58 insertions, 44 deletions
diff --git a/src/Main.tsx b/src/Main.tsx index aae35aa36..d79909545 100644 --- a/src/Main.tsx +++ b/src/Main.tsx @@ -38,53 +38,62 @@ document.addEventListener("pointerdown", action(function (e: PointerEvent) { //runInAction(() => -{ - let doc1 = Documents.TextDocument({ title: "hello" }); - let doc2 = doc1.MakeDelegate(); - doc2.SetField(KS.X, new NumberField(150)); - doc2.SetField(KS.Y, new NumberField(20)); - 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("script: " + CompileScript("(function(doc: Document): any {return doc.GetNumberField(this.KeyStore.X, 0)})")()(doc3)); - 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 - })); - schemaDocs[0].SetFieldValue(KS.Author, "Tyler", TextField); - schemaDocs[4].SetFieldValue(KS.Author, "Bob", TextField); - schemaDocs.push(doc2); - const doc7 = Documents.SchemaDocument(schemaDocs) - const docset = [doc1, doc2, doc3, doc7]; - let doc4 = Documents.CollectionDocument(docset, { - x: 0, y: 400, title: "mini collection" - }); - let doc5 = Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", { - x: 650, y: 500, width: 600, height: 600, title: "cat 2" - }); - let docset2 = new Array<Document>(doc4, doc1, doc3); - let doc6 = Documents.CollectionDocument(docset2, { - x: 350, y: 100, width: 600, height: 600, title: "docking collection" - }); - let mainNodes = null;// mainContainer.GetFieldT(KeyStore.Data, ListField); - if (!mainNodes) { - mainNodes = new ListField<Document>(); - } - // mainNodes.Data.push(doc1); - // mainNodes.Data.push(doc2); - mainNodes.Data.push(doc4); - // mainNodes.Data.push(doc3); - mainNodes.Data.push(doc5); - // mainNodes.Data.push(doc1); - //mainNodes.Data.push(doc2); - mainNodes.Data.push(doc6); - mainContainer.SetField(KeyStore.Data, mainNodes); +//{ +let doc1 = Documents.TextDocument({ title: "hello" }); +let doc2 = doc1.MakeDelegate(); +doc2.SetField(KS.X, new NumberField(150)); +doc2.SetField(KS.Y, new NumberField(20)); +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("script: " + CompileScript("(function(doc: Document): any {return doc.GetNumberField(KeyStore.X, 0)})")()(doc3)); +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 +})); +schemaDocs[0].SetFieldValue(KS.Author, "Tyler", TextField); +schemaDocs[4].SetFieldValue(KS.Author, "Bob", TextField); +schemaDocs.push(doc2); +const doc7 = Documents.SchemaDocument(schemaDocs) +const docset = [doc1, doc2, doc3, doc7]; +let doc4 = Documents.CollectionDocument(docset, { + x: 0, y: 400, title: "mini collection" +}); +let doc5 = Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", { + x: 650, y: 500, width: 600, height: 600, title: "cat 2" +}); +let docset2 = new Array<Document>(doc4, doc1, doc3); +let doc6 = Documents.CollectionDocument(docset2, { + x: 350, y: 100, width: 600, height: 600, title: "docking collection" +}); +let mainNodes = null;// mainContainer.GetFieldT(KeyStore.Data, ListField); +if (!mainNodes) { + mainNodes = new ListField<Document>(); } +// mainNodes.Data.push(doc1); +// mainNodes.Data.push(doc2); +mainNodes.Data.push(doc4); +// mainNodes.Data.push(doc3); +mainNodes.Data.push(doc5); +// mainNodes.Data.push(doc1); +//mainNodes.Data.push(doc2); +mainNodes.Data.push(doc6); +mainContainer.SetField(KeyStore.Data, mainNodes); +//} //); +function keydown(e: React.KeyboardEvent<HTMLTextAreaElement>) { + if (e.key == "Enter" && e.ctrlKey) { + console.log(CompileScript(e.currentTarget.value)()([doc1, doc2, doc3, doc4, doc5])); + e.preventDefault(); + e.stopPropagation(); + } +} + ReactDOM.render(( <div style={{ position: "absolute", width: "100%", height: "100%" }}> <DocumentView Document={mainContainer} ContainingCollectionView={undefined} ContainingDocumentView={undefined} /> <DocumentDecorations /> <ContextMenu /> + <textarea onKeyDown={keydown} style={{ position: "absolute", left: "0px", top: "0px" }} /> </div>), document.getElementById('root'));
\ No newline at end of file diff --git a/src/util/Scripting.ts b/src/util/Scripting.ts index a6910897b..adee114b1 100644 --- a/src/util/Scripting.ts +++ b/src/util/Scripting.ts @@ -1,8 +1,10 @@ // import * as ts from "typescript" import { Opt, Field } from "../fields/Field"; -import { Document } from "../fields/Document"; -import { NumberField } from "../fields/NumberField"; -import { KeyStore } from "../fields/Key"; +import { Document as DocumentImport } from "../fields/Document"; +import { NumberField as NumberFieldImport } from "../fields/NumberField"; +import { TextField as TextFieldImport } from "../fields/TextField"; +import { RichTextField as RichTextFieldImport } from "../fields/RichTextField"; +import { KeyStore as KeyStoreImport } from "../fields/Key"; export interface ExecutableScript { (): any; @@ -16,9 +18,12 @@ function ExecScript(script: string, diagnostics: Opt<any[]>): ExecutableScript { let func: () => Opt<Field>; if (compiled) { func = function (): Opt<Field> { + let KeyStore = KeyStoreImport; + let Document = DocumentImport; + let NumberField = NumberFieldImport; + let TextField = TextFieldImport; let window = undefined; let document = undefined; - let KS = KeyStore; let retVal = eval(script); return retVal; |