Allow context menu to add notes without panning the map

This commit is contained in:
Tom Hughes 2017-02-12 17:26:17 +00:00
parent e4f1588aa1
commit 8376a430b6
2 changed files with 36 additions and 9 deletions

View file

@ -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);
}
});

View file

@ -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