aboutsummaryrefslogtreecommitdiff
path: root/src/views/nodes/FieldTextBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/nodes/FieldTextBox.tsx')
-rw-r--r--src/views/nodes/FieldTextBox.tsx49
1 files changed, 31 insertions, 18 deletions
diff --git a/src/views/nodes/FieldTextBox.tsx b/src/views/nodes/FieldTextBox.tsx
index 4539bbab0..8568d04c5 100644
--- a/src/views/nodes/FieldTextBox.tsx
+++ b/src/views/nodes/FieldTextBox.tsx
@@ -1,23 +1,29 @@
-import { Key, KeyStore } from "../../fields/Key";
-import { Document } from "../../fields/Document";
-import { observer } from "mobx-react";
-import { TextField } from "../../fields/TextField";
+import {Key, KeyStore} from "../../fields/Key";
+import {Document} from "../../fields/Document";
+import {observer} from "mobx-react";
+import {TextField} from "../../fields/TextField";
import React = require("react")
-import { action, observable, reaction, IReactionDisposer } from "mobx";
+import {action, observable, reaction, IReactionDisposer} from "mobx";
-import { schema } from "prosemirror-schema-basic";
-import { EditorState, Transaction } from "prosemirror-state"
-import { EditorView } from "prosemirror-view"
-import { keymap } from "prosemirror-keymap"
-import { baseKeymap } from "prosemirror-commands"
-import { undo, redo, history } from "prosemirror-history"
-import { Opt } from "../../fields/Field";
+import {schema} from "prosemirror-schema-basic";
+import {EditorState, Transaction} from "prosemirror-state"
+import {EditorView} from "prosemirror-view"
+import {keymap} from "prosemirror-keymap"
+import {baseKeymap} from "prosemirror-commands"
+import {undo, redo, history} from "prosemirror-history"
+import {Opt} from "../../fields/Field";
import "./FieldTextBox.scss"
+import {DocumentView} from "./DocumentView";
+import {SelectionManager} from "../../util/SelectionManager";
+
+// these properties are set via the render() method of the DocumentView when it creates this node.
+// However, these properties are set below in the LayoutString() static method
interface IProps {
fieldKey: Key;
doc: Document;
+ containingDocumentView: DocumentView
}
// FieldTextBox: Displays an editable plain text node that maps to a specified Key of a Document
@@ -37,6 +43,8 @@ interface IProps {
// this will edit the document and assign the new value to that field.
//
export class FieldTextBox extends React.Component<IProps> {
+
+ public static LayoutString() {return "<FieldTextBox doc={Document} containingDocumentView={ContainingDocumentView} fieldKey={DataKey} />";}
private _ref: React.RefObject<HTMLDivElement>;
private _editorView: Opt<EditorView>;
private _reactionDisposer: Opt<IReactionDisposer>;
@@ -53,19 +61,19 @@ export class FieldTextBox extends React.Component<IProps> {
if (this._editorView) {
const state = this._editorView.state.apply(tx);
this._editorView.updateState(state);
- const { doc, fieldKey } = this.props;
+ const {doc, fieldKey} = this.props;
doc.SetFieldValue(fieldKey, JSON.stringify(state.toJSON()), TextField);
}
}
componentDidMount() {
let state: EditorState;
- const { doc, fieldKey } = this.props;
+ const {doc, fieldKey} = this.props;
const config = {
schema,
plugins: [
history(),
- keymap({ "Mod-z": undo, "Mod-y": redo }),
+ keymap({"Mod-z": undo, "Mod-y": redo}),
keymap(baseKeymap)
]
};
@@ -108,11 +116,16 @@ export class FieldTextBox extends React.Component<IProps> {
@action
onChange(e: React.ChangeEvent<HTMLInputElement>) {
- const { fieldKey, doc } = this.props;
+ const {fieldKey, doc} = this.props;
doc.SetFieldValue(fieldKey, e.target.value, TextField);
}
-
+ onPointerDown = (e: React.PointerEvent): void => {
+ let me = this;
+ if (e.buttons === 1 && SelectionManager.IsSelected(me.props.containingDocumentView)) {
+ e.stopPropagation();
+ }
+ }
render() {
- return (<div className="fieldTextBox-cont" ref={this._ref} />)
+ return (<div className="fieldTextBox-cont" onPointerDown={this.onPointerDown} ref={this._ref} />)
}
} \ No newline at end of file