1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-15 03:33:59 +02:00
Commit Graph

1000 Commits

Author SHA1 Message Date
Dundercover
3f0f55ff38 Do not show placeholder when document contains multiple text nodes (#2403) 2018-11-09 08:29:22 -08:00
Ian Storm Taylor
6ddba0ea35 Publish
- slate-base64-serializer@0.2.86
 - slate-html-serializer@0.7.25
 - slate-hyperscript@0.11.16
 - slate-plain-serializer@0.6.25
 - slate-prop-types@0.5.16
 - slate-react-placeholder@0.1.4
 - slate-react@0.21.7
 - slate@0.44.1
2018-11-08 15:40:26 -08:00
Dundercover
13107b0c43 Add optional id prop to the Editor component (#2402) 2018-11-08 15:36:44 -08:00
Ian Storm Taylor
7a47a52e29 Publish
- slate-base64-serializer@0.2.85
 - slate-html-serializer@0.7.24
 - slate-hyperscript@0.11.15
 - slate-plain-serializer@0.6.24
 - slate-prop-types@0.5.15
 - slate-react-placeholder@0.1.3
 - slate-react@0.21.6
 - slate@0.44.0
2018-11-08 13:17:10 -08:00
Ian Storm Taylor
f2f97e502e Publish
- slate-react@0.21.5
2018-11-07 16:47:24 -08:00
Ian Storm Taylor
e493905f29 fix focusing across multiple editors (#2396) 2018-11-07 16:45:01 -08:00
Gersom van Ginkel
990d37b694 Avoid async commands causing rerenders after unmount. (#2395)
* When the component unmounts, make sure async commands don't trigger react updates.

* Eslint fix
2018-11-07 11:34:15 -08:00
Irwan Fario Subastian
8d616b1f98 fix softbreak at the end of the leaf (#2389) 2018-11-06 18:25:51 -08:00
Ian Storm Taylor
312a4ce1a5 Publish
- slate-react@0.21.4
2018-11-06 14:04:11 -08:00
Ian Storm Taylor
836ab1d494 fix findDOMPoint for non-empty void node offsets 2018-11-06 14:01:55 -08:00
Ian Storm Taylor
9446bcbf6d Publish
- slate-react@0.21.3
2018-11-06 13:53:36 -08:00
Ian Storm Taylor
07ecbc69c9 fix findDOMPoint for void nodes with content length 2018-11-06 13:51:52 -08:00
Ian Storm Taylor
60e897599f Publish
- slate-base64-serializer@0.2.84
 - slate-html-serializer@0.7.23
 - slate-hyperscript@0.11.14
 - slate-plain-serializer@0.6.23
 - slate-prop-types@0.5.14
 - slate-react-placeholder@0.1.2
 - slate-react@0.21.2
 - slate@0.43.7
2018-11-06 12:54:58 -08:00
Ian Storm Taylor
7079433ac1 fix findDOMPoint behavior for void nodes 2018-11-06 12:53:05 -08:00
Ian Storm Taylor
24af6113dc Publish
- slate-react-placeholder@0.1.1
 - slate-react@0.21.1
2018-11-02 17:42:51 -07:00
Ian Storm Taylor
456d8f570f fix slate-react-* peerDependencies 2018-11-02 17:39:29 -07:00
Ian Storm Taylor
bb6d39edb6 Publish
- slate-base64-serializer@0.2.83
 - slate-html-serializer@0.7.22
 - slate-hyperscript@0.11.13
 - slate-plain-serializer@0.6.22
 - slate-prop-types@0.5.13
 - slate-react-placeholder@0.1.0
 - slate-react@0.21.0
 - slate@0.43.6
2018-11-02 17:07:12 -07:00
Ian Storm Taylor
a09c3c2fdf Remove renderPlaceholder (#2370)
* add placeholder plugin in slate-react

* remove renderPlaceholder logic

* extract placeholder into a plugin

* remove other old placeholder-based logic

* update changelogs
2018-11-02 17:04:20 -07:00
Ian Storm Taylor
0cf94c73c9 Publish
- slate-base64-serializer@0.2.82
 - slate-html-serializer@0.7.21
 - slate-hyperscript@0.11.12
 - slate-plain-serializer@0.6.21
 - slate-prop-types@0.5.12
 - slate-react@0.20.8
 - slate@0.43.5
2018-11-02 16:18:24 -07:00
Ian Storm Taylor
f438f12d5b fix peer dependency ranges 2018-11-02 16:14:14 -07:00
Ian Storm Taylor
562f7be4b6 Publish
- slate-react@0.20.7
2018-11-01 19:29:44 -07:00
Slapbox
0436ad4a64 Skip operations on child nodes if !node.nodes.size (#2365)
* Skip operations on child nodes if !node.nodes.size

Avoid running decoration and text decoration related functions on child nodes that don't exist.

* Uses isLeafBlock

* Restores the original order of statements
2018-11-01 18:26:46 -07:00
Ian Storm Taylor
fac8228f23 Publish
- slate-base64-serializer@0.2.81
 - slate-html-serializer@0.7.20
 - slate-hyperscript@0.11.11
 - slate-plain-serializer@0.6.20
 - slate-prop-types@0.5.11
 - slate-react@0.20.6
 - slate@0.43.4
2018-11-01 17:59:52 -07:00
Ian Storm Taylor
d5bb44383d Publish
- slate-base64-serializer@0.2.80
 - slate-html-serializer@0.7.19
 - slate-hyperscript@0.11.10
 - slate-plain-serializer@0.6.19
 - slate-prop-types@0.5.10
 - slate-react@0.20.5
 - slate@0.43.3
2018-10-31 14:33:50 -07:00
Ian Storm Taylor
317297469e Publish
- slate-base64-serializer@0.2.79
 - slate-html-serializer@0.7.18
 - slate-hyperscript@0.11.9
 - slate-plain-serializer@0.6.18
 - slate-prop-types@0.5.9
 - slate-react@0.20.4
 - slate@0.43.2
2018-10-31 10:26:11 -07:00
Ian Storm Taylor
caedc1f108 Publish
- slate-base64-serializer@0.2.78
 - slate-html-serializer@0.7.17
 - slate-hyperscript@0.11.8
 - slate-plain-serializer@0.6.17
 - slate-prop-types@0.5.8
 - slate-react@0.20.3
 - slate@0.43.1
2018-10-31 10:11:00 -07:00
Ian Storm Taylor
46df9f6c52 Publish
- slate-react@0.20.2
2018-10-29 17:35:31 -07:00
Ian Storm Taylor
4a2d7845ba rollback isInEditor check for void nodes 2018-10-29 17:30:24 -07:00
Ian Storm Taylor
8eb8e26958 Publish
- slate-react@0.20.1
2018-10-28 16:28:45 -07:00
Per-Kristian Nordnes
43812193ea Fix deprecated editor.change in after/onCut (#2343) 2018-10-28 12:18:53 -07:00
Ian Storm Taylor
8271cecc1e Publish
- slate-base64-serializer@0.2.77
 - slate-html-serializer@0.7.16
 - slate-hyperscript@0.11.7
 - slate-plain-serializer@0.6.16
 - slate-prop-types@0.5.7
 - slate-react@0.20.0
 - slate@0.43.0
2018-10-27 12:26:11 -07:00
Ian Storm Taylor
c86dfbd65b update changelogs 2018-10-27 12:24:35 -07:00
Ian Storm Taylor
8dd919dc34 remove change, fold into editor (#2337)
#### Is this adding or improving a _feature_ or fixing a _bug_?

Improvement / debt.

#### What's the new behavior?

This pull request removes the `Change` object as we know it, and folds all of its behaviors into the new `Editor` controller instead, simplifying a lot of the confusion around what is a "change vs. editor" and when to use which. It makes the standard API a **lot** nicer to use I think.

---

###### NEW

**The `editor.command` and `editor.query` methods can take functions.** Previously they only accepted a `type` string and would look up the command or query by type. Now, they also accept a custom function. This is helpful for plugin authors, who want to accept a "command option", since it gives users more flexibility to write one-off commands or queries. For example a plugin could be passed either:

```js
Hotkey({
  hotkey: 'cmd+b',
  command: 'addBoldMark',
})
```

Or a custom command function:

```js
Hotkey({
  hotkey: 'cmd+b',
  command: editor => editor.addBoldMark().moveToEnd()
})
```

###### BREAKING

**The `Change` object has been removed.** The `Change` object as we know it previously has been removed, and all of its behaviors have been folded into the `Editor` controller. This includes the top-level commands and queries methods, as well as methods like `applyOperation` and `normalize`. _All places that used to receive `change` now receive `editor`, which is API equivalent._

**Changes are now flushed to `onChange` asynchronously.** Previously this was done synchronously, which resulted in some strange race conditions in React environments. Now they will always be flushed asynchronously, just like `setState`.

**The `render*` and `decorate*` middleware signatures have changed!** Previously the `render*` and `decorate*` middleware was passed `(props, next)`. However now, for consistency with the other middleware they are all passed `(props, editor, next)`. This way, all middleware always receive `editor` and `next` as their final two arguments.

**The `normalize*` and `validate*` middleware signatures have changed!** Previously the `normalize*` and `validate*` middleware was passed `(node, next)`. However now, for consistency with the other middleware they are all passed `(node, editor, next)`. This way, all middleware always receive `editor` and `next` as their final two arguments.

**The `editor.event` method has been removed.** Previously this is what you'd use when writing tests to simulate events being fired—which were slightly different to other running other middleware. With the simplification to the editor and to the newly-consistent middleware signatures, you can now use `editor.run` directly to simulate events:

```js
editor.run('onKeyDown', { key: 'Tab', ... })
```

###### DEPRECATED

**The `editor.change` method is deprecated.** With the removal of the `Change` object, there's no need anymore to create the small closures with `editor.change()`. Instead you can directly invoke commands on the editor in series, and all of the changes will be emitted asynchronously on the next tick.

```js
editor
  .insertText('word')
  .moveFocusForward(10)
  .addMark('bold')
```

**The `applyOperations` method is deprecated.** Instead you can loop a set of operations and apply each one using `applyOperation`. This is to reduce the number of methods exposed on the `Editor` to keep it simpler.

**The `change.call` method is deprecated.** Previously this was used to call a one-off function as a change method. Now this behavior is equivalent to calling `editor.command(fn)` instead.

---

Fixes: https://github.com/ianstormtaylor/slate/issues/2334
Fixes: https://github.com/ianstormtaylor/slate/issues/2282
2018-10-27 12:18:23 -07:00
Ian Storm Taylor
633fc9eebc Publish
- slate-base64-serializer@0.2.76
 - slate-html-serializer@0.7.15
 - slate-hyperscript@0.11.6
 - slate-plain-serializer@0.6.15
 - slate-prop-types@0.5.6
 - slate-react@0.19.8
 - slate@0.42.6
2018-10-25 18:49:32 -07:00
Ian Storm Taylor
7f65eda65a Publish
- slate-base64-serializer@0.2.75
 - slate-html-serializer@0.7.14
 - slate-hyperscript@0.11.5
 - slate-plain-serializer@0.6.14
 - slate-prop-types@0.5.5
 - slate-react@0.19.7
 - slate@0.42.5
2018-10-25 12:40:50 -07:00
Kaspars Dancis
d5834bb5b0 Prevent crash when handling composition of 2+ keypresses when selection is not collapsed (#2218)
https://github.com/ianstormtaylor/slate/issues/1879
When composition starts and the current selection is not collapsed, the
second composition key-down would drop the text wrapping <spans> which
resulted on crash in content.updateSelection after composition ends
(because it cannot find <span> nodes in DOM). This is a workaround that
erases selection as soon as composition starts and preventing <spans>
to be dropped.
2018-10-25 09:47:29 -07:00
Kalley Powell
115cf469b9 Use <br /> inside empty block so those appear selected (#2300) 2018-10-25 09:41:43 -07:00
Ian Storm Taylor
29b762e9c2 Publish
- slate-base64-serializer@0.2.74
 - slate-html-serializer@0.7.13
 - slate-hyperscript@0.11.4
 - slate-plain-serializer@0.6.13
 - slate-prop-types@0.5.4
 - slate-react@0.19.6
 - slate@0.42.4
2018-10-24 16:09:16 -07:00
Ian Storm Taylor
bcc61a0bb2 Publish
- slate-hotkeys@0.2.7
 - slate-react@0.19.5
2018-10-24 14:52:39 -07:00
Kalley Powell
416590e1de Fix cloneFragment conditional handling of clipboardData.setData (#2298)
Seems the issue was introduced here: dc95ad66a5 (diff-dfb9fbad6106fa548b8335a644d03e49L109)

Remvoing the `return` ended  up calling `callback` twice instead of the intended once and both branches being followed
2018-10-24 14:41:06 -07:00
Ian Storm Taylor
ea6c4dcb08 Publish
- slate-base64-serializer@0.2.73
 - slate-hotkeys@0.2.6
 - slate-html-serializer@0.7.12
 - slate-hyperscript@0.11.3
 - slate-plain-serializer@0.6.12
 - slate-prop-types@0.5.3
 - slate-react@0.19.4
 - slate@0.42.3
2018-10-22 15:24:10 -07:00
Eric Edem
805c329e5d fix: use text utils to move forward and backward by word (#2169)
* fix: don't check for adjacent void with modified move

This was causing a problem where when the current text was followed by a void node using a modifier key to move forward would force the selection to creep forward a character at a time.

With this change, now the modifier will move as expected, but will jump over void nodes. This is not ideal, but seems like a behavior that will be slightly better than the current one.

* fix: modified key movement.

Use TextUtils.getWordOffsetForward and TextUtils.getWordOffsetBackward to move around by words.

The idea now is that if you move forward or backward, it is completely controlled by slate instead of trying to rely on a combination of browser behavior and slate trying to stop the browser from doing something wrong. This makes things quite a bit more intuitive in the implementation, and gives us a bit more control.

* tests: a whole bunch of selection movement tests.

* tests: more movement tests.
2018-10-22 11:21:20 -07:00
Ian Storm Taylor
d7123453c2 Publish
- slate-react@0.19.3
2018-10-10 09:52:54 -07:00
Ian Storm Taylor
6168ce932e fix editor resolution, remove constructor 2018-10-10 09:51:18 -07:00
Ian Storm Taylor
f939d168af Publish
- slate-base64-serializer@0.2.72
 - slate-html-serializer@0.7.11
 - slate-hyperscript@0.11.2
 - slate-plain-serializer@0.6.11
 - slate-prop-types@0.5.2
 - slate-react@0.19.2
 - slate@0.42.2
2018-10-09 18:46:54 -07:00
Ian Storm Taylor
3528bb7366 fix plugins stack ordering and defaulting 2018-10-09 18:43:47 -07:00
Ian Storm Taylor
7304c9b343 Publish
- slate-base64-serializer@0.2.71
 - slate-html-serializer@0.7.10
 - slate-hyperscript@0.11.1
 - slate-plain-serializer@0.6.10
 - slate-prop-types@0.5.1
 - slate-react@0.19.1
 - slate@0.42.1
2018-10-09 15:11:57 -07:00
Ian Storm Taylor
02c0f8e763 Publish
- slate-base64-serializer@0.2.70
 - slate-html-serializer@0.7.9
 - slate-hyperscript@0.11.0
 - slate-plain-serializer@0.6.9
 - slate-prop-types@0.5.0
 - slate-react@0.19.0
 - slate@0.42.0
2018-10-09 14:17:15 -07:00
Ian Storm Taylor
7a71de387c Add controller (#2221)
* fold Stack into Editor

* switch Change objects to be tied to editors, not values

* introduce controller

* add the "commands" concept

* convert history into commands on `value.data`

* add the ability to not normalize on editor creation/setting

* convert schema to a mutable constructor

* add editor.command method

* convert plugin handlers to receive `next`

* switch commands to use the onCommand middleware

* add queries support, convert schema to queries

* split out browser plugin

* remove noop util

* fixes

* fixes

* start fixing tests, refactor hyperscript to be more literal

* fix slate-html-serializer tests

* fix schema tests with hyperscript

* fix text model tests with hyperscript

* fix more tests

* get all tests passing

* fix lint

* undo decorations example update

* update examples

* small changes to the api to make it nicer

* update docs

* update commands/queries plugin logic

* change normalizeNode and validateNode to be middleware

* fix decoration removal

* rename commands tests

* add useful errors to existing APIs

* update changelogs

* cleanup

* fixes

* update docs

* add editor docs
2018-10-09 14:03:27 -07:00
Ian Storm Taylor
e6372d829a Publish
- slate-base64-serializer@0.2.69
 - slate-html-serializer@0.7.8
 - slate-hyperscript@0.10.8
 - slate-plain-serializer@0.6.8
 - slate-prop-types@0.4.67
 - slate-react@0.18.11
 - slate-simulator@0.4.67
 - slate@0.41.3
2018-10-09 12:49:32 -07:00