From 39402b774e1256c59ba817e46b223fd1c6b03ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Fri, 26 Oct 2018 22:08:13 +0200 Subject: [PATCH] CategoryOverpassFilter: filters may define custom queries --- src/CategoryOverpassFilter.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/CategoryOverpassFilter.js b/src/CategoryOverpassFilter.js index eb395236..72e122d1 100644 --- a/src/CategoryOverpassFilter.js +++ b/src/CategoryOverpassFilter.js @@ -2,6 +2,7 @@ const OverpassLayer = require('overpass-layer') const tabs = require('modulekit-tabs') const state = require('./state') +const Filter = require('overpass-frontend').Filter class CategoryOverpassFilter { constructor (master) { @@ -43,6 +44,11 @@ class CategoryOverpassFilter { if (typeof f.values[k1] === 'string') { let t = OverpassLayer.twig.twig({ data: f.values[k1], autoescape: true }) f.values[k1] = t.render({}).toString() + } else if (typeof f.values[k1] === 'object') { + if (f.values[k1].name) { + let t = OverpassLayer.twig.twig({ data: f.values[k1].name, autoescape: true }) + f.values[k1].name = t.render({}).toString() + } } } } @@ -78,6 +84,8 @@ class CategoryOverpassFilter { applyParam (param) { this.additionalFilter = [] + let kvFilter = [] + for (var k in param) { if (param[k] === null) { continue @@ -85,6 +93,12 @@ class CategoryOverpassFilter { var d = this.data[k] + if ('values' in d && param[k] in d.values && typeof d.values[param[k]] === 'object' && 'query' in d.values[param[k]]) { + let f = new Filter(d.values[param[k]].query) + this.additionalFilter.push(f.def) + continue + } + var v = { key: 'key' in d ? d.key : k, value: param[k], @@ -102,7 +116,19 @@ class CategoryOverpassFilter { } } - this.additionalFilter.push(v) + kvFilter.push(v) + } + + if (kvFilter.length) { + this.additionalFilter.push(kvFilter) + } + + if (this.additionalFilter.length === 0) { + this.additionalFilter = [] + } else if (this.additionalFilter.length === 1) { + this.additionalFilter = this.additionalFilter[0] + } else { + this.additionalFilter = { and: this.additionalFilter } } this.master.layer.options.queryOptions.filter = this.additionalFilter