[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