1
0
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:
Ian Storm Taylor
2016-06-15 20:00:41 -07:00
parent 1788139445
commit 56727704ee
15 changed files with 481 additions and 768 deletions

File diff suppressed because one or more lines are too long

View File

@@ -89,7 +89,6 @@ function renderNode(node) {
}
}
default: {
debugger
throw new Error(`Unknown node type "${node.type}".`)
}
}

View File

@@ -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}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)))
}
}
/**

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
}, {}))

View File

@@ -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)
})
}

View File

@@ -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
View 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

View File

@@ -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]

View File

@@ -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 => {