1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-16 12:14:14 +02:00

Add data property to document. (#572)

* Add data property to `document`.
Add `setDocumentDataOperation' to set document data.
Change `Raw` serializer to take into account the document `data` property.
Update docs and tests.

* Make `setNode` operation working with document node.
Rewrite `setDocumentdataOperation` using `setNode`.

* Make 'setNodeByKey' working also with document node.

* Get rid of `setDocumentDataOperation`.
This commit is contained in:
AlbertHilb
2017-01-31 19:23:04 +01:00
committed by Ian Storm Taylor
parent 9adfc63a36
commit ca1e0d8c6d
53 changed files with 67 additions and 7 deletions

View File

@@ -12,6 +12,7 @@ Documents are made up of block nodes, inline nodes, and text nodes—just like i
In some places, you'll see mention of "fragments", which are also `Document` objects, just that aren't attached to the main `State`. For example, when cutting-and-pasting a selection of content, that content will be referred to as a document "fragment".
- [Properties](#properties)
- [`data`](#data)
- [`nodes`](#nodes)
- [Computed Properties](#computed-properties)
- [`kind`](#kind)
@@ -30,6 +31,11 @@ Document({
})
```
### `data`
`Immutable.Map`
Arbitrary data associated with the document. Defaults to an empty `Map`.
### `nodes`
`Immutable.List`

View File

@@ -10,10 +10,11 @@ import './inline'
* Dependencies.
*/
import Data from './data'
import Block from './block'
import Node from './node'
import generateKey from '../utils/generate-key'
import { List, Record } from 'immutable'
import { List, Map, Record } from 'immutable'
/**
* Default properties.
@@ -22,6 +23,7 @@ import { List, Record } from 'immutable'
*/
const DEFAULTS = {
data: new Map(),
key: null,
nodes: new List(),
}
@@ -45,6 +47,7 @@ class Document extends new Record(DEFAULTS) {
if (properties instanceof Document) return properties
properties.key = properties.key || generateKey()
properties.data = Data.create(properties.data)
properties.nodes = Block.createList(properties.nodes)
return new Document(properties)

View File

@@ -62,6 +62,7 @@ const Raw = {
deserializeDocument(object, options) {
return Document.create({
key: object.key,
data: object.data,
nodes: Block.createList(object.nodes.map((node) => {
return Raw.deserializeNode(node, options)
}))
@@ -254,6 +255,7 @@ const Raw = {
serializeDocument(document, options = {}) {
const object = {
data: document.data.toJSON(),
key: document.key,
kind: document.kind,
nodes: document.nodes
@@ -467,6 +469,7 @@ const Raw = {
const ret = {}
ret.nodes = object.nodes
if (object.key) ret.key = object.key
if (!isEmpty(object.data)) ret.data = object.data
return ret
},
@@ -679,6 +682,7 @@ const Raw = {
return {
kind: 'state',
document: {
data: object.data,
key: object.key,
kind: 'document',
nodes: object.nodes

View File

@@ -348,7 +348,7 @@ function setNode(state, operation) {
}
node = node.merge(properties)
document = document.updateDescendant(node)
document = node.kind === 'document' ? node : document.updateDescendant(node)
state = state.merge({ document })
return state
}

View File

@@ -255,8 +255,8 @@ export function setNodeByKey(transform, key, properties, options = {}) {
transform.setNodeOperation(path, properties)
if (normalize) {
const parent = document.getParent(key)
transform.normalizeNodeByKey(parent.key, SCHEMA)
const node = key === document.key ? document : document.getParent(key)
transform.normalizeNodeByKey(node.key, SCHEMA)
}
}

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: quote
isVoid: false

View File

@@ -1,4 +1,4 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: true

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: one
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: line
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: line
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: quote
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: true

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: quote
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: true

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,4 +1,5 @@
data: {}
nodes:
- type: paragraph
isVoid: false

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block

View File

@@ -1,6 +1,7 @@
kind: state
document:
data: {}
kind: document
nodes:
- kind: block