diff options
Diffstat (limited to 'src/fields')
-rw-r--r-- | src/fields/Doc.ts | 4 | ||||
-rw-r--r-- | src/fields/InkField.ts | 11 | ||||
-rw-r--r-- | src/fields/URLField.ts | 1 | ||||
-rw-r--r-- | src/fields/documentSchemas.ts | 2 |
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 |