UNPKG

tiptap

Version:

A rich-text editor for Vue.js

43 lines (33 loc) 1.01 kB
import { Plugin, PluginKey } from 'prosemirror-state' class Menu { constructor({ options }) { this.options = options this.preventHide = false // the mousedown event is fired before blur so we can prevent it this.mousedownHandler = this.handleClick.bind(this) this.options.element.addEventListener('mousedown', this.mousedownHandler, { capture: true }) this.blurHandler = () => { if (this.preventHide) { this.preventHide = false return } this.options.editor.emit('menubar:focusUpdate', false) } this.options.editor.on('blur', this.blurHandler) } handleClick() { this.preventHide = true } destroy() { this.options.element.removeEventListener('mousedown', this.mousedownHandler) this.options.editor.off('blur', this.blurHandler) } } export default function (options) { return new Plugin({ key: new PluginKey('menu_bar'), view(editorView) { return new Menu({ editorView, options }) }, }) }