mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-07-31 20:40:19 +02:00
Add method createFromRanges to Text
This commit is contained in:
@@ -16,7 +16,8 @@ A text node in a Slate [`Document`](./document.md). Text nodes are always the bo
|
||||
- [`text`](#text)
|
||||
- [Static Methods](#static-methods)
|
||||
- [`Text.create`](#textcreate)
|
||||
|
||||
- [`Text.createFromString`](#textcreatefromstring)
|
||||
- [`Text.createFromRanges`](#textcreatefromranges)
|
||||
|
||||
## Properties
|
||||
|
||||
@@ -61,3 +62,13 @@ A concatenated string of all of the characters in the text node.
|
||||
`Text.create(properties: Object) => Text`
|
||||
|
||||
Create a text from a plain Javascript object of `properties`.
|
||||
|
||||
### `Text.createFromRanges`
|
||||
`Text.createFromRanges(ranges: List<Range>) => Text`
|
||||
|
||||
Create a text from a list of text ranges.
|
||||
|
||||
### `Text.createFromString`
|
||||
`Text.createFromString(text: String, marks: Set) => Text`
|
||||
|
||||
Create a text from a plain `String` and a set of marks.
|
||||
|
69
src/models/range.js
Normal file
69
src/models/range.js
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
import Character from './character'
|
||||
import Mark from './mark'
|
||||
import { Record, Set } from 'immutable'
|
||||
|
||||
/**
|
||||
* Default properties.
|
||||
*/
|
||||
|
||||
const DEFAULTS = {
|
||||
marks: new Set(),
|
||||
text: ''
|
||||
}
|
||||
|
||||
/**
|
||||
* Range.
|
||||
*/
|
||||
|
||||
class Range extends new Record(DEFAULTS) {
|
||||
|
||||
/**
|
||||
* Create a new `Range` with `properties`.
|
||||
*
|
||||
* @param {Object} properties
|
||||
* @return {Range}
|
||||
*/
|
||||
|
||||
static create(properties = {}) {
|
||||
if (properties instanceof Range) return properties
|
||||
properties.text = properties.text
|
||||
properties.marks = Mark.createSet(properties.marks)
|
||||
return new Range(properties)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the node's kind.
|
||||
*
|
||||
* @return {String} kind
|
||||
*/
|
||||
|
||||
get kind() {
|
||||
return 'range'
|
||||
}
|
||||
|
||||
/**
|
||||
* Return range as a list of characters
|
||||
*
|
||||
* @return {List<Character>} characters
|
||||
*/
|
||||
|
||||
getCharacters() {
|
||||
const { marks } = this
|
||||
|
||||
return Character.createList(this.text
|
||||
.split('')
|
||||
.map((char) => {
|
||||
return Character.create({
|
||||
text: char,
|
||||
marks
|
||||
})
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export.
|
||||
*/
|
||||
|
||||
export default Range
|
@@ -1,20 +1,11 @@
|
||||
|
||||
import Character from './character'
|
||||
import Mark from './mark'
|
||||
import Range from './range'
|
||||
import memoize from '../utils/memoize'
|
||||
import uid from '../utils/uid'
|
||||
import { List, Record, Set } from 'immutable'
|
||||
|
||||
/**
|
||||
* Range.
|
||||
*/
|
||||
|
||||
const Range = new Record({
|
||||
kind: 'range',
|
||||
marks: new Set(),
|
||||
text: ''
|
||||
})
|
||||
|
||||
/**
|
||||
* Default properties.
|
||||
*/
|
||||
@@ -47,19 +38,30 @@ class Text extends new Record(DEFAULTS) {
|
||||
/**
|
||||
* Create a new `Text` from a string
|
||||
*
|
||||
* @param {String} content
|
||||
* @param {String} text
|
||||
* @param {Set<Mark>} marks (optional)
|
||||
* @return {Text}
|
||||
*/
|
||||
|
||||
static createFromString(content, marks = Set()) {
|
||||
static createFromString(text, marks = Set()) {
|
||||
return Text.createFromRanges([
|
||||
Range.create({ text, marks })
|
||||
])
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new `Text` from a list of ranges
|
||||
*
|
||||
* @param {List<Range> | Array<Range>} ranges
|
||||
* @return {Text}
|
||||
*/
|
||||
|
||||
static createFromRanges(ranges) {
|
||||
return Text.create({
|
||||
characters: Character.createList(
|
||||
content.split('')
|
||||
.map(c => {
|
||||
return { text: c, marks }
|
||||
})
|
||||
)
|
||||
characters: ranges.reduce((characters, range) => {
|
||||
range = Range.create(range)
|
||||
return characters.concat(range.getCharacters())
|
||||
}, Character.createList())
|
||||
})
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user