Browse Source

Twig: new filters 'natsort' and 'unique'

master
parent
commit
6742f30d9c
  1. 2
      doc/TwigJS.md
  2. 1
      package.json
  3. 11
      src/twigFunctions.js

2
doc/TwigJS.md

@ -65,6 +65,8 @@ Extra filters:
* filter websiteUrl: return a valid http link. Example: `{{ "www.google.com"|websiteUrl }}` -> "http://www.google.com"; `{{ "https://google.com"|websiteUrl }}` -> "https://google.com"
* filter `matches`: regular expression match. e.g. `{{ "test"|matches("e(st)$") }}` returns `[ "est", "st" ]`. Returns null if it does not match.
* filter `osmDateParse`: returns an array with the lower and upper boundary of the year of a `start_date` tag. See [https://github.com/plepe/openstreetmap-date-parser](openstreetmap-date-parser) for details.
* filter `natsort`: Sort an array naturally, see [https://www.npmjs.com/package/natsort](natsort) for details.
* filter `unique`: Remove duplicate elements from an array.
Notes:
* Variables will automatically be HTML escaped, if not the filter raw is used, e.g.: {{ tags.name|raw }}

1
package.json

@ -23,6 +23,7 @@
"leaflet.polylinemeasure": "https://github.com/ppete2/Leaflet.PolylineMeasure.git",
"modulekit-tabs": "^0.1.0",
"moment": "^2.18.1",
"natsort": "^1.0.6",
"opening_hours": "^3.5.0",
"openstreetbrowser-categories-main": "https://github.com/plepe/openstreetbrowser-categories-main",
"openstreetmap-date-parser": "^0.1.0",

11
src/twigFunctions.js

@ -2,6 +2,7 @@ var OverpassLayer = require('overpass-layer')
var OpeningHours = require('opening_hours')
var colorInterpolate = require('color-interpolate')
var osmParseDate = require('openstreetmap-date-parser')
const natsort = require('natsort')
OverpassLayer.twig.extendFunction('tagsPrefix', function (tags, prefix) {
var ret = {}
@ -41,6 +42,16 @@ OverpassLayer.twig.extendFilter('websiteUrl', function (value) {
OverpassLayer.twig.extendFilter('matches', function (value, match) {
return value.toString().match(match)
})
OverpassLayer.twig.extendFilter('natsort', function (values, options) {
return values.sort(natsort(options))
})
OverpassLayer.twig.extendFilter('unique', function (values, options) {
// source: https://stackoverflow.com/a/14438954
function onlyUnique(value, index, self) {
return self.indexOf(value) === index
}
return values.filter(onlyUnique)
})
OverpassLayer.twig.extendFunction('colorInterpolate', function (map, value) {
var colormap = colorInterpolate(map)
return colormap(value)

Loading…
Cancel
Save