2020-08-30 01:13:18 +02:00
import { AndOrTagConfigJson } from "./TagConfigJson" ;
2021-04-03 14:33:19 +02:00
/ * *
* A TagRenderingConfigJson is a single piece of code which converts one ore more tags into a HTML - snippet .
* If the desired tags are missing and a question is defined , a question will be shown instead .
2021-04-05 20:57:07 +02:00
* /
2020-08-30 01:13:18 +02:00
export interface TagRenderingConfigJson {
/ * *
* Renders this value . Note that "{key}" - parts are substituted by the corresponding values of the element .
* If neither 'textFieldQuestion' nor 'mappings' are defined , this text is simply shown as default value .
2021-03-16 14:14:59 +01:00
*
2021-04-03 14:33:19 +02:00
* Note that this is a HTML - interpreted value , so you can add links as e . g . '<a href=' { website } '>{website}</a>' or include images such as ` This is of type A <br><img src='typeA-icon.svg' /> `
2020-08-30 01:13:18 +02:00
* /
render? : string | any ,
/ * *
* If it turns out that this tagRendering doesn ' t match _any_ value , then we show this question .
* If undefined , the question is never asked and this tagrendering is read - only
* /
question? : string | any ,
/ * *
* Only show this question if the object also matches the following tags .
*
* This is useful to ask a follow - up question . E . g . if there is a diaper table , then ask a follow - up question on diaper tables . . .
* * /
condition? : AndOrTagConfigJson | string ;
/ * *
* Allow freeform text input from the user
* /
freeform ? : {
/ * *
* If this key is present , then 'render' is used to display the value .
* If this is undefined , the rendering is _always_ shown
* /
key : string ,
/ * *
* The type of the text - field , e . g . 'string' , 'nat' , 'float' , 'date' , . . .
* /
type ? : string ,
/ * *
* If a value is added with the textfield , these extra tag is addded .
* Usefull to add a 'fixme=freeform textfield used - to be checked'
* * /
2020-09-02 11:37:34 +02:00
addExtraTags? : string [ ] ;
2020-09-10 19:33:06 +02:00
} ,
/ * *
* If true , use checkboxes instead of radio buttons when asking the question
* /
multiAnswer? : boolean ,
2020-08-30 01:13:18 +02:00
/ * *
* Allows fixed - tag inputs , shown either as radiobuttons or as checkboxes
* /
mappings ? : {
2021-03-14 01:40:35 +01:00
/ * *
* If this condition is met , then the text under ` then ` will be shown .
* If no value matches , and the user selects this mapping as an option , then these tags will be uploaded to OSM .
* /
2020-08-30 01:13:18 +02:00
if : AndOrTagConfigJson | string ,
2021-03-14 01:40:35 +01:00
/ * *
* If the condition ` if ` is met , the text ` then ` will be rendered .
* If not known yet , the user will be presented with ` then ` as an option
* /
then : string | any ,
/ * *
* In some cases , multiple taggings exist ( e . g . a default assumption , or a commonly mapped abbreviation and a fully written variation ) .
*
* In the latter case , a correct text should be shown , but only a single , canonical tagging should be selectable by the user .
* In this case , one of the mappings can be hiden by setting this flag .
*
* To demonstrate an example making a default assumption :
*
* mappings : [
* {
* if : "access=" , -- no access tag present , we assume accessible
* then : "Accessible to the general public" ,
* hideInAnswer : true
* } ,
* {
* if : "access=yes" ,
* then : "Accessible to the general public" , -- the user selected this , we add that to OSM
* } ,
* {
* if : "access=no" ,
* then : "Not accessible to the public"
* }
* ]
*
*
* For example , for an operator , we have ` operator=Agentschap Natuur en Bos ` , which is often abbreviated to ` operator=ANB ` .
* Then , we would add two mappings :
* {
* if : "operator=Agentschap Natuur en Bos" -- the non - abbreviated version which should be uploaded
* then : "Maintained by Agentschap Natuur en Bos"
* } ,
* {
* if : "operator=ANB" , -- we don ' t want to upload abbreviations
* then : "Maintained by Agentschap Natuur en Bos"
* hideInAnswer : true
* }
2021-03-22 02:17:00 +01:00
*
2021-03-22 02:28:30 +01:00
* Hide in answer can also be a tagsfilter , e . g . to make sure an option is only shown when appropriate .
* Keep in mind that this is reverse logic : it will be hidden in the answer if the condition is true , it will thus only show in the case of a mismatch
2021-03-22 02:17:00 +01:00
*
2021-03-22 02:28:30 +01:00
* e . g . , for toilets : if "wheelchair=no" , we know there is no wheelchair dedicated room .
* For the location of the changing table , the option "in the wheelchair accessible toilet is weird" , so we write :
2021-03-22 02:17:00 +01:00
*
2021-03-22 02:28:30 +01:00
* {
* "question" : "Where is the changing table located?"
* "mappings" : [
* { "if" : "changing_table:location=female" , "then" : "In the female restroom" } ,
* { "if" : "changing_table:location=male" , "then" : "In the male restroom" } ,
* { "if" : "changing_table:location=wheelchair" , "then" : "In the wheelchair accessible restroom" , "hideInAnswer" : "wheelchair=no" } ,
*
* ]
* }
2021-03-22 02:17:00 +01:00
*
* Also have a look for the meta - tags
* {
* if : "operator=Agentschap Natuur en Bos" ,
* then : "Maintained by Agentschap Natuur en Bos" ,
* hideInAnswer : "_country!=be"
* }
2021-03-14 01:40:35 +01:00
* /
2021-03-22 02:17:00 +01:00
hideInAnswer? : boolean | string | AndOrTagConfigJson ,
2021-02-20 16:48:42 +01:00
/ * *
* Only applicable if 'multiAnswer' is set .
2021-03-14 01:40:35 +01:00
* This is for situations such as :
* ` accepts:coins=no ` where one can select all the possible payment methods . However , we want to make explicit that some options _were not_ selected .
* This can be done with ` ifnot `
* Note that we can not explicitly render this negative case to the user , we cannot show ` does _not_ accept coins ` .
* If this is important to your usecase , consider using multiple radiobutton - fields without ` multiAnswer `
2021-02-20 16:48:42 +01:00
* /
2021-03-14 01:40:35 +01:00
ifnot? : AndOrTagConfigJson | string
2020-08-30 01:13:18 +02:00
} [ ]
2021-01-08 03:57:18 +01:00
/ * *
* If set to true , this tagRendering will escape the current layer and attach itself to all the other layers too .
* However , it will _only_ be shown if it matches the overpass - tags of the layer it was originally defined in .
* /
roaming? : boolean
2021-04-03 14:33:19 +02:00
}