forked from MapComplete/MapComplete
Fix: fix inspector
This commit is contained in:
parent
566a7e639e
commit
48305273e5
9 changed files with 238 additions and 51 deletions
|
@ -11,7 +11,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="main">Loading inspector...</div>
|
<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>
|
<script async data-goatcounter="https://pietervdvn.goatcounter.com/count" src="//gc.zgo.at/count.js" crossorigin="anonymous" integrity="sha384-QfJMxHNngbaF6IXH2kBwubsLYh7GVSFmJOX1O1YKJBq+zv1VVypB9BysTzyG1D1U"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -616,7 +616,28 @@
|
||||||
"title": "MapComplete"
|
"title": "MapComplete"
|
||||||
},
|
},
|
||||||
"inspector": {
|
"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": {
|
"move": {
|
||||||
"cancel": "Select a different reason",
|
"cancel": "Select a different reason",
|
||||||
|
|
|
@ -2036,6 +2036,9 @@
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "{name}"
|
||||||
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Vogelkijkhut {name}"
|
"then": "Vogelkijkhut {name}"
|
||||||
},
|
},
|
||||||
|
@ -6340,6 +6343,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "{name}"
|
||||||
|
}
|
||||||
|
},
|
||||||
"render": "Natuurgebied"
|
"render": "Natuurgebied"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -6871,6 +6879,21 @@
|
||||||
"render": "Picknicktafel"
|
"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": {
|
"playground": {
|
||||||
"deletion": {
|
"deletion": {
|
||||||
"nonDeleteMappings": {
|
"nonDeleteMappings": {
|
||||||
|
@ -8428,6 +8451,9 @@
|
||||||
},
|
},
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "{name}"
|
||||||
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "Voetpad"
|
"then": "Voetpad"
|
||||||
},
|
},
|
||||||
|
@ -10580,13 +10606,25 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"village_green": {
|
"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": {
|
"visitor_information_centre": {
|
||||||
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
|
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
|
||||||
"name": "Bezoekerscentrum",
|
"name": "Bezoekerscentrum",
|
||||||
"title": {
|
"title": {
|
||||||
"mappings": {
|
"mappings": {
|
||||||
|
"0": {
|
||||||
|
"then": "{name:nl}"
|
||||||
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"then": "{name}"
|
"then": "{name}"
|
||||||
}
|
}
|
||||||
|
@ -10816,4 +10854,4 @@
|
||||||
"render": "windturbine"
|
"render": "windturbine"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -653,8 +653,37 @@
|
||||||
"building type": {
|
"building type": {
|
||||||
"question": "Wat voor soort gebouw is dit?"
|
"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": {
|
"grb-reference": {
|
||||||
"render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}"
|
"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": {
|
"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. ",
|
"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"
|
"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": {
|
"playgrounds": {
|
||||||
"description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen",
|
"description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen",
|
||||||
"shortDescription": "Een kaart met speeltuinen",
|
"shortDescription": "Een kaart met speeltuinen",
|
||||||
|
@ -1181,6 +1242,47 @@
|
||||||
"description": "Alles om te skiën",
|
"description": "Alles om te skiën",
|
||||||
"title": "Skipistes en kabelbanen"
|
"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": {
|
"sport_pitches": {
|
||||||
"description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen",
|
"description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen",
|
||||||
"shortDescription": "Deze kaart toont sportvelden",
|
"shortDescription": "Deze kaart toont sportvelden",
|
||||||
|
@ -1301,6 +1403,10 @@
|
||||||
},
|
},
|
||||||
"title": "Straatverlichting"
|
"title": "Straatverlichting"
|
||||||
},
|
},
|
||||||
|
"street_lighting_assen": {
|
||||||
|
"description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen",
|
||||||
|
"title": "Straatverlichting - Assen"
|
||||||
|
},
|
||||||
"surveillance": {
|
"surveillance": {
|
||||||
"description": "Op deze open kaart kan je bewakingscamera's vinden.",
|
"description": "Op deze open kaart kan je bewakingscamera's vinden.",
|
||||||
"shortDescription": "Bewakingscameras en dergelijke",
|
"shortDescription": "Bewakingscameras en dergelijke",
|
||||||
|
@ -1414,9 +1520,13 @@
|
||||||
"description": "Kaart met afvalbakken en recyclingfaciliteiten.",
|
"description": "Kaart met afvalbakken en recyclingfaciliteiten.",
|
||||||
"title": "Afval"
|
"title": "Afval"
|
||||||
},
|
},
|
||||||
|
"waste_assen": {
|
||||||
|
"description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.",
|
||||||
|
"title": "Afval - Assen"
|
||||||
|
},
|
||||||
"waste_basket": {
|
"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",
|
"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",
|
"shortDescription": "Een kaart met vuilnisbakken",
|
||||||
"title": "Vuilnisbakken"
|
"title": "Vuilnisbakken"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -193,18 +193,19 @@
|
||||||
"openOsmchaLastWeek": "檢視最近 7 天的編輯",
|
"openOsmchaLastWeek": "檢視最近 7 天的編輯",
|
||||||
"openPanoramax": "在這邊開啟 Panoramax",
|
"openPanoramax": "在這邊開啟 Panoramax",
|
||||||
"openThemeDocumentation": "開啟專題地圖 {name} 的文件",
|
"openThemeDocumentation": "開啟專題地圖 {name} 的文件",
|
||||||
|
"panoramaxHelp": "<b>Panoramax</b> 是收集街景照片的線上服務,並且以自由授權釋出。貢獻者能夠使用這些照片來改進開放街圖",
|
||||||
|
"panoramaxLicenseCCBYSA": "你的圖片會以 CC-BY-SA 釋出 - 每個人都能夠在提及你名字的情形下再利用你的圖片",
|
||||||
"seeOnMapillary": "在 Mapillary 觀看這張影像",
|
"seeOnMapillary": "在 Mapillary 觀看這張影像",
|
||||||
"themeBy": "由 {author} 維護主題",
|
"themeBy": "由 {author} 維護主題",
|
||||||
"title": "版權與署名",
|
"title": "版權與署名",
|
||||||
"translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 <a href=\"https://github.com/pietervdvn/MapComplete/graphs/contributors\" target=\"_blank\">{hiddenCount} 更多貢獻者</a>",
|
"translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 <a href=\"https://github.com/pietervdvn/MapComplete/graphs/contributors\" target=\"_blank\">{hiddenCount} 更多貢獻者</a>"
|
||||||
"panoramaxHelp": "<b>Panoramax</b> 是收集街景照片的線上服務,並且以自由授權釋出。貢獻者能夠使用這些照片來改進開放街圖",
|
|
||||||
"panoramaxLicenseCCBYSA": "你的圖片會以 CC-BY-SA 釋出 - 每個人都能夠在提及你名字的情形下再利用你的圖片"
|
|
||||||
},
|
},
|
||||||
"back": "返回",
|
"back": "返回",
|
||||||
"backToIndex": "回到所有主題地圖的總覽頁面",
|
"backToIndex": "回到所有主題地圖的總覽頁面",
|
||||||
"backgroundMap": "選擇背景圖層",
|
"backgroundMap": "選擇背景圖層",
|
||||||
"backgroundSwitch": "切換背景",
|
"backgroundSwitch": "切換背景",
|
||||||
"cancel": "取消",
|
"cancel": "取消",
|
||||||
|
"clearPendingChanges": "清除待處理的變動",
|
||||||
"confirm": "確認",
|
"confirm": "確認",
|
||||||
"customThemeIntro": "這些是先前使用者創造的主題。",
|
"customThemeIntro": "這些是先前使用者創造的主題。",
|
||||||
"customThemeTitle": "客製化主題",
|
"customThemeTitle": "客製化主題",
|
||||||
|
@ -232,6 +233,7 @@
|
||||||
"downloadGeojson": "下載可視資料為 GeoJSON",
|
"downloadGeojson": "下載可視資料為 GeoJSON",
|
||||||
"downloadGpx": "下載為 GPX 檔案",
|
"downloadGpx": "下載為 GPX 檔案",
|
||||||
"downloadGpxHelper": "GPX 檔案能被大部分導航裝置或 app 使用",
|
"downloadGpxHelper": "GPX 檔案能被大部分導航裝置或 app 使用",
|
||||||
|
"downloadImage": "下載圖片",
|
||||||
"exporting": "匯出中…",
|
"exporting": "匯出中…",
|
||||||
"includeMetaData": "包括 metadata (上次編輯者、計算數值等)",
|
"includeMetaData": "包括 metadata (上次編輯者、計算數值等)",
|
||||||
"licenseInfo": "<h3>著作權聲明</h3>提供的資料採用 ODbL 授權釋出。可以用任何目標再利用資料,但是需<ul><li>標明 <b>© 開放街圖貢獻者</b></li><li>任何變動必須相同方式授權</li></ul> 請閱讀完整的 <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">著作權聲明</a>。",
|
"licenseInfo": "<h3>著作權聲明</h3>提供的資料採用 ODbL 授權釋出。可以用任何目標再利用資料,但是需<ul><li>標明 <b>© 開放街圖貢獻者</b></li><li>任何變動必須相同方式授權</li></ul> 請閱讀完整的 <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">著作權聲明</a>。",
|
||||||
|
@ -241,8 +243,7 @@
|
||||||
},
|
},
|
||||||
"title": "下載",
|
"title": "下載",
|
||||||
"toMuch": "有很多圖徵可以下載了",
|
"toMuch": "有很多圖徵可以下載了",
|
||||||
"uploadGpx": "上傳軌跡到開放街圖",
|
"uploadGpx": "上傳軌跡到開放街圖"
|
||||||
"downloadImage": "下載圖片"
|
|
||||||
},
|
},
|
||||||
"enableGeolocationForSafari": "你沒有看到要求地理位置權限的跳出視窗?",
|
"enableGeolocationForSafari": "你沒有看到要求地理位置權限的跳出視窗?",
|
||||||
"enableGeolocationForSafariLink": "學習如何在設定當中啟用地理位置權限",
|
"enableGeolocationForSafariLink": "學習如何在設定當中啟用地理位置權限",
|
||||||
|
@ -251,9 +252,9 @@
|
||||||
"example": "例子",
|
"example": "例子",
|
||||||
"examples": "例子",
|
"examples": "例子",
|
||||||
"filterPanel": {
|
"filterPanel": {
|
||||||
|
"allTypes": "所有類型",
|
||||||
"disableAll": "關閉所有",
|
"disableAll": "關閉所有",
|
||||||
"enableAll": "啟用所有",
|
"enableAll": "啟用所有"
|
||||||
"allTypes": "所有類型"
|
|
||||||
},
|
},
|
||||||
"geopermissionDenied": "使用地理位置要求已經被拒絕",
|
"geopermissionDenied": "使用地理位置要求已經被拒絕",
|
||||||
"histogram": {
|
"histogram": {
|
||||||
|
@ -263,10 +264,10 @@
|
||||||
"background": "改變背景",
|
"background": "改變背景",
|
||||||
"filter": "篩選資料",
|
"filter": "篩選資料",
|
||||||
"jumpToLocation": "到你目前的位置",
|
"jumpToLocation": "到你目前的位置",
|
||||||
|
"locationNotAvailable": "無法取得 GPS 位置,裝置有取得位置資訊還是在隧道內?",
|
||||||
"menu": "選單",
|
"menu": "選單",
|
||||||
"zoomIn": "放大",
|
"zoomIn": "放大",
|
||||||
"zoomOut": "縮小",
|
"zoomOut": "縮小"
|
||||||
"locationNotAvailable": "無法取得 GPS 位置,裝置有取得位置資訊還是在隧道內?"
|
|
||||||
},
|
},
|
||||||
"layerSelection": {
|
"layerSelection": {
|
||||||
"title": "選擇圖層",
|
"title": "選擇圖層",
|
||||||
|
@ -372,24 +373,24 @@
|
||||||
"save": "儲存",
|
"save": "儲存",
|
||||||
"screenToSmall": "在新視窗中開啟 <i>{theme}</i>",
|
"screenToSmall": "在新視窗中開啟 <i>{theme}</i>",
|
||||||
"search": {
|
"search": {
|
||||||
"error": "有狀況發生了。",
|
"activeFilters": "啟用篩選",
|
||||||
"nothing": "沒有找到。",
|
"clearFilters": "清除篩選",
|
||||||
"recents": "最近看到的地方",
|
"deleteSearchHistory": "刪除位置歷史",
|
||||||
"search": "搜尋地點",
|
"deleteThemeHistory": "刪除先前觀看的主題",
|
||||||
"searching": "搜尋中…",
|
|
||||||
"editSearchSyncSettings": "編輯同步設定",
|
"editSearchSyncSettings": "編輯同步設定",
|
||||||
"editThemeSync": "編輯同步設定",
|
"editThemeSync": "編輯同步設定",
|
||||||
|
"error": "有狀況發生了。",
|
||||||
"instructions": "使用搜尋欄位來搜尋位置、篩選或是其他主題地圖",
|
"instructions": "使用搜尋欄位來搜尋位置、篩選或是其他主題地圖",
|
||||||
"locations": "位置",
|
"locations": "位置",
|
||||||
"nMoreFilters": "{n} 更多",
|
"nMoreFilters": "{n} 更多",
|
||||||
|
"nothing": "沒有找到。",
|
||||||
"nothingFor": "尋找 {term} 沒有結果",
|
"nothingFor": "尋找 {term} 沒有結果",
|
||||||
"otherMaps": "其他地圖",
|
"otherMaps": "其他地圖",
|
||||||
"pickFilter": "選擇篩選",
|
"pickFilter": "選擇篩選",
|
||||||
"recentThemes": "最近觀看的地圖",
|
"recentThemes": "最近觀看的地圖",
|
||||||
"activeFilters": "啟用篩選",
|
"recents": "最近看到的地方",
|
||||||
"clearFilters": "清除篩選",
|
"search": "搜尋地點",
|
||||||
"deleteSearchHistory": "刪除位置歷史",
|
"searching": "搜尋中…"
|
||||||
"deleteThemeHistory": "刪除先前觀看的主題"
|
|
||||||
},
|
},
|
||||||
"searchAnswer": "搜尋選項",
|
"searchAnswer": "搜尋選項",
|
||||||
"seeIndex": "查看所有專題地圖的概覽",
|
"seeIndex": "查看所有專題地圖的概覽",
|
||||||
|
@ -519,8 +520,7 @@
|
||||||
"readMore": "閱讀剩下的條目內容",
|
"readMore": "閱讀剩下的條目內容",
|
||||||
"searchToShort": "你的搜尋檢索太短了,請輸入長一點的文字",
|
"searchToShort": "你的搜尋檢索太短了,請輸入長一點的文字",
|
||||||
"searchWikidata": "在 Wikidata 搜尋"
|
"searchWikidata": "在 Wikidata 搜尋"
|
||||||
},
|
}
|
||||||
"clearPendingChanges": "清除待處理的變動"
|
|
||||||
},
|
},
|
||||||
"hotkeyDocumentation": {
|
"hotkeyDocumentation": {
|
||||||
"action": "行動",
|
"action": "行動",
|
||||||
|
@ -761,11 +761,11 @@
|
||||||
},
|
},
|
||||||
"unknown": {
|
"unknown": {
|
||||||
"clear": "清除答案",
|
"clear": "清除答案",
|
||||||
|
"explanation": "如果答案不正確但實際數值不清楚的話,則清除這一些資訊。不會清除其他資訊。",
|
||||||
"keep": "保留答案",
|
"keep": "保留答案",
|
||||||
"markUnknown": "標示為未知",
|
"markUnknown": "標示為未知",
|
||||||
"removedKeys": "下列鍵會被移除:",
|
"removedKeys": "下列鍵會被移除:",
|
||||||
"title": "要標記為未知嗎?",
|
"title": "要標記為未知嗎?"
|
||||||
"explanation": "如果答案不正確但實際數值不清楚的話,則清除這一些資訊。不會清除其他資訊。"
|
|
||||||
},
|
},
|
||||||
"userinfo": {
|
"userinfo": {
|
||||||
"notLoggedIn": "你已經登出了"
|
"notLoggedIn": "你已經登出了"
|
||||||
|
@ -827,6 +827,9 @@
|
||||||
"description": "正數、整數",
|
"description": "正數、整數",
|
||||||
"noZero": "並不允許零"
|
"noZero": "並不允許零"
|
||||||
},
|
},
|
||||||
|
"regex": {
|
||||||
|
"description": "正規表示式"
|
||||||
|
},
|
||||||
"slope": {
|
"slope": {
|
||||||
"inputExplanation": "將你手機放在地上,並且指向上坡方向。"
|
"inputExplanation": "將你手機放在地上,並且指向上坡方向。"
|
||||||
},
|
},
|
||||||
|
@ -838,18 +841,15 @@
|
||||||
},
|
},
|
||||||
"tooLong": "文字太長了,最多允許 255 字元,你現在還有 {count} 字元。",
|
"tooLong": "文字太長了,最多允許 255 字元,你現在還有 {count} 字元。",
|
||||||
"url": {
|
"url": {
|
||||||
|
"aggregator": "{host} 是第三方網站,如果可能請搜尋官方網站。",
|
||||||
"description": "連接到網站",
|
"description": "連接到網站",
|
||||||
"feedback": "這不是有效的網址",
|
"feedback": "這不是有效的網址",
|
||||||
"aggregator": "{host} 是第三方網站,如果可能請搜尋官方網站。",
|
|
||||||
"spamSite": "{host} 被視為低品質網站,並不被允許使用。"
|
"spamSite": "{host} 被視為低品質網站,並不被允許使用。"
|
||||||
},
|
},
|
||||||
"wikidata": {
|
"wikidata": {
|
||||||
"description": "Wikidata 編號",
|
"description": "Wikidata 編號",
|
||||||
"empty": "請輸入一些 Wikidata 項目",
|
"empty": "請輸入一些 Wikidata 項目",
|
||||||
"startsWithQ": "維基數據編號以 Q 開頭後面接數字"
|
"startsWithQ": "維基數據編號以 Q 開頭後面接數字"
|
||||||
},
|
|
||||||
"regex": {
|
|
||||||
"description": "正規表示式"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -30,10 +30,11 @@
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
console.log(
|
console.log(
|
||||||
"Checking if ",
|
"Checking if",
|
||||||
step.tags["_last_edit:contributor"],
|
step.tags["_last_edit:contributor"],
|
||||||
"is contained in",
|
"is contained in",
|
||||||
onlyShowChangesBy
|
onlyShowChangesBy,
|
||||||
|
usernames.has(step.tags["_last_edit:contributor"])
|
||||||
)
|
)
|
||||||
return 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
|
* These layers are only shown if there are tag changes as well
|
||||||
*/
|
*/
|
||||||
const ignoreLayersIfNoChanges: ReadonlySet<string> = new Set(["walls_and_buildings"])
|
const ignoreLayersIfNoChanges: ReadonlySet<string> = new Set(["walls_and_buildings"])
|
||||||
const t = Translations.t.inspector.previousContributors
|
const t = Translations.t.inspector
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if !$allGeometry || !ignoreLayersIfNoChanges.has($lastStep?.layer?.id)}
|
{#if !$allGeometry || !ignoreLayersIfNoChanges.has($lastStep?.layer?.id)}
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
import { createEventDispatcher } from "svelte"
|
import { createEventDispatcher } from "svelte"
|
||||||
import { XCircleIcon } from "@babeard/svelte-heroicons/solid"
|
import { XCircleIcon } from "@babeard/svelte-heroicons/solid"
|
||||||
import AccordionSingle from "../Flowbite/AccordionSingle.svelte"
|
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 osmConnection: OsmConnection
|
||||||
export let inspectedContributors: UIEventSource<
|
export let inspectedContributors: UIEventSource<
|
||||||
|
@ -41,23 +42,32 @@
|
||||||
inspectedContributors.data.sort((a, b) => (a[key] ?? "").localeCompare(b[key] ?? ""))
|
inspectedContributors.data.sort((a, b) => (a[key] ?? "").localeCompare(b[key] ?? ""))
|
||||||
inspectedContributors.ping()
|
inspectedContributors.ping()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const t = Translations.t.inspector.previouslySpied
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<LoginToggle ignoreLoading state={{ osmConnection }}>
|
<LoginToggle ignoreLoading state={{ osmConnection }}>
|
||||||
<table class="w-full">
|
<table class="w-full">
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<button class="as-link cursor-pointer" on:click={() => sort("name")}>Contributor</button>
|
<button class="as-link cursor-pointer" on:click={() => sort("name")}>
|
||||||
</td>
|
<Tr t={t.username} />
|
||||||
<td>
|
|
||||||
<button class="as-link cursor-pointer" on:click={() => sort("visitedTime")}>
|
|
||||||
Visited time
|
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
<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>
|
||||||
<td>Remove</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{#each $inspectedContributors as c}
|
{#each $inspectedContributors as c}
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -85,7 +95,8 @@
|
||||||
<AccordionSingle>
|
<AccordionSingle>
|
||||||
<div slot="header">Labels</div>
|
<div slot="header">Labels</div>
|
||||||
{#if $labels.length === 0}
|
{#if $labels.length === 0}
|
||||||
No labels
|
<Tr t={t.noLabels} />
|
||||||
|
|
||||||
{:else}
|
{:else}
|
||||||
{#each $labels as label}
|
{#each $labels as label}
|
||||||
<div class="mx-2">
|
<div class="mx-2">
|
||||||
|
@ -102,7 +113,8 @@
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
See all changes for these users
|
<Tr t={t.allChanges} />
|
||||||
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
|
@ -115,7 +127,7 @@
|
||||||
class:disabled={!(labelField?.length > 0)}
|
class:disabled={!(labelField?.length > 0)}
|
||||||
class="disabled shrink-0"
|
class="disabled shrink-0"
|
||||||
>
|
>
|
||||||
Add label
|
<Tr t={t.addLabel} />
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</AccordionSingle>
|
</AccordionSingle>
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
import Translations from "./i18n/Translations"
|
import Translations from "./i18n/Translations"
|
||||||
import Tr from "./Base/Tr.svelte"
|
import Tr from "./Base/Tr.svelte"
|
||||||
|
|
||||||
|
console.log("Loading inspector GUI")
|
||||||
let username = QueryParameters.GetQueryParameter("user", undefined, "Inspect this user")
|
let username = QueryParameters.GetQueryParameter("user", undefined, "Inspect this user")
|
||||||
let step = new UIEventSource<"waiting" | "loading" | "done">("waiting")
|
let step = new UIEventSource<"waiting" | "loading" | "done">("waiting")
|
||||||
let map = new UIEventSource<MlMap>(undefined)
|
let map = new UIEventSource<MlMap>(undefined)
|
||||||
|
@ -121,7 +122,7 @@
|
||||||
const t = Translations.t.inspector
|
const t = Translations.t.inspector
|
||||||
</script>
|
</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">
|
<div class="low-interaction flex items-center gap-x-2 p-2">
|
||||||
<MagnifyingGlassCircle class="h-12 w-12" />
|
<MagnifyingGlassCircle class="h-12 w-12" />
|
||||||
<h1 class="m-0 mx-2 flex-shrink-0">
|
<h1 class="m-0 mx-2 flex-shrink-0">
|
||||||
|
@ -192,7 +193,7 @@
|
||||||
<XCircleIcon class="h-6 w-6" on:click={() => selectedElement.set(undefined)} />
|
<XCircleIcon class="h-6 w-6" on:click={() => selectedElement.set(undefined)} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<History onlyShowChangesBy={$username} id={$selectedElement.properties.id} />
|
<History onlyShowChangesBy={$username.split(";")} id={$selectedElement.properties.id} />
|
||||||
</TitledPanel>
|
</TitledPanel>
|
||||||
</Drawer>
|
</Drawer>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -218,7 +219,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Page shown={showPreviouslyVisited}>
|
<Page shown={showPreviouslyVisited}>
|
||||||
<div slot="header">Earlier inspected constributors</div>
|
<div slot="header">
|
||||||
|
<Tr t={t.previouslySpied.title} />
|
||||||
|
</div>
|
||||||
<PreviouslySpiedUsers
|
<PreviouslySpiedUsers
|
||||||
{osmConnection}
|
{osmConnection}
|
||||||
{inspectedContributors}
|
{inspectedContributors}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import InspectorGUI from "./InspectorGUI.svelte"
|
import InspectorGUI from "./InspectorGUI.svelte"
|
||||||
|
|
||||||
|
const target = document.getElementById("main")
|
||||||
|
target.innerHTML = ""
|
||||||
new InspectorGUI({
|
new InspectorGUI({
|
||||||
target: document.getElementById("main"),
|
target
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue