forked from MapComplete/MapComplete
		
	Small tweaks and more layouts
This commit is contained in:
		
							parent
							
								
									5d5cf67820
								
							
						
					
					
						commit
						e074d9c3e9
					
				
					 18 changed files with 235 additions and 134 deletions
				
			
		| 
						 | 
					@ -1,18 +1,15 @@
 | 
				
			||||||
import { Groen } from "./Layouts/Groen";
 | 
					import {Groen} from "./Layouts/Groen";
 | 
				
			||||||
import { Toilets } from "./Layouts/Toilets";
 | 
					import {GRB} from "./Layouts/GRB";
 | 
				
			||||||
import { GRB } from "./Layouts/GRB";
 | 
					import {Artworks} from "./Layouts/Artworks";
 | 
				
			||||||
import { Statues } from "./Layouts/Statues";
 | 
					import {Bookcases} from "./Layouts/Bookcases";
 | 
				
			||||||
import { Bookcases } from "./Layouts/Bookcases";
 | 
					 | 
				
			||||||
import Cyclofix from "./Layouts/Cyclofix";
 | 
					import Cyclofix from "./Layouts/Cyclofix";
 | 
				
			||||||
import { WalkByBrussels } from "./Layouts/WalkByBrussels";
 | 
					import {WalkByBrussels} from "./Layouts/WalkByBrussels";
 | 
				
			||||||
import { All } from "./Layouts/All";
 | 
					import {All} from "./Layouts/All";
 | 
				
			||||||
import { Layout } from "./Layout";
 | 
					import {Layout} from "./Layout";
 | 
				
			||||||
import {MetaMap} from "./Layouts/MetaMap";
 | 
					import {MetaMap} from "./Layouts/MetaMap";
 | 
				
			||||||
import {Widths} from "./Layers/Widths";
 | 
					 | 
				
			||||||
import {StreetWidth} from "./Layouts/StreetWidth";
 | 
					import {StreetWidth} from "./Layouts/StreetWidth";
 | 
				
			||||||
import {NatureReserves} from "./Layers/NatureReserves";
 | 
					 | 
				
			||||||
import {Natuurpunt} from "./Layouts/Natuurpunt";
 | 
					import {Natuurpunt} from "./Layouts/Natuurpunt";
 | 
				
			||||||
import Translations from "../UI/i18n/Translations";
 | 
					import {ClimbingTrees} from "./Layouts/ClimbingTrees";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class AllKnownLayouts {
 | 
					export class AllKnownLayouts {
 | 
				
			||||||
    public static allSets = AllKnownLayouts.AllLayouts();
 | 
					    public static allSets = AllKnownLayouts.AllLayouts();
 | 
				
			||||||
| 
						 | 
					@ -27,6 +24,8 @@ export class AllKnownLayouts {
 | 
				
			||||||
            new MetaMap(),
 | 
					            new MetaMap(),
 | 
				
			||||||
            new StreetWidth(),
 | 
					            new StreetWidth(),
 | 
				
			||||||
            new Natuurpunt(),
 | 
					            new Natuurpunt(),
 | 
				
			||||||
 | 
					            new ClimbingTrees(),
 | 
				
			||||||
 | 
					            new Artworks()
 | 
				
			||||||
            /*new Toilets(),
 | 
					            /*new Toilets(),
 | 
				
			||||||
            new Statues(),
 | 
					            new Statues(),
 | 
				
			||||||
            */
 | 
					            */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,5 @@
 | 
				
			||||||
import {Tag, TagsFilter} from "../Logic/TagsFilter";
 | 
					import {Tag, TagsFilter} from "../Logic/TagsFilter";
 | 
				
			||||||
import {UIElement} from "../UI/UIElement";
 | 
					import {UIElement} from "../UI/UIElement";
 | 
				
			||||||
import {Basemap} from "../Logic/Basemap";
 | 
					 | 
				
			||||||
import {ElementStorage} from "../Logic/ElementStorage";
 | 
					 | 
				
			||||||
import {UIEventSource} from "../UI/UIEventSource";
 | 
					 | 
				
			||||||
import {FilteredLayer} from "../Logic/FilteredLayer";
 | 
					 | 
				
			||||||
import {Changes} from "../Logic/Changes";
 | 
					 | 
				
			||||||
import {UserDetails} from "../Logic/OsmConnection";
 | 
					 | 
				
			||||||
import {TagRenderingOptions} from "./TagRendering";
 | 
					import {TagRenderingOptions} from "./TagRendering";
 | 
				
			||||||
import {TagDependantUIElementConstructor} from "./UIElementConstructor";
 | 
					import {TagDependantUIElementConstructor} from "./UIElementConstructor";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,7 +55,7 @@ export class LayerDefinition {
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This UIElement is rendered as title element in the popup
 | 
					     * This UIElement is rendered as title element in the popup
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    title: TagRenderingOptions;
 | 
					    title: TagRenderingOptions | UIElement | string;
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * These are the questions/shown attributes in the popup
 | 
					     * These are the questions/shown attributes in the popup
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,86 +1,88 @@
 | 
				
			||||||
import {LayerDefinition} from "../LayerDefinition";
 | 
					import {LayerDefinition} from "../LayerDefinition";
 | 
				
			||||||
import {QuestionDefinition} from "../../Logic/Question";
 | 
					 | 
				
			||||||
import {Tag} from "../../Logic/TagsFilter";
 | 
					import {Tag} from "../../Logic/TagsFilter";
 | 
				
			||||||
import L from "leaflet";
 | 
					import L from "leaflet";
 | 
				
			||||||
 | 
					import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
 | 
				
			||||||
 | 
					import Translations from "../../UI/i18n/Translations";
 | 
				
			||||||
 | 
					import {TagRenderingOptions} from "../TagRendering";
 | 
				
			||||||
 | 
					import Website from "../Questions/Website";
 | 
				
			||||||
 | 
					import FixedText from "../Questions/FixedText";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class Artwork extends LayerDefinition {
 | 
					export class Artwork extends LayerDefinition {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
        super();
 | 
					        super();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.name = "artwork";
 | 
					        this.name = "artwork";
 | 
				
			||||||
        this.newElementTags = [new Tag("tourism", "artwork")];
 | 
					        const t = Translations.t.artwork;
 | 
				
			||||||
        this.icon = "./assets/statue.svg";
 | 
					        this.title = t.title;
 | 
				
			||||||
        this.overpassFilter = new Tag("tourism", "artwork");
 | 
					        const tag = new Tag("tourism", "artwork");
 | 
				
			||||||
        this.minzoom = 13;
 | 
					        this.presets = [
 | 
				
			||||||
        this.questions = [
 | 
					            {
 | 
				
			||||||
            QuestionDefinition.radioAndTextQuestion("What kind of artwork is this?", 10, "artwork_type",
 | 
					                title: this.title,
 | 
				
			||||||
                [
 | 
					                tags: [tag]
 | 
				
			||||||
                    {text: "A statue", value: "statue"},
 | 
					            }
 | 
				
			||||||
                    {text: "A bust (thus a statue, but only of the head and shoulders)", value: "bust"},
 | 
					 | 
				
			||||||
                    {text: "A sculpture", value: "sculpture"},
 | 
					 | 
				
			||||||
                    {text: "A mural painting", value: "mural"},
 | 
					 | 
				
			||||||
                    {text: "A painting", value: "painting"},
 | 
					 | 
				
			||||||
                    {text: "A graffiti", value: "graffiti"},
 | 
					 | 
				
			||||||
                    {text: "A relief", value: "relief"},
 | 
					 | 
				
			||||||
                    {text: "An installation", value: "installation"}]),
 | 
					 | 
				
			||||||
            QuestionDefinition.textQuestion("Whom or what is depicted in this statue?", "subject", 20).addUnrequiredTag("subject:wikidata","*"),
 | 
					 | 
				
			||||||
            QuestionDefinition.textQuestion("Is there an inscription on this artwork?", "inscription", 16),
 | 
					 | 
				
			||||||
            QuestionDefinition.textQuestion("What is the name of this artwork? If there is no explicit name, skip the question", "name", 15),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					        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",
 | 
				
			||||||
 | 
					                template: "$$$",
 | 
				
			||||||
 | 
					                renderTemplate: "{artist}"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.elementsToShow = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            new ImageCarouselWithUploadConstructor(),
 | 
				
			||||||
 | 
					            artworkType,
 | 
				
			||||||
 | 
					            artistQuestion,
 | 
				
			||||||
 | 
					            new Website(t.title)
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.style = function (tags) {
 | 
					        this.style = function (tags) {
 | 
				
			||||||
            return {
 | 
					            return {
 | 
				
			||||||
                icon: new L.icon({
 | 
					                icon: {
 | 
				
			||||||
                    iconUrl: "assets/statue.svg",
 | 
					                    iconUrl: "./assets/statue.svg",
 | 
				
			||||||
                    iconSize: [40, 40],
 | 
					                    iconSize: [40, 40],
 | 
				
			||||||
                    text: "hi"
 | 
					                    text: "hi"
 | 
				
			||||||
                }),
 | 
					                },
 | 
				
			||||||
                color: "#0000ff"
 | 
					                color: "#0000ff"
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.elementsToShow = [
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            new TagMappingOptions(
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    key: "name",
 | 
					 | 
				
			||||||
                    template: "<h2>Artwork '{name}'</h2>",
 | 
					 | 
				
			||||||
                    missing: "Artwork"
 | 
					 | 
				
			||||||
                }),
 | 
					 | 
				
			||||||
            new TagMappingOptions({
 | 
					 | 
				
			||||||
                key: "artwork_type",
 | 
					 | 
				
			||||||
                template: "This artwork is a {artwork_type}"
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            new TagMappingOptions({
 | 
					 | 
				
			||||||
                key: "artist_name",
 | 
					 | 
				
			||||||
                template: "This artwork was made by {artist_name}"
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            new TagMappingOptions({
 | 
					 | 
				
			||||||
                key: "subject",
 | 
					 | 
				
			||||||
                template: "This artwork depicts {subject}"
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            new TagMappingOptions({
 | 
					 | 
				
			||||||
                key: "subject:wikidata",
 | 
					 | 
				
			||||||
                template: "<a href='https://www.wikidata.org/wiki/{subject:wikidata}' target='_blank'>See more data about the subject</a>"
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            new TagMappingOptions({
 | 
					 | 
				
			||||||
                key: "website",
 | 
					 | 
				
			||||||
                template: "<a href='{website}' target='_blank'>Website of the statue</a>"
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            new TagMappingOptions({key: "image", template: "<img class='popupImg' alt='image' src='{image}' />"})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										43
									
								
								Customizations/Layers/ClimbingTree.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								Customizations/Layers/ClimbingTree.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					import {LayerDefinition} from "../LayerDefinition";
 | 
				
			||||||
 | 
					import Translations from "../../UI/i18n/Translations";
 | 
				
			||||||
 | 
					import FixedText from "../Questions/FixedText";
 | 
				
			||||||
 | 
					import {And, Tag} from "../../Logic/TagsFilter";
 | 
				
			||||||
 | 
					import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class ClimbingTree extends LayerDefinition {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        super();
 | 
				
			||||||
 | 
					        const t = Translations.t.climbingTrees.layer;
 | 
				
			||||||
 | 
					        this.title = new FixedText(t.title);
 | 
				
			||||||
 | 
					        const icon = "assets/walkbybrussels/tree.svg";
 | 
				
			||||||
 | 
					        this.icon = icon;
 | 
				
			||||||
 | 
					        this.description = t.description;
 | 
				
			||||||
 | 
					        this.style = (tags) => {
 | 
				
			||||||
 | 
					            return {
 | 
				
			||||||
 | 
					                color: "#00aa00",
 | 
				
			||||||
 | 
					                icon: {
 | 
				
			||||||
 | 
					                    iconUrl: icon,
 | 
				
			||||||
 | 
					                    iconSize: [50, 50]
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        const tags = [new Tag("natural","tree"),new Tag("sport","climbing")];
 | 
				
			||||||
 | 
					        this.overpassFilter = new And(tags);
 | 
				
			||||||
 | 
					        this.presets = [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                title: t.title,
 | 
				
			||||||
 | 
					                description: t.description,
 | 
				
			||||||
 | 
					                tags: tags
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        this.minzoom = 12;
 | 
				
			||||||
 | 
					        this.elementsToShow = [
 | 
				
			||||||
 | 
					            new ImageCarouselWithUploadConstructor()
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -5,8 +5,8 @@ import Translation from "../UI/i18n/Translation";
 | 
				
			||||||
import Translations from "../UI/i18n/Translations";
 | 
					import Translations from "../UI/i18n/Translations";
 | 
				
			||||||
import Locale from "../UI/i18n/Locale";
 | 
					import Locale from "../UI/i18n/Locale";
 | 
				
			||||||
import {VariableUiElement} from "../UI/Base/VariableUIElement";
 | 
					import {VariableUiElement} from "../UI/Base/VariableUIElement";
 | 
				
			||||||
import {OsmConnection, UserDetails} from "../Logic/OsmConnection";
 | 
					 | 
				
			||||||
import {UIEventSource} from "../UI/UIEventSource";
 | 
					import {UIEventSource} from "../UI/UIEventSource";
 | 
				
			||||||
 | 
					import {OsmConnection, UserDetails} from "../Logic/Osm/OsmConnection";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A layout is a collection of settings of the global view (thus: welcome text, title, selection of layers).
 | 
					 * A layout is a collection of settings of the global view (thus: welcome text, title, selection of layers).
 | 
				
			||||||
| 
						 | 
					@ -114,10 +114,12 @@ export class WelcomeMessage extends UIElement {
 | 
				
			||||||
        let loginStatus = "";
 | 
					        let loginStatus = "";
 | 
				
			||||||
        if (this.userDetails !== undefined) {
 | 
					        if (this.userDetails !== undefined) {
 | 
				
			||||||
            loginStatus = (this.userDetails.data.loggedIn ? this.welcomeBack : this.plzLogIn).Render();
 | 
					            loginStatus = (this.userDetails.data.loggedIn ? this.welcomeBack : this.plzLogIn).Render();
 | 
				
			||||||
 | 
					            loginStatus = loginStatus + "<br/>"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return "<span>" +
 | 
					        return "<span>" +
 | 
				
			||||||
            this.description.Render() +
 | 
					            this.description.Render() +
 | 
				
			||||||
 | 
					            "<br/>" +
 | 
				
			||||||
            loginStatus +
 | 
					            loginStatus +
 | 
				
			||||||
            this.tail.Render() +
 | 
					            this.tail.Render() +
 | 
				
			||||||
            "<br/>" +
 | 
					            "<br/>" +
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										17
									
								
								Customizations/Layouts/Artworks.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Customizations/Layouts/Artworks.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					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"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								Customizations/Layouts/ClimbingTrees.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Customizations/Layouts/ClimbingTrees.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					import {LayerDefinition} from "../LayerDefinition";
 | 
				
			||||||
 | 
					import Translations from "../../UI/i18n/Translations";
 | 
				
			||||||
 | 
					import {Layout} from "../Layout";
 | 
				
			||||||
 | 
					import {ClimbingTree} from "../Layers/ClimbingTree";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class ClimbingTrees extends Layout {
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        super(
 | 
				
			||||||
 | 
					            "climbing_trees",
 | 
				
			||||||
 | 
					            ["nl"],
 | 
				
			||||||
 | 
					            Translations.t.climbingTrees.layout.title,
 | 
				
			||||||
 | 
					            [new ClimbingTree()],
 | 
				
			||||||
 | 
					            12,
 | 
				
			||||||
 | 
					            50.8435,
 | 
				
			||||||
 | 
					            4.3688,
 | 
				
			||||||
 | 
					            Translations.t.climbingTrees.layout.welcome
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        this.icon = "./assets/walkbybrussels/tree.svg"
 | 
				
			||||||
 | 
					        this.hideFromOverview = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,27 +0,0 @@
 | 
				
			||||||
import {Layout} from "../Layout";
 | 
					 | 
				
			||||||
import {Artwork} from "../Layers/Artwork";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export class Statues extends Layout{
 | 
					 | 
				
			||||||
    constructor() {
 | 
					 | 
				
			||||||
        super(    "statues",
 | 
					 | 
				
			||||||
            ["en"],
 | 
					 | 
				
			||||||
            "Open Artwork Map",
 | 
					 | 
				
			||||||
            [new Artwork()],
 | 
					 | 
				
			||||||
            10,
 | 
					 | 
				
			||||||
            50.8435,
 | 
					 | 
				
			||||||
            4.3688,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            "        <h3>Open Statue Map</h3>\n" +
 | 
					 | 
				
			||||||
            "\n" +
 | 
					 | 
				
			||||||
            "<p>" +
 | 
					 | 
				
			||||||
            "Help with creating a map of all statues all over the world!"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ,
 | 
					 | 
				
			||||||
            "  <p>Start by <a href=\"https://www.openstreetmap.org/user/new\" target=\"_blank\">creating an account\n" +
 | 
					 | 
				
			||||||
            "            </a> or by " +
 | 
					 | 
				
			||||||
            "            <span onclick=\"authOsm()\" class=\"activate-osm-authentication\">logging in</span>.</p>",
 | 
					 | 
				
			||||||
            "Start by clicking a pin and answering the questions");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ export default class Website extends TagRenderingOptions {
 | 
				
			||||||
            question: Translations.t.general.questions.websiteOf.Subs({category: category}),
 | 
					            question: Translations.t.general.questions.websiteOf.Subs({category: category}),
 | 
				
			||||||
            freeform: {
 | 
					            freeform: {
 | 
				
			||||||
                renderTemplate: Translations.t.general.questions.websiteIs,
 | 
					                renderTemplate: Translations.t.general.questions.websiteIs,
 | 
				
			||||||
                template: "website",
 | 
					                template: "$$$",
 | 
				
			||||||
                key: "website"
 | 
					                key: "website"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,11 +3,11 @@ import {UIEventSource} from "../UI/UIEventSource";
 | 
				
			||||||
import {And, Tag, TagsFilter, TagUtils} from "../Logic/TagsFilter";
 | 
					import {And, Tag, TagsFilter, TagUtils} from "../Logic/TagsFilter";
 | 
				
			||||||
import {FixedUiElement} from "../UI/Base/FixedUiElement";
 | 
					import {FixedUiElement} from "../UI/Base/FixedUiElement";
 | 
				
			||||||
import {SaveButton} from "../UI/SaveButton";
 | 
					import {SaveButton} from "../UI/SaveButton";
 | 
				
			||||||
import {Changes} from "../Logic/Changes";
 | 
					import {Changes} from "../Logic/Osm/Changes";
 | 
				
			||||||
import {VariableUiElement} from "../UI/Base/VariableUIElement";
 | 
					import {VariableUiElement} from "../UI/Base/VariableUIElement";
 | 
				
			||||||
import {TagDependantUIElement, TagDependantUIElementConstructor} from "./UIElementConstructor";
 | 
					import {TagDependantUIElement, TagDependantUIElementConstructor} from "./UIElementConstructor";
 | 
				
			||||||
import {OnlyShowIfConstructor} from "./OnlyShowIf";
 | 
					import {OnlyShowIfConstructor} from "./OnlyShowIf";
 | 
				
			||||||
import {UserDetails} from "../Logic/OsmConnection";
 | 
					import {UserDetails} from "../Logic/Osm/OsmConnection";
 | 
				
			||||||
import {TextField} from "../UI/Input/TextField";
 | 
					import {TextField} from "../UI/Input/TextField";
 | 
				
			||||||
import {InputElement} from "../UI/Input/InputElement";
 | 
					import {InputElement} from "../UI/Input/InputElement";
 | 
				
			||||||
import {InputElementWrapper} from "../UI/Input/InputElementWrapper";
 | 
					import {InputElementWrapper} from "../UI/Input/InputElementWrapper";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,14 +1,15 @@
 | 
				
			||||||
import {Basemap} from "./Basemap";
 | 
					 | 
				
			||||||
import {TagsFilter, TagUtils} from "./TagsFilter";
 | 
					import {TagsFilter, TagUtils} from "./TagsFilter";
 | 
				
			||||||
import {UIEventSource} from "../UI/UIEventSource";
 | 
					import {UIEventSource} from "../UI/UIEventSource";
 | 
				
			||||||
import {ElementStorage} from "./ElementStorage";
 | 
					import {ElementStorage} from "./ElementStorage";
 | 
				
			||||||
import {Changes} from "./Changes";
 | 
					 | 
				
			||||||
import L from "leaflet"
 | 
					import L from "leaflet"
 | 
				
			||||||
import {GeoOperations} from "./GeoOperations";
 | 
					import {GeoOperations} from "./GeoOperations";
 | 
				
			||||||
import {UIElement} from "../UI/UIElement";
 | 
					import {UIElement} from "../UI/UIElement";
 | 
				
			||||||
import {LayerDefinition} from "../Customizations/LayerDefinition";
 | 
					import {LayerDefinition} from "../Customizations/LayerDefinition";
 | 
				
			||||||
import {UserDetails} from "./OsmConnection";
 | 
					 | 
				
			||||||
import codegrid from "codegrid-js";
 | 
					import codegrid from "codegrid-js";
 | 
				
			||||||
 | 
					import {Changes} from "./Osm/Changes";
 | 
				
			||||||
 | 
					import {UserDetails} from "./Osm/OsmConnection";
 | 
				
			||||||
 | 
					import {Basemap} from "./Leaflet/Basemap";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/***
 | 
					/***
 | 
				
			||||||
 * A filtered layer is a layer which offers a 'set-data' function
 | 
					 * A filtered layer is a layer which offers a 'set-data' function
 | 
				
			||||||
 * It is initialized with a tagfilter.
 | 
					 * It is initialized with a tagfilter.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +0,0 @@
 | 
				
			||||||
import {Bounds} from "../Bounds";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export class Notes {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    queryGeoJson(bounds: Bounds, continuation: ((any) => void), onFail: ((reason) => void)): void {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
import {UIElement} from "./UIElement";
 | 
					import {UIElement} from "./UIElement";
 | 
				
			||||||
import {UIEventSource} from "./UIEventSource";
 | 
					import {UIEventSource} from "./UIEventSource";
 | 
				
			||||||
import {OsmConnection} from "../Logic/OsmConnection";
 | 
					import {OsmConnection} from "../Logic/Osm/OsmConnection";
 | 
				
			||||||
import Translations from "./i18n/Translations";
 | 
					import Translations from "./i18n/Translations";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class CenterMessageBox extends UIElement {
 | 
					export class CenterMessageBox extends UIElement {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ import {TagDependantUIElement, TagDependantUIElementConstructor} from "../Custom
 | 
				
			||||||
import Translations from "./i18n/Translations";
 | 
					import Translations from "./i18n/Translations";
 | 
				
			||||||
import {Changes} from "../Logic/Osm/Changes";
 | 
					import {Changes} from "../Logic/Osm/Changes";
 | 
				
			||||||
import {UserDetails} from "../Logic/Osm/OsmConnection";
 | 
					import {UserDetails} from "../Logic/Osm/OsmConnection";
 | 
				
			||||||
 | 
					import {FixedUiElement} from "./Base/FixedUiElement";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class FeatureInfoBox extends UIElement {
 | 
					export class FeatureInfoBox extends UIElement {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +39,7 @@ export class FeatureInfoBox extends UIElement {
 | 
				
			||||||
    constructor(
 | 
					    constructor(
 | 
				
			||||||
        feature: any,
 | 
					        feature: any,
 | 
				
			||||||
        tagsES: UIEventSource<any>,
 | 
					        tagsES: UIEventSource<any>,
 | 
				
			||||||
        title: TagRenderingOptions | UIElement,
 | 
					        title: TagRenderingOptions | UIElement | string,
 | 
				
			||||||
        elementsToShow: TagDependantUIElementConstructor[],
 | 
					        elementsToShow: TagDependantUIElementConstructor[],
 | 
				
			||||||
        changes: Changes,
 | 
					        changes: Changes,
 | 
				
			||||||
        userDetails: UIEventSource<UserDetails>
 | 
					        userDetails: UIEventSource<UserDetails>
 | 
				
			||||||
| 
						 | 
					@ -78,8 +79,9 @@ export class FeatureInfoBox extends UIElement {
 | 
				
			||||||
                mappings: [{k: new And([]), txt: ""}]
 | 
					                mappings: [{k: new And([]), txt: ""}]
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        if (typeof (title) == "string") {
 | 
				
			||||||
        if (title instanceof UIElement) {
 | 
					            this._title = new FixedUiElement(title);
 | 
				
			||||||
 | 
					        } else if (title instanceof UIElement) {
 | 
				
			||||||
            this._title = title;
 | 
					            this._title = title;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            this._title = new TagRenderingOptions(title.options).construct(deps);
 | 
					            this._title = new TagRenderingOptions(title.options).construct(deps);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ import {UIElement} from "./UIElement";
 | 
				
			||||||
import {UIEventSource} from "./UIEventSource";
 | 
					import {UIEventSource} from "./UIEventSource";
 | 
				
			||||||
import $ from "jquery"
 | 
					import $ from "jquery"
 | 
				
			||||||
import {Imgur} from "../Logic/Imgur";
 | 
					import {Imgur} from "../Logic/Imgur";
 | 
				
			||||||
import {UserDetails} from "../Logic/OsmConnection";
 | 
					import {UserDetails} from "../Logic/Osm/OsmConnection";
 | 
				
			||||||
import {DropDown} from "./Input/DropDown";
 | 
					import {DropDown} from "./Input/DropDown";
 | 
				
			||||||
import {VariableUiElement} from "./Base/VariableUIElement";
 | 
					import {VariableUiElement} from "./Base/VariableUIElement";
 | 
				
			||||||
import Translations from "./i18n/Translations";
 | 
					import Translations from "./i18n/Translations";
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -571,6 +571,55 @@ export default class Translations {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        climbingTrees: {
 | 
				
			||||||
 | 
					            layer: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                title: new T({
 | 
				
			||||||
 | 
					                    nl: "Klimbomen"
 | 
				
			||||||
 | 
					                }),
 | 
				
			||||||
 | 
					                description: new T({
 | 
				
			||||||
 | 
					                    nl: "Een klimboom is een mooie boom waar men in kan klimmen, al dan niet officieel"
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            layout: {
 | 
				
			||||||
 | 
					                title: new T({nl: "Open Klimbomenkaart"}),
 | 
				
			||||||
 | 
					                welcome: new T({nl: "Markeer je favoriete klimboom"})
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        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?"})
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        image: {
 | 
					        image: {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								index.css
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								index.css
									
										
									
									
									
								
							| 
						 | 
					@ -1144,20 +1144,27 @@ form {
 | 
				
			||||||
.tab-single-header {
 | 
					.tab-single-header {
 | 
				
			||||||
    border-top-left-radius: 1em;
 | 
					    border-top-left-radius: 1em;
 | 
				
			||||||
    border-top-right-radius: 1em;
 | 
					    border-top-right-radius: 1em;
 | 
				
			||||||
    box-shadow: 0 0 10px black;
 | 
					 | 
				
			||||||
    z-index: 5000;
 | 
					    z-index: 5000;
 | 
				
			||||||
    border-bottom: 1px solid white;
 | 
					    padding-bottom: 0;
 | 
				
			||||||
    padding-bottom: 1px;
 | 
					    margin-bottom: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tab-active {
 | 
					.tab-active {
 | 
				
			||||||
    background-color: white;
 | 
					    background-color: white;
 | 
				
			||||||
    z-index: 5001;
 | 
					    z-index: 5001;
 | 
				
			||||||
 | 
					    box-shadow: 0 0 10px black;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid white;
 | 
				
			||||||
 | 
					    border-left: 1px solid black;
 | 
				
			||||||
 | 
					    border-right:1px solid black;
 | 
				
			||||||
 | 
					    border-top: 1px solid black;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tab-non-active {
 | 
					.tab-non-active {
 | 
				
			||||||
    background-color: #e5f5ff;
 | 
					    background-color: #e5f5ff;
 | 
				
			||||||
    opacity: 0.5;
 | 
					    opacity: 0.5;
 | 
				
			||||||
 | 
					    border-left: 1px solid gray;
 | 
				
			||||||
 | 
					    border-right:1px solid gray;
 | 
				
			||||||
 | 
					    border-top:  1px solid gray;
 | 
				
			||||||
    border-bottom: 1px solid lightgray;
 | 
					    border-bottom: 1px solid lightgray;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								index.ts
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								index.ts
									
										
									
									
									
								
							| 
						 | 
					@ -109,7 +109,7 @@ const lon = QueryParameters.GetQueryParameter("lon", undefined)
 | 
				
			||||||
    .syncWith(LocalStorageSource.Get("lon"));
 | 
					    .syncWith(LocalStorageSource.Get("lon"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function featSw(key: string, deflt: boolean): UIEventSource<boolean> {
 | 
					function featSw(key: string, deflt: boolean): UIEventSource<boolean> {
 | 
				
			||||||
    return QueryParameters.GetQueryParameter("fs-userbadge", "" + deflt).map((str) => {
 | 
					    return QueryParameters.GetQueryParameter(key, "" + deflt).map((str) => {
 | 
				
			||||||
        return str !== "false";
 | 
					        return str !== "false";
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue