fix broken input rules
This commit is contained in:
@@ -3,6 +3,7 @@ import { keymap } from 'prosemirror-keymap'
|
|||||||
// import { Schema, Node as ProsemirrorNode } from 'prosemirror-model'
|
// import { Schema, Node as ProsemirrorNode } from 'prosemirror-model'
|
||||||
import { inputRules } from 'prosemirror-inputrules'
|
import { inputRules } from 'prosemirror-inputrules'
|
||||||
// import { EditorView, Decoration } from 'prosemirror-view'
|
// import { EditorView, Decoration } from 'prosemirror-view'
|
||||||
|
import { Schema } from 'prosemirror-model'
|
||||||
import { Editor } from './Editor'
|
import { Editor } from './Editor'
|
||||||
// import capitalize from './utils/capitalize'
|
// import capitalize from './utils/capitalize'
|
||||||
import { Extensions } from './types'
|
import { Extensions } from './types'
|
||||||
@@ -13,11 +14,14 @@ export default class ExtensionManager {
|
|||||||
|
|
||||||
editor: Editor
|
editor: Editor
|
||||||
|
|
||||||
|
schema: Schema
|
||||||
|
|
||||||
extensions: Extensions
|
extensions: Extensions
|
||||||
|
|
||||||
constructor(extensions: Extensions, editor: Editor) {
|
constructor(extensions: Extensions, editor: Editor) {
|
||||||
this.editor = editor
|
this.editor = editor
|
||||||
this.extensions = extensions
|
this.extensions = extensions
|
||||||
|
this.schema = getSchema(this.extensions)
|
||||||
|
|
||||||
this.extensions.forEach(extension => {
|
this.extensions.forEach(extension => {
|
||||||
const context = {
|
const context = {
|
||||||
@@ -32,10 +36,6 @@ export default class ExtensionManager {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
get schema() {
|
|
||||||
return getSchema(this.extensions)
|
|
||||||
}
|
|
||||||
|
|
||||||
get plugins(): Plugin[] {
|
get plugins(): Plugin[] {
|
||||||
const plugins = this.extensions
|
const plugins = this.extensions
|
||||||
.map(extension => {
|
.map(extension => {
|
||||||
|
|||||||
@@ -3,6 +3,17 @@ import { Extensions } from '../types'
|
|||||||
import splitExtensions from './splitExtensions'
|
import splitExtensions from './splitExtensions'
|
||||||
import getAttributesFromExtensions from './getAttributesFromExtensions'
|
import getAttributesFromExtensions from './getAttributesFromExtensions'
|
||||||
import getRenderedAttributes from './getRenderedAttributes'
|
import getRenderedAttributes from './getRenderedAttributes'
|
||||||
|
import isEmptyObject from './isEmptyObject'
|
||||||
|
|
||||||
|
function cleanUpSchemaItem(data: any) {
|
||||||
|
return Object.fromEntries(Object.entries(data).filter(([key, value]) => {
|
||||||
|
if (key === 'attrs' && isEmptyObject(value)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return value !== null && value !== undefined
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
export default function getSchema(extensions: Extensions): Schema {
|
export default function getSchema(extensions: Extensions): Schema {
|
||||||
const allAttributes = getAttributesFromExtensions(extensions)
|
const allAttributes = getAttributesFromExtensions(extensions)
|
||||||
@@ -16,7 +27,7 @@ export default function getSchema(extensions: Extensions): Schema {
|
|||||||
|
|
||||||
const attributes = allAttributes.filter(attribute => attribute.type === extension.name)
|
const attributes = allAttributes.filter(attribute => attribute.type === extension.name)
|
||||||
|
|
||||||
const schema: NodeSpec = {
|
const schema: NodeSpec = cleanUpSchemaItem({
|
||||||
content: extension.content,
|
content: extension.content,
|
||||||
marks: extension.marks,
|
marks: extension.marks,
|
||||||
group: extension.group,
|
group: extension.group,
|
||||||
@@ -37,7 +48,7 @@ export default function getSchema(extensions: Extensions): Schema {
|
|||||||
attrs: Object.fromEntries(attributes.map(attribute => {
|
attrs: Object.fromEntries(attributes.map(attribute => {
|
||||||
return [attribute.name, { default: attribute?.attribute?.default }]
|
return [attribute.name, { default: attribute?.attribute?.default }]
|
||||||
})),
|
})),
|
||||||
}
|
})
|
||||||
|
|
||||||
return [extension.name, schema]
|
return [extension.name, schema]
|
||||||
}))
|
}))
|
||||||
@@ -49,7 +60,7 @@ export default function getSchema(extensions: Extensions): Schema {
|
|||||||
|
|
||||||
const attributes = allAttributes.filter(attribute => attribute.type === extension.name)
|
const attributes = allAttributes.filter(attribute => attribute.type === extension.name)
|
||||||
|
|
||||||
const schema: MarkSpec = {
|
const schema: MarkSpec = cleanUpSchemaItem({
|
||||||
inclusive: extension.inclusive,
|
inclusive: extension.inclusive,
|
||||||
excludes: extension.excludes,
|
excludes: extension.excludes,
|
||||||
group: extension.group,
|
group: extension.group,
|
||||||
@@ -64,7 +75,7 @@ export default function getSchema(extensions: Extensions): Schema {
|
|||||||
attrs: Object.fromEntries(attributes.map(attribute => {
|
attrs: Object.fromEntries(attributes.map(attribute => {
|
||||||
return [attribute.name, { default: attribute?.attribute?.default }]
|
return [attribute.name, { default: attribute?.attribute?.default }]
|
||||||
})),
|
})),
|
||||||
}
|
})
|
||||||
|
|
||||||
return [extension.name, schema]
|
return [extension.name, schema]
|
||||||
}))
|
}))
|
||||||
|
|||||||
3
packages/core/src/utils/isEmptyObject.ts
Normal file
3
packages/core/src/utils/isEmptyObject.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export default function isEmptyObject(object = {}) {
|
||||||
|
return Object.keys(object).length === 0 && object.constructor === Object
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user