| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  | import {AndOrTagConfigJson} from "./TagConfigJson"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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
										 |  |  |      *  | 
					
						
							|  |  |  |      * Note that this is a HTML-interpreted value, so you can add links as e.g. <a href='{website}'>{website}</a> | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |          * } | 
					
						
							|  |  |  |          */ | 
					
						
							|  |  |  |         hideInAnswer?: boolean, | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  | } |