This commit is contained in:
Marwin Hochfelsner 2025-03-12 16:13:50 +00:00 committed by GitHub
commit f4f0c5543b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 1 deletions

View file

@ -14,5 +14,11 @@
"start_url": "/",
"theme_color": "#7ebc6f",
"background_color": "#fff",
"display": "minimal-ui"
"display": "minimal-ui",
"protocol_handlers": [
{
"protocol": "geo",
"url": "/?geouri=%s"
}
]
}

View file

@ -63,6 +63,7 @@ OSM = {
mapParams: function (search) {
const params = OSM.params(search),
geoURI = URL.canParse(params.geouri) ? new URL(params.geouri) : {},
mapParams = {};
if (params.mlon && params.mlat) {
@ -70,6 +71,11 @@ OSM = {
mapParams.mlon = parseFloat(params.mlon);
mapParams.mlat = parseFloat(params.mlat);
}
if (geoURI.lon && geoURI.lat) {
mapParams.marker = true;
mapParams.mlon = parseFloat(geoURI.lon);
mapParams.mlat = parseFloat(geoURI.lat);
}
// Old-style object parameters; still in use for edit links e.g. /edit?way=1234
for (const type of ["node", "way", "relation", "note"]) {
@ -100,6 +106,9 @@ OSM = {
mapParams.lon = params.mlon;
mapParams.lat = params.mlat;
mapParams.zoom = params.zoom || 12;
} else if (geoURI.pathname) {
[mapParams.lat, mapParams.lon] = geoURI.pathname.split(",");
mapParams.zoom = geoURI.searchParams?.get("z") || (geoURI.pathname.replaceAll(/,?[-\d]+\./g, "").length / 0.6) - 2;
} else if (loc) {
[mapParams.lon, mapParams.lat, mapParams.zoom] = loc;
} else if (OSM.home) {

View file

@ -82,6 +82,18 @@ describe("OSM", function () {
expect(params).to.have.property("zoom", 16);
});
it("parses geoURIs", function () {
let params = OSM.mapParams("?geouri=geo%3A57.6247%2C-3.6845");
expect(params).to.have.property("lat", 57.6247);
expect(params).to.have.property("lon", -3.6845);
expect(params).to.have.property("zoom", 34 / 3);
params = OSM.mapParams("?geouri=geo%3A57.6247%2C-3.6845%3Fz%3D16");
expect(params).to.have.property("lat", 57.6247);
expect(params).to.have.property("lon", -3.6845);
expect(params).to.have.property("zoom", 16);
});
it("parses lat/lon/zoom from the hash", function () {
location.hash = "#map=16/57.6247/-3.6845";
const params = OSM.mapParams("?");