From f63ac4294caa7cdca91a1506bc66a9570f6b9612 Mon Sep 17 00:00:00 2001 From: Alfredos-Panagiotis Damkalis Date: Sun, 22 May 2022 19:53:59 +0300 Subject: [PATCH] Add ITU coordination field Signed-off-by: Alfredos-Panagiotis Damkalis --- db/api/serializers.py | 4 +- db/base/forms.py | 6 +- .../0051_add_itu_coordination_field.py | 19 +++++ db/base/models.py | 6 ++ db/settings.py | 2 +- db/static/js/transmitter_modal.js | 21 +++++- .../base/modals/transmitter_create.html | 71 +++++++++++-------- .../base/modals/transmitter_update.html | 71 +++++++++++-------- .../includes/cards/transmitter_card.html | 8 +++ 9 files changed, 141 insertions(+), 67 deletions(-) create mode 100644 db/base/migrations/0051_add_itu_coordination_field.py diff --git a/db/api/serializers.py b/db/api/serializers.py index a46329e..f1891c0 100644 --- a/db/api/serializers.py +++ b/db/api/serializers.py @@ -231,6 +231,7 @@ class TransmitterEntrySerializer(serializers.ModelSerializer): 'service': 'Amateur', 'iaru_coordination': '', 'iaru_coordination_url': '', + 'itu_coordination': '', 'coordination': '', 'coordination_url': '' }, @@ -254,7 +255,8 @@ class TransmitterSerializer(serializers.ModelSerializer): 'uuid', 'description', 'alive', 'type', 'uplink_low', 'uplink_high', 'uplink_drift', 'downlink_low', 'downlink_high', 'downlink_drift', 'mode', 'mode_id', 'uplink_mode', 'invert', 'baud', 'sat_id', 'norad_cat_id', 'status', 'updated', 'citation', 'service', - 'iaru_coordination', 'iaru_coordination_url', 'coordination', 'coordination_url' + 'iaru_coordination', 'iaru_coordination_url', 'itu_coordination', 'coordination', + 'coordination_url' ) # Keeping alive field for compatibility issues diff --git a/db/base/forms.py b/db/base/forms.py index 252c82c..8f66f64 100644 --- a/db/base/forms.py +++ b/db/base/forms.py @@ -27,7 +27,7 @@ class TransmitterCreateForm(BSModalModelForm): # pylint: disable=too-many-ances 'description', 'type', 'status', 'uplink_low', 'uplink_high', 'uplink_drift', 'uplink_mode', 'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', 'invert', 'baud', 'citation', 'service', 'iaru_coordination', 'iaru_coordination_url', - 'coordination', 'coordination_url' + 'itu_coordination', 'coordination', 'coordination_url' ] labels = { 'downlink_low': _('Downlink freq.'), @@ -35,6 +35,7 @@ class TransmitterCreateForm(BSModalModelForm): # pylint: disable=too-many-ances 'invert': _('Inverted Transponder?'), 'iaru_coordination': _('IARU Coordination'), 'iaru_coordination_url': _('IARU Coordination URL'), + 'itu_coordination': _('ITU Coordinations URLs'), } widgets = { 'description': TextInput(), @@ -49,7 +50,7 @@ class TransmitterUpdateForm(BSModalModelForm): # pylint: disable=too-many-ances 'description', 'type', 'status', 'uplink_low', 'uplink_high', 'uplink_drift', 'uplink_mode', 'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', 'invert', 'baud', 'citation', 'service', 'iaru_coordination', 'iaru_coordination_url', - 'coordination', 'coordination_url' + 'itu_coordination', 'coordination', 'coordination_url' ] labels = { 'downlink_low': _('Downlink freq.'), @@ -57,6 +58,7 @@ class TransmitterUpdateForm(BSModalModelForm): # pylint: disable=too-many-ances 'invert': _('Inverted Transponder?'), 'iaru_coordination': _('IARU Coordination'), 'iaru_coordination_url': _('IARU Coordination URL'), + 'itu_coordination': _('ITU Coordination URLs'), } widgets = { 'description': TextInput(), diff --git a/db/base/migrations/0051_add_itu_coordination_field.py b/db/base/migrations/0051_add_itu_coordination_field.py new file mode 100644 index 0000000..a985228 --- /dev/null +++ b/db/base/migrations/0051_add_itu_coordination_field.py @@ -0,0 +1,19 @@ +# Generated by Django 4.0.4 on 2022-05-22 16:50 + +import db.base.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0050_add_iaru_coordination_fields'), + ] + + operations = [ + migrations.AddField( + model_name='transmitterentry', + name='itu_coordination', + field=models.JSONField(default=db.base.models.get_default_itu_coordination_field), + ), + ] diff --git a/db/base/models.py b/db/base/models.py index fbb7b97..6d1f642 100644 --- a/db/base/models.py +++ b/db/base/models.py @@ -106,6 +106,11 @@ def generate_sat_id(): ) +def get_default_itu_coordination_field(): + """Generate default value for itu_coordination field of TransmitterEntry model""" + return {'urls': []} + + class SatelliteIdentifier(models.Model): """Model for Satellite Identifier.""" sat_id = models.CharField( @@ -501,6 +506,7 @@ class TransmitterEntry(models.Model): help_text='URL for more details on this frequency coordination', validators=[URLValidator(schemes=['http', 'https'], regex=URL_REGEX)] ) + itu_coordination = models.JSONField(default=get_default_itu_coordination_field) coordination = models.CharField( choices=list(zip(COORDINATION_STATUS, COORDINATION_STATUS)), max_length=20, diff --git a/db/settings.py b/db/settings.py index ee1e3a5..7b46637 100644 --- a/db/settings.py +++ b/db/settings.py @@ -417,7 +417,7 @@ CSP_SCRIPT_SRC = config( 'https://*.google-analytics.com,' 'https://kit-free.fontawesome.com,' 'https://kit.fontawesome.com,' - "'sha256-wMIRCqWVu9YgOwizZzrYvTWAiAn0Y8PQTRdiHy2BNRk='," # transmitter_modal.js + "'sha256-hNUUO5rlLTL2RGoi1tx0HAeOoB/Zc30JmlfQDwIq358='," # transmitter_modal.js ) CSP_IMG_SRC = config( 'CSP_IMG_SRC', diff --git a/db/static/js/transmitter_modal.js b/db/static/js/transmitter_modal.js index fd911fc..c1afa2e 100644 --- a/db/static/js/transmitter_modal.js +++ b/db/static/js/transmitter_modal.js @@ -4,7 +4,9 @@ // NOTE: Since this script is loaded dynamically after page load, we have // to be cautious of CSP requirements. Any changes to this script will need // to have the hash recalculated and changed in settings.py under -// CSP_SCRIPT_SRC +// CSP_SCRIPT_SRC. For hash recalculation use the command: +// +// cat transmitter_modal.js | openssl sha256 -binary | openssl base64 function ppb_to_freq(freq, drift) { var freq_obs = freq + ((freq * drift) / Math.pow(10,9)); @@ -67,6 +69,19 @@ function transmitter_suggestion_type(selection) { } $(function () { + // Initialize ITU Coordination URLs textarea and hide the JSON one + $('textarea[name=\'itu_coordination\']').prop('readonly', true); + $('#itu-coordination-input-group').hide(); + var itu_urls = $.parseJSON($('textarea[name=\'itu_coordination\']').val())['urls']; + $('textarea[name=\'itu_coordination_per_line\']').val(itu_urls.join('\n')); + // Add event for changing JSON textarea when ITU Coordination URLs changes + $('textarea[name=\'itu_coordination_per_line\']').on('change click', function(){ + var itu_coordination_json = $.parseJSON($('textarea[name=\'itu_coordination\']').val()); + var new_itu_urls = $('textarea[name=\'itu_coordination_per_line\']').val().split('\n'); + itu_coordination_json['urls'] = new_itu_urls; + $('textarea[name=\'itu_coordination\']').val(JSON.stringify(itu_coordination_json)); + }); + // Initialize frequency drift fields and their events $('input[name=\'uplink_drift\']').prop('readonly', true); var uplink_ppb = $('input[name=\'uplink_drift\']').val(); if (uplink_ppb != 0) { @@ -89,7 +104,7 @@ $(function () { var freq = parseInt($('input[name=\'downlink_low\']:visible').val()); $('input[name=\'downlink_drift\']').val(freq_to_ppb(freq_obs,freq)); }); - + // Initialize fields for transmitter type. transmitter_suggestion_type($('#id_type option:selected').text()); $('#id_type').on('change click', function () { @@ -99,4 +114,4 @@ $(function () { }); // Enable tooltips -$('[data-toggle="tooltip"]').tooltip(); \ No newline at end of file +$('[data-toggle="tooltip"]').tooltip(); diff --git a/db/templates/base/modals/transmitter_create.html b/db/templates/base/modals/transmitter_create.html index 00009fa..f83e79c 100644 --- a/db/templates/base/modals/transmitter_create.html +++ b/db/templates/base/modals/transmitter_create.html @@ -13,42 +13,53 @@