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.
		
		
		
		
		
			
		
			
				
					
					
						
							63 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							63 lines
						
					
					
						
							1.5 KiB
						
					
					
				import EventEmitter from 'eventemitter3'; | 
						|
import logger from './logger'; | 
						|
 | 
						|
let debug = logger('quill:events'); | 
						|
 | 
						|
const EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click']; | 
						|
 | 
						|
EVENTS.forEach(function(eventName) { | 
						|
  document.addEventListener(eventName, (...args) => { | 
						|
    [].slice.call(document.querySelectorAll('.ql-container')).forEach((node) => { | 
						|
      // TODO use WeakMap | 
						|
      if (node.__quill && node.__quill.emitter) { | 
						|
        node.__quill.emitter.handleDOM(...args); | 
						|
      } | 
						|
    }); | 
						|
  }); | 
						|
}); | 
						|
 | 
						|
 | 
						|
class Emitter extends EventEmitter { | 
						|
  constructor() { | 
						|
    super(); | 
						|
    this.listeners = {}; | 
						|
    this.on('error', debug.error); | 
						|
  } | 
						|
 | 
						|
  emit() { | 
						|
    debug.log.apply(debug, arguments); | 
						|
    super.emit.apply(this, arguments); | 
						|
  } | 
						|
 | 
						|
  handleDOM(event, ...args) { | 
						|
    (this.listeners[event.type] || []).forEach(function({ node, handler }) { | 
						|
      if (event.target === node || node.contains(event.target)) { | 
						|
        handler(event, ...args); | 
						|
      } | 
						|
    }); | 
						|
  } | 
						|
 | 
						|
  listenDOM(eventName, node, handler) { | 
						|
    if (!this.listeners[eventName]) { | 
						|
      this.listeners[eventName] = []; | 
						|
    } | 
						|
    this.listeners[eventName].push({ node, handler }) | 
						|
  } | 
						|
} | 
						|
 | 
						|
Emitter.events = { | 
						|
  EDITOR_CHANGE        : 'editor-change', | 
						|
  SCROLL_BEFORE_UPDATE : 'scroll-before-update', | 
						|
  SCROLL_OPTIMIZE      : 'scroll-optimize', | 
						|
  SCROLL_UPDATE        : 'scroll-update', | 
						|
  SELECTION_CHANGE     : 'selection-change', | 
						|
  TEXT_CHANGE          : 'text-change' | 
						|
}; | 
						|
Emitter.sources = { | 
						|
  API    : 'api', | 
						|
  SILENT : 'silent', | 
						|
  USER   : 'user' | 
						|
}; | 
						|
 | 
						|
 | 
						|
export default Emitter;
 | 
						|
 |