forked from MapComplete/MapComplete
		
	Themes: add icons, add 'auto'-title-icons
This commit is contained in:
		
							parent
							
								
									0f545b29cb
								
							
						
					
					
						commit
						2c662c9578
					
				
					 10 changed files with 313 additions and 44 deletions
				
			
		|  | @ -1,2 +1,2 @@ | |||
| SPDX-FileCopyrightText: Unkown | ||||
| SPDX-License-Identifier: CC0 | ||||
| SPDX-License-Identifier: CC0-1.0 | ||||
|  | @ -62,6 +62,7 @@ | |||
|       "cs": "Pitná voda" | ||||
|     } | ||||
|   }, | ||||
|   "titleIcons": ["icons.defaults", "auto:type", "auto:seasonal"], | ||||
|   "pointRendering": [ | ||||
|     { | ||||
|       "iconBadges": [ | ||||
|  | @ -301,6 +302,79 @@ | |||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "id": "seasonal", | ||||
|       "question": { | ||||
|         "en": "Is this drinking water point available all year round?" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|           "if": "seasonal=no", | ||||
|           "then":{ | ||||
|             "en":"This drinking water point is available all around the year" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "seasonal=summer", | ||||
|           "then":{ | ||||
|             "en":"This drinking water point is only available in summer" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "if": "seasonal=spring;summer;autumn", | ||||
|           "icon": "./assets/layers/drinking_water/no_winter.svg", | ||||
|           "then":{ | ||||
|             "en":"This drinking water point is closed during the winter" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     {"builtin":["opening_hours_24_7"], | ||||
|       "override": { | ||||
|         "questionHint":{ | ||||
|           "en":"These are the opening hours if the drinking water fountain is operational." | ||||
|         }, | ||||
|         "+mappings":[ | ||||
|           { | ||||
|             "if":{ | ||||
|               "and": [ | ||||
|                 "seasonal!=no", | ||||
|                 {"or":[ | ||||
|                   { | ||||
|                     "and":[ | ||||
|                       "seasonal!~.*winter.*", | ||||
|                       "_now:date~....-(12|01|02)-.." | ||||
|                     ] | ||||
|                   }, | ||||
|                   { | ||||
|                     "and":[ | ||||
|                       "seasonal!~.*spring.*", | ||||
|                       "_now:date~....-(03|04|05)-.." | ||||
|                     ] | ||||
|                   }, | ||||
|                   { | ||||
|                     "and":[ | ||||
|                       "seasonal!~.*summer.*", | ||||
|                       "_now:date~....-(06|07|08)-.." | ||||
|                     ] | ||||
|                   }, | ||||
|                   { | ||||
|                     "and":[ | ||||
|                       "seasonal!~.*autumn.*", | ||||
|                       "_now:date~....-(09|10|11)-.." | ||||
|                     ] | ||||
|                   } | ||||
|                 ]} | ||||
|               ] | ||||
|             }, | ||||
|             "then":{ | ||||
|               "en": "This drinking water fountain is closed this season." | ||||
|             }, | ||||
|             "hideInAnswer":true | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "id": "render-closest-drinking-water", | ||||
|       "render": { | ||||
|  | @ -316,6 +390,7 @@ | |||
|       }, | ||||
|       "condition": "_closest_other_drinking_water_id~*" | ||||
|     } | ||||
|      | ||||
|   ], | ||||
|   "deletion": { | ||||
|     "softDeletionTags": { | ||||
|  |  | |||
|  | @ -33,6 +33,14 @@ | |||
|       "https://osoc.be/editions/2020/cyclofix" | ||||
|     ] | ||||
|   }, | ||||
|   { | ||||
|     "path": "no_winter.svg", | ||||
|     "license": "CC0-1.0", | ||||
|     "authors": [ | ||||
|       "Pieter Vander Vennet" | ||||
|     ], | ||||
|     "sources": [] | ||||
|   }, | ||||
|   { | ||||
|     "path": "tap.svg", | ||||
|     "license": "CC0-1.0", | ||||
|  | @ -42,5 +50,13 @@ | |||
|     "sources": [ | ||||
|       "https://commons.wikimedia.org/wiki/File:Water_DIN-style.svg" | ||||
|     ] | ||||
|   }, | ||||
|   { | ||||
|     "path": "winter.svg", | ||||
|     "license": "CC0-1.0", | ||||
|     "authors": [ | ||||
|       "Pieter Vander Vennet" | ||||
|     ], | ||||
|     "sources": [] | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										81
									
								
								assets/layers/drinking_water/no_winter.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								assets/layers/drinking_water/no_winter.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,81 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    id="svg" | ||||
|    version="1.1" | ||||
|    width="307.91855" | ||||
|    height="343.46448" | ||||
|    viewBox="0 0 307.91855 343.46448" | ||||
|    sodipodi:docname="no_winter.svg" | ||||
|    inkscape:version="1.3.1 (1:1.3.1+202311172155+91b66b0783)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <defs | ||||
|      id="defs1" /> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview1" | ||||
|      pagecolor="#505050" | ||||
|      bordercolor="#eeeeee" | ||||
|      borderopacity="1" | ||||
|      inkscape:showpageshadow="0" | ||||
|      inkscape:pageopacity="0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      inkscape:zoom="1.2257936" | ||||
|      inkscape:cx="190.48884" | ||||
|      inkscape:cy="271.25284" | ||||
|      inkscape:window-width="1920" | ||||
|      inkscape:window-height="995" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="0" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="svg" /> | ||||
|   <g | ||||
|      id="g1" | ||||
|      transform="rotate(-0.2875813,162.85132,95.170788)"> | ||||
|     <path | ||||
|        style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="M 5.008225,86.10653 302.13815,258.03113" | ||||
|        id="path3" | ||||
|        sodipodi:nodetypes="cc" /> | ||||
|     <path | ||||
|        style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 153.09023,0.048073 1.65028,343.280557" | ||||
|        id="path3-7" | ||||
|        sodipodi:nodetypes="cc" /> | ||||
|     <path | ||||
|        style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="M 302.54004,85.82932 5.2907,257.54738" | ||||
|        id="path4" | ||||
|        sodipodi:nodetypes="cc" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 5.786561,200.08323 53.987051,25.55191 -3.26951,61.20155" | ||||
|        id="path6" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 56.719332,59.041006 3.20013,59.642774 -55.391241,26.23225" | ||||
|        id="path7" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="M 201.87442,31.964241 152.44006,65.486554 101.3842,31.580519" | ||||
|        id="path8" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 203.26283,313.48917 -49.04644,-34.08735 -51.44157,33.31792" | ||||
|        id="path9" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 300.19729,199.07429 -53.31225,26.93149 4.84196,61.09726" | ||||
|        id="path10" /> | ||||
|     <path | ||||
|        style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|        d="m 251.37871,59.718988 -4.44648,59.562822 54.83066,27.38467" | ||||
|        id="path11" /> | ||||
|   </g> | ||||
|   <path | ||||
|      style="fill:#000000;stroke:#e40000;stroke-width:25;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="M 23.115301,297.04602 290.36883,29.792506" | ||||
|      id="path1" /> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 3.2 KiB | 
							
								
								
									
										2
									
								
								assets/layers/drinking_water/no_winter.svg.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								assets/layers/drinking_water/no_winter.svg.license
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| SPDX-FileCopyrightText: Pieter Vander Vennet | ||||
| SPDX-License-Identifier: CC0-1.0 | ||||
							
								
								
									
										73
									
								
								assets/layers/drinking_water/winter.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								assets/layers/drinking_water/winter.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    id="svg" | ||||
|    version="1.1" | ||||
|    width="307.54224" | ||||
|    height="343.37671" | ||||
|    viewBox="0 0 307.54224 343.37671" | ||||
|    sodipodi:docname="no_winter.svg" | ||||
|    inkscape:version="1.3.1 (1:1.3.1+202311172155+91b66b0783)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <defs | ||||
|      id="defs1" /> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview1" | ||||
|      pagecolor="#505050" | ||||
|      bordercolor="#eeeeee" | ||||
|      borderopacity="1" | ||||
|      inkscape:showpageshadow="0" | ||||
|      inkscape:pageopacity="0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      inkscape:zoom="1.2257936" | ||||
|      inkscape:cx="190.48884" | ||||
|      inkscape:cy="271.25285" | ||||
|      inkscape:window-width="1920" | ||||
|      inkscape:window-height="995" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="0" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="svg" /> | ||||
|   <path | ||||
|      style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="M 5.008225,86.10653 302.13815,258.03113" | ||||
|      id="path3" | ||||
|      sodipodi:nodetypes="cc" /> | ||||
|   <path | ||||
|      style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 153.09023,0.048073 1.65028,343.280557" | ||||
|      id="path3-7" | ||||
|      sodipodi:nodetypes="cc" /> | ||||
|   <path | ||||
|      style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="M 302.54004,85.82932 5.2907,257.54738" | ||||
|      id="path4" | ||||
|      sodipodi:nodetypes="cc" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 5.786561,200.08323 53.987051,25.55191 -3.26951,61.20155" | ||||
|      id="path6" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 56.719332,59.041006 3.20013,59.642774 -55.391241,26.23225" | ||||
|      id="path7" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="M 201.87442,31.964241 152.44006,65.486554 101.3842,31.580519" | ||||
|      id="path8" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 203.26283,313.48917 -49.04644,-34.08735 -51.44157,33.31792" | ||||
|      id="path9" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 300.19729,199.07429 -53.31225,26.93149 4.84196,61.09726" | ||||
|      id="path10" /> | ||||
|   <path | ||||
|      style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1" | ||||
|      d="m 251.37871,59.718988 -4.44648,59.562822 54.83066,27.38467" | ||||
|      id="path11" /> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 2.9 KiB | 
							
								
								
									
										2
									
								
								assets/layers/drinking_water/winter.svg.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								assets/layers/drinking_water/winter.svg.license
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| SPDX-FileCopyrightText: Pieter Vander Vennet | ||||
| SPDX-License-Identifier: CC0-1.0 | ||||
|  | @ -1,42 +1,14 @@ | |||
| import { Utils } from "../../Utils" | ||||
| /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */ | ||||
| export class ThemeMetaTagging { | ||||
|     public static readonly themeName = "usersettings" | ||||
|    public static readonly themeName = "usersettings" | ||||
| 
 | ||||
|     public metaTaggging_for_usersettings(feat: { properties: Record<string, string> }) { | ||||
|         Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () => | ||||
|             feat.properties._description | ||||
|                 .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/) | ||||
|                 ?.at(1) | ||||
|         ) | ||||
|         Utils.AddLazyProperty( | ||||
|             feat.properties, | ||||
|             "_d", | ||||
|             () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? "" | ||||
|         ) | ||||
|         Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () => | ||||
|             ((feat) => { | ||||
|                 const e = document.createElement("div") | ||||
|                 e.innerHTML = feat.properties._d | ||||
|                 return Array.from(e.getElementsByTagName("a")).filter( | ||||
|                     (a) => a.href.match(/mastodon|en.osm.town/) !== null | ||||
|                 )[0]?.href | ||||
|             })(feat) | ||||
|         ) | ||||
|         Utils.AddLazyProperty(feat.properties, "_mastodon_link", () => | ||||
|             ((feat) => { | ||||
|                 const e = document.createElement("div") | ||||
|                 e.innerHTML = feat.properties._d | ||||
|                 return Array.from(e.getElementsByTagName("a")).filter( | ||||
|                     (a) => a.getAttribute("rel")?.indexOf("me") >= 0 | ||||
|                 )[0]?.href | ||||
|             })(feat) | ||||
|         ) | ||||
|         Utils.AddLazyProperty( | ||||
|             feat.properties, | ||||
|             "_mastodon_candidate", | ||||
|             () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a | ||||
|         ) | ||||
|         feat.properties["__current_backgroun"] = "initial_value" | ||||
|     } | ||||
|    public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) { | ||||
|       Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) )  | ||||
|       Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' )  | ||||
|       Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href   }) (feat)  )  | ||||
|       Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat)  )  | ||||
|       Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a )  | ||||
|       feat.properties['__current_backgroun'] = 'initial_value' | ||||
|    } | ||||
| } | ||||
|  | @ -10,10 +10,7 @@ import { | |||
|     SetDefault, | ||||
| } from "./Conversion" | ||||
| import { LayerConfigJson } from "../Json/LayerConfigJson" | ||||
| import { | ||||
|     MinimalTagRenderingConfigJson, | ||||
|     TagRenderingConfigJson, | ||||
| } from "../Json/TagRenderingConfigJson" | ||||
| import { MinimalTagRenderingConfigJson, TagRenderingConfigJson } from "../Json/TagRenderingConfigJson" | ||||
| import { Utils } from "../../../Utils" | ||||
| import RewritableConfigJson from "../Json/RewritableConfigJson" | ||||
| import SpecialVisualizations from "../../../UI/SpecialVisualizations" | ||||
|  | @ -26,7 +23,7 @@ import predifined_filters from "../../../../assets/layers/filters/filters.json" | |||
| import { TagConfigJson } from "../Json/TagConfigJson" | ||||
| import PointRenderingConfigJson, { IconConfigJson } from "../Json/PointRenderingConfigJson" | ||||
| import ValidationUtils from "./ValidationUtils" | ||||
| import { RenderingSpecification, SpecialVisualization } from "../../../UI/SpecialVisualization" | ||||
| import { RenderingSpecification } from "../../../UI/SpecialVisualization" | ||||
| import { QuestionableTagRenderingConfigJson } from "../Json/QuestionableTagRenderingConfigJson" | ||||
| import { ConfigMeta } from "../../../UI/Studio/configMeta" | ||||
| import LineRenderingConfigJson from "../Json/LineRenderingConfigJson" | ||||
|  | @ -1220,6 +1217,54 @@ export class AddRatingBadge extends DesugaringStep<LayerConfigJson> { | |||
|         return json | ||||
|     } | ||||
| } | ||||
| export class AutoTitleIcon extends DesugaringStep<LayerConfigJson> { | ||||
|     constructor() { | ||||
|         super( | ||||
|             "The auto-icon creates a (non-clickable) title icon based on a tagRendering which has icons", | ||||
|             ["titleIcons"], | ||||
|             "AutoTitleIcon" | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
|     convert(json: LayerConfigJson, context: ConversionContext): LayerConfigJson { | ||||
|         json = { ...json } | ||||
|         json.titleIcons = [...json.titleIcons] | ||||
|         for (let i = 0; i < json.titleIcons.length; i++) { | ||||
|             const titleIcon = json.titleIcons[i] | ||||
|             if (typeof titleIcon !== "string") { | ||||
|                 continue | ||||
|             } | ||||
|             if (!titleIcon.startsWith("auto:")) { | ||||
|                 continue | ||||
|             } | ||||
|             const trId = titleIcon.substring("auto:".length) | ||||
|             const tr = <QuestionableTagRenderingConfigJson>json.tagRenderings.find((tr) => tr["id"] === trId) | ||||
|             if (tr === undefined) { | ||||
|                 context | ||||
|                     .enters("titleIcons", i) | ||||
|                     .err("TagRendering with id " + trId + " not found") | ||||
|                 continue | ||||
|             } | ||||
|             const mappings: { if: TagConfigJson, then: string }[] = tr.mappings?.filter(m => m.icon !== undefined) | ||||
|                 .map(m => { | ||||
|                     const path: string = typeof m.icon === "string" ? m.icon : m.icon.path | ||||
|                     const img = `<img class="m-1 h-6 w-6 low-interaction rounded" src='${path}'/>` | ||||
|                     return ({ if: m.if, then: img }) | ||||
|                 }) | ||||
|             if (mappings.length === 0) { | ||||
|                 context | ||||
|                     .enters("titleIcons", i) | ||||
|                     .warn("TagRendering with id " + trId + " does not have any icons, not generating an icon for this") | ||||
|                 continue | ||||
|             } | ||||
|             json.titleIcons[i] = <TagRenderingConfigJson>{ | ||||
|                 id: "title_icon_auto_" + trId, | ||||
|                 mappings, | ||||
|             } | ||||
|         } | ||||
|         return json | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export class PrepareLayer extends Fuse<LayerConfigJson> { | ||||
|     constructor(state: DesugaringContext) { | ||||
|  | @ -1247,6 +1292,7 @@ export class PrepareLayer extends Fuse<LayerConfigJson> { | |||
|             ), | ||||
|             new SetDefault("titleIcons", ["icons.defaults"]), | ||||
|             new AddRatingBadge(), | ||||
|             new AutoTitleIcon(), | ||||
|             new On( | ||||
|                 "titleIcons", | ||||
|                 (layer) => | ||||
|  |  | |||
|  | @ -240,6 +240,8 @@ export interface LayerConfigJson { | |||
|      * Use an empty array to hide them. | ||||
|      * Note that "defaults" will insert all the default titleIcons (which are added automatically) | ||||
|      * | ||||
|      * Use `auto:<tagrenderingId>` to automatically create an icon based on a tagRendering which has icons | ||||
|      * | ||||
|      * Type: icon[] | ||||
|      * group: infobox | ||||
|      */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue