From 3dedf7db664a64183b7ca2f81c190fac6948ad17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 22 Dec 2019 01:56:11 +0100 Subject: [PATCH] label ordering --- src/c3nav/mapdata/models/locations.py | 1 + src/c3nav/site/static/site/js/c3nav.js | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/c3nav/mapdata/models/locations.py b/src/c3nav/mapdata/models/locations.py index 2addcd6c..b051c335 100644 --- a/src/c3nav/mapdata/models/locations.py +++ b/src/c3nav/mapdata/models/locations.py @@ -444,3 +444,4 @@ class LabelSettings(SerializableMixin, models.Model): verbose_name = _('Label Settings') verbose_name_plural = _('Label Settings') default_related_name = 'labelsettings' + ordering = ('min_zoom', '-font_size') diff --git a/src/c3nav/site/static/site/js/c3nav.js b/src/c3nav/site/static/site/js/c3nav.js index ecdf3e6e..310cbd2c 100644 --- a/src/c3nav/site/static/site/js/c3nav.js +++ b/src/c3nav/site/static/site/js/c3nav.js @@ -97,6 +97,11 @@ c3nav = { } }); }, + _sort_labels: function(a, b) { + var result = (b.label_settings.min_zoom || -10) - (a.label_settings.min_zoom || -10) + if (result === 0) result = a.label_settings.font_size - b.label_settings.font_size; + return result; + }, _last_time_searchable_locations_loaded: null, _searchable_locations_interval: 120000, _searchable_locations_loaded: function(data) { @@ -119,6 +124,9 @@ c3nav = { labels[location.point[0]].push(location); } } + for (level_id in labels) { + labels[level_id].sort(c3nav._sort_labels); + } c3nav.locations = locations; c3nav.locations_by_id = locations_by_id; c3nav.labels = labels; @@ -316,8 +324,11 @@ c3nav = { if (!labels) return; for (var location of labels) { + if (zoom < (location.label_settings.min_zoom || -10)) { + // since the labels are sorted by min_zoom, we can just leave here + break; + } if (bounds.contains(location.label.getLatLng()) && - (location.label_settings.min_zoom || -10) < zoom && (location.label_settings.max_zoom || 10) > zoom) { c3nav._labelLayer._maybeAddLayerToRBush(location.label); }