diff --git a/src/CategoryOverpassFilter.js b/src/CategoryOverpassFilter.js index c371e119..4582401d 100644 --- a/src/CategoryOverpassFilter.js +++ b/src/CategoryOverpassFilter.js @@ -1,5 +1,6 @@ const OverpassLayer = require('overpass-layer') const tabs = require('modulekit-tabs') +const natsort = require('natsort') const state = require('./state') const Filter = require('overpass-frontend').Filter @@ -69,13 +70,13 @@ class CategoryOverpassFilter { let k = option.value f.values[k] = {} + Array.from(option.attributes).forEach(attr => { + f.values[k][attr.name] = attr.value + }) + if (option.textContent) { f.values[k].name = option.textContent } - - if (option.hasAttribute('query')) { - f.values[k].query = option.getAttribute('query') - } } } @@ -100,6 +101,25 @@ class CategoryOverpassFilter { } } } + + if (!('sort' in f) || (f.sort === 'natsort')) { + let v = {} + let sorter = natsort() + let keys = Object.keys(f.values) + + keys + .sort((a, b) => { + let weight = (f.values[a].weight || 0) - (f.values[b].weight || 0) + if (weight !== 0) { + return weight + } + + return sorter(f.values[a].name, f.values[b].name) + }) + .forEach(k => { v[k] = f.values[k] }) + + f.values = v + } } }