[OpenLayers-Commits] r3622 - in trunk/openlayers: lib/OpenLayers tests
commits at openlayers.org
commits at openlayers.org
Fri Jul 6 14:30:10 EDT 2007
Author: euzuro
Date: 2007-07-06 14:30:09 -0400 (Fri, 06 Jul 2007)
New Revision: 3622
Modified:
trunk/openlayers/lib/OpenLayers/Events.js
trunk/openlayers/tests/test_Events.html
Log:
patch for #809 - add the addEventType() function to the OpenLayers.Events objects so that subclasses can safely add new event types without modifying their parents' constant values
Modified: trunk/openlayers/lib/OpenLayers/Events.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Events.js 2007-07-06 17:47:38 UTC (rev 3621)
+++ trunk/openlayers/lib/OpenLayers/Events.js 2007-07-06 18:30:09 UTC (rev 3622)
@@ -410,7 +410,7 @@
// custom application event.
if (this.eventTypes != null) {
for (var i = 0; i < this.eventTypes.length; i++) {
- this.listeners[ this.eventTypes[i] ] = new Array();
+ this.addEventType(this.eventTypes[i]);
}
}
@@ -438,6 +438,20 @@
},
/**
+ * APIMethod: addEventType
+ * Add a new event type to this events object.
+ * If the event type has already been added, do nothing.
+ *
+ * Parameters:
+ * eventName - {String}
+ */
+ addEventType: function(eventName) {
+ if (!this.listeners[eventName]) {
+ this.listeners[eventName] = new Array();
+ }
+ },
+
+ /**
* Method: attachToElement
*
* Parameters:
@@ -449,9 +463,7 @@
// every browser event has a corresponding application event
// (whether it's listened for or not).
- if (this.listeners[eventType] == null) {
- this.listeners[eventType] = new Array();
- }
+ this.addEventType(eventType);
// use Prototype to register the event cross-browser
OpenLayers.Event.observe(element, eventType, this.eventHandler);
Modified: trunk/openlayers/tests/test_Events.html
===================================================================
--- trunk/openlayers/tests/test_Events.html 2007-07-06 17:47:38 UTC (rev 3621)
+++ trunk/openlayers/tests/test_Events.html 2007-07-06 18:30:09 UTC (rev 3622)
@@ -304,7 +304,34 @@
}
+ function test_06_Events_addEventType(t) {
+ t.plan( 6 );
+
+ var mapDiv = OpenLayers.Util.getElement('map');
+ var obj = {result: 0};
+ var eventTypes = ["doThingA", "doThingB"];
+
+ events = new OpenLayers.Events(obj, mapDiv, eventTypes);
+
+
+ t.eq( events.listeners["doThingA"].length, 0, "event type passed as passed as param to OpenLayers.Events constructor correctly set up" );
+ t.eq( events.listeners["doThingB"].length, 0, "event type passed as passed as param to OpenLayers.Events constructor correctly set up" );
+
+ var newEventType = "onFoo";
+ t.ok( events.listeners[newEventType] == null, "event type not yet registered has null entry in listeners array");
+
+ events.addEventType(newEventType);
+ t.eq( events.listeners[newEventType].length, 0, "event type passed to addEventType correctly set up" );
+
+ var func = function () {};
+ events.register( "doThingA", obj, func );
+ t.eq( events.listeners["doThingA"].length, 1, "listener correctly registered" );
+
+ events.addEventType("doThingsA");
+ t.eq( events.listeners["doThingA"].length, 1, "event type passed to addEventType correctly does nothing if clashes with already defined event type" );
+ }
+
// -->
</script>
More information about the Commits
mailing list