UNPKG

substance

Version:

Substance is a JavaScript library for web-based content editing. It provides building blocks for realizing custom text editors and web-based publishing systems.

65 lines (55 loc) 1.6 kB
import { isFunction, isString, findIndex } from '../util' /* Internal implementation used to store event bindings. */ export default class DOMEventListener { constructor(eventName, handler, options) { /* istanbul ignore next */ if (!isString(eventName) || !isFunction(handler)) { throw new Error("Illegal arguments: 'eventName' must be a String, and 'handler' must be a Function.") } options = options || {} var origHandler = handler var context = options.context var capture = Boolean(options.capture) if (context) { handler = handler.bind(context) } if (options.once === true) { handler = _once(this, handler) } this.eventName = eventName this.originalHandler = origHandler this.handler = handler this.capture = capture this.context = context this.options = options // set when this gets attached to a DOM element this._el = null } } DOMEventListener.prototype._isDOMEventListener = true DOMEventListener.findIndex = function(eventListeners, eventName, handler) { var idx = -1 if (arguments[1]._isDOMEventListener) { idx = eventListeners.indexOf(arguments[1]) } else { idx = findIndex(eventListeners, _matches.bind(null, { eventName: eventName, originalHandler: handler }) ) } return idx } function _matches(l1, l2) { return l1.eventName === l2.eventName && l1.originalHandler === l2.originalHandler } function _once(listener, handler) { return function(event) { handler(event) listener._el.removeEventListener(listener) } }