Merge 77b1c8015f
into 5604062164
This commit is contained in:
commit
f4f0c5543b
3 changed files with 28 additions and 1 deletions
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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("?");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue