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/BasicField.ts8
-rw-r--r--src/fields/Document.ts61
-rw-r--r--src/fields/DocumentReference.ts2
-rw-r--r--src/fields/Field.ts6
-rw-r--r--src/fields/HtmlField.ts2
-rw-r--r--src/fields/ImageField.ts4
-rw-r--r--src/fields/InkField.ts2
-rw-r--r--src/fields/Key.ts6
-rw-r--r--src/fields/KeyStore.ts11
-rw-r--r--src/fields/ListField.ts137
-rw-r--r--src/fields/NumberField.ts4
-rw-r--r--src/fields/PDFField.ts6
-rw-r--r--src/fields/RichTextField.ts2
-rw-r--r--src/fields/ScriptField.ts64
-rw-r--r--src/fields/TextField.ts4
-rw-r--r--src/fields/TupleField.ts6
-rw-r--r--src/fields/VideoField.ts4
-rw-r--r--src/fields/WebField.ts4
19 files changed, 230 insertions, 107 deletions
diff --git a/src/fields/AudioField.ts b/src/fields/AudioField.ts
index 8864471ae..996d2556d 100644
--- a/src/fields/AudioField.ts
+++ b/src/fields/AudioField.ts
@@ -4,7 +4,7 @@ import { Types } from "../server/Message";
export class AudioField extends BasicField<URL> {
constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) {
- super(data == undefined ? new URL("http://techslides.com/demos/samples/sample.mp3") : data, save, id);
+ super(data === undefined ? new URL("http://techslides.com/demos/samples/sample.mp3") : data, save, id);
}
toString(): string {
@@ -25,7 +25,7 @@ export class AudioField extends BasicField<URL> {
type: Types.Audio,
data: this.Data.href,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/BasicField.ts b/src/fields/BasicField.ts
index a92c4a236..17b1fc4e8 100644
--- a/src/fields/BasicField.ts
+++ b/src/fields/BasicField.ts
@@ -1,4 +1,4 @@
-import { Field, FieldId } from "./Field"
+import { Field, FieldId } from "./Field";
import { observable, computed, action } from "mobx";
import { Server } from "../client/Server";
import { UndoManager } from "../client/util/UndoManager";
@@ -9,7 +9,7 @@ export abstract class BasicField<T> extends Field {
this.data = data;
if (save) {
- Server.UpdateField(this)
+ Server.UpdateField(this);
}
}
@@ -36,7 +36,7 @@ export abstract class BasicField<T> extends Field {
UndoManager.AddEvent({
undo: () => this.Data = oldValue,
redo: () => this.Data = value
- })
+ });
Server.UpdateField(this);
}
@@ -46,7 +46,7 @@ export abstract class BasicField<T> extends Field {
@action
TrySetValue(value: any): boolean {
- if (typeof value == typeof this.data) {
+ if (typeof value === typeof this.data) {
this.Data = value;
return true;
}
diff --git a/src/fields/Document.ts b/src/fields/Document.ts
index 02004678d..60eaf5b51 100644
--- a/src/fields/Document.ts
+++ b/src/fields/Document.ts
@@ -16,10 +16,7 @@ import { HistogramField } from "../client/northstar/dash-fields/HistogramField";
export class Document extends Field {
//TODO tfs: We should probably store FieldWaiting in fields when we request it from the server so that we don't set up multiple server gets for the same document and field
- public fields: ObservableMap<
- string,
- { key: Key; field: Field }
- > = new ObservableMap();
+ public fields: ObservableMap<string, { key: Key; field: Field }> = new ObservableMap();
public _proxies: ObservableMap<string, FieldId> = new ObservableMap();
constructor(id?: string, save: boolean = true) {
@@ -37,34 +34,24 @@ export class Document extends Field {
}
}
- public Width = () => {
- return this.GetNumber(KeyStore.Width, 0);
- };
- public Height = () => {
- return this.GetNumber(
- KeyStore.Height,
- this.GetNumber(KeyStore.NativeWidth, 0)
- ? (this.GetNumber(KeyStore.NativeHeight, 0) /
- this.GetNumber(KeyStore.NativeWidth, 0)) *
- this.GetNumber(KeyStore.Width, 0)
- : 0
- );
- };
- public Scale = () => {
- return this.GetNumber(KeyStore.Scale, 1);
- };
+ public Width = () => this.GetNumber(KeyStore.Width, 0);
+ public Height = () => this.GetNumber(KeyStore.Height, this.GetNumber(KeyStore.NativeWidth, 0) ? (this.GetNumber(KeyStore.NativeHeight, 0) / this.GetNumber(KeyStore.NativeWidth, 0)) * this.GetNumber(KeyStore.Width, 0) : 0);
+ public Scale = () => this.GetNumber(KeyStore.Scale, 1);
@computed
public get Title(): string {
let title = this.Get(KeyStore.Title, true);
- if (title)
- if (title != FieldWaiting && title instanceof TextField)
+ if (title) {
+ if (title !== FieldWaiting && title instanceof TextField) {
return title.Data;
+ }
else return "-waiting-";
+ }
let parTitle = this.GetT(KeyStore.Title, TextField);
- if (parTitle)
- if (parTitle != FieldWaiting) return parTitle.Data + ".alias";
+ if (parTitle) {
+ if (parTitle !== FieldWaiting) return parTitle.Data + ".alias";
else return "-waiting-.alias";
+ }
return "-untitled-";
}
@@ -109,7 +96,7 @@ export class Document extends Field {
}
} else {
let doc: FieldValue<Document> = this;
- while (doc && doc != FieldWaiting && field != FieldWaiting) {
+ while (doc && field !== FieldWaiting) {
let curField = doc.fields.get(key.Id);
let curProxy = doc._proxies.get(key.Id);
if (!curField || (curProxy && curField.field.Id !== curProxy)) {
@@ -140,7 +127,7 @@ export class Document extends Field {
break;
}
}
- if (doc == FieldWaiting) field = FieldWaiting;
+ if (doc === FieldWaiting) field = FieldWaiting;
}
return field;
@@ -194,7 +181,7 @@ export class Document extends Field {
if (callback) {
fn(callback);
} else {
- return new Promise(res => fn(res));
+ return new Promise(fn);
}
}
@@ -240,7 +227,7 @@ export class Document extends Field {
ignoreProto: boolean = false
): FieldValue<T> {
var getfield = this.Get(key, ignoreProto);
- if (getfield != FieldWaiting) {
+ if (getfield !== FieldWaiting) {
return Cast(getfield, ctor);
}
return FieldWaiting;
@@ -252,7 +239,7 @@ export class Document extends Field {
ignoreProto: boolean = false
): T {
const field = this.GetT(key, ctor, ignoreProto);
- if (field && field != FieldWaiting) {
+ if (field && field !== FieldWaiting) {
return field;
}
const newField = new ctor();
@@ -362,7 +349,7 @@ export class Document extends Field {
GetAllPrototypes(): Document[] {
let protos: Document[] = [];
let doc: FieldValue<Document> = this;
- while (doc && doc != FieldWaiting) {
+ while (doc && doc !== FieldWaiting) {
protos.push(doc);
doc = doc.GetPrototype();
}
@@ -411,11 +398,13 @@ export class Document extends Field {
}
}
else
- if (field instanceof Document) // ... TODO bcz: should we copy documents or reference them
- copy.Set(key!, field)
- else if (field)
- copy.Set(key!, field.Copy())
- })
+ if (field instanceof Document) { // ... TODO bcz: should we copy documents or reference them
+ copy.Set(key!, field);
+ }
+ else if (field) {
+ copy.Set(key!, field.Copy());
+ }
+ });
}
});
return copy;
@@ -425,7 +414,7 @@ export class Document extends Field {
let fields: [string, string][] = [];
this._proxies.forEach((field, key) => {
if (field) {
- fields.push([key, field as string]);
+ fields.push([key, field]);
}
});
diff --git a/src/fields/DocumentReference.ts b/src/fields/DocumentReference.ts
index 9d3c209b4..6c0c1ef82 100644
--- a/src/fields/DocumentReference.ts
+++ b/src/fields/DocumentReference.ts
@@ -52,6 +52,6 @@ export class DocumentReference extends Field {
type: Types.DocumentReference,
data: this.document.Id,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/Field.ts b/src/fields/Field.ts
index d48509a47..d9db23b9e 100644
--- a/src/fields/Field.ts
+++ b/src/fields/Field.ts
@@ -12,8 +12,8 @@ export function Cast<T extends Field>(field: FieldValue<Field>, ctor: { new(): T
return undefined;
}
-export const FieldWaiting: FIELD_WAITING = "<Waiting>";
-export type FIELD_WAITING = "<Waiting>";
+export const FieldWaiting: FIELD_WAITING = null;
+export type FIELD_WAITING = null;
export type FieldId = string;
export type Opt<T> = T | undefined;
export type FieldValue<T> = Opt<T> | FIELD_WAITING;
@@ -65,5 +65,5 @@ export abstract class Field {
abstract Copy(): Field;
- abstract ToJson(): { _id: string, type: Types, data: any }
+ abstract ToJson(): { _id: string, type: Types, data: any };
} \ No newline at end of file
diff --git a/src/fields/HtmlField.ts b/src/fields/HtmlField.ts
index 7cbdf7e58..65665cf7a 100644
--- a/src/fields/HtmlField.ts
+++ b/src/fields/HtmlField.ts
@@ -20,6 +20,6 @@ export class HtmlField extends BasicField<string> {
type: Types.Html,
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 a9ece7d7b..dd843026f 100644
--- a/src/fields/ImageField.ts
+++ b/src/fields/ImageField.ts
@@ -4,7 +4,7 @@ import { Types } from "../server/Message";
export class ImageField extends BasicField<URL> {
constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) {
- super(data == undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id);
+ super(data === undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id);
}
toString(): string {
@@ -24,6 +24,6 @@ export class ImageField extends BasicField<URL> {
type: Types.Image,
data: this.Data.href,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts
index 2a4ed18e7..ab706ee30 100644
--- a/src/fields/InkField.ts
+++ b/src/fields/InkField.ts
@@ -36,7 +36,7 @@ export class InkField extends BasicField<StrokeMap> {
type: Types.Ink,
data: this.Data,
_id: this.Id,
- }
+ };
}
UpdateFromServer(data: any) {
diff --git a/src/fields/Key.ts b/src/fields/Key.ts
index 00d78d516..c7f806b88 100644
--- a/src/fields/Key.ts
+++ b/src/fields/Key.ts
@@ -1,4 +1,4 @@
-import { Field, FieldId } from "./Field"
+import { Field, FieldId } from "./Field";
import { Utils } from "../Utils";
import { observable } from "mobx";
import { Types } from "../server/Message";
@@ -16,7 +16,7 @@ export class Key extends Field {
this.name = name;
if (save) {
- Server.UpdateField(this)
+ Server.UpdateField(this);
}
}
@@ -45,6 +45,6 @@ export class Key extends Field {
type: Types.Key,
data: this.name,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/KeyStore.ts b/src/fields/KeyStore.ts
index 42dc34c51..da2d7268f 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");
@@ -55,11 +54,11 @@ export namespace KeyStore {
Archives, Workspaces, Minimized, CopyDraggedItems
];
export function KeyLookup(keyid: string) {
- for (let i = 0; i < KeyList.length; i++) {
- let keylistid = KeyList[i].Id;
- if (keylistid === keyid)
- return KeyList[i];
+ for (const key of KeyList) {
+ if (key.Id === keyid) {
+ return key;
+ }
}
- return null;
+ return undefined;
}
}
diff --git a/src/fields/ListField.ts b/src/fields/ListField.ts
index c4008bd12..8311e737b 100644
--- a/src/fields/ListField.ts
+++ b/src/fields/ListField.ts
@@ -5,12 +5,18 @@ import { Types } from "../server/Message";
import { BasicField } from "./BasicField";
import { Field, FieldId } from "./Field";
import { FieldMap } from "../client/SocketStub";
+import { ScriptField } from "./ScriptField";
export class ListField<T extends Field> extends BasicField<T[]> {
- private _proxies: string[] = []
- constructor(data: T[] = [], id?: FieldId, save: boolean = true) {
+ private _proxies: string[] = [];
+ private _scriptIds: string[] = [];
+ private scripts: ScriptField[] = [];
+
+ constructor(data: T[] = [], scripts: ScriptField[] = [], id?: FieldId, save: boolean = true) {
super(data, save, id);
+ this.scripts = scripts;
this.updateProxies();
+ this._scriptIds = this.scripts.map(script => script.Id);
if (save) {
Server.UpdateField(this);
}
@@ -22,43 +28,90 @@ export class ListField<T extends Field> extends BasicField<T[]> {
private observeDisposer: Lambda | undefined;
private observeList(): void {
if (this.observeDisposer) {
- this.observeDisposer()
+ this.observeDisposer();
}
this.observeDisposer = observe(this.Data as IObservableArray<T>, (change: IArrayChange<T> | IArraySplice<T>) => {
- this.updateProxies()
- if (change.type == "splice") {
+ const target = change.object;
+ this.updateProxies();
+ if (change.type === "splice") {
+ this.runScripts(change.removed, false);
UndoManager.AddEvent({
- undo: () => this.Data.splice(change.index, change.addedCount, ...change.removed),
- redo: () => this.Data.splice(change.index, change.removedCount, ...change.added)
- })
+ undo: () => target.splice(change.index, change.addedCount, ...change.removed),
+ redo: () => target.splice(change.index, change.removedCount, ...change.added)
+ });
+ this.runScripts(change.added, true);
} else {
+ this.runScripts([change.oldValue], false);
UndoManager.AddEvent({
- undo: () => this.Data[change.index] = change.oldValue,
- redo: () => this.Data[change.index] = change.newValue
- })
+ undo: () => target[change.index] = change.oldValue,
+ redo: () => target[change.index] = change.newValue
+ });
+ this.runScripts([change.newValue], true);
}
- if (!this._processingServerUpdate)
+ if (!this._processingServerUpdate) {
Server.UpdateField(this);
+ }
+ });
+ }
+
+ private runScripts(fields: T[], added: boolean) {
+ for (const script of this.scripts) {
+ this.runScript(fields, script, added);
+ }
+ }
+
+ private runScript(fields: T[], script: ScriptField, added: boolean) {
+ if (!this._processingServerUpdate) {
+ for (const field of fields) {
+ script.script.run({ field, added });
+ }
+ }
+ }
+
+ addScript(script: ScriptField) {
+ this.scripts.push(script);
+ this._scriptIds.push(script.Id);
+
+ this.runScript(this.Data, script, true);
+ UndoManager.AddEvent({
+ undo: () => this.removeScript(script),
+ redo: () => this.addScript(script),
});
+ Server.UpdateField(this);
+ }
+
+ removeScript(script: ScriptField) {
+ const index = this.scripts.indexOf(script);
+ if (index === -1) {
+ return;
+ }
+ this.scripts.splice(index, 1);
+ this._scriptIds.splice(index, 1);
+ UndoManager.AddEvent({
+ undo: () => this.addScript(script),
+ redo: () => this.removeScript(script),
+ });
+ this.runScript(this.Data, script, false);
+ Server.UpdateField(this);
}
protected setData(value: T[]) {
+ this.runScripts(this.data, false);
+
this.data = observable(value);
this.updateProxies();
this.observeList();
+ this.runScripts(this.data, true);
}
private updateProxies() {
this._proxies = this.Data.map(field => field.Id);
}
- UpdateFromServer(fields: string[]) {
- this._proxies = fields;
- }
private arraysEqual(a: any[], b: any[]) {
if (a === b) return true;
- if (a == null || b == null) return false;
- if (a.length != b.length) return false;
+ if (a === null || b === null) return false;
+ if (a.length !== b.length) return false;
// If you don't care about the order of the elements inside
// the array, you should sort both arrays here.
@@ -72,33 +125,42 @@ export class ListField<T extends Field> extends BasicField<T[]> {
}
init(callback: (field: Field) => any) {
- Server.GetFields(this._proxies, action((fields: FieldMap) => {
+ const fieldsPromise = Server.GetFields(this._proxies).then(action((fields: FieldMap) => {
if (!this.arraysEqual(this._proxies, this.data.map(field => field.Id))) {
var dataids = this.data.map(d => d.Id);
var proxies = this._proxies.map(p => p);
var added = this.data.length < this._proxies.length;
var deleted = this.data.length > this._proxies.length;
- for (let i = 0; i < dataids.length && added; i++)
- added = proxies.indexOf(dataids[i]) != -1;
- for (let i = 0; i < this._proxies.length && deleted; i++)
- deleted = dataids.indexOf(proxies[i]) != -1;
+ for (let i = 0; i < dataids.length && added; i++) {
+ added = proxies.indexOf(dataids[i]) !== -1;
+ }
+ for (let i = 0; i < this._proxies.length && deleted; i++) {
+ deleted = dataids.indexOf(proxies[i]) !== -1;
+ }
this._processingServerUpdate = true;
for (let i = 0; i < proxies.length && added; i++) {
- if (dataids.indexOf(proxies[i]) === -1)
+ if (dataids.indexOf(proxies[i]) === -1) {
this.Data.splice(i, 0, fields[proxies[i]] as T);
+ }
}
for (let i = dataids.length - 1; i >= 0 && deleted; i--) {
- if (proxies.indexOf(dataids[i]) === -1)
+ if (proxies.indexOf(dataids[i]) === -1) {
this.Data.splice(i, 1);
+ }
}
if (!added && !deleted) {// otherwise, just rebuild the whole list
this.setData(proxies.map(id => fields[id] as T));
}
this._processingServerUpdate = false;
}
- callback(this);
- }))
+ }));
+
+ const scriptsPromise = Server.GetFields(this._scriptIds).then((fields: FieldMap) => {
+ this.scripts = this._scriptIds.map(id => fields[id] as ScriptField);
+ });
+
+ Promise.all([fieldsPromise, scriptsPromise]).then(() => callback(this));
}
ToScriptString(): string {
@@ -109,17 +171,26 @@ export class ListField<T extends Field> extends BasicField<T[]> {
return new ListField<T>(this.Data);
}
- ToJson(): { type: Types, data: string[], _id: string } {
+
+ UpdateFromServer(data: { fields: string[], scripts: string[] }) {
+ this._proxies = data.fields;
+ this._scriptIds = data.scripts;
+ }
+ ToJson(): { type: Types, data: { fields: string[], scripts: string[] }, _id: string } {
return {
type: Types.List,
- data: this._proxies || [],
+ data: {
+ fields: this._proxies,
+ scripts: this._scriptIds,
+ },
_id: this.Id
- }
+ };
}
- static FromJson(id: string, ids: string[]): ListField<Field> {
- let list = new ListField([], id, false);
- list._proxies = ids;
- return list
+ static FromJson(id: string, data: { fields: string[], scripts: string[] }): ListField<Field> {
+ let list = new ListField([], [], id, false);
+ list._proxies = data.fields;
+ list._scriptIds = data.scripts;
+ return list;
}
} \ No newline at end of file
diff --git a/src/fields/NumberField.ts b/src/fields/NumberField.ts
index e0c8648de..45b920e31 100644
--- a/src/fields/NumberField.ts
+++ b/src/fields/NumberField.ts
@@ -1,4 +1,4 @@
-import { BasicField } from "./BasicField"
+import { BasicField } from "./BasicField";
import { Types } from "../server/Message";
import { FieldId } from "./Field";
@@ -20,6 +20,6 @@ export class NumberField extends BasicField<number> {
_id: this.Id,
type: Types.Number,
data: this.Data
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/PDFField.ts b/src/fields/PDFField.ts
index b6625387e..65e179894 100644
--- a/src/fields/PDFField.ts
+++ b/src/fields/PDFField.ts
@@ -1,13 +1,13 @@
import { BasicField } from "./BasicField";
import { Field, FieldId } from "./Field";
-import { observable } from "mobx"
+import { observable } from "mobx";
import { Types } from "../server/Message";
export class PDFField extends BasicField<URL> {
constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) {
- super(data == undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id);
+ super(data === undefined ? new URL("http://cs.brown.edu/~bcz/bob_fettucine.jpg") : data, save, id);
}
toString(): string {
@@ -27,7 +27,7 @@ export class PDFField extends BasicField<URL> {
type: Types.PDF,
data: this.Data.href,
_id: this.Id
- }
+ };
}
@observable
diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts
index 5efb43314..6f7b3074a 100644
--- a/src/fields/RichTextField.ts
+++ b/src/fields/RichTextField.ts
@@ -20,7 +20,7 @@ export class RichTextField extends BasicField<string> {
type: Types.RichText,
data: this.Data,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts
new file mode 100644
index 000000000..24c1d9b3a
--- /dev/null
+++ b/src/fields/ScriptField.ts
@@ -0,0 +1,64 @@
+import { Field, FieldId } from "./Field";
+import { Types } from "../server/Message";
+import { CompileScript, ScriptOptions, CompiledScript } from "../client/util/Scripting";
+import { Server } from "../client/Server";
+
+export interface ScriptData {
+ script: string;
+ options: ScriptOptions;
+}
+
+export class ScriptField extends Field {
+ readonly script: CompiledScript;
+
+ constructor(script: CompiledScript, id?: FieldId, save: boolean = true) {
+ super(id);
+
+ 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(...)";
+ }
+
+ GetValue() {
+ return this.script;
+ }
+
+ TrySetValue(): boolean {
+ throw new Error("Script fields currently can't be modified");
+ }
+
+ UpdateFromServer() {
+ throw new Error("Script fields currently can't be updated");
+ }
+
+ ToJson(): { _id: string, type: Types, data: ScriptData } {
+ const { options, originalScript } = this.script;
+ return {
+ _id: this.Id,
+ type: Types.Script,
+ data: {
+ script: originalScript,
+ options
+ },
+ };
+ }
+
+ Copy(): Field {
+ //Script fields are currently immutable, so we can fake copy them
+ return this;
+ }
+} \ No newline at end of file
diff --git a/src/fields/TextField.ts b/src/fields/TextField.ts
index 71d8ea310..69d26f42f 100644
--- a/src/fields/TextField.ts
+++ b/src/fields/TextField.ts
@@ -1,4 +1,4 @@
-import { BasicField } from "./BasicField"
+import { BasicField } from "./BasicField";
import { FieldId } from "./Field";
import { Types } from "../server/Message";
@@ -20,6 +20,6 @@ export class TextField extends BasicField<string> {
type: Types.Text,
data: this.Data,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/TupleField.ts b/src/fields/TupleField.ts
index e2162c751..ad0f6f350 100644
--- a/src/fields/TupleField.ts
+++ b/src/fields/TupleField.ts
@@ -21,7 +21,7 @@ export class TupleField<T, U> extends BasicField<[T, U]> {
UndoManager.AddEvent({
undo: () => this.Data[change.index] = change.oldValue,
redo: () => this.Data[change.index] = change.newValue
- })
+ });
Server.UpdateField(this);
} else {
throw new Error("Why are you messing with the length of a tuple, huh?");
@@ -31,7 +31,7 @@ export class TupleField<T, U> extends BasicField<[T, U]> {
protected setData(value: [T, U]) {
if (this.observeDisposer) {
- this.observeDisposer()
+ this.observeDisposer();
}
this.data = observable(value) as (T | U)[] as [T, U];
this.observeTuple();
@@ -54,6 +54,6 @@ export class TupleField<T, U> extends BasicField<[T, U]> {
type: Types.Tuple,
data: this.Data,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/VideoField.ts b/src/fields/VideoField.ts
index 626e4ec83..d7cd7e968 100644
--- a/src/fields/VideoField.ts
+++ b/src/fields/VideoField.ts
@@ -4,7 +4,7 @@ import { Types } from "../server/Message";
export class VideoField extends BasicField<URL> {
constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) {
- super(data == undefined ? new URL("http://techslides.com/demos/sample-videos/small.mp4") : data, save, id);
+ super(data === undefined ? new URL("http://techslides.com/demos/sample-videos/small.mp4") : data, save, id);
}
toString(): string {
@@ -24,7 +24,7 @@ export class VideoField extends BasicField<URL> {
type: Types.Video,
data: this.Data.href,
_id: this.Id
- }
+ };
}
} \ No newline at end of file
diff --git a/src/fields/WebField.ts b/src/fields/WebField.ts
index 6c4de5000..6023e9e6b 100644
--- a/src/fields/WebField.ts
+++ b/src/fields/WebField.ts
@@ -4,7 +4,7 @@ import { Types } from "../server/Message";
export class WebField extends BasicField<URL> {
constructor(data: URL | undefined = undefined, id?: FieldId, save: boolean = true) {
- super(data == undefined ? new URL("https://crossorigin.me/" + "https://cs.brown.edu/") : data, save, id);
+ super(data === undefined ? new URL("https://crossorigin.me/" + "https://cs.brown.edu/") : data, save, id);
}
toString(): string {
@@ -24,7 +24,7 @@ export class WebField extends BasicField<URL> {
type: Types.Web,
data: this.Data.href,
_id: this.Id
- }
+ };
}
} \ No newline at end of file