From 8dbea1c47e2ee5240ed108ee0d4d3cc5c353dff9 Mon Sep 17 00:00:00 2001 From: George Sfoungaris Date: Tue, 4 Oct 2022 10:27:56 +0300 Subject: [PATCH] Hide invalid transmitters by default Closes https://gitlab.com/librespacefoundation/satnogs/satnogs-db/-/issues/411 Signed-off-by: George Sfoungaris --- db/base/models.py | 9 ++++ db/base/views.py | 6 +-- db/static/css/app.css | 53 +++++++++++++++++++++ db/static/js/satellite.js | 7 +++ db/static/js/transmitters-invalid-toggle.js | 5 ++ db/static/js/transmitters.js | 29 ++++++++++- db/templates/base/satellite.html | 15 ++++++ db/templates/base/transmitters.html | 2 +- 8 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 db/static/js/transmitters-invalid-toggle.js diff --git a/db/base/models.py b/db/base/models.py index 52ce188..361f295 100644 --- a/db/base/models.py +++ b/db/base/models.py @@ -278,6 +278,15 @@ class Satellite(models.Model): transmitters = Transmitter.objects.filter(satellite=self.id).exclude(status='invalid') return transmitters + @property + def invalid_transmitters(self): + """Returns invalid transmitters for this Satellite + + :returns: the invalid transmitters for this Satellite + """ + transmitters = Transmitter.objects.filter(satellite=self.id).filter(status='invalid') + return transmitters + @property def transmitter_suggestion_count(self): """Returns number of pending transmitter suggestions for this Satellite diff --git a/db/base/views.py b/db/base/views.py index ce0e647..04cb65c 100644 --- a/db/base/views.py +++ b/db/base/views.py @@ -95,11 +95,11 @@ def transmitters_list(request): """ transmitters = Transmitter.objects.filter( satellite__associated_satellite__isnull=True, satellite__satellite_entry__approved=True - ).exclude( - status='invalid' ).select_related('satellite', 'satellite__satellite_entry', 'satellite__satellite_identifier') - return render(request, 'base/transmitters.html', {'transmitters': transmitters}) + return render(request, 'base/transmitters.html', { + 'transmitters': transmitters, + }) def robots(request): diff --git a/db/static/css/app.css b/db/static/css/app.css index a4e97fd..4a3bd13 100644 --- a/db/static/css/app.css +++ b/db/static/css/app.css @@ -680,3 +680,56 @@ a.skip-main:focus, a.skip-main:active { .transmitters-chart .bar:hover { stroke: var(--color-text); } + +.transmitters-separator { + display: flex; + align-items: center; + text-align: center; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.transmitters-separator::before, +.transmitters-separator::after { + content: ''; + flex: 1; + border-bottom: 1px solid #dee2e6; +} + +.transmitters-separator:not(:empty)::before { + margin-right: .25em; +} + +.transmitters-separator:not(:empty)::after { + margin-left: .25em; +} + +.transmitters-separator > div { + margin-left: .75rem; + margin-right: .75rem; +} + +.custom-control-input-themed:focus ~ .custom-control-label::before { + border-color: var(--satnogs-color-primary); + box-shadow: 0 0 0 0.2rem rgba(var(--satnogs-color-primary), 0.25); +} + +.custom-control-input-themed:checked ~ .custom-control-label::before { + border-color: var(--satnogs-color-primary); + background-color: var(--satnogs-color-primary); +} + +.custom-control-input-themed:focus:not(:checked) ~ .custom-control-label::before { + border-color: var(--satnogs-color-text); +} + +.custom-control-input-themed:not(:disabled):active ~ .custom-control-label::before { + background-color: var(--satnogs-color-background); + border-color: var(--satnogs-color-dark); +} + +.custom-control-label { + font-weight: normal; + margin-top: auto; + margin-bottom: auto; +} diff --git a/db/static/js/satellite.js b/db/static/js/satellite.js index 54ab152..17e4d6b 100644 --- a/db/static/js/satellite.js +++ b/db/static/js/satellite.js @@ -254,4 +254,11 @@ $(document).ready(function () { const hash = $(this).attr('href'); $('#tabs a[href="' + hash + '"]').tab('show'); }); + + // Show/hide invalid transmitters + let invalidTransmittersDiv = $('#invalidTransmitters'); + invalidTransmittersDiv.hide(); + $('#showInvalidCheckbox').on('click', function() { + invalidTransmittersDiv.fadeToggle('fast', 'linear'); + }); }); diff --git a/db/static/js/transmitters-invalid-toggle.js b/db/static/js/transmitters-invalid-toggle.js new file mode 100644 index 0000000..e3e0dd4 --- /dev/null +++ b/db/static/js/transmitters-invalid-toggle.js @@ -0,0 +1,5 @@ +$(document).ready(function() { + $('#toggleInvalidTransmitters').show(); +}); + + diff --git a/db/static/js/transmitters.js b/db/static/js/transmitters.js index d555d5a..a5e2481 100644 --- a/db/static/js/transmitters.js +++ b/db/static/js/transmitters.js @@ -20,6 +20,23 @@ function format_freq(frequency_string) { } /* eslint-enable no-unused-vars */ +// A toggle to show/hide invalid transmitters +const toggle_html = '\ +
\ + \ + \ +
'; + +// Custom filtering function to show/hide invalid transmitters +$.fn.dataTable.ext.search.push(function (settings, data) { + const toggle = $('#toggleInvalidTransmitters'); + if(!toggle.length || toggle.is(':checked')) { + return true; + } else { + return data[13] !== 'invalid'; + } +}); + /* eslint new-cap: "off" */ $(document).ready(function() { @@ -35,7 +52,7 @@ $(document).ready(function() { $(this).html(format_freq(to_format)); }); - $('#transmitters').DataTable( { + const table = $('#transmitters').DataTable( { // the dom field controls the layout and visibility of datatable items // and is not intuitive at all. Without layout we have dom: 'Bftrilp' // https://datatables.net/reference/option/dom @@ -72,6 +89,16 @@ $(document).ready(function() { pageLength: 25 } ); + // .dt-buttons is the columns dropdown + $('.dt-buttons').append(toggle_html); + let invalidTransmitterToggle = $('#toggleInvalidTransmitters'); + invalidTransmitterToggle.hide(); + + // Event listener to redraw the table if invalid transmitter visibility is toggled + invalidTransmitterToggle.on('click', function() { + table.draw(); + }); + // Handle deep linking of tabbed panes let url = location.href.replace(/\/$/, ''); history.replaceState(null, null, url); diff --git a/db/templates/base/satellite.html b/db/templates/base/satellite.html index 9630b5c..1c9ae0c 100644 --- a/db/templates/base/satellite.html +++ b/db/templates/base/satellite.html @@ -387,6 +387,21 @@ {% endfor %} + {% if satellite.invalid_transmitters %} +
+
+ + +
+
+
+ {% for transmitter in satellite.invalid_transmitters %} +
+ {% include 'includes/cards/transmitter_card.html' with satellite_entry=satellite.satellite_entry transmitter=transmitter %} +
+ {% endfor %} +
+ {% endif %} diff --git a/db/templates/base/transmitters.html b/db/templates/base/transmitters.html index 17f72df..20c4c38 100644 --- a/db/templates/base/transmitters.html +++ b/db/templates/base/transmitters.html @@ -42,7 +42,6 @@
- @@ -123,4 +122,5 @@ + {% endblock %}