aboutsummaryrefslogtreecommitdiff
path: root/src/fields
diff options
context:
space:
mode:
Diffstat (limited to 'src/fields')
-rw-r--r--src/fields/AudioField.ts4
-rw-r--r--src/fields/BooleanField.ts4
-rw-r--r--src/fields/Document.ts21
-rw-r--r--src/fields/DocumentReference.ts4
-rw-r--r--src/fields/Field.ts4
-rw-r--r--src/fields/HtmlField.ts4
-rw-r--r--src/fields/IconFIeld.ts25
-rw-r--r--src/fields/ImageField.ts4
-rw-r--r--src/fields/InkField.ts4
-rw-r--r--src/fields/Key.ts4
-rw-r--r--src/fields/KeyStore.ts10
-rw-r--r--src/fields/ListField.ts4
-rw-r--r--src/fields/NumberField.ts4
-rw-r--r--src/fields/PDFField.ts4
-rw-r--r--src/fields/RichTextField.ts4
-rw-r--r--src/fields/ScriptField.ts67
-rw-r--r--src/fields/TextField.ts4
-rw-r--r--src/fields/TupleField.ts4
-rw-r--r--src/fields/VideoField.ts4
-rw-r--r--src/fields/WebField.ts4
20 files changed, 127 insertions, 60 deletions
diff --git a/src/fields/AudioField.ts b/src/fields/AudioField.ts
index 996d2556d..87e47a715 100644
--- a/src/fields/AudioField.ts
+++ b/src/fields/AudioField.ts
@@ -20,11 +20,11 @@ export class AudioField extends BasicField<URL> {
return new AudioField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Audio,
data: this.Data.href,
- _id: this.Id
+ id: this.Id
};
}
diff --git a/src/fields/BooleanField.ts b/src/fields/BooleanField.ts
index d319b4021..d49bfe82b 100644
--- a/src/fields/BooleanField.ts
+++ b/src/fields/BooleanField.ts
@@ -15,11 +15,11 @@ export class BooleanField extends BasicField<boolean> {
return new BooleanField(this.Data);
}
- ToJson(): { type: Types; data: boolean; _id: string } {
+ ToJson() {
return {
type: Types.Boolean,
data: this.Data,
- _id: this.Id
+ id: this.Id
};
}
}
diff --git a/src/fields/Document.ts b/src/fields/Document.ts
index 60eaf5b51..7cf784f0e 100644
--- a/src/fields/Document.ts
+++ b/src/fields/Document.ts
@@ -26,6 +26,12 @@ export class Document extends Field {
Server.UpdateField(this);
}
}
+ static FromJson(data: any, id: string, save: boolean): Document {
+ let doc = new Document(id, save);
+ let fields = data as [string, string][];
+ fields.forEach(pair => doc._proxies.set(pair[0], pair[1]));
+ return doc;
+ }
UpdateFromServer(data: [string, string][]) {
for (const key in data) {
@@ -41,14 +47,14 @@ export class Document extends Field {
@computed
public get Title(): string {
let title = this.Get(KeyStore.Title, true);
- if (title) {
+ if (title || title === FieldWaiting) {
if (title !== FieldWaiting && title instanceof TextField) {
return title.Data;
}
else return "-waiting-";
}
let parTitle = this.GetT(KeyStore.Title, TextField);
- if (parTitle) {
+ if (parTitle || parTitle === FieldWaiting) {
if (parTitle !== FieldWaiting) return parTitle.Data + ".alias";
else return "-waiting-.alias";
}
@@ -410,18 +416,15 @@ export class Document extends Field {
return copy;
}
- ToJson(): { type: Types; data: [string, string][]; _id: string } {
+ ToJson() {
let fields: [string, string][] = [];
- this._proxies.forEach((field, key) => {
- if (field) {
- fields.push([key, field]);
- }
- });
+ this._proxies.forEach((field, key) =>
+ field && fields.push([key, field]));
return {
type: Types.Document,
data: fields,
- _id: this.Id
+ id: this.Id
};
}
}
diff --git a/src/fields/DocumentReference.ts b/src/fields/DocumentReference.ts
index 6c0c1ef82..303754177 100644
--- a/src/fields/DocumentReference.ts
+++ b/src/fields/DocumentReference.ts
@@ -47,11 +47,11 @@ export class DocumentReference extends Field {
return "";
}
- ToJson(): { type: Types, data: FieldId, _id: string } {
+ ToJson() {
return {
type: Types.DocumentReference,
data: this.document.Id,
- _id: this.Id
+ id: this.Id
};
}
} \ No newline at end of file
diff --git a/src/fields/Field.ts b/src/fields/Field.ts
index d9db23b9e..3b3e95c2b 100644
--- a/src/fields/Field.ts
+++ b/src/fields/Field.ts
@@ -1,6 +1,6 @@
import { Utils } from "../Utils";
-import { Types } from "../server/Message";
+import { Types, Transferable } from "../server/Message";
import { computed } from "mobx";
export function Cast<T extends Field>(field: FieldValue<Field>, ctor: { new(): T }): Opt<T> {
@@ -65,5 +65,5 @@ export abstract class Field {
abstract Copy(): Field;
- abstract ToJson(): { _id: string, type: Types, data: any };
+ abstract ToJson(): Transferable;
} \ No newline at end of file
diff --git a/src/fields/HtmlField.ts b/src/fields/HtmlField.ts
index 65665cf7a..a1d880070 100644
--- a/src/fields/HtmlField.ts
+++ b/src/fields/HtmlField.ts
@@ -15,11 +15,11 @@ export class HtmlField extends BasicField<string> {
return new HtmlField(this.Data);
}
- ToJson(): { _id: string; type: Types; data: string; } {
+ ToJson() {
return {
type: Types.Html,
data: this.Data,
- _id: this.Id,
+ id: this.Id,
};
}
} \ No newline at end of file
diff --git a/src/fields/IconFIeld.ts b/src/fields/IconFIeld.ts
new file mode 100644
index 000000000..a6694cc49
--- /dev/null
+++ b/src/fields/IconFIeld.ts
@@ -0,0 +1,25 @@
+import { BasicField } from "./BasicField";
+import { FieldId } from "./Field";
+import { Types } from "../server/Message";
+
+export class IconField extends BasicField<string> {
+ constructor(data: string = "", id?: FieldId, save: boolean = true) {
+ super(data, save, id);
+ }
+
+ ToScriptString(): string {
+ return `new IconField("${this.Data}")`;
+ }
+
+ Copy() {
+ return new IconField(this.Data);
+ }
+
+ ToJson() {
+ return {
+ type: Types.Icon,
+ data: this.Data,
+ id: this.Id
+ };
+ }
+} \ No newline at end of file
diff --git a/src/fields/ImageField.ts b/src/fields/ImageField.ts
index dd843026f..bce20f242 100644
--- a/src/fields/ImageField.ts
+++ b/src/fields/ImageField.ts
@@ -19,11 +19,11 @@ export class ImageField extends BasicField<URL> {
return new ImageField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Image,
data: this.Data.href,
- _id: this.Id
+ id: this.Id
};
}
} \ No newline at end of file
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts
index ab706ee30..2eacd7d0c 100644
--- a/src/fields/InkField.ts
+++ b/src/fields/InkField.ts
@@ -31,11 +31,11 @@ export class InkField extends BasicField<StrokeMap> {
return new InkField(this.Data);
}
- ToJson(): { _id: string; type: Types; data: any; } {
+ ToJson() {
return {
type: Types.Ink,
data: this.Data,
- _id: this.Id,
+ id: this.Id,
};
}
diff --git a/src/fields/Key.ts b/src/fields/Key.ts
index c7f806b88..57e2dadf0 100644
--- a/src/fields/Key.ts
+++ b/src/fields/Key.ts
@@ -40,11 +40,11 @@ export class Key extends Field {
return name;
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Key,
data: this.name,
- _id: this.Id
+ id: this.Id
};
}
} \ No newline at end of file
diff --git a/src/fields/KeyStore.ts b/src/fields/KeyStore.ts
index 425408273..a347f8bcf 100644
--- a/src/fields/KeyStore.ts
+++ b/src/fields/KeyStore.ts
@@ -1,5 +1,4 @@
import { Key } from "./Key";
-import { KeyTransfer } from "../server/Message";
export namespace KeyStore {
export const Prototype = new Key("Prototype");
@@ -16,6 +15,7 @@ export namespace KeyStore {
export const Width = new Key("Width");
export const Height = new Key("Height");
export const ZIndex = new Key("ZIndex");
+ export const Zoom = new Key("Zoom");
export const Data = new Key("Data");
export const Annotations = new Key("Annotations");
export const ViewType = new Key("ViewType");
@@ -45,14 +45,16 @@ export namespace KeyStore {
export const OptionalRightCollection = new Key("OptionalRightCollection");
export const Archives = new Key("Archives");
export const Workspaces = new Key("Workspaces");
- export const Minimized = new Key("Minimized");
+ export const IsMinimized = new Key("IsMinimized");
+ export const MinimizedDoc = new Key("MinimizedDoc");
+ export const MaximizedDoc = new Key("MaximizedDoc");
export const CopyDraggedItems = new Key("CopyDraggedItems");
export const KeyList: Key[] = [Prototype, X, Y, Page, Title, Author, PanX, PanY, Scale, NativeWidth, NativeHeight,
- Width, Height, ZIndex, Data, Annotations, ViewType, Layout, BackgroundColor, BackgroundLayout, OverlayLayout, LayoutKeys,
+ Width, Height, ZIndex, Zoom, Data, Annotations, ViewType, Layout, BackgroundColor, BackgroundLayout, OverlayLayout, LayoutKeys,
LayoutFields, ColumnsKey, SchemaSplitPercentage, Caption, ActiveWorkspace, DocumentText, BrushingDocs, LinkedToDocs, LinkedFromDocs,
LinkDescription, LinkTags, Thumbnail, ThumbnailPage, CurPage, AnnotationOn, NumPages, Ink, Cursors, OptionalRightCollection,
- Archives, Workspaces, Minimized, CopyDraggedItems
+ Archives, Workspaces, IsMinimized, MinimizedDoc, MaximizedDoc, CopyDraggedItems
];
export function KeyLookup(keyid: string) {
for (const key of KeyList) {
diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts
index 8311e737b..e24099126 100644
--- a/src/fields/ListField.ts
+++ b/src/fields/ListField.ts
@@ -176,14 +176,14 @@ export class ListField<T extends Field> extends BasicField<T[]> {
this._proxies = data.fields;
this._scriptIds = data.scripts;
}
- ToJson(): { type: Types, data: { fields: string[], scripts: string[] }, _id: string } {
+ ToJson() {
return {
type: Types.List,
data: {
fields: this._proxies,
scripts: this._scriptIds,
},
- _id: this.Id
+ id: this.Id
};
}
diff --git a/src/fields/NumberField.ts b/src/fields/NumberField.ts
index 45b920e31..7eea360c0 100644
--- a/src/fields/NumberField.ts
+++ b/src/fields/NumberField.ts
@@ -15,9 +15,9 @@ export class NumberField extends BasicField<number> {
return new NumberField(this.Data);
}
- ToJson(): { _id: string, type: Types, data: number } {
+ ToJson() {
return {
- _id: this.Id,
+ id: this.Id,
type: Types.Number,
data: this.Data
};
diff --git a/src/fields/PDFField.ts b/src/fields/PDFField.ts
index 65e179894..718a1a4c0 100644
--- a/src/fields/PDFField.ts
+++ b/src/fields/PDFField.ts
@@ -22,11 +22,11 @@ export class PDFField extends BasicField<URL> {
return `new PDFField("${this.Data}")`;
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.PDF,
data: this.Data.href,
- _id: this.Id
+ id: this.Id
};
}
diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts
index 6f7b3074a..f53f48ca6 100644
--- a/src/fields/RichTextField.ts
+++ b/src/fields/RichTextField.ts
@@ -15,11 +15,11 @@ export class RichTextField extends BasicField<string> {
return new RichTextField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.RichText,
data: this.Data,
- _id: this.Id
+ id: this.Id
};
}
diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts
index 24c1d9b3a..7f87be45d 100644
--- a/src/fields/ScriptField.ts
+++ b/src/fields/ScriptField.ts
@@ -2,33 +2,34 @@ import { Field, FieldId } from "./Field";
import { Types } from "../server/Message";
import { CompileScript, ScriptOptions, CompiledScript } from "../client/util/Scripting";
import { Server } from "../client/Server";
+import { Without } from "../Utils";
+
+export interface SerializableOptions extends Without<ScriptOptions, "capturedVariables"> {
+ capturedIds: { [id: string]: string };
+}
export interface ScriptData {
script: string;
- options: ScriptOptions;
+ options: SerializableOptions;
}
export class ScriptField extends Field {
- readonly script: CompiledScript;
+ private _script?: CompiledScript;
+ get script(): CompiledScript {
+ return this._script!;
+ }
+ private options?: ScriptData;
- constructor(script: CompiledScript, id?: FieldId, save: boolean = true) {
+ constructor(script?: CompiledScript, id?: FieldId, save: boolean = true) {
super(id);
- this.script = script;
+ this._script = script;
if (save) {
Server.UpdateField(this);
}
}
- static FromJson(id: string, data: ScriptData): ScriptField {
- const script = CompileScript(data.script, data.options);
- if (!script.compiled) {
- throw new Error("Can't compile script");
- }
- return new ScriptField(script, id, false);
- }
-
ToScriptString() {
return "new ScriptField(...)";
}
@@ -45,14 +46,50 @@ export class ScriptField extends Field {
throw new Error("Script fields currently can't be updated");
}
- ToJson(): { _id: string, type: Types, data: ScriptData } {
+ static FromJson(id: string, data: ScriptData): ScriptField {
+ let field = new ScriptField(undefined, id, false);
+ field.options = data;
+ return field;
+ }
+
+ init(callback: (res: Field) => any) {
+ const options = this.options!;
+ const keys = Object.keys(options.options.capturedIds);
+ Server.GetFields(keys).then(fields => {
+ let captured: { [name: string]: Field } = {};
+ keys.forEach(key => captured[options.options.capturedIds[key]] = fields[key]);
+ const opts: ScriptOptions = {
+ addReturn: options.options.addReturn,
+ params: options.options.params,
+ requiredType: options.options.requiredType,
+ capturedVariables: captured
+ };
+ const script = CompileScript(options.script, opts);
+ if (!script.compiled) {
+ throw new Error("Can't compile script");
+ }
+ this._script = script;
+ callback(this);
+ });
+ }
+
+ ToJson() {
const { options, originalScript } = this.script;
+ let capturedIds: { [id: string]: string } = {};
+ for (const capt in options.capturedVariables) {
+ capturedIds[options.capturedVariables[capt].Id] = capt;
+ }
+ const opts: SerializableOptions = {
+ ...options,
+ capturedIds
+ };
+ delete (opts as any).capturedVariables;
return {
- _id: this.Id,
+ id: this.Id,
type: Types.Script,
data: {
script: originalScript,
- options
+ options: opts,
},
};
}
diff --git a/src/fields/TextField.ts b/src/fields/TextField.ts
index 69d26f42f..ddedec9b1 100644
--- a/src/fields/TextField.ts
+++ b/src/fields/TextField.ts
@@ -15,11 +15,11 @@ export class TextField extends BasicField<string> {
return new TextField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Text,
data: this.Data,
- _id: this.Id
+ id: this.Id
};
}
} \ No newline at end of file
diff --git a/src/fields/TupleField.ts b/src/fields/TupleField.ts
index ad0f6f350..347f1fa05 100644
--- a/src/fields/TupleField.ts
+++ b/src/fields/TupleField.ts
@@ -49,11 +49,11 @@ export class TupleField<T, U> extends BasicField<[T, U]> {
return new TupleField<T, U>(this.Data);
}
- ToJson(): { type: Types, data: [T, U], _id: string } {
+ ToJson() {
return {
type: Types.Tuple,
data: this.Data,
- _id: this.Id
+ id: this.Id
};
}
} \ No newline at end of file
diff --git a/src/fields/VideoField.ts b/src/fields/VideoField.ts
index d7cd7e968..838b811b1 100644
--- a/src/fields/VideoField.ts
+++ b/src/fields/VideoField.ts
@@ -19,11 +19,11 @@ export class VideoField extends BasicField<URL> {
return new VideoField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Video,
data: this.Data.href,
- _id: this.Id
+ id: this.Id
};
}
diff --git a/src/fields/WebField.ts b/src/fields/WebField.ts
index 6023e9e6b..8b276a552 100644
--- a/src/fields/WebField.ts
+++ b/src/fields/WebField.ts
@@ -19,11 +19,11 @@ export class WebField extends BasicField<URL> {
return new WebField(this.Data);
}
- ToJson(): { type: Types, data: string, _id: string } {
+ ToJson() {
return {
type: Types.Web,
data: this.Data.href,
- _id: this.Id
+ id: this.Id
};
}