From: Anton Khorev Date: Tue, 4 Oct 2022 12:40:25 +0000 (+0300) Subject: Treat notes as map objects X-Git-Tag: live~1540^2 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/ec34d220397567b89c984c477726d74d085663e5 Treat notes as map objects --- diff --git a/app/assets/javascripts/index/note.js b/app/assets/javascripts/index/note.js index 4da3395fb..8188b8aee 100644 --- a/app/assets/javascripts/index/note.js +++ b/app/assets/javascripts/index/note.js @@ -1,7 +1,6 @@ OSM.Note = function (map) { var content = $("#sidebar_content"), - page = {}, - halo, currentNote; + page = {}; var noteIcons = { "new": L.icon({ @@ -70,29 +69,15 @@ OSM.Note = function (map) { content.find("textarea").val("").trigger("input"); - var data = $(".details").data(), - latLng = L.latLng(data.coordinates.split(",")); + var data = $(".details").data(); - if (!halo || !map.hasLayer(halo)) { - halo = L.circleMarker(latLng, { - weight: 2.5, - radius: 20, - fillOpacity: 0.5, - 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.addObject({ + type: "note", + id: parseInt(id, 10), + latLng: L.latLng(data.coordinates.split(",")), + icon: noteIcons[data.status] }); - map.addLayer(currentNote); - if (callback) callback(); } @@ -108,8 +93,7 @@ OSM.Note = function (map) { } page.unload = function () { - if (map.hasLayer(halo)) map.removeLayer(halo); - if (map.hasLayer(currentNote)) map.removeLayer(currentNote); + map.removeObject(); }; return page; diff --git a/app/assets/javascripts/leaflet.map.js b/app/assets/javascripts/leaflet.map.js index 105b03ed6..83cb73ec5 100644 --- a/app/assets/javascripts/leaflet.map.js +++ b/app/assets/javascripts/leaflet.map.js @@ -242,42 +242,64 @@ L.OSM.Map = L.Map.extend({ interactive: false }; + var haloStyle = { + weight: 2.5, + radius: 20, + fillOpacity: 0.5, + color: "#FF6200" + }; + this.removeObject(); - var map = this; - this._objectLoader = $.ajax({ - url: OSM.apiUrl(object), - dataType: "xml", - success: function (xml) { - map._object = object; - - map._objectLayer = new L.OSM.DataLayer(null, { - styles: { - node: objectStyle, - way: objectStyle, - area: objectStyle, - changeset: changesetStyle - } - }); - - map._objectLayer.interestingNode = function (node, ways, relations) { - if (object.type === "node") { - return true; - } else if (object.type === "relation") { - for (var i = 0; i < relations.length; i++) { - if (relations[i].members.indexOf(node) !== -1) return true; + 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; + this._objectLoader = $.ajax({ + url: OSM.apiUrl(object), + dataType: "xml", + success: function (xml) { + map._object = object; + + map._objectLayer = new L.OSM.DataLayer(null, { + styles: { + node: objectStyle, + way: objectStyle, + area: objectStyle, + changeset: changesetStyle + } + }); + + map._objectLayer.interestingNode = function (node, ways, relations) { + if (object.type === "node") { + return true; + } else if (object.type === "relation") { + for (var i = 0; i < relations.length; i++) { + if (relations[i].members.indexOf(node) !== -1) return true; + } + } else { + return false; } - } else { - return false; - } - }; + }; - map._objectLayer.addData(xml); - map._objectLayer.addTo(map); + map._objectLayer.addData(xml); + map._objectLayer.addTo(map); - if (callback) callback(map._objectLayer.getBounds()); - } - }); + if (callback) callback(map._objectLayer.getBounds()); + } + }); + } }, removeObject: function () {