});
L.LocationFilter = L.Class.extend({
+ includes: L.Mixin.Events,
+
options: {
enableButton: {
enableText: "Select area",
this._sw = bounds.getSouthWest();
this._se = bounds.getSouthEast();
this._draw();
- this._callCallback("onChange");
+ this.fire("change", {bounds: bounds});
},
isEnabled: function() {
var markerPos = that._moveMarker.getLatLng(),
latDelta = markerPos.lat-that._nw.lat,
lngDelta = markerPos.lng-that._nw.lng;
- that._nw = new L.LatLng(that._nw.lat+latDelta, that._nw.lng+lngDelta);
- that._ne = new L.LatLng(that._ne.lat+latDelta, that._ne.lng+lngDelta);
- that._sw = new L.LatLng(that._sw.lat+latDelta, that._sw.lng+lngDelta);
- that._se = new L.LatLng(that._se.lat+latDelta, that._se.lng+lngDelta);
+ that._nw = new L.LatLng(that._nw.lat+latDelta, that._nw.lng+lngDelta, true);
+ that._ne = new L.LatLng(that._ne.lat+latDelta, that._ne.lng+lngDelta, true);
+ that._sw = new L.LatLng(that._sw.lat+latDelta, that._sw.lng+lngDelta, true);
+ that._se = new L.LatLng(that._se.lat+latDelta, that._se.lng+lngDelta, true);
that._draw();
});
this._setupDragendListener(this._moveMarker);
latMarker = options.moveAlong.lat,
lngMarker = options.moveAlong.lng;
// Move follower markers when this marker is moved
- latMarker.setLatLng(new L.LatLng(curPosition.lat, latMarker.getLatLng().lng));
- lngMarker.setLatLng(new L.LatLng(lngMarker.getLatLng().lat, curPosition.lng));
+ latMarker.setLatLng(new L.LatLng(curPosition.lat, latMarker.getLatLng().lng, true));
+ lngMarker.setLatLng(new L.LatLng(lngMarker.getLatLng().lat, curPosition.lng, true));
// Sort marker positions in nw, ne, sw, se order
var corners = [that._nwMarker.getLatLng(),
that._neMarker.getLatLng(),
this._setupDragendListener(marker);
},
- /* Call the callback (given by name) if it was supplied in options */
- _callCallback: function(callbackName) {
- if (this.options[callbackName]) {
- this.options[callbackName](this.getBounds());
- }
- },
-
- /* Call the onChange callback whenever dragend is triggered on the
+ /* Emit a change event whenever dragend is triggered on the
given marker */
_setupDragendListener: function(marker) {
- if (this.options.onChange) {
- var that = this;
- marker.on('dragend', function(e) {
- that._callCallback("onChange");
- });
- }
+ var that = this;
+ marker.on('dragend', function(e) {
+ that.fire("change", {bounds: that.getBounds()});
+ });
},
/* Create bounds for the mask rectangles and the location
var mapBounds = this._map.getBounds(),
outerBounds = new L.LatLngBounds(
new L.LatLng(mapBounds.getSouthWest().lat-0.1,
- mapBounds.getSouthWest().lng-0.1),
+ mapBounds.getSouthWest().lng-0.1, true),
new L.LatLng(mapBounds.getNorthEast().lat+0.1,
- mapBounds.getNorthEast().lng+0.1)
+ mapBounds.getNorthEast().lng+0.1, true)
);
// The south west and north east points of the mask */
this._one = outerBounds.getNorthEast();
// Bounds for the mask rectangles
- this._northBounds = new L.LatLngBounds(new L.LatLng(this._ne.lat, this._osw.lng), this._one),
- this._westBounds = new L.LatLngBounds(new L.LatLng(this._sw.lat, this._osw.lng), this._nw),
- this._eastBounds = new L.LatLngBounds(this._se, new L.LatLng(this._ne.lat, this._one.lng)),
- this._southBounds = new L.LatLngBounds(this._osw, new L.LatLng(this._sw.lat, this._one.lng));
+ this._northBounds = new L.LatLngBounds(new L.LatLng(this._ne.lat, this._osw.lng, true), this._one);
+ this._westBounds = new L.LatLngBounds(new L.LatLng(this._sw.lat, this._osw.lng, true), this._nw);
+ this._eastBounds = new L.LatLngBounds(this._se, new L.LatLng(this._ne.lat, this._one.lng, true));
+ this._southBounds = new L.LatLngBounds(this._osw, new L.LatLng(this._sw.lat, this._one.lng, true));
},
/* Initializes rectangles and markers */
this._enabled = true;
- // Call the enabled callback
- this._callCallback("onEnabled");
+ // Fire the enabled event
+ this.fire("enabled");
},
/* Disable the location filter */
this._enabled = false;
- // Call the disabled callback
- this._callCallback("onDisabled");
+ // Fire the disabled event
+ this.fire("disabled");
},
/* Create a button that allows the user to adjust the location
onClick: function(event) {
that._adjustToMap();
- that._callCallback("onAdjustToZoomClick");
+ that.fire("adjustToZoomClick");
}
}).addTo(this._buttonContainer);
},
if (!that._enabled) {
// Enable the location filter
that.enable();
- that._callCallback("onEnableClick");
+ that.fire("enableClick");
} else {
// Disable the location filter
that.disable();
- that._callCallback("onDisableClick");
+ that.fire("disableClick");
}
}
}).addTo(this._buttonContainer);
}
- this._buttonContainer.addTo(this._map);
+ if (this.options.enableButton || this.options.adjustButton) {
+ this._buttonContainer.addTo(this._map);
+ }
}
-});
\ No newline at end of file
+});