From b9ffd2fe4e83c2ffab659ce54196ccab7c1f62d0 Mon Sep 17 00:00:00 2001 From: Marwin Hochfelsner <50826859+hlfan@users.noreply.github.com> Date: Fri, 14 Feb 2025 10:33:55 +0100 Subject: [PATCH] Add button for directions from location --- app/assets/javascripts/index/directions.js | 25 ++++++++++++++ app/assets/stylesheets/common.scss | 9 +++++ app/views/layouts/_search.html.erb | 39 ++++++++++------------ 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index 2338f537f5..b29ad69c71 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -71,6 +71,31 @@ OSM.Directions = function (map) { })); }); + $(".directions_form .locate").on("click", function () { + if ($(".directions_form .locate").hasClass("disabled")) return; + if (!navigator.geolocation) { + $(".directions_form .locate").addClass("disabled"); + return; + } + navigator.geolocation.getCurrentPosition(geoSuccess); + + function geoSuccess(position) { + const location = L.latLng(position.coords.latitude, position.coords.longitude), + [coordFrom, coordTo] = endpoints.map(ll => ll.latlng); + let routeTo; + if (coordTo) { + routeTo = coordTo.lat + "," + coordTo.lng; + } else if (coordFrom) { + routeTo = coordFrom.lat + "," + coordFrom.lng; + endpoints[0].swapCachedReverseGeocodes(endpoints[1]); + } + const routeFrom = location.lat + "," + location.lng; + OSM.router.route("/directions?" + new URLSearchParams({ + route: routeFrom + ";" + routeTo + })); + } + }); + $(".directions_form .btn-close").on("click", function (e) { e.preventDefault(); $(".describe_location").toggle(!endpoints[0].value); diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index a27976854f..f0b7b120c5 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -581,6 +581,15 @@ header .search_forms, } } +.search_forms { + .geolocate { + transition: filter 0.15s ease-in-out; + } + .btn:not(:hover) .geolocate { + filter: brightness(53%); + } +} + /* Rules for search sidebar */ #sidebar .search_results_entry { diff --git a/app/views/layouts/_search.html.erb b/app/views/layouts/_search.html.erb index 691e9fa729..f383626e01 100644 --- a/app/views/layouts/_search.html.erb +++ b/app/views/layouts/_search.html.erb @@ -40,29 +40,26 @@
-
-
-
-
- <%= image_tag "marker-green.png", :class => "img-fluid", :data => { :type => "from" }, :draggable => "true" %> -
- <%= text_field_tag "route_from", params[:from], :placeholder => t("site.search.from"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %> -
-
-
- <%= image_tag "marker-red.png", :class => "img-fluid", :data => { :type => "to" }, :draggable => "true" %> -
- <%= text_field_tag "route_to", params[:to], :placeholder => t("site.search.to"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %> -
+
+
+ <%= image_tag "marker-green.png", :class => "img-fluid", :data => { :type => "from" }, :draggable => "true" %>
-
- + <%= text_field_tag "route_from", params[:from], :placeholder => t("site.search.from"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %> + +
+
+
+ <%= image_tag "marker-red.png", :class => "img-fluid", :data => { :type => "to" }, :draggable => "true" %>
+ <%= text_field_tag "route_to", params[:to], :placeholder => t("site.search.to"), :autocomplete => "on", :class => "form-control py-1 px-2", :dir => "auto" %> +