mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-23 23:42:56 +02:00
Fixing onDrop for Inline Nodes, Harder type checking in normalize fun… (#1033)
* Fixing onDrop for Inline Nodes, Harder type checking in normalize functions, Omitting Pseudo-symboles from nodeProperties/markProperties * Refactoring code * Making normalize blacklist clearer * Update normalize.js * Update core.js * Linting fixes, no trailing spaces
This commit is contained in:
committed by
Ian Storm Taylor
parent
43dbfbcb58
commit
aec3b702c4
@@ -1,7 +1,9 @@
|
||||
|
||||
import Base64 from '../serializers/base-64'
|
||||
import Content from '../components/content'
|
||||
import Block from '../models/block'
|
||||
import Character from '../models/character'
|
||||
import Inline from '../models/inline'
|
||||
import Debug from 'debug'
|
||||
import getPoint from '../utils/get-point'
|
||||
import Placeholder from '../components/placeholder'
|
||||
@@ -381,11 +383,20 @@ function Plugin(options = {}) {
|
||||
|
||||
if (isInternal) transform.delete()
|
||||
|
||||
return transform
|
||||
.select(target)
|
||||
.insertBlock(node)
|
||||
.removeNodeByKey(node.key)
|
||||
.apply()
|
||||
if (Block.isBlock(node)) {
|
||||
return transform
|
||||
.select(target)
|
||||
.insertBlock(node)
|
||||
.removeNodeByKey(node.key)
|
||||
.apply()
|
||||
}
|
||||
if (Inline.isInline(node)) {
|
||||
return transform
|
||||
.select(target)
|
||||
.insertInline(node)
|
||||
.removeNodeByKey(node.key)
|
||||
.apply()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -18,12 +18,20 @@ import typeOf from 'type-of'
|
||||
|
||||
function block(value) {
|
||||
if (Block.isBlock(value)) return value
|
||||
if (
|
||||
Inline.isInline(value) ||
|
||||
Mark.isMark(value) ||
|
||||
Text.isText(value) ||
|
||||
Selection.isSelection(value)
|
||||
) {
|
||||
throw new Error(`Invalid \`block\` argument! It must be a block, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
|
||||
|
||||
switch (typeOf(value)) {
|
||||
case 'string':
|
||||
case 'object':
|
||||
return Block.create(nodeProperties(value))
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid \`block\` argument! It must be a block, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
@@ -38,12 +46,19 @@ function block(value) {
|
||||
|
||||
function inline(value) {
|
||||
if (Inline.isInline(value)) return value
|
||||
if (
|
||||
Block.isBlock(value) ||
|
||||
Mark.isMark(value) ||
|
||||
Text.isText(value) ||
|
||||
Selection.isSelection(value)
|
||||
) {
|
||||
throw new Error(`Invalid \`inline\` argument! It must be an inline, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
|
||||
switch (typeOf(value)) {
|
||||
case 'string':
|
||||
case 'object':
|
||||
return Inline.create(nodeProperties(value))
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid \`inline\` argument! It must be an inline, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
@@ -60,10 +75,14 @@ function key(value) {
|
||||
if (typeOf(value) == 'string') return value
|
||||
|
||||
warn('An object was passed to a Node method instead of a `key` string. This was previously supported, but is being deprecated because it can have a negative impact on performance. The object in question was:', value)
|
||||
if (Block.isBlock(value)) return value.key
|
||||
if (Document.isDocument(value)) return value.key
|
||||
if (Inline.isInline(value)) return value.key
|
||||
if (Text.isText(value)) return value.key
|
||||
if (
|
||||
Block.isBlock(value) ||
|
||||
Document.isDocument(value) ||
|
||||
Inline.isInline(value) ||
|
||||
Text.isText(value)
|
||||
) {
|
||||
return value.key
|
||||
}
|
||||
|
||||
throw new Error(`Invalid \`key\` argument! It must be either a block, an inline, a text, or a string. You passed: "${value}".`)
|
||||
}
|
||||
@@ -77,12 +96,19 @@ function key(value) {
|
||||
|
||||
function mark(value) {
|
||||
if (Mark.isMark(value)) return value
|
||||
if (
|
||||
Block.isBlock(value) ||
|
||||
Inline.isInline(value) ||
|
||||
Text.isText(value) ||
|
||||
Selection.isSelection(value)
|
||||
) {
|
||||
throw new Error(`Invalid \`mark\` argument! It must be a mark, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
|
||||
switch (typeOf(value)) {
|
||||
case 'string':
|
||||
case 'object':
|
||||
return Mark.create(markProperties(value))
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid \`mark\` argument! It must be a mark, an object, or a string. You passed: "${value}".`)
|
||||
}
|
||||
@@ -107,6 +133,8 @@ function markProperties(value = {}) {
|
||||
for (const k in value) {
|
||||
if (k == 'data') {
|
||||
if (value[k] !== undefined) ret[k] = Data.create(value[k])
|
||||
} else if (k.startsWith('@@__SLATE')) {
|
||||
return
|
||||
} else {
|
||||
ret[k] = value[k]
|
||||
}
|
||||
@@ -140,6 +168,8 @@ function nodeProperties(value = {}) {
|
||||
for (const k in value) {
|
||||
if (k == 'data') {
|
||||
if (value[k] !== undefined) ret[k] = Data.create(value[k])
|
||||
} else if (k.startsWith('@@__SLATE')) {
|
||||
return
|
||||
} else {
|
||||
ret[k] = value[k]
|
||||
}
|
||||
@@ -162,11 +192,18 @@ function nodeProperties(value = {}) {
|
||||
|
||||
function selection(value) {
|
||||
if (Selection.isSelection(value)) return value
|
||||
if (
|
||||
Mark.isMark(value) ||
|
||||
Block.isBlock(value) ||
|
||||
Inline.isInline(value) ||
|
||||
Text.isText(value)
|
||||
) {
|
||||
throw new Error(`Invalid \`selection\` argument! It must be a selection or an object. You passed: "${value}".`)``
|
||||
}
|
||||
|
||||
switch (typeOf(value)) {
|
||||
case 'object':
|
||||
return Selection.create(value)
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid \`selection\` argument! It must be a selection or an object. You passed: "${value}".`)
|
||||
}
|
||||
@@ -192,7 +229,6 @@ function selectionProperties(value = {}) {
|
||||
if (value.isFocused !== undefined) ret.isFocused = !!value.isFocused
|
||||
if (value.marks !== undefined) ret.marks = value.marks
|
||||
break
|
||||
|
||||
default:
|
||||
throw new Error(`Invalid selection \`properties\` argument! It must be an object or a selection. You passed: "${value}".`)
|
||||
}
|
||||
|
Reference in New Issue
Block a user