diff --git a/packages/core/src/Editor.ts b/packages/core/src/Editor.ts index 5b061938..3a094673 100644 --- a/packages/core/src/Editor.ts +++ b/packages/core/src/Editor.ts @@ -66,6 +66,7 @@ export class Editor extends EventEmitter { this.registerCommand('insertHTML', require('./commands/insertHTML').default) this.registerCommand('setContent', require('./commands/setContent').default) this.registerCommand('clearContent', require('./commands/clearContent').default) + this.registerCommand('removeMarks', require('./commands/removeMarks').default) if (this.options.injectCSS) { this.css = injectCSS(require('./style.css')) diff --git a/packages/core/src/commands/removeMarks.ts b/packages/core/src/commands/removeMarks.ts new file mode 100644 index 00000000..a002c641 --- /dev/null +++ b/packages/core/src/commands/removeMarks.ts @@ -0,0 +1,28 @@ +import { Editor } from '../Editor' + +declare module '../Editor' { + interface Editor { + removeMarks(): Editor, + } +} + +export default function removeMarks(next: Function, editor: Editor): void { + const { state, view, schema } = editor + const { selection, tr } = state + const { from, to, empty } = selection + let transaction = tr + + if (empty) { + next() + return + } + + Object + .entries(schema.marks) + .forEach(([name, mark]) => { + transaction.removeMark(from, to, mark) + }) + + view.dispatch(transaction) + next() +} diff --git a/src/demos/HandleExtensions/index.vue b/src/demos/HandleExtensions/index.vue index 04a0975f..6698f7a1 100644 --- a/src/demos/HandleExtensions/index.vue +++ b/src/demos/HandleExtensions/index.vue @@ -1,6 +1,9 @@