From e8016e04e899dc115c7af374fe91e68b7b0e9254 Mon Sep 17 00:00:00 2001
From: Marwin Hochfelsner <50826859+hlfan@users.noreply.github.com>
Date: Sat, 1 Aug 2026 06:25:08 +0200
Subject: [PATCH] Rework map url getters
---
app/assets/javascripts/leaflet.map.js | 54 +++++++++++++++----------
app/assets/javascripts/leaflet.share.js | 25 ++++--------
2 files changed, 40 insertions(+), 39 deletions(-)
diff --git a/app/assets/javascripts/leaflet.map.js b/app/assets/javascripts/leaflet.map.js
index ba12d7fbb..785ebcf37 100644
--- a/app/assets/javascripts/leaflet.map.js
+++ b/app/assets/javascripts/leaflet.map.js
@@ -138,22 +138,20 @@ L.OSM.Map = L.Map.extend({
},
getUrl: function (marker) {
- const params = {};
+ const search = new URLSearchParams();
if (marker && this.hasLayer(marker)) {
const { lat, lng } = OSM.cropLocation(marker.getLatLng(), this.getZoom());
- params.mlat = lat;
- params.mlon = lng;
+ search.set("mlat", lat);
+ search.set("mlon", lng);
}
- let url = location.protocol + "//" + OSM.SERVER_URL + "/";
- const query = new URLSearchParams(params),
+ const protocol = location.protocol,
+ hostname = OSM.SERVER_URL,
+ pathname = "/",
hash = OSM.formatHash(this);
- if (query) url += "?" + query;
- if (hash) url += hash;
-
- return url;
+ return `${protocol}//${hostname}${pathname}${search.toString() ? "?" + search : ""}${hash || ""}`;
},
getShortUrl: function (marker) {
@@ -167,17 +165,19 @@ L.OSM.Map = L.Map.extend({
// and drops the last 4 bits of the full 64 bit Morton code.
c1 = interlace(x >>> 17, y >>> 17),
c2 = interlace((x >>> 2) & 0x7fff, (y >>> 2) & 0x7fff);
- let str = location.protocol + "//" + location.hostname.replace(/^www\.openstreetmap\.org/i, "osm.org") + "/go/";
+ const protocol = location.protocol,
+ hostname = location.hostname.replace(/^www\.openstreetmap\.org/i, "osm.org");
+ let pathname = "/go/";
for (let i = 0; i < Math.ceil((zoom + 8) / 3.0) && i < 5; ++i) {
const digit = (c1 >> (24 - (6 * i))) & 0x3f;
- str += char_array.charAt(digit);
+ pathname += char_array[digit];
}
for (let i = 5; i < Math.ceil((zoom + 8) / 3.0); ++i) {
const digit = (c2 >> (24 - (6 * (i - 5)))) & 0x3f;
- str += char_array.charAt(digit);
+ pathname += char_array[digit];
}
- for (let i = 0; i < ((zoom + 8) % 3); ++i) str += "-";
+ for (let i = 0; i < ((zoom + 8) % 3); ++i) pathname += "-";
// Called to interlace the bits in x and y, making a Morton code.
function interlace(x, y) {
@@ -194,27 +194,39 @@ L.OSM.Map = L.Map.extend({
return (interlaced_x << 1) | interlaced_y;
}
- const params = new URLSearchParams();
+ const search = new URLSearchParams();
const layers = this.getLayersCode().replace("M", "");
if (layers) {
- params.set("layers", layers);
+ search.set("layers", layers);
}
if (marker && this.hasLayer(marker)) {
- params.set("m", "");
+ search.set("m", "");
}
if (this._object) {
- params.set(this._object.type, this._object.id);
+ search.set(this._object.type, this._object.id);
}
- const query = params.toString();
- if (query) {
- str += "?" + query;
+ return `${protocol}//${hostname}${pathname}${search.toString() ? "?" + search : ""}`;
+ },
+
+ getEmbedUrl: function (marker) {
+ const protocol = OSM.SERVER_PROTOCOL + ":",
+ hostname = OSM.SERVER_URL,
+ pathname = "/export/embed.html";
+ const search = new URLSearchParams({
+ bbox: this.getBounds().toBBoxString(),
+ layer: this.getMapBaseLayerId()
+ });
+
+ if (this.hasLayer(marker)) {
+ const latLng = marker.getLatLng().wrap();
+ search.set("marker", latLng.lat + "," + latLng.lng);
}
- return str;
+ return `${protocol}//${hostname}${pathname}?${search}`;
},
getGeoUri: function (marker) {
diff --git a/app/assets/javascripts/leaflet.share.js b/app/assets/javascripts/leaflet.share.js
index 5896eed9e..b0c19098b 100644
--- a/app/assets/javascripts/leaflet.share.js
+++ b/app/assets/javascripts/leaflet.share.js
@@ -120,7 +120,6 @@ L.OSM.share = function (options) {
function update() {
const layer = map.getMapBaseLayer();
const canEmbed = Boolean(layer && layer.options.canEmbed);
- let bounds = map.getBounds();
$("#link_marker")
.prop("checked", map.hasLayer(marker));
@@ -130,20 +129,12 @@ L.OSM.share = function (options) {
// Link / Embed
- $("#short_input").val(map.getShortUrl(marker));
- $("#long_input").val(map.getUrl(marker));
- $("#short_link").attr("href", map.getShortUrl(marker));
$("#long_link").attr("href", map.getUrl(marker));
+ $("#short_link").attr("href", map.getShortUrl(marker));
+ $("#embed_link").attr("href", map.getEmbedUrl(marker));
- const params = new URLSearchParams({
- bbox: bounds.toBBoxString(),
- layer: map.getMapBaseLayerId()
- });
-
- if (map.hasLayer(marker)) {
- const latLng = marker.getLatLng().wrap();
- params.set("marker", latLng.lat + "," + latLng.lng);
- }
+ $("#long_input").val($("#long_link").prop("href"));
+ $("#short_input").val($("#short_link").prop("href"));
if (!canEmbed && $("#nav-embed").hasClass("active")) {
bootstrap.Tab.getOrCreateInstance($("#long_link")).show();
@@ -155,9 +146,9 @@ L.OSM.share = function (options) {
$("#embed_html").val(
"
" +
- "" +
+ "" +
escapeHTML(OSM.i18n.t("javascripts.share.view_larger_map")) + "");
// Geo URI
@@ -168,9 +159,7 @@ L.OSM.share = function (options) {
// Image
- if (locationFilter.isEnabled()) {
- bounds = locationFilter.getBounds();
- }
+ const bounds = locationFilter.isEnabled() ? locationFilter.getBounds() : map.getBounds();
let scale = $("#mapnik_scale").val();
const size = L.bounds(L.CRS.EPSG3857.project(bounds.getSouthWest()),
--
2.47.3