UNPKG

este-library-oldschool

Version:

Library for github.com/steida/este.git

187 lines (177 loc) 5.56 kB
// Generated by github.com/steida/coffee2closure 900.1.18 /** @fileoverview Powerfull event delegation for este.ui.Component. @see este.ui.Component */ var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.superClass_ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; goog.provide('este.events.EventHandler'); goog.require('este.events.GestureHandler'); goog.require('este.events.SubmitHandler'); goog.require('goog.dom'); goog.require('goog.events.EventHandler'); goog.require('goog.events.FocusHandler'); goog.require('goog.events.InputHandler'); goog.require('goog.events.KeyHandler'); goog.require('goog.events.MouseWheelHandler'); /** @param {Object=} opt_handler Object in whose scope to call the listeners. @constructor @extends {goog.events.EventHandler} */ este.events.EventHandler = function(opt_handler) { este.events.EventHandler.superClass_.constructor.call(this, opt_handler); } extend(este.events.EventHandler, superClass); /** Global cache for synthetic event handlers. Useful for example when twelve components use tap event on the same element, GestureHandler is created only once. @type {Object} @private */ este.events.EventHandler.handlers = {}; /** Return event handler for concrete src and type. @param {goog.events.ListenableType} src @param {string} type @return {Function} @private */ este.events.EventHandler.getHandlerClass = function(src, type) { if (!goog.dom.isElement(src)) { return null; } switch (type) { case 'tap': case 'swipeleft': case 'swiperight': case 'swipeup': case 'swipedown': return este.events.GestureHandler; case 'submit': return este.events.SubmitHandler; case 'focusin': case 'focusout': return goog.events.FocusHandler; case 'input': return goog.events.InputHandler; case 'key': return goog.events.KeyHandler; case 'mousewheel': return goog.events.MouseWheelHandler; default: return null; } }; /** @param {goog.events.ListenableType} src @param {Function} handlerClass @return {goog.events.ListenableType} @private */ este.events.EventHandler.lazyCreateHandler = function(src, handlerClass) { var base, key; key = este.events.EventHandler.getKey(src, handlerClass); if ((base = este.events.EventHandler.handlers)[key] == null) { base[key] = new handlerClass(src); } return este.events.EventHandler.handlers[key]; }; /** @param {goog.events.ListenableType} src @param {Function} handlerClass @return {goog.events.ListenableType} @private */ este.events.EventHandler.getHandler = function(src, handlerClass) { var key; key = este.events.EventHandler.getKey(src, handlerClass); return este.events.EventHandler.handlers[key]; }; /** @param {goog.events.ListenableType} src @param {Function} handlerClass */ este.events.EventHandler.removeHandler = function(src, handlerClass) { var handler, key; key = este.events.EventHandler.getKey(src, handlerClass); handler = este.events.EventHandler.handlers[key]; delete este.events.EventHandler.handlers[key]; if (!handler) { return; } return handler.dispose(); }; este.events.EventHandler.removeHandlersWithoutListeners = function() { return este.events.EventHandler.handlers = goog.object.filter(este.events.EventHandler.handlers, function(v, k) { if (v.hasListener()) { return true; } v.dispose(); return false; }); }; /** @param {goog.events.ListenableType} src @param {Function} handlerClass @return {string} @private */ este.events.EventHandler.getKey = function(src, handlerClass) { return [goog.getUid(src), goog.getUid(handlerClass)].toString(); }; /** @override */ este.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_capture) { var handlerClass, i, len, t; if (goog.isArray(type)) { for (i = 0, len = type.length; i < len; i++) { t = type[i]; this.listen(src, t, opt_fn, opt_capture); } return this; } type = /** @type {string} */(type); handlerClass = este.events.EventHandler.getHandlerClass(src, type); if (handlerClass) { src = este.events.EventHandler.lazyCreateHandler(src, handlerClass); } return este.events.EventHandler.superClass_.listen.call(this, src, type, opt_fn, opt_capture); }; /** @override */ este.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_capture) { var handlerClass, i, len, originalSrc, t; if (goog.isArray(type)) { for (i = 0, len = type.length; i < len; i++) { t = type[i]; this.listen(src, t, opt_fn, opt_capture); } return this; } type = /** @type {string} */(type); handlerClass = este.events.EventHandler.getHandlerClass(src, type); originalSrc = null; if (handlerClass) { originalSrc = src; src = este.events.EventHandler.getHandler(src, handlerClass); if (!src) { return this; } } este.events.EventHandler.superClass_.unlisten.call(this, src, type, opt_fn, opt_capture); if (handlerClass && !src.hasListener()) { este.events.EventHandler.removeHandler(originalSrc, handlerClass); } return this; }; /** @override */ este.events.EventHandler.prototype.removeAll = function() { este.events.EventHandler.superClass_.removeAll.call(this); este.events.EventHandler.removeHandlersWithoutListeners(); };