diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Main.tsx | 2 | ||||
-rw-r--r-- | src/documents/Documents.ts | 8 | ||||
-rw-r--r-- | src/fields/Document.ts | 2 | ||||
-rw-r--r-- | src/fields/ImageField.ts | 17 | ||||
-rw-r--r-- | src/fields/RichTextField.ts | 13 | ||||
-rw-r--r-- | src/views/nodes/DocumentView.tsx | 2 | ||||
-rw-r--r-- | src/views/nodes/FieldView.tsx | 10 | ||||
-rw-r--r-- | src/views/nodes/ImageBox.tsx | 9 |
8 files changed, 55 insertions, 8 deletions
diff --git a/src/Main.tsx b/src/Main.tsx index cc0f9f9cb..431a5db96 100644 --- a/src/Main.tsx +++ b/src/Main.tsx @@ -38,7 +38,7 @@ document.addEventListener("pointerdown", action(function (e: PointerEvent) { //runInAction(() => { - let doc1 = Documents.TextDocument("Hello world", { title: "hello" }); + let doc1 = Documents.TextDocument({ title: "hello" }); let doc2 = doc1.MakeDelegate(); doc2.SetField(KS.X, new NumberField(150)); doc2.SetField(KS.Y, new NumberField(20)); diff --git a/src/documents/Documents.ts b/src/documents/Documents.ts index 487490ea5..a5edebda2 100644 --- a/src/documents/Documents.ts +++ b/src/documents/Documents.ts @@ -6,6 +6,8 @@ import { ListField } from "../fields/ListField"; import { FieldTextBox } from "../views/nodes/FieldTextBox"; import { CollectionDockingView } from "../views/collections/CollectionDockingView"; import { CollectionSchemaView } from "../views/collections/CollectionSchemaView"; +import { ImageField } from "../fields/ImageField"; +import { RichTextField } from "../fields/RichTextField"; import { ImageBox } from "../views/nodes/ImageBox"; interface DocumentOptions { @@ -52,10 +54,10 @@ export namespace Documents { return textProto; } - export function TextDocument(text: string, options: DocumentOptions = {}): Document { + export function TextDocument(options: DocumentOptions = {}): Document { let doc = GetTextPrototype().MakeDelegate(); setupOptions(doc, options); - // doc.SetField(KeyStore.Data, new TextField(text)); + doc.SetField(KeyStore.Data, new RichTextField()); return doc; } @@ -121,7 +123,7 @@ export namespace Documents { export function ImageDocument(url: string, options: DocumentOptions = {}): Document { let doc = GetImagePrototype().MakeDelegate(); setupOptions(doc, options); - doc.SetField(KeyStore.Data, new TextField(url)); + doc.SetField(KeyStore.Data, new ImageField(new URL(url))); return doc; } diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 5c0a9caf0..ef759615b 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -32,7 +32,7 @@ export class Document extends Field { return field; } - GetFieldT<T extends Field = Field>(key: Key, ctor: { new(): T }, ignoreProto: boolean = false): Opt<T> { + GetFieldT<T extends Field = Field>(key: Key, ctor: { new(...args: any[]): T }, ignoreProto: boolean = false): Opt<T> { return Cast(this.GetField(key, ignoreProto), ctor); } diff --git a/src/fields/ImageField.ts b/src/fields/ImageField.ts new file mode 100644 index 000000000..9bfacf231 --- /dev/null +++ b/src/fields/ImageField.ts @@ -0,0 +1,17 @@ +import { BasicField } from "./BasicField"; +import { Field } from "./Field"; + +export class ImageField extends BasicField<URL> { + constructor(data: URL) { + super(data); + } + + toString(): string { + return this.Data.href; + } + + Copy(): Field { + return new ImageField(this.Data); + } + +}
\ No newline at end of file diff --git a/src/fields/RichTextField.ts b/src/fields/RichTextField.ts new file mode 100644 index 000000000..4cf5c99a7 --- /dev/null +++ b/src/fields/RichTextField.ts @@ -0,0 +1,13 @@ +import { BasicField } from "./BasicField"; +import { Field } from "./Field"; + +export class RichTextField extends BasicField<string> { + constructor(data: string = "") { + super(data); + } + + Copy(): Field { + return new RichTextField(this.Data); + } + +}
\ No newline at end of file diff --git a/src/views/nodes/DocumentView.tsx b/src/views/nodes/DocumentView.tsx index e77d4a274..7f11300cc 100644 --- a/src/views/nodes/DocumentView.tsx +++ b/src/views/nodes/DocumentView.tsx @@ -18,8 +18,6 @@ import { FieldTextBox } from "../nodes/FieldTextBox"; import { ImageBox } from "../nodes/ImageBox"; import "./NodeView.scss"; import React = require("react"); -import { cpus } from "os"; -import { relative } from "path"; const JsxParser = require('react-jsx-parser').default;//TODO Why does this need to be imported like this? interface DocumentViewProps { diff --git a/src/views/nodes/FieldView.tsx b/src/views/nodes/FieldView.tsx index 1c4164089..eec63256d 100644 --- a/src/views/nodes/FieldView.tsx +++ b/src/views/nodes/FieldView.tsx @@ -5,6 +5,10 @@ import { computed } from "mobx"; import { Field, Opt } from "../../fields/Field"; import { TextField } from "../../fields/TextField"; import { NumberField } from "../../fields/NumberField"; +import { RichTextField } from "../../fields/RichTextField"; +import { FieldTextBox } from "./FieldTextBox"; +import { ImageField } from "../../fields/ImageField"; +import { ImageBox } from "./ImageBox"; @observer export class FieldView extends React.Component<DocumentFieldViewProps> { @@ -21,6 +25,12 @@ export class FieldView extends React.Component<DocumentFieldViewProps> { if (field instanceof TextField) { return <p>{field.Data}</p> } + else if (field instanceof RichTextField) { + return <FieldTextBox {...this.props} /> + } + else if (field instanceof ImageField) { + return <ImageBox {...this.props} /> + } else if (field instanceof NumberField) { return <p>{field.Data}</p> } else { diff --git a/src/views/nodes/ImageBox.tsx b/src/views/nodes/ImageBox.tsx index 1dfad462f..7577627e8 100644 --- a/src/views/nodes/ImageBox.tsx +++ b/src/views/nodes/ImageBox.tsx @@ -5,6 +5,8 @@ import { SelectionManager } from "../../util/SelectionManager"; import { DocumentFieldViewProps } from "./DocumentView"; import "./ImageBox.scss"; import React = require("react") +import { ImageField } from '../../fields/ImageField'; +import { NumberField } from '../../fields/NumberField'; interface ImageBoxState { photoIndex: number, @@ -57,7 +59,12 @@ export class ImageBox extends React.Component<DocumentFieldViewProps, ImageBoxSt } render() { - const images = [this.props.doc.GetTextField(this.props.fieldKey, ""),]; + let field = this.props.doc.GetFieldT(this.props.fieldKey, ImageField); + let path = ""; + if (field) { + path = field.Data.href; + } + const images = [path,]; var lightbox = () => { const { photoIndex } = this.state; if (this.state.isOpen && SelectionManager.IsSelected(this.props.containingDocumentView)) { |