aboutsummaryrefslogtreecommitdiff
path: root/src/fields/Document.ts
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-03-01 22:32:57 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-03-01 22:32:57 -0500
commit623db01495fb1a07d905fcfcd8330efe6473d63b (patch)
tree02feeb411eebc187a2c7317dd80ba7a29688c9a0 /src/fields/Document.ts
parent13a5b32b04e65c154aeb12190e761d8174b858e9 (diff)
parentbde8aabad7e5745b4797e73b564e4efb19faeca9 (diff)
Merge branch 'master' of github-tsch-brown:browngraphicslab/Dash-Web into navigation
Diffstat (limited to 'src/fields/Document.ts')
-rw-r--r--src/fields/Document.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/fields/Document.ts b/src/fields/Document.ts
index 6193ea56c..0c156b282 100644
--- a/src/fields/Document.ts
+++ b/src/fields/Document.ts
@@ -8,6 +8,7 @@ import { ListField } from "./ListField";
import { Server } from "../client/Server";
import { Types } from "../server/Message";
import { UndoManager } from "../client/util/UndoManager";
+import { HtmlField } from "./HtmlField";
export class Document extends Field {
public fields: ObservableMap<string, { key: Key, field: Field }> = new ObservableMap();
@@ -101,6 +102,25 @@ export class Document extends Field {
return false;
}
+ GetOrCreateAsync<T extends Field>(key: Key, ctor: { new(): T }, callback: (field: T) => void): void {
+ //This currently doesn't deal with prototypes
+ if (this._proxies.has(key.Id)) {
+ Server.GetDocumentField(this, key, (field) => {
+ if (field && field instanceof ctor) {
+ callback(field);
+ } else {
+ let newField = new ctor();
+ this.Set(key, newField);
+ callback(newField);
+ }
+ });
+ } else {
+ let newField = new ctor();
+ this.Set(key, newField);
+ callback(newField);
+ }
+ }
+
GetT<T extends Field = Field>(key: Key, ctor: { new(...args: any[]): T }, ignoreProto: boolean = false): FieldValue<T> {
var getfield = this.Get(key, ignoreProto);
if (getfield != FieldWaiting) {
@@ -125,6 +145,10 @@ export class Document extends Field {
return vval;
}
+ GetHtml(key: Key, defaultVal: string): string {
+ return this.GetData(key, HtmlField, defaultVal);
+ }
+
GetNumber(key: Key, defaultVal: number): number {
return this.GetData(key, NumberField, defaultVal);
}