aboutsummaryrefslogtreecommitdiff
path: root/src/fields
diff options
context:
space:
mode:
Diffstat (limited to 'src/fields')
-rw-r--r--src/fields/Doc.ts4
-rw-r--r--src/fields/InkField.ts11
-rw-r--r--src/fields/URLField.ts1
-rw-r--r--src/fields/documentSchemas.ts2
4 files changed, 17 insertions, 1 deletions
diff --git a/src/fields/Doc.ts b/src/fields/Doc.ts
index 42d93c60c..328385fda 100644
--- a/src/fields/Doc.ts
+++ b/src/fields/Doc.ts
@@ -22,7 +22,7 @@ import { RichTextField } from "./RichTextField";
import { listSpec } from "./Schema";
import { ComputedField, ScriptField } from "./ScriptField";
import { Cast, FieldValue, NumCast, StrCast, ToConstructor } from "./Types";
-import { AudioField, ImageField, PdfField, VideoField, WebField } from "./URLField";
+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");
@@ -638,6 +638,7 @@ export namespace Doc {
else if (value instanceof AudioField) return { url: value.url.href, __type: "audio" };
else if (value instanceof VideoField) return { url: value.url.href, __type: "video" };
else if (value instanceof WebField) return { url: value.url.href, __type: "web" };
+ else if (value instanceof MapField) return { url: value.url.href, __type: "map" };
else if (value instanceof DateField) return { date: value.toString(), __type: "date" };
else if (value instanceof ProxyField) return { fieldId: value.fieldId, __type: "proxy" };
else if (value instanceof Array && key !== "fields") return { fields: value, __type: "list" };
@@ -1240,6 +1241,7 @@ export namespace Doc {
case DocumentType.INK: return "pen-nib";
case DocumentType.PDF: return "file-pdf";
case DocumentType.LINK: return "link";
+ case DocumentType.MAP: return "map-marker-alt"
default: return "question";
}
}
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts
index f16e143d8..560cf3d63 100644
--- a/src/fields/InkField.ts
+++ b/src/fields/InkField.ts
@@ -3,6 +3,7 @@ import { Scripting } from "../client/util/Scripting";
import { Deserializable } from "../client/util/SerializationHelper";
import { Copy, ToScriptString, ToString } from "./FieldSymbols";
import { ObjectField } from "./ObjectField";
+import { Bezier } from "bezier-js";
// Helps keep track of the current ink tool in use.
export enum InkTool {
@@ -20,6 +21,8 @@ export interface PointData {
Y: number;
}
+export type Segment = Array<Bezier>;
+
// Defines an ink as an array of points.
export type InkData = Array<PointData>;
@@ -67,6 +70,14 @@ export class InkField extends ObjectField {
this.inkData = data;
}
+ /**
+ * Extacts a simple segment from a compound Bezier curve
+ * @param segIndex the start index of the simple bezier segment to extact (eg., 0, 4, 8, ...)
+ */
+ public static Segment(inkData: InkData, segIndex: number) {
+ return new Bezier(inkData.slice(segIndex, segIndex + 4).map(pt => ({ x: pt.X, y: pt.Y })));
+ }
+
[Copy]() {
return new InkField(this.inkData);
}
diff --git a/src/fields/URLField.ts b/src/fields/URLField.ts
index d96e8a70a..4d3776a2c 100644
--- a/src/fields/URLField.ts
+++ b/src/fields/URLField.ts
@@ -57,6 +57,7 @@ export const nullAudio = "https://actions.google.com/sounds/v1/alarms/beep_short
@scriptingGlobal @Deserializable("video") export class VideoField extends URLField { }
@scriptingGlobal @Deserializable("pdf") export class PdfField extends URLField { }
@scriptingGlobal @Deserializable("web") export class WebField extends URLField { }
+@scriptingGlobal @Deserializable("map") export class MapField extends URLField { }
@scriptingGlobal @Deserializable("youtube") export class YoutubeField extends URLField { }
@scriptingGlobal @Deserializable("webcam") export class WebCamField extends URLField { }
diff --git a/src/fields/documentSchemas.ts b/src/fields/documentSchemas.ts
index 73157d268..4d5ae1018 100644
--- a/src/fields/documentSchemas.ts
+++ b/src/fields/documentSchemas.ts
@@ -26,6 +26,8 @@ export const documentSchema = createSchema({
z: "number", // z "coordinate" - non-zero specifies the overlay layer of a freeformview
zIndex: "number", // zIndex of a document in a freeform view
_scrollTop: "number", // scroll position of a scrollable document (pdf, text, web)
+ lat: "number",
+ lng: "number",
// appearance properties on the layout
"_backgroundGrid-spacing": "number", // the size of the grid for collection views