import {LayerDefinition} from "../LayerDefinition"; import {And, Or, Tag} from "../../Logic/Tags"; import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload"; import {TagRenderingOptions} from "../TagRenderingOptions"; export class Birdhide extends LayerDefinition { private static readonly birdhide = new Tag("leisure", "bird_hide"); constructor() { super("birdhide",{ name: "vogelkijkplaats", description: "Een plaats om vogels te kijken, zoals een vogelkijkhut of kijkwand", overpassFilter: Birdhide.birdhide, elementsToShow: [], icon: "assets/nature/birdhide.svg", minzoom: 12, wayHandling: LayerDefinition.WAYHANDLING_CENTER_AND_WAY, presets: [ { title: "Vogelkijkplaats", tags: [Birdhide.birdhide] } ], style(): { color: string; icon: any } { return {color: "", icon: undefined}; }, }); function rmStart(toRemove: string, title: string): string { if (title.toLowerCase().indexOf(toRemove.toLowerCase()) == 0) { return title.substr(toRemove.length).trim(); } return title; } function rmStarts(toRemove: string[], title: string) { for (const toRm of toRemove) { title = rmStart(toRm, title); } return title; } this.title = new TagRenderingOptions({ tagsPreprocessor: (tags) => { if (tags.name) { const nm = rmStarts( ["Vogelkijkhut", "Vogelkijkwand", "Kijkwand", "Kijkhut"], tags.name); tags.name = " '" + nm + "'"; } else { tags.name = ""; } }, mappings: [ { k: new And([new Tag("shelter", "no"), new Tag("building", "")]), txt: "Vogelkijkwand{name}" }, { k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes")]), txt: "Vogelijkhut{name}" }, { k: new Tag("amenity", "shelter"), txt: "Vogelijkhut{name}" }, { k: new Tag("shelter", "yes"), txt: "Vogelijkhut{name}" }, { k: new Tag("amenity", "shelter"), txt: "Vogelijkhut{name}" }, { k: new Tag("building", "yes"), txt: "Vogelijkhut{name}" }, {k: null, txt: "Vogelkijkplaats{name}"} ] }); this.style = (properties) => { let icon = "assets/nature/birdhide.svg"; if (new Or([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]).matchesProperties(properties)) { icon = "assets/nature/birdshelter.svg"; } return { color: "#0000bb", icon: { iconUrl: icon, iconSize: [40,40], iconAnchor: [20,20] } } } this.elementsToShow = [ new ImageCarouselWithUploadConstructor(), new TagRenderingOptions({ question: "Is dit een kijkwand of kijkhut?", mappings: [ { k: new And([new Tag("shelter", "no"), new Tag("building", ""), new Tag("amenity", "")]), txt: "Vogelkijkwand" }, { k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]), txt: "Vogelijkhut" }, { k: new Or([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]), txt: "Vogelijkhut" }, ] }), new TagRenderingOptions({ question: "Is ze rolstoeltoegankelijk?", mappings: [ { k: new Tag("wheelchair", "no"), txt: "Niet rolstoeltoegankelijk" }, { k: new Tag("wheelchair", "limited"), txt: "Een rolstoel raakt er, maar het is niet makkelijk" }, { k: new Tag("wheelchair", "yes"), txt: "Een rolstoel raakt er gemakkelijk" } ] }), new TagRenderingOptions({ question: "Wie beheert deze?", freeform: { key: "operator", template: "Beheer door $$$", renderTemplate: "Beheer door {operator}", placeholder: "organisatie" }, mappings: [ {k: new Tag("operator", "Natuurpunt"), txt: "Natuurpunt"}, {k: new Tag("operator", "Agentschap Natuur en Bos"), txt: "het Agentschap Natuur en Bos (ANB)"}, ] }) ]; } }