From: Tom Hughes Date: Mon, 19 Aug 2024 18:05:44 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/5095' X-Git-Tag: live~1113 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/99a7d21a9bc50cdb38559dd0a8b60bc60072b5a1?hp=3b729822f6d3c03b2f551cb90edb1ddc674d3063 Merge remote-tracking branch 'upstream/pull/5095' --- diff --git a/app/assets/javascripts/index/directions-endpoint.js b/app/assets/javascripts/index/directions-endpoint.js index d111eca35..8489dd6df 100644 --- a/app/assets/javascripts/index/directions-endpoint.js +++ b/app/assets/javascripts/index/directions-endpoint.js @@ -14,24 +14,40 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch autoPan: true }); - endpoint.marker.on("drag dragend", function (e) { + endpoint.enable = function () { + endpoint.marker.on("drag dragend", markerDragListener); + input.on("keydown", inputKeydownListener); + input.on("change", inputChangeListener); + }; + + endpoint.disable = function () { + endpoint.marker.off("drag dragend", markerDragListener); + input.off("keydown", inputKeydownListener); + input.off("change", inputChangeListener); + + if (endpoint.geocodeRequest) endpoint.geocodeRequest.abort(); + delete endpoint.geocodeRequest; + map.removeLayer(endpoint.marker); + }; + + function markerDragListener(e) { var latlng = e.target.getLatLng(); setLatLng(latlng); setInputValueFromLatLng(latlng); endpoint.value = input.val(); dragCallback(e.type === "drag"); - }); + } - input.on("keydown", function () { + function inputKeydownListener() { input.removeClass("is-invalid"); - }); + } - input.on("change", function (e) { + function inputChangeListener(e) { // make text the same in both text boxes var value = e.target.value; endpoint.setValue(value); - }); + } endpoint.setValue = function (value, latlng) { endpoint.value = value; @@ -49,12 +65,11 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch }; function getGeocode() { - endpoint.awaitingGeocode = true; - var viewbox = map.getBounds().toBBoxString(); // ,,, + var geocodeUrl = OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox; - $.getJSON(OSM.NOMINATIM_URL + "search?q=" + encodeURIComponent(endpoint.value) + "&format=json&viewbox=" + viewbox, function (json) { - endpoint.awaitingGeocode = false; + endpoint.geocodeRequest = $.getJSON(geocodeUrl, function (json) { + delete endpoint.geocodeRequest; if (json.length === 0) { input.addClass("is-invalid"); alert(I18n.t("javascripts.directions.errors.no_place", { place: endpoint.value })); diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index ff76f4008..7e8c18fb8 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -290,6 +290,9 @@ OSM.Directions = function (map) { endpoints[type === "from" ? 0 : 1].setValue(value, ll); }); + endpoints[0].enable(); + endpoints[1].enable(); + var params = Qs.parse(location.search.substring(1)), route = (params.route || "").split(";"), from = route[0] && L.latLng(route[0].split(",")), @@ -318,11 +321,12 @@ OSM.Directions = function (map) { $(".directions_form").hide(); $("#map").off("dragend dragover drop"); + endpoints[0].disable(); + endpoints[1].disable(); + map .removeLayer(popup) - .removeLayer(polyline) - .removeLayer(endpoints[0].marker) - .removeLayer(endpoints[1].marker); + .removeLayer(polyline); }; return page;