Comprehensive event handling system with listening, dispatching, and management capabilities for both DOM and custom events with cross-browser compatibility.
Functions for adding and managing event listeners.
/**
* Adds event listener to element or event target
* @param {EventTarget|goog.events.Listenable} src - Event source
* @param {string|Array<string>} type - Event type(s)
* @param {Function} listener - Event listener function
* @param {boolean|Object=} opt_options - Capture flag or options object
* @param {Object=} opt_handler - Object to bind 'this' to
* @return {goog.events.Key} Listener key for removal
*/
goog.events.listen = function(src, type, listener, opt_options, opt_handler) {};
/**
* Adds one-time event listener that removes itself after first trigger
* @param {EventTarget|goog.events.Listenable} src - Event source
* @param {string|Array<string>} type - Event type(s)
* @param {Function} listener - Event listener function
* @param {boolean|Object=} opt_options - Capture flag or options object
* @param {Object=} opt_handler - Object to bind 'this' to
* @return {goog.events.Key} Listener key for removal
*/
goog.events.listenOnce = function(src, type, listener, opt_options, opt_handler) {};
/**
* Adds event listener using wrapper object
* @param {EventTarget|goog.events.Listenable} src - Event source
* @param {goog.events.EventWrapper} wrapper - Event wrapper
* @param {Function} listener - Event listener function
* @param {boolean=} opt_capt - Whether to use capture phase
* @param {Object=} opt_handler - Object to bind 'this' to
* @return {goog.events.Key} Listener key for removal
*/
goog.events.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {};
/**
* Removes event listener
* @param {EventTarget|goog.events.Listenable} src - Event source
* @param {string|Array<string>} type - Event type(s)
* @param {Function} listener - Event listener function
* @param {boolean|Object=} opt_options - Capture flag or options object
* @param {Object=} opt_handler - Object that was bound to
* @return {boolean} True if listener was removed
*/
goog.events.unlisten = function(src, type, listener, opt_options, opt_handler) {};
/**
* Removes event listener by key
* @param {goog.events.Key} key - Listener key returned by listen
* @return {boolean} True if listener was removed
*/
goog.events.unlistenByKey = function(key) {};
/**
* Removes all event listeners from object
* @param {Object=} opt_obj - Object to remove listeners from
* @param {string=} opt_type - Event type to remove (all if not specified)
* @param {boolean=} opt_capt - Whether to remove capture listeners
* @return {number} Number of listeners removed
*/
goog.events.removeAll = function(opt_obj, opt_type, opt_capt) {};Functions for creating and dispatching events.
/**
* Dispatches event on target
* @param {EventTarget|goog.events.Listenable} src - Event source
* @param {string|Object|goog.events.Event} e - Event type, object, or event
* @return {boolean} True if event was not cancelled
*/
goog.events.dispatchEvent = function(src, e) {};
/**
* Fires listeners for specific event type on object
* @param {Object} obj - Event target object
* @param {string} type - Event type
* @param {boolean} capture - Whether to fire capture listeners
* @param {Object} eventObject - Event object to pass to listeners
* @return {boolean} True if any listener returned false
*/
goog.events.fireListeners = function(obj, type, capture, eventObject) {};
/**
* Gets total count of active listeners
* @return {number} Total listener count
*/
goog.events.getTotalListenerCount = function() {};
/**
* Tests if object has listeners for event type
* @param {EventTarget|goog.events.Listenable} obj - Object to test
* @param {string=} opt_type - Event type (any type if not specified)
* @param {boolean=} opt_capture - Whether to check capture listeners
* @return {boolean} True if has listeners
*/
goog.events.hasListener = function(obj, opt_type, opt_capture) {};
/**
* Gets all listeners for object and type
* @param {EventTarget|goog.events.Listenable} obj - Object to get listeners from
* @param {string} type - Event type
* @param {boolean} capture - Whether to get capture listeners
* @return {Array<goog.events.Listener>} Array of listeners
*/
goog.events.getListeners = function(obj, type, capture) {};Core event classes for creating and handling events.
/**
* Basic event class for custom events
* @param {string} type - Event type
* @param {Object=} opt_target - Event target
* @constructor
*/
goog.events.Event = function(type, opt_target) {};
/**
* Event type string
* @type {string}
*/
goog.events.Event.prototype.type;
/**
* Event target object
* @type {Object}
*/
goog.events.Event.prototype.target;
/**
* Current event target during bubbling
* @type {Object}
*/
goog.events.Event.prototype.currentTarget;
/**
* Whether event propagation has been stopped
* @type {boolean}
*/
goog.events.Event.prototype.propagationStopped_;
/**
* Stops event propagation
*/
goog.events.Event.prototype.stopPropagation = function() {};
/**
* Prevents default action
*/
goog.events.Event.prototype.preventDefault = function() {};
/**
* Browser event wrapper that normalizes browser events
* @param {Event} e - Native browser event
* @param {EventTarget=} opt_currentTarget - Current target
* @constructor
* @extends {goog.events.Event}
*/
goog.events.BrowserEvent = function(e, opt_currentTarget) {};
/**
* Native browser event object
* @type {Event}
*/
goog.events.BrowserEvent.prototype.event;
/**
* X coordinate of mouse event
* @type {number}
*/
goog.events.BrowserEvent.prototype.clientX;
/**
* Y coordinate of mouse event
* @type {number}
*/
goog.events.BrowserEvent.prototype.clientY;
/**
* Key code for keyboard events
* @type {number}
*/
goog.events.BrowserEvent.prototype.keyCode;
/**
* Whether Ctrl key was pressed
* @type {boolean}
*/
goog.events.BrowserEvent.prototype.ctrlKey;
/**
* Whether Alt key was pressed
* @type {boolean}
*/
goog.events.BrowserEvent.prototype.altKey;
/**
* Whether Shift key was pressed
* @type {boolean}
*/
goog.events.BrowserEvent.prototype.shiftKey;
/**
* Whether Meta key was pressed
* @type {boolean}
*/
goog.events.BrowserEvent.prototype.metaKey;
/**
* Event target implementation class
* @constructor
* @implements {goog.events.Listenable}
*/
goog.events.EventTarget = function() {};
/**
* Dispatches event on this target
* @param {string|Object|goog.events.Event} e - Event to dispatch
* @return {boolean} True if not cancelled
*/
goog.events.EventTarget.prototype.dispatchEvent = function(e) {};
/**
* Adds event listener to this target
* @param {string} type - Event type
* @param {Function} handler - Event handler
* @param {boolean=} opt_capture - Use capture phase
* @param {Object=} opt_handlerScope - Handler scope
*/
goog.events.EventTarget.prototype.addEventListener = function(type, handler, opt_capture, opt_handlerScope) {};
/**
* Removes event listener from this target
* @param {string} type - Event type
* @param {Function} handler - Event handler
* @param {boolean=} opt_capture - Use capture phase
* @param {Object=} opt_handlerScope - Handler scope
*/
goog.events.EventTarget.prototype.removeEventListener = function(type, handler, opt_capture, opt_handlerScope) {};Standard event types and keyboard codes.
/**
* Standard DOM event types
* @enum {string}
*/
goog.events.EventType = {
CLICK: 'click',
RIGHTCLICK: 'rightclick',
DBLCLICK: 'dblclick',
MOUSEDOWN: 'mousedown',
MOUSEUP: 'mouseup',
MOUSEOVER: 'mouseover',
MOUSEOUT: 'mouseout',
MOUSEMOVE: 'mousemove',
MOUSEENTER: 'mouseenter',
MOUSELEAVE: 'mouseleave',
KEYPRESS: 'keypress',
KEYDOWN: 'keydown',
KEYUP: 'keyup',
BLUR: 'blur',
FOCUS: 'focus',
DEACTIVATE: 'deactivate',
FOCUSIN: 'focusin',
FOCUSOUT: 'focusout',
CHANGE: 'change',
RESET: 'reset',
SELECT: 'select',
SUBMIT: 'submit',
INPUT: 'input',
PROPERTYCHANGE: 'propertychange',
DRAGSTART: 'dragstart',
DRAG: 'drag',
DRAGENTER: 'dragenter',
DRAGOVER: 'dragover',
DRAGLEAVE: 'dragleave',
DROP: 'drop',
DRAGEND: 'dragend',
TOUCHSTART: 'touchstart',
TOUCHMOVE: 'touchmove',
TOUCHEND: 'touchend',
TOUCHCANCEL: 'touchcancel',
BEFOREUNLOAD: 'beforeunload',
CONTEXTMENU: 'contextmenu',
ERROR: 'error',
HELP: 'help',
LOAD: 'load',
LOSECAPTURE: 'losecapture',
ORIENTATIONCHANGE: 'orientationchange',
READYSTATECHANGE: 'readystatechange',
RESIZE: 'resize',
SCROLL: 'scroll',
UNLOAD: 'unload'
};
/**
* Keyboard key codes
* @enum {number}
*/
goog.events.KeyCodes = {
WIN_KEY_FF_LINUX: 0,
MAC_ENTER: 3,
BACKSPACE: 8,
TAB: 9,
NUM_CENTER: 12,
ENTER: 13,
SHIFT: 16,
CTRL: 17,
ALT: 18,
PAUSE: 19,
CAPS_LOCK: 20,
ESC: 27,
SPACE: 32,
PAGE_UP: 33,
PAGE_DOWN: 34,
END: 35,
HOME: 36,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
PLUS_SIGN: 43,
PRINT_SCREEN: 44,
INSERT: 45,
DELETE: 46,
ZERO: 48,
ONE: 49,
TWO: 50,
THREE: 51,
FOUR: 52,
FIVE: 53,
SIX: 54,
SEVEN: 55,
EIGHT: 56,
NINE: 57,
A: 65,
B: 66,
C: 67,
V: 86,
X: 88,
F1: 112,
F2: 113,
F3: 114,
F4: 115,
F5: 116,
F6: 117,
F7: 118,
F8: 119,
F9: 120,
F10: 121,
F11: 122,
F12: 123
};Usage Examples:
// Basic event listening
var button = goog.dom.getElement('myButton');
goog.events.listen(button, goog.events.EventType.CLICK, function(e) {
console.log('Button clicked!');
e.preventDefault(); // Prevent default action
});
// One-time event listener
goog.events.listenOnce(window, goog.events.EventType.LOAD, function() {
console.log('Page loaded!');
});
// Multiple event types
goog.events.listen(element, [
goog.events.EventType.MOUSEENTER,
goog.events.EventType.MOUSELEAVE
], handleMouseEvent);
// Custom event target
var eventTarget = new goog.events.EventTarget();
goog.events.listen(eventTarget, 'custom-event', function(e) {
console.log('Custom event fired:', e.data);
});
// Dispatch custom event
eventTarget.dispatchEvent(new goog.events.Event('custom-event'));
// Keyboard event handling
goog.events.listen(document, goog.events.EventType.KEYDOWN, function(e) {
if (e.keyCode === goog.events.KeyCodes.ENTER) {
console.log('Enter key pressed');
}
});