forked from MapComplete/MapComplete
Themes: add label support to questions.json; add opening hours for hospitals
This commit is contained in:
parent
151e648616
commit
41fdeb9cb5
4 changed files with 93 additions and 68 deletions
|
@ -1,14 +1,4 @@
|
||||||
import {
|
import {Concat, Conversion, DesugaringContext, DesugaringStep, Each, FirstOf, Fuse, On, SetDefault,} from "./Conversion"
|
||||||
Concat,
|
|
||||||
Conversion,
|
|
||||||
DesugaringContext,
|
|
||||||
DesugaringStep,
|
|
||||||
Each,
|
|
||||||
FirstOf,
|
|
||||||
Fuse,
|
|
||||||
On,
|
|
||||||
SetDefault,
|
|
||||||
} from "./Conversion"
|
|
||||||
import {LayerConfigJson} from "../Json/LayerConfigJson"
|
import {LayerConfigJson} from "../Json/LayerConfigJson"
|
||||||
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"
|
import {TagRenderingConfigJson} from "../Json/TagRenderingConfigJson"
|
||||||
import {Utils} from "../../../Utils"
|
import {Utils} from "../../../Utils"
|
||||||
|
@ -23,8 +13,6 @@ import predifined_filters from "../../../assets/layers/filters/filters.json"
|
||||||
import {TagConfigJson} from "../Json/TagConfigJson"
|
import {TagConfigJson} from "../Json/TagConfigJson"
|
||||||
import PointRenderingConfigJson from "../Json/PointRenderingConfigJson"
|
import PointRenderingConfigJson from "../Json/PointRenderingConfigJson"
|
||||||
import LineRenderingConfigJson from "../Json/LineRenderingConfigJson"
|
import LineRenderingConfigJson from "../Json/LineRenderingConfigJson"
|
||||||
import { type } from "os"
|
|
||||||
import exp from "constants"
|
|
||||||
|
|
||||||
class ExpandFilter extends DesugaringStep<LayerConfigJson> {
|
class ExpandFilter extends DesugaringStep<LayerConfigJson> {
|
||||||
private static readonly predefinedFilters = ExpandFilter.load_filters()
|
private static readonly predefinedFilters = ExpandFilter.load_filters()
|
||||||
|
@ -124,6 +112,7 @@ class ExpandTagRendering extends Conversion<
|
||||||
TagRenderingConfigJson[]
|
TagRenderingConfigJson[]
|
||||||
> {
|
> {
|
||||||
private readonly _state: DesugaringContext
|
private readonly _state: DesugaringContext
|
||||||
|
private readonly _tagRenderingsByLabel: Map<string, TagRenderingConfigJson[]>
|
||||||
private readonly _self: LayerConfigJson
|
private readonly _self: LayerConfigJson
|
||||||
private readonly _options: {
|
private readonly _options: {
|
||||||
/* If true, will copy the 'osmSource'-tags into the condition */
|
/* If true, will copy the 'osmSource'-tags into the condition */
|
||||||
|
@ -144,6 +133,17 @@ class ExpandTagRendering extends Conversion<
|
||||||
this._state = state
|
this._state = state
|
||||||
this._self = self
|
this._self = self
|
||||||
this._options = options
|
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(
|
convert(
|
||||||
|
@ -161,14 +161,16 @@ class ExpandTagRendering extends Conversion<
|
||||||
}
|
}
|
||||||
|
|
||||||
private lookup(name: string): TagRenderingConfigJson[] | undefined {
|
private lookup(name: string): TagRenderingConfigJson[] | undefined {
|
||||||
|
|
||||||
const direct = this.directLookup(name)
|
const direct = this.directLookup(name)
|
||||||
|
|
||||||
if (direct === undefined) {
|
if (direct === undefined) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
const result: TagRenderingConfigJson[] = []
|
const result: TagRenderingConfigJson[] = []
|
||||||
for (const tagRenderingConfigJson of direct) {
|
for (const tagRenderingConfigJson of direct) {
|
||||||
if (tagRenderingConfigJson["builtin"] !== undefined) {
|
let nm: string | string[] | undefined = tagRenderingConfigJson["builtin"]
|
||||||
let nm: string | string[] = tagRenderingConfigJson["builtin"]
|
if (nm !== undefined) {
|
||||||
let indirect: TagRenderingConfigJson[]
|
let indirect: TagRenderingConfigJson[]
|
||||||
if (typeof nm === "string") {
|
if (typeof nm === "string") {
|
||||||
indirect = this.lookup(nm)
|
indirect = this.lookup(nm)
|
||||||
|
@ -196,6 +198,10 @@ class ExpandTagRendering extends Conversion<
|
||||||
if (state.tagRenderings.has(name)) {
|
if (state.tagRenderings.has(name)) {
|
||||||
return [state.tagRenderings.get(name)]
|
return [state.tagRenderings.get(name)]
|
||||||
}
|
}
|
||||||
|
if(this._tagRenderingsByLabel.has(name)){
|
||||||
|
return this._tagRenderingsByLabel.get(name)
|
||||||
|
}
|
||||||
|
|
||||||
if (name.indexOf(".") < 0) {
|
if (name.indexOf(".") < 0) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
* 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.
|
* The first tagRendering of a group will always be a sticky element.
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
group?: string
|
group?: string
|
||||||
|
|
||||||
|
|
|
@ -83,9 +83,23 @@
|
||||||
"ca": "Un pacient hospitalitzat és un pacient que roman diversos dies a la instal·lació"
|
"ca": "Un pacient hospitalitzat és un pacient que roman diversos dies a la instal·lació"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"phone",
|
"contact",
|
||||||
"email",
|
{
|
||||||
"website"
|
"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": [
|
"mapRendering": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,6 +113,7 @@
|
||||||
"render": "{minimap(18, id): width:100%; height:8rem; border-radius:2rem; overflow: hidden; pointer-events: none;}"
|
"render": "{minimap(18, id): width:100%; height:8rem; border-radius:2rem; overflow: hidden; pointer-events: none;}"
|
||||||
},
|
},
|
||||||
"phone": {
|
"phone": {
|
||||||
|
"labels": ["contact"],
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the phone number of {title()}?",
|
"en": "What is the phone number of {title()}?",
|
||||||
"nl": "Wat is het telefoonnummer van {title()}?",
|
"nl": "Wat is het telefoonnummer van {title()}?",
|
||||||
|
@ -164,6 +165,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"email": {
|
"email": {
|
||||||
|
"labels": ["contact"],
|
||||||
"render": "<a href='mailto:{email}' target='_blank'>{email}</a>",
|
"render": "<a href='mailto:{email}' target='_blank'>{email}</a>",
|
||||||
"question": {
|
"question": {
|
||||||
"nl": "Wat is het e-mailadres van {title()}?",
|
"nl": "Wat is het e-mailadres van {title()}?",
|
||||||
|
@ -206,6 +208,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"website": {
|
"website": {
|
||||||
|
"labels": ["contact"],
|
||||||
"question": {
|
"question": {
|
||||||
"en": "What is the website of {title()}?",
|
"en": "What is the website of {title()}?",
|
||||||
"nl": "Wat is de website van {title()}?",
|
"nl": "Wat is de website van {title()}?",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue