diff options
| author | bobzel <zzzman@gmail.com> | 2022-03-07 12:14:39 -0500 |
|---|---|---|
| committer | bobzel <zzzman@gmail.com> | 2022-03-07 12:14:39 -0500 |
| commit | c21919a2105bd1ed4f060be149624d064739a36c (patch) | |
| tree | e88bbc4db244a08bd759e2985a31593a4b521911 /src/fields | |
| parent | 7fa30c3edd851cc42cb68063d9dbdd7335fe7370 (diff) | |
got rid of include cycles for Scripting globals to make hot updates work better.
Diffstat (limited to 'src/fields')
| -rw-r--r-- | src/fields/DateField.ts | 4 | ||||
| -rw-r--r-- | src/fields/Doc.ts | 49 | ||||
| -rw-r--r-- | src/fields/InkField.ts | 3 | ||||
| -rw-r--r-- | src/fields/List.ts | 6 | ||||
| -rw-r--r-- | src/fields/ObjectField.ts | 5 | ||||
| -rw-r--r-- | src/fields/Proxy.ts | 2 | ||||
| -rw-r--r-- | src/fields/RichTextField.ts | 2 | ||||
| -rw-r--r-- | src/fields/SchemaHeaderField.ts | 2 | ||||
| -rw-r--r-- | src/fields/ScriptField.ts | 31 | ||||
| -rw-r--r-- | src/fields/URLField.ts | 2 |
10 files changed, 55 insertions, 51 deletions
diff --git a/src/fields/DateField.ts b/src/fields/DateField.ts index 48106d978..26f51b2d3 100644 --- a/src/fields/DateField.ts +++ b/src/fields/DateField.ts @@ -2,7 +2,7 @@ import { Deserializable } from "../client/util/SerializationHelper"; import { serializable, date } from "serializr"; import { ObjectField } from "./ObjectField"; import { Copy, ToScriptString, ToString } from "./FieldSymbols"; -import { scriptingGlobal, Scripting } from "../client/util/Scripting"; +import { scriptingGlobal, ScriptingGlobals } from "../client/util/ScriptingGlobals"; @scriptingGlobal @Deserializable("date") @@ -35,6 +35,6 @@ export class DateField extends ObjectField { } } -Scripting.addGlobal(function d(...dateArgs: any[]) { +ScriptingGlobals.add(function d(...dateArgs: any[]) { return new DateField(new (Date as any)(...dateArgs)); }); diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts index 9efa092a0..1253cf9c7 100644 --- a/src/fields/Doc.ts +++ b/src/fields/Doc.ts @@ -7,7 +7,7 @@ import { DocServer } from "../client/DocServer"; import { DocumentType } from "../client/documents/DocumentTypes"; import { CurrentUserUtils } from "../client/util/CurrentUserUtils"; import { LinkManager } from "../client/util/LinkManager"; -import { Scripting, scriptingGlobal } from "../client/util/Scripting"; +import { scriptingGlobal, ScriptingGlobals } from "../client/util/ScriptingGlobals"; import { SelectionManager } from "../client/util/SelectionManager"; import { afterDocDeserialize, autoObject, Deserializable, SerializationHelper } from "../client/util/SerializationHelper"; import { UndoManager } from "../client/util/UndoManager"; @@ -25,7 +25,6 @@ import { Cast, FieldValue, NumCast, StrCast, ToConstructor } from "./Types"; import { AudioField, ImageField, MapField, PdfField, VideoField, WebField } from "./URLField"; import { deleteProperty, GetEffectiveAcl, getField, getter, inheritParentAcls, makeEditable, makeReadOnly, normalizeEmail, setter, SharingPermissions, updateFunction } from "./util"; import JSZip = require("jszip"); -import { InkField } from "./InkField"; export namespace Field { export function toKeyValueString(doc: Doc, key: string): string { @@ -1392,35 +1391,33 @@ export namespace Doc { } -Scripting.addGlobal(ObjectField); -Scripting.addGlobal("InkField", InkField); -Scripting.addGlobal(function idToDoc(id: string): any { return DocServer.GetCachedRefField(id); }); -Scripting.addGlobal(function renameAlias(doc: any) { return StrCast(Doc.GetProto(doc).title).replace(/\([0-9]*\)/, "") + `(${doc.aliasNumber})`; }); -Scripting.addGlobal(function getProto(doc: any) { return Doc.GetProto(doc); }); -Scripting.addGlobal(function getDocTemplate(doc?: any) { return Doc.getDocTemplate(doc); }); -Scripting.addGlobal(function getAlias(doc: any) { return Doc.MakeAlias(doc); }); -Scripting.addGlobal(function getCopy(doc: any, copyProto: any) { return doc.isTemplateDoc ? Doc.ApplyTemplate(doc) : Doc.MakeCopy(doc, copyProto); }); -Scripting.addGlobal(function copyDragFactory(dragFactory: Doc) { return Doc.copyDragFactory(dragFactory); }); -Scripting.addGlobal(function delegateDragFactory(dragFactory: Doc) { return Doc.delegateDragFactory(dragFactory); }); -Scripting.addGlobal(function copyField(field: any) { return Field.Copy(field); }); -Scripting.addGlobal(function docList(field: any) { return DocListCast(field); }); -Scripting.addGlobal(function setInPlace(doc: any, field: any, value: any) { return Doc.SetInPlace(doc, field, value, false); }); -Scripting.addGlobal(function sameDocs(doc1: any, doc2: any) { return Doc.AreProtosEqual(doc1, doc2); }); -Scripting.addGlobal(function deiconifyView(doc: any) { Doc.deiconifyView(doc); }); -Scripting.addGlobal(function undo() { SelectionManager.DeselectAll(); return UndoManager.Undo(); }); -Scripting.addGlobal(function redo() { SelectionManager.DeselectAll(); return UndoManager.Redo(); }); -Scripting.addGlobal(function DOC(id: string) { console.log("Can't parse a document id in a script"); return "invalid"; }); -Scripting.addGlobal(function assignDoc(doc: Doc, field: string, id: string) { return Doc.assignDocToField(doc, field, id); }); -Scripting.addGlobal(function docCast(doc: FieldResult): any { return DocCastAsync(doc); }); -Scripting.addGlobal(function activePresentationItem() { +ScriptingGlobals.add(function idToDoc(id: string): any { return DocServer.GetCachedRefField(id); }); +ScriptingGlobals.add(function renameAlias(doc: any) { return StrCast(Doc.GetProto(doc).title).replace(/\([0-9]*\)/, "") + `(${doc.aliasNumber})`; }); +ScriptingGlobals.add(function getProto(doc: any) { return Doc.GetProto(doc); }); +ScriptingGlobals.add(function getDocTemplate(doc?: any) { return Doc.getDocTemplate(doc); }); +ScriptingGlobals.add(function getAlias(doc: any) { return Doc.MakeAlias(doc); }); +ScriptingGlobals.add(function getCopy(doc: any, copyProto: any) { return doc.isTemplateDoc ? Doc.ApplyTemplate(doc) : Doc.MakeCopy(doc, copyProto); }); +ScriptingGlobals.add(function copyDragFactory(dragFactory: Doc) { return Doc.copyDragFactory(dragFactory); }); +ScriptingGlobals.add(function delegateDragFactory(dragFactory: Doc) { return Doc.delegateDragFactory(dragFactory); }); +ScriptingGlobals.add(function copyField(field: any) { return Field.Copy(field); }); +ScriptingGlobals.add(function docList(field: any) { return DocListCast(field); }); +ScriptingGlobals.add(function setInPlace(doc: any, field: any, value: any) { return Doc.SetInPlace(doc, field, value, false); }); +ScriptingGlobals.add(function sameDocs(doc1: any, doc2: any) { return Doc.AreProtosEqual(doc1, doc2); }); +ScriptingGlobals.add(function deiconifyView(doc: any) { Doc.deiconifyView(doc); }); +ScriptingGlobals.add(function undo() { SelectionManager.DeselectAll(); return UndoManager.Undo(); }); +ScriptingGlobals.add(function redo() { SelectionManager.DeselectAll(); return UndoManager.Redo(); }); +ScriptingGlobals.add(function DOC(id: string) { console.log("Can't parse a document id in a script"); return "invalid"; }); +ScriptingGlobals.add(function assignDoc(doc: Doc, field: string, id: string) { return Doc.assignDocToField(doc, field, id); }); +ScriptingGlobals.add(function docCast(doc: FieldResult): any { return DocCastAsync(doc); }); +ScriptingGlobals.add(function activePresentationItem() { const curPres = Doc.UserDoc().activePresentation as Doc; return curPres && DocListCast(curPres[Doc.LayoutFieldKey(curPres)])[NumCast(curPres._itemIndex)]; }); -Scripting.addGlobal(function selectedDocs(container: Doc, excludeCollections: boolean, prevValue: any) { +ScriptingGlobals.add(function selectedDocs(container: Doc, excludeCollections: boolean, prevValue: any) { const docs = SelectionManager.Views().map(dv => dv.props.Document). filter(d => !Doc.AreProtosEqual(d, container) && !d.annotationOn && d.type !== DocumentType.KVP && (!excludeCollections || d.type !== DocumentType.COL || !Cast(d.data, listSpec(Doc), null))); return docs.length ? new List(docs) : prevValue; }); -Scripting.addGlobal(function setDocFilter(container: Doc, key: string, value: any, modifiers: "match" | "check" | "x" | "remove") { Doc.setDocFilter(container, key, value, modifiers); }); -Scripting.addGlobal(function setDocRangeFilter(container: Doc, key: string, range: number[]) { Doc.setDocRangeFilter(container, key, range); }); +ScriptingGlobals.add(function setDocFilter(container: Doc, key: string, value: any, modifiers: "match" | "check" | "x" | "remove") { Doc.setDocFilter(container, key, value, modifiers); }); +ScriptingGlobals.add(function setDocRangeFilter(container: Doc, key: string, range: number[]) { Doc.setDocRangeFilter(container, key, range); }); diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts index 473536176..31024e805 100644 --- a/src/fields/InkField.ts +++ b/src/fields/InkField.ts @@ -1,5 +1,6 @@ import { Bezier } from "bezier-js"; import { createSimpleSchema, list, object, serializable } from "serializr"; +import { ScriptingGlobals } from "../client/util/ScriptingGlobals"; import { Deserializable } from "../client/util/SerializationHelper"; import { Copy, ToScriptString, ToString } from "./FieldSymbols"; import { ObjectField } from "./ObjectField"; @@ -88,3 +89,5 @@ export class InkField extends ObjectField { return "InkField"; } } + +ScriptingGlobals.add("InkField", InkField);
\ No newline at end of file diff --git a/src/fields/List.ts b/src/fields/List.ts index 93a8d1d60..60bf442d4 100644 --- a/src/fields/List.ts +++ b/src/fields/List.ts @@ -1,7 +1,7 @@ import { action, observable } from "mobx"; import { alias, list, serializable } from "serializr"; import { DocServer } from "../client/DocServer"; -import { Scripting } from "../client/util/Scripting"; +import { ScriptingGlobals } from "../client/util/ScriptingGlobals"; import { afterDocDeserialize, autoObject, Deserializable } from "../client/util/SerializationHelper"; import { Field } from "./Doc"; import { Copy, OnUpdate, Parent, Self, SelfProxy, ToScriptString, ToString, Update } from "./FieldSymbols"; @@ -327,8 +327,8 @@ class ListImpl<T extends Field> extends ObjectField { export type List<T extends Field> = ListImpl<T> & (T | (T extends RefField ? Promise<T> : never))[]; export const List: { new <T extends Field>(fields?: T[]): List<T> } = ListImpl as any; -Scripting.addGlobal("List", List); -Scripting.addGlobal(function compareLists(l1: any, l2: any) { +ScriptingGlobals.add("List", List); +ScriptingGlobals.add(function compareLists(l1: any, l2: any) { const L1 = Cast(l1, listSpec("string"), []); const L2 = Cast(l2, listSpec("string"), []); return !L1 && !L2 ? true : L1 && L2 && L1.length === L2.length && L2.reduce((p, v) => p && L1.includes(v), true); diff --git a/src/fields/ObjectField.ts b/src/fields/ObjectField.ts index 461e247db..daa8a7777 100644 --- a/src/fields/ObjectField.ts +++ b/src/fields/ObjectField.ts @@ -1,5 +1,6 @@ -import { Copy, OnUpdate, Parent, ToScriptString, ToString } from "./FieldSymbols"; import { RefField } from "./RefField"; +import { OnUpdate, Parent, Copy, ToScriptString, ToString } from "./FieldSymbols"; +import { ScriptingGlobals } from "../client/util/ScriptingGlobals"; export abstract class ObjectField { public [OnUpdate]?: (diff?: any) => void; @@ -15,3 +16,5 @@ export namespace ObjectField { return field?.[Copy](); } } + +ScriptingGlobals.add(ObjectField);
\ No newline at end of file diff --git a/src/fields/Proxy.ts b/src/fields/Proxy.ts index f01b502c9..2c5f38818 100644 --- a/src/fields/Proxy.ts +++ b/src/fields/Proxy.ts @@ -6,7 +6,7 @@ import { DocServer } from "../client/DocServer"; import { RefField } from "./RefField"; import { ObjectField } from "./ObjectField"; import { Id, Copy, ToScriptString, ToString } from "./FieldSymbols"; -import { scriptingGlobal } from "../client/util/Scripting"; +import { scriptingGlobal } from "../client/util/ScriptingGlobals"; import { Plugins } from "./util"; function deserializeProxy(field: any) { diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts index 64a01a478..d7edd4266 100644 --- a/src/fields/RichTextField.ts +++ b/src/fields/RichTextField.ts @@ -1,5 +1,5 @@ import { serializable } from "serializr"; -import { scriptingGlobal } from "../client/util/Scripting"; +import { scriptingGlobal } from "../client/util/ScriptingGlobals"; import { Deserializable } from "../client/util/SerializationHelper"; import { Copy, ToScriptString, ToString } from "./FieldSymbols"; import { ObjectField } from "./ObjectField"; diff --git a/src/fields/SchemaHeaderField.ts b/src/fields/SchemaHeaderField.ts index 3dc70ac19..3b02d0cfe 100644 --- a/src/fields/SchemaHeaderField.ts +++ b/src/fields/SchemaHeaderField.ts @@ -2,7 +2,7 @@ import { Deserializable } from "../client/util/SerializationHelper"; import { serializable, primitive } from "serializr"; import { ObjectField } from "./ObjectField"; import { Copy, ToScriptString, ToString, OnUpdate } from "./FieldSymbols"; -import { scriptingGlobal } from "../client/util/Scripting"; +import { scriptingGlobal } from "../client/util/ScriptingGlobals"; import { ColumnType } from "../client/views/collections/collectionSchema/CollectionSchemaView"; export const PastelSchemaPalette = new Map<string, string>([ diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts index 258348950..40ca0ce22 100644 --- a/src/fields/ScriptField.ts +++ b/src/fields/ScriptField.ts @@ -1,6 +1,7 @@ import { computedFn } from "mobx-utils"; import { createSimpleSchema, custom, map, object, primitive, PropSchema, serializable, SKIP } from "serializr"; -import { CompiledScript, CompileScript, Scripting, scriptingGlobal } from "../client/util/Scripting"; +import { CompiledScript, CompileScript } from "../client/util/Scripting"; +import { scriptingGlobal, ScriptingGlobals } from "../client/util/ScriptingGlobals"; import { autoObject, Deserializable } from "../client/util/SerializationHelper"; import { numberRange } from "../Utils"; import { Doc, Field, Opt } from "./Doc"; @@ -185,19 +186,6 @@ export class ComputedField extends ScriptField { return getField.compiled ? new ComputedField(getField, setField?.compiled ? setField : undefined) : undefined; } } -Scripting.addGlobal(function setIndexVal(list: any[], index: number, value: any) { - while (list.length <= index) list.push(undefined); - list[index] = value; -}, "sets the value at a given index of a list", "(list: any[], index: number, value: any)"); - -Scripting.addGlobal(function getIndexVal(list: any[], index: number) { - return list?.reduce((p, x, i) => (i <= index && x !== undefined) || p === undefined ? x : p, undefined as any); -}, "returns the value at a given index of a list", "(list: any[], index: number)"); - -Scripting.addGlobal(function makeScript(script: string) { - return ScriptField.MakeScript(script); -}, "returns the value at a given index of a list", "(list: any[], index: number)"); - export namespace ComputedField { let useComputed = true; export function DisableComputedFields() { @@ -226,4 +214,17 @@ export namespace ComputedField { } }); } -}
\ No newline at end of file +} + +ScriptingGlobals.add(function setIndexVal(list: any[], index: number, value: any) { + while (list.length <= index) list.push(undefined); + list[index] = value; +}, "sets the value at a given index of a list", "(list: any[], index: number, value: any)"); + +ScriptingGlobals.add(function getIndexVal(list: any[], index: number) { + return list?.reduce((p, x, i) => (i <= index && x !== undefined) || p === undefined ? x : p, undefined as any); +}, "returns the value at a given index of a list", "(list: any[], index: number)"); + +ScriptingGlobals.add(function makeScript(script: string) { + return ScriptField.MakeScript(script); +}, "returns the value at a given index of a list", "(list: any[], index: number)"); diff --git a/src/fields/URLField.ts b/src/fields/URLField.ts index 4d3776a2c..1d4bbaed0 100644 --- a/src/fields/URLField.ts +++ b/src/fields/URLField.ts @@ -2,7 +2,7 @@ import { Deserializable } from "../client/util/SerializationHelper"; import { serializable, custom } from "serializr"; import { ObjectField } from "./ObjectField"; import { ToScriptString, ToString, Copy } from "./FieldSymbols"; -import { Scripting, scriptingGlobal } from "../client/util/Scripting"; +import { scriptingGlobal } from "../client/util/ScriptingGlobals"; import { Utils } from "../Utils"; function url() { |
