You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.4 KiB
78 lines
2.4 KiB
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
|