From 42a8f460112260f6fdd35f96b30bff9aca2c7ab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Fri, 10 Apr 2020 22:34:49 +0200 Subject: [PATCH] add removeMarks command --- packages/core/src/Editor.ts | 1 + packages/core/src/commands/removeMarks.ts | 28 +++++++++++++++++++++++ src/demos/HandleExtensions/index.vue | 3 +++ 3 files changed, 32 insertions(+) create mode 100644 packages/core/src/commands/removeMarks.ts 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 @@