mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-31 10:51:44 +02:00
change wrapping transform arguments for consistency
This commit is contained in:
@@ -317,24 +317,24 @@ Remove a [`mark`](./mark.md) from the characters in a `range`. For convenience,
|
|||||||
Add or remove a [`mark`](./mark.md) from the characters in a `range`, depending on whether any of them already have the mark. For convenience, you can pass a `type` string or `properties` object to implicitly create a [`Mark`](./mark.md) of that type.
|
Add or remove a [`mark`](./mark.md) from the characters in a `range`, depending on whether any of them already have the mark. For convenience, you can pass a `type` string or `properties` object to implicitly create a [`Mark`](./mark.md) of that type.
|
||||||
|
|
||||||
### `unwrapBlockAtRange`
|
### `unwrapBlockAtRange`
|
||||||
`unwrapBlockAtRange(range: Selection, [type: String], [data: Data]) => Transform`
|
`unwrapBlockAtRange(range: Selection, properties: Object || String) => Transform`
|
||||||
|
|
||||||
Unwrap all [`Block`](./block.md) nodes in a `range` that match a `type` and/or `data`.
|
Unwrap all [`Block`](./block.md) nodes in a `range` that match `properties`. For convenience, you can pass a `type` string or `properties` object.
|
||||||
|
|
||||||
### `unwrapInlineAtRange`
|
### `unwrapInlineAtRange`
|
||||||
`unwrapInlineAtRange(range: Selection, [type: String], [data: Data]) => Transform`
|
`unwrapInlineAtRange(range: Selection, properties: Object || String) => Transform`
|
||||||
|
|
||||||
Unwrap all [`Inline`](./inline.md) nodes in a `range` that match a `type` and/or `data`.
|
Unwrap all [`Inline`](./inline.md) nodes in a `range` that match `properties`. For convenience, you can pass a `type` string or `properties` object.
|
||||||
|
|
||||||
### `wrapBlockAtRange`
|
### `wrapBlockAtRange`
|
||||||
`wrapBlockAtRange(range: Selection, type: String, [data: Data]) => Transform`
|
`wrapBlockAtRange(range: Selection, properties: Object || String) => Transform`
|
||||||
|
|
||||||
Wrap the [`Block`](./block.md) nodes in a `range` with a new [`Block`](./block.md) node of `type`, with optional `data`.
|
Wrap the [`Block`](./block.md) nodes in a `range` with a new [`Block`](./block.md) node with `properties`. For convenience, you can pass a `type` string or `properties` object.
|
||||||
|
|
||||||
### `wrapInlineAtRange`
|
### `wrapInlineAtRange`
|
||||||
`wrapInlineAtRange(range: Selection, type: String, [data: Data]) => Transform`
|
`wrapInlineAtRange(range: Selection, properties: Object || String) => Transform`
|
||||||
|
|
||||||
Wrap the [`Inline`](./inline.md) nodes in a `range` with a new [`Inline`](./inline.md) node of `type`, with optional `data`.
|
Wrap the [`Inline`](./inline.md) nodes in a `range` with a new [`Inline`](./inline.md) node with `properties`. For convenience, you can pass a `type` string or `properties` object.
|
||||||
|
|
||||||
|
|
||||||
## History Transforms
|
## History Transforms
|
||||||
|
@@ -745,26 +745,17 @@ const Transforms = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unwrap all of the block nodes in a `range` from a block node of `type.`
|
* Unwrap all of the block nodes in a `range` from a block with `properties`.
|
||||||
*
|
*
|
||||||
* @param {Selection} range
|
* @param {Selection} range
|
||||||
* @param {String} type (optional)
|
* @param {String or Object} properties
|
||||||
* @param {Data or Object} data (optional)
|
|
||||||
* @return {Node} node
|
* @return {Node} node
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unwrapBlockAtRange(range, type, data) {
|
unwrapBlockAtRange(range, properties) {
|
||||||
|
properties = normalizeProperties(properties)
|
||||||
let node = this
|
let node = this
|
||||||
|
|
||||||
// Allow for only data.
|
|
||||||
if (typeof type == 'object') {
|
|
||||||
data = type
|
|
||||||
type = null
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that data is immutable.
|
|
||||||
if (data) data = Data.create(data)
|
|
||||||
|
|
||||||
// Get the deepest blocks in the range.
|
// Get the deepest blocks in the range.
|
||||||
const blocks = node.getBlocksAtRange(range)
|
const blocks = node.getBlocksAtRange(range)
|
||||||
|
|
||||||
@@ -772,8 +763,8 @@ const Transforms = {
|
|||||||
const wrappers = blocks.reduce((memo, text) => {
|
const wrappers = blocks.reduce((memo, text) => {
|
||||||
const match = node.getClosest(text, (parent) => {
|
const match = node.getClosest(text, (parent) => {
|
||||||
if (parent.kind != 'block') return false
|
if (parent.kind != 'block') return false
|
||||||
if (type && parent.type != type) return false
|
if (properties.type && parent.type != properties.type) return false
|
||||||
if (data && !parent.data.isSuperset(data)) return false
|
if (properties.data && !parent.data.isSuperset(properties.data)) return false
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -846,34 +837,25 @@ const Transforms = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unwrap the inline nodes in a `range` from an parent inline with `type`.
|
* Unwrap the inline nodes in a `range` from an inline with `properties`.
|
||||||
*
|
*
|
||||||
* @param {Selection} range
|
* @param {Selection} range
|
||||||
* @param {String} type (optional)
|
* @param {String or Object} properties
|
||||||
* @param {Data} data (optional)
|
|
||||||
* @return {Node} node
|
* @return {Node} node
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unwrapInlineAtRange(range, type, data) {
|
unwrapInlineAtRange(range, properties) {
|
||||||
|
properties = normalizeProperties(properties)
|
||||||
let node = this
|
let node = this
|
||||||
let blocks = node.getInlinesAtRange(range)
|
let blocks = node.getInlinesAtRange(range)
|
||||||
|
|
||||||
// Allow for no type.
|
|
||||||
if (typeof type == 'object') {
|
|
||||||
data = type
|
|
||||||
type = null
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that data is immutable.
|
|
||||||
if (data) data = Data.create(data)
|
|
||||||
|
|
||||||
// Find the closest matching inline wrappers of each text node.
|
// Find the closest matching inline wrappers of each text node.
|
||||||
const texts = this.getTexts()
|
const texts = this.getTexts()
|
||||||
const wrappers = texts.reduce((memo, text) => {
|
const wrappers = texts.reduce((memo, text) => {
|
||||||
const match = node.getClosest(text, (parent) => {
|
const match = node.getClosest(text, (parent) => {
|
||||||
if (parent.kind != 'inline') return false
|
if (parent.kind != 'inline') return false
|
||||||
if (type && parent.type != type) return false
|
if (properties.type && parent.type != properties.type) return false
|
||||||
if (data && !parent.data.isSuperset(data)) return false
|
if (properties.data && !parent.data.isSuperset(properties.data)) return false
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -900,16 +882,15 @@ const Transforms = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrap all of the blocks in a `range` in a new block node of `type`.
|
* Wrap all of the blocks in a `range` in a new block with `properties`.
|
||||||
*
|
*
|
||||||
* @param {Selection} range
|
* @param {Selection} range
|
||||||
* @param {String} type
|
* @param {String or Object} properties
|
||||||
* @param {Data} data (optional)
|
|
||||||
* @return {Node} node
|
* @return {Node} node
|
||||||
*/
|
*/
|
||||||
|
|
||||||
wrapBlockAtRange(range, type, data) {
|
wrapBlockAtRange(range, properties) {
|
||||||
data = Data.create(data)
|
properties = normalizeProperties(properties)
|
||||||
let node = this
|
let node = this
|
||||||
|
|
||||||
// Get the block nodes, sorted by depth.
|
// Get the block nodes, sorted by depth.
|
||||||
@@ -936,8 +917,8 @@ const Transforms = {
|
|||||||
// Wrap the siblings in a new block.
|
// Wrap the siblings in a new block.
|
||||||
const wrapper = Block.create({
|
const wrapper = Block.create({
|
||||||
nodes: siblings,
|
nodes: siblings,
|
||||||
type,
|
type: properties.type,
|
||||||
data
|
data: properties.data
|
||||||
})
|
})
|
||||||
|
|
||||||
// Replace the siblings with the wrapper.
|
// Replace the siblings with the wrapper.
|
||||||
@@ -958,16 +939,15 @@ const Transforms = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrap the text and inline nodes in a `range` with a new inline node.
|
* Wrap the text and inlines in a `range` in a new inline with `properties`.
|
||||||
*
|
*
|
||||||
* @param {Selection} range
|
* @param {Selection} range
|
||||||
* @param {String} type
|
* @param {String or Object} properties
|
||||||
* @param {Data} data (optional)
|
|
||||||
* @return {Node} node
|
* @return {Node} node
|
||||||
*/
|
*/
|
||||||
|
|
||||||
wrapInlineAtRange(range, type, data) {
|
wrapInlineAtRange(range, properties) {
|
||||||
data = Data.create(data)
|
properties = normalizeProperties(properties)
|
||||||
let node = this
|
let node = this
|
||||||
|
|
||||||
// If collapsed, there's nothing to wrap.
|
// If collapsed, there's nothing to wrap.
|
||||||
@@ -1007,11 +987,11 @@ const Transforms = {
|
|||||||
|
|
||||||
// Iterate each of the child nodes, wrapping them.
|
// Iterate each of the child nodes, wrapping them.
|
||||||
children.forEach((child) => {
|
children.forEach((child) => {
|
||||||
const obj = {}
|
const wrapper = Inline.create({
|
||||||
obj.nodes = [child]
|
nodes: [child],
|
||||||
obj.type = type
|
type: properties.type,
|
||||||
if (data) obj.data = data
|
data: properties.data
|
||||||
const wrapper = Inline.create(obj)
|
})
|
||||||
|
|
||||||
// Replace the child in it's parent with the wrapper.
|
// Replace the child in it's parent with the wrapper.
|
||||||
const parent = node.getParent(child)
|
const parent = node.getParent(child)
|
||||||
|
@@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 0,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 0
|
|
||||||
})
|
|
||||||
|
|
||||||
return state
|
|
||||||
.transform()
|
|
||||||
.unwrapBlockAtRange(range, 'quote', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
}
|
|
@@ -12,6 +12,9 @@ export default function (state) {
|
|||||||
|
|
||||||
return state
|
return state
|
||||||
.transform()
|
.transform()
|
||||||
.wrapBlockAtRange(range, 'quote', { key: 'value' })
|
.unwrapBlockAtRange(range, {
|
||||||
|
type: 'quote',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
}
|
}
|
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: quote
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,28 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
import assert from 'assert'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 0,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 0
|
|
||||||
})
|
|
||||||
|
|
||||||
const next = state
|
|
||||||
.transform()
|
|
||||||
.moveTo(range)
|
|
||||||
.unwrapBlock('quote', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
|
|
||||||
assert.deepEqual(
|
|
||||||
next.selection.toJS(),
|
|
||||||
range.toJS()
|
|
||||||
)
|
|
||||||
|
|
||||||
return next
|
|
||||||
}
|
|
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: quote
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -15,7 +15,10 @@ export default function (state) {
|
|||||||
const next = state
|
const next = state
|
||||||
.transform()
|
.transform()
|
||||||
.moveTo(range)
|
.moveTo(range)
|
||||||
.unwrapBlock('quote', { key: 'value' })
|
.unwrapBlock({
|
||||||
|
type: 'quote',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
@@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 1,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 3
|
|
||||||
})
|
|
||||||
|
|
||||||
return state
|
|
||||||
.transform()
|
|
||||||
.unwrapInlineAtRange(range, 'hashtag', Data.create({ key: 'one' }))
|
|
||||||
.apply()
|
|
||||||
}
|
|
@@ -12,6 +12,9 @@ export default function (state) {
|
|||||||
|
|
||||||
return state
|
return state
|
||||||
.transform()
|
.transform()
|
||||||
.wrapInlineAtRange(range, 'hashtag', { key: 'value' })
|
.unwrapInlineAtRange(range, {
|
||||||
|
type: 'hashtag',
|
||||||
|
data: { key: 'one' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
}
|
}
|
@@ -1,21 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: one
|
|
||||||
nodes:
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: two
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: two
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -1,28 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
import assert from 'assert'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 1,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 3
|
|
||||||
})
|
|
||||||
|
|
||||||
const next = state
|
|
||||||
.transform()
|
|
||||||
.moveTo(range)
|
|
||||||
.unwrapInline('hashtag', Data.create({ key: 'one' }))
|
|
||||||
.apply()
|
|
||||||
|
|
||||||
assert.deepEqual(
|
|
||||||
next.selection.toJS(),
|
|
||||||
range.toJS()
|
|
||||||
)
|
|
||||||
|
|
||||||
return next
|
|
||||||
}
|
|
@@ -1,21 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: one
|
|
||||||
nodes:
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: two
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: two
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -15,7 +15,10 @@ export default function (state) {
|
|||||||
const next = state
|
const next = state
|
||||||
.transform()
|
.transform()
|
||||||
.moveTo(range)
|
.moveTo(range)
|
||||||
.unwrapInline('hashtag', { key: 'one' })
|
.unwrapInline({
|
||||||
|
type: 'hashtag',
|
||||||
|
data: { key: 'one' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
@@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 0,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 0
|
|
||||||
})
|
|
||||||
|
|
||||||
return state
|
|
||||||
.transform()
|
|
||||||
.wrapBlockAtRange(range, 'quote', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
}
|
|
@@ -12,6 +12,9 @@ export default function (state) {
|
|||||||
|
|
||||||
return state
|
return state
|
||||||
.transform()
|
.transform()
|
||||||
.unwrapBlockAtRange(range, 'quote', { key: 'value' })
|
.wrapBlockAtRange(range, {
|
||||||
|
type: 'quote',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
}
|
}
|
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: quote
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,28 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
import assert from 'assert'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 0,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 0
|
|
||||||
})
|
|
||||||
|
|
||||||
const next = state
|
|
||||||
.transform()
|
|
||||||
.moveTo(range)
|
|
||||||
.wrapBlock('quote', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
|
|
||||||
assert.deepEqual(
|
|
||||||
next.selection.toJS(),
|
|
||||||
range.toJS()
|
|
||||||
)
|
|
||||||
|
|
||||||
return next
|
|
||||||
}
|
|
@@ -1,12 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: quote
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -15,7 +15,10 @@ export default function (state) {
|
|||||||
const next = state
|
const next = state
|
||||||
.transform()
|
.transform()
|
||||||
.moveTo(range)
|
.moveTo(range)
|
||||||
.wrapBlock('quote', { key: 'value' })
|
.wrapBlock({
|
||||||
|
type: 'quote',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,19 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 1,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 3
|
|
||||||
})
|
|
||||||
|
|
||||||
return state
|
|
||||||
.transform()
|
|
||||||
.wrapInlineAtRange(range, 'hashtag', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -12,6 +12,9 @@ export default function (state) {
|
|||||||
|
|
||||||
return state
|
return state
|
||||||
.transform()
|
.transform()
|
||||||
.unwrapInlineAtRange(range, 'hashtag', { key: 'one' })
|
.wrapInlineAtRange(range, {
|
||||||
|
type: 'hashtag',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
}
|
}
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -1,35 +0,0 @@
|
|||||||
|
|
||||||
import { Data } from '../../../../..'
|
|
||||||
import assert from 'assert'
|
|
||||||
|
|
||||||
export default function (state) {
|
|
||||||
const { document, selection } = state
|
|
||||||
const texts = document.getTexts()
|
|
||||||
const first = texts.first()
|
|
||||||
const range = selection.merge({
|
|
||||||
anchorKey: first.key,
|
|
||||||
anchorOffset: 1,
|
|
||||||
focusKey: first.key,
|
|
||||||
focusOffset: 3
|
|
||||||
})
|
|
||||||
|
|
||||||
const next = state
|
|
||||||
.transform()
|
|
||||||
.moveTo(range)
|
|
||||||
.wrapInline('hashtag', Data.create({ key: 'value' }))
|
|
||||||
.apply()
|
|
||||||
|
|
||||||
const updated = next.document.getTexts().get(1)
|
|
||||||
|
|
||||||
assert.deepEqual(
|
|
||||||
next.selection.toJS(),
|
|
||||||
range.merge({
|
|
||||||
anchorKey: updated.key,
|
|
||||||
anchorOffset: 0,
|
|
||||||
focusKey: updated.key,
|
|
||||||
focusOffset: updated.length
|
|
||||||
}).toJS()
|
|
||||||
)
|
|
||||||
|
|
||||||
return next
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: word
|
|
@@ -1,16 +0,0 @@
|
|||||||
|
|
||||||
nodes:
|
|
||||||
- kind: block
|
|
||||||
type: paragraph
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: w
|
|
||||||
- kind: inline
|
|
||||||
type: hashtag
|
|
||||||
data:
|
|
||||||
key: value
|
|
||||||
nodes:
|
|
||||||
- kind: text
|
|
||||||
text: or
|
|
||||||
- kind: text
|
|
||||||
text: d
|
|
@@ -15,7 +15,10 @@ export default function (state) {
|
|||||||
const next = state
|
const next = state
|
||||||
.transform()
|
.transform()
|
||||||
.moveTo(range)
|
.moveTo(range)
|
||||||
.wrapInline('hashtag', { key: 'value' })
|
.wrapInline({
|
||||||
|
type: 'hashtag',
|
||||||
|
data: { key: 'value' }
|
||||||
|
})
|
||||||
.apply()
|
.apply()
|
||||||
|
|
||||||
const updated = next.document.getTexts().get(1)
|
const updated = next.document.getTexts().get(1)
|
Reference in New Issue
Block a user