mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-09-01 11:12:42 +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: {
|
||||
debugger
|
||||
throw new Error(`Unknown node type "${node.type}".`)
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
import Text from './text'
|
||||
import TextNode from '../models/text-node'
|
||||
import TextModel from '../models/text'
|
||||
import findSelection from '../utils/find-selection'
|
||||
import keycode from 'keycode'
|
||||
|
||||
@@ -159,7 +159,7 @@ class Content extends React.Component {
|
||||
renderNode(node) {
|
||||
const { renderMark, renderNode, state } = this.props
|
||||
|
||||
if (node instanceof TextNode) {
|
||||
if (node instanceof TextModel) {
|
||||
return (
|
||||
<Text
|
||||
key={node.key}
|
||||
|
17
lib/index.js
17
lib/index.js
@@ -1,9 +1,19 @@
|
||||
|
||||
/**
|
||||
* Components.
|
||||
*/
|
||||
|
||||
import Editor from './components/editor'
|
||||
|
||||
/**
|
||||
* Models.
|
||||
*/
|
||||
|
||||
import Character from './models/character'
|
||||
import Node from './models/node'
|
||||
import NodeMap from './models/node-map'
|
||||
import Selection from './models/selection'
|
||||
import State from './models/state'
|
||||
import Text from './models/text'
|
||||
|
||||
/**
|
||||
* Export.
|
||||
@@ -11,8 +21,9 @@ import State from './models/state'
|
||||
|
||||
export default Editor
|
||||
export {
|
||||
Character,
|
||||
Node,
|
||||
NodeMap,
|
||||
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 { Record } from 'immutable'
|
||||
import { List, Record } from 'immutable'
|
||||
|
||||
/**
|
||||
* Record.
|
||||
*/
|
||||
|
||||
const CharacterRecord = new Record({
|
||||
text: '',
|
||||
marks: new MarkList()
|
||||
marks: new List(),
|
||||
text: ''
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -17,13 +16,31 @@ const CharacterRecord = new Record({
|
||||
|
||||
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({
|
||||
text: attrs.text,
|
||||
marks: MarkList.create(attrs.marks)
|
||||
text: object.text,
|
||||
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 TextNode from './text-node'
|
||||
import Text from './text'
|
||||
import { Map, OrderedMap, Record } from 'immutable'
|
||||
|
||||
/**
|
||||
@@ -8,10 +7,10 @@ import { Map, OrderedMap, Record } from 'immutable'
|
||||
*/
|
||||
|
||||
const NodeRecord = new Record({
|
||||
key: null,
|
||||
type: null,
|
||||
children: new OrderedMap(),
|
||||
data: new Map(),
|
||||
children: new NodeMap(),
|
||||
key: null,
|
||||
type: null
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -20,19 +19,33 @@ const NodeRecord = new Record({
|
||||
|
||||
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({
|
||||
key: attrs.key,
|
||||
type: attrs.type,
|
||||
data: new Map(attrs.data),
|
||||
children: Node.createMap(attrs.children)
|
||||
key: object.key,
|
||||
type: object.type,
|
||||
data: new Map(object.data),
|
||||
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) {
|
||||
return new OrderedMap(array.reduce((map, node) => {
|
||||
map[node.key] = node.type == 'text'
|
||||
? TextNode.create(node)
|
||||
? Text.create(node)
|
||||
: Node.create(node)
|
||||
return map
|
||||
}, {}))
|
||||
|
@@ -1,6 +1,5 @@
|
||||
|
||||
import Selection from './selection'
|
||||
import NodeMap from './node-map'
|
||||
import Node from './node'
|
||||
import toCamel from 'to-camel-case'
|
||||
import { OrderedMap, Record } from 'immutable'
|
||||
@@ -10,7 +9,7 @@ import { OrderedMap, Record } from 'immutable'
|
||||
*/
|
||||
|
||||
const StateRecord = new Record({
|
||||
nodes: new NodeMap(),
|
||||
nodes: new OrderedMap(),
|
||||
selection: new Selection()
|
||||
})
|
||||
|
||||
@@ -28,7 +27,7 @@ class State extends StateRecord {
|
||||
|
||||
static create(attrs) {
|
||||
return new State({
|
||||
nodes: NodeMap.create(attrs.nodes),
|
||||
nodes: Node.createMap(attrs.nodes),
|
||||
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) => {
|
||||
const previous = i == 0 ? null : characters.get(i - 1)
|
||||
const { text } = char
|
||||
const marks = char.marks.toArray().map(mark => mark.type)
|
||||
const marks = char.marks.toArray()
|
||||
|
||||
if (previous) {
|
||||
const previousMarks = previous.marks.toArray().map(mark => mark.type)
|
||||
const previousMarks = previous.marks.toArray()
|
||||
const diff = xor(marks, previousMarks)
|
||||
if (!diff.length) {
|
||||
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`.
|
||||
@@ -9,7 +9,7 @@ import CharacterList from '../models/character-list'
|
||||
*/
|
||||
|
||||
export default function convertRangesToCharacters(ranges) {
|
||||
return CharacterList.create(ranges.reduce((characters, range) => {
|
||||
return Character.createList(ranges.reduce((characters, range) => {
|
||||
const chars = range.text
|
||||
.split('')
|
||||
.map(char => {
|
||||
|
Reference in New Issue
Block a user