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);
}
});
}
page.pushstate = page.popstate = function (path) {
- OSM.loadSidebarContent(path, page.load);
+ OSM.loadSidebarContent(path, function () {
+ page.load(path);
+ });
};
function newHalo(loc, a) {
}
}
- page.load = function () {
+ page.load = function (path) {
if (addNoteButton.hasClass("disabled")) return;
if (addNoteButton.hasClass("active")) return;
map.addLayer(noteLayer);
- var mapSize = map.getSize();
- var markerPosition;
+ var params = querystring.parse(path.substring(path.indexOf('?') + 1));
+ var markerLatlng;
+
+ if (params.lat && params.lon) {
+ markerLatlng = L.latLng(params.lat, params.lon);
+
+ 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;
+ }
- markerPosition = [mapSize.x / 2, mapSize.y / 2];
+ 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(map.containerPointToLatLng(markerPosition), {
+ newNote = L.marker(markerLatlng, {
icon: noteIcons["new"],
opacity: 0.9,
draggable: true