From 48305273e52ac85667b85b69ac2f6d13b0de8d19 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 19 Dec 2024 13:59:40 +0100 Subject: [PATCH] Fix: fix inspector --- inspector.html | 2 +- langs/en.json | 23 ++++- langs/layers/nl.json | 42 +++++++- langs/themes/nl.json | 114 ++++++++++++++++++++- langs/zh_Hant.json | 54 +++++----- src/UI/History/History.svelte | 7 +- src/UI/History/PreviouslySpiedUsers.svelte | 34 ++++-- src/UI/InspectorGUI.svelte | 9 +- src/UI/InspectorGUI.ts | 4 +- 9 files changed, 238 insertions(+), 51 deletions(-) diff --git a/inspector.html b/inspector.html index 8f6f088bd..3f63817fc 100644 --- a/inspector.html +++ b/inspector.html @@ -11,7 +11,7 @@
Loading inspector...
- + diff --git a/langs/en.json b/langs/en.json index 73114b29b..f235fb9e8 100644 --- a/langs/en.json +++ b/langs/en.json @@ -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", diff --git a/langs/layers/nl.json b/langs/layers/nl.json index eeb48492c..74bf33124 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -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" } } -} +} \ No newline at end of file diff --git a/langs/themes/nl.json b/langs/themes/nl.json index 47a5f8968..3f55d0345 100644 --- a/langs/themes/nl.json +++ b/langs/themes/nl.json @@ -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 {fixme}" + }, + "grb-housenumber": { + "mappings": { + "0": { + "then": "Geen huisnummer" + } + }, + "question": "Wat is het huisnummer?", + "render": "Het huisnummer is {addr:housenumber}" + }, + "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 {addr:street}" + }, + "grb-unit": { + "render": "De wooneenheid-aanduiding is {addr:unit} " } } }, @@ -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.
Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
" + } + }, + "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": "

Welkom bij de Groendoener!

De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken 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!

Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand 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.
", + "layers": { + "6": { + "name": "Wandelroutes van provincie Antwerpen", + "tagRenderings": { + "walk-description": { + "render": "

Korte beschrijving:

{description}" + }, + "walk-length": { + "render": "Deze wandeling is {_length:km}km 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 {operator:email}" + }, + "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" } -} +} \ No newline at end of file diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index 389b736ef..1d0773ac7 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -193,18 +193,19 @@ "openOsmchaLastWeek": "檢視最近 7 天的編輯", "openPanoramax": "在這邊開啟 Panoramax", "openThemeDocumentation": "開啟專題地圖 {name} 的文件", + "panoramaxHelp": "Panoramax 是收集街景照片的線上服務,並且以自由授權釋出。貢獻者能夠使用這些照片來改進開放街圖", + "panoramaxLicenseCCBYSA": "你的圖片會以 CC-BY-SA 釋出 - 每個人都能夠在提及你名字的情形下再利用你的圖片", "seeOnMapillary": "在 Mapillary 觀看這張影像", "themeBy": "由 {author} 維護主題", "title": "版權與署名", - "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者", - "panoramaxHelp": "Panoramax 是收集街景照片的線上服務,並且以自由授權釋出。貢獻者能夠使用這些照片來改進開放街圖", - "panoramaxLicenseCCBYSA": "你的圖片會以 CC-BY-SA 釋出 - 每個人都能夠在提及你名字的情形下再利用你的圖片" + "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者" }, "back": "返回", "backToIndex": "回到所有主題地圖的總覽頁面", "backgroundMap": "選擇背景圖層", "backgroundSwitch": "切換背景", "cancel": "取消", + "clearPendingChanges": "清除待處理的變動", "confirm": "確認", "customThemeIntro": "這些是先前使用者創造的主題。", "customThemeTitle": "客製化主題", @@ -232,6 +233,7 @@ "downloadGeojson": "下載可視資料為 GeoJSON", "downloadGpx": "下載為 GPX 檔案", "downloadGpxHelper": "GPX 檔案能被大部分導航裝置或 app 使用", + "downloadImage": "下載圖片", "exporting": "匯出中…", "includeMetaData": "包括 metadata (上次編輯者、計算數值等)", "licenseInfo": "

著作權聲明

提供的資料採用 ODbL 授權釋出。可以用任何目標再利用資料,但是需 請閱讀完整的 著作權聲明。", @@ -241,8 +243,7 @@ }, "title": "下載", "toMuch": "有很多圖徵可以下載了", - "uploadGpx": "上傳軌跡到開放街圖", - "downloadImage": "下載圖片" + "uploadGpx": "上傳軌跡到開放街圖" }, "enableGeolocationForSafari": "你沒有看到要求地理位置權限的跳出視窗?", "enableGeolocationForSafariLink": "學習如何在設定當中啟用地理位置權限", @@ -251,9 +252,9 @@ "example": "例子", "examples": "例子", "filterPanel": { + "allTypes": "所有類型", "disableAll": "關閉所有", - "enableAll": "啟用所有", - "allTypes": "所有類型" + "enableAll": "啟用所有" }, "geopermissionDenied": "使用地理位置要求已經被拒絕", "histogram": { @@ -263,10 +264,10 @@ "background": "改變背景", "filter": "篩選資料", "jumpToLocation": "到你目前的位置", + "locationNotAvailable": "無法取得 GPS 位置,裝置有取得位置資訊還是在隧道內?", "menu": "選單", "zoomIn": "放大", - "zoomOut": "縮小", - "locationNotAvailable": "無法取得 GPS 位置,裝置有取得位置資訊還是在隧道內?" + "zoomOut": "縮小" }, "layerSelection": { "title": "選擇圖層", @@ -372,24 +373,24 @@ "save": "儲存", "screenToSmall": "在新視窗中開啟 {theme}", "search": { - "error": "有狀況發生了。", - "nothing": "沒有找到。", - "recents": "最近看到的地方", - "search": "搜尋地點", - "searching": "搜尋中…", + "activeFilters": "啟用篩選", + "clearFilters": "清除篩選", + "deleteSearchHistory": "刪除位置歷史", + "deleteThemeHistory": "刪除先前觀看的主題", "editSearchSyncSettings": "編輯同步設定", "editThemeSync": "編輯同步設定", + "error": "有狀況發生了。", "instructions": "使用搜尋欄位來搜尋位置、篩選或是其他主題地圖", "locations": "位置", "nMoreFilters": "{n} 更多", + "nothing": "沒有找到。", "nothingFor": "尋找 {term} 沒有結果", "otherMaps": "其他地圖", "pickFilter": "選擇篩選", "recentThemes": "最近觀看的地圖", - "activeFilters": "啟用篩選", - "clearFilters": "清除篩選", - "deleteSearchHistory": "刪除位置歷史", - "deleteThemeHistory": "刪除先前觀看的主題" + "recents": "最近看到的地方", + "search": "搜尋地點", + "searching": "搜尋中…" }, "searchAnswer": "搜尋選項", "seeIndex": "查看所有專題地圖的概覽", @@ -519,8 +520,7 @@ "readMore": "閱讀剩下的條目內容", "searchToShort": "你的搜尋檢索太短了,請輸入長一點的文字", "searchWikidata": "在 Wikidata 搜尋" - }, - "clearPendingChanges": "清除待處理的變動" + } }, "hotkeyDocumentation": { "action": "行動", @@ -761,11 +761,11 @@ }, "unknown": { "clear": "清除答案", + "explanation": "如果答案不正確但實際數值不清楚的話,則清除這一些資訊。不會清除其他資訊。", "keep": "保留答案", "markUnknown": "標示為未知", "removedKeys": "下列鍵會被移除:", - "title": "要標記為未知嗎?", - "explanation": "如果答案不正確但實際數值不清楚的話,則清除這一些資訊。不會清除其他資訊。" + "title": "要標記為未知嗎?" }, "userinfo": { "notLoggedIn": "你已經登出了" @@ -827,6 +827,9 @@ "description": "正數、整數", "noZero": "並不允許零" }, + "regex": { + "description": "正規表示式" + }, "slope": { "inputExplanation": "將你手機放在地上,並且指向上坡方向。" }, @@ -838,18 +841,15 @@ }, "tooLong": "文字太長了,最多允許 255 字元,你現在還有 {count} 字元。", "url": { + "aggregator": "{host} 是第三方網站,如果可能請搜尋官方網站。", "description": "連接到網站", "feedback": "這不是有效的網址", - "aggregator": "{host} 是第三方網站,如果可能請搜尋官方網站。", "spamSite": "{host} 被視為低品質網站,並不被允許使用。" }, "wikidata": { "description": "Wikidata 編號", "empty": "請輸入一些 Wikidata 項目", "startsWithQ": "維基數據編號以 Q 開頭後面接數字" - }, - "regex": { - "description": "正規表示式" } } -} +} \ No newline at end of file diff --git a/src/UI/History/History.svelte b/src/UI/History/History.svelte index d878f22fe..66792cefc 100644 --- a/src/UI/History/History.svelte +++ b/src/UI/History/History.svelte @@ -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 = new Set(["walls_and_buildings"]) - const t = Translations.t.inspector.previousContributors + const t = Translations.t.inspector {#if !$allGeometry || !ignoreLayersIfNoChanges.has($lastStep?.layer?.id)} diff --git a/src/UI/History/PreviouslySpiedUsers.svelte b/src/UI/History/PreviouslySpiedUsers.svelte index a37e1262e..a9029a85a 100644 --- a/src/UI/History/PreviouslySpiedUsers.svelte +++ b/src/UI/History/PreviouslySpiedUsers.svelte @@ -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 - + + + + + + + - {#each $inspectedContributors as c} @@ -85,7 +95,8 @@
Labels
{#if $labels.length === 0} - No labels +
+ {:else} {#each $labels as label}
@@ -102,7 +113,8 @@ ) }} > - See all changes for these users +
+ {/each} @@ -115,7 +127,7 @@ class:disabled={!(labelField?.length > 0)} class="disabled shrink-0" > - Add label + diff --git a/src/UI/InspectorGUI.svelte b/src/UI/InspectorGUI.svelte index 11e7625c3..c07d65c8e 100644 --- a/src/UI/InspectorGUI.svelte +++ b/src/UI/InspectorGUI.svelte @@ -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(undefined) @@ -121,7 +122,7 @@ const t = Translations.t.inspector -
+

@@ -192,7 +193,7 @@ selectedElement.set(undefined)} />

- + {/if} @@ -218,7 +219,9 @@
-
Earlier inspected constributors
+
+
+
- - -
- +
+
+
Remove