+++ /dev/null
-/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
- * text of the license. */
-OpenLayers.Events = Class.create();
-
-OpenLayers.Events.prototype = {
- // Array: supported events
- BROWSER_EVENTS: [
- "mouseover", "mouseout",
- "mousedown", "mouseup", "mousemove",
- "click", "dblclick",
- "resize", "focus", "blur"
- ],
-
- // 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;
- if (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));
- }
- // disable dragstart in IE so that mousedown/move/up works normally
- Event.observe(div, "dragstart", Event.stop);
- },
-
- /**
- * @param {str} type
- * @param {Object} obj
- * @param {Function} func
- */
- register: function (type, obj, func) {
- if (func == null) {
- obj = this.object;
- func = obj;
- }
- var listeners = this.listeners[type];
- listeners.push( {obj: obj, func: func} );
- },
-
- unregister: function (type, obj, func) {
- var listeners = this.listeners[type];
- for (var i = 0; i < listeners.length; i++) {
- if (listeners[i].obj == obj && listeners[i].type == type) {
- listeners.splice(i, 1);
- break;
- }
- }
- },
-
- remove: function(type) {
- this.listeners[type].pop();
- },
-
- /**
- * @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) {
- if (!this.div.offsets) {
- this.div.offsets = Position.page(this.div);
- }
- return new OpenLayers.Pixel(
- evt.clientX - this.div.offsets[0],
- evt.clientY - this.div.offsets[1]);
- },
-
- /**
- * @param {str} type
- * @param {event} evt
- */
- triggerEvent: function (type, evt) {
- if (evt == null) {
- evt = {};
- }
- evt.object = this.object;
- evt.div = this.div;
-
- var listeners = this.listeners[type];
- for (var i = 0; i < listeners.length; i++) {
- var callback = listeners[i];
- var continueChain = callback.func.call(callback.obj, evt);
- if (continueChain != null && !continueChain) break;
- }
- }
-};