From 545469ffe01d557450c08c860460abc933b8fcb0 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Fri, 13 Oct 2017 15:22:16 -0700 Subject: [PATCH] fix findNativePoint for void nodes --- examples/emojis/index.js | 15 ++--- examples/markdown-preview/index.js | 2 +- packages/slate-react/src/components/text.js | 21 ++++++- packages/slate-react/src/components/void.js | 66 +++++++++------------ 4 files changed, 56 insertions(+), 48 deletions(-) diff --git a/examples/emojis/index.js b/examples/emojis/index.js index 5b7e90db8..048e6e7cf 100644 --- a/examples/emojis/index.js +++ b/examples/emojis/index.js @@ -71,13 +71,14 @@ class Emojis extends React.Component { onClickEmoji = (e, code) => { e.preventDefault() - const change = this.state.state - .change() - .insertInline({ - type: 'emoji', - isVoid: true, - data: { code } - }) + const { state } = this.state + const change = state.change() + + change.insertInline({ + type: 'emoji', + isVoid: true, + data: { code } + }) this.onChange(change) } diff --git a/examples/markdown-preview/index.js b/examples/markdown-preview/index.js index e713d13d8..84bc862a1 100644 --- a/examples/markdown-preview/index.js +++ b/examples/markdown-preview/index.js @@ -97,7 +97,7 @@ const schema = { }, rules: [ { - match: () => true, + match: object => object.kind == 'block', decorate: markdownDecorator, } ] diff --git a/packages/slate-react/src/components/text.js b/packages/slate-react/src/components/text.js index 4ba1cd585..a0c9040b4 100644 --- a/packages/slate-react/src/components/text.js +++ b/packages/slate-react/src/components/text.js @@ -15,6 +15,12 @@ import Leaf from './leaf' const debug = Debug('slate:node') +/** + * Text. + * + * @type {Component} + */ + class Text extends React.Component { /** @@ -31,6 +37,17 @@ class Text extends React.Component { parent: SlateTypes.node.isRequired, schema: SlateTypes.schema.isRequired, state: SlateTypes.state.isRequired, + style: Types.object, + } + + /** + * Default prop types. + * + * @type {Object} + */ + + static defaultProps = { + style: null, } /** @@ -90,7 +107,7 @@ class Text extends React.Component { const { props } = this this.debug('render', { props }) - const { decorations, node, state } = props + const { decorations, node, state, style } = props const { document } = state const { key } = node @@ -112,7 +129,7 @@ class Text extends React.Component { }) return ( - + {leaves} ) diff --git a/packages/slate-react/src/components/void.js b/packages/slate-react/src/components/void.js index 11facdef7..2a170d4f2 100644 --- a/packages/slate-react/src/components/void.js +++ b/packages/slate-react/src/components/void.js @@ -3,10 +3,8 @@ import Debug from 'debug' import React from 'react' import SlateTypes from 'slate-prop-types' import Types from 'prop-types' -import { Mark } from 'slate' -import Leaf from './leaf' -import OffsetKey from '../utils/offset-key' +import Text from './text' /** * Debug. @@ -79,9 +77,25 @@ class Void extends React.Component { }) } - onDragOver = event => event.preventDefault() + /** + * On drag enter, prevent default to allow drops. + * + * @type {Event} event + */ - onDragEnter = event => event.preventDefault() + onDragEnter = (event) => { + event.preventDefault() + } + + /** + * On drag over, prevent default to allow drops. + * + * @type {Event} event + */ + + onDragOver = (event) => { + event.preventDefault() + } /** * Render. @@ -113,7 +127,7 @@ class Void extends React.Component { } /** - * Render a fake spacer leaf, which will catch the cursor when it the void + * Render a fake spacer text, which will catch the cursor when it the void * node is navigated to with the arrow keys. Having this spacer there means * the browser continues to manage the selection natively, so it keeps track * of the right offset when moving across the block. @@ -122,7 +136,8 @@ class Void extends React.Component { */ renderSpacer = () => { - const { node } = this.props + const { block, decorations, isSelected, node, readOnly, schema, state, editor } = this.props + const child = node.getFirstText() let style if (node.kind == 'block') { @@ -140,43 +155,18 @@ class Void extends React.Component { } return ( - {this.renderLeaf()} - ) - } - - /** - * Render a fake leaf. - * - * @return {Element} - */ - - renderLeaf = () => { - const { block, node, schema, state, editor } = this.props - const child = node.getFirstText() - const ranges = child.getRanges() - const text = '' - const offset = 0 - const marks = Mark.createSet() - const index = 0 - const offsetKey = OffsetKey.stringify({ - key: child.key, - index - }) - - return ( - ) }