From 6742f30d9cf1960cf1eb96ef248c59615386b00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= Date: Sun, 15 Jul 2018 22:39:25 +0200 Subject: [PATCH] Twig: new filters 'natsort' and 'unique' --- doc/TwigJS.md | 2 ++ package.json | 1 + src/twigFunctions.js | 11 +++++++++++ 3 files changed, 14 insertions(+) diff --git a/doc/TwigJS.md b/doc/TwigJS.md index 2a86392b..6dd4b19c 100644 --- a/doc/TwigJS.md +++ b/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 }} diff --git a/package.json b/package.json index fb08b677..1df6530e 100644 --- a/package.json +++ b/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", diff --git a/src/twigFunctions.js b/src/twigFunctions.js index 8cea8dd5..134091cd 100644 --- a/src/twigFunctions.js +++ b/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)