OpenLayers.Events = Class.create(); OpenLayers.Events.prototype = { // Array: supported events BROWSER_EVENTS: [ "mouseover", "mouseout", "mousedown", "mouseup", "mousemove", "click", "dblclick" ], // hash of Array(Function): events listener functions listeners: null, // Object: the code object issuing application events object: null, // DOMElement: the DOM element receiving browser events div: null, // Array: list of support application events eventTypes: null, /** * @param {OpenLayers.Map} map * @param {DOMElement} div */ initialize: function (object, div, eventTypes) { this.listeners = {}; this.object = object; this.div = div; this.eventTypes = eventTypes; for (var i = 0; i < this.eventTypes.length; i++) { // create a listener list for every custom application event this.listeners[ this.eventTypes[i] ] = []; } for (var i = 0; i < this.BROWSER_EVENTS.length; i++) { var eventType = this.BROWSER_EVENTS[i]; // every browser event has a corresponding application event // (whether it's listened for or not). this.listeners[ eventType ] = []; Event.observe(div, eventType, this.handleBrowserEvent.bindAsEventListener(this)); } }, /** * @param {str} type * @param {Object} obj * @param {Function} func */ register: function (type, obj, func) { var listeners = this.listeners[type]; listeners.push( func.bindAsEventListener(obj) ); }, /** * @param {event} evt */ handleBrowserEvent: function (evt) { evt.xy = this.getMousePosition(evt); this.triggerEvent(evt.type, evt) }, /** * @param {event} evt * * @return {OpenLayers.Pixel} */ getMousePosition: function (evt) { var offsets = Position.page(this.div); return new OpenLayers.Pixel( evt.clientX - offsets[0], evt.clientY - offsets[1]); }, /** * @param {str} type * @param {event} evt */ triggerEvent: function (type, evt) { if (evt == null) { evt = {}; } evt.object = this.object; var listeners = this.listeners[type]; for (var i = 0; i < listeners.length; i++) { var callback = listeners[i]; callback(evt); } } };