mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-09-02 11:42:53 +02:00
remove unnecessary models
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -89,7 +89,6 @@ function renderNode(node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
debugger
|
|
||||||
throw new Error(`Unknown node type "${node.type}".`)
|
throw new Error(`Unknown node type "${node.type}".`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import Text from './text'
|
import Text from './text'
|
||||||
import TextNode from '../models/text-node'
|
import TextModel from '../models/text'
|
||||||
import findSelection from '../utils/find-selection'
|
import findSelection from '../utils/find-selection'
|
||||||
import keycode from 'keycode'
|
import keycode from 'keycode'
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ class Content extends React.Component {
|
|||||||
renderNode(node) {
|
renderNode(node) {
|
||||||
const { renderMark, renderNode, state } = this.props
|
const { renderMark, renderNode, state } = this.props
|
||||||
|
|
||||||
if (node instanceof TextNode) {
|
if (node instanceof TextModel) {
|
||||||
return (
|
return (
|
||||||
<Text
|
<Text
|
||||||
key={node.key}
|
key={node.key}
|
||||||
|
17
lib/index.js
17
lib/index.js
@@ -1,9 +1,19 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* Components.
|
||||||
|
*/
|
||||||
|
|
||||||
import Editor from './components/editor'
|
import Editor from './components/editor'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Models.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Character from './models/character'
|
||||||
import Node from './models/node'
|
import Node from './models/node'
|
||||||
import NodeMap from './models/node-map'
|
|
||||||
import Selection from './models/selection'
|
import Selection from './models/selection'
|
||||||
import State from './models/state'
|
import State from './models/state'
|
||||||
|
import Text from './models/text'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Export.
|
* Export.
|
||||||
@@ -11,8 +21,9 @@ import State from './models/state'
|
|||||||
|
|
||||||
export default Editor
|
export default Editor
|
||||||
export {
|
export {
|
||||||
|
Character,
|
||||||
Node,
|
Node,
|
||||||
NodeMap,
|
|
||||||
Selection,
|
Selection,
|
||||||
State
|
State,
|
||||||
|
Text
|
||||||
}
|
}
|
||||||
|
@@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
import Character from './character'
|
|
||||||
import { List } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Character list.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class CharacterList extends List {
|
|
||||||
|
|
||||||
static create(attrs = []) {
|
|
||||||
attrs = attrs.map(character => Character.create(character))
|
|
||||||
return new CharacterList(attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default CharacterList
|
|
@@ -1,14 +1,13 @@
|
|||||||
|
|
||||||
import MarkList from './mark-list'
|
import { List, Record } from 'immutable'
|
||||||
import { Record } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Record.
|
* Record.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const CharacterRecord = new Record({
|
const CharacterRecord = new Record({
|
||||||
text: '',
|
marks: new List(),
|
||||||
marks: new MarkList()
|
text: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17,13 +16,31 @@ const CharacterRecord = new Record({
|
|||||||
|
|
||||||
class Character extends CharacterRecord {
|
class Character extends CharacterRecord {
|
||||||
|
|
||||||
static create(attrs) {
|
/**
|
||||||
|
* Create a character record from a Javascript `object`.
|
||||||
|
*
|
||||||
|
* @param {Object} object
|
||||||
|
* @return {Character} character
|
||||||
|
*/
|
||||||
|
|
||||||
|
static create(object) {
|
||||||
return new Character({
|
return new Character({
|
||||||
text: attrs.text,
|
text: object.text,
|
||||||
marks: MarkList.create(attrs.marks)
|
marks: new List(object.marks)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a list of characters from a Javascript `array`.
|
||||||
|
*
|
||||||
|
* @param {Array} array
|
||||||
|
* @return {List} characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
static createList(array) {
|
||||||
|
return new List(array.map(object => Character.create(object)))
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,22 +0,0 @@
|
|||||||
|
|
||||||
import Mark from './mark'
|
|
||||||
import { List } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark list.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class MarkList extends List {
|
|
||||||
|
|
||||||
static create(attrs = []) {
|
|
||||||
attrs = attrs.map(mark => Mark.create(mark))
|
|
||||||
return new MarkList(attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default MarkList
|
|
@@ -1,29 +0,0 @@
|
|||||||
|
|
||||||
import { Map, Record } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Record.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const MarkRecord = new Record({
|
|
||||||
type: null,
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Mark extends MarkRecord {
|
|
||||||
|
|
||||||
static create(attrs) {
|
|
||||||
if (typeof attrs == 'string') attrs = { type: attrs }
|
|
||||||
return new Mark(attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default Mark
|
|
@@ -1,45 +0,0 @@
|
|||||||
|
|
||||||
import Node from './node'
|
|
||||||
import TextNode from './text-node'
|
|
||||||
import { OrderedMap } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Node map.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class NodeMap extends OrderedMap {
|
|
||||||
|
|
||||||
static create(attrs) {
|
|
||||||
if (attrs instanceof Array) {
|
|
||||||
attrs = attrs.reduce((map, node) => {
|
|
||||||
map[node.key] = node.type == 'text'
|
|
||||||
? TextNode.create(node)
|
|
||||||
: Node.create(node)
|
|
||||||
return map
|
|
||||||
}, {})
|
|
||||||
}
|
|
||||||
|
|
||||||
return new NodeMap(attrs)
|
|
||||||
}
|
|
||||||
|
|
||||||
filterDeep(...args) {
|
|
||||||
const shallow = this.filter(...args)
|
|
||||||
const deep = shallow.map(node => node.children.filter(...args))
|
|
||||||
const all = shallow.reduce((map, node, key) => {
|
|
||||||
map = map.concat(node)
|
|
||||||
map = map.concat(deep.get(key))
|
|
||||||
return map
|
|
||||||
}, new NodeMap())
|
|
||||||
|
|
||||||
debugger
|
|
||||||
|
|
||||||
return all
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default NodeMap
|
|
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
import NodeMap from './node-map'
|
import Text from './text'
|
||||||
import TextNode from './text-node'
|
|
||||||
import { Map, OrderedMap, Record } from 'immutable'
|
import { Map, OrderedMap, Record } from 'immutable'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8,10 +7,10 @@ import { Map, OrderedMap, Record } from 'immutable'
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const NodeRecord = new Record({
|
const NodeRecord = new Record({
|
||||||
key: null,
|
children: new OrderedMap(),
|
||||||
type: null,
|
|
||||||
data: new Map(),
|
data: new Map(),
|
||||||
children: new NodeMap(),
|
key: null,
|
||||||
|
type: null
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -20,19 +19,33 @@ const NodeRecord = new Record({
|
|||||||
|
|
||||||
class Node extends NodeRecord {
|
class Node extends NodeRecord {
|
||||||
|
|
||||||
static create(attrs) {
|
/**
|
||||||
|
* Create a node record from a Javascript `object`.
|
||||||
|
*
|
||||||
|
* @param {Object} object
|
||||||
|
* @return {Node} node
|
||||||
|
*/
|
||||||
|
|
||||||
|
static create(object) {
|
||||||
return new Node({
|
return new Node({
|
||||||
key: attrs.key,
|
key: object.key,
|
||||||
type: attrs.type,
|
type: object.type,
|
||||||
data: new Map(attrs.data),
|
data: new Map(object.data),
|
||||||
children: Node.createMap(attrs.children)
|
children: Node.createMap(object.children)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an ordered map of nodes from a Javascript `array` of nodes.
|
||||||
|
*
|
||||||
|
* @param {Array} array
|
||||||
|
* @return {OrderedMap} nodes
|
||||||
|
*/
|
||||||
|
|
||||||
static createMap(array) {
|
static createMap(array) {
|
||||||
return new OrderedMap(array.reduce((map, node) => {
|
return new OrderedMap(array.reduce((map, node) => {
|
||||||
map[node.key] = node.type == 'text'
|
map[node.key] = node.type == 'text'
|
||||||
? TextNode.create(node)
|
? Text.create(node)
|
||||||
: Node.create(node)
|
: Node.create(node)
|
||||||
return map
|
return map
|
||||||
}, {}))
|
}, {}))
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
import Selection from './selection'
|
import Selection from './selection'
|
||||||
import NodeMap from './node-map'
|
|
||||||
import Node from './node'
|
import Node from './node'
|
||||||
import toCamel from 'to-camel-case'
|
import toCamel from 'to-camel-case'
|
||||||
import { OrderedMap, Record } from 'immutable'
|
import { OrderedMap, Record } from 'immutable'
|
||||||
@@ -10,7 +9,7 @@ import { OrderedMap, Record } from 'immutable'
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const StateRecord = new Record({
|
const StateRecord = new Record({
|
||||||
nodes: new NodeMap(),
|
nodes: new OrderedMap(),
|
||||||
selection: new Selection()
|
selection: new Selection()
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -28,7 +27,7 @@ class State extends StateRecord {
|
|||||||
|
|
||||||
static create(attrs) {
|
static create(attrs) {
|
||||||
return new State({
|
return new State({
|
||||||
nodes: NodeMap.create(attrs.nodes),
|
nodes: Node.createMap(attrs.nodes),
|
||||||
selection: Selection.create(attrs.selection)
|
selection: Selection.create(attrs.selection)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -1,35 +0,0 @@
|
|||||||
|
|
||||||
import CharacterList from './character-list'
|
|
||||||
import convertRangesToCharacters from '../utils/convert-ranges-to-characters'
|
|
||||||
import { Record } from 'immutable'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Record.
|
|
||||||
*/
|
|
||||||
|
|
||||||
const TextNodeRecord = new Record({
|
|
||||||
key: null,
|
|
||||||
characters: new CharacterList()
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TextNode.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class TextNode extends TextNodeRecord {
|
|
||||||
|
|
||||||
static create(attrs) {
|
|
||||||
const characters = convertRangesToCharacters(attrs.ranges)
|
|
||||||
return new TextNode({
|
|
||||||
key: attrs.key,
|
|
||||||
characters
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Export.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export default TextNode
|
|
41
lib/models/text.js
Normal file
41
lib/models/text.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
import convertRangesToCharacters from '../utils/convert-ranges-to-characters'
|
||||||
|
import { List, Record } from 'immutable'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Record.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const TextRecord = new Record({
|
||||||
|
characters: new List,
|
||||||
|
key: null
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Text extends TextRecord {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a text record from a Javascript `object`.
|
||||||
|
*
|
||||||
|
* @param {Object} object
|
||||||
|
* @return {Node} node
|
||||||
|
*/
|
||||||
|
|
||||||
|
static create(attrs) {
|
||||||
|
const characters = convertRangesToCharacters(attrs.ranges)
|
||||||
|
return new Text({
|
||||||
|
key: attrs.key,
|
||||||
|
characters
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default Text
|
@@ -14,10 +14,10 @@ export default function convertCharactersToRanges(characters) {
|
|||||||
.reduce((ranges, char, i) => {
|
.reduce((ranges, char, i) => {
|
||||||
const previous = i == 0 ? null : characters.get(i - 1)
|
const previous = i == 0 ? null : characters.get(i - 1)
|
||||||
const { text } = char
|
const { text } = char
|
||||||
const marks = char.marks.toArray().map(mark => mark.type)
|
const marks = char.marks.toArray()
|
||||||
|
|
||||||
if (previous) {
|
if (previous) {
|
||||||
const previousMarks = previous.marks.toArray().map(mark => mark.type)
|
const previousMarks = previous.marks.toArray()
|
||||||
const diff = xor(marks, previousMarks)
|
const diff = xor(marks, previousMarks)
|
||||||
if (!diff.length) {
|
if (!diff.length) {
|
||||||
const previousRange = ranges[ranges.length - 1]
|
const previousRange = ranges[ranges.length - 1]
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import CharacterList from '../models/character-list'
|
import Character from '../models/character'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a `characters` list to `ranges`.
|
* Convert a `characters` list to `ranges`.
|
||||||
@@ -9,7 +9,7 @@ import CharacterList from '../models/character-list'
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export default function convertRangesToCharacters(ranges) {
|
export default function convertRangesToCharacters(ranges) {
|
||||||
return CharacterList.create(ranges.reduce((characters, range) => {
|
return Character.createList(ranges.reduce((characters, range) => {
|
||||||
const chars = range.text
|
const chars = range.text
|
||||||
.split('')
|
.split('')
|
||||||
.map(char => {
|
.map(char => {
|
||||||
|
Reference in New Issue
Block a user