app: show local filename in top bar (#572)

* fix URL state of showTileBoundaries
* improve cursor hover
This commit is contained in:
Brandon Liu
2025-05-12 16:28:47 -07:00
committed by GitHub
parent 1c48de7492
commit 77612d37ee
3 changed files with 35 additions and 4 deletions

View File

@@ -200,6 +200,16 @@ export function Frame(props: {
<h1 class="hidden md:inline text-xl mx-5">{pageTitle}</h1> <h1 class="hidden md:inline text-xl mx-5">{pageTitle}</h1>
<form class="flex flex-1 items-center" onSubmit={loadTileset}> <form class="flex flex-1 items-center" onSubmit={loadTileset}>
<span class="relative flex flex-1 items-center app-border"> <span class="relative flex flex-1 items-center app-border">
<Show
when={
props.tileset() &&
props.tileset()?.getStateUrl() === undefined
}
>
<span class="bg-yellow-500 rounded px-2 text-sm text-black">
local file {props.tileset()?.getLocalFileName()}
</span>
</Show>
<input <input
class="px-2 flex-1" class="px-2 flex-1"
type="text" type="text"

View File

@@ -369,6 +369,10 @@ function MapView(props: {
fitToBounds(); fitToBounds();
} }
if (props.showTileBoundaries()) {
map.showTileBoundaries = true;
}
setZoom(map.getZoom()); setZoom(map.getZoom());
map.on("zoom", (e) => { map.on("zoom", (e) => {
setZoom(e.target.getZoom()); setZoom(e.target.getZoom());
@@ -461,7 +465,7 @@ function MapView(props: {
</button> </button>
<span class="app-border rounded px-2 flex items-center"> <span class="app-border rounded px-2 flex items-center">
<input <input
class="mr-1" class="mr-1 cursor-pointer"
id="inspectFeatures" id="inspectFeatures"
checked={props.inspectFeatures()} checked={props.inspectFeatures()}
type="checkbox" type="checkbox"
@@ -469,11 +473,13 @@ function MapView(props: {
props.setInspectFeatures(!props.inspectFeatures()); props.setInspectFeatures(!props.inspectFeatures());
}} }}
/> />
<label for="inspectFeatures">Inspect features</label> <label for="inspectFeatures" class="cursor-pointer">
Inspect features
</label>
</span> </span>
<span class="app-border rounded px-2 flex items-center"> <span class="app-border rounded px-2 flex items-center">
<input <input
class="mr-1" class="mr-1 cursor-pointer"
id="showTileBoundaries" id="showTileBoundaries"
checked={props.showTileBoundaries()} checked={props.showTileBoundaries()}
type="checkbox" type="checkbox"
@@ -481,7 +487,9 @@ function MapView(props: {
props.setShowTileBoundaries(!props.showTileBoundaries()); props.setShowTileBoundaries(!props.showTileBoundaries());
}} }}
/> />
<label for="showTileBoundaries">Show tile bounds</label> <label class="cursor-pointer" for="showTileBoundaries">
Show tile bounds
</label>
</span> </span>
<button <button
class="px-4 py-1 btn-secondary cursor-pointer" class="px-4 py-1 btn-secondary cursor-pointer"

View File

@@ -16,6 +16,7 @@ export interface Tileset {
getZxy(z: number, x: number, y: number): Promise<ArrayBuffer | undefined>; getZxy(z: number, x: number, y: number): Promise<ArrayBuffer | undefined>;
getMetadata(): Promise<Metadata>; getMetadata(): Promise<Metadata>;
getStateUrl(): string | undefined; getStateUrl(): string | undefined;
getLocalFileName(): string;
getMaplibreSourceUrl(): string; getMaplibreSourceUrl(): string;
getBounds(): Promise<[number, number, number, number]>; getBounds(): Promise<[number, number, number, number]>;
getMaxZoom(): Promise<number>; getMaxZoom(): Promise<number>;
@@ -91,6 +92,10 @@ class RemotePMTilesTileset extends PMTilesTileset implements Tileset {
return this.url; return this.url;
} }
getLocalFileName() {
return "";
}
getMaplibreSourceUrl() { getMaplibreSourceUrl() {
return `pmtiles://${this.url}`; return `pmtiles://${this.url}`;
} }
@@ -113,6 +118,10 @@ class LocalPMTilesTileset extends PMTilesTileset implements Tileset {
return undefined; return undefined;
} }
getLocalFileName() {
return this.name;
}
getMaplibreSourceUrl() { getMaplibreSourceUrl() {
return `pmtiles://${this.name}`; return `pmtiles://${this.name}`;
} }
@@ -169,6 +178,10 @@ class TileJSONTileset implements Tileset {
return this.url; return this.url;
} }
getLocalFileName() {
return "";
}
async getZxy(z: number, x: number, y: number) { async getZxy(z: number, x: number, y: number) {
const resp = await fetch(this.url); const resp = await fetch(this.url);
const j = await resp.json(); const j = await resp.json();