UNPKG

quill

Version:

Your powerful, rich text editor

78 lines 2.43 kB
import { EventEmitter } from 'eventemitter3'; import instances from './instances.js'; import logger from './logger.js'; const debug = logger('quill:events'); const EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click']; EVENTS.forEach(eventName => { document.addEventListener(eventName, function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } Array.from(document.querySelectorAll('.ql-container')).forEach(node => { const quill = instances.get(node); if (quill && quill.emitter) { quill.emitter.handleDOM(...args); } }); }); }); class Emitter extends EventEmitter { static events = { EDITOR_CHANGE: 'editor-change', SCROLL_BEFORE_UPDATE: 'scroll-before-update', SCROLL_BLOT_MOUNT: 'scroll-blot-mount', SCROLL_BLOT_UNMOUNT: 'scroll-blot-unmount', SCROLL_OPTIMIZE: 'scroll-optimize', SCROLL_UPDATE: 'scroll-update', SCROLL_EMBED_UPDATE: 'scroll-embed-update', SELECTION_CHANGE: 'selection-change', TEXT_CHANGE: 'text-change', COMPOSITION_BEFORE_START: 'composition-before-start', COMPOSITION_START: 'composition-start', COMPOSITION_BEFORE_END: 'composition-before-end', COMPOSITION_END: 'composition-end' }; static sources = { API: 'api', SILENT: 'silent', USER: 'user' }; constructor() { super(); this.domListeners = {}; this.on('error', debug.error); } emit() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } debug.log.call(debug, ...args); // @ts-expect-error return super.emit(...args); } handleDOM(event) { for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } (this.domListeners[event.type] || []).forEach(_ref => { let { node, handler } = _ref; if (event.target === node || node.contains(event.target)) { handler(event, ...args); } }); } listenDOM(eventName, node, handler) { if (!this.domListeners[eventName]) { this.domListeners[eventName] = []; } this.domListeners[eventName].push({ node, handler }); } } export default Emitter; //# sourceMappingURL=emitter.js.map