73 lines
2.4 KiB
TypeScript
73 lines
2.4 KiB
TypeScript
import {LayerDefinition} from "../LayerDefinition";
|
|
import FixedText from "../Questions/FixedText";
|
|
import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
|
|
import Translations from "../../UI/i18n/Translations";
|
|
import CafeName from "../Questions/bike/CafeName";
|
|
import { Or, And, Tag, anyValueExcept, Regex } from "../../Logic/TagsFilter";
|
|
import { PhoneNumberQuestion } from "../Questions/PhoneNumberQuestion";
|
|
import Website from "../Questions/Website";
|
|
import CafeRepair from "../Questions/bike/CafeRepair";
|
|
import CafeDiy from "../Questions/bike/CafeDiy";
|
|
import CafePump from "../Questions/bike/CafePump";
|
|
|
|
|
|
export default class BikeCafes extends LayerDefinition {
|
|
private readonly repairsBikes = anyValueExcept("service:bicycle:repair", "no")
|
|
private readonly hasPump = new Tag("service:bicycle:pump", "yes")
|
|
private readonly diy = new Tag("service:bicycle:diy", "yes")
|
|
private readonly bikeServices = [
|
|
this.diy,
|
|
this.repairsBikes,
|
|
this.hasPump
|
|
]
|
|
private readonly to = Translations.t.cyclofix.cafe
|
|
|
|
constructor() {
|
|
super();
|
|
this.name = this.to.name;
|
|
this.icon = "./assets/bike/cafe.svg";
|
|
this.overpassFilter = new And([
|
|
new Or([
|
|
new Regex("amenity", "^pub|bar|cafe")
|
|
]),
|
|
new Or([
|
|
...this.bikeServices,
|
|
new Tag("pub", "cycling")
|
|
])
|
|
])
|
|
this.newElementTags = [
|
|
new Tag("amenity", "pub"),
|
|
new Tag("pub", "cycling"),
|
|
];
|
|
this.maxAllowedOverlapPercentage = 10;
|
|
|
|
this.minzoom = 13;
|
|
this.style = this.generateStyleFunction();
|
|
this.title = new FixedText(this.to.title)
|
|
this.elementsToShow = [
|
|
new ImageCarouselWithUploadConstructor(),
|
|
new CafeName(),
|
|
new PhoneNumberQuestion("{name}"),
|
|
new Website("{name}"),
|
|
new CafeRepair(),
|
|
new CafeDiy(),
|
|
new CafePump()
|
|
];
|
|
this.wayHandling = LayerDefinition.WAYHANDLING_CENTER_AND_WAY;
|
|
|
|
}
|
|
|
|
private generateStyleFunction() {
|
|
const self = this;
|
|
return function (properties: any) {
|
|
return {
|
|
color: "#00bb00",
|
|
icon: {
|
|
iconUrl: self.icon,
|
|
iconSize: [50, 50],
|
|
iconAnchor: [25,50]
|
|
}
|
|
};
|
|
};
|
|
}
|
|
}
|