Allow context menu to add notes without panning the map
This commit is contained in:
parent
e4f1588aa1
commit
8376a430b6
2 changed files with 36 additions and 9 deletions
|
@ -30,9 +30,12 @@ OSM.initializeContextMenu = function (map) {
|
|||
map.contextmenu.addItem({
|
||||
text: I18n.t("javascripts.context.add_note"),
|
||||
callback: function addNoteHere(e) {
|
||||
// I'd like this, instead of panning, to pass a query parameter about where to place the marker
|
||||
map.panTo(e.latlng.wrap(), {animate: false});
|
||||
OSM.router.route("/note/new");
|
||||
var precision = OSM.zoomPrecision(map.getZoom()),
|
||||
latlng = e.latlng.wrap(),
|
||||
lat = latlng.lat.toFixed(precision),
|
||||
lng = latlng.lng.toFixed(precision);
|
||||
|
||||
OSM.router.route("/note/new?lat=" + lat + "&lon=" + lng);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -77,7 +77,9 @@ OSM.NewNote = function(map) {
|
|||
}
|
||||
|
||||
page.pushstate = page.popstate = function (path) {
|
||||
OSM.loadSidebarContent(path, page.load);
|
||||
OSM.loadSidebarContent(path, function () {
|
||||
page.load(path);
|
||||
});
|
||||
};
|
||||
|
||||
function newHalo(loc, a) {
|
||||
|
@ -97,7 +99,7 @@ OSM.NewNote = function(map) {
|
|||
}
|
||||
}
|
||||
|
||||
page.load = function () {
|
||||
page.load = function (path) {
|
||||
if (addNoteButton.hasClass("disabled")) return;
|
||||
if (addNoteButton.hasClass("active")) return;
|
||||
|
||||
|
@ -105,12 +107,34 @@ OSM.NewNote = function(map) {
|
|||
|
||||
map.addLayer(noteLayer);
|
||||
|
||||
var mapSize = map.getSize();
|
||||
var markerPosition;
|
||||
var params = querystring.parse(path.substring(path.indexOf('?') + 1));
|
||||
var markerLatlng;
|
||||
|
||||
markerPosition = [mapSize.x / 2, mapSize.y / 2];
|
||||
if (params.lat && params.lon) {
|
||||
markerLatlng = L.latLng(params.lat, params.lon);
|
||||
|
||||
newNote = L.marker(map.containerPointToLatLng(markerPosition), {
|
||||
var markerPosition = map.latLngToContainerPoint(markerLatlng),
|
||||
mapSize = map.getSize(),
|
||||
panBy = L.point(0, 0);
|
||||
|
||||
if (markerPosition.x < 50) {
|
||||
panBy.x = markerPosition.x - 50;
|
||||
} else if (markerPosition.x > mapSize.x - 50) {
|
||||
panBy.x = 50 - mapSize.x + markerPosition.x;
|
||||
}
|
||||
|
||||
if (markerPosition.y < 50) {
|
||||
panBy.y = markerPosition.y - 50;
|
||||
} else if (markerPosition.y > mapSize.y - 50) {
|
||||
panBy.y = 50 - mapSize.y + markerPosition.y;
|
||||
}
|
||||
|
||||
map.panBy(panBy);
|
||||
} else {
|
||||
markerLatlng = map.getCenter();
|
||||
}
|
||||
|
||||
newNote = L.marker(markerLatlng, {
|
||||
icon: noteIcons["new"],
|
||||
opacity: 0.9,
|
||||
draggable: true
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue