forked from MapComplete/MapComplete
		
	Small fixes in CustomGenerator; artworkmap is now a json-preset
This commit is contained in:
		
							parent
							
								
									c8b2dab669
								
							
						
					
					
						commit
						1cdf2ee9bc
					
				
					 9 changed files with 224 additions and 150 deletions
				
			
		|  | @ -6,7 +6,6 @@ import {Groen} from "./Layouts/Groen"; | ||||||
| import Cyclofix from "./Layouts/Cyclofix"; | import Cyclofix from "./Layouts/Cyclofix"; | ||||||
| import {StreetWidth} from "./Layouts/StreetWidth"; | import {StreetWidth} from "./Layouts/StreetWidth"; | ||||||
| import {GRB} from "./Layouts/GRB"; | import {GRB} from "./Layouts/GRB"; | ||||||
| import {Artworks} from "./Layouts/Artworks"; |  | ||||||
| import {ClimbingTrees} from "./Layouts/ClimbingTrees"; | import {ClimbingTrees} from "./Layouts/ClimbingTrees"; | ||||||
| import {Smoothness} from "./Layouts/Smoothness"; | import {Smoothness} from "./Layouts/Smoothness"; | ||||||
| import {MetaMap} from "./Layouts/MetaMap"; | import {MetaMap} from "./Layouts/MetaMap"; | ||||||
|  | @ -16,6 +15,7 @@ import {CustomLayoutFromJSON} from "./JSON/CustomLayoutFromJSON"; | ||||||
| import * as bookcases from "../assets/themes/bookcases/Bookcases.json"; | import * as bookcases from "../assets/themes/bookcases/Bookcases.json"; | ||||||
| import * as aed from "../assets/themes/aed/aed.json"; | import * as aed from "../assets/themes/aed/aed.json"; | ||||||
| import * as toilets from "../assets/themes/toilets/toilets.json"; | import * as toilets from "../assets/themes/toilets/toilets.json"; | ||||||
|  | import * as artworks from "../assets/themes/artwork/artwork.json"; | ||||||
| 
 | 
 | ||||||
| export class AllKnownLayouts { | export class AllKnownLayouts { | ||||||
| 
 | 
 | ||||||
|  | @ -30,11 +30,11 @@ export class AllKnownLayouts { | ||||||
|         CustomLayoutFromJSON.LayoutFromJSON(bookcases), |         CustomLayoutFromJSON.LayoutFromJSON(bookcases), | ||||||
|         CustomLayoutFromJSON.LayoutFromJSON(aed), |         CustomLayoutFromJSON.LayoutFromJSON(aed), | ||||||
|         CustomLayoutFromJSON.LayoutFromJSON(toilets), |         CustomLayoutFromJSON.LayoutFromJSON(toilets), | ||||||
|  |         CustomLayoutFromJSON.LayoutFromJSON(artworks), | ||||||
| 
 | 
 | ||||||
|         new MetaMap(), |         new MetaMap(), | ||||||
|         new StreetWidth(), |         new StreetWidth(), | ||||||
|         new ClimbingTrees(), |         new ClimbingTrees(), | ||||||
|         new Artworks(), |  | ||||||
|         new Smoothness(), |         new Smoothness(), | ||||||
|         new Groen(), |         new Groen(), | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,88 +0,0 @@ | ||||||
| import {LayerDefinition} from "../LayerDefinition"; |  | ||||||
| import {Tag} from "../../Logic/TagsFilter"; |  | ||||||
| import L from "leaflet"; |  | ||||||
| import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload"; |  | ||||||
| import Translations from "../../UI/i18n/Translations"; |  | ||||||
| import Website from "../Questions/Website"; |  | ||||||
| import FixedText from "../Questions/FixedText"; |  | ||||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; |  | ||||||
| 
 |  | ||||||
| export class Artwork extends LayerDefinition { |  | ||||||
| 
 |  | ||||||
|     constructor() { |  | ||||||
|         super("artwork"); |  | ||||||
|         this.name = "artwork"; |  | ||||||
|         const t = Translations.t.artwork; |  | ||||||
|         this.title = t.title; |  | ||||||
|         const tag = new Tag("tourism", "artwork"); |  | ||||||
|         this.presets = [ |  | ||||||
|             { |  | ||||||
|                 title: this.title, |  | ||||||
|                 tags: [tag] |  | ||||||
|             } |  | ||||||
|         ]; |  | ||||||
|         this.icon = "./assets/statue.svg"; |  | ||||||
|         this.overpassFilter = tag; |  | ||||||
|         this.minzoom = 13; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         const to = Translations.t.artwork.type; |  | ||||||
|         const artworkType = new TagRenderingOptions({ |  | ||||||
|             priority: 5, |  | ||||||
|             question: to.question, |  | ||||||
|             freeform: { |  | ||||||
|                 key: "artwork_type", |  | ||||||
|                 extraTags: new Tag("fixme", "Freeform artwork_type= tag used: possibly a wrong value"), |  | ||||||
|                 template: to.template.txt, |  | ||||||
|                 renderTemplate: to.render.txt, |  | ||||||
|                 placeholder: Translations.t.cyclofix.freeFormPlaceholder, |  | ||||||
|             }, |  | ||||||
|             mappings: [ |  | ||||||
|                 {k: new Tag("artwork_type", "architecture"), txt: to.architecture}, |  | ||||||
|                 {k: new Tag("artwork_type", "mural"), txt: to.mural}, |  | ||||||
|                 {k: new Tag("artwork_type", "painting"), txt: to.painting}, |  | ||||||
|                 {k: new Tag("artwork_type", "sculpture"), txt: to.sculpture}, |  | ||||||
|                 {k: new Tag("artwork_type", "statue"), txt: to.statue}, |  | ||||||
|                 {k: new Tag("artwork_type", "bust"), txt: to.bust}, |  | ||||||
|                 {k: new Tag("artwork_type", "stone"), txt: to.stone}, |  | ||||||
|                 {k: new Tag("artwork_type", "installation"), txt: to.installation}, |  | ||||||
|                 {k: new Tag("artwork_type", "graffiti"), txt: to.graffiti}, |  | ||||||
|                 {k: new Tag("artwork_type", "relief"), txt: to.relief}, |  | ||||||
|                 {k: new Tag("artwork_type", "azulejo"), txt: to.azulejo}, |  | ||||||
|                 {k: new Tag("artwork_type", "tilework"), txt: to.tilework} |  | ||||||
|             ] |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         const artistQuestion = new TagRenderingOptions({ |  | ||||||
|             question: t.artist.question, |  | ||||||
|             freeform: { |  | ||||||
|                 key: "artist_name", |  | ||||||
|                 template: "$$$", |  | ||||||
|                 renderTemplate: "{artist_name}" |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         this.elementsToShow = [ |  | ||||||
| 
 |  | ||||||
|             new ImageCarouselWithUploadConstructor(), |  | ||||||
|             artworkType, |  | ||||||
|             artistQuestion, |  | ||||||
|             new Website(t.title) |  | ||||||
|         ]; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         this.style = function (tags) { |  | ||||||
|             return { |  | ||||||
|                 icon: { |  | ||||||
|                     iconUrl: "./assets/statue.svg", |  | ||||||
|                     iconSize: [40, 40], |  | ||||||
|                 }, |  | ||||||
|                 color: "#0000ff" |  | ||||||
|             }; |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
|  | @ -1,17 +0,0 @@ | ||||||
| import {Layout} from "../Layout"; |  | ||||||
| import {Artwork} from "../Layers/Artwork"; |  | ||||||
| 
 |  | ||||||
| export class Artworks extends Layout{ |  | ||||||
|     constructor() { |  | ||||||
|         super(    "artworks", |  | ||||||
|             ["en","nl","fr"], |  | ||||||
|             "Open Artwork Map", |  | ||||||
|             [new Artwork()], |  | ||||||
|             10, |  | ||||||
|             50.8435, |  | ||||||
|             4.3688, |  | ||||||
|             "<h3>Open Artwork Map</h3>"); |  | ||||||
|         this.icon = "./assets/statue.svg" |  | ||||||
|     } |  | ||||||
|      |  | ||||||
| } |  | ||||||
							
								
								
									
										2
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -24,7 +24,7 @@ export class State { | ||||||
|     // The singleton of the global state
 |     // The singleton of the global state
 | ||||||
|     public static state: State; |     public static state: State; | ||||||
|      |      | ||||||
|     public static vNumber = "0.0.6a"; |     public static vNumber = "0.0.6b"; | ||||||
|      |      | ||||||
|     // The user journey states thresholds when a new feature gets unlocked
 |     // The user journey states thresholds when a new feature gets unlocked
 | ||||||
|     public static userJourney = { |     public static userJourney = { | ||||||
|  |  | ||||||
|  | @ -578,17 +578,20 @@ export class ThemeGenerator extends UIElement { | ||||||
|                 textField = new TextField<string>({ |                 textField = new TextField<string>({ | ||||||
|                     placeholder: "single key", |                     placeholder: "single key", | ||||||
|                     startValidated: false, |                     startValidated: false, | ||||||
|                     value: new UIEventSource<string>(""), |                     value:value, | ||||||
|                     toString: str => str, |                     toString: str => str, | ||||||
|                     fromString: str => { |                     fromString: str => { | ||||||
|  |                         if(str === undefined){ | ||||||
|  |                             return ""; | ||||||
|  |                         } | ||||||
|                         if (str === "*") { |                         if (str === "*") { | ||||||
|                             return str; |                             return str; | ||||||
|                         } |                         } | ||||||
|                         str = str.trim(); |                         str = str.trim(); | ||||||
|                         if (str.match("^_*[a-zA-Z]*[a-zA-Z0-9:]*$") == null) { |                         if (str.match("^_*[a-zA-Z]*[a-zA-Z0-9:_]*$") == null) { | ||||||
|                             return undefined; |                             return undefined; | ||||||
|                         } |                         } | ||||||
|                         return str.trim(); |                         return str; | ||||||
|                     } |                     } | ||||||
|                 }) |                 }) | ||||||
| 
 | 
 | ||||||
|  | @ -619,13 +622,18 @@ export class ThemeGenerator extends UIElement { | ||||||
|                 }); |                 }); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             let sendingPing = false; | ||||||
|             value.addCallback((v) => { |             value.addCallback((v) => { | ||||||
|                 if (v === undefined || v === "") { |                 if (v === undefined || v === "") { | ||||||
|                     delete root[key]; |                     delete root[key]; | ||||||
|                 } else { |                 } else { | ||||||
|                     root[key] = v; |                     root[key] = v; | ||||||
|                 } |                 } | ||||||
|                 self.themeObject.ping(); // We assume the root is a part of the themeObject
 |                 if(!sendingPing){ | ||||||
|  |                     sendingPing = true; | ||||||
|  |                     self.themeObject.ping(); // We assume the root is a part of the themeObject
 | ||||||
|  |                     sendingPing = false; | ||||||
|  |                 } | ||||||
|             }); |             }); | ||||||
| 
 | 
 | ||||||
|             self.themeObject.addCallback(() => { |             self.themeObject.addCallback(() => { | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ export class ValidatedTextField { | ||||||
|         "$": (str) => true, |         "$": (str) => true, | ||||||
|         "string": (str) => true, |         "string": (str) => true, | ||||||
|         "date": (str) => true, // TODO validate and add a date picker
 |         "date": (str) => true, // TODO validate and add a date picker
 | ||||||
|  |         "wikidata": (str) => true, // TODO validate wikidata IDS
 | ||||||
|         "int": (str) => {str = ""+str; return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str))}, |         "int": (str) => {str = ""+str; return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str))}, | ||||||
|         "nat": (str) => {str = ""+str; return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) > 0}, |         "nat": (str) => {str = ""+str; return str !== undefined && str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) > 0}, | ||||||
|         "float": (str) => !isNaN(Number(str)), |         "float": (str) => !isNaN(Number(str)), | ||||||
|  |  | ||||||
|  | @ -62,14 +62,19 @@ export class MoreScreen extends UIElement { | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (layout.name === CustomLayout.NAME) { |             if (layout.name === CustomLayout.NAME) { | ||||||
|                     continue; |                 continue; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             const currentLocation = State.state.locationControl.data; |             const currentLocation = State.state.locationControl.data; | ||||||
|             const linkText = |             let linkText = | ||||||
|                 `https://pietervdvn.github.io/MapComplete/${layout.name}.html?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` |                 `./${layout.name}.html?z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` | ||||||
|  | 
 | ||||||
|  |             if (location.hostname === "localhost" || location.hostname === "127.0.0.1") { | ||||||
|  |                 linkText = `./index.html?layout=${layout.name}&z=${currentLocation.zoom}&lat=${currentLocation.lat}&lon=${currentLocation.lon}` | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             let description = Translations.W(layout.description); |             let description = Translations.W(layout.description); | ||||||
|             if(description !== undefined){ |             if (description !== undefined) { | ||||||
|                 description = new Combine(["<br/>", description]); |                 description = new Combine(["<br/>", description]); | ||||||
|             } |             } | ||||||
|             const link = |             const link = | ||||||
|  |  | ||||||
|  | @ -29,38 +29,7 @@ export default class Translations { | ||||||
| 
 | 
 | ||||||
|         }, |         }, | ||||||
| 
 | 
 | ||||||
|         artwork: { |         | ||||||
|             name: new T({ en: 'Artwork', nl: 'Kunstwerk', fr: "Oeuvre d'art" }), |  | ||||||
|             title: new T({ en: 'Artwork', nl: 'Kunstwerk', fr: "Oeuvre d'art" }), |  | ||||||
|             type: { |  | ||||||
|                 render: new T({ |  | ||||||
|                     en: 'This is artwork of the type: {artwork_type}', |  | ||||||
|                     nl: 'Dit is een kunstwerk van het type: {artwork_type}', |  | ||||||
|                     fr: "Ceci est un travail d'art de type: {artwork_type}" |  | ||||||
|                 }), |  | ||||||
|                 template: new T({ en: 'Some other type: $$$', nl: 'Een ander type: $$$', fr: 'Un autre type: $$$' }), |  | ||||||
|                 question: new T({ |  | ||||||
|                     en: 'What is the type of this artwork?', |  | ||||||
|                     nl: 'Wat voor type kunstwerk is dit?', |  | ||||||
|                     fr: "Quel est le type de cette oeuvre d'art?" |  | ||||||
|                 }), |  | ||||||
|                 architecture: new T({ en: "architecture", nl: "architectuur", fr: "architecture" }), |  | ||||||
|                 mural: new T({ en: "mural", nl: "muurschildering", fr: "mural" }), |  | ||||||
|                 painting: new T({ en: "painting", nl: "schilderij", fr: "peinture" }), |  | ||||||
|                 sculpture: new T({ en: "sculpture", nl: "beeldhouwwerk", fr: "sculpture" }), |  | ||||||
|                 statue: new T({ en: "statue", nl: "standbeeld", fr: "statue" }), |  | ||||||
|                 bust: new T({ en: "bust", nl: "buste", fr: "buste" }), |  | ||||||
|                 stone: new T({ en: "stone", nl: "steen", fr: "rocher" }), |  | ||||||
|                 installation: new T({ en: "installation", nl: "installatie", fr: "installation" }), |  | ||||||
|                 graffiti: new T({ en: "graffiti", nl: "graffiti", fr: "graffiti" }), |  | ||||||
|                 relief: new T({ en: "relief", nl: "verlichting", fr: "relief" }), |  | ||||||
|                 azulejo: new T({ en: "azulejo", nl: "azulejo", fr: "azulejo" }), |  | ||||||
|                 tilework: new T({ en: "tilework", nl: "tegelwerk", fr: "carrelage" }) |  | ||||||
|             }, artist: { |  | ||||||
|                 question: new T({en:"Which artist created this artwork?"}) |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|         }, |  | ||||||
|         cyclofix: { |         cyclofix: { | ||||||
|             title: new T({ |             title: new T({ | ||||||
|                 en: 'Cyclofix - an open map for cyclists', |                 en: 'Cyclofix - an open map for cyclists', | ||||||
|  | @ -754,7 +723,7 @@ export default class Translations { | ||||||
|                 header: new T({ |                 header: new T({ | ||||||
|                     en: "<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>", |                     en: "<h2>Add a point?</h2>You clicked somewhere where no data is known yet.<br/>", | ||||||
|                     nl: "<h2>Punt toevoegen?</h2>Je klikte ergens waar er nog geen data is.<br/>", |                     nl: "<h2>Punt toevoegen?</h2>Je klikte ergens waar er nog geen data is.<br/>", | ||||||
|                     fr: "<h2>Pas de données</h2> vous avez cliqué sur un endroit ou il n'y a pas encore de données. <br/>" |                     fr: "<h2>Pas de données</h2>Vous avez cliqué sur un endroit ou il n'y a pas encore de données. <br/>" | ||||||
| 
 | 
 | ||||||
|                 }), |                 }), | ||||||
|                 pleaseLogin: new T({ |                 pleaseLogin: new T({ | ||||||
|  |  | ||||||
|  | @ -1,2 +1,198 @@ | ||||||
|   { | { | ||||||
|  |   "startLat": 0, | ||||||
|  |   "startLon": 0, | ||||||
|  |   "startZoom": 12, | ||||||
|  |   "maintainer": "Not logged in", | ||||||
|  |   "language": [ | ||||||
|  |     "en", | ||||||
|  |     "nl" | ||||||
|  |   ], | ||||||
|  |   "widenFactor": 0.07, | ||||||
|  |   "name": "artworks", | ||||||
|  |   "title": { | ||||||
|  |     "en": "Open Artwork Map", | ||||||
|  |     "nl": "Kunstwerkenkaart" | ||||||
|  |   }, | ||||||
|  |   "icon": "./assets/themes/artwork/artwork.svg", | ||||||
|  |   "description": { | ||||||
|  |     "en": "Welcome to Open Artwork Map, a map of statues, busts, grafittis, ... all over the world", | ||||||
|  |     "nl": "Welkom op de Open Kunstwerken Kaart" | ||||||
|  |   }, | ||||||
|  |   "layers": [ | ||||||
|  |     { | ||||||
|  |       "id": "Artwork", | ||||||
|  |       "title": { | ||||||
|  |         "key": "*", | ||||||
|  |         "render": { | ||||||
|  |           "en": "Artwork", | ||||||
|  |           "nl": "Kunstwerk", | ||||||
|  |           "fr": "Oeuvre d'art" | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       "icon": { | ||||||
|  |         "key": "*", | ||||||
|  |         "render": "./assets/themes/artwork/artwork.svg" | ||||||
|  |       }, | ||||||
|  |       "color": { | ||||||
|  |         "key": "*", | ||||||
|  |         "render": "#0000ff" | ||||||
|  |       }, | ||||||
|  |       "width": { | ||||||
|  |         "key": "*", | ||||||
|  |         "render": "10" | ||||||
|  |       }, | ||||||
|  |       "description": { | ||||||
|  |         "en": "", | ||||||
|  |         "nl": "" | ||||||
|  |       }, | ||||||
|  |       "minzoom": 12, | ||||||
|  |       "wayHandling": 2, | ||||||
|  |       "presets": [ | ||||||
|  |         { | ||||||
|  |           "tags": "tourism=artwork", | ||||||
|  |           "title": { | ||||||
|  |             "en": "Artwork" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "tagRenderings": [ | ||||||
|  |         { | ||||||
|  |           "mappings": [ | ||||||
|  |             { | ||||||
|  |               "if": "a=b", | ||||||
|  |               "then": "xyz" | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=architecture", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "architecture", | ||||||
|  |                 "nl": "architectuur", | ||||||
|  |                 "fr": "architecture" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=mural", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "mural", | ||||||
|  |                 "nl": "muurschildering", | ||||||
|  |                 "fr": "mural" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=painting", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "painting", | ||||||
|  |                 "nl": "schilderij", | ||||||
|  |                 "fr": "peinture" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=sculpture", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "sculpture", | ||||||
|  |                 "nl": "beeldhouwwerk", | ||||||
|  |                 "fr": "sculpture" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=statue", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "statue", | ||||||
|  |                 "nl": "standbeeld", | ||||||
|  |                 "fr": "statue" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=bust", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "bust", | ||||||
|  |                 "nl": "buste", | ||||||
|  |                 "fr": "buste" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=stone", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "stone", | ||||||
|  |                 "nl": "steen", | ||||||
|  |                 "fr": "rocher" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=installation", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "installation", | ||||||
|  |                 "nl": "installatie", | ||||||
|  |                 "fr": "installation" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=graffiti", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "graffiti", | ||||||
|  |                 "nl": "graffiti", | ||||||
|  |                 "fr": "graffiti" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=relief", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "relief", | ||||||
|  |                 "nl": "verlichting", | ||||||
|  |                 "fr": "relief" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=azulejo", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "azulejo", | ||||||
|  |                 "nl": "azulejo", | ||||||
|  |                 "fr": "azulejo" | ||||||
|  |               } | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |               "if": "artwork_type=tilework", | ||||||
|  |               "then": { | ||||||
|  |                 "en": "tilework", | ||||||
|  |                 "nl": "tegelwerk", | ||||||
|  |                 "fr": "carrelage" | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           ], | ||||||
|  |           "key": "artwork_type", | ||||||
|  |           "render": { | ||||||
|  |             "en": "This is a {artwork_type}", | ||||||
|  |             "nl": "Dit is een {artwork_type}", | ||||||
|  |             "fr": "{artwork_type}" | ||||||
|  |           }, | ||||||
|  |           "type": "text", | ||||||
|  |           "question": { | ||||||
|  |             "en": "What is the type of this artwork?", | ||||||
|  |             "nl": "Wat voor soort kunstwerk is dit?", | ||||||
|  |             "fr": "Quel est le type de cette oeuvre d'art?" | ||||||
|  |           }, | ||||||
|  |           "addExtraTags": "fixme=Artowrk type was added with the freeform, might need another check" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "question": "Which wikidata-entry corresponds with <b>this artwork</b>?", | ||||||
|  |           "key": "wikidata", | ||||||
|  |           "type": "wikidata", | ||||||
|  |           "render": "Corresponds with <a href='https://www.wikidata.org/wiki/{wikidata}' target='_blank'>{wikidata}</a>" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "question": "Which artist created this?", | ||||||
|  |           "key": "artist_name", | ||||||
|  |           "render": "Created by {artist_name}", | ||||||
|  |           "condition": "wikidata=" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "question": "On which website is more information about this artwork?", | ||||||
|  |           "key": "website", | ||||||
|  |           "type": "url", | ||||||
|  |           "render": "More information on {website}" | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       "overpassTags": "tourism=artwork" | ||||||
|  |     } | ||||||
|  |   ] | ||||||
| } | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue