mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-21 22:45:18 +02:00
Remove the deprecated Character model, and methods that reference it (#2016)
Closes #1999
This commit is contained in:
committed by
Ian Storm Taylor
parent
1695f5a20c
commit
70d9e7951b
@@ -31,7 +31,6 @@
|
|||||||
|
|
||||||
* [Block](./reference/slate/block.md)
|
* [Block](./reference/slate/block.md)
|
||||||
* [Change](./reference/slate/change.md)
|
* [Change](./reference/slate/change.md)
|
||||||
* [Character](./reference/slate/character.md)
|
|
||||||
* [Data](./reference/slate/data.md)
|
* [Data](./reference/slate/data.md)
|
||||||
* [Document](./reference/slate/document.md)
|
* [Document](./reference/slate/document.md)
|
||||||
* [Inline](./reference/slate/inline.md)
|
* [Inline](./reference/slate/inline.md)
|
||||||
|
@@ -39,14 +39,6 @@ Ensure that a value is an immutable `List` of Slate [`Block`](../slate/block.md)
|
|||||||
|
|
||||||
Ensure that a value is a Slate `Change`.
|
Ensure that a value is a Slate `Change`.
|
||||||
|
|
||||||
### `character`
|
|
||||||
|
|
||||||
Ensure that a value is a Slate `Character`.
|
|
||||||
|
|
||||||
### `characters`
|
|
||||||
|
|
||||||
Ensure that a value is an immutable `List` of Slate [`Character`](../slate/character.md) objects.
|
|
||||||
|
|
||||||
### `data`
|
### `data`
|
||||||
|
|
||||||
Ensure that a value is a Slate `Data`.
|
Ensure that a value is a Slate `Data`.
|
||||||
|
@@ -1,70 +0,0 @@
|
|||||||
# `Character`
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { Character } from 'slate'
|
|
||||||
```
|
|
||||||
|
|
||||||
A character in a [`Text`](./text.md) node.
|
|
||||||
|
|
||||||
Characters are how Slate associates [`Marks`](./mark.md) with a range of text, for formatting.
|
|
||||||
|
|
||||||
## Properties
|
|
||||||
|
|
||||||
```js
|
|
||||||
Character({
|
|
||||||
marks: Immutable.Set<Mark>,
|
|
||||||
text: String
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
### `object`
|
|
||||||
|
|
||||||
`String`
|
|
||||||
|
|
||||||
A string with a value of `'character'`.
|
|
||||||
|
|
||||||
### `marks`
|
|
||||||
|
|
||||||
`Immutable.Set`
|
|
||||||
|
|
||||||
A set of [`Marks`](./mark.md) attached to the character.
|
|
||||||
|
|
||||||
### `text`
|
|
||||||
|
|
||||||
`String`
|
|
||||||
|
|
||||||
The text string of the character.
|
|
||||||
|
|
||||||
## Static Methods
|
|
||||||
|
|
||||||
### `Character.create`
|
|
||||||
|
|
||||||
`Character.create(properties: Object) => Character`
|
|
||||||
|
|
||||||
Create a character from a plain Javascript object of `properties`.
|
|
||||||
|
|
||||||
### `Character.createList`
|
|
||||||
|
|
||||||
`Character.createList(array: Array) => List`
|
|
||||||
|
|
||||||
Create a list of characters from a plain Javascript `array`.
|
|
||||||
|
|
||||||
### `Character.fromJSON`
|
|
||||||
|
|
||||||
`Character.fromJSON(object: Object) => Character`
|
|
||||||
|
|
||||||
Create a character from a JSON `object`.
|
|
||||||
|
|
||||||
### `Character.isCharacter`
|
|
||||||
|
|
||||||
`Character.isCharacter(maybeCharacter: Any) => Boolean`
|
|
||||||
|
|
||||||
Returns a boolean if the passed in argument is a `Character`.
|
|
||||||
|
|
||||||
## Instance Methods
|
|
||||||
|
|
||||||
### `toJSON`
|
|
||||||
|
|
||||||
`toJSON() => Object`
|
|
||||||
|
|
||||||
Returns a JSON representation of the character.
|
|
@@ -4,7 +4,7 @@
|
|||||||
import { Mark } from 'slate'
|
import { Mark } from 'slate'
|
||||||
```
|
```
|
||||||
|
|
||||||
A formatting mark that can be associated with [`Characters`](./character.md). Marks are how Slate represents rich formatting like **bold** or _italic_.
|
A formatting mark that can be associated with characters. Marks are how Slate represents rich formatting like **bold** or _italic_.
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
|
@@ -73,18 +73,6 @@ Get all of the bottom-most [`Block`](./block.md) nodes in a `range`.
|
|||||||
|
|
||||||
Get all of the bottom-most [`Block`](./block.md) nodes by `type`.
|
Get all of the bottom-most [`Block`](./block.md) nodes by `type`.
|
||||||
|
|
||||||
### `getCharacters`
|
|
||||||
|
|
||||||
`getCharacters() => List`
|
|
||||||
|
|
||||||
Get a list of all of the [`Characters`](./character.md) in the node.
|
|
||||||
|
|
||||||
### `getCharactersAtRange`
|
|
||||||
|
|
||||||
`getCharactersAtRange(range: Range) => List`
|
|
||||||
|
|
||||||
Get a list of all of the [`Characters`](./character.md) in a `range`.
|
|
||||||
|
|
||||||
### `getChild`
|
### `getChild`
|
||||||
|
|
||||||
`getChild(path: List|Array) => Node|Void`
|
`getChild(path: List|Array) => Node|Void`
|
||||||
|
@@ -10,15 +10,10 @@ A text node in a Slate [`Document`](./document.md). Text nodes are always the bo
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
Text({
|
Text({
|
||||||
characters: Immutable.List<Character>,
|
key: String,
|
||||||
key: String
|
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
### `characters`
|
|
||||||
|
|
||||||
A list of [`Characters`](./character.md) with associated [`Marks`](./mark.md) that make up the text node's content.
|
|
||||||
|
|
||||||
### `key`
|
### `key`
|
||||||
|
|
||||||
`String`
|
`String`
|
||||||
|
@@ -117,12 +117,6 @@ Get a list of the lowest-depth [`Inline`](./inline.md) nodes in the current sele
|
|||||||
|
|
||||||
Get a list of the [`Text`](./text.md) nodes in the current selection.
|
Get a list of the [`Text`](./text.md) nodes in the current selection.
|
||||||
|
|
||||||
### `characters`
|
|
||||||
|
|
||||||
`List`
|
|
||||||
|
|
||||||
Get a list of the [`Character`](./character.md) objects in the current selection.
|
|
||||||
|
|
||||||
### `hasUndos`
|
### `hasUndos`
|
||||||
|
|
||||||
`Boolean`
|
`Boolean`
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
Block,
|
Block,
|
||||||
Change,
|
Change,
|
||||||
Character,
|
|
||||||
Data,
|
Data,
|
||||||
Document,
|
Document,
|
||||||
History,
|
History,
|
||||||
@@ -59,8 +58,6 @@ const Types = {
|
|||||||
block: create('Block', v => Block.isBlock(v)),
|
block: create('Block', v => Block.isBlock(v)),
|
||||||
blocks: create('List<Block>', v => Block.isBlockList(v)),
|
blocks: create('List<Block>', v => Block.isBlockList(v)),
|
||||||
change: create('Change', v => Change.isChange(v)),
|
change: create('Change', v => Change.isChange(v)),
|
||||||
character: create('Character', v => Character.isCharacter(v)),
|
|
||||||
characters: create('List<Character>', v => Character.isCharacterList(v)),
|
|
||||||
data: create('Data', v => Data.isData(v)),
|
data: create('Data', v => Data.isData(v)),
|
||||||
document: create('Document', v => Document.isDocument(v)),
|
document: create('Document', v => Document.isDocument(v)),
|
||||||
history: create('History', v => History.isHistory(v)),
|
history: create('History', v => History.isHistory(v)),
|
||||||
|
@@ -7,7 +7,6 @@
|
|||||||
const MODEL_TYPES = {
|
const MODEL_TYPES = {
|
||||||
BLOCK: '@@__SLATE_BLOCK__@@',
|
BLOCK: '@@__SLATE_BLOCK__@@',
|
||||||
CHANGE: '@@__SLATE_CHANGE__@@',
|
CHANGE: '@@__SLATE_CHANGE__@@',
|
||||||
CHARACTER: '@@__SLATE_CHARACTER__@@',
|
|
||||||
DOCUMENT: '@@__SLATE_DOCUMENT__@@',
|
DOCUMENT: '@@__SLATE_DOCUMENT__@@',
|
||||||
HISTORY: '@@__SLATE_HISTORY__@@',
|
HISTORY: '@@__SLATE_HISTORY__@@',
|
||||||
INLINE: '@@__SLATE_INLINE__@@',
|
INLINE: '@@__SLATE_INLINE__@@',
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
import Block from './models/block'
|
import Block from './models/block'
|
||||||
import Change from './models/change'
|
import Change from './models/change'
|
||||||
import Changes from './changes'
|
import Changes from './changes'
|
||||||
import Character from './models/character'
|
|
||||||
import Data from './models/data'
|
import Data from './models/data'
|
||||||
import Document from './models/document'
|
import Document from './models/document'
|
||||||
import History from './models/history'
|
import History from './models/history'
|
||||||
@@ -33,7 +32,6 @@ export {
|
|||||||
Block,
|
Block,
|
||||||
Change,
|
Change,
|
||||||
Changes,
|
Changes,
|
||||||
Character,
|
|
||||||
Data,
|
Data,
|
||||||
Document,
|
Document,
|
||||||
History,
|
History,
|
||||||
@@ -61,7 +59,6 @@ export {
|
|||||||
export default {
|
export default {
|
||||||
Block,
|
Block,
|
||||||
Changes,
|
Changes,
|
||||||
Character,
|
|
||||||
Data,
|
Data,
|
||||||
Document,
|
Document,
|
||||||
History,
|
History,
|
||||||
|
@@ -1,175 +0,0 @@
|
|||||||
import isPlainObject from 'is-plain-object'
|
|
||||||
import logger from 'slate-dev-logger'
|
|
||||||
import { List, Record, Set } from 'immutable'
|
|
||||||
|
|
||||||
import MODEL_TYPES, { isType } from '../constants/model-types'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default properties.
|
|
||||||
*
|
|
||||||
* @type {Object}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const DEFAULTS = {
|
|
||||||
marks: new Set(),
|
|
||||||
text: '',
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Character.
|
|
||||||
*
|
|
||||||
* @type {Character}
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Character extends Record(DEFAULTS) {
|
|
||||||
/**
|
|
||||||
* Create a `Character` with `attrs`.
|
|
||||||
*
|
|
||||||
* @param {Object|String|Character} attrs
|
|
||||||
* @return {Character}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static create(attrs = {}) {
|
|
||||||
if (Character.isCharacter(attrs)) {
|
|
||||||
return attrs
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof attrs == 'string') {
|
|
||||||
attrs = { text: attrs }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isPlainObject(attrs)) {
|
|
||||||
return Character.fromJSON(attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error(
|
|
||||||
`\`Character.create\` only accepts objects, strings or characters, but you passed it: ${attrs}`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a list of `Characters` from `elements`.
|
|
||||||
*
|
|
||||||
* @param {String|Array<Object|Character|String>|List<Object|Character|String>} elements
|
|
||||||
* @return {List<Character>}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static createList(elements = []) {
|
|
||||||
if (typeof elements == 'string') {
|
|
||||||
elements = elements.split('')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (List.isList(elements) || Array.isArray(elements)) {
|
|
||||||
const list = new List(elements.map(Character.create))
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error(
|
|
||||||
`\`Block.createList\` only accepts strings, arrays or lists, but you passed it: ${elements}`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a `Character` from a JSON `object`.
|
|
||||||
*
|
|
||||||
* @param {Object} object
|
|
||||||
* @return {Character}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static fromJSON(object) {
|
|
||||||
const { text, marks = [] } = object
|
|
||||||
|
|
||||||
if (typeof text != 'string') {
|
|
||||||
throw new Error('`Character.fromJSON` requires a block `text` string.')
|
|
||||||
}
|
|
||||||
|
|
||||||
const character = new Character({
|
|
||||||
text,
|
|
||||||
marks: new Set(marks),
|
|
||||||
})
|
|
||||||
|
|
||||||
return character
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alias `fromJS`.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static fromJS = Character.fromJSON
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if `any` is a `Character`.
|
|
||||||
*
|
|
||||||
* @param {Any} any
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static isCharacter = isType.bind(null, 'CHARACTER')
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if `any` is a character list.
|
|
||||||
*
|
|
||||||
* @param {Any} any
|
|
||||||
* @return {Boolean}
|
|
||||||
*/
|
|
||||||
|
|
||||||
static isCharacterList(any) {
|
|
||||||
return List.isList(any) && any.every(item => Character.isCharacter(item))
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object.
|
|
||||||
*
|
|
||||||
* @return {String}
|
|
||||||
*/
|
|
||||||
|
|
||||||
get object() {
|
|
||||||
return 'character'
|
|
||||||
}
|
|
||||||
|
|
||||||
get kind() {
|
|
||||||
logger.deprecate(
|
|
||||||
'slate@0.32.0',
|
|
||||||
'The `kind` property of Slate objects has been renamed to `object`.'
|
|
||||||
)
|
|
||||||
return this.object
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return a JSON representation of the character.
|
|
||||||
*
|
|
||||||
* @return {Object}
|
|
||||||
*/
|
|
||||||
|
|
||||||
toJSON() {
|
|
||||||
const object = {
|
|
||||||
object: this.object,
|
|
||||||
text: this.text,
|
|
||||||
marks: this.marks.toArray().map(m => m.toJSON()),
|
|
||||||
}
|
|
||||||
|
|
||||||
return object
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alias `toJS`.
|
|
||||||
*/
|
|
||||||
|
|
||||||
toJS() {
|
|
||||||
return this.toJSON()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attach a pseudo-symbol for type checking.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Character.prototype[MODEL_TYPES.CHARACTER] = true
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*
|
|
||||||
* @type {Character}
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default Character
|
|
@@ -3,7 +3,6 @@ import logger from 'slate-dev-logger'
|
|||||||
import { List, Record, Set } from 'immutable'
|
import { List, Record, Set } from 'immutable'
|
||||||
|
|
||||||
import MODEL_TYPES, { isType } from '../constants/model-types'
|
import MODEL_TYPES, { isType } from '../constants/model-types'
|
||||||
import Character from './character'
|
|
||||||
import Mark from './mark'
|
import Mark from './mark'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -238,31 +237,6 @@ class Leaf extends Record(DEFAULTS) {
|
|||||||
return this.object
|
return this.object
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return leaf as a list of characters
|
|
||||||
*
|
|
||||||
* @return {List<Character>}
|
|
||||||
*/
|
|
||||||
|
|
||||||
getCharacters() {
|
|
||||||
logger.deprecate(
|
|
||||||
'slate@0.34.0',
|
|
||||||
'The `characters` property of Slate objects is deprecated'
|
|
||||||
)
|
|
||||||
|
|
||||||
const { marks } = this
|
|
||||||
const characters = Character.createList(
|
|
||||||
this.text.split('').map(char => {
|
|
||||||
return Character.create({
|
|
||||||
text: char,
|
|
||||||
marks,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
return characters
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update a `mark` at leaf, replace with newMark
|
* Update a `mark` at leaf, replace with newMark
|
||||||
*
|
*
|
||||||
|
@@ -207,7 +207,6 @@ class Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
<<<<<<< HEAD
|
|
||||||
* Create a point with `properties` relative to the node.
|
* Create a point with `properties` relative to the node.
|
||||||
*
|
*
|
||||||
* @param {Object|Point} properties
|
* @param {Object|Point} properties
|
||||||
@@ -222,9 +221,6 @@ class Node {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a range with `properties` relative to the node.
|
* Create a range with `properties` relative to the node.
|
||||||
=======
|
|
||||||
* Create a new range with `properties` relative to the node.
|
|
||||||
>>>>>>> master
|
|
||||||
*
|
*
|
||||||
* @param {Object|Range} properties
|
* @param {Object|Range} properties
|
||||||
* @return {Range}
|
* @return {Range}
|
||||||
@@ -481,47 +477,6 @@ class Node {
|
|||||||
}, [])
|
}, [])
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all of the characters for every text node.
|
|
||||||
*
|
|
||||||
* @return {List<Character>}
|
|
||||||
*/
|
|
||||||
|
|
||||||
getCharacters() {
|
|
||||||
const characters = this.getTexts().flatMap(t => t.characters)
|
|
||||||
return characters
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of the characters in a `range`.
|
|
||||||
*
|
|
||||||
* @param {Range} range
|
|
||||||
* @return {List<Character>}
|
|
||||||
*/
|
|
||||||
|
|
||||||
getCharactersAtRange(range) {
|
|
||||||
range = this.resolveRange(range)
|
|
||||||
if (range.isUnset) return List()
|
|
||||||
|
|
||||||
const { start, end } = range
|
|
||||||
|
|
||||||
if (start.key === end.key) {
|
|
||||||
const endText = this.getDescendant(end.key)
|
|
||||||
return endText.characters.slice(start.offset, end.offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.getTextsAtRange(range).flatMap(t => {
|
|
||||||
if (t.key === start.key) {
|
|
||||||
return t.characters.slice(start.offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (t.key === end.key) {
|
|
||||||
return t.characters.slice(0, end.offset)
|
|
||||||
}
|
|
||||||
return t.characters
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a child node.
|
* Get a child node.
|
||||||
*
|
*
|
||||||
@@ -2032,7 +1987,6 @@ class Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
<<<<<<< HEAD
|
|
||||||
* Resolve a `point`, relative to the node, ensuring that the keys and
|
* Resolve a `point`, relative to the node, ensuring that the keys and
|
||||||
* offsets in the point exist and that they are synced with the paths.
|
* offsets in the point exist and that they are synced with the paths.
|
||||||
*
|
*
|
||||||
@@ -2047,8 +2001,6 @@ class Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
=======
|
|
||||||
>>>>>>> master
|
|
||||||
* Resolve a `range`, relative to the node, ensuring that the keys and
|
* Resolve a `range`, relative to the node, ensuring that the keys and
|
||||||
* offsets in the range exist and that they are synced with the paths.
|
* offsets in the range exist and that they are synced with the paths.
|
||||||
*
|
*
|
||||||
|
@@ -191,16 +191,6 @@ class Text extends Record(DEFAULTS) {
|
|||||||
return this.leaves.reduce((string, leaf) => string + leaf.text, '')
|
return this.leaves.reduce((string, leaf) => string + leaf.text, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the concatenated characters of the node;
|
|
||||||
*
|
|
||||||
* @returns {String}
|
|
||||||
*/
|
|
||||||
|
|
||||||
get characters() {
|
|
||||||
return this.leaves.flatMap(x => x.getCharacters())
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the 'first' leaf at offset; By 'first' the alorighthm prefers `endOffset === offset` than `startOffset === offset`
|
* Find the 'first' leaf at offset; By 'first' the alorighthm prefers `endOffset === offset` than `startOffset === offset`
|
||||||
* Corner Cases:
|
* Corner Cases:
|
||||||
|
@@ -448,18 +448,6 @@ class Value extends Record(DEFAULTS) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the characters in the current selection.
|
|
||||||
*
|
|
||||||
* @return {List<Character>}
|
|
||||||
*/
|
|
||||||
|
|
||||||
get characters() {
|
|
||||||
return this.selection.isUnset
|
|
||||||
? new List()
|
|
||||||
: this.document.getCharactersAtRange(this.selection)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the marks of the current selection.
|
* Get the marks of the current selection.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user