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