--- /dev/null
+/*\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