forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			183 lines
		
	
	
		
			No EOL
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			No EOL
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {LayerDefinition} from "../LayerDefinition";
 | 
						|
import {And, Or, Tag} from "../../Logic/TagsFilter";
 | 
						|
import {NameInline} from "../Questions/NameInline";
 | 
						|
import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
 | 
						|
import Translations from "../../UI/i18n/Translations";
 | 
						|
import T from "../../UI/i18n/Translation";
 | 
						|
import {TagRenderingOptions} from "../TagRenderingOptions";
 | 
						|
 | 
						|
export class Bookcases extends LayerDefinition {
 | 
						|
 | 
						|
    constructor() {
 | 
						|
        super("bookcases");
 | 
						|
 | 
						|
        this.name = "boekenkast";
 | 
						|
        this.presets = [{
 | 
						|
            tags: [new Tag("amenity", "public_bookcase")],
 | 
						|
            description: "Add a new bookcase here",
 | 
						|
            title: Translations.t.bookcases.bookcase,
 | 
						|
        }];
 | 
						|
        this.icon = "./assets/bookcase.svg";
 | 
						|
        this.overpassFilter = new Tag("amenity", "public_bookcase");
 | 
						|
        this.minzoom = 11;
 | 
						|
 | 
						|
        const Tr = Translations.t;
 | 
						|
        const Trq = Tr.bookcases.questions;
 | 
						|
        this.title = new NameInline(Translations.t.bookcases.bookcase);
 | 
						|
        this.elementsToShow = [
 | 
						|
            new ImageCarouselWithUploadConstructor(),
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: Trq.hasName,
 | 
						|
                freeform: {
 | 
						|
                    key: "name",
 | 
						|
                    template: "$$$",
 | 
						|
                    renderTemplate: "", // We don't actually render it, only ask
 | 
						|
                    placeholder: "",
 | 
						|
                    extraTags: new Tag("noname", "")
 | 
						|
                },
 | 
						|
                mappings: [
 | 
						|
                    {k: new Tag("noname", "yes"), txt: Trq.noname},
 | 
						|
                ]
 | 
						|
            }),
 | 
						|
            
 | 
						|
            new TagRenderingOptions(
 | 
						|
                {
 | 
						|
                    question: Trq.capacity,
 | 
						|
                    freeform: {
 | 
						|
                        renderTemplate: Trq.capacityRender,
 | 
						|
                        template: Trq.capacityInput,
 | 
						|
                        key: "capacity",
 | 
						|
                        placeholder: "aantal"
 | 
						|
                    },
 | 
						|
                }
 | 
						|
            ),
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: Trq.bookkinds,
 | 
						|
                mappings: [
 | 
						|
                    {k: new Tag("books", "children"), txt: "Voornamelijk kinderboeken"},
 | 
						|
                    {k: new Tag("books", "adults"), txt: "Voornamelijk boeken voor volwassenen"},
 | 
						|
                    {k: new Tag("books", "children;adults"), txt: "Zowel kinderboeken als boeken voor volwassenen"}
 | 
						|
                ],
 | 
						|
            }),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Staat dit boekenruilkastje binnen of buiten?",
 | 
						|
                mappings: [
 | 
						|
                    {k: new Tag("indoor", "yes"), txt: "Dit boekenruilkastje staat binnen"},
 | 
						|
                    {k: new Tag("indoor", "no"), txt: "Dit boekenruilkastje staat buiten"},
 | 
						|
                    {k: new Tag("indoor", ""), txt: "Dit boekenruilkastje staat buiten"}
 | 
						|
                ]
 | 
						|
            }),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Is dit boekenruilkastje vrij toegankelijk?",
 | 
						|
                mappings: [
 | 
						|
                    {k: new Tag("access", "yes"), txt: "Ja, vrij toegankelijk"},
 | 
						|
                    {k: new Tag("access", "customers"), txt: "Enkel voor klanten"},
 | 
						|
                ]
 | 
						|
            }).OnlyShowIf(new Tag("indoor", "yes")),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Wie (welke organisatie) beheert dit boekenruilkastje?",
 | 
						|
                freeform: {
 | 
						|
                    key: "operator",
 | 
						|
                    renderTemplate: "Dit boekenruilkastje wordt beheerd door {operator}",
 | 
						|
                    template: "Dit boekenruilkastje wordt beheerd door $$$"
 | 
						|
                }
 | 
						|
            }),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Zijn er openingsuren voor dit boekenruilkastje?",
 | 
						|
                mappings: [
 | 
						|
                    {k: new Tag("opening_hours", "24/7"), txt: "Dag en nacht toegankelijk"},
 | 
						|
                    {k: new Tag("opening_hours", ""), txt: "Dag en nacht toegankelijk"},
 | 
						|
                    {k: new Tag("opening_hours", "sunrise-sunset"), txt: "Van zonsopgang tot zonsondergang"},
 | 
						|
                ],
 | 
						|
                freeform: {
 | 
						|
                    key: "opening_hours",
 | 
						|
                    renderTemplate: "De openingsuren zijn {opening_hours}",
 | 
						|
                    template: "De openingsuren zijn $$$"
 | 
						|
                }
 | 
						|
            }), 
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Is dit boekenruilkastje deel van een netwerk?",
 | 
						|
                freeform: {
 | 
						|
                    key: "brand",
 | 
						|
                    renderTemplate: "Deel van het netwerk {brand}",
 | 
						|
                    template: "Deel van het netwerk $$$"
 | 
						|
                },
 | 
						|
                mappings: [{
 | 
						|
                    k: new And([new Tag("brand", "Little Free Library"), new Tag("nobrand", "")]),
 | 
						|
                    txt: "Little Free Library"
 | 
						|
                },
 | 
						|
                    {
 | 
						|
                        k: new And([new Tag("brand", ""), new Tag("nobrand", "yes")]),
 | 
						|
                        txt: "Maakt geen deel uit van een groter netwerk"
 | 
						|
                    }]
 | 
						|
            }).OnlyShowIf(new Or([
 | 
						|
                new Tag("ref", ""),
 | 
						|
                new And([new Tag("ref","*"), new Tag("brand","")])
 | 
						|
            ])),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Wat is het referentienummer van dit boekenruilkastje?",
 | 
						|
                freeform: {
 | 
						|
                    key: "ref",
 | 
						|
                    template: "Het referentienummer is $$$",
 | 
						|
                    renderTemplate: "Gekend als {brand} <b>{ref}</b>"
 | 
						|
                },
 | 
						|
                mappings: [
 | 
						|
                    {k: new And([new  Tag("brand",""), new Tag("nobrand","yes"), new Tag("ref", "")]),
 | 
						|
                        txt: "Maakt geen deel uit van een netwerk"}
 | 
						|
                ]
 | 
						|
            }).OnlyShowIf(new Tag("brand","*")),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Wanneer werd dit boekenruilkastje geinstalleerd?",
 | 
						|
                priority: -1,
 | 
						|
                freeform: {
 | 
						|
                    key: "start_date",
 | 
						|
                    renderTemplate: "Geplaatst op {start_date}",
 | 
						|
                    template: "Geplaatst op $$$"
 | 
						|
                }
 | 
						|
            }),
 | 
						|
 | 
						|
            new TagRenderingOptions({
 | 
						|
                question: "Is er een website waar we er meer informatie is over dit boekenruilkastje?",
 | 
						|
                freeform: {
 | 
						|
                    key: "website",
 | 
						|
                    renderTemplate: "<a href='{website}' target='_blank'>Meer informatie over dit boekenruilkastje</a>",
 | 
						|
                    template: "$$$",
 | 
						|
                    placeholder: "website"
 | 
						|
                }
 | 
						|
            }),
 | 
						|
            new TagRenderingOptions({
 | 
						|
                freeform: {
 | 
						|
                    key: "description",
 | 
						|
                    renderTemplate: "<b>Beschrijving door de uitbater:</b><br>{description}",
 | 
						|
                    template: "$$$",
 | 
						|
                }
 | 
						|
            })
 | 
						|
 | 
						|
 | 
						|
        ];
 | 
						|
 | 
						|
 | 
						|
        this.style = function (tags) {
 | 
						|
            return {
 | 
						|
                icon: {
 | 
						|
                    iconUrl: "assets/bookcase.svg",
 | 
						|
                    iconSize: [40, 40],
 | 
						|
                    iconAnchor: [20,20],
 | 
						|
                    popupAnchor: [0, -15]
 | 
						|
                },
 | 
						|
                color: "#0000ff"
 | 
						|
            };
 | 
						|
        }
 | 
						|
 | 
						|
  
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |