aboutsummaryrefslogtreecommitdiff
path: root/src/client/documents/DocFromField.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/documents/DocFromField.ts')
-rw-r--r--src/client/documents/DocFromField.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/client/documents/DocFromField.ts b/src/client/documents/DocFromField.ts
new file mode 100644
index 000000000..1c0a9755b
--- /dev/null
+++ b/src/client/documents/DocFromField.ts
@@ -0,0 +1,50 @@
+/* eslint-disable prefer-destructuring */
+/* eslint-disable default-param-last */
+/* eslint-disable no-use-before-define */
+import { Doc, DocListCast } from '../../fields/Doc';
+import { InkField } from '../../fields/InkField';
+import { List } from '../../fields/List';
+import { AudioField, ImageField, PdfField, VideoField } from '../../fields/URLField';
+import { InkingStroke } from '../views/InkingStroke';
+import { CollectionView } from '../views/collections/CollectionView';
+import { AudioBox } from '../views/nodes/AudioBox';
+import { ImageBox } from '../views/nodes/ImageBox';
+import { PDFBox } from '../views/nodes/PDFBox';
+import { VideoBox } from '../views/nodes/VideoBox';
+import { FormattedTextBox } from '../views/nodes/formattedText/FormattedTextBox';
+import { Docs, DocumentOptions } from './Documents';
+
+export function DocumentFromField(target: Doc, fieldKey: string, proto?: Doc, options?: DocumentOptions): Doc | undefined {
+ let created: Doc | undefined;
+ const field = target[fieldKey];
+ const resolved = options ?? {};
+ if (field instanceof ImageField) {
+ created = Docs.Create.ImageDocument(field.url.href, resolved);
+ created.layout = ImageBox.LayoutString(fieldKey);
+ } else if (field instanceof Doc) {
+ created = field;
+ } else if (field instanceof VideoField) {
+ created = Docs.Create.VideoDocument(field.url.href, resolved);
+ created.layout = VideoBox.LayoutString(fieldKey);
+ } else if (field instanceof PdfField) {
+ created = Docs.Create.PdfDocument(field.url.href, resolved);
+ created.layout = PDFBox.LayoutString(fieldKey);
+ } else if (field instanceof AudioField) {
+ created = Docs.Create.AudioDocument(field.url.href, resolved);
+ created.layout = AudioBox.LayoutString(fieldKey);
+ } else if (field instanceof InkField) {
+ created = Docs.Create.InkDocument(field.inkData, resolved);
+ created.layout = InkingStroke.LayoutString(fieldKey);
+ } else if (field instanceof List && field[0] instanceof Doc) {
+ created = Docs.Create.StackingDocument(DocListCast(field), resolved);
+ created.layout = CollectionView.LayoutString(fieldKey);
+ } else {
+ created = Docs.Create.TextDocument('', { ...{ _width: 200, _height: 25, _layout_autoHeight: true }, ...resolved });
+ created.layout = FormattedTextBox.LayoutString(fieldKey);
+ }
+ if (created) {
+ created.title = fieldKey;
+ proto && created.proto && (created.proto = Doc.GetProto(proto));
+ }
+ return created;
+}