UNPKG

dom-delegator

Version:

Decorate elements with delegated events

61 lines (47 loc) 1.71 kB
var Individual = require("individual") var cuid = require("cuid") var globalDocument = require("global/document") var DOMDelegator = require("./dom-delegator.js") var versionKey = "13" var cacheKey = "__DOM_DELEGATOR_CACHE@" + versionKey var cacheTokenKey = "__DOM_DELEGATOR_CACHE_TOKEN@" + versionKey var delegatorCache = Individual(cacheKey, { delegators: {} }) var commonEvents = [ "blur", "change", "click", "contextmenu", "dblclick", "error","focus", "focusin", "focusout", "input", "keydown", "keypress", "keyup", "load", "mousedown", "mouseup", "resize", "select", "submit", "touchcancel", "touchend", "touchstart", "unload" ] /* Delegator is a thin wrapper around a singleton `DOMDelegator` instance. Only one DOMDelegator should exist because we do not want duplicate event listeners bound to the DOM. `Delegator` will also `listenTo()` all events unless every caller opts out of it */ module.exports = Delegator function Delegator(opts) { opts = opts || {} var document = opts.document || globalDocument var cacheKey = document[cacheTokenKey] if (!cacheKey) { cacheKey = document[cacheTokenKey] = cuid() } var delegator = delegatorCache.delegators[cacheKey] if (!delegator) { delegator = delegatorCache.delegators[cacheKey] = new DOMDelegator(document) } if (opts.defaultEvents !== false) { for (var i = 0; i < commonEvents.length; i++) { delegator.listenTo(commonEvents[i]) } } return delegator } Delegator.allocateHandle = DOMDelegator.allocateHandle; Delegator.transformHandle = DOMDelegator.transformHandle;