aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Main.tsx2
-rw-r--r--src/documents/Documents.ts8
-rw-r--r--src/fields/Document.ts2
-rw-r--r--src/fields/ImageField.ts17
-rw-r--r--src/fields/RichTextField.ts13
-rw-r--r--src/views/nodes/DocumentView.tsx2
-rw-r--r--src/views/nodes/FieldView.tsx10
-rw-r--r--src/views/nodes/ImageBox.tsx9
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)) {