Improvement to auto-import module for velopark

This commit is contained in:
Pieter Vander Vennet 2024-04-08 17:05:49 +02:00
parent 22785095c5
commit 4ae35ae101
4 changed files with 155 additions and 104 deletions

View file

@ -266,7 +266,28 @@
}, },
"icons.defaults" "icons.defaults"
], ],
"minzoom": 8 "minzoom": 8,
"filter+": [
{
"id": "last_edited_before",
"options": [
{
"question": {
"en": "Last edit was before {date}",
"nl": "Laatste aanpassing voor {date}"
},
"osmTags": "_last_edit:timestamp<{date}",
"fields": [
{
"name": "date",
"type": "date"
}
]
}]}
]
} }
}, },
{ {

View file

@ -37,7 +37,7 @@ export default class LinkedDataLoader {
"@type": "http://www.w3.org/2001/XMLSchema#time" "@type": "http://www.w3.org/2001/XMLSchema#time"
} }
} }
private static formatters: Record<string, Validator> = { private static formatters: Record<"phone" | "email" | "website", Validator> = {
phone: new PhoneValidator(), phone: new PhoneValidator(),
email: new EmailValidator(), email: new EmailValidator(),
website: new UrlValidator(undefined, undefined, true) website: new UrlValidator(undefined, undefined, true)
@ -330,7 +330,11 @@ export default class LinkedDataLoader {
delete output[source] delete output[source]
} }
on("phone", (p => new PhoneValidator().reformat(p, () => "be"))) on("phone", (p => this.formatters["phone"].reformat(p, () => "be")))
for (const attribute in LinkedDataLoader.formatters) {
on(attribute, p => LinkedDataLoader.formatters[attribute].reformat(p))
}
on("charge", (p => { on("charge", (p => {
if(Number(p) === 0){ if(Number(p) === 0){
output["fee"] = ["no"] output["fee"] = ["no"]

View file

@ -47,7 +47,7 @@ class ExpandFilter extends DesugaringStep<LayerConfigJson> {
} }
private static load_filters(): Map<string, FilterConfigJson> { private static load_filters(): Map<string, FilterConfigJson> {
let filters = new Map<string, FilterConfigJson>() const filters = new Map<string, FilterConfigJson>()
for (const filter of <FilterConfigJson[]>predifined_filters.filter) { for (const filter of <FilterConfigJson[]>predifined_filters.filter) {
filters.set(filter.id, filter) filters.set(filter.id, filter)
} }

View file

@ -16,6 +16,9 @@
export let tags: UIEventSource<OsmTags> export let tags: UIEventSource<OsmTags>
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
let isTesting = state.featureSwitchIsTesting
let isDebug = state.featureSwitches.featureSwitchIsDebugging
let showTags = state.userRelatedState.showTags
export let feature: Feature export let feature: Feature
export let layer: LayerConfig export let layer: LayerConfig
@ -35,8 +38,8 @@
tags.data, tags.data,
{ {
theme: state.layout.id, theme: state.layout.id,
changeType: "import", changeType: "import"
}, }
) )
await state.changes.applyChanges(await change.CreateChangeDescriptions()) await state.changes.applyChanges(await change.CreateChangeDescriptions())
currentStep = "done" currentStep = "done"
@ -49,15 +52,19 @@
const keys: string[] = [].concat(...tr.usedTags().map(t => t.usedKeys())) const keys: string[] = [].concat(...tr.usedTags().map(t => t.usedKeys()))
return keys.indexOf(key) >= 0 return keys.indexOf(key) >= 0
}) })
let renderingBoth = undefined // trsWithKeys.find(tr => tr.IsKnown(mockPropertiesOsm) && tr.IsKnown(mockPropertiesExternal)) let renderingBoth = trsWithKeys.find(tr => tr.IsKnown(mockPropertiesOsm) && tr.IsKnown(mockPropertiesExternal))
let renderingExternal = undefined // renderingBoth ?? trsWithKeys.find(tr => tr.IsKnown(mockPropertiesExternal)) let renderingExternal = renderingBoth ?? trsWithKeys.find(tr => tr.IsKnown(mockPropertiesExternal))
let onOverwrite = false let onOverwrite = false
const t = Translations.t.external const t = Translations.t.external
</script> </script>
<div> <div>
<div class="py-1 px-2 interactive flex w-full justify-between"> <div class="py-1 px-2 interactive flex w-full justify-between">
<div class="flex flex-col">
<div>
{#if renderingExternal} {#if renderingExternal}
<TagRenderingAnswer tags={new UIEventSource(mockPropertiesExternal)} selectedElement={feature} <TagRenderingAnswer tags={new UIEventSource(mockPropertiesExternal)} selectedElement={feature}
config={renderingExternal} config={renderingExternal}
@ -68,6 +75,24 @@
</div> </div>
{/if} {/if}
</div>
{#if $isTesting || $isDebug || $showTags === "yes" || $showTags === "always" || $showTags === "full"}
<div class="subtle text-sm">
<span>
OSM:
{key}={$tags[key]}
</span>
<span>
Ext:
{key}= {externalProperties[key]}
</span>
</div>
{/if}
</div>
{#if !readonly} {#if !readonly}
{#if currentStep === "init"} {#if currentStep === "init"}
<button class="small" on:click={() => apply(key)} <button class="small" on:click={() => apply(key)}
@ -78,9 +103,9 @@
on:mouseout={() => onOverwrite = false } on:mouseout={() => onOverwrite = false }
> >
{#if $tags[key]} {#if $tags[key]}
<Tr t={t.overwrite}/> <Tr t={t.overwrite} />
{:else} {:else}
<Tr t={t.apply}/> <Tr t={t.apply} />
{/if} {/if}
</button> </button>
@ -88,21 +113,21 @@
<Loading /> <Loading />
{:else if currentStep === "done"} {:else if currentStep === "done"}
<div class="thanks"> <div class="thanks">
<Tr t={t.done}/> <Tr t={t.done} />
</div> </div>
{:else} {:else}
<div class="alert"> <div class="alert">
<Tr t={t.error}/> <Tr t={t.error} />
</div> </div>
{/if} {/if}
{/if} {/if}
</div> </div>
{#if $tags[key]} {#if $tags[key] && $tags[key] !== externalProperties[key]}
<div class:glowing-shadow={onOverwrite}> <div class:glowing-shadow={onOverwrite}>
<span class="subtle"> <span class="subtle">
<Tr t={t.currentInOsmIs}/> <Tr t={t.currentInOsmIs} />
</span> </span>
{#if renderingBoth} {#if renderingBoth}
<TagRenderingAnswer tags={new UIEventSource(mockPropertiesOsm)} selectedElement={feature} config={renderingBoth} <TagRenderingAnswer tags={new UIEventSource(mockPropertiesOsm)} selectedElement={feature} config={renderingBoth}
@ -113,5 +138,6 @@
</div> </div>
{/if} {/if}
</div> </div>
{/if} {/if}
</div> </div>