diff options
Diffstat (limited to 'src/fields')
-rw-r--r-- | src/fields/Doc.ts | 5 | ||||
-rw-r--r-- | src/fields/ScriptField.ts | 32 | ||||
-rw-r--r-- | src/fields/Types.ts | 7 |
3 files changed, 38 insertions, 6 deletions
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts index 8a5491b4b..0b9a8b3fe 100644 --- a/src/fields/Doc.ts +++ b/src/fields/Doc.ts @@ -520,7 +520,8 @@ export namespace Doc { Doc.SetLayout(alias, Doc.MakeAlias(layout)); } alias.aliasOf = doc; - alias.title = ComputedField.MakeFunction(`renameAlias(this, ${Doc.GetProto(doc).aliasNumber = NumCast(Doc.GetProto(doc).aliasNumber) + 1})`); + alias.aliasNumber = Doc.GetProto(doc).aliasNumber = NumCast(Doc.GetProto(doc).aliasNumber) + 1; + alias.title = ComputedField.MakeFunction(`renameAlias(this)`); alias.author = Doc.CurrentUserEmail; Doc.AddDocToList(Doc.GetProto(doc)[DataSym], "aliases", alias); @@ -1391,7 +1392,7 @@ export namespace Doc { } Scripting.addGlobal(function idToDoc(id: string): any { return DocServer.GetCachedRefField(id); }); -Scripting.addGlobal(function renameAlias(doc: any, n: any) { return StrCast(Doc.GetProto(doc).title).replace(/\([0-9]*\)/, "") + `(${n})`; }); +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); }); diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts index bd93bf5fb..c84eb7d88 100644 --- a/src/fields/ScriptField.ts +++ b/src/fields/ScriptField.ts @@ -40,11 +40,21 @@ const scriptSchema = createSimpleSchema({ }); async function deserializeScript(script: ScriptField) { + //console.log("Scripting = " + script.script.originalScript) if (script.script.originalScript === 'copyDragFactory(this.dragFactory)') { return (script as any).script = (ScriptField.GetCopyOfDragFactory ?? (ScriptField.GetCopyOfDragFactory = ScriptField.MakeFunction('copyDragFactory(this.dragFactory)')))?.script; } + if (script.script.originalScript.startsWith("renameAlias")) { // === 'renameAlias(this)') { + return (script as any).script = (ScriptField.RenameAlias as Opt<ScriptField>)?.script; + } + if (script.script.originalScript.startsWith("copyField") && script.script.originalScript.endsWith("annotations\"")) { + return (script as any).script = ScriptField.GetAnnoCopyField(script.script.originalScript.replace(/.*\["([^"]*)/, "$1"))?.script; + } + if (script.script.originalScript.startsWith("copyField") && script.script.originalScript.endsWith("sidebar\"")) { + return (script as any).script = ScriptField.GetSidebarCopyField(script.script.originalScript.replace(/.*\["([^"]*)/, "$1"))?.script; + } if (script.script.originalScript === 'links(self)') { - return (script as any).script = (ScriptField.LinksSelf ?? (ScriptField.LinksSelf = ComputedField.MakeFunction('links(self)')))?.script; + return (script as any).script = (ScriptField.LinksSelf as Opt<ScriptField>)?.script; } if (script.script.originalScript === 'openOnRight(copyDragFactory(this.dragFactory))') { return (script as any).script = (ScriptField.OpenOnRight ?? (ScriptField.OpenOnRight = ComputedField.MakeFunction('openOnRight(copyDragFactory(this.dragFactory))')))?.script; @@ -56,7 +66,7 @@ async function deserializeScript(script: ScriptField) { return (script as any).script = (ScriptField.ConvertToButtons ?? (ScriptField.ConvertToButtons = ComputedField.MakeFunction('convertToButtons(dragData)', { dragData: "DocumentDragData" })))?.script; } if (script.script.originalScript === 'IsNoviceMode()') { - return (script as any).script = (ScriptField.NoviceMode ?? (ScriptField.NoviceMode = ComputedField.MakeFunction('IsNoviceMode()')))?.script; + return (script as any).script = (ScriptField.NoviceMode as Opt<ScriptField>)?.script; } if (script.script.originalScript === `selectMainMenu(self)`) { return (script as any).script = (ScriptField.SelectMenu ?? (ScriptField.SelectMenu = ComputedField.MakeFunction('selectMainMenu(self)')))?.script; @@ -96,11 +106,25 @@ export class ScriptField extends ObjectField { private captures?: ProxyField<Doc>; public static GetCopyOfDragFactory: Opt<ScriptField>; - public static LinksSelf: Opt<ScriptField>; + public static _annoCopyField: Map<string, Opt<ScriptField>> = new Map(); + public static GetAnnoCopyField(field: string) { + if (!this._annoCopyField.get(field)) this._annoCopyField.set(field, ComputedField.MakeFunction(`copyField(this["${field}-"+urlHash(this["${field}"]?.url?.toString())+"-annotations"`)) + return this._annoCopyField.get(field)?.[Copy]; + } + public static _sidebarCopyField: Map<string, Opt<ScriptField>> = new Map(); + public static GetSidebarCopyField(field: string) { + if (!this._sidebarCopyField.get(field)) this._sidebarCopyField.set(field, ComputedField.MakeFunction(`copyField(this["${field}-"+urlHash(this["${field}"]?.url?.toString())+"-sidebar"`)) + return this._sidebarCopyField.get(field)?.[Copy]; + } + public static _renameAlias: Opt<ScriptField>; + public static get RenameAlias() { return (this._renameAlias ?? (this._renameAlias = ComputedField.MakeFunction('renameAlias(this)'))); } + public static _linksSelf: Opt<ScriptField>; + public static get LinksSelf() { return (this._linksSelf ?? (this._linksSelf = ComputedField.MakeFunction('links(self)'))); } public static OpenOnRight: Opt<ScriptField>; public static DeiconifyView: Opt<ScriptField>; public static ConvertToButtons: Opt<ScriptField>; - public static NoviceMode: Opt<ScriptField>; + public static _noviceMode: Opt<ScriptField>; + public static get NoviceMode() { return (this._noviceMode ?? (this._noviceMode = ComputedField.MakeFunction("IsNoviceMode()"))); } public static SelectMenu: Opt<ScriptField>; constructor(script: CompiledScript, setterscript?: CompiledScript) { super(); diff --git a/src/fields/Types.ts b/src/fields/Types.ts index 3d784448d..220a30fe4 100644 --- a/src/fields/Types.ts +++ b/src/fields/Types.ts @@ -3,6 +3,7 @@ import { List } from "./List"; import { RefField } from "./RefField"; import { DateField } from "./DateField"; import { ScriptField } from "./ScriptField"; +import { URLField, WebField, ImageField } from "./URLField"; export type ToType<T extends InterfaceValue> = T extends "string" ? string : @@ -91,6 +92,12 @@ export function DateCast(field: FieldResult) { export function ScriptCast(field: FieldResult, defaultVal: ScriptField | null = null) { return Cast(field, ScriptField, defaultVal); } +export function WebCast(field: FieldResult, defaultVal: WebField | null = null) { + return Cast(field, WebField, defaultVal); +} +export function ImageCast(field: FieldResult, defaultVal: ImageField | null = null) { + return Cast(field, ImageField, defaultVal); +} type WithoutList<T extends Field> = T extends List<infer R> ? (R extends RefField ? (R | Promise<R>)[] : R[]) : T; |