- if (data.minLon && data.minLat && data.maxLon && data.maxLat) {
- map.fitBounds([[data.minLat, data.minLon],
- [data.maxLat, data.maxLon]]);
- } else {
- map.setView(center, data.zoom);
+ $("#sidebar_content")
+ .on("click", ".search_more a", clickSearchMore)
+ .on("click", ".search_results_entry a.set_position", clickSearchResult)
+ .on("mouseover", "li.search_results_entry:has(a.set_position)", showSearchResult)
+ .on("mouseout", "li.search_results_entry:has(a.set_position)", hideSearchResult);
+
+ const markers = L.layerGroup().addTo(map);
+
+ function clickSearchMore(e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ const div = $(this).parents(".search_more"),
+ csrf_param = $("meta[name=csrf-param]").attr("content"),
+ csrf_token = $("meta[name=csrf-token]").attr("content"),
+ params = new URLSearchParams();
+
+ $(this).hide();
+ div.find(".loader").show();
+
+ params.set(csrf_param, csrf_token);
+
+ fetch($(this).attr("href"), {
+ method: "POST",
+ body: params
+ })
+ .then(response => response.text())
+ .then(data => div.replaceWith(data));
+ }
+
+ function showSearchResult() {
+ let marker = $(this).data("marker");
+
+ if (!marker) {
+ const data = $(this).find("a.set_position").data();
+
+ marker = L.marker([data.lat, data.lon], { icon: OSM.getUserIcon() });
+
+ $(this).data("marker", marker);