diff options
author | bob <bcz@cs.brown.edu> | 2019-01-28 16:47:04 -0500 |
---|---|---|
committer | bob <bcz@cs.brown.edu> | 2019-01-28 16:47:04 -0500 |
commit | 832297c980e8de78ead9cba85dad4d46bdd32b88 (patch) | |
tree | 9856f5dd1f853bf0ac120aa82bc7f03d0b6411ad /src/views/nodes/FieldTextBox.tsx | |
parent | 738d9fae678aa151d0ebb29ec4dbe62b18cd50f3 (diff) |
fixed selecting text in fieldTextBox
Diffstat (limited to 'src/views/nodes/FieldTextBox.tsx')
-rw-r--r-- | src/views/nodes/FieldTextBox.tsx | 49 |
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 |