Themes: add label support to questions.json; add opening hours for hospitals

This commit is contained in:
Pieter Vander Vennet 2023-05-23 00:34:26 +02:00
parent 151e648616
commit 41fdeb9cb5
4 changed files with 93 additions and 68 deletions

View file

@ -1,14 +1,4 @@
import {
Concat,
Conversion,
DesugaringContext,
DesugaringStep,
Each,
FirstOf,
Fuse,
On,
SetDefault,
} from "./Conversion"
import {Concat, Conversion, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault,} from "./Conversion"
import {LayerConfigJson} from "../Json/LayerConfigJson"
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"
import {Utils} from "../../../Utils"
@ -23,8 +13,6 @@ import predifined_filters from "../../../assets/layers/filters/filters.json"
import {TagConfigJson} from "../Json/TagConfigJson"
import PointRenderingConfigJson from "../Json/PointRenderingConfigJson"
import LineRenderingConfigJson from "../Json/LineRenderingConfigJson"
import { type } from "os"
import exp from "constants"
class ExpandFilter extends DesugaringStep<LayerConfigJson> {
private static readonly predefinedFilters = ExpandFilter.load_filters()
@ -124,6 +112,7 @@ class ExpandTagRendering extends Conversion<
TagRenderingConfigJson[]
> {
private readonly _state: DesugaringContext
private readonly _tagRenderingsByLabel: Map<string, TagRenderingConfigJson[]>
private readonly _self: LayerConfigJson
private readonly _options: {
/* If true, will copy the 'osmSource'-tags into the condition */
@ -144,6 +133,17 @@ class ExpandTagRendering extends Conversion<
this._state = state
this._self = self
this._options = options
this._tagRenderingsByLabel = new Map<string, TagRenderingConfigJson[]>()
for (const trconfig of state.tagRenderings.values()) {
for (const label of trconfig.labels ?? []) {
let withLabel = this._tagRenderingsByLabel.get(label)
if (withLabel === undefined) {
withLabel = []
this._tagRenderingsByLabel.set(label, withLabel)
}
withLabel.push(trconfig)
}
}
}
convert(
@ -161,14 +161,16 @@ class ExpandTagRendering extends Conversion<
}
private lookup(name: string): TagRenderingConfigJson[] | undefined {
const direct = this.directLookup(name)
if (direct === undefined) {
return undefined
}
const result: TagRenderingConfigJson[] = []
for (const tagRenderingConfigJson of direct) {
if (tagRenderingConfigJson["builtin"] !== undefined) {
let nm: string | string[] = tagRenderingConfigJson["builtin"]
let nm: string | string[] | undefined = tagRenderingConfigJson["builtin"]
if (nm !== undefined) {
let indirect: TagRenderingConfigJson[]
if (typeof nm === "string") {
indirect = this.lookup(nm)
@ -196,6 +198,10 @@ class ExpandTagRendering extends Conversion<
if (state.tagRenderings.has(name)) {
return [state.tagRenderings.get(name)]
}
if(this._tagRenderingsByLabel.has(name)){
return this._tagRenderingsByLabel.get(name)
}
if (name.indexOf(".") < 0) {
return undefined
}

View file

@ -16,6 +16,8 @@ export interface TagRenderingConfigJson {
/**
* If 'group' is defined on many tagRenderings, these are grouped together when shown. The questions are grouped together as well.
* The first tagRendering of a group will always be a sticky element.
*
* @deprecated
*/
group?: string

View file

@ -83,9 +83,23 @@
"ca": "Un pacient hospitalitzat és un pacient que roman diversos dies a la instal·lació"
}
},
"phone",
"email",
"website"
"contact",
{
"id": "oh-visitor",
"question": {
"en": "When are visitors allowed to visit?"
},
"questionHint": {
"en": "These are the regular visitor hours. Some wands have different visitor hours or might allow visitors in emergencies"
},
"freeform": {
"key": "opening_hours:visitors",
"type": "opening_hours"
},
"render": {
"en": "<h3>Opening hours for visitors</h3>Regular visitors are allowed at the following moments: {opening_hours_table(opening_hours:visitors)}<p class='subtle'>Some wands might have different opening hours. Many hospitals allow visits during emergencies too.</p>"
}
}
],
"mapRendering": [
{

View file

@ -113,6 +113,7 @@
"render": "{minimap(18, id): width:100%; height:8rem; border-radius:2rem; overflow: hidden; pointer-events: none;}"
},
"phone": {
"labels": ["contact"],
"question": {
"en": "What is the phone number of {title()}?",
"nl": "Wat is het telefoonnummer van {title()}?",
@ -164,6 +165,7 @@
]
},
"email": {
"labels": ["contact"],
"render": "<a href='mailto:{email}' target='_blank'>{email}</a>",
"question": {
"nl": "Wat is het e-mailadres van {title()}?",
@ -206,6 +208,7 @@
}
},
"website": {
"labels": ["contact"],
"question": {
"en": "What is the website of {title()}?",
"nl": "Wat is de website van {title()}?",