Fix: fix inspector

This commit is contained in:
Pieter Vander Vennet 2024-12-19 13:59:40 +01:00
parent 387750a0b6
commit e0931dceba
8 changed files with 211 additions and 24 deletions

View file

@ -11,7 +11,7 @@
</head>
<body>
<div id="main">Loading inspector...</div>
<script src="./src/UI/InspectorGUI.svelte" type="module"></script>
<script src="./src/UI/InspectorGUI.ts" type="module"></script>
<script async data-goatcounter="https://pietervdvn.goatcounter.com/count" src="//gc.zgo.at/count.js" crossorigin="anonymous" integrity="sha384-QfJMxHNngbaF6IXH2kBwubsLYh7GVSFmJOX1O1YKJBq+zv1VVypB9BysTzyG1D1U"></script>
</body>

View file

@ -616,7 +616,28 @@
"title": "MapComplete"
},
"inspector": {
"menu": "Inspect a contributor"
"aggregateView": "Aggregate",
"answeredCountTimes": "Answered {count} times",
"backToIndex": "Back to the map overview",
"createdBy": "Created by {contributor}",
"earlierInspected": "See contributors you've inspected before",
"images": "Created images",
"load": "Inspect changes for map area",
"mapView": "Map",
"menu": "Inspect a contributor",
"onlyGeometry": "Only changes in geometry",
"previouslySpied": {
"addLabel": "Add a label",
"allChanges": "Load all changes for users with this label",
"label": "Label",
"noLabels": "No labels",
"remove": "Remove",
"time": "Time of last inspection",
"title": "Earlier inspected constributors",
"username": "Username"
},
"tableView": "Overview",
"title": "Inspect a contributor"
},
"move": {
"cancel": "Select a different reason",

View file

@ -2036,6 +2036,9 @@
},
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Vogelkijkhut {name}"
},
@ -6340,6 +6343,11 @@
}
},
"title": {
"mappings": {
"0": {
"then": "{name}"
}
},
"render": "Natuurgebied"
}
},
@ -6871,6 +6879,21 @@
"render": "Picknicktafel"
}
},
"play_forest": {
"description": "Een speelbos is een vrij toegankelijke zone in een bos",
"name": "Speelbossen",
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Speelbos {name}"
}
},
"render": "Speelbos"
}
},
"playground": {
"deletion": {
"nonDeleteMappings": {
@ -8428,6 +8451,9 @@
},
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Voetpad"
},
@ -10580,13 +10606,25 @@
}
},
"village_green": {
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)"
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)",
"name": "Speelweide",
"title": {
"mappings": {
"0": {
"then": "{name}"
}
},
"render": "Speelweide"
}
},
"visitor_information_centre": {
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
"name": "Bezoekerscentrum",
"title": {
"mappings": {
"0": {
"then": "{name:nl}"
},
"1": {
"then": "{name}"
}
@ -10816,4 +10854,4 @@
"render": "windturbine"
}
}
}
}

View file

@ -653,8 +653,37 @@
"building type": {
"question": "Wat voor soort gebouw is dit?"
},
"grb-fixme": {
"mappings": {
"0": {
"then": "Geen fixme"
}
},
"question": "Wat zegt de fixme?",
"render": "De fixme is <b>{fixme}</b>"
},
"grb-housenumber": {
"mappings": {
"0": {
"then": "Geen huisnummer"
}
},
"question": "Wat is het huisnummer?",
"render": "Het huisnummer is <b>{addr:housenumber}</b>"
},
"grb-min-level": {
"question": "Hoeveel verdiepingen ontbreken?",
"render": "Dit gebouw begint maar op de {building:min_level} verdieping"
},
"grb-reference": {
"render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}"
},
"grb-street": {
"question": "Wat is de straat?",
"render": "De straat is <b>{addr:street}</b>"
},
"grb-unit": {
"render": "De wooneenheid-aanduiding is <b>{addr:unit}</b> "
}
}
},
@ -671,8 +700,35 @@
}
}
}
},
"5": {
"override": {
"tagRenderings+": {
"0": {
"mappings": {
"0": {
"then": "Geen omliggend OSM-gebouw gevonden"
}
}
},
"3": {
"mappings": {
"0": {
"then": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen. <div class=subtle>Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen</div>"
}
},
"render": {
"special": {
"text": "Voeg dit adres als een nieuw adrespunt toe"
}
}
}
}
}
}
}
},
"shortDescription": "Grb import helper tool",
"title": "GRB import helper"
},
"guideposts": {
"description": "Wegwijzers (ook wel handwijzer genoemd) zijn vaak te vinden langs officiële wandel-, fiets-, ski- of paardrijroutes om de richtingen naar verschillende bestemmingen aan te geven. Vaak zijn ze vernoemd naar een regio of plaats en geven ze de hoogte aan.\n\nDe positie van een wegwijzer kan door een wandelaar/fietser/renner/skiër worden gebruikt als bevestiging van de huidige positie, vooral als ze een gedrukte kaart zonder GPS-ontvanger gebruiken. ",
@ -1108,6 +1164,11 @@
},
"title": "Dierenartsen, hondenloopzones en andere huisdiervriendelijke plaatsen"
},
"play_forests": {
"description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord.",
"shortDescription": "Deze kaart toont speelbossen",
"title": "Speelbossen"
},
"playgrounds": {
"description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen",
"shortDescription": "Een kaart met speeltuinen",
@ -1181,6 +1242,47 @@
"description": "Alles om te skiën",
"title": "Skipistes en kabelbanen"
},
"speelplekken": {
"description": "<h3>Welkom bij de Groendoener!</h3>De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan <b>200 grote en kleine speelplekken</b> liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!<br/><br/>Het project groendoener kadert binnen het strategisch project <a href='https://www.provincieantwerpen.be/aanbod/dlm/samenwerkingsverbanden/zuidrand/projecten/strategisch-project-beleefbare-open-ruimte.html' target='_blank'>Beleefbare Open Ruimte in de Antwerpse Zuidrand</a> en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.<br/><img class='w-full md:w-1/2' src='./assets/themes/speelplekken/provincie_antwerpen.jpg'/><img class='w-full md:w-1/2' src='./assets/themes/speelplekken/Departement_Omgeving_Vlaanderen.png'/>",
"layers": {
"6": {
"name": "Wandelroutes van provincie Antwerpen",
"tagRenderings": {
"walk-description": {
"render": "<h3>Korte beschrijving:</h3>{description}"
},
"walk-length": {
"render": "Deze wandeling is <b>{_length:km}km</b> lang"
},
"walk-operator": {
"question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
},
"walk-operator-email": {
"question": "Naar wie kan men emailen bij problemen rond signalisatie?",
"render": "Bij problemen met signalisatie kan men emailen naar <a href='mailto:{operator:email}'>{operator:email}</a>"
},
"walk-type": {
"mappings": {
"0": {
"then": "Dit is een internationale wandelroute"
},
"1": {
"then": "Dit is een nationale wandelroute"
},
"2": {
"then": "Dit is een regionale wandelroute"
},
"3": {
"then": "Dit is een lokale wandelroute"
}
}
}
}
}
},
"shortDescription": "Speelplekken in de Antwerpse Zuidrand",
"title": "Welkom bij de groendoener!"
},
"sport_pitches": {
"description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen",
"shortDescription": "Deze kaart toont sportvelden",
@ -1301,6 +1403,10 @@
},
"title": "Straatverlichting"
},
"street_lighting_assen": {
"description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen",
"title": "Straatverlichting - Assen"
},
"surveillance": {
"description": "Op deze open kaart kan je bewakingscamera's vinden.",
"shortDescription": "Bewakingscameras en dergelijke",
@ -1414,9 +1520,13 @@
"description": "Kaart met afvalbakken en recyclingfaciliteiten.",
"title": "Afval"
},
"waste_assen": {
"description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.",
"title": "Afval - Assen"
},
"waste_basket": {
"description": "Op deze kaart vind je afvalbakken bij jou in de buurt. Als er een afvalbak ontbreekt op deze kaart, kun je deze zelf toevoegen",
"shortDescription": "Een kaart met vuilnisbakken",
"title": "Vuilnisbakken"
}
}
}

View file

@ -30,10 +30,11 @@
return true
}
console.log(
"Checking if ",
"Checking if",
step.tags["_last_edit:contributor"],
"is contained in",
onlyShowChangesBy
onlyShowChangesBy,
usernames.has(step.tags["_last_edit:contributor"])
)
return usernames.has(step.tags["_last_edit:contributor"])
})
@ -49,7 +50,7 @@
* These layers are only shown if there are tag changes as well
*/
const ignoreLayersIfNoChanges: ReadonlySet<string> = new Set(["walls_and_buildings"])
const t = Translations.t.inspector.previousContributors
const t = Translations.t.inspector
</script>
{#if !$allGeometry || !ignoreLayersIfNoChanges.has($lastStep?.layer?.id)}

View file

@ -5,7 +5,8 @@
import { createEventDispatcher } from "svelte"
import { XCircleIcon } from "@babeard/svelte-heroicons/solid"
import AccordionSingle from "../Flowbite/AccordionSingle.svelte"
import Dropdown from "../Base/Dropdown.svelte"
import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte"
export let osmConnection: OsmConnection
export let inspectedContributors: UIEventSource<
@ -41,23 +42,32 @@
inspectedContributors.data.sort((a, b) => (a[key] ?? "").localeCompare(b[key] ?? ""))
inspectedContributors.ping()
}
const t = Translations.t.inspector.previouslySpied
</script>
<LoginToggle ignoreLoading state={{ osmConnection }}>
<table class="w-full">
<tr>
<td>
<button class="as-link cursor-pointer" on:click={() => sort("name")}>Contributor</button>
</td>
<td>
<button class="as-link cursor-pointer" on:click={() => sort("visitedTime")}>
Visited time
<button class="as-link cursor-pointer" on:click={() => sort("name")}>
<Tr t={t.username} />
</button>
</td>
<td>
<button class="as-link cursor-pointer" on:click={() => sort("label")}>Label</button>
<button class="as-link cursor-pointer" on:click={() => sort("visitedTime")}>
<Tr t={t.time} />
</button>
</td>
<td>
<button class="as-link cursor-pointer" on:click={() => sort("label")}>
<Tr t={t.label} />
</button>
</td>
<td>
<Tr t={t.remove} />
</td>
<td>Remove</td>
</tr>
{#each $inspectedContributors as c}
<tr>
@ -85,7 +95,8 @@
<AccordionSingle>
<div slot="header">Labels</div>
{#if $labels.length === 0}
No labels
<Tr t={t.noLabels} />
{:else}
{#each $labels as label}
<div class="mx-2">
@ -102,7 +113,8 @@
)
}}
>
See all changes for these users
<Tr t={t.allChanges} />
</button>
</div>
{/each}
@ -115,7 +127,7 @@
class:disabled={!(labelField?.length > 0)}
class="disabled shrink-0"
>
Add label
<Tr t={t.addLabel} />
</button>
</div>
</AccordionSingle>

View file

@ -28,6 +28,7 @@
import Translations from "./i18n/Translations"
import Tr from "./Base/Tr.svelte"
console.log("Loading inspector GUI")
let username = QueryParameters.GetQueryParameter("user", undefined, "Inspect this user")
let step = new UIEventSource<"waiting" | "loading" | "done">("waiting")
let map = new UIEventSource<MlMap>(undefined)
@ -121,7 +122,7 @@
const t = Translations.t.inspector
</script>
<div class="flex h-full w-full flex-col">
<div class="flex h-screen w-full flex-col">
<div class="low-interaction flex items-center gap-x-2 p-2">
<MagnifyingGlassCircle class="h-12 w-12" />
<h1 class="m-0 mx-2 flex-shrink-0">
@ -192,7 +193,7 @@
<XCircleIcon class="h-6 w-6" on:click={() => selectedElement.set(undefined)} />
</div>
<History onlyShowChangesBy={$username} id={$selectedElement.properties.id} />
<History onlyShowChangesBy={$username.split(";")} id={$selectedElement.properties.id} />
</TitledPanel>
</Drawer>
{/if}
@ -218,7 +219,9 @@
</div>
<Page shown={showPreviouslyVisited}>
<div slot="header">Earlier inspected constributors</div>
<div slot="header">
<Tr t={t.previouslySpied.title} />
</div>
<PreviouslySpiedUsers
{osmConnection}
{inspectedContributors}

View file

@ -1,5 +1,7 @@
import InspectorGUI from "./InspectorGUI.svelte"
const target = document.getElementById("main")
target.innerHTML = ""
new InspectorGUI({
target: document.getElementById("main"),
target
})