Installed leaflet in extlib
[mediagoblin.git] / extlib / leaflet / src / core / Events.js
diff --git a/extlib/leaflet/src/core/Events.js b/extlib/leaflet/src/core/Events.js
new file mode 100644 (file)
index 0000000..53ea20f
--- /dev/null
@@ -0,0 +1,58 @@
+/*\r
+ * L.Mixin.Events adds custom events functionality to Leaflet classes \r
+ */\r
+\r
+L.Mixin = {};\r
+\r
+L.Mixin.Events = {\r
+       addEventListener: function(/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {\r
+               var events = this._leaflet_events = this._leaflet_events || {};\r
+               events[type] = events[type] || [];\r
+               events[type].push({\r
+                       action: fn,\r
+                       context: context\r
+               });\r
+               return this;\r
+       },\r
+       \r
+       hasEventListeners: function(/*String*/ type) /*-> Boolean*/ {\r
+               var k = '_leaflet_events';\r
+               return (k in this) && (type in this[k]) && (this[k][type].length > 0);\r
+       },\r
+       \r
+       removeEventListener: function(/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {\r
+               if (!this.hasEventListeners(type)) { return this; }\r
+               \r
+               for (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {\r
+                       if (\r
+                               (events[type][i].action === fn) && \r
+                               (!context || (events[type][i].context === context))\r
+                       ) {\r
+                               events[type].splice(i, 1);\r
+                               return this;\r
+                       }\r
+               }\r
+               return this;\r
+       },\r
+       \r
+       fireEvent: function(/*String*/ type, /*(optional) Object*/ data) {\r
+               if (!this.hasEventListeners(type)) { return; }\r
+               \r
+               var event = L.Util.extend({\r
+                       type: type,\r
+                       target: this\r
+               }, data);\r
+               \r
+               var listeners = this._leaflet_events[type].slice();\r
+               \r
+               for (var i = 0, len = listeners.length; i < len; i++) {\r
+                       listeners[i].action.call(listeners[i].context || this, event);\r
+               }\r
+               \r
+               return this;\r
+       }\r
+};\r
+\r
+L.Mixin.Events.on = L.Mixin.Events.addEventListener;\r
+L.Mixin.Events.off = L.Mixin.Events.removeEventListener;\r
+L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
\ No newline at end of file