Treat notes as map objects

This commit is contained in:
Anton Khorev 2022-10-04 15:40:25 +03:00
parent fdcd5d6b80
commit ec34d22039
2 changed files with 60 additions and 54 deletions

View file

@ -1,7 +1,6 @@
OSM.Note = function (map) { OSM.Note = function (map) {
var content = $("#sidebar_content"), var content = $("#sidebar_content"),
page = {}, page = {};
halo, currentNote;
var noteIcons = { var noteIcons = {
"new": L.icon({ "new": L.icon({
@ -70,28 +69,14 @@ OSM.Note = function (map) {
content.find("textarea").val("").trigger("input"); content.find("textarea").val("").trigger("input");
var data = $(".details").data(), var data = $(".details").data();
latLng = L.latLng(data.coordinates.split(","));
if (!halo || !map.hasLayer(halo)) { map.addObject({
halo = L.circleMarker(latLng, { type: "note",
weight: 2.5, id: parseInt(id, 10),
radius: 20, latLng: L.latLng(data.coordinates.split(",")),
fillOpacity: 0.5, icon: noteIcons[data.status]
color: "#FF6200"
}); });
map.addLayer(halo);
}
if (currentNote && map.hasLayer(currentNote)) map.removeLayer(currentNote);
currentNote = L.marker(latLng, {
icon: noteIcons[data.status],
opacity: 1,
interactive: true
});
map.addLayer(currentNote);
if (callback) callback(); if (callback) callback();
} }
@ -108,8 +93,7 @@ OSM.Note = function (map) {
} }
page.unload = function () { page.unload = function () {
if (map.hasLayer(halo)) map.removeLayer(halo); map.removeObject();
if (map.hasLayer(currentNote)) map.removeLayer(currentNote);
}; };
return page; return page;

View file

@ -242,8 +242,29 @@ L.OSM.Map = L.Map.extend({
interactive: false interactive: false
}; };
var haloStyle = {
weight: 2.5,
radius: 20,
fillOpacity: 0.5,
color: "#FF6200"
};
this.removeObject(); this.removeObject();
if (object.type === "note") {
this._objectLoader = {
abort: function () {}
};
this._object = object;
this._objectLayer = L.featureGroup().addTo(this);
L.circleMarker(object.latLng, haloStyle).addTo(this._objectLayer);
L.marker(object.latLng, {
icon: object.icon,
opacity: 1,
interactive: true
}).addTo(this._objectLayer);
if (callback) callback(this._objectLayer.getBounds());
} else { // element or changeset handled by L.OSM.DataLayer
var map = this; var map = this;
this._objectLoader = $.ajax({ this._objectLoader = $.ajax({
url: OSM.apiUrl(object), url: OSM.apiUrl(object),
@ -278,6 +299,7 @@ L.OSM.Map = L.Map.extend({
if (callback) callback(map._objectLayer.getBounds()); if (callback) callback(map._objectLayer.getBounds());
} }
}); });
}
}, },
removeObject: function () { removeObject: function () {