Change in tagfilters
This commit is contained in:
parent
c1c11ed906
commit
19acba61d2
3 changed files with 49 additions and 18 deletions
|
@ -1,5 +1,5 @@
|
||||||
import {LayerDefinition} from "../LayerDefinition";
|
import {LayerDefinition} from "../LayerDefinition";
|
||||||
import {And, Tag} from "../../Logic/TagsFilter";
|
import {And, Tag, TagsFilter} from "../../Logic/TagsFilter";
|
||||||
import * as L from "leaflet";
|
import * as L from "leaflet";
|
||||||
import BikeStationChain from "../Questions/BikeStationChain";
|
import BikeStationChain from "../Questions/BikeStationChain";
|
||||||
import BikeStationPumpTools from "../Questions/BikeStationPumpTools";
|
import BikeStationPumpTools from "../Questions/BikeStationPumpTools";
|
||||||
|
@ -10,8 +10,14 @@ import BikeStationBrand from "../Questions/BikeStationBrand";
|
||||||
import FixedText from "../Questions/FixedText";
|
import FixedText from "../Questions/FixedText";
|
||||||
import {BikePumpManometer} from "../Questions/BikePumpManometer";
|
import {BikePumpManometer} from "../Questions/BikePumpManometer";
|
||||||
import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
|
import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
|
||||||
|
import {BikePumpOperationalStatus} from "../Questions/BikePumpOperationalStatus";
|
||||||
|
|
||||||
export default class BikeServices extends LayerDefinition {
|
export default class BikeServices extends LayerDefinition {
|
||||||
|
|
||||||
|
|
||||||
|
private readonly pump: TagsFilter = new Tag("service:bicycle:pump", "yes");
|
||||||
|
private readonly tools: TagsFilter = new Tag("service:bicycle:tools", "yes");
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.name = "bike station or pump";
|
this.name = "bike station or pump";
|
||||||
|
@ -31,7 +37,6 @@ export default class BikeServices extends LayerDefinition {
|
||||||
this.style = this.generateStyleFunction();
|
this.style = this.generateStyleFunction();
|
||||||
this.title = new FixedText("Bike station");
|
this.title = new FixedText("Bike station");
|
||||||
|
|
||||||
const pump = new Tag("service:bicycle:pump", "yes");
|
|
||||||
|
|
||||||
this.elementsToShow = [
|
this.elementsToShow = [
|
||||||
|
|
||||||
|
@ -39,11 +44,12 @@ export default class BikeServices extends LayerDefinition {
|
||||||
|
|
||||||
|
|
||||||
new BikeStationPumpTools(),
|
new BikeStationPumpTools(),
|
||||||
new BikeStationChain().OnlyShowIf(new Tag("service:bicycle:tools", "yes")),
|
new BikeStationChain().OnlyShowIf(this.tools),
|
||||||
new BikeStationStand().OnlyShowIf(new Tag("service:bicycle:tools", "yes")),
|
new BikeStationStand().OnlyShowIf(this.tools),
|
||||||
|
|
||||||
new PumpManual().OnlyShowIf(pump),
|
new PumpManual().OnlyShowIf(this.pump),
|
||||||
new BikePumpManometer().OnlyShowIf(pump),
|
new BikePumpManometer().OnlyShowIf(this.pump),
|
||||||
|
new BikePumpOperationalStatus().OnlyShowIf(this.pump),
|
||||||
|
|
||||||
new BikeStationOperator(),
|
new BikeStationOperator(),
|
||||||
new BikeStationBrand()
|
new BikeStationBrand()
|
||||||
|
@ -54,7 +60,8 @@ export default class BikeServices extends LayerDefinition {
|
||||||
private generateStyleFunction() {
|
private generateStyleFunction() {
|
||||||
const self = this;
|
const self = this;
|
||||||
return function (properties: any) {
|
return function (properties: any) {
|
||||||
const onlyPump = properties["service:bicycle:tools"] == "no" && properties["service:bicycle:pump"] == "yes";
|
const onlyPump = self.pump.matchesProperties(properties) &&
|
||||||
|
!self.tools.matchesProperties(properties)
|
||||||
const iconUrl = onlyPump ? "./assets/pump.svg" : "./assets/wrench.svg"
|
const iconUrl = onlyPump ? "./assets/pump.svg" : "./assets/wrench.svg"
|
||||||
return {
|
return {
|
||||||
color: "#00bb00",
|
color: "#00bb00",
|
||||||
|
|
15
Customizations/Questions/BikePumpOperationalStatus.ts
Normal file
15
Customizations/Questions/BikePumpOperationalStatus.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import {TagDependantUIElement} from "../UIElementConstructor";
|
||||||
|
import {TagRenderingOptions} from "../TagRendering";
|
||||||
|
import {Tag} from "../../Logic/TagsFilter";
|
||||||
|
|
||||||
|
export class BikePumpOperationalStatus extends TagRenderingOptions{
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
question: "Is the bicycle pump still operational?",
|
||||||
|
mappings: [
|
||||||
|
{k: new Tag("service:bicycle:pump:operational_status","broken"), txt: "This pump is broken"},
|
||||||
|
{k: new Tag("service:bicycle:pump:operational_status",""), txt: "This pump is operational"}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,21 @@
|
||||||
export class Regex implements TagsFilter {
|
|
||||||
|
export abstract class TagsFilter {
|
||||||
|
abstract matches(tags: { k: string, v: string }[]): boolean
|
||||||
|
abstract asOverpass(): string[]
|
||||||
|
abstract substituteValues(tags: any) : TagsFilter;
|
||||||
|
|
||||||
|
matchesProperties(properties: any) : boolean{
|
||||||
|
return this.matches(TagUtils.proprtiesToKV(properties));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export class Regex extends TagsFilter {
|
||||||
private _k: string;
|
private _k: string;
|
||||||
private _r: string;
|
private _r: string;
|
||||||
|
|
||||||
constructor(k: string, r: string) {
|
constructor(k: string, r: string) {
|
||||||
|
super();
|
||||||
this._k = k;
|
this._k = k;
|
||||||
this._r = r;
|
this._r = r;
|
||||||
}
|
}
|
||||||
|
@ -37,11 +50,12 @@ export class Regex implements TagsFilter {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Tag implements TagsFilter {
|
export class Tag extends TagsFilter {
|
||||||
public key: string;
|
public key: string;
|
||||||
public value: string;
|
public value: string;
|
||||||
|
|
||||||
constructor(key: string, value: string) {
|
constructor(key: string, value: string) {
|
||||||
|
super()
|
||||||
this.key = key;
|
this.key = key;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
@ -85,11 +99,12 @@ export class Tag implements TagsFilter {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Or implements TagsFilter {
|
export class Or extends TagsFilter {
|
||||||
|
|
||||||
public or: TagsFilter[]
|
public or: TagsFilter[]
|
||||||
|
|
||||||
constructor(or: TagsFilter[]) {
|
constructor(or: TagsFilter[]) {
|
||||||
|
super();
|
||||||
this.or = or;
|
this.or = or;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,11 +142,12 @@ export class Or implements TagsFilter {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class And implements TagsFilter {
|
export class And extends TagsFilter {
|
||||||
|
|
||||||
public and: TagsFilter[]
|
public and: TagsFilter[]
|
||||||
|
|
||||||
constructor(and: TagsFilter[]) {
|
constructor(and: TagsFilter[]) {
|
||||||
|
super();
|
||||||
this.and = and;
|
this.and = and;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,13 +201,6 @@ export class And implements TagsFilter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TagsFilter {
|
|
||||||
matches(tags: { k: string, v: string }[]): boolean
|
|
||||||
|
|
||||||
asOverpass(): string[]
|
|
||||||
|
|
||||||
substituteValues(tags: any) : TagsFilter;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class TagUtils {
|
export class TagUtils {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue