From f9730900a7980bbb7b6cf44a4cb155e27c1e0b4e Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 21 Aug 2024 08:11:55 +0200 Subject: [PATCH 01/56] Prevent empty freqs from breaking LoTW uploads --- application/views/lotw_views/adif_views/adif_export.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/views/lotw_views/adif_views/adif_export.php b/application/views/lotw_views/adif_views/adif_export.php index b8d92b7a9..563191c58 100644 --- a/application/views/lotw_views/adif_views/adif_export.php +++ b/application/views/lotw_views/adif_views/adif_export.php @@ -44,9 +44,9 @@ $cert2 = str_replace("-----END CERTIFICATE-----", "", $cert1); mode_map($qso->COL_MODE, $qso->COL_SUBMODE)); ?>>mode_map(($qso->COL_MODE == null ? '' : strtoupper($qso->COL_MODE)), ($qso->COL_SUBMODE == null ? '' : strtoupper($qso->COL_SUBMODE)))); ?> -COL_FREQ != "" || $qso->COL_FREQ != "0") { ?>COL_FREQ / 1000000; ?>> +COL_FREQ != "" && $qso->COL_FREQ != "0") { ?>COL_FREQ / 1000000; ?>> -COL_FREQ_RX != "" || $qso->COL_FREQ_RX != "0") { ?>COL_FREQ_RX / 1000000; ?>> +COL_FREQ_RX != "" && $qso->COL_FREQ_RX != "0") { ?>COL_FREQ_RX / 1000000; ?>> COL_PROP_MODE) { ?>COL_PROP_MODE); ?>>COL_PROP_MODE); ?> @@ -129,7 +129,7 @@ if($freq_in_mhz) { $sign_string .= strtoupper($freq_in_mhz); } -if($qso->COL_FREQ_RX != "" || $qso->COL_FREQ_RX != "0") { +if($freq_in_mhz_rx) { $sign_string .= strtoupper($freq_in_mhz_rx); } From b88e94e6772295f7541cd2bb409e079440a88bd9 Mon Sep 17 00:00:00 2001 From: phl0 Date: Wed, 21 Aug 2024 08:14:59 +0200 Subject: [PATCH 02/56] Remove useless PHP tags .... --- .../lotw_views/adif_views/adif_export.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/application/views/lotw_views/adif_views/adif_export.php b/application/views/lotw_views/adif_views/adif_export.php index 563191c58..0b410b040 100644 --- a/application/views/lotw_views/adif_views/adif_export.php +++ b/application/views/lotw_views/adif_views/adif_export.php @@ -19,19 +19,19 @@ $cert2 = str_replace("-----END CERTIFICATE-----", "", $cert1); cert_dxcc_id); ?>>cert_dxcc_id; ?> -station_gridsquare)) { ?>station_gridsquare); ?>>station_gridsquare; ?> +station_gridsquare)) { ?>station_gridsquare); ?>>station_gridsquare; } ?> -station_itu)) { ?>station_itu); ?>>station_itu; ?> +station_itu)) { ?>station_itu); ?>>station_itu; } ?> -station_cq)) { ?>station_cq); ?>>station_cq; ?> +station_cq)) { ?>station_cq); ?>>station_cq; } ?> -station_iota)) { ?>station_iota); ?>>station_iota; ?> +station_iota)) { ?>station_iota); ?>>station_iota; } ?> -state != "" && $station_profile->station_country == "CANADA") { ?>lotw_ca_province_map($station_profile->state)); ?>>lotw_ca_province_map($station_profile->state); ?> +state != "" && $station_profile->station_country == "CANADA") { ?>lotw_ca_province_map($station_profile->state)); ?>>lotw_ca_province_map($station_profile->state); } ?> -state != "" && $station_profile->station_country == "UNITED STATES OF AMERICA") { ?>state); ?>>state; ?> +state != "" && $station_profile->station_country == "UNITED STATES OF AMERICA") { ?>state); ?>>state; } ?> -station_cnty != "" && $station_profile->station_country == "UNITED STATES OF AMERICA") { ?>station_cnty); ?>>station_cnty; ?> +station_cnty != "" && $station_profile->station_country == "UNITED STATES OF AMERICA") { ?>station_cnty); ?>>station_cnty; } ?> @@ -44,16 +44,16 @@ $cert2 = str_replace("-----END CERTIFICATE-----", "", $cert1); mode_map($qso->COL_MODE, $qso->COL_SUBMODE)); ?>>mode_map(($qso->COL_MODE == null ? '' : strtoupper($qso->COL_MODE)), ($qso->COL_SUBMODE == null ? '' : strtoupper($qso->COL_SUBMODE)))); ?> -COL_FREQ != "" && $qso->COL_FREQ != "0") { ?>COL_FREQ / 1000000; ?>> +COL_FREQ != "" && $qso->COL_FREQ != "0") { $freq_in_mhz = $qso->COL_FREQ / 1000000; ?>> -COL_FREQ_RX != "" && $qso->COL_FREQ_RX != "0") { ?>COL_FREQ_RX / 1000000; ?>> +COL_FREQ_RX != "" && $qso->COL_FREQ_RX != "0") { $freq_in_mhz_rx = $qso->COL_FREQ_RX / 1000000; ?>> -COL_PROP_MODE) { ?>COL_PROP_MODE); ?>>COL_PROP_MODE); ?> +COL_PROP_MODE) { ?>COL_PROP_MODE); ?>>COL_PROP_MODE); } ?> COL_SAT_NAME) { $satellite_name_check = $CI->lotw_satellite_map(strtoupper($qso->COL_SAT_NAME)); if($satellite_name_check != FALSE) { $satname = $satellite_name_check; } else { $satname = $qso->COL_SAT_NAME; } ?> -> +> -COL_BAND_RX) { ?>COL_BAND_RX); ?>>COL_BAND_RX); ?> +COL_BAND_RX) { ?>COL_BAND_RX); ?>>COL_BAND_RX); } ?> COL_TIME_ON); $new_date = date('Y-m-d', $date_on); ?> > From c5d12c17c736a8ddc07daec43b0f1fa826e560e9 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Wed, 21 Aug 2024 21:18:46 +0200 Subject: [PATCH 03/56] Sending now works --- assets/js/winkey.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/assets/js/winkey.js b/assets/js/winkey.js index 74df8e7d7..c80f79ed1 100644 --- a/assets/js/winkey.js +++ b/assets/js/winkey.js @@ -122,6 +122,7 @@ async function connect() { statusBar.innerText = "Connected"; connectButton.innerText = "Disconnect" + let decoder = new TextDecoderStream(); inputDone = port.readable.pipeTo(decoder.writable); inputStream = decoder.readable; @@ -130,8 +131,10 @@ async function connect() { outputDone = encoder.readable.pipeTo(port.writable); outputStream = encoder.writable; - writeToByte("0x00, 0x02"); - writeToByte("0x02, 0x00"); + // Seems this might not be needed, leaving it for now + // writeToByte("[0x00, 0x02]"); + // writeToByte("[0x02, 0x00]"); + $('#winkey_buttons').show(); @@ -152,7 +155,8 @@ async function writeToStream(line) { var enc = new TextEncoder(); // always utf-8 const writer = outputStream.getWriter(); - writer.write(line); + + writer.write([line.toUpperCase()]); writer.releaseLock(); } @@ -187,11 +191,11 @@ async function disconnect() { //When the send button is pressed function clickSend() { - writeToStream(sendText.value); - writeToStream("\r"); - - //and clear the input field, so it's clear it has been sent - sendText.value = ""; + writeToStream(sendText.value).then(function() { + // writeToStream("\r"); + //and clear the input field, so it's clear it has been sent + $('#sendText').val(''); + }); } From 952b56ee653f9aaae45a36140d08dc4b97be0fa4 Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 05:15:12 +0000 Subject: [PATCH 04/56] Adding Clublog and PropMode to Timeline-Analytics --- application/controllers/Timeline.php | 22 ++++- application/models/Timeline_model.php | 136 ++++++++++++-------------- 2 files changed, 81 insertions(+), 77 deletions(-) diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index d0acdbe5e..2cba97287 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -3,16 +3,14 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Timeline extends CI_Controller { - function __construct() - { + function __construct() { parent::__construct(); $this->load->model('user_model'); if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('error', __("You're not allowed to do that!")); redirect('dashboard'); } } - public function index() - { + public function index() { // Render Page $data['page_title'] = __("Timeline"); @@ -25,6 +23,13 @@ class Timeline extends CI_Controller { $band = 'All'; } + if ($this->input->post('propmode') != NULL) { + $propmode = $this->input->post('propmode'); + } + else { + $propmode = 'All'; + } + if ($this->input->post('mode') != NULL) { $mode = $this->input->post('mode'); } @@ -53,6 +58,13 @@ class Timeline extends CI_Controller { $lotw = '0'; } + if ($this->input->post('clublog') != NULL) { + $clublog = $this->input->post('clublog'); + } + else { + $clublog = '0'; + } + if ($this->input->post('eqsl') != NULL) { $eqsl = $this->input->post('eqsl'); } @@ -65,7 +77,7 @@ class Timeline extends CI_Controller { $data['modes'] = $this->modes->active(); - $data['timeline_array'] = $this->Timeline_model->get_timeline($band, $mode, $award, $qsl, $lotw, $eqsl); + $data['timeline_array'] = $this->Timeline_model->get_timeline($band, $mode, $propmode, $award, $qsl, $lotw, $eqsl, $clublog); $data['worked_bands'] = $this->bands->get_worked_bands(); $data['bandselect'] = $band; $data['modeselect'] = $mode; diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index c8c41326c..12a9fe3e3 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -3,7 +3,7 @@ if (!defined('BASEPATH')) exit('No direct script access allowed'); class Timeline_model extends CI_Model { - function get_timeline($band, $mode, $award, $qsl, $lotw, $eqsl) { + function get_timeline($band, $mode, $propmode, $award, $qsl, $lotw, $eqsl, $clublog) { $this->load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); @@ -14,52 +14,51 @@ class Timeline_model extends CI_Model $location_list = "'".implode("','",$logbooks_locations_array)."'"; switch ($award) { - case 'dxcc': $result = $this->get_timeline_dxcc($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; - case 'was': $result = $this->get_timeline_was($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; - case 'iota': $result = $this->get_timeline_iota($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; - case 'waz': $result = $this->get_timeline_waz($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; - case 'vucc': $result = $this->get_timeline_vucc($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; - case 'waja': $result = $this->get_timeline_waja($band, $mode, $location_list, $qsl, $lotw, $eqsl); break; + case 'dxcc': $result = $this->get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'was': $result = $this->get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'iota': $result = $this->get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'waz': $result = $this->get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'vucc': $result = $this->get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'waja': $result = $this->get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; } return $result; } - public function get_timeline_dxcc($band, $mode, $location_list, $qsl, $lotw, $eqsl) { - $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, prefix, col_country, end, adif from " - .$this->config->item('table_name'). " thcv - join dxcc_entities on thcv.col_dxcc = dxcc_entities.adif - where station_id in (" . $location_list . ")"; + public function get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + $binding = []; + $sql = "select min(date(COL_TIME_ON)) date, prefix, col_country, end, adif from " + .$this->config->item('table_name'). " thcv + join dxcc_entities on thcv.col_dxcc = dxcc_entities.adif + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; - $binding[] = $band; - } - } + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; + $binding[] = $band; + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; - $binding[] = $mode; - } + if ($mode != 'All') { + $sql .= " and col_mode = ?"; + $binding[] = $mode; + } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); - $sql .= " group by col_dxcc, col_country - order by date desc"; + $sql .= " group by col_dxcc, col_country + order by date desc"; - $query = $this->db->query($sql, $binding); + $query = $this->db->query($sql, $binding); - return $query->result(); + return $query->result(); } - public function get_timeline_waja($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select min(date(COL_TIME_ON)) date, col_state from " .$this->config->item('table_name'). " thcv @@ -94,7 +93,7 @@ class Timeline_model extends CI_Model return $query->result(); } - public function get_timeline_was($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select min(date(COL_TIME_ON)) date, col_state from " .$this->config->item('table_name'). " thcv @@ -130,7 +129,7 @@ class Timeline_model extends CI_Model return $query->result(); } - public function get_timeline_iota($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select min(date(COL_TIME_ON)) date, col_iota, name, prefix from " .$this->config->item('table_name'). " thcv @@ -164,7 +163,7 @@ class Timeline_model extends CI_Model return $query->result(); } - public function get_timeline_waz($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select min(date(COL_TIME_ON)) date, col_cqz from " .$this->config->item('table_name'). " thcv @@ -199,39 +198,32 @@ class Timeline_model extends CI_Model // Adds confirmation to query - function addQslToQuery($qsl, $lotw, $eqsl) { - $sql = ''; - if ($lotw == 1 and $qsl == 0 and $eqsl == 0) { - $sql .= " and col_lotw_qsl_rcvd = 'Y'"; - } + function addQslToQuery($qsl, $lotw, $eqsl, $clublog) { + $sql = ''; + if ( (($lotw ?? 0) != 0) || (($qsl ?? 0) != 0) || (($eqsl ?? 0) != 0) || (($clublog ?? 0) != 0) ) { + $sql .= 'and ('; - if ($qsl == 1 and $lotw == 0 and $eqsl == 0) { - $sql .= " and col_qsl_rcvd = 'Y'"; - } + if ($lotw ?? 0 == 1) { + $sql .= "col_lotw_qsl_rcvd = 'Y' or"; + } - if ($eqsl == 1 and $lotw == 0 and $qsl == 0) { - $sql .= " and col_eqsl_qsl_rcvd = 'Y'"; - } + if ($qsl ?? 0 == 1) { + $sql .= " col_qsl_rcvd = 'Y' or"; + } - if ($lotw == 1 and $qsl == 1 and $eqsl == 0) { - $sql .= " and (col_lotw_qsl_rcvd = 'Y' or col_qsl_rcvd = 'Y')"; - } + if ($eqsl ?? 0 == 1) { + $sql .= " col_eqsl_qsl_rcvd = 'Y' or"; + } - if ($qsl == 1 and $lotw == 0 and $eqsl == 1) { - $sql .= " and (col_qsl_rcvd = 'Y' or col_eqsl_qsl_rcvd = 'Y')"; - } + if ($clublog ?? 0 == 1) { + $sql .= " col_clublog_qsl_rcvd = 'Y' or"; + } + $sql.=' 1=0)'; + } + return $sql; + } - if ($eqsl == 1 and $lotw == 1 and $qsl == 0) { - $sql .= " and (col_eqsl_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')"; - } - - if ($qsl == 1 && $lotw == 1 && $eqsl == 1) { - $sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y' or col_eqsl_qsl_rcvd = 'Y')"; - } - return $sql; - } - - public function timeline_qso_details($querystring, $band, $mode, $type){ + public function timeline_qso_details($querystring, $band, $propmode, $mode, $type){ $this->load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); @@ -267,10 +259,10 @@ class Timeline_model extends CI_Model return $this->db->get($this->config->item('table_name')); } - public function get_timeline_vucc($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $timeline = array(); - $col_gridsquare = $this->get_gridsquare($band, $mode, $location_list, $qsl, $lotw, $eqsl); + $col_gridsquare = $this->get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); foreach ($col_gridsquare as $grid) { $timeline[] = array( @@ -278,7 +270,7 @@ class Timeline_model extends CI_Model 'date' => $grid->date); } - $col_vucc_grids = $this->get_vucc_grids($band, $mode, $location_list, $qsl, $lotw, $eqsl); + $col_vucc_grids = $this->get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); foreach ($col_vucc_grids as $gridSplit) { $grids = explode(",", $gridSplit->gridsquare); @@ -298,7 +290,7 @@ class Timeline_model extends CI_Model return $timeline; } - public function get_gridsquare($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select min(COL_TIME_ON) date, upper(substring(col_gridsquare, 1, 4)) gridsquare from " .$this->config->item('table_name'). " thcv @@ -321,7 +313,7 @@ class Timeline_model extends CI_Model $binding[] = $mode; } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " and col_gridsquare <> '' group by upper(substring(col_gridsquare, 1, 4)) order by date desc"; @@ -331,7 +323,7 @@ class Timeline_model extends CI_Model return $query->result(); } - public function get_vucc_grids($band, $mode, $location_list, $qsl, $lotw, $eqsl) { + public function get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; $sql = "select COL_TIME_ON as date, upper(col_vucc_grids) gridsquare from " .$this->config->item('table_name'). " thcv @@ -354,7 +346,7 @@ class Timeline_model extends CI_Model $binding[] = $mode; } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " and col_vucc_grids <> ''"; From cad024b1fc8505741edc2990fce615955c2f1af3 Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 05:56:31 +0000 Subject: [PATCH 05/56] Working Clublog-Filter. Added prop_modes to view --- application/controllers/Timeline.php | 1 + application/models/Timeline_model.php | 12 ++++----- application/views/timeline/index.php | 36 +++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index 2cba97287..58c80e7a2 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -81,6 +81,7 @@ class Timeline extends CI_Controller { $data['worked_bands'] = $this->bands->get_worked_bands(); $data['bandselect'] = $band; $data['modeselect'] = $mode; + $data['user_default_band'] = $this->session->userdata('user_default_band'); $this->load->view('interface_assets/header', $data); $this->load->view('timeline/index'); diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index 12a9fe3e3..d40a3e78d 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -48,7 +48,7 @@ class Timeline_model extends CI_Model $binding[] = $mode; } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " group by col_dxcc, col_country order by date desc"; @@ -83,7 +83,7 @@ class Timeline_model extends CI_Model $sql .= " and COL_DXCC = '339' and trim(coalesce(COL_STATE,'')) != '' "; - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " group by col_state order by date desc"; @@ -119,7 +119,7 @@ class Timeline_model extends CI_Model $sql .= " and COL_DXCC in ('291', '6', '110')"; $sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY')"; - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " group by col_state order by date desc"; @@ -153,7 +153,7 @@ class Timeline_model extends CI_Model $binding[] = $mode; } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " and col_iota <> '' group by col_iota, name, prefix order by date desc"; @@ -186,7 +186,7 @@ class Timeline_model extends CI_Model $binding[] = $mode; } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); $sql .= " and col_cqz <> '' group by col_cqz order by date desc"; @@ -216,7 +216,7 @@ class Timeline_model extends CI_Model } if ($clublog ?? 0 == 1) { - $sql .= " col_clublog_qsl_rcvd = 'Y' or"; + $sql .= " col_clublog_qso_download_status = 'Y' or"; } $sql.=' 1=0)'; } diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index 297ed455d..97341fda3 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -37,7 +37,7 @@ -
+
-
+
input->post('qsl')) echo ' checked="checked"'; ?> > @@ -63,6 +63,38 @@ input->post('eqsl')) echo ' checked="checked"'; ?> >
+
+ input->post('clublog')) echo ' checked="checked"'; ?> > + +
+
+
+ +
+ +
+
From f038080e901e3c8c3e2b1d37ace32d59846def5d Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 09:28:06 +0000 Subject: [PATCH 06/56] Added Timeline / Prophandling for DXCC-Award --- application/controllers/Timeline.php | 202 +++++----- application/models/Timeline_model.php | 521 +++++++++++++------------- application/views/timeline/index.php | 6 +- assets/js/sections/timeline.js | 6 + 4 files changed, 373 insertions(+), 362 deletions(-) create mode 100644 assets/js/sections/timeline.js diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index 58c80e7a2..b494b6466 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -3,130 +3,126 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Timeline extends CI_Controller { - function __construct() { - parent::__construct(); + function __construct() { + parent::__construct(); - $this->load->model('user_model'); - if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('error', __("You're not allowed to do that!")); redirect('dashboard'); } - } + $this->load->model('user_model'); + if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('error', __("You're not allowed to do that!")); redirect('dashboard'); } + } - public function index() { - // Render Page - $data['page_title'] = __("Timeline"); + public function index() { + // Render Page + $data['page_title'] = __("Timeline"); - $this->load->model('Timeline_model'); + $this->load->model('Timeline_model'); - if ($this->input->post('band') != NULL) { // Band is not set when page first loads. - $band = $this->input->post('band'); - } - else { - $band = 'All'; - } + if ($this->input->post('band') != NULL) { // Band is not set when page first loads. + $band = $this->input->post('band'); + } else { + $band = 'All'; + } - if ($this->input->post('propmode') != NULL) { - $propmode = $this->input->post('propmode'); - } - else { - $propmode = 'All'; - } + if ($this->input->post('propmode') != NULL) { + $propmode = $this->input->post('propmode'); + } else { + $propmode = 'All'; + } - if ($this->input->post('mode') != NULL) { - $mode = $this->input->post('mode'); - } - else { - $mode = 'All'; - } + if ($this->input->post('mode') != NULL) { + $mode = $this->input->post('mode'); + } else { + $mode = 'All'; + } - if ($this->input->post('award') != NULL) { - $award = $this->input->post('award'); - } - else { - $award = 'dxcc'; - } + if ($this->input->post('award') != NULL) { + $award = $this->input->post('award'); + } else { + $award = 'dxcc'; + } - if ($this->input->post('qsl') != NULL) { - $qsl = $this->input->post('qsl'); - } - else { - $qsl = '0'; - } + if ($this->input->post('qsl') != NULL) { + $qsl = $this->input->post('qsl'); + } else { + $qsl = '0'; + } - if ($this->input->post('lotw') != NULL) { - $lotw = $this->input->post('lotw'); - } - else { - $lotw = '0'; - } + if ($this->input->post('lotw') != NULL) { + $lotw = $this->input->post('lotw'); + } else { + $lotw = '0'; + } - if ($this->input->post('clublog') != NULL) { - $clublog = $this->input->post('clublog'); - } - else { - $clublog = '0'; - } + if ($this->input->post('clublog') != NULL) { + $clublog = $this->input->post('clublog'); + } else { + $clublog = '0'; + } - if ($this->input->post('eqsl') != NULL) { - $eqsl = $this->input->post('eqsl'); - } - else { - $eqsl = '0'; - } + if ($this->input->post('eqsl') != NULL) { + $eqsl = $this->input->post('eqsl'); + } else { + $eqsl = '0'; + } - $this->load->model('modes'); - $this->load->model('bands'); + $this->load->model('modes'); + $this->load->model('bands'); - $data['modes'] = $this->modes->active(); + $data['modes'] = $this->modes->active(); - $data['timeline_array'] = $this->Timeline_model->get_timeline($band, $mode, $propmode, $award, $qsl, $lotw, $eqsl, $clublog); - $data['worked_bands'] = $this->bands->get_worked_bands(); - $data['bandselect'] = $band; - $data['modeselect'] = $mode; - $data['user_default_band'] = $this->session->userdata('user_default_band'); + $data['timeline_array'] = $this->Timeline_model->get_timeline($band, $mode, $propmode, $award, $qsl, $lotw, $eqsl, $clublog); + $data['worked_bands'] = $this->bands->get_worked_bands(); + $data['bandselect'] = $band; + $data['modeselect'] = $mode; + $data['propmode'] = $propmode; + $data['user_default_band'] = $this->session->userdata('user_default_band'); - $this->load->view('interface_assets/header', $data); - $this->load->view('timeline/index'); - $this->load->view('interface_assets/footer'); - } + $footerData['scripts'] = [ 'assets/js/sections/timeline.js?' ]; + $this->load->view('interface_assets/header', $data); + $this->load->view('timeline/index'); + $this->load->view('interface_assets/footer', $footerData); + } - public function details() { - $this->load->model('logbook_model'); - $this->load->model('timeline_model'); + public function details() { + $this->load->model('logbook_model'); + $this->load->model('timeline_model'); - $querystring = str_replace('"', "", $this->input->post("Querystring")); + $querystring = str_replace('"', "", $this->security->xss_clean($this->input->post("Querystring"))); - $band = str_replace('"', "", $this->input->post("Band")); - $mode = str_replace('"', "", $this->input->post("Mode")); - $type = str_replace('"', "", $this->input->post("Type")); - $data['results'] = $this->timeline_model->timeline_qso_details($querystring, $band, $mode, $type); + $band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band"))); + $mode = str_replace('"', "", $this->security->xss_clean($this->input->post("Mode"))); + $type = str_replace('"', "", $this->security->xss_clean($this->input->post("Type"))); + $propmode = str_replace('"', "", $this->security->xss_clean($this->input->post("propmode"))); + + $data['results'] = $this->timeline_model->timeline_qso_details($querystring, $band, $propmode, $mode, $type); - switch($type) { - case 'dxcc': $country = $this->logbook_model->get_entity($querystring); - $data['page_title'] = __("Log View")." - DXCC"; - $data['filter'] = "country ". $country['name']; - break; - case 'was' : $data['page_title'] = __("Log View")." - WAS"; - $data['filter'] = "state ". $querystring; - break; - case 'iota': $data['page_title'] = __("Log View")." - IOTA"; - $data['filter'] = "iota ". $querystring; - break; - case 'waz' : $data['page_title'] = __("Log View")." - WAZ"; - $data['filter'] = "CQ zone ". $querystring; - break; - case 'vucc' : $data['page_title'] = __("Log View")." - VUCC"; - $data['filter'] = "Gridsquare ". $querystring; - break; - case 'waja' : $data['page_title'] = __("Log View")." - WAJA"; - $data['filter'] = "WAJA ". $querystring; - break; - } + switch($type) { + case 'dxcc': $country = $this->logbook_model->get_entity($querystring); + $data['page_title'] = __("Log View")." - DXCC"; + $data['filter'] = "country ". $country['name']; + break; + case 'was' : $data['page_title'] = __("Log View")." - WAS"; + $data['filter'] = "state ". $querystring; + break; + case 'iota': $data['page_title'] = __("Log View")." - IOTA"; + $data['filter'] = "iota ". $querystring; + break; + case 'waz' : $data['page_title'] = __("Log View")." - WAZ"; + $data['filter'] = "CQ zone ". $querystring; + break; + case 'vucc' : $data['page_title'] = __("Log View")." - VUCC"; + $data['filter'] = "Gridsquare ". $querystring; + break; + case 'waja' : $data['page_title'] = __("Log View")." - WAJA"; + $data['filter'] = "WAJA ". $querystring; + break; + } - if ($band != "All") { - $data['filter'] .= " and " . $band; - } + if ($band != "All") { + $data['filter'] .= " and " . $band; + } - $this->load->view('timeline/details', $data); - } + $this->load->view('timeline/details', $data); + } } diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index d40a3e78d..be65d9870 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -1,229 +1,238 @@ load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); - if (!$logbooks_locations_array) { - return null; - } + if (!$logbooks_locations_array) { + return null; + } $location_list = "'".implode("','",$logbooks_locations_array)."'"; - switch ($award) { - case 'dxcc': $result = $this->get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - case 'was': $result = $this->get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - case 'iota': $result = $this->get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - case 'waz': $result = $this->get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - case 'vucc': $result = $this->get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - case 'waja': $result = $this->get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; - } + switch ($award) { + case 'dxcc': $result = $this->get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'was': $result = $this->get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'iota': $result = $this->get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'waz': $result = $this->get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'vucc': $result = $this->get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + case 'waja': $result = $this->get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); break; + } - return $result; - } + return $result; + } - public function get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { - $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, prefix, col_country, end, adif from " - .$this->config->item('table_name'). " thcv - join dxcc_entities on thcv.col_dxcc = dxcc_entities.adif - where station_id in (" . $location_list . ")"; - - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; - $binding[] = $band; - } - } - - if ($mode != 'All') { - $sql .= " and col_mode = ?"; - $binding[] = $mode; - } - - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - - $sql .= " group by col_dxcc, col_country - order by date desc"; - - $query = $this->db->query($sql, $binding); - - return $query->result(); - } - - public function get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + public function get_timeline_dxcc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, col_state from " - .$this->config->item('table_name'). " thcv - where station_id in (" . $location_list . ")"; + $sql = "select min(date(COL_TIME_ON)) date, prefix, col_country, end, adif from " + .$this->config->item('table_name'). " thcv + join dxcc_entities on thcv.col_dxcc = dxcc_entities.adif + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; - $binding[] = $band; - } - } + if ($band == 'SAT') { // SAT == Don't care for band but for prop + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ( $propmode == 'All' ) { // Not SAT and Prop=All -> Show everything but not prop_mode SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Not SAT and prop=None --> Take only care of Band (if set) + if ($band != 'All') { + $sql .= " and col_band = ?"; + $binding[] = $band; + } + } else { // Not SAT and not All and no prop in ('All','None') take care of band and propmode + if ($band != 'All') { + $sql .= " and col_band = ?"; + $binding[] = $band; + } + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= " and COL_DXCC = '339' and trim(coalesce(COL_STATE,'')) != '' "; + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= " group by col_dxcc, col_country + order by date desc"; - $sql .= " group by col_state - order by date desc"; + $query = $this->db->query($sql, $binding); - $query = $this->db->query($sql, $binding); + return $query->result(); + } - return $query->result(); - } - - public function get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + public function get_timeline_waja($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, col_state from " - .$this->config->item('table_name'). " thcv - where station_id in (" . $location_list . ")"; + $sql = "select min(date(COL_TIME_ON)) date, col_state from " + .$this->config->item('table_name'). " thcv + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; $binding[] = $band; - } - } + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= " and COL_DXCC in ('291', '6', '110')"; - $sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY')"; + $sql .= " and COL_DXCC = '339' and trim(coalesce(COL_STATE,'')) != '' "; - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $sql .= " group by col_state - order by date desc"; + $sql .= " group by col_state + order by date desc"; - $query = $this->db->query($sql, $binding); + $query = $this->db->query($sql, $binding); - return $query->result(); - } + return $query->result(); + } - public function get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + public function get_timeline_was($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, col_iota, name, prefix from " - .$this->config->item('table_name'). " thcv - join iota on thcv.col_iota = iota.tag - where station_id in (" . $location_list . ")"; + $sql = "select min(date(COL_TIME_ON)) date, col_state from " + .$this->config->item('table_name'). " thcv + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; $binding[] = $band; - } - } + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= " and COL_DXCC in ('291', '6', '110')"; + $sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY')"; - $sql .= " and col_iota <> '' group by col_iota, name, prefix - order by date desc"; + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $query = $this->db->query($sql, $binding); + $sql .= " group by col_state + order by date desc"; - return $query->result(); - } + $query = $this->db->query($sql, $binding); - public function get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + return $query->result(); + } + + public function get_timeline_iota($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select min(date(COL_TIME_ON)) date, col_cqz from " - .$this->config->item('table_name'). " thcv - where station_id in (" . $location_list . ")"; + $sql = "select min(date(COL_TIME_ON)) date, col_iota, name, prefix from " + .$this->config->item('table_name'). " thcv + join iota on thcv.col_iota = iota.tag + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; $binding[] = $band; - } - } + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $sql .= " and col_cqz <> '' group by col_cqz - order by date desc"; + $sql .= " and col_iota <> '' group by col_iota, name, prefix + order by date desc"; - $query = $this->db->query($sql, $binding); + $query = $this->db->query($sql, $binding); - return $query->result(); - } + return $query->result(); + } + + public function get_timeline_waz($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + $binding = []; + $sql = "select min(date(COL_TIME_ON)) date, col_cqz from " + .$this->config->item('table_name'). " thcv + where station_id in (" . $location_list . ")"; + + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; + $binding[] = $band; + } + } + + if ($mode != 'All') { + $sql .= " and col_mode = ?"; + $binding[] = $mode; + } + + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + + $sql .= " and col_cqz <> '' group by col_cqz + order by date desc"; + + $query = $this->db->query($sql, $binding); + + return $query->result(); + } // Adds confirmation to query - function addQslToQuery($qsl, $lotw, $eqsl, $clublog) { - $sql = ''; - if ( (($lotw ?? 0) != 0) || (($qsl ?? 0) != 0) || (($eqsl ?? 0) != 0) || (($clublog ?? 0) != 0) ) { - $sql .= 'and ('; + function addQslToQuery($qsl, $lotw, $eqsl, $clublog) { + $sql = ''; + if ( (($lotw ?? 0) != 0) || (($qsl ?? 0) != 0) || (($eqsl ?? 0) != 0) || (($clublog ?? 0) != 0) ) { + $sql .= 'and ('; - if ($lotw ?? 0 == 1) { - $sql .= "col_lotw_qsl_rcvd = 'Y' or"; - } + if ($lotw ?? 0 == 1) { + $sql .= "col_lotw_qsl_rcvd = 'Y' or"; + } - if ($qsl ?? 0 == 1) { - $sql .= " col_qsl_rcvd = 'Y' or"; - } + if ($qsl ?? 0 == 1) { + $sql .= " col_qsl_rcvd = 'Y' or"; + } - if ($eqsl ?? 0 == 1) { - $sql .= " col_eqsl_qsl_rcvd = 'Y' or"; - } + if ($eqsl ?? 0 == 1) { + $sql .= " col_eqsl_qsl_rcvd = 'Y' or"; + } - if ($clublog ?? 0 == 1) { - $sql .= " col_clublog_qso_download_status = 'Y' or"; - } - $sql.=' 1=0)'; - } - return $sql; - } + if ($clublog ?? 0 == 1) { + $sql .= " col_clublog_qso_download_status = 'Y' or"; + } + $sql.=' 1=0)'; + } + return $sql; + } - public function timeline_qso_details($querystring, $band, $propmode, $mode, $type){ + public function timeline_qso_details($querystring, $band, $propmode, $mode, $type){ $this->load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); @@ -231,128 +240,128 @@ class Timeline_model extends CI_Model $this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC', 'left outer'); $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); - if ($band != 'All') { - if ($band == 'SAT') { - $this->db->where('col_prop_mode', $band); - } else { - $this->db->where('COL_PROP_MODE !=', 'SAT'); - $this->db->where('col_band', $band); - } - } + if ($band != 'All') { + if ($band == 'SAT') { + $this->db->where('col_prop_mode', $band); + } else { + $this->db->where('COL_PROP_MODE !=', 'SAT'); + $this->db->where('col_band', $band); + } + } - if ($mode != 'All') { - $this->db->where('col_mode', $mode); - } + if ($mode != 'All') { + $this->db->where('col_mode', $mode); + } - $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + $this->db->where_in('station_profile.station_id', $logbooks_locations_array); - switch($type) { - case 'dxcc': $this->db->where('COL_DXCC', $querystring); break; - case 'was': $this->db->where('COL_STATE', $querystring); break; - case 'iota': $this->db->where('COL_IOTA', $querystring); break; - case 'waz': $this->db->where('COL_CQZ', $querystring); break; - case 'vucc': $this->db->group_start(); $this->db->like('COL_GRIDSQUARE', $querystring); $this->db->or_like('COL_VUCC_GRIDS',$querystring); $this->db->group_end();break; - case 'waja': $this->db->where('COL_STATE', $querystring); break; - } - $this->db->order_by('COL_TIME_ON', 'DESC'); + switch($type) { + case 'dxcc': $this->db->where('COL_DXCC', $querystring); break; + case 'was': $this->db->where('COL_STATE', $querystring); break; + case 'iota': $this->db->where('COL_IOTA', $querystring); break; + case 'waz': $this->db->where('COL_CQZ', $querystring); break; + case 'vucc': $this->db->group_start(); $this->db->like('COL_GRIDSQUARE', $querystring); $this->db->or_like('COL_VUCC_GRIDS',$querystring); $this->db->group_end();break; + case 'waja': $this->db->where('COL_STATE', $querystring); break; + } + $this->db->order_by('COL_TIME_ON', 'DESC'); - return $this->db->get($this->config->item('table_name')); - } + return $this->db->get($this->config->item('table_name')); + } - public function get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { - $timeline = array(); + public function get_timeline_vucc($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + $timeline = array(); - $col_gridsquare = $this->get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); + $col_gridsquare = $this->get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); - foreach ($col_gridsquare as $grid) { - $timeline[] = array( - 'gridsquare' => $grid->gridsquare, - 'date' => $grid->date); - } + foreach ($col_gridsquare as $grid) { + $timeline[] = array( + 'gridsquare' => $grid->gridsquare, + 'date' => $grid->date); + } - $col_vucc_grids = $this->get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); + $col_vucc_grids = $this->get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog); - foreach ($col_vucc_grids as $gridSplit) { - $grids = explode(",", $gridSplit->gridsquare); - foreach($grids as $key) { - $grid_four = strtoupper(substr(trim($key),0,4)); - if (!array_search($grid_four, array_column($timeline, 'gridsquare'))) { - $timeline[] = array( - 'gridsquare' => $grid_four, - 'date' => $gridSplit->date); - } - } - } - usort($timeline, function($a, $b) { - return $b['date'] <=> $a['date']; - }); + foreach ($col_vucc_grids as $gridSplit) { + $grids = explode(",", $gridSplit->gridsquare); + foreach($grids as $key) { + $grid_four = strtoupper(substr(trim($key),0,4)); + if (!array_search($grid_four, array_column($timeline, 'gridsquare'))) { + $timeline[] = array( + 'gridsquare' => $grid_four, + 'date' => $gridSplit->date); + } + } + } + usort($timeline, function($a, $b) { + return $b['date'] <=> $a['date']; + }); - return $timeline; - } + return $timeline; + } - public function get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + public function get_gridsquare($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select min(COL_TIME_ON) date, upper(substring(col_gridsquare, 1, 4)) gridsquare from " - .$this->config->item('table_name'). " thcv - where station_id in (" . $location_list . ")"; + $sql = "select min(COL_TIME_ON) date, upper(substring(col_gridsquare, 1, 4)) gridsquare from " + .$this->config->item('table_name'). " thcv + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; $binding[] = $band; - } - } + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $sql .= " and col_gridsquare <> '' group by upper(substring(col_gridsquare, 1, 4)) - order by date desc"; + $sql .= " and col_gridsquare <> '' group by upper(substring(col_gridsquare, 1, 4)) + order by date desc"; - $query = $this->db->query($sql, $binding); + $query = $this->db->query($sql, $binding); - return $query->result(); - } + return $query->result(); + } - public function get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { + public function get_vucc_grids($band, $mode, $propmode, $location_list, $qsl, $lotw, $eqsl, $clublog) { $binding = []; - $sql = "select COL_TIME_ON as date, upper(col_vucc_grids) gridsquare from " - .$this->config->item('table_name'). " thcv - where station_id in (" . $location_list . ")"; + $sql = "select COL_TIME_ON as date, upper(col_vucc_grids) gridsquare from " + .$this->config->item('table_name'). " thcv + where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; + if ($band != 'All') { + if ($band == 'SAT') { + $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; - $sql .= " and col_band = ?"; + } + else { + $sql .= " and col_prop_mode !='SAT'"; + $sql .= " and col_band = ?"; $binding[] = $band; - } - } + } + } - if ($mode != 'All') { - $sql .= " and col_mode = ?"; + if ($mode != 'All') { + $sql .= " and col_mode = ?"; $binding[] = $mode; - } + } - $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); + $sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $clublog); - $sql .= " and col_vucc_grids <> ''"; + $sql .= " and col_vucc_grids <> ''"; - $query = $this->db->query($sql, $binding); + $query = $this->db->query($sql, $binding); - return $query->result(); - } + return $query->result(); + } } diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index 97341fda3..2f40d9826 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -71,9 +71,9 @@
- +
- > @@ -91,7 +91,7 @@ - + diff --git a/assets/js/sections/timeline.js b/assets/js/sections/timeline.js new file mode 100644 index 000000000..f6b64395d --- /dev/null +++ b/assets/js/sections/timeline.js @@ -0,0 +1,6 @@ +$('#band').change(function(){ + var band = $("#band option:selected").text(); + if (band == "SAT") { + $('#propmode').val('SAT'); + } +}); From 7c58a8f594cc4cfe60c1125bf37654e2bdae3e56 Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 09:41:58 +0000 Subject: [PATCH 07/56] Remember last propmode --- application/views/timeline/index.php | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index 2f40d9826..4e5886e89 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -74,26 +74,26 @@
From 3558fff589bc7052fffaab1e460ade6758ceab5d Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 09:57:48 +0000 Subject: [PATCH 08/56] Handle virtual Band "All" and "SAT" better --- application/controllers/Timeline.php | 16 ++++++++-------- application/models/Timeline_model.php | 4 ++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index b494b6466..8b43bb156 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -17,49 +17,49 @@ class Timeline extends CI_Controller { $this->load->model('Timeline_model'); if ($this->input->post('band') != NULL) { // Band is not set when page first loads. - $band = $this->input->post('band'); + $band = $this->security->xss_clean($this->input->post('band')); } else { $band = 'All'; } if ($this->input->post('propmode') != NULL) { - $propmode = $this->input->post('propmode'); + $propmode = $this->security->xss_clean($this->input->post('propmode')); } else { $propmode = 'All'; } if ($this->input->post('mode') != NULL) { - $mode = $this->input->post('mode'); + $mode = $this->security->xss_clean($this->input->post('mode')); } else { $mode = 'All'; } if ($this->input->post('award') != NULL) { - $award = $this->input->post('award'); + $award = $this->security->xss_clean($this->input->post('award')); } else { $award = 'dxcc'; } if ($this->input->post('qsl') != NULL) { - $qsl = $this->input->post('qsl'); + $qsl = $this->security->xss_clean($this->input->post('qsl')); } else { $qsl = '0'; } if ($this->input->post('lotw') != NULL) { - $lotw = $this->input->post('lotw'); + $lotw = $this->security->xss_clean($this->input->post('lotw')); } else { $lotw = '0'; } if ($this->input->post('clublog') != NULL) { - $clublog = $this->input->post('clublog'); + $clublog = $this->security->xss_clean($this->input->post('clublog')); } else { $clublog = '0'; } if ($this->input->post('eqsl') != NULL) { - $eqsl = $this->input->post('eqsl'); + $eqsl = $this->security->xss_clean($this->input->post('eqsl')); } else { $eqsl = '0'; } diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index be65d9870..25630aea3 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -37,6 +37,10 @@ class Timeline_model extends CI_Model { } else { // Not SAT if ( $propmode == 'All' ) { // Not SAT and Prop=All -> Show everything but not prop_mode SAT $sql .= " and col_prop_mode !='SAT'"; + if ($band != 'All') { + $sql .= " and col_band = ?"; + $binding[] = $band; + } } elseif ($propmode == 'None') { // Not SAT and prop=None --> Take only care of Band (if set) if ($band != 'All') { $sql .= " and col_band = ?"; From 7fc5db585e4efe7b145572a6fcd23f10374837e1 Mon Sep 17 00:00:00 2001 From: int2001 Date: Thu, 22 Aug 2024 12:05:02 +0000 Subject: [PATCH 09/56] Simplify it a bit --- application/models/Timeline_model.php | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index 25630aea3..d9f562402 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -35,22 +35,16 @@ class Timeline_model extends CI_Model { $sql .= " and col_prop_mode = ?"; $binding[] = $band; } else { // Not SAT + if ($band != 'All') { + $sql .= " and col_band = ?"; + $binding[] = $band; + } if ( $propmode == 'All' ) { // Not SAT and Prop=All -> Show everything but not prop_mode SAT $sql .= " and col_prop_mode !='SAT'"; - if ($band != 'All') { - $sql .= " and col_band = ?"; - $binding[] = $band; - } } elseif ($propmode == 'None') { // Not SAT and prop=None --> Take only care of Band (if set) - if ($band != 'All') { - $sql .= " and col_band = ?"; - $binding[] = $band; - } + ; + // No filter } else { // Not SAT and not All and no prop in ('All','None') take care of band and propmode - if ($band != 'All') { - $sql .= " and col_band = ?"; - $binding[] = $band; - } $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } From b634a802a999fdafeed6230fa0fac2f41627d649 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 05:45:47 +0000 Subject: [PATCH 10/56] Refactoring of ONLY DXCC Timeline incl. details --- application/controllers/Timeline.php | 10 +++-- application/models/Timeline_model.php | 41 ++++++++++++------- application/views/interface_assets/footer.php | 3 +- application/views/timeline/index.php | 13 +++--- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index 8b43bb156..0650f43ad 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -22,10 +22,14 @@ class Timeline extends CI_Controller { $band = 'All'; } - if ($this->input->post('propmode') != NULL) { + if (($this->input->post('propmode') != NULL) && ($this->input->post('propmode') != '0')) { // Setted, but not "All" $propmode = $this->security->xss_clean($this->input->post('propmode')); } else { - $propmode = 'All'; + if (($this->session->userdata('user_default_band') == 'SAT') && ($this->input->post('propmode') == NULL)){ // Not setted, and empty and default is SAT? + $propmode='SAT'; + } else { // Not setted and empty and no SAT as default? + $propmode = 'All'; + } } if ($this->input->post('mode') != NULL) { @@ -91,7 +95,7 @@ class Timeline extends CI_Controller { $band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band"))); $mode = str_replace('"', "", $this->security->xss_clean($this->input->post("Mode"))); $type = str_replace('"', "", $this->security->xss_clean($this->input->post("Type"))); - $propmode = str_replace('"', "", $this->security->xss_clean($this->input->post("propmode"))); + $propmode = str_replace('"', "", $this->security->xss_clean($this->input->post("Propmode"))); $data['results'] = $this->timeline_model->timeline_qso_details($querystring, $band, $propmode, $mode, $type); diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index d9f562402..e4ad4b993 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -31,20 +31,21 @@ class Timeline_model extends CI_Model { join dxcc_entities on thcv.col_dxcc = dxcc_entities.adif where station_id in (" . $location_list . ")"; - if ($band == 'SAT') { // SAT == Don't care for band but for prop + if ($band == 'SAT') { // Left for compatibility reasons $sql .= " and col_prop_mode = ?"; $binding[] = $band; - } else { // Not SAT - if ($band != 'All') { + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; - } - if ( $propmode == 'All' ) { // Not SAT and Prop=All -> Show everything but not prop_mode SAT + } + if ( $propmode == 'NoSAT' ) { // All without SAT $sql .= " and col_prop_mode !='SAT'"; - } elseif ($propmode == 'None') { // Not SAT and prop=None --> Take only care of Band (if set) - ; - // No filter - } else { // Not SAT and not All and no prop in ('All','None') take care of band and propmode + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -238,12 +239,24 @@ class Timeline_model extends CI_Model { $this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC', 'left outer'); $this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer'); - if ($band != 'All') { - if ($band == 'SAT') { - $this->db->where('col_prop_mode', $band); - } else { - $this->db->where('COL_PROP_MODE !=', 'SAT'); + if ($band == 'SAT') { // Left for compatibility reasons + $this->db->where('col_prop_mode', $band); + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $this->db->where('col_band', $band); + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $this->db->where('col_prop_mode !=', 'SAT'); + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + $this->db->group_start(); + $this->db->where('trim(col_prop_mode)', ''); + $this->db->or_where('col_prop_mode is null'); + $this->db->group_end(); + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $this->db->where('col_prop_mode =', $propmode); } } diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php index aa76df56b..b8214d1a4 100644 --- a/application/views/interface_assets/footer.php +++ b/application/views/interface_assets/footer.php @@ -1971,7 +1971,7 @@ $(document).ready(function(){ $(".buttons-csv").css("color", "white"); } - function displayTimelineContacts(querystring, band, mode, type) { + function displayTimelineContacts(querystring, band, mode, propmode, type) { var baseURL= ""; $.ajax({ url: baseURL + 'index.php/timeline/details', @@ -1979,6 +1979,7 @@ $(document).ready(function(){ data: {'Querystring': querystring, 'Band': band, 'Mode': mode, + 'Propmode': propmode, 'Type': type }, success: function(html) { diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index 4e5886e89..f1f5147b9 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -73,8 +73,9 @@
- + + @@ -91,7 +92,7 @@ - + @@ -122,7 +123,7 @@ if ($timeline_array) { switch ($this->input->post('award')) { - case 'dxcc': $result = write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; + case 'dxcc': $result = write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; case 'was': $result = write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; case 'iota': $result = write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; case 'waz': $result = write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; @@ -139,7 +140,7 @@ @@ -166,7 +167,7 @@ function write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, if (!empty($line->end)) echo ''.__("Deleted DXCC").''; echo ' ' . $line->end . ' - adif . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>'.__("Show").' + adif . '","'. $bandselect . '","'. $modeselect . '","' . $propmode .'","' . $award .'")>'.__("Show").' '; } echo '
'; From a8614ba5ea7f46b753a0014281af760b68835bff Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 06:26:51 +0000 Subject: [PATCH 11/56] Added propmode to other Awards (not completed) --- application/views/timeline/index.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index f1f5147b9..ff5ff6de3 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -124,11 +124,11 @@ if ($timeline_array) { switch ($this->input->post('award')) { case 'dxcc': $result = write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; - case 'was': $result = write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; - case 'iota': $result = write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; - case 'waz': $result = write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; - case 'vucc': $result = write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; - case 'waja': $result = write_waja_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break; + case 'was': $result = write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; + case 'iota': $result = write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; + case 'waz': $result = write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; + case 'vucc': $result = write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; + case 'waja': $result = write_waja_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $this->input->post('award')); break; } } else { @@ -173,7 +173,7 @@ function write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, echo '
'; } -function write_waja_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) { +function write_waja_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $award) { $CI = &get_instance(); $CI->load->model("Waja"); $i = count($timeline_array); @@ -194,7 +194,7 @@ function write_waja_timeline($timeline_array, $custom_date_format, $bandselect, ' . $i-- . ' ' . date($custom_date_format, $date_as_timestamp) . ' ' . $CI->Waja->jaPrefectures[$line->col_state] . ' ('.$line->col_state.') - col_state . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>'.__("Show").' + col_state . '","'. $bandselect . '","'. $modeselect. '","' . $propmode . '","' . $award .'")>'.__("Show").' '; } echo '
'; @@ -219,13 +219,13 @@ function write_was_timeline($timeline_array, $custom_date_format, $bandselect, $ ' . $i-- . ' ' . date($custom_date_format, $date_as_timestamp) . ' ' . $line->col_state . ' - col_state . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>'.__("Show").' + col_state . '","'. $bandselect . '","'. $modeselect. '","' . $propmode . '","' . $award .'")>'.__("Show").' '; } echo '
'; } -function write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) { +function write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $award) { $i = count($timeline_array); echo ' @@ -248,13 +248,13 @@ function write_iota_timeline($timeline_array, $custom_date_format, $bandselect, - + '; } echo '
' . $line->col_iota . ' ' . $line->name . ' ' . $line->prefix . 'col_iota . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>'.__("Show").'col_iota . '","'. $bandselect . '","'. $modeselect. '","' . $propmode . '","' . $award .'")>'.__("Show").'
'; } -function write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) { +function write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $award) { $i = count($timeline_array); echo ' @@ -273,13 +273,13 @@ function write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $ - + '; } echo '
' . $i-- . ' ' . date($custom_date_format, $date_as_timestamp) . ' ' . $line->col_cqz . 'col_cqz . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>'.__("Show").'col_cqz . '","'. $bandselect . '","'. $modeselect. '","' . $propmode . '","' . $award .'")>'.__("Show").'
'; } -function write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) { +function write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode,$award) { $i = count($timeline_array); echo ' @@ -300,7 +300,7 @@ function write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, - + '; } echo '
' . date($custom_date_format, $date_as_timestamp) . ' ' . date('H:i', $date_as_timestamp) . ' ' . $line['gridsquare'] . ''.__("Show").''.__("Show").'
'; From 71ec5390eb55bd36669e8a5e61db632c63563668 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 06:34:13 +0000 Subject: [PATCH 12/56] Added new logic to all other Awards here --- application/models/Timeline_model.php | 135 ++++++++++++++++++-------- 1 file changed, 93 insertions(+), 42 deletions(-) diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index e4ad4b993..124132f8e 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -72,18 +72,27 @@ class Timeline_model extends CI_Model { .$this->config->item('table_name'). " thcv where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } + if ($mode != 'All') { $sql .= " and col_mode = ?"; $binding[] = $mode; @@ -107,15 +116,23 @@ class Timeline_model extends CI_Model { .$this->config->item('table_name'). " thcv where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } @@ -144,18 +161,27 @@ class Timeline_model extends CI_Model { join iota on thcv.col_iota = iota.tag where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } + if ($mode != 'All') { $sql .= " and col_mode = ?"; $binding[] = $mode; @@ -177,18 +203,27 @@ class Timeline_model extends CI_Model { .$this->config->item('table_name'). " thcv where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } + if ($mode != 'All') { $sql .= " and col_mode = ?"; $binding[] = $mode; @@ -316,15 +351,23 @@ class Timeline_model extends CI_Model { .$this->config->item('table_name'). " thcv where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } @@ -349,15 +392,23 @@ class Timeline_model extends CI_Model { .$this->config->item('table_name'). " thcv where station_id in (" . $location_list . ")"; - if ($band != 'All') { - if ($band == 'SAT') { - $sql .= " and col_prop_mode = ?"; - $binding[] = $band; - } - else { - $sql .= " and col_prop_mode !='SAT'"; + if ($band == 'SAT') { // Left for compatibility reasons + $sql .= " and col_prop_mode = ?"; + $binding[] = $band; + } else { // Not SAT + if ($band != 'All') { // Band set? Take care of it $sql .= " and col_band = ?"; $binding[] = $band; + } + if ( $propmode == 'NoSAT' ) { // All without SAT + $sql .= " and col_prop_mode !='SAT'"; + } elseif ($propmode == 'None') { // Empty Propmode + $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; + } elseif ($propmode == 'All') { // Dont care for propmode + ; // No Prop-Filter + } else { // Propmode set, taker care of it + $sql .= " and col_prop_mode = ?"; + $binding[] = $propmode; } } From 8463eda5bab07b94bd5e50dcb077b72a0b7217a3 Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Fri, 23 Aug 2024 08:43:11 +0200 Subject: [PATCH 13/56] Create a helper to read in a optional local_url to bypass the need to access the application using the external url. --- application/controllers/Cron.php | 2 +- system/helpers/url_helper.php | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/application/controllers/Cron.php b/application/controllers/Cron.php index 125ee37de..875a23e25 100644 --- a/application/controllers/Cron.php +++ b/application/controllers/Cron.php @@ -88,7 +88,7 @@ class cron extends CI_Controller { echo "CRON: " . $cron->id . " -> is due: " . $isdue_result . "\n"; echo "CRON: " . $cron->id . " -> RUNNING...\n"; - $url = base_url() . $cron->function; + $url = local_url() . $cron->function; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php index 4c060a203..89e90b588 100644 --- a/system/helpers/url_helper.php +++ b/system/helpers/url_helper.php @@ -88,6 +88,28 @@ if ( ! function_exists('base_url')) } } +if ( ! function_exists('local_url')) +{ + /** + * Local URL + * + * For cornercases where you have no access to the base_url from + * within e.g. the docker container to the base_url use this url + * for cron jobs. + * + * If local_url is not defined return base_url instead. + * + * @param string $uri + * @param string $protocol + * @return string + */ + + function local_url($uri = '', $protocol = NULL) + { + return get_instance()->config->local_url($uri, $protocol) ?? get_instance()->config->base_url($uri, $protocol); + } +} + // ------------------------------------------------------------------------ if ( ! function_exists('current_url')) From 69c178d6db12860c737a7ea61b340ee8f3a4ac9c Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 07:10:24 +0000 Subject: [PATCH 14/56] WAS only for USA --- application/models/Timeline_model.php | 2 +- application/views/timeline/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index 124132f8e..b66014f12 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -303,7 +303,7 @@ class Timeline_model extends CI_Model { switch($type) { case 'dxcc': $this->db->where('COL_DXCC', $querystring); break; - case 'was': $this->db->where('COL_STATE', $querystring); break; + case 'was': $this->db->where('COL_STATE', $querystring); $this->db->where("COL_DXCC in ('291', '6', '110')"); break; case 'iota': $this->db->where('COL_IOTA', $querystring); break; case 'waz': $this->db->where('COL_CQZ', $querystring); break; case 'vucc': $this->db->group_start(); $this->db->like('COL_GRIDSQUARE', $querystring); $this->db->or_like('COL_VUCC_GRIDS',$querystring); $this->db->group_end();break; diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index ff5ff6de3..2b101644e 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -200,7 +200,7 @@ function write_waja_timeline($timeline_array, $custom_date_format, $bandselect, echo ''; } -function write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) { +function write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $propmode, $award) { $i = count($timeline_array); echo ' From e6d3f638793aca7727d05ddea55b59a6ae525014 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 07:28:38 +0000 Subject: [PATCH 15/56] Filter on JAPAN at WAJA-Details --- application/models/Timeline_model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index b66014f12..823765ae5 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -307,7 +307,7 @@ class Timeline_model extends CI_Model { case 'iota': $this->db->where('COL_IOTA', $querystring); break; case 'waz': $this->db->where('COL_CQZ', $querystring); break; case 'vucc': $this->db->group_start(); $this->db->like('COL_GRIDSQUARE', $querystring); $this->db->or_like('COL_VUCC_GRIDS',$querystring); $this->db->group_end();break; - case 'waja': $this->db->where('COL_STATE', $querystring); break; + case 'waja': $this->db->where('COL_STATE', $querystring); $this->db->where('COL_DXCC','339'); break; } $this->db->order_by('COL_TIME_ON', 'DESC'); From 01457019bfcbc3b5b601ab7a46adf71b37e80e4b Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Fri, 23 Aug 2024 09:58:44 +0200 Subject: [PATCH 16/56] Forgot something to make it work --- application/controllers/Cron.php | 1 + system/core/Config.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/application/controllers/Cron.php b/application/controllers/Cron.php index 875a23e25..a34bfa80f 100644 --- a/application/controllers/Cron.php +++ b/application/controllers/Cron.php @@ -89,6 +89,7 @@ class cron extends CI_Controller { echo "CRON: " . $cron->id . " -> RUNNING...\n"; $url = local_url() . $cron->function; + echo "CRON: " . $cron->id . " -> URL: " . $url . "\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); diff --git a/system/core/Config.php b/system/core/Config.php index e6eb0ad95..245f44bb2 100644 --- a/system/core/Config.php +++ b/system/core/Config.php @@ -322,6 +322,36 @@ class CI_Config { return $base_url.$this->_uri_string($uri); } + /** + * Local URL + * + * Returns local_url [. uri_string] + * + * @uses CI_Config::_uri_string() + * + * @param string|string[] $uri URI string or an array of segments + * @param string $protocol + * @return string + */ + public function local_url($uri = '', $protocol = NULL) + { + $local_url = $this->slash_item('local_url'); + if (isset($protocol)) + { + // For protocol-relative links + if ($protocol === '') + { + $local_url = substr($local_url, strpos($local_url, '//')); + } + else + { + $local_url = $protocol.substr($local_url, strpos($local_url, '://')); + } + } + + return $local_url.$this->_uri_string($uri); + } + // ------------------------------------------------------------- /** From f20be15ba90742a3aa8ec58801b1c00171bb6ea5 Mon Sep 17 00:00:00 2001 From: int2001 Date: Fri, 23 Aug 2024 10:08:36 +0000 Subject: [PATCH 17/56] Cosmetics --- application/models/Timeline_model.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/application/models/Timeline_model.php b/application/models/Timeline_model.php index 823765ae5..703f76ba5 100644 --- a/application/models/Timeline_model.php +++ b/application/models/Timeline_model.php @@ -45,7 +45,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -86,7 +86,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -130,7 +130,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -175,7 +175,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -217,7 +217,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -290,8 +290,8 @@ class Timeline_model extends CI_Model { $this->db->group_end(); } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it - $this->db->where('col_prop_mode =', $propmode); + } else { // Propmode set, take care of it + $this->db->where('col_prop_mode', $propmode); } } @@ -365,7 +365,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } @@ -406,7 +406,7 @@ class Timeline_model extends CI_Model { $sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null)"; } elseif ($propmode == 'All') { // Dont care for propmode ; // No Prop-Filter - } else { // Propmode set, taker care of it + } else { // Propmode set, take care of it $sql .= " and col_prop_mode = ?"; $binding[] = $propmode; } From 2316331bea881d71a2bb41a1265a770c2d2140a2 Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Fri, 23 Aug 2024 15:00:45 +0200 Subject: [PATCH 18/56] Print the url just in the development version Co-authored-by: HB9HIL <80885850+HB9HIL@users.noreply.github.com> --- application/controllers/Cron.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/application/controllers/Cron.php b/application/controllers/Cron.php index a34bfa80f..609d8fcc6 100644 --- a/application/controllers/Cron.php +++ b/application/controllers/Cron.php @@ -89,7 +89,9 @@ class cron extends CI_Controller { echo "CRON: " . $cron->id . " -> RUNNING...\n"; $url = local_url() . $cron->function; - echo "CRON: " . $cron->id . " -> URL: " . $url . "\n"; + if (ENVIRONMENT == "development") { + echo "CRON: " . $cron->id . " -> URL: " . $url . "\n"; + } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); From 6ee6a95622bba50cf33c5f1add83ff4fe8c8e35a Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Fri, 23 Aug 2024 15:04:48 +0200 Subject: [PATCH 19/56] Move the ?? into system/Core/Config.php to do not fail if the local_url config entry is missing. --- system/core/Config.php | 2 +- system/helpers/url_helper.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system/core/Config.php b/system/core/Config.php index 245f44bb2..761441233 100644 --- a/system/core/Config.php +++ b/system/core/Config.php @@ -335,7 +335,7 @@ class CI_Config { */ public function local_url($uri = '', $protocol = NULL) { - $local_url = $this->slash_item('local_url'); + $local_url = $this->slash_item('local_url') ?? $this->slash_item('base_url'); if (isset($protocol)) { // For protocol-relative links diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php index 89e90b588..8b2eb1806 100644 --- a/system/helpers/url_helper.php +++ b/system/helpers/url_helper.php @@ -106,7 +106,7 @@ if ( ! function_exists('local_url')) function local_url($uri = '', $protocol = NULL) { - return get_instance()->config->local_url($uri, $protocol) ?? get_instance()->config->base_url($uri, $protocol); + return get_instance()->config->local_url($uri, $protocol); } } From 90aac66df1b4e2d3e37378d4fa8740a5da6f77f4 Mon Sep 17 00:00:00 2001 From: Patrick Winnertz Date: Fri, 23 Aug 2024 15:14:58 +0200 Subject: [PATCH 20/56] Move also the comment from the helper function to core/Config.php --- system/core/Config.php | 2 ++ system/helpers/url_helper.php | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system/core/Config.php b/system/core/Config.php index 761441233..93abd1e49 100644 --- a/system/core/Config.php +++ b/system/core/Config.php @@ -326,6 +326,8 @@ class CI_Config { * Local URL * * Returns local_url [. uri_string] + * + * If local_url is not defined return base_url instead. * * @uses CI_Config::_uri_string() * diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php index 8b2eb1806..9857eff5f 100644 --- a/system/helpers/url_helper.php +++ b/system/helpers/url_helper.php @@ -97,8 +97,6 @@ if ( ! function_exists('local_url')) * within e.g. the docker container to the base_url use this url * for cron jobs. * - * If local_url is not defined return base_url instead. - * * @param string $uri * @param string $protocol * @return string From 9fd106356320671ff366a5d124287ff811056e20 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Sat, 24 Aug 2024 14:53:42 +0200 Subject: [PATCH 21/56] Init works. Can now set CW speed. --- application/views/qso/index.php | 25 +++++---- assets/js/winkey.js | 98 +++++++++++++++++++++++++-------- 2 files changed, 90 insertions(+), 33 deletions(-) diff --git a/application/views/qso/index.php b/application/views/qso/index.php index cd3f8c42f..c82e5fd78 100644 --- a/application/views/qso/index.php +++ b/application/views/qso/index.php @@ -647,22 +647,25 @@ + -
-
- - - - - -
- - +
+ + + + + + + +
-
+ + + +
diff --git a/assets/js/winkey.js b/assets/js/winkey.js index c80f79ed1..c4bc653f5 100644 --- a/assets/js/winkey.js +++ b/assets/js/winkey.js @@ -28,7 +28,19 @@ ModeSelected.addEventListener('change', (event) => { } }); +$('#winkeycwspeed').change(function (event) { + // Get the value from the input + let speed = parseInt($('#winkeycwspeed').val(), 10); + // Convert to hexadecimal and pad if necessary + let hexspeed = speed.toString(16).padStart(2, '0'); + + // Create the command + let command = `02 ${hexspeed}`; + + // Send the command as hex bytes + sendHexToSerial(command); +}); let function1Name, function1Macro, function2Name, function2Macro, function3Name, function3Macro, function4Name, function4Macro, function5Name, function5Macro; @@ -122,19 +134,16 @@ async function connect() { statusBar.innerText = "Connected"; connectButton.innerText = "Disconnect" - let decoder = new TextDecoderStream(); inputDone = port.readable.pipeTo(decoder.writable); inputStream = decoder.readable; - const encoder = new TextEncoderStream(); - outputDone = encoder.readable.pipeTo(port.writable); - outputStream = encoder.writable; - - // Seems this might not be needed, leaving it for now - // writeToByte("[0x00, 0x02]"); - // writeToByte("[0x02, 0x00]"); - + // Keyer init + sendHexToSerial("00 02"); + await delay(300); // Wait for 300ms + sendHexToSerial("02 00"); + await delay(300); // Wait for 300ms + sendHexToSerial("02 14"); // init 20 wpm $('#winkey_buttons').show(); @@ -150,25 +159,70 @@ async function connect() { } } -//Write to the Serial port -async function writeToStream(line) { - var enc = new TextEncoder(); // always utf-8 - - const writer = outputStream.getWriter(); - - writer.write([line.toUpperCase()]); - writer.releaseLock(); +function delay(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); } -async function writeToByte(line) { - const writer = outputStream.getWriter(); - const data = new Uint8Array([line]); - writer.write(data); - writer.releaseLock(); +// Helper function to convert a hex string to a Uint8Array +function hexStringToUint8Array(hexString) { + // Remove any spaces or non-hex characters + hexString = hexString.replace(/[^0-9a-f]/gi, ''); + + // Ensure the string has an even length + if (hexString.length % 2 !== 0) { + console.warn('Hex string has an odd length, padding with a leading zero.'); + hexString = '0' + hexString; + } + + const byteArray = new Uint8Array(hexString.length / 2); + + for (let i = 0; i < hexString.length; i += 2) { + byteArray[i / 2] = parseInt(hexString.substr(i, 2), 16); + } + + return byteArray; +} + +async function sendHexToSerial(hexString) { + if (port && port.writable) { + // Convert the hex string to a Uint8Array + const byteArray = hexStringToUint8Array(hexString); + + // Create a writer from the writable stream + const writer = port.writable.getWriter(); + + try { + // Write the byte array to the serial port + await writer.write(byteArray); + } catch (error) { + console.error('Error writing to serial port:', error); + } finally { + // Release the lock on the writer + writer.releaseLock(); + } + } else { + console.error('Port is not available or writable.'); + } +} + +//Write to the Serial port +async function writeToStream(line) { + const outputStream = port.writable.getWriter(); + + // Convert the text to a Uint8Array + const encoder = new TextEncoder(); + const buffer = encoder.encode(line.toUpperCase()); + + // Write the Uint8Array to the serial port + await outputStream.write(buffer); + + // Release the stream lock + outputStream.releaseLock(); } //Disconnect from the Serial port async function disconnect() { + sendHexToSerial("00 03"); if (reader) { await reader.cancel(); From 5c4e50c231f5bfce11bb6b69401b8f400deecdae Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Sat, 24 Aug 2024 16:01:38 +0200 Subject: [PATCH 22/56] Added button to stop CW sending --- application/views/qso/index.php | 1 + assets/js/winkey.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/application/views/qso/index.php b/application/views/qso/index.php index c82e5fd78..6cc47c1ca 100644 --- a/application/views/qso/index.php +++ b/application/views/qso/index.php @@ -653,6 +653,7 @@
+ diff --git a/assets/js/winkey.js b/assets/js/winkey.js index c4bc653f5..6d51550d1 100644 --- a/assets/js/winkey.js +++ b/assets/js/winkey.js @@ -159,6 +159,10 @@ async function connect() { } } +function stop_cw_sending() { + sendHexToSerial("0A"); +} + function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } From bdad632f3645dbbe384819b341b26b1bc222cc19 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Sat, 24 Aug 2024 18:37:32 +0200 Subject: [PATCH 23/56] Added tune button --- application/views/qso/index.php | 2 ++ assets/js/winkey.js | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/application/views/qso/index.php b/application/views/qso/index.php index 6cc47c1ca..cb00380e1 100644 --- a/application/views/qso/index.php +++ b/application/views/qso/index.php @@ -654,6 +654,8 @@
+ + diff --git a/assets/js/winkey.js b/assets/js/winkey.js index 6d51550d1..f8bbc0be5 100644 --- a/assets/js/winkey.js +++ b/assets/js/winkey.js @@ -163,6 +163,18 @@ function stop_cw_sending() { sendHexToSerial("0A"); } +function send_carrier() { + sendHexToSerial("0B 01"); + $("#send_carrier").attr("hidden", true); + $("#stop_carrier").attr("hidden", false); +} + +function stop_carrier() { + sendHexToSerial("0B 00"); + $("#send_carrier").attr("hidden", false); + $("#stop_carrier").attr("hidden", true); +} + function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } From 1d16bf50de604f91a7e62898fbdca4a532221867 Mon Sep 17 00:00:00 2001 From: Andreas Kristiansen <6977712+AndreasK79@users.noreply.github.com> Date: Sat, 24 Aug 2024 18:47:20 +0200 Subject: [PATCH 24/56] Hide stop tune button when clicking stop button as well --- assets/js/winkey.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/js/winkey.js b/assets/js/winkey.js index f8bbc0be5..7a319beda 100644 --- a/assets/js/winkey.js +++ b/assets/js/winkey.js @@ -161,6 +161,8 @@ async function connect() { function stop_cw_sending() { sendHexToSerial("0A"); + $("#send_carrier").attr("hidden", false); + $("#stop_carrier").attr("hidden", true); } function send_carrier() { From fc5bf01f15232eea3db89db1f784a65a0171032e Mon Sep 17 00:00:00 2001 From: "Francisco (F4VSE)" Date: Sat, 24 Aug 2024 20:14:50 +0000 Subject: [PATCH 25/56] Translated using Weblate (French) Currently translated at 45.3% (888 of 1958 strings) Translation: Wavelog/Main Translation Translate-URL: https://translate.wavelog.org/projects/wavelog/main-translation/fr/ --- .../locale/fr_FR/LC_MESSAGES/messages.po | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/application/locale/fr_FR/LC_MESSAGES/messages.po b/application/locale/fr_FR/LC_MESSAGES/messages.po index 81cb79421..0824a11ce 100644 --- a/application/locale/fr_FR/LC_MESSAGES/messages.po +++ b/application/locale/fr_FR/LC_MESSAGES/messages.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" "POT-Creation-Date: 2024-08-22 13:37+0000\n" -"PO-Revision-Date: 2024-08-22 20:55+0000\n" +"PO-Revision-Date: 2024-08-24 20:29+0000\n" "Last-Translator: \"Francisco (F4VSE)\" \n" "Language-Team: French \n" @@ -3551,6 +3551,10 @@ msgid "" "radio magazines in the world. The magazine first appeared in January 1945 " "and focuses on awards and the practical aspects of amateur radio." msgstr "" +"Le magazine CQ est situé aux États-Unis et est l'un des magazines de radio " +"amateur les plus populaires au monde. Le magazine est apparu pour la " +"première fois en janvier 1945 et se concentre sur les récompenses et les " +"aspects pratiques de la radio amateur." #: application/views/awards/cq/index.php:22 msgid "" @@ -3563,6 +3567,8 @@ msgstr "" msgctxt "uses 'CQ Magazine'" msgid "You can find all the information and rules on the Website of the %s." msgstr "" +"Vous pouvez trouver toutes les informations et les règles sur le site Web du " +"%s." #: application/views/awards/cq/index.php:25 msgid "Awards - CQ Magazine WAZ" @@ -3636,7 +3642,7 @@ msgstr "Voir les 'non réalisés'" #: application/views/awards/waja/index.php:51 #: application/views/awards/was/index.php:51 msgid "Show QSO with QSL Type" -msgstr "" +msgstr "Afficher QSO avec type QSL" #: application/views/awards/cq/index.php:56 #: application/views/awards/itu/index.php:56 @@ -3677,7 +3683,7 @@ msgstr "Voir la carte" #: application/views/awards/waja/index.php:128 #: application/views/awards/was/index.php:124 msgid "Table" -msgstr "" +msgstr "Table" #: application/views/awards/cq/index.php:127 #: application/views/awards/dok/index.php:128 @@ -3747,6 +3753,12 @@ msgid "" "'Deutscher Ortsverband Kenner' (English: 'German Local Association " "Identifier')." msgstr "" +"L'Allemagne s'étend sur plus de 630 km d'est en ouest et près de 900 km du " +"nord au sud. Environ 70 000 des 82 millions d'habitants de l'Allemagne sont " +"des radioamateurs licenciés, dont plus de 40 000 sont membres du DARC. Le " +"DOK est un système qui fournit aux sections locales individuelles un " +"identifiant et signifie 'Deutscher Ortsverband Kenner' (en anglais : 'German " +"Local Association Identifier')." #: application/views/awards/dok/index.php:9 msgid "" @@ -3755,10 +3767,14 @@ msgid "" "or F41 Baunatal (location of the DARC headquarters). Note: A zero in a DOK " "is a common mistake, often being logged as the letter O." msgstr "" +"Le DOK se compose d'une lettre pour le district et d'un numéro à deux " +"chiffres pour le chapitre local, comme P03 Friedrichshafen (ville de " +"l'exposition 'Hamradio') ou F41 Baunatal (siège du DARC). Remarque : Un zéro " +"dans un DOK est une erreur courante, souvent enregistré comme la lettre O." #: application/views/awards/dok/index.php:10 msgid "DARC website" -msgstr "" +msgstr "Site web du DARC" #: application/views/awards/dok/index.php:10 #, php-format @@ -3767,14 +3783,16 @@ msgid "" "This information is provided by the %s. Information about the DOK Awards and " "its rules can be found %s." msgstr "" +"Ces informations sont fournies par le %s. Les informations sur les DOK " +"Awards et leurs règles peuvent être trouvées %s." #: application/views/awards/dok/index.php:20 msgid "DOK / SDOK" -msgstr "" +msgstr "DOK / SDOK" #: application/views/awards/dok/index.php:23 msgid "DOK + SDOK" -msgstr "" +msgstr "DOK + SDOK" #: application/views/awards/dok/index.php:37 #: application/views/awards/dxcc/index.php:39 @@ -3785,7 +3803,7 @@ msgstr "" #: application/views/awards/waja/index.php:33 #: application/views/awards/was/index.php:33 msgid "Worked / Confirmed" -msgstr "" +msgstr "Travaillé / Confirmé" #: application/views/awards/dok/index.php:80 #: application/views/awards/dxcc/index.php:120 @@ -3796,7 +3814,7 @@ msgstr "" #: application/views/awards/waja/index.php:80 #: application/views/awards/was/index.php:76 msgid "Every band" -msgstr "" +msgstr "Chaque bande" #: application/views/awards/dxcc/index.php:14 msgid "DXCC Award" @@ -3804,7 +3822,7 @@ msgstr "" #: application/views/awards/dxcc/index.php:15 msgid "'How to Count Countries Worked, A New DX Scoring System'" -msgstr "" +msgstr "'Comment compter les pays contactés, un nouveau système de score DX'" #: application/views/awards/dxcc/index.php:15 #, php-format @@ -3813,15 +3831,19 @@ msgid "" "DXCC List is based on an article created in 1935 by Clinton B. DeSoto, " "W1CBD, titled %s." msgstr "" +"DXCC signifie 'DX Century Club', une récompense basée sur les pays " +"contactés. La liste DXCC est basée sur un article créé en 1935 par Clinton " +"B. DeSoto, W1CBD, intitulé %s." #: application/views/awards/dxcc/index.php:16 msgid "ARRL website" -msgstr "" +msgstr "Site web de l'ARRL" #: application/views/awards/dxcc/index.php:16 #, php-format msgid "You can find all information about the DXCC Award on the %s." msgstr "" +"Vous pouvez trouver toutes les informations sur le DXCC Award sur le %s." #: application/views/awards/dxcc/index.php:17 msgid "" @@ -3831,11 +3853,17 @@ msgid "" "will find Deleted DXCC entities also in the lists on Wavelog. Be aware that " "these DXCC entities are outdated and no longer valid." msgstr "" +"Note importante : Au fil du temps, les critères pour la liste DXCC ont " +"changé. La liste reste inchangée jusqu'à ce qu'une entité ne satisfasse plus " +"aux critères sous lesquels elle a été ajoutée, moment où elle est déplacée " +"vers la liste des entités supprimées. Vous trouverez également des entités " +"DXCC supprimées dans les listes sur Wavelog. Soyez conscient que ces entités " +"DXCC sont obsolètes et ne sont plus valides." #: application/views/awards/dxcc/index.php:32 #: application/views/awards/iota/index.php:33 msgid "Include deleted" -msgstr "" +msgstr "Inclure supprimé" #: application/views/awards/dxcc/index.php:87 #: application/views/awards/iota/index.php:61 @@ -3871,7 +3899,7 @@ msgstr "Asie" #: application/views/qso/edit_ajax.php:245 application/views/qso/index.php:383 #: application/views/view_log/qso.php:256 msgid "Europe" -msgstr "" +msgstr "Europe" #: application/views/awards/dxcc/index.php:103 #: application/views/awards/iota/index.php:77 @@ -3902,11 +3930,11 @@ msgstr "Océanie" #: application/views/awards/dxcc/index.php:189 msgid "Show DXCC Map" -msgstr "" +msgstr "Afficher la carte DXCC" #: application/views/awards/dxcc/index.php:225 msgid "DXCC Name" -msgstr "" +msgstr "Nom DXCC" #: application/views/awards/dxcc/index.php:226 #: application/views/awards/iota/index.php:170 From aea8759b40415b0a61a8a34c94ed6f1f29352ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:07:17 +0200 Subject: [PATCH 26/56] Add container for SFLE input errors --- application/views/simplefle/index.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 60abadd1b..4c5757a0a 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -127,6 +127,14 @@
+ +
+
+
+
+
+
+
From ccae6f84f621abb709e18a92124a20cef75b92ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:10:28 +0200 Subject: [PATCH 27/56] Move error reset & check out of the loop --- assets/js/sections/simplefle.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index e45ddc435..f2724d02e 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -226,6 +226,8 @@ function handleInput() { var sotaWwff = ""; qsoList = []; $("#qsoTable tbody").empty(); + errors = []; + checkMainFieldsErrors(); var text = textarea.val().trim(); lines = text.split("\n"); @@ -309,9 +311,6 @@ function handleInput() { itemNumber = itemNumber + 1; }); - errors = []; - checkMainFieldsErrors(); - if (callsign) { if (freq === 0) { freq = getFreqFromBand(band, mode); From 246fc0ae6946b6a12448908246275d1f1e0c1422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:11:51 +0200 Subject: [PATCH 28/56] Move error presentation out of the loop --- assets/js/sections/simplefle.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index f2724d02e..ee0e353e3 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -415,9 +415,7 @@ function handleInput() { } prevMode = mode; - - showErrors(); - }); //lines.forEach((row) + }); // Scroll to the bototm of #qsoTableBody (scroll by the value of its scrollheight property) $("#qsoTableBody").scrollTop($("#qsoTableBody").get(0).scrollHeight); From cc19c20ae2d997ffecc0499638b5b2a029b63c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:12:31 +0200 Subject: [PATCH 29/56] Replace duplicate code with already existing function --- assets/js/sections/simplefle.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index ee0e353e3..70dbe0d40 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -434,9 +434,7 @@ function handleInput() { $(".js-qso-count").html(""); } - if (errors) { - $(".js-status").html(errors.join("
")); - } + showErrors(); } function checkMainFieldsErrors() { From 3221b0785b4498114ff6de2591bab71f1737f0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:13:16 +0200 Subject: [PATCH 30/56] Change error presentation appearance --- assets/js/sections/simplefle.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 70dbe0d40..7482f5c4d 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -478,7 +478,7 @@ textarea.focus(function () { }); function addErrorMessage(errorMessage) { - errorMessage = '' + errorMessage + ""; + errorMessage = '
' + errorMessage + "
"; if (errors.includes(errorMessage) == false) { errors.push(errorMessage); } @@ -528,7 +528,7 @@ function clearSession() { function showErrors() { if (errors) { - $(".js-status").html(errors.join("
")); + $(".js-status").html(errors.join("\n")); } } From d93945ce0a690fc91babe461fd5a9150ba97fa29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Mel=C3=ADk?= Date: Sun, 25 Aug 2024 09:14:11 +0200 Subject: [PATCH 31/56] Return empty string when band could not be determined --- assets/js/sections/simplefle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 7482f5c4d..ad85cf7bb 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -600,7 +600,7 @@ function getBandFromFreq(freq) { } else if (freq >= 300000 && freq <= 7500000) { return "submm"; } else { - return "Unknown"; + return ""; } } From 5d869c9cdd07da11730c3dc77a88f2c234900b7e Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 25 Aug 2024 08:04:00 +0000 Subject: [PATCH 32/56] po/mo updates --- .../locale/fr_FR/LC_MESSAGES/messages.mo | Bin 69144 -> 73576 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/application/locale/fr_FR/LC_MESSAGES/messages.mo b/application/locale/fr_FR/LC_MESSAGES/messages.mo index bbff137df395e98191840055c6f9516d1c16b5fa..b3a0fad573670dedf1fb4e0c3a55f8c903743abc 100644 GIT binary patch delta 23303 zcma*t37k#!B2f{h z5=ClI`No%&w2PFeR4CfMzt{VGK7;S~_x&&D@%VUtw(~ik^_(j$dp!Q+j`-LYRpK9Z zxaJmjoO<|mUB_7!?>H}XR<7f88SFUauq&3pepnWVSjS-{(mt$=VJw5UTJN*@%P^Jv z=dcU@h&3H2<|GbroC;+0L_KJjbt0-EzfFg*8tM6{`ipJ(3am^iaXOaA2-d;{n1GLBNuKYlwHYs3ci?>T_n~HB&~VdW8fv81p&AZh1)O8cZ$~}o zKGY06hE?!+)IfHimg+++iQiyMQ}zQ9`7?IF^H>&JjxZ1Eh)Q3B0UU(=umClHi67T69mu@f#G#qH|ZeloPVPM{ui8r8#JQ8Vxtmcvq`&B&^v zM&1}zF9r3WE~xrfV*(Da>2av`r=pf73-z4fXu4mK$Xr{n2$g;S)!<6hRIfp8z8BHO zU8o12u;t%lWzy$S9V?Y)td7cWjFqq>s$>0adTfk{8qTuL$LgdP+w>aLrg;t3u@9_Y zThCeJ$C%Ao4K-7pu{EaRLd-)A=q##(7f>@2D>>FXhfaA^Pn)2os1s_0*I4`6{Gq6k zj6rQSKWfUuNMD>AQ0*K*)jNjj_*rZ5apu0N$jrtZmx$J)1*(S~ur_u@HI#X^@#&qqDrK~%jJs0Tfd>d1D~-q~f#_u2AKPy_xR6LfrjBhnH}PB6zX1y!M=wU>2> zb)40Qnz0MR_0pMp^B*cTcRG^8C7q{wXDA)*OD<61E{Ini+aF8 zRKuU6Zaj%<=ucZ-<~pDRAg{*%f0iHy$JXcE(o z6R{iKk6m#us)6{)rd}6Ry*yO@8f=H3U?;3_y(#aDnu&Q>4HuvW@-WuLbul8Ef!(N{ zeqhrlP*Z;nb>l_U$P=cRDX)u4H^rLR4mAUVZTVR16q_GF%}f;ayc<#X#qO~cR-@MP zMN|*BVs+ey+SSLgA)ZG)sQOehG8gqiX@>Q&1FD_TsQgK&<2fDGfiP-D=3@h$|C@CX6tL#U8n~4p+^2Gs^OEU`ahvJQ>cz4_{?!_jjc%cN1c)|>NyLsJkNLT zCE}8?9P8j~sPFt?Y>F3=*Sga%-Ry}l&L_PdwdO4{9A`C7LUk-I({wBW^`IK4W7r5a zQWi?TLhlT#c*nd;AL3^ZnVT;>XsLsE+(*(-i{dnASt(H%HCfHK--< zVQq||UfqvkaeM)Fx;6%we??A{F%X+gH#dY(Jzj*Gkta}_a07ZH#9E|xqek)tmc}2j z4E~C$=gcqzD}lpFrlOYeLDUkSn8EyaB;w2QUjNQg6?N_xpgQ{kIg@bn({BO68?QBe27{Q8o2R6f{SPFNbIewKGd9(Q8V_AO}~$-|B3ZWY)blTtcqplm&VE4ot!iurn5)XWH+M zI)>NHWB%2F*<@(sH=rJT7iyC|Y||@HYroF=vdw=Jb^m*)`w!v>{1P=|ZF$RRX*yc_ zTGOy5`ROqt8u2{T5-dl}#CFuu>_pALLF*T&2c1Ukm5ZpQsCk2#k%rij^e9ZmJ8b@| zr~#cqZR)eArHhrg(KJvI)o@Kz&zqup*a|ygDr%(jPz}UTQ~Lm_gF8_(x6gV6HDkxI z3Z6j?sMt-WBUQ1s&VM~3I^Ug8yYhO}jeb;*XX0R-hw8v?RK2}e7Y`y0IX_@6EX9)Q zJ{Q%|7S`^lfek~opN7?R{-+Q$g;DDbsGi=6nvsW5n`sqlEw^F=e8=X0YxDoYYUGz+ zU>?v2Rlg0Y{T`_IMqgA12VzC;aYhl*@$g|C%*PhE7@OiY)VV*3$}e@ZInODm@`2b0 zgQz{U*yb0Y*7#%emIC$QGpLSTK=1sQT4+XE3sukzwWb|WGttMIhH4-aHMO~@S8oh8 zvini>m)QK(sQNFV+S`t5e=lmOK3-_g|1Y-SH(RmfEvCm+aX1wlqHYYL8oCiRvb${h zA?r$12R5Mg$Qw3)kM$6`ys^RmtApSP9s}ryx`OUF74#apIikkXS zsQY}FjCrVrSE8o)d0W2AdI&W`$58FW&JxiGFQ9HLal08oMO05~q22=xQJbhU>Vc`K z4ve<>>8KG0ZF+(A9_upeYSi;Knsm(BPDBm9i)!Eq>VcW7b9EJM)UWADJ&!~p~M0K#neWu+8=#p-Nnz4S^3V_`1pciV2``h#=OdvfTb?mZGdt?^s0Si&5Wd)YUEm#G2 zVRifnRsRRn{TET~$I2{aU5Qk~;aG^;167up4mHN!q+4M%%(X5=&CpU*$5z<<^{9co zg?iv#RK3Hf4t;L(e=_Nq^Cywk6jXfF^t1=61EaA5W}r^TOzVAEpY-#n&+xlA9#5i{ zpx1J9jQgSPpNM5}nsp{>iRPpC`~OxVHiPIq%tmgQy1{MNMI~C(Nd+huuhz#a_4= zyW>IBOjTH6*0cduC7pylu@5%Fg;Jz!-uR^1ynkU#o1x}YX6+MEYc&hCRySfz zTx?y7HAwG7?S+p}Bl;dy{}0qmC9E{h3pc>wY>iBll4DCbB#4#*` zKil#@a0=;iFE9w4f%SR5vzbU`G7eyQJcfGU8JqsgrpvB3Q(FsFo`R*ZCu&a&#Nv28 zsw3&Pd^UC^y#O2GHcY|Kunf<45;m9z*Fx>$rl=|Hf?CU-*c2zAi#K6IeA1@hz!s#B z+WfLFnyGDRZHF3IH`JaPfa-9%%6Yyshe!onfC+dXzKc(wW@g$(vu1O#9_iaq$M9*? zdEbg!%Y9f8KSZ^20`;JCsDYH-WXc<(>bJ+3HcNLRvKNlVepn8dp{95>YAx4e0Jq>Z z*l08FeVmG&@L#B7*r~uAyD+NV&DaaKU*br%+S( z9BM>cunO+MO87BqGoC`dXwKX8AE+5B`Ld~3AGM@O){dx|>hUu3ugFj`)PYG@88cCv zX%?y@^H2@miY@UmRQ)}u4(vw_enz!(!RD8J#cax}Q0;WK>ESUV)yc@P&b0;i zqZ(X|&G2Zy|9*;?whpdY8Bx;66ziR4FKy@@WortD(CTgk| zphk8tYV9Ak=@qCwu?B14W>o!mQ8REDXW>^^4JT|h1IR@!>20Xvw+c1myOH)|&WA+Q zz!#_i9I&CYy!2f4+4gYL6_!y0{!w{}oh+c4IA_ z|KmielJO_HSm`zMpcGUCeXV1$1?enof{U>ZzHG}6pgQ~&sw01+X0XKTrkw<=NxC6w zz@5?i_rE?wx{@&pwdwA*74Ek#M@{`Rs43rsn!+8Zk?%+CjYC)uPuO&^?PjT}q3X3l zbtoCN7rJ7Mqv-S`qFsI#o8e!m2Q=AXZtQ@1Kv(M!>txhOLZ}YTL(SOjs0S>?#`pwk zM&3jX;2l&)Kit9mYfXP4BM(cwVLCF)x&YPiU8t#h1hs}6Z2orCh~Bm7_pM*p{8OmY zbr#iuGCR%ERYIjZ?u?l!??Hxo)(h3(Fw_i;L%o`_P&Y(T9h#4-cL(aUEJlrZ8R~Sb zK+VLQCSC74E9@HH*#Y0dxPDVX2X!G-J{v9^G4C_<=946sAsFD7L zy1&9(W)nBCrl2~~7gcWrCSuHQE8L6f`BSL1*@6x61DigFZAe!xG!6Acjd-wiB&s9h zP&0WOYNj4U&Cm+ejIBWp>_u#*^Z$y?_#AcP*QgtQwqCTx?J_e}2DK!$QS}m0BWsH^ z=ybzY=)=Z%FLuLCs2Tp=`Zs$2|4*ge<}V<%Q4RFR4w#Dr@oCJ((>NX{?%}P7n{Xr! zc$>cy;4;*RC%@}yQ6Y5m-!qPaxI>DCvP!FDgkHqm2L!G+1?=k<~i6jx}htqK|6*i)#_K$sL zM8)?TE22777uC^rsCs=-4Gu*Yr(j)NfU5tvEiXXL$Q~Sqd-t>c{fX52r}-}*Q?Lc; z*HBY-0`;K3tQ8NK7g8hCh?-#~?1>urNGyXBu_R_-Z=8;4_=43rX#UDK<{d42~4vQZ$@A^(yiS#I&PDefPMtp^ty94$0yXHePV`-=XOu=S26ZOql zX3Gm=M5>VS2CCurQD3*?I0pYhb!_xuGj*%6Jn6NlhF``Md>gCcMbyky_{c0pQ@o0F ze^h<|wPZJ=W-zvhNOdAl<0^a=m*J!%W=hYaUNnDWMXdL+*=(&bo^*HA{k>2f8izG8 z+vYE@K7u+OFJM`G6&Xm(DI}tX4qyZP5NqH$)YO;z#QclKHK>k6F##XMTDTI`fo+(K z2T&b}`_!~o6*Xh+P#x%rTB0FdKI=b~NNX~3QERyz)!=GWN4BBf2M1A0RPrnf~EdY|<>)bTCxIrs8>r>P>CiXG91y>Kaxz#}*sn}1>Q=cDpp zM~$@nm!@M4unFn5s1A=ooq|QSd@*X~R-#VJMvQ67w-RZIN3b>)KWc8Qk6M~0SOQzv zbX(LW>VR6y9yUDy^}rFRb3P7x;I*iZE=A4oI?Ta>qpZIga=$V+G)GNcYt&{Nhgz#F z)D+Lh6nql3)(24|Eq2W8h0d5ydL(Kfdr&ia6nkNfvtV$rUIyrEy1q%xb-mhB3jV;hKQ z3AWmTH?bt?Pf-mY!`^rr^Wg2!-Yu+4Hu`AZYp{S7sFbU__{AW>nVi)RxAD}vL3iV3< z6-!~+(`J)bLGO83i|0Eo5xq#dqFxjuu_fkUQ(TIza67iZ?@&`(^?UQ;O2I_Z*JB&J z9aaA&EQ?369G*taz;CFIIX^I48c{VOn)1e|k*A<;?1LK7Fw`;3!16f9rf);d&~hw} z>rs1Q6KX~Zt%pz#JdPUZZ>Xh8_>uWnM)HrQ0|QVG7;8<(4ALRgN97Qz;nS!o`~%f+ zi8IF9sCsQs1L%hu&`7L^KGY1(!~}fo4D;We$a7?91mB?6>Xh{tR0F?b2`u-M8DVAY zLb@?l#7Q~hZh$EZh9BR_%~@iFT;R7XpmH%n6wHS#8&tbZ~Q-O$529JM4(Hn|W|w z>_EOBtKxFhCfk5*@D)tMukjx2a>479vm5om*DspS?LO4VyZvrvwm-(yvm7GYRCl0y zeh;dLEAiSm{?dVMNmu#PY|=icV|qQ7#2KhP5k|e37NBNk1?tp1i|ued>N!VI13K|1 z=f5M7I)9lL!bnUZ9me83cr_;C+P}^2KJYK|m8;^!d4H!Hilr&P0}Hrsaa^4Do3L-O zIB!NKqmTSeI1a1Q=nR~WSL5O0u{duEtHsB8J?euR(QNe2G4>{XJNCqPFc(Xgi1Rk- zEYz`m7&X#Os7<&9HA8QrHuZkg)c=m!TO~`H`qg7Zijh&*+5lCt5o+_aK{ebHbu9a# zHsx5GpN(}$2eBS5vgK>A2I;L>6Az${^GVd#@+|5(u^Oe~w1J(gFb``ppAGRY)C@d_ z!*DaIA*YOKpcZN*-K~RB9hivP3$suiz7@3>9zyM@Cr|?@K#qCL*+WDRJb^j|CCZvL zY>lee4>g4oP;bOrtuLT9(Fb?~mf@ecv~;&)6TBDI;mxR-*lYa?HS!DS{r|u5<>QX@o>Mi>iRl$vnMf2nqek`uYRa~trf|RY8=L<(YS&kI zUV>VhW2l*NYMDLI5Brduhf{GoUWW~8n`1igDSrqRDzwam~TE@L7C;N-GI7ZRH2ZSHl(QML+U1J4M%A z>gN_EaGB2k?L^v9`7J6JQbAWf9<&X9VzRtHqvY2id}hnixNj6`t+lSEm}m1 zn5a{Qdi(7??@|5>@u$6dF;n9w=tZVpD9=&wExvAVP>q)4HP%hUy^V*D6aHoE93bA4 z_}$d|m{4@pCjKso4%n8^kdEl;K;2@B>-lp?j3P0b_zvQ)*aki%-IGv>vME?}jj)Z( zCL^A@JqVr2+eo?r)+(xq(`k#w^B}^i{ zS@VAl5355sNCWzBcsj42+6T-h&4F;T$os|S{fb-3({+M)DZ>4PbL5R7{Db^|k{&|* zE_~Cg$%hLM5+;*37Q6CHUyMJhkfG~i!=*p3p#fd9@lO+VdSPwuX=m?I_9DuglkS1% zm2t&YNW3g%ZMo-O;!|-Z;R)*2BtP~8k#7kn2`Lm*BlB9qaN-*=Kz@5{M%Z~p!-_Vd z>~pM1-HwFD)M<(*@xNWI$ehYO*W1EzX8&KVsyAT{;VT;GZnJ|}n^2N)n46bVHjszR zz}v{v+pOqXZyy|`{6U+kU&de9_&L;ODF%1ktn+M(9l;T zdK2Ct{wQVj2;-=zuU65OO}aN>0c9OMpmX&d81dFg6I><-e|)GxaD!R&p2 z-mvvjDC38c^CK1R(!pv?L;AG(2(yar!p8_dP~lOsI6!!VvU_nGq3Eh%JJgWI z%MtI4X9&xvvu}y7XHAxx-%jL|p!6mTVn0f|5`UkvIN}-P)xvMc<41^-M*MHeYLUMk z=jlGe5#rOyOCbIoL7z?^bsLfQ03Ic;4?$M~d0EAI)tse3S6yp83Mx{mKcPAKO-OIG zWeZf%UQ@_RxA`q>qaRq4tVMNSyCOZF_ze`C!ZCW)T_ExZ;bk(PAyngmooHCU9v2aG zbtJq__=5cPIGQ>Ok)Kq~Q{>IUQsgxv-Ut6dx-0SH7)Lrlc$M^Sg04KgnlRX#f0O5Y zPUSlZbEvGVjlo$;o~{doE`%FNC)tKRwPnAOe=B)6Vt4K@W82^_FitY@VdVR4-3;Qo zno{3;ekYT5Tq=|%UWtOUIDi`$+6Rrds%k46??HKpFq-sVD&V@>;QcM-CgNo%OQcR0 z!d0~YJ$doOy{j0{pHP$_XCf8m*~X_@E#5zg>87WtGnp`ug6j!k?(anUpM*Mub%fQ_ zn`Lhtii5~oO9+rZi27~pGba{j{N+g$EyI2)Oyh=?grc|5&%}S_=D!HXC@+my;m?G_ zlno%Xr;YOXpI0(<=Tg>;f+r|%Xe(?YUV;4Y^fswZKlYYQWT4udYb$LfzL>lp3BM6O zBmE3s#3r^*Dh?uDbiGI93tLv7x>>~aHx*rfkS@Bm5ou1@V*S)vLSm8~&DHki4djix z;)b%6ud!tltVNCGlfLPSy2`(qFoS!(CjU3$yQx!*_y|G)>1m|fVP$>lblpNmGlH(x zIM#OPeQvnk=0~tU>38uxn|G1)cH(~2m5AjC)rt4P1VS^~N+jLZ-m?+EC;w5x5Uu|w zWE3MzrP9r$A0{jy+(?*6(6tI{P-hs8{XzO8;x`i>B0rDxW5jn7pJ3}(rk-o#gNeUG zowup;IC=LI_mj5*V{Q4PB#9{$?xS!hab1(KJb879e?$Ig;<}!)1FH;s62 z%5#aYu;r?|O?gV=Awp|g)}MM+34iJQ>w1zxU9S>er_!6G`w}8lnnPX-LPyeF@gzal zDnbcDyb@gNu6XeE+?PxJKM8*jbWNwcBjI`CEh*niyr<5;u47bcf&*>kIQ)S0eT21C zyp41XJYdW3Ag-&8br|_o32Vu#OjvF6RVR`Bx;${^6?v1$J4JfFp5IxuxXKV7B=a@G z-NcXE8>$iSO9K~_&yBiDS|7qYNPk4xQNp`~YY2_0KbidE#Q%wVZ2jx7HECUs5@Ij$ zM+++VrQ&wN8I^EtA->n%r1XcRUHp#lKKY$VziP|x!Ik9yM4qmvygx7haf7Y5hb;XU zhq<nlDeaV?aH$vL1W@=7!gDtLJY{#izS#%LS zeV%X~jhw^MgkFR;)Oi_;lV1^ogf8Sgz)#w$vGL?)5>m;{!CNp)I7N#&Sd*Gl$p4!3 z5z<3(33?a#wJBdiI-mF}WY))YLaGAkPB@r4&l3EkKcQ|zLPg^D=#};`kr4!4lPLHX z4#v&g@GmU7MiCi6s7Ai7b%d&vk0A`OdDq$cJFMNw|CunB^a<5*+q(V2;ZQiz&2?N~ zFw74dn-;=Ff1zA92Tr!ZZAtt=-=4aQ|$#?*un3BNPq(h8J$k4++n*i@MEwQf!CB?X^&XvCl(FRS*r^Gv+_b(UhByQspSC1v z+``y!U#{QjJ0UgIjreo?8PPx}7(YA|EXs@0wTPP)3cHCsHPs)C=7;CHsX6)StrO|C z>znNhXS(UWh(FT}1>M5uPBS{52#?>oTDL)*_ z^E>@!`RQ3Y{Vg~$xkrguIM)}P>-y(J{Te}tQnyq4WOqicn-vb_y8V1~hnXJlN6mlG z?+fS5b-N~Ct}{Foj%KS;S|~r7o#gfoGp(;277Y@w|WU@U1!OQ@$d|!^66UyMvjO>^%FRB*2r|}r- z1*3ti0Mnq+=K6iX2y5!kk47@G$s7@mMwlbbpF6}K4En=~Zu5S@X*q#Nb~iWCjMN?K zwca}t31tL)+AHp$OYJ7MNOA`FqwaukATu(vpkBuGlCj)8rjUtnhlis6Zte)JLNt); zXA#*K8DVy6INO{!Fupy!{jQ=lTM4JU?j5h(!ZA+KC!obgml= zF$LTeb|b!MED&MDk$-;}OGxSL>_A4g8;H8IeN1a+rcM`AYO>Wul`-SF?3_&P0k3}? z5p7fTCCQx_%4d3Wa@;KDpG|7YyfJv43HW0)of8RZTkCe_k}bicjc0T@p=n8OAHR2k zysf}?%=Sm@B-jSb24eSRddI`trY3Sp5tHA`Of{Z)KTs*-!$L6K#+-u zc)QA;PYq;jnzxB~O=yQICpW|~$_wS?=lIxQx%4(a?1p`rfsmVP+tD`l>hhAvv5Q(% z#uSEi4)gLjg-mdas)K#Od>=`_B=z2Pm+Vv*Kmg<|7=_c|*^C!lS$!6!$=9EjlC2ilC ze6!{jb{xJR0p?Ra<_I}3)-%1TdaR# zDl5PdX0zq$HOw~S$-cP}?Y<~`wQwCDg8U$FtNdAhU%vNNFI>w@hjSd^)2_EbV!`B9 z(YPvUyd(7yS5Z!4Z@%#b2UdSnq0;62eD52vWXdhH!F0xBdoQXxy1dgZmhMNsYFq4 zI+(^H%G0MlOshQDeCmgq_muj_4$=4C+Zi+S1KM)oATJ|d{v3X;c|X?7yIHGJ^drDe z2lR!!^vU-H(;0Kry<)}x@1K3gKAIHo>t49-ik(GeHEq88+KkilBQx_83!ic`{4Nn~ zS$|ABhW(;l!22nZ<%_U;y;;|kU4CpN#I~R(Y@?irs~O{4z_#ID-*nz+JfJn-H17sX}Y|#rAEV-e>tRu=F*lvW*GrBr2~=CRh{_v_B5NJ^hhYD zaBWnje94%cOPkUA4M8WDEPlIjCH-39)pMy21)JX94}elPQ%)rHyd; z0h8fI`Pty|`=Q{blU+)d7~|8AhnIi65Mu{l`mpoX*Szs}l6*}rt5CQo>WfC&j198A z=#ENrSUztuif;2xr1?}9ea1Br-b$KZ83FAc4k;hHOh5bNibuxOBtIp5;rvVcE014} z0c|e{yIpR6)Nq3fJ*XXKQErwQI8jSy`9QiubcP zFQ6v8A0e&vk>Sg6`PWD6ik}~|_m$NEP2(Q( zKH`_gXkM&g?XPa`*q}Sl>zubY>8w6Dnr`p-g~R&Qm(i9p&2N5A5XWqmHm5%r_D|C| z*#f4wIyYt>MkE!yaOPyy8e_t~S^WIa>;BU3j>2_IRxBI1^wZ*TclNLch@ay5+Q?do zD}FDS)4@=$_!(k8SNeEt85bY7u}sW6h|K#ePR{?UIaWiD;Oj6=+P0WK@0W;XhjyLR z|J4hfEc2SCNZ&X5L`^nmWa@wGFz5dA?+ovu`Mg$&9-HSk6Il41*4yi|-YMR*^;ZIR Mi0d6;z4n~{0hJ%{#sB~S delta 18918 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 Date: Sun, 25 Aug 2024 10:21:17 +0200 Subject: [PATCH 33/56] CR: Clear errors when logging session is ended --- assets/js/sections/simplefle.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 13667a126..7862c0e65 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -524,6 +524,8 @@ function clearSession() { $("#contest").val(""); qsoList = []; $(".js-qso-count").html(""); + errors = []; + $(".js-status").html(""); } function showErrors() { From dc0138b7189413bba100b45b2a879527824172e9 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Sun, 25 Aug 2024 11:15:09 +0200 Subject: [PATCH 34/56] fixing UI --- application/views/simplefle/index.php | 6 ++---- assets/js/sections/simplefle.js | 6 +++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/application/views/simplefle/index.php b/application/views/simplefle/index.php index 744bb4e43..8f618b969 100644 --- a/application/views/simplefle/index.php +++ b/application/views/simplefle/index.php @@ -126,12 +126,10 @@
- -
-
+
-
+
diff --git a/assets/js/sections/simplefle.js b/assets/js/sections/simplefle.js index 7862c0e65..6d5d7528f 100644 --- a/assets/js/sections/simplefle.js +++ b/assets/js/sections/simplefle.js @@ -526,11 +526,13 @@ function clearSession() { $(".js-qso-count").html(""); errors = []; $(".js-status").html(""); + window.location.reload(); } function showErrors() { if (errors) { $(".js-status").html(errors.join("\n")); + resizeElements(); } } @@ -822,6 +824,8 @@ function resizeElements() { var textarea = $('#sfle_textarea'); var textareaOffset = 40; + var errorMessagesContainer = $('#errorMessages'); + var tableFrame = $('.sfletable.table'); var tableFrameOffset = 140; @@ -829,7 +833,7 @@ function resizeElements() { var tableoOffset = 160; if ($(window).width() >= 768) { - var newHeight = $(window).height() - textarea.offset().top - textareaOffset; + var newHeight = $(window).height() - textarea.offset().top - textareaOffset - errorMessagesContainer.height(); textarea.css('height', newHeight + 'px'); var newHeight = $(window).height() - tableFrame.offset().top - tableFrameOffset; From f6bda03f301a0ad5ddf2512da1a7c122fcbbdded Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 25 Aug 2024 10:43:32 +0000 Subject: [PATCH 35/56] po/mo updates --- .../locale/bg_BG/LC_MESSAGES/messages.po | 34 +++++++-------- application/locale/bs/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/cnr/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/cs_CZ/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/de_DE/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/el_GR/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/es_ES/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/fi_FI/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/fr_FR/LC_MESSAGES/messages.po | 42 +++++++++---------- application/locale/hr/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/it_IT/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/nl_NL/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/pl_PL/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/pt_PT/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/ru_RU/LC_MESSAGES/messages.po | 34 +++++++-------- application/locale/sq/LC_MESSAGES/messages.po | 34 +++++++-------- application/locale/sr/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/sv_SE/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/tr_TR/LC_MESSAGES/messages.po | 34 +++++++-------- .../locale/zh_CN/LC_MESSAGES/messages.po | 38 ++++++++--------- assets/lang_src/messages.pot | 34 +++++++-------- 21 files changed, 363 insertions(+), 363 deletions(-) diff --git a/application/locale/bg_BG/LC_MESSAGES/messages.po b/application/locale/bg_BG/LC_MESSAGES/messages.po index 7f883bd12..69237f908 100644 --- a/application/locale/bg_BG/LC_MESSAGES/messages.po +++ b/application/locale/bg_BG/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" -"POT-Creation-Date: 2024-08-22 13:37+0000\n" +"POT-Creation-Date: 2024-08-25 10:43+0000\n" "PO-Revision-Date: 2024-08-17 10:46+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bulgarian \n" "Language-Team: Bosnian \n" "Language-Team: Montenegrin \n" "Language-Team: Czech \n" "Language-Team: German \n" "Language-Team: Greek \n" "Language-Team: Spanish \n" "Language-Team: Finnish \n" -"Language-Team: French \n" +"Language-Team: French \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1065,7 +1065,7 @@ msgstr "Clublog" #: application/views/search/lotw_unconfirmed_result.php:8 #: application/views/search/result_search.php:7 #: application/views/search/search_result_ajax.php:4 -#: application/views/simplefle/index.php:144 +#: application/views/simplefle/index.php:150 #: application/views/statistics/custom.php:60 #: application/views/statistics/custom_result.php:62 #: application/views/statistics/custom_result.php:88 @@ -1099,7 +1099,7 @@ msgstr "Mode" #: application/views/qso/components/previous_contacts.php:79 #: application/views/qso/edit_ajax.php:142 application/views/qso/index.php:177 #: application/views/search/search_result_ajax.php:5 -#: application/views/simplefle/index.php:145 +#: application/views/simplefle/index.php:151 #: application/views/user/edit.php:230 application/views/user/edit.php:252 #: application/views/user/edit.php:274 application/views/user/edit.php:296 #: application/views/user/edit.php:319 @@ -1126,7 +1126,7 @@ msgstr "RST (E)" #: application/views/qso/components/previous_contacts.php:80 #: application/views/qso/edit_ajax.php:147 application/views/qso/index.php:182 #: application/views/search/search_result_ajax.php:6 -#: application/views/simplefle/index.php:146 +#: application/views/simplefle/index.php:152 #: application/views/user/edit.php:231 application/views/user/edit.php:253 #: application/views/user/edit.php:275 application/views/user/edit.php:297 #: application/views/user/edit.php:320 @@ -1243,7 +1243,7 @@ msgstr "Etat" #: application/views/search/cqzones_result.php:12 #: application/views/search/result.php:33 #: application/views/search/search_result_ajax.php:13 -#: application/views/simplefle/index.php:147 +#: application/views/simplefle/index.php:153 #: application/views/stationsetup/stationsetup.php:125 #: application/views/timeline/index.php:257 application/views/user/edit.php:130 #: application/views/user/edit.php:238 application/views/user/edit.php:260 @@ -1336,7 +1336,7 @@ msgstr "Distance" #: application/views/search/lotw_unconfirmed_result.php:9 #: application/views/search/result_search.php:10 #: application/views/search/search_result_ajax.php:15 -#: application/views/simplefle/index.php:143 +#: application/views/simplefle/index.php:149 #: application/views/stationsetup/exportmapoptions.php:31 #: application/views/statistics/custom.php:53 #: application/views/statistics/custom_result.php:55 @@ -1749,7 +1749,7 @@ msgstr "" #: application/views/logbookadvanced/index.php:527 #: application/views/lotw_views/index.php:43 #: application/views/simplefle/index.php:20 -#: application/views/simplefle/index.php:171 +#: application/views/simplefle/index.php:177 #: application/views/stationsetup/exportmapoptions.php:5 #: application/views/statistics/custom.php:31 #: application/views/statistics/custom_result.php:33 @@ -2234,8 +2234,8 @@ msgid "" "encryption_key in your config.php file first!" msgstr "" "Vous ne pouvez actuellement pas usurper l'identité d'un autre utilisateur. " -"Veuillez d'abord changer la clé de chiffrement dans votre fichier config.php " -"!" +"Veuillez d'abord changer la clé de chiffrement dans votre fichier config." +"php !" #: application/controllers/User.php:1206 msgid "Invalid Hash" @@ -2803,7 +2803,7 @@ msgstr "Rien trouvé !" #: application/views/search/lotw_unconfirmed.php:33 #: application/views/search/lotw_unconfirmed_result.php:6 #: application/views/search/result.php:11 -#: application/views/simplefle/index.php:142 +#: application/views/simplefle/index.php:148 #: application/views/station_profile/edit.php:63 #: application/views/stationsetup/linkedlocations.php:17 #: application/views/user/edit.php:123 application/views/user/index.php:4 @@ -2887,7 +2887,7 @@ msgstr "Différence de données DOK entre votre journal de travail et DCL" #: application/views/search/cqzones_result.php:7 #: application/views/search/result_search.php:4 #: application/views/search/search_result_ajax.php:89 -#: application/views/simplefle/index.php:140 +#: application/views/simplefle/index.php:146 #: application/views/statistics/custom.php:38 #: application/views/statistics/custom_result.php:40 #: application/views/statistics/custom_result.php:85 @@ -2923,7 +2923,7 @@ msgstr "Date" #: application/views/search/cqzones_result.php:8 #: application/views/search/result_search.php:5 #: application/views/search/search_result_ajax.php:91 -#: application/views/simplefle/index.php:141 +#: application/views/simplefle/index.php:147 #: application/views/statistics/custom_result.php:86 #: application/views/timeline/index.php:256 #: application/views/timeplotter/index.php:5 @@ -8597,7 +8597,7 @@ msgid "Remove" msgstr "Enlever" #: application/views/qslprint/qslprint.php:33 -#: application/views/simplefle/index.php:133 +#: application/views/simplefle/index.php:139 msgid "QSO List" msgstr "" @@ -9293,7 +9293,7 @@ msgid "" msgstr "" #: application/views/simplefle/index.php:17 -#: application/views/simplefle/index.php:170 +#: application/views/simplefle/index.php:176 msgid "Syntax Help" msgstr "" @@ -9403,24 +9403,24 @@ msgstr "" msgid "Enter the Data" msgstr "" -#: application/views/simplefle/index.php:148 +#: application/views/simplefle/index.php:154 msgid "Refs" msgstr "" -#: application/views/simplefle/index.php:160 +#: application/views/simplefle/index.php:166 #, php-format msgid "The Refs can be either %sS%sOTA, %sI%sOTA, %sP%sOTA, or %sW%sWFF" msgstr "" -#: application/views/simplefle/index.php:167 +#: application/views/simplefle/index.php:173 msgid "Reload QSO List" msgstr "" -#: application/views/simplefle/index.php:168 +#: application/views/simplefle/index.php:174 msgid "Save in Wavelog" msgstr "" -#: application/views/simplefle/index.php:169 +#: application/views/simplefle/index.php:175 msgid "Clear Logging Session" msgstr "" diff --git a/application/locale/hr/LC_MESSAGES/messages.po b/application/locale/hr/LC_MESSAGES/messages.po index 017d4af29..3a11c7aef 100644 --- a/application/locale/hr/LC_MESSAGES/messages.po +++ b/application/locale/hr/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" -"POT-Creation-Date: 2024-08-22 13:37+0000\n" +"POT-Creation-Date: 2024-08-25 10:43+0000\n" "PO-Revision-Date: 2024-08-17 10:49+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Croatian \n" "Language-Team: Italian \n" "Language-Team: Dutch \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Portugal) \n" "Language-Team: Russian \n" "Language-Team: Albanian \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" "Language-Team: Turkish \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: LANGUAGE \n" @@ -1043,7 +1043,7 @@ msgstr "" #: application/views/search/lotw_unconfirmed_result.php:8 #: application/views/search/result_search.php:7 #: application/views/search/search_result_ajax.php:4 -#: application/views/simplefle/index.php:144 +#: application/views/simplefle/index.php:150 #: application/views/statistics/custom.php:60 #: application/views/statistics/custom_result.php:62 #: application/views/statistics/custom_result.php:88 @@ -1077,7 +1077,7 @@ msgstr "" #: application/views/qso/components/previous_contacts.php:79 #: application/views/qso/edit_ajax.php:142 application/views/qso/index.php:177 #: application/views/search/search_result_ajax.php:5 -#: application/views/simplefle/index.php:145 +#: application/views/simplefle/index.php:151 #: application/views/user/edit.php:230 application/views/user/edit.php:252 #: application/views/user/edit.php:274 application/views/user/edit.php:296 #: application/views/user/edit.php:319 @@ -1104,7 +1104,7 @@ msgstr "" #: application/views/qso/components/previous_contacts.php:80 #: application/views/qso/edit_ajax.php:147 application/views/qso/index.php:182 #: application/views/search/search_result_ajax.php:6 -#: application/views/simplefle/index.php:146 +#: application/views/simplefle/index.php:152 #: application/views/user/edit.php:231 application/views/user/edit.php:253 #: application/views/user/edit.php:275 application/views/user/edit.php:297 #: application/views/user/edit.php:320 @@ -1221,7 +1221,7 @@ msgstr "" #: application/views/search/cqzones_result.php:12 #: application/views/search/result.php:33 #: application/views/search/search_result_ajax.php:13 -#: application/views/simplefle/index.php:147 +#: application/views/simplefle/index.php:153 #: application/views/stationsetup/stationsetup.php:125 #: application/views/timeline/index.php:257 application/views/user/edit.php:130 #: application/views/user/edit.php:238 application/views/user/edit.php:260 @@ -1314,7 +1314,7 @@ msgstr "" #: application/views/search/lotw_unconfirmed_result.php:9 #: application/views/search/result_search.php:10 #: application/views/search/search_result_ajax.php:15 -#: application/views/simplefle/index.php:143 +#: application/views/simplefle/index.php:149 #: application/views/stationsetup/exportmapoptions.php:31 #: application/views/statistics/custom.php:53 #: application/views/statistics/custom_result.php:55 @@ -1720,7 +1720,7 @@ msgstr "" #: application/views/logbookadvanced/index.php:527 #: application/views/lotw_views/index.php:43 #: application/views/simplefle/index.php:20 -#: application/views/simplefle/index.php:171 +#: application/views/simplefle/index.php:177 #: application/views/stationsetup/exportmapoptions.php:5 #: application/views/statistics/custom.php:31 #: application/views/statistics/custom_result.php:33 @@ -2747,7 +2747,7 @@ msgstr "" #: application/views/search/lotw_unconfirmed.php:33 #: application/views/search/lotw_unconfirmed_result.php:6 #: application/views/search/result.php:11 -#: application/views/simplefle/index.php:142 +#: application/views/simplefle/index.php:148 #: application/views/station_profile/edit.php:63 #: application/views/stationsetup/linkedlocations.php:17 #: application/views/user/edit.php:123 application/views/user/index.php:4 @@ -2831,7 +2831,7 @@ msgstr "" #: application/views/search/cqzones_result.php:7 #: application/views/search/result_search.php:4 #: application/views/search/search_result_ajax.php:89 -#: application/views/simplefle/index.php:140 +#: application/views/simplefle/index.php:146 #: application/views/statistics/custom.php:38 #: application/views/statistics/custom_result.php:40 #: application/views/statistics/custom_result.php:85 @@ -2867,7 +2867,7 @@ msgstr "" #: application/views/search/cqzones_result.php:8 #: application/views/search/result_search.php:5 #: application/views/search/search_result_ajax.php:91 -#: application/views/simplefle/index.php:141 +#: application/views/simplefle/index.php:147 #: application/views/statistics/custom_result.php:86 #: application/views/timeline/index.php:256 #: application/views/timeplotter/index.php:5 @@ -8441,7 +8441,7 @@ msgid "Remove" msgstr "" #: application/views/qslprint/qslprint.php:33 -#: application/views/simplefle/index.php:133 +#: application/views/simplefle/index.php:139 msgid "QSO List" msgstr "" @@ -9135,7 +9135,7 @@ msgid "" msgstr "" #: application/views/simplefle/index.php:17 -#: application/views/simplefle/index.php:170 +#: application/views/simplefle/index.php:176 msgid "Syntax Help" msgstr "" @@ -9245,24 +9245,24 @@ msgstr "" msgid "Enter the Data" msgstr "" -#: application/views/simplefle/index.php:148 +#: application/views/simplefle/index.php:154 msgid "Refs" msgstr "" -#: application/views/simplefle/index.php:160 +#: application/views/simplefle/index.php:166 #, php-format msgid "The Refs can be either %sS%sOTA, %sI%sOTA, %sP%sOTA, or %sW%sWFF" msgstr "" -#: application/views/simplefle/index.php:167 +#: application/views/simplefle/index.php:173 msgid "Reload QSO List" msgstr "" -#: application/views/simplefle/index.php:168 +#: application/views/simplefle/index.php:174 msgid "Save in Wavelog" msgstr "" -#: application/views/simplefle/index.php:169 +#: application/views/simplefle/index.php:175 msgid "Clear Logging Session" msgstr "" From 95163aa0c7312267084c4b1e2c0c4a4610783406 Mon Sep 17 00:00:00 2001 From: Filip Melik Date: Sun, 25 Aug 2024 08:46:10 +0000 Subject: [PATCH 36/56] Translated using Weblate (Czech) Currently translated at 18.1% (356 of 1958 strings) Translation: Wavelog/Main Translation Translate-URL: https://translate.wavelog.org/projects/wavelog/main-translation/cs/ --- application/locale/cs_CZ/LC_MESSAGES/messages.po | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/application/locale/cs_CZ/LC_MESSAGES/messages.po b/application/locale/cs_CZ/LC_MESSAGES/messages.po index 57058c700..5d6446a9e 100644 --- a/application/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/application/locale/cs_CZ/LC_MESSAGES/messages.po @@ -4,20 +4,21 @@ # # Ondřej Koloničný , 2024. # Michal Šiman , 2024. +# Filip Melik , 2024. msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" "POT-Creation-Date: 2024-08-22 13:37+0000\n" -"PO-Revision-Date: 2024-08-17 10:47+0000\n" -"Last-Translator: Michal Šiman \n" -"Language-Team: Czech \n" +"PO-Revision-Date: 2024-08-25 10:43+0000\n" +"Last-Translator: Filip Melik \n" +"Language-Team: Czech \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 5.6.2\n" +"X-Generator: Weblate 5.7\n" #: application/controllers/Accumulated.php:13 #: application/controllers/Activators.php:13 @@ -89,7 +90,7 @@ msgstr "" #: application/controllers/User.php:1247 #: application/controllers/User_options.php:9 msgid "You're not allowed to do that!" -msgstr "" +msgstr "Přístup odepřen!" #: application/controllers/Accumulated.php:21 #: application/views/interface_assets/header.php:150 From 9fb1151e8b7664a444dfa26061785e188a5a6284 Mon Sep 17 00:00:00 2001 From: HB9HIL <80885850+HB9HIL@users.noreply.github.com> Date: Sun, 25 Aug 2024 12:44:53 +0200 Subject: [PATCH 37/56] added OK1GOD to contributors Thanks for your contribution @filipmelik :) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index defe920c8..ff7af1603 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Wavelog-support can be reached by creating an issue here at github. If you've an Special thanks to our contributors, who are part of Wavelog by improving code! -[F4ANS](https://github.com/abarrau), [DG0TM](https://github.com/dg0tm), [DG9VH](https://github.com/dg9vh), [DJ3CE](https://github.com/dj3ce), [R1BLH](https://github.com/r1blh), [BG2ELG](https://github.com/violarulan), [DF1ASH](https://github.com/derFogel), [DB4SCW](https://github.com/DB4SCW), [VE2HEW](https://github.com/anthonydiiorio) +[F4ANS](https://github.com/abarrau), [DG0TM](https://github.com/dg0tm), [DG9VH](https://github.com/dg9vh), [DJ3CE](https://github.com/dj3ce), [R1BLH](https://github.com/r1blh), [BG2ELG](https://github.com/violarulan), [DF1ASH](https://github.com/derFogel), [DB4SCW](https://github.com/DB4SCW), [VE2HEW](https://github.com/anthonydiiorio), [OK1GOD](https://github.com/filipmelik) Translators: From bd19911f034ccc85947697e5f27f8c4a0cfc0e4e Mon Sep 17 00:00:00 2001 From: HB9HIL <80885850+HB9HIL@users.noreply.github.com> Date: Sun, 25 Aug 2024 12:47:07 +0200 Subject: [PATCH 38/56] also added OK1GOD to translators --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff7af1603..c7ed10414 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Special thanks to our contributors, who are part of Wavelog by improving code! Translators: -[Ondřej Koloničný (OK1CDJ)](https://translate.wavelog.org/user/ok1cdj/), [Michael Skolsky (R1BLH)](https://translate.wavelog.org/user/R1BLH/), [Karuru (BG2ELG)](https://translate.wavelog.org/user/viola/), [Byt3](https://translate.wavelog.org/user/205er/), [BG6HJE](https://translate.wavelog.org/user/BG6HJE/), [Francisco (F4VSE)](https://translate.wavelog.org/user/kikosgc/), [Kim (DG9VH)](https://translate.wavelog.org/user/dg9vh/), [Casper van Lieburg (PA7DX)](https://translate.wavelog.org/user/pa7dx/), [Halil AYYILDIZ (TA2LG)](https://translate.wavelog.org/user/TA2LG/), [Michal Šiman](https://translate.wavelog.org/user/michalsiman/), [DN4BS](https://github.com/dn4bs), [Luca (IU2FRL)](https://translate.wavelog.org/user/iu2frl/), [Dragan Đorđević (4O4A)](https://translate.wavelog.org/user/4o4a/), [Dren Imeraj (Z63DRI)](https://translate.wavelog.org/user/Dren/) +[Ondřej Koloničný (OK1CDJ)](https://translate.wavelog.org/user/ok1cdj/), [Michael Skolsky (R1BLH)](https://translate.wavelog.org/user/R1BLH/), [Karuru (BG2ELG)](https://translate.wavelog.org/user/viola/), [Byt3](https://translate.wavelog.org/user/205er/), [BG6HJE](https://translate.wavelog.org/user/BG6HJE/), [Francisco (F4VSE)](https://translate.wavelog.org/user/kikosgc/), [Kim (DG9VH)](https://translate.wavelog.org/user/dg9vh/), [Casper van Lieburg (PA7DX)](https://translate.wavelog.org/user/pa7dx/), [Halil AYYILDIZ (TA2LG)](https://translate.wavelog.org/user/TA2LG/), [Michal Šiman](https://translate.wavelog.org/user/michalsiman/), [DN4BS](https://github.com/dn4bs), [Luca (IU2FRL)](https://translate.wavelog.org/user/iu2frl/), [Dragan Đorđević (4O4A)](https://translate.wavelog.org/user/4o4a/), [Dren Imeraj (Z63DRI)](https://translate.wavelog.org/user/Dren/), [Filip Melik (OK1GOD)](https://translate.wavelog.org/user/filipmelik/) If you would like to contribute in any way to Wavelog, it is most appreciated. This has been developed in free time, help coding new features or writing documentation is always useful. From 4563c1d44d1aa680d9f509d258b3a56bca81b258 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 25 Aug 2024 11:18:07 +0000 Subject: [PATCH 39/56] po/mo updates --- .../locale/bg_BG/LC_MESSAGES/messages.po | 28 +++++++++++++++---- application/locale/bs/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/cnr/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/cs_CZ/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/de_DE/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/el_GR/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/es_ES/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/fi_FI/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/fr_FR/LC_MESSAGES/messages.po | 28 +++++++++++++++---- application/locale/hr/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/it_IT/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/nl_NL/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/pl_PL/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/pt_PT/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/ru_RU/LC_MESSAGES/messages.po | 28 +++++++++++++++---- application/locale/sq/LC_MESSAGES/messages.po | 28 +++++++++++++++---- application/locale/sr/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/sv_SE/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/tr_TR/LC_MESSAGES/messages.po | 28 +++++++++++++++---- .../locale/zh_CN/LC_MESSAGES/messages.po | 28 +++++++++++++++---- assets/lang_src/messages.pot | 28 +++++++++++++++---- 21 files changed, 462 insertions(+), 126 deletions(-) diff --git a/application/locale/bg_BG/LC_MESSAGES/messages.po b/application/locale/bg_BG/LC_MESSAGES/messages.po index 69237f908..e10c6c65b 100644 --- a/application/locale/bg_BG/LC_MESSAGES/messages.po +++ b/application/locale/bg_BG/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" -"POT-Creation-Date: 2024-08-25 10:43+0000\n" +"POT-Creation-Date: 2024-08-25 11:18+0000\n" "PO-Revision-Date: 2024-08-17 10:46+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bulgarian \n" "Language-Team: Bosnian \n" "Language-Team: Montenegrin \n" "Language-Team: Czech \n" "Language-Team: German \n" "Language-Team: Greek \n" "Language-Team: Spanish \n" "Language-Team: Finnish \n" "Language-Team: French \n" "Language-Team: Croatian \n" "Language-Team: Italian \n" "Language-Team: Dutch \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Portugal) \n" "Language-Team: Russian \n" "Language-Team: Albanian \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" "Language-Team: Turkish \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: LANGUAGE \n" @@ -8620,7 +8620,7 @@ msgstr "" msgid "TimeOff is less than TimeOn" msgstr "" -#: application/views/qso/index.php:5 application/views/qso/index.php:690 +#: application/views/qso/index.php:5 application/views/qso/index.php:696 msgid "Previous Contacts" msgstr "" @@ -8734,19 +8734,35 @@ msgstr "" msgid "Connect" msgstr "" -#: application/views/qso/index.php:663 +#: application/views/qso/index.php:656 +msgid "Stop" +msgstr "" + +#: application/views/qso/index.php:657 +msgid "Tune" +msgstr "" + +#: application/views/qso/index.php:658 +msgid "Stop Tune" +msgstr "" + +#: application/views/qso/index.php:664 +msgid "CW Speed" +msgstr "" + +#: application/views/qso/index.php:669 msgid "Send" msgstr "" -#: application/views/qso/index.php:673 +#: application/views/qso/index.php:679 msgid "Suggestions" msgstr "" -#: application/views/qso/index.php:680 +#: application/views/qso/index.php:686 msgid "Profile Picture" msgstr "" -#: application/views/qso/index.php:704 +#: application/views/qso/index.php:710 msgid "Max. 5 previous contacts are shown" msgstr "" From 285d80b059e14c2edfe1dd634330ec0cf33a05f4 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 25 Aug 2024 11:51:28 +0000 Subject: [PATCH 40/56] po/mo updates --- application/locale/bg_BG/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/bs/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/cnr/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/cs_CZ/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/de_DE/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/el_GR/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/es_ES/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/fi_FI/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/fr_FR/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/hr/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/it_IT/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/nl_NL/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/pl_PL/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/pt_PT/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/ru_RU/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/sq/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/sr/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/sv_SE/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/tr_TR/LC_MESSAGES/messages.po | 14 +++++++------- application/locale/zh_CN/LC_MESSAGES/messages.po | 14 +++++++------- assets/lang_src/messages.pot | 14 +++++++------- 21 files changed, 147 insertions(+), 147 deletions(-) diff --git a/application/locale/bg_BG/LC_MESSAGES/messages.po b/application/locale/bg_BG/LC_MESSAGES/messages.po index e10c6c65b..0f389ed86 100644 --- a/application/locale/bg_BG/LC_MESSAGES/messages.po +++ b/application/locale/bg_BG/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" -"POT-Creation-Date: 2024-08-25 11:18+0000\n" +"POT-Creation-Date: 2024-08-25 11:51+0000\n" "PO-Revision-Date: 2024-08-17 10:46+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bulgarian \n" "Language-Team: Bosnian \n" "Language-Team: Montenegrin \n" "Language-Team: Czech \n" "Language-Team: German \n" "Language-Team: Greek \n" "Language-Team: Spanish \n" "Language-Team: Finnish \n" "Language-Team: French \n" "Language-Team: Croatian \n" "Language-Team: Italian \n" "Language-Team: Dutch \n" "Language-Team: Polish \n" "Language-Team: Portuguese (Portugal) \n" "Language-Team: Russian \n" "Language-Team: Albanian \n" "Language-Team: Serbian \n" "Language-Team: Swedish \n" "Language-Team: Turkish \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: LANGUAGE \n" @@ -33,7 +33,7 @@ msgstr "" #: application/controllers/Components.php:13 #: application/controllers/Contestcalendar.php:15 #: application/controllers/Contesting.php:14 -#: application/controllers/Cron.php:26 application/controllers/Cron.php:149 +#: application/controllers/Cron.php:26 application/controllers/Cron.php:152 #: application/controllers/Csv.php:8 application/controllers/Csv.php:31 #: application/controllers/Dayswithqso.php:11 #: application/controllers/Debug.php:10 @@ -561,30 +561,30 @@ msgstr "" msgid "Cron Manager" msgstr "" -#: application/controllers/Cron.php:141 application/views/cron/edit.php:5 +#: application/controllers/Cron.php:144 application/views/cron/edit.php:5 msgid "Edit Cronjob" msgstr "" -#: application/controllers/Cron.php:261 +#: application/controllers/Cron.php:264 #: application/views/interface_assets/footer.php:36 msgid "OK" msgstr "" -#: application/controllers/Cron.php:265 +#: application/controllers/Cron.php:268 #, php-format msgid "" "Last run occurred more than %s seconds ago.%sPlease check your master cron! " "It should run every minute (* * * * *)." msgstr "" -#: application/controllers/Cron.php:268 +#: application/controllers/Cron.php:271 #, php-format msgid "" "Last run occurred more than %s minutes ago.%sSeems like your Mastercron " "isn't running!%sIt should run every minute (* * * * *)." msgstr "" -#: application/controllers/Cron.php:273 application/views/cron/index.php:29 +#: application/controllers/Cron.php:276 application/views/cron/index.php:29 msgctxt "Master Cron" msgid "Not running" msgstr "" From 7451489d9c2bfcbcacfe08576bdf0bb9fb9b4387 Mon Sep 17 00:00:00 2001 From: HB9HIL <80885850+HB9HIL@users.noreply.github.com> Date: Sun, 25 Aug 2024 13:53:47 +0200 Subject: [PATCH 41/56] added DJ1PW to contributors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c7ed10414..defb6c53f 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Wavelog-support can be reached by creating an issue here at github. If you've an Special thanks to our contributors, who are part of Wavelog by improving code! -[F4ANS](https://github.com/abarrau), [DG0TM](https://github.com/dg0tm), [DG9VH](https://github.com/dg9vh), [DJ3CE](https://github.com/dj3ce), [R1BLH](https://github.com/r1blh), [BG2ELG](https://github.com/violarulan), [DF1ASH](https://github.com/derFogel), [DB4SCW](https://github.com/DB4SCW), [VE2HEW](https://github.com/anthonydiiorio), [OK1GOD](https://github.com/filipmelik) +[F4ANS](https://github.com/abarrau), [DG0TM](https://github.com/dg0tm), [DG9VH](https://github.com/dg9vh), [DJ3CE](https://github.com/dj3ce), [R1BLH](https://github.com/r1blh), [BG2ELG](https://github.com/violarulan), [DF1ASH](https://github.com/derFogel), [DB4SCW](https://github.com/DB4SCW), [VE2HEW](https://github.com/anthonydiiorio), [OK1GOD](https://github.com/filipmelik), [DJ1PW](https://github.com/winnieXY) Translators: From 9aba646a3422b91b7a0341924b2979ed74f38f06 Mon Sep 17 00:00:00 2001 From: phl0 Date: Sun, 25 Aug 2024 14:42:55 +0200 Subject: [PATCH 42/56] Correct English :) --- application/views/timeline/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/views/timeline/index.php b/application/views/timeline/index.php index 2b101644e..d8e306ff5 100644 --- a/application/views/timeline/index.php +++ b/application/views/timeline/index.php @@ -75,7 +75,7 @@
@@ -70,10 +70,10 @@
-
+
-
- From 3816f58b2347a2ec758853276198fd8343252f46 Mon Sep 17 00:00:00 2001 From: phl0 Date: Sun, 25 Aug 2024 14:48:21 +0200 Subject: [PATCH 44/56] ;-) --- application/controllers/Timeline.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/controllers/Timeline.php b/application/controllers/Timeline.php index 0650f43ad..af30bc277 100644 --- a/application/controllers/Timeline.php +++ b/application/controllers/Timeline.php @@ -22,12 +22,12 @@ class Timeline extends CI_Controller { $band = 'All'; } - if (($this->input->post('propmode') != NULL) && ($this->input->post('propmode') != '0')) { // Setted, but not "All" + if (($this->input->post('propmode') != NULL) && ($this->input->post('propmode') != '0')) { // Set, but not "All" $propmode = $this->security->xss_clean($this->input->post('propmode')); } else { - if (($this->session->userdata('user_default_band') == 'SAT') && ($this->input->post('propmode') == NULL)){ // Not setted, and empty and default is SAT? + if (($this->session->userdata('user_default_band') == 'SAT') && ($this->input->post('propmode') == NULL)){ // Not set, and empty and default is SAT? $propmode='SAT'; - } else { // Not setted and empty and no SAT as default? + } else { // Not set and empty and no SAT as default? $propmode = 'All'; } } From ebbdea27734ef9b5d049a58caa07aa0036002b08 Mon Sep 17 00:00:00 2001 From: Florian Wolters Date: Sun, 25 Aug 2024 13:05:07 +0000 Subject: [PATCH 45/56] Translated using Weblate (German) Currently translated at 100.0% (1962 of 1962 strings) Translation: Wavelog/Main Translation Translate-URL: https://translate.wavelog.org/projects/wavelog/main-translation/de/ --- application/locale/de_DE/LC_MESSAGES/messages.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/application/locale/de_DE/LC_MESSAGES/messages.po b/application/locale/de_DE/LC_MESSAGES/messages.po index 7e3062eca..6121a4e40 100644 --- a/application/locale/de_DE/LC_MESSAGES/messages.po +++ b/application/locale/de_DE/LC_MESSAGES/messages.po @@ -17,10 +17,10 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" "POT-Creation-Date: 2024-08-25 11:51+0000\n" -"PO-Revision-Date: 2024-08-22 13:37+0000\n" -"Last-Translator: Fabian Berg \n" -"Language-Team: German \n" +"PO-Revision-Date: 2024-08-25 13:06+0000\n" +"Last-Translator: Florian Wolters \n" +"Language-Team: German \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -9176,19 +9176,19 @@ msgstr "Verbinden" #: application/views/qso/index.php:656 msgid "Stop" -msgstr "" +msgstr "Stop" #: application/views/qso/index.php:657 msgid "Tune" -msgstr "" +msgstr "Abstimmen" #: application/views/qso/index.php:658 msgid "Stop Tune" -msgstr "" +msgstr "Abstimmen stoppen" #: application/views/qso/index.php:664 msgid "CW Speed" -msgstr "" +msgstr "CW Geschwindigkeit" #: application/views/qso/index.php:669 msgid "Send" From d1bdff94c2af38d8441267e16fcef42b9a6ed8fa Mon Sep 17 00:00:00 2001 From: "Francisco (F4VSE)" Date: Sun, 25 Aug 2024 12:34:10 +0000 Subject: [PATCH 46/56] Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (1962 of 1962 strings) Translation: Wavelog/Main Translation Translate-URL: https://translate.wavelog.org/projects/wavelog/main-translation/pt_PT/ --- application/locale/pt_PT/LC_MESSAGES/messages.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/application/locale/pt_PT/LC_MESSAGES/messages.po b/application/locale/pt_PT/LC_MESSAGES/messages.po index 278004890..6d5c0a4cf 100644 --- a/application/locale/pt_PT/LC_MESSAGES/messages.po +++ b/application/locale/pt_PT/LC_MESSAGES/messages.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" "POT-Creation-Date: 2024-08-25 11:51+0000\n" -"PO-Revision-Date: 2024-08-22 20:55+0000\n" +"PO-Revision-Date: 2024-08-25 13:06+0000\n" "Last-Translator: \"Francisco (F4VSE)\" \n" "Language-Team: Portuguese (Portugal) \n" @@ -9172,19 +9172,19 @@ msgstr "Conectar" #: application/views/qso/index.php:656 msgid "Stop" -msgstr "" +msgstr "Parar" #: application/views/qso/index.php:657 msgid "Tune" -msgstr "" +msgstr "Sintonizar" #: application/views/qso/index.php:658 msgid "Stop Tune" -msgstr "" +msgstr "Parar Sintonização" #: application/views/qso/index.php:664 msgid "CW Speed" -msgstr "" +msgstr "Velocidade CW" #: application/views/qso/index.php:669 msgid "Send" From bcb136f4ef37c048d141f4d1f05617cce2195549 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 25 Aug 2024 13:11:57 +0000 Subject: [PATCH 47/56] po/mo updates --- .../locale/cs_CZ/LC_MESSAGES/messages.mo | Bin 23617 -> 23672 bytes .../locale/cs_CZ/LC_MESSAGES/messages.po | 94 +++++++----------- .../locale/de_DE/LC_MESSAGES/messages.mo | Bin 182990 -> 183133 bytes .../locale/pt_PT/LC_MESSAGES/messages.mo | Bin 185977 -> 186122 bytes 4 files changed, 37 insertions(+), 57 deletions(-) diff --git a/application/locale/cs_CZ/LC_MESSAGES/messages.mo b/application/locale/cs_CZ/LC_MESSAGES/messages.mo index 2da5256bba06fd673437fc90c2812c35a8f2252e..1f6edacbe012d8eb8b820799892dfa9590056cf5 100644 GIT binary patch delta 5993 zcmXxn32;``8GzyYLlV{i683=nVUJ-6AX|_Ub`=6HY!XxgL>7SniD=RKRE#i# zON)wBK#_{L3@A{+S__U=1sMgGb}Up83oXzh(D%(fWrXLPbI@n_huq> zv|-xnh(D!?C~ApA>qOC4l;*MX%DT-3j-4wEESdU$BH`c@-u?C(+W4VOQuu1DEYK+~`e#0;WN27s_ z!`gT&UWT*Le)oj-<(NQ5zk)3krDO%cKwVV(NcBbAP zUHTSmiqp_N-;FNy2zqF%(a<)a^KA|8#=6u$LL)eW_WKUa;ZHdv$O+HW;3;Mjg%jtX zImt!adxiQnX#a8O1T)aRF2okN2n~1@y3iUlm+O#=6>SO6_oIP*+=c_PaFhlY{2m>6 z7EN-ZZM&SrFi z-Dn^O&;f_gg}z2l{d;t0|3ou#30>f_c5(k^!5p;T6=*^!9Ok6ZC!Qhz2$Qx#7_ebOY1S49pGnd(c2u-~eCHM?;7GaYOV4 zn%d?a;=tOY6Xc`q1JMOXqB|(T=9ohJt;Op2B6=h*VH)m6U+{fszoS^o7xV;$UNoG= z3D~7$6p_tnIXb~cbimu_j`pL097HqoExO=o^ytpw6`0m3+!b_OZ**KCdIY1eChJEf z;lXShs4qfyn8F&kIWCXmtqp13hqRo9|@jAK9f-v+w-pU2wsB*G9}c@&`hjA7p_E);7K%~-v(c}g8bK_ zVRPuX9jj5_iB7N!C*pqeBi=qQzRiQMHuW($1}C8tZ$bmviY~Ydoo6rl7JQ7}nXk}H zT*xE;-6^DZj#J+UeNc$LR#%7iN$7;rLi z-rQjSROnEIUZ$yN%FEF^@F=>Y_2>lK(2VU2?eAe7>Yt$teiPciLsS26^m6`;X2__W zF9WOYSYrx&eWN_Ax+LgAW6_0f#(Fp-)EA-e_Y!pCb?7&LeR%#FW>SAA)c1$_K{UX> zVLd#K`M&?>D7a8=xA;NN;9#sv`}OGaThPE};!s?GSK;gE#HY~>oI`)?UBY5)$tnhP z7y6x8fo5VI*6{t`K%oH*TY|fg&wun0ddW_s6JHGVbS{i3Z-70pC6?kC^z64|RjPUD zxD0gROdN?FaRioQSKt2~6g=~Pps!(iPd*OV3fC)YqUX zej4q+8GU=+K)-;WU_<-?Q!a3cf|nuf%6LEvbmtwg0d~hmI5;=~onQ{SKq}N9LN0#v z8#LvAMvvk!dW2_!es0}R?Ox>nJ_=bh7|3dLM^9qasTj20C)rSYJKCQ8P}KmoASvtIB^9Uz%S7NQrH-mqHoDsd<}PC zADrJWUf@Oa%XkdUT#bS_@P_ElbI|rYY=phh%RMqh!4yvn&O%eV7#*+zHxl_OG@$-m zc{4H){ZNe#_3`Mq(%=Ggp zbcf5)0G~knJ&jJV0X>r6qnY^=dU+4xW%wmtjz6MzA#+f?u{P-VzL@ed4582hN1#VB z6ua0vQN;!PNHY~U(CRoS6BU?e^ehG-xs|LgRl*bMK^FK z*7g0rpF$1|PoN9Gjs|iZP5njmPGqvpn%Dx(Ok3=L{m>(uf}L;)=HW*4_4^Ey_%CdS zjjxUS7hn$SN0TTR(LLzG52Fh{i|%Mka68tZzB9NNYf;}H>IbnJ^`q!K-{2TLgYJCz z$oSUJLXUhgruZAJ;vXkEg8tb2JEq}zGz0!NVu1Cr6}Cn*F#!3w6b(nm-xqucJ^R&Y zzu%$rZAItVj(qi_eWS>KI)&;*@qk)5lX^Bfa2cBFN3ae)kM8UhG|;`F{&}dMKr@sW z9Y3#yZlDz!VCP_ObiTsT5S_3=^Uq6x3g9C-8K<>=NkD@z}-%+CX zF&ERv#+R~Nun2h+-Hv8#7aG`JG@y^s4Sk6jzW+Z^@U=OO4mg92@I2bF!MON+O`<;~ z3(?dTqi47P?SBWF$(7g`pTI2KgnkF!LHixShIk4yegD(>a5u&*^v7&2dKZSH1IMBR z%7ZJ=iPqvO+=2#PI3dp1Ff@Zj=+19M=bM7|n}=?!98-fSET!NA@8LQ;j7Gkg11iEt zaX)^EQ*h%=aVl$1ijSr-nu#vx0^LKsH~PIOKsPcGKfyb32#zc!{{<9&T^uj?0UFs+ ztcO3MXLcc2b8@`%EObYmg1xaN^`YqNR}$K1V}iPW^7(u7|0|ToSCuOlH~C9qT4hnw z^2GFQdz$u7Bqmp0Xm%-4QhA|y>uSY`%FA0EO-!l0(Bk<-Y2~xoeG*eE4`<(>xV5sR zuw-8OoRW&Ng$2psv*yg2pDZe!Gwb%`Rkv9woNJ})w8h&_7PLzw m`fO`*)vDH6*X>*T?#tyBcg#w6Q) z6U|Z|j`%Yx5k+}8ATx?Sr97>rtx=G1aSGaRL1@1ji>cp%sjMG8N8vIWUPKrA9-T0?Af7N2-C;Hwc{_AxC1}4vn2N*E z0LritUX5mM7CP>FbVIkInYas6J5pFl!3bBQsaqH7Poe{#uilVolWb4vEG>1Rw2Pwd z)Z3v;kHH+Ai0=6YbgA3WLtBA{R)fyCHMk2KQhyDN;1JsH12l)9q4Ry$jzoEi7ie(e zrbJ^PtciVGNE_j>< z2cATe`~$jR)FB?w3_X;#X#dV=Af;%a1JQ}cqZ_#voo5a@?q)O-f5N)Vp#j$-fxLlD8)IcQ)#kQ*NLL^m)I&A{|fUw{U(3icDzk4tR*P}_zCv*MLkKO zoQC{M>W(|Q8J%DQI^eJ9fPH8n2hhy?3tg}lJ-U>zR)(XrqKbb%waSW z-(v}$DCOzVL zTL%l#=L3@zyi60&GpR)H!0qUc)}euHM^pB6XnzqisqaS@JQCVJKr{L!dO1&_89Ec5 zpGW7f$1eEjM#(l5>MjYo&`@-t(bx#fLwyeVe&2{rycYfDuM5u~!z}90g!;ZvKY#}K zJ~qM+u^7Kb)=5UKFO45`2$o_)I$VhcG6oH7G7iNG9Dq-t6W5{}_!|99<1|jihOA;h z^U&|aGBguw(K}FsO?>~i)D^fi$Y(!#4ZUQw=*0gG^>b*-y*Z`O5NG2c^z0wUx>Td% z&Z7%oz%tBX&*kGv3)0bm!Nh3(pJno6v=BL*JU^p}rDL z@fx)MCiLyufqntsz-IU{nz_@M^fLTN!2ub);+?m|Ce+)Zx3n}k0-azQ+P^B)|A<`l z=zcWiub@Y95Iw@Lf@jbT{fu{Fir-%&SU@FVdiOO*g5zj;eX~k7{ z;ym=$7KVCHbll+J7<8d2=mJ&P3hzMY*?HV=Jmx}pILMpIaZ1z3Sjco&-Dd&2WA!57eg-oozqVW_7KjRVX^Gt>p0XHb$t zTMEO`6wW~>xDo4i8eE0EF3|&MK>P6zcpSZCrNctNXuS-bZz>w-Z1jD<6%Alrs3&() zNTFdrI`KjDj6Ov(@hv)G%J6u?=JBjHRp}RZ}oU2hh|XM>~Ft>G(f1Gj6*xv_y|=Aa=p&Scogp*Y9~Oz$4fZ&!YWv zM#c;GK?Ax5Td;mKpMneCj_zo6@FA>EeM4{?HlY4wsPD#$sK0`4;O{sVkD@#8P!`|% z;pmx{BY&es{Np??W6~d&|D=$L$IuLXf<|}>^YK?S6S#B|QZ1$&|M^+o%QOj5ApWHjPR^gUgOrf?ND#x*zyH={fLIJAEe z{1LsRspH}Wa?yag<3#L>eQ^!C&VFoy$-@-f*=Oicq>Yaktirku=$WlW7p_4wwgnsF z^XLx$fo|kGH1PAmU(j*>{xuoWaT!)1fhD736kMP?H9MA~ABz6Sqi6#1yGisocE!)p zOWANzY&WDSx(Z!*GaA@7G@xg&F}{Qz=|S|Zc@OLUN8M2hEoeA~cKjZFUoW6PCiAb3 zQ`;9k!!c<831}+khUbg1IrUZOcVH9R?`3R;htV_t9JBEZ=K21o@ges?2XtTwI$&I| z5}jxnK8UN)o#vOv8EcPbup7GbVsyTNXumRaW8-iz&Oqnij>)YQUZh~;s7R^M)lz4$gXuUalG&$%-dgD=?ghQ~))cE_c01arzRDOmvqVP8w zJgWo2Bj}DlMtAZ<@Hg}qldNg+Yu62Z-V+n(pJM)-R((s$+QiK2={ZXimAjART%Jfw zt#9Xdtz9v9Va5CfMU_{20Yld`oz?Y{|6<~j)edK diff --git a/application/locale/cs_CZ/LC_MESSAGES/messages.po b/application/locale/cs_CZ/LC_MESSAGES/messages.po index 8338396ca..6b17318b5 100644 --- a/application/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/application/locale/cs_CZ/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Report-Msgid-Bugs-To: translations@wavelog.org\n" -"POT-Creation-Date: 2024-08-22 13:37+0000\n" +"POT-Creation-Date: 2024-08-25 11:51+0000\n" "PO-Revision-Date: 2024-08-25 10:43+0000\n" "Last-Translator: Filip Melik \n" "Language-Team: Czech 1nocZ%! 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 Q^hdn$U*BK28+{l13q!HhSO5S3 delta 42123 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 diff --git a/application/locale/pt_PT/LC_MESSAGES/messages.mo b/application/locale/pt_PT/LC_MESSAGES/messages.mo index 2f9b0f1f1972f4d695699b1ad50422d1f9f6c2d7..4b96cc4686d663bc9e4fdc63fecfcb4a5eb13ae7 100644 GIT binary patch delta 42204 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 delta 42065 zcmYh^1$Y$6qK4tl-~@M1@DK)wqQahk)mB8uar!0Lq^Cx3Lu8P`{-j?;OGQgh{}21zcctURC!P=^V7-5ZRCfd>AO%%a|YGkebh`o zTgUvX!VflMr1fShlVBv$v!NQujmlR9wcEo`GtdZgvlJ~+Ydd#?$-fX4Uxl%79hSts zs8izE=s3ABflEL=E{p1MHH?i7Q5id;Ixq;c;Am97?dXSxFd6=h74bW^!E&2SgIiI1 z>?;Oi-_6D~ScbTJn?OVY>9;se0Sv?(*aFqDnHYwPu_eC6JXm|HN584gK*S)ZU1>)07WDbtDI>{=(=cAyC35G{Abqo7?z7R0AhaoACl_X&zYL z*z}*MsgASDOm%8hJQ&rXP-{(8N88!>;9bmrFbUI1(1=dp2)v8>Flw>eobw^5H{()N z1qV?xauxI7eN;n<_n23C7ED6C9%}8oquv)oQ8T*Cx@`~huY_YZ;V;yy^D%0dM%~N# z#ssM2R}P0@FVs?eMeUhisE$S2XJ#llh7iw$!?7(E!Z)b=LHo_pTy#LP(?wgDJ_82 zumq}tnW!mTXyY4D9ovEG$SKqe-n70z)%O)OpeP4Ty>U>RFBxjU=`pF!e;|QoB$Pl^ zyb?7{tGqoD2I%(P)nB(RbOfw&xu;1qShMTbeG*oKpA_X zMl>3=1hY|_ax-c~r%(-FMV*2d$OxRzHXiRVN13=kj>5jE=Mj#WdQze~mdhG~QEA_) zKtNMp1JzI?R7cvQIx+wQaT=z@gQyWdLUsHlYQ}!p^aw}I%tS{mK|EBw$!$CURW3Wa zT9e`gw8mkmh8mzoI0_@+bX30C)@7&;Z?y5-dgBrthnnKxUO&Z12U!_%Eiz%BRd; z>4EBSe^mZa=&f%mfhZ)bKsB_%x)+u46sq7An|>da{}rkOA5i%s{%IPDjTwn2!l+mT z%VKF8pNyLN*~rqm&PoC~N!W#YMZU7}z|+hM@rIZeC!$`(C$Iqi!2Fo+j49t0m2WvJ z-(8!Y;H;UMGN{jreyHc0u^{a`&j_R^A>BE%*~+0_IQ1|lcEniN-^RzHcJnOM6s|&T z!hIOz!^bbyCLZa6S<;5652xm+{CzMvjz{nLUqwJ`zZpHa6Jy~XjDvsL_$}1bzre`& z4z9t=3i6XkOUQIk2;P6Q4P&SJztI* z`Bu~mX)mgy2krAy_W3o;MEX6{CX9C3e4J-Tf8y0qGt~n%z%iFu|C|J7kq{rxVk-O_ zebKpMdKv>W5RHcgF+cia4^;l?s3qBkad0oH<7ZJbcnh^>-lJwL!e3@4lDY(xkPb^> z0sCMus)BK-kTj^jFQy0>I~yN?S%|MPao4#@ATx;c)4Se1BX)OlZm{qQcT=XGzeAFv53p6I3-VM^4g$bdO8GcLu37!M=dG96BY zQFQ*(5(rR6ZvvYH_3EsT8tGu`IMj$|pekBo)3>8G>mdxn)7SvNpq8}OZS(m*9}^Sb zW<85>Xy18EAS-@U0;a!Xc5fck2pVEqUM!PQOR?>)$#)DB62FQ%PXFL^e1}PJ^gVOz z7Nch9Fsh@cP&0iQU9H6f0_s5Q`(^}1P*d0*RiF#1;eM#K9gCWQ1*qe=8TEWS>X;r! zYId*3tZ&4j+`GEP)Nub9AQ^6`MOnetA!zUY${LoB&2~>wFVns;D?>%35M_?283)Iu^i7)|gMt&+TPU zGcg%8qB*DzEV1rGHFynG?(GFOb_$t)MBEB>oPmJ2sRjtiX1MZG=%yniE(6Ly9n))NC3T~i26aGQ1 z-B0wOFAFYXp*kEFwc8V+FJ?nceL++`<*+@Qt^sN({(NQL6X($T^Zzvhs_1Xjrg(zd zgl{nnv%OX~`B1_&_!Eoc>VNs|D85FGywMvoQ@gPr@tAMT7md-V&3ORpVd8iEtbyII zzbbx7pc1xzZ@!`IL|$^vzo_(+|M4XRlYB5UG!oMipNIZ<2sQEtsHuL9Os(?^V`2P{ zW^bgygv1M>o>xWh=YLBAO_`$3$VPQ8f8y7yxa+goEFHd>Q_vmN&=Ay=Pr%r?0?XkJ z)RcR^8WW;6VE}4VmqE>Rb5uQTzA~}e#XU%fi7qNW9yO8~7z0;Yw_#G^hw&|&;5MG7 zu-wn_HWqt&Eg5}8<;`n$^$2e5|f1vijV)V!5j_c!nwVog$5(zJTe7rqlBkF*Wv8%NYMkPK7)$nLk{u!ux7Gqu9;1Z}$AbJEJ@07Gc zO<_0G42-bpGf)jIL9N|t)alrdYUl#0fg7lDk5DuD!TJl8FIq&CFCJ`{AF%zn% zIc+=?wK>aUH#}|Ai$*dHltoog7quiU(K}+)T93BRmti8}n@}@+(t6H3cbzK)G==w3 z9e9iy>3h^jzS`%$k$t@1T;iY_N{=d+6*XfyQM-`xnc62j>vZ#zzP!%;mZKfuu9uL4&I0f~Yu?aQxr%)ZbhZ?|J^vCGFX7go6 zO?feEB~&~0eL4S{>eeLabG#cS!^x-y)}lWiwLZ4bBgZiLQlmOl2(`=WS-YZ^Y&5Fl z^H4Lm8MV}VQSCi)ZGwkC(9s$NqIz1%S|7F6Z7@4d!d!URrhmd9;;CYpnW})QxHW13 zBT#!_KI&AhL+$>pmwi(+Tg zJANZ-%Kt=-@F6OHw8TE%U)3bR9>mLHVLX6U@ds-2R!(BxCqq#6EKkDuFQ$wnc)vI# zHEW*`Ym=TAb-pK|&i8Wrd?#ileiQRzv}9(aq3C^Ipk`(OR>mQy8MurZ`CS|TCmH8o z37_nPNXgAi#79l3KdN9RYcA9#ENU%}>Ub?1Z;Q&`6V>6tsE$lUwKEg-m2Np|i9fmo zv_{`iQ<)-#F*9n-3)pxlYI9XaYAXAC3$4b^Zte;=m< z)wF9-NJ;=OSto z-a&nqd_nDj1nKNjpz@_c@6Z2%1XOWB)EZVqHP9ay;Y8F(v!^$ktBAEM>ia--RE5p4 zICi%2t*CkqqL$z?UdBhLj_=IC`PZg9L_p{J0%pV)m=@z@G*g%d)j(lX!Lq0&tBUHt zDEoXSs-C5&^SvJ@;5AgoS_b$y{c$zwdB#kf|8fLEGMQaJ7By9~QERsVb)1%?mShvE z1IKOpc~ries44#&)qx+V1`-FF{K2Rh&TlP`+5-&&IsY12GZNH5C)898!w{T?8tGNk z8pp_NHf3=vMZ7y|bL~N$mLoR)H)_eAqh{!%jYrO6+KZ2B$Im68PrG2$`L2o@L0eRX z!|e0LHvK5-3&&jy!XKzNWac3A9tcIfx|^fk6N6DRvj|n+KGdeXWz*e{1hh8svYL+6 z#Pq~_V+ov(D)10BLqAb77C)OgPJXBk1flj)aa0GZ+Vn1{hDTx{T!zZ`09i`cc}pMy z3189M0D2n;HW~d;Q=Ap`eIO4ie?`<@sDhf}x~Lg!i~2Mjf;#WhQ3F_tneYH=fX^|5 z&VTIe=0P4*1C3D`dZCtP9;U$qHvIwW1rs%g=|DVGhm)f=Yet)%12xiur~#Bit$9`S zzF{TpI~@q9r@c@GhFkxz=}SDN*H9 zqtbJr_xpb_0;-@qY9!TB4K}vv9c+3}^iD0Rqtos4WvJt}9`(XGfjY)FQTgtn>U(Yd zhH58jF3!J3o*pGTdV+b#iZvUjMSCdgwdPL4Xq{-_EIqh_ES>XcMRb)=28tF<3$Muu6ZqZ(R? zTJ!y=dd{Khb*~f9NFJlk=?hfGsCi9?l3-fmel}hlwRYuDYh4oqunlU;r=Ticf@)|Z zHpJbinMj(?%!D8E+;y@NP{DktDJ*LG9?_kl}5Q~Clm)o-oeQ3azEHEW#|wW)$oQx}5D zUm112>!J2g7YxD?m>IX?1iX)GxKoJvp|m&VB>zJBPc z!odVIwWCopu^hcG8q`S7qGskMX2<6?J$YI4%_#s?aaGh*w?LJjjCy4+Ms4Q9sLz-y z*aF{`<@{^c)-GoXbU=>}FB(+CgUkDP|Kwu=s)8S=^B%i`nSmUr&DaC=rE@3-;9~py zG^!)9Dw-MgLv^S$D!o-j*Hqk_1dVKr&9E0Wg||^l@D%mReT`et6J};)yY(1qs;{6r z_y|=#N+q*I@lZ3E+!~0Q`TQ;cO?jwIsD)aqMyTD}$EFXrj<@O4Q27?w_#RXPCs1p9 z6}8)Mqd(q9ZC0PkW@aN}2I6jf0vdS%Y=-U8A1|P$@-3FeWL13hmm!>{_#E?AHB*_o zn)!SW#S|>vLLA2PebvorDOSVBxk$VRCgFMMnkIkaTHZIS>l`4UWAz5rVA|RyUIBF) zT-34IfZ8xg>iRh2useQ2pL#ydCH#Wj@JxLl=LCi{@Nwv)6Sbj^ zC+DwzBOhlD4<2A89N5^$`!|-(VR_<7nwZ_)993~IEQg(%nsdGzYZ6c1%*XpDr(LlE z@mrW41Dcx|3`5m79sj}ySWoAFXA3ie1T9U0_NWm}LA}{tpw`;2m3epPN6lDs%!o7a z5FWr_9NgN+>4Te59mvwg$NMiUs-iaMSgecd(N&M4wKbcj25Q&Vv$jO-{x0Z?y|EDv z!v^>WwKT=rF{Riam3{#WV%GNNd0Wg!d?|+E9bAc7I@t67R|oUy^#V20U#N~H?daqE zOXn?6oA3-~#RQ#9{^D4bcx}|@{2Ek;j-oyzeqs>T?d;=>!BJQo<9G3KI$^CYoPYgr zc!GqY_yF~8PSe%LX@#{>r{W-1#&q4xZ@qe;rhX3=!-uF5XXtL~Yl@|a55UBD6tyRA zqxMRs9_IH6gIod?N!Wo}^GH3-Ic~TqP~Z7p+w{+<_k`=y%ly7B3dZ4BM8`TjNZ#92+ymSr^qSkOWY7cBdy&2Ei_(L22f%HTed6ncOEH-|tLGOR{T*)>!}uTT~LM19Og zA83wO64dvFs;Iru$$G}7XW~@pbG{VnW4Sr1{7_thlTn*J{~*r4KD8zfGHbsOwT8P; zOR^tT@DghG-nYI$E!BTE{sXl+qYU2)(@ohusi5h%P zLTY@CTI)DN%~boND$a~*Fgt2y3ZSOGJZdSbp*C-0^us==0n9?pz&g}1K7*RMyQrD| z<`M`Z5OC`?|D={ z-!bM>usBvG-W}`WG1QXyk2N!p3uEZ~mn5KbS`{^Qt#AbPLKXOlMKRtuvq!3;uMZVt zH_``&>hIJ>Ia;s4FY(`D>E=-JPtdCGXl6^-FIR0e&^M3#V^(Y^zU}@A^)!`ueC0?NG;W4C*V>G}Np49IEHvunA_FXV!KC>eFsHYKab^UfCy5 zd+9Q2MsB0(jXU40eG1G#+|5ov71YLb*bOyhGf`{09@W7os5jgPRK>9tn1&Lg_DWjR zdmsRnF9)hzc~rx7Q5|c639t*YIbCN20qyGfHp6;Uf!(M#)G^eX>=LSh`xpmbSifNi z@fZuuX02$gj%u(TYV);1y|TxkIy?ovpZ_xmXjd;oHMj~@a68gN=dgW#6E($mQ5}9{ zpZ|y2tT7guHP4FbU~AO-qYtXS@u&{W!dkcpN9g>2A)pt`pvC4F4+pU%@kmR|x8L%p z&9xa@p|jM?P-|3$-B2CxhdX&Ojk3=}mz#lAK+Rlb)Y8>Ob*ve>>S-?mn&MHYwV#fv zaIKB+!b-%?qdvX-R`@tyun?BTJS)xS9fUe&3s9Tx5;n&utIWA?kLtiQRLAG9;`}RN zxqYw!we~x0{D_U8!B?bTL%nj3tu~(l`PZ1K?S(2g6!mF00X3k7HohMHi62C5%D+)F z@@9=|cK=rr^rlO=)|dj7AuVce1fkxH*=>3W%t|~AH6sHs56(t)w^1|v2otb0 zA5eQJ`g(Ip;>9;;dVVgT_)7=(Xfdi;#)XsQjSf%K?&5NeaO z>bP}AH9Qi3uMph4%zYVIR-B5dC1ZqiUVq=zKAx6^Yzt1+aE2E&MC=RN}iLeF+p(+@PrEwan zp*yIxercb7M9o0d?WUoW7(zTfDql;~5_ds;JD!PEY2VpSKt|hPe)JlRV~IaRy@ES& zsP)Zf1y;oesE+2|Wq!~oh}nq`K#hC@*27&m9TV<0$8;^~Sbjw9k<5E&S5s1wfO=FB zwKnZg$Fd)4Qw>9ncoOQfVm@l5yHGQ84pr_xs=ha!Y-&cU~lx`a8$=ep*|C4qDHzA^?uliDz_K4`;VaNyMfC0 z0QH`Dff{g>1E!vME&;7YAZEi7m>#>MMl>7Mk>#k0wxBB5gKFS7w!!oEdH#cD20~FY zSRU2!MyRFggzDg68+T_AP{vi(eKx~I)G2ss{fQcR!b9f!d=P5SG{FVvqTUmJhs`&p zVwiz=NA$;Os6DhDi{MeDe%Fa`#QaVs8LGmDsGjym&BO%MIo@hLVZCX6g@HVGj+%0r zQEOiq^W#L^iKkFYG~}3ZG$z%#n?yhju0|cZy*LBQ95r8MWpyZ9FMz8*lM}U9s-mW{ zJ!&uX#X2|~wI}YO2K3CvzoOPW!YR|iq^RSY16{3sX#(nDJ=F1OkE*yQszZZOGcX?0 z;vd)vccPXk;7`+V7;3ZDLN(Cb+6VRCn1GtORj8TU@F(YA2|GwogZofZbJE7|p{Di) zYHA~&Hu?Ne9S=lJX%Y0tFjPaGQ1y*L&Db>5jBUVlxDQqC!D-ig#d=4=BogYJF&SQ< zrabmpQ&Cpb4CP17L^)K2RZuh32=#($hw5lw492OL36G-kzec?WzM}@7)IDb^^g~Ta z2Gkm6MKzcgwIpRwQ(D!gw?Z}88*|`DR0F$FFQk*G88~CThU(}8)Dpc$b=3W4GbA`~ zrxw*ezKh?e>wV&ww?kj;=?|#7@*2o22=P*eC9YNU5;{9n}O`-E!v z8>&N5ubPg=Mb+<*YB%#$`}v>4J}8W;xQxwE88z}+=-qr+m3U9o@jQhZ(KA%XexgoI zqHE@PM%43Cs3oe8dLMMN&&OZm{8!@3;93&e@!np323USSR0}Ww!@6r7gh0M)S7O#?njmT z(>}k38u?Syru~e{pW>ETq5#z1DS-Nvt$})9xZMb-;9yjbrl3Z=9@F7jR7LMld*CPP zbi})D@~6ij;-RPtJ6Q*ymU1j=PfSJCGXvG$67$@3wi3um!d}dcZ%`FxxMNP$OuJdV{q`ee6y|Ezxt-h`*pZ;&a~^9rd1wk6N;%)(jX^=RYTbau{kK zj6+p03$@u6qei~grXR$7#8087-1E1YsW@1ecmdR|?~NMR1XR9-sLi<^wS-5|`|p3R z63{z7!UI#0KV~3a&e{d@5}%3L@B(H<=b@=68|riv!_L?mOX3Zjf_{(8?%#~}i0`uT zS&!|{{|g_R5wF6cWY~;r@EvNZ=RYw^aR@cVmrxzJiF%<#dumQg0@O$gS<6{#qt1Uz z8y|pL+Obbv^8>yjQlP z_D+PCW)u6NHf3Sd`=F6aUN6wdSM%a2gc@m8)TV4~ZHD@W)e`mPv)xzD zzjom;60~_HqeiwEJF`hPqn0A=ce5EYqV_^CYNiUH8Vbd#SP3=ti*Y9Y#A`U?hxzlr zPCw0$ct>!6^8e!eHzsiQmya_Uv(n#Eco2JH6d#ZGUo;KGam4?_X*k&9@%}k};s_q^ zuVy;pFVa_GWf{@qbj7czH*1GT9`Ac$3}z#K05yPrT>{#4A5lvXHL}M$HJMQbOQ4QT z6V&^`MV*4#IENWphVO}oM)f$mF?TeNcZS}eX7VfQ6hx11>Pv)L+MHM(-BJX!$)?x` zt5LgqAF4yIQA-rp*O&^m1esA&pWDWZqc&|t)M;sA?Tp&oE=FT5XCaf~EQ#gOZ`1hi z|HScl|AO!vtVza7aXsD_&vH})8&G>-AF4x#up%RWgqp$}@y(3nN9~~!s7+b}HM2cX z0~(1M$WGJ??ihMM|Ic~@e5XT=>=vrw$EXV5qoyn(|IBGLCblj@rDslPX0QlqSJy<% zL?={zLs2s@9yQY|P#r&j-p~Kz1XR%#RL`EGdj79X_eo@)CqQ*9BkFTJH!5E_RJr;% z8JnXv>qpdQz|h2|L$gue3)W*=Jc{1G|No4DKBeBGHciYV9&?^iJuQTK(G*9GsI0Xb zs(}VJ-W@g4fvEg5ZG1jzMs}jk{~1)di%C4LcLdK!&{Ti54}6oFHB5sVVKLOmtE1Mi zDQd<#+4LbceUeR|hkDmPyp=NNEjqgSclc*_ui23n9)RJUPZQ}J%Gc^shWM@$`cn`JK@3A;$N@G4#I-okd6*ZI3 zFdgkX0ckznpLi;wM$ixS3Y~<3{|aT#KsU0BXkGqc&ZHbY`aFqB@ufH3KzqEe^r- zKKuqGy~mkNyha9dtlyybzyJA(fGUiW(Tvz1wRYK2Yg_=ehQ&}FX^iSvH&llPVi0ad zy+`h&-W%UhYaSuM)E^uDi2I>BUNnI7uPLrbf*Ndy+C;5TGteIOBI#$J4@PauF{peq zPz}vRosuP}a)03+e1w|O!Kk%RyeVh5TJi+q@lcpKDioq&2i z6V>xWsE(gUt^IveN8j1>&!~|{%WOW}5~7}WM-8+uYOf4+325qPpn9|dHIlWck={i$ z_!8C77t|*8&0^L(owX1Kl3pDvpo>}Xj7|T7+H~oH%yDjx+SG0z0*eT2!J1ejtH=AB zkhNHZc#>?UqFR`V_%N)3>ruzk2{xN833eb_0yE%d)bkstj=aS(m@2#JU@Oe1^S_mV z&f{&=+Wf@&7%7K+*P}+>3AO14qh@RzYOUv@W@rs+#&)6dA4lcCj>`WKwIuIR@0VW~ zPv<{jPLm-3wOR6^mZB1Bw^zqT*b23VCs4ciEUE*qPa@hnW$H_aIt}TOkvgHM z8EJ$5I2eOz-&ssRFOtj1HzUV4x9LDE)T=i>YGeVZk>$4W(x?tpM~$=@rpJz`dj3Fd zwi&2Ryb!g-tFZ(beDZMqm9bPlGxcS$F7e8!H{co^hR3lKme23;{(@l&mL+}xHKJq% z%-+a>1&G(jkvIbjqF+IeQw-~&mTEq#V`~d?{x#*>NYDt*pr-Je&2SI({FzPvg<66r zh0Kh^L{*dwRW2=RZ8M{mC=_+fnxN|Gftty2sNFxS5aZXTxJ-i9@E+>p_zh|^#x87@ zA`zz-H81CMs&yJUuF7 z0epd#Q5`54VmeqBgNe6B??|vP@ynw26; z{1Vp2_QlMH#xc}xZd}~s{ZXqwYUa+P8n}g;v4^Ooe1V$s52%@l!H!dU3RM1#m`3M6 z8v(6VRclw&2&SNR{~YT^n|=&+3eI6typL+=D{7O)EonMh9aV2<)bmNG`c|MivKQ0o z{GTA8p8tbdg7;QWDHD&2+BE*C3W88mR}59I8mhx}QTdvoM%>w^53=c_kr6x7QSX;s zn3(pR{RA|XSCxPdP!)YeZL%n(&G}7^+5_n^2j)a|q$O&v^up>m9`%jq0cwVRp*obb zjG4JisHH53-oO7_i-0y$OVsE54Ah?3hI$X&KvnP`s-qFhn(vHpPz@(Qr3a!0kO#HK zVVD7HVgww3$~PF*f$?QI|7vIz2`YFNwYHB@4S&L{7_Xdp!GxkJY=?T&O+k%tCkEjq z3_z#6d7cT=5v_!p(e9|F8jR}5nDVX(OeaB8xfnIlEvN!VP-}j{#vh|9c!!$eZ}xeT z3TBf9p~{u8RzZ!lA*x(o)If)#Ixxp2ps8Ac`mou6>d0YKfy=1fdmA;??@==pt)j`7 z9M!=rsER{T&+DM}PCKiM>c~`7{Tom-=^iAY2A-lmBz~eYMh!C+q_gHjb+7`eBaKkI zxd*nynW#7CFZ(=IC9_#`q1L__YCxq>9j%1a<2tQOz!`vA^QovAS&!=JcIye$_k`=H z5r0K>Aa-TbKn_&7Jk}zpr6`4(>T0NC*T~u&qw4&(A)s^L71iKijEqxIBb{Z_H=w?H z9YlQ-x`ApiLKQPIU(8NC0jj=IsJ&DJb*fsRUOYps6VUtL|D8oZYqr?B6}2SCQ6s&B z8o@hMg+Eavi&fREVRBRh#ZVn;jOs{h)RfOgy*HMi>f3}l@i=<_{@+&u>VR)G)5Db5 zlXw7XPb@$kvsI`)a0J!CtEdsZvgw~uYwKIxbSy0vB3=$v|47uw_bl|*Tb=W-sai#X zrhX^-<0;gpd4X#1wbiGF8A$?EdKy#*a-$j!L9KCZ9E=T6Bfp30z$;XHzfkSPs>%6R z5B+MIhU=rIZ~&@@!%+n$qAHkg(>J1KWH;(Pa0Qj`Eh?W=%j}(as3{LX-P@8cf9>hDSwVL11oY(ajO8fz;Bk3BMin5>@Dvet6 z#;5^xwaQ3_ z>_xqj&!al@4*k)$iO2ibcC%nX;tR1f-fqJAFH0a@QQieX*2N{L7sgN2l0?wO)kU zESu0DkE5pYDQeR>ZOn@)3T7o57jKtTU5Pn+P3D) zWFgd)c0#>)#-NVLObo{D*bAScj$@;CW=Z;ERv#Kd?Tth2J>Gw6c^Oq-!wzN%`d}FG z4XCC0iM(fACs{{xZcC#wOhAp~4(7)Xm;tkOG8NWDRnP_XJ{XTWcE`~Bu1C$(E7W=a z4_BgZXEQTfQG4kmCeZo6OF#|0M{Sa1UCf$gMlDG$YYEhvRYx^g-^P2QMmiAnKA45- zz*5xaU4tsO$+`>G&LOGue~Ew!JVfuO9_sV?HL8L%T}{seFf;K&sLj+G+v8!>X3f^k z{NYj0y3V^9J3FJZRX{5HB{){MM`omL~o;>KJAkZ+`1l7%LJVftm0M-ou|RfoufsPVn$wC*~W; zM6AO48_D#%^s+OA;hPm(y!oNO!S92R+p_W(2sPVY3BEWsZsBVZde0fqDCA# z-MrA+VH4uxkaDi`nt(FInqhWrJ}gRn6i&vISQhKfG@EoO`V%ic%XF+cmLk3!`{FBX zi>+syKZ?DKDxYqS*@PWYGqD;=>HJ5ZYerB7)#EOxSK|q+j`vYL&OOikf?)>g*xke) zSbDyh@_nfDe+2acJBP{e32G^P7MS-*9E?HSAAM=x2_ldW^P_fcSJbO?5b6y!#ip-9 zy-0ST*8Tt%@ZnrzSK_}Gnu@zFGMmvw<$H|ub@Wu9JS_AR+x^YvF1Q^ zw3v-ou{LoDXe3>1hLNbAPe)Ze4>j`5s1Kc^sEY2QJ|kYCKc-%3I#vud(weC9tx&J# z{+I<1VmEw+JHPnZTXSEq|R#XLHcpRId&UN4#v!;ttBi)VK^?zYnypP(n z5!af5B}c`xqrR$@LCs)2BxbjbtHeYB!>e-)Ync zo}#8O(q>a}67(mY0`)>EjC!AxL(R~is3kp*Bk>!mLqoTi_rXYXm2oNoy@F?=dUhB? z@iO{j!mS?fe>gM`Y9!IOnHN?ZRKBtpf@85bp0UQ+ZeGpRQ8P9NOXGd4fB`!=|N3Ik zV~3fVO{hI^8GB>MPP10KP$R#H8tEg{rh1Foq)~TyoXwaL_3FNWRq#1#j}+WZ2Yh&; z;ZWjB_n6}xu$S|%HP5rx{7~5db-Z??j>#$1rYXG7?Ans38LERirfpH*@4H|+?29dM z0ct5D?KexC5IuAtBQ_>I@PHY}SeJly?M&3JTw>j0y^I>^OVkU;bI??n+L{w}oJwK@ ztbIxv<7zC0-!LN< zJ7P{tTMQsR6SahgP)nQjsK@)?d~J)W|0!-kzhfT#w_;r9GJ!x6vLE+&H&K1mOw7Z= zxDC~z_oy{Zd%|qi9+;o_0xW|!uo9*@X?`;5igSoB!tq%6l*juIl}=+d;_d#_$35re zfH%M{Kkf1UO~!T@kG0y4I(Dbdmp8QT zJELCV&rzS25zezzIZ7MpYQ=g6Uvp zj7_{Vs=-01JvQ5>FGKB(ZRq{)fA1!chJ+KSWA*|yq93RilkY`yj8dZVg`$pGbJS@W zfI1c9P#vC!D!&RfupOxUM^P`fJE$f2e3A375m&fmj#G711@%ySq7_ENDX1RLMK!nx zwc9tMK0UXh8vGM=O0L`IpHQda8|sw!Ts9wW2~m40_hr|d+ZH5f1Y=MY%t1}zZqx|= zL~XKb*dP6`nBQW}Lv7Mam=ELpWqtrDi`uN~uqOUO)l>7Td0#X`#oN0C*lYj0iZdPC z=yG0$w~TNuO%K;5-ZmLLyihb8uHJh4a3!MfGp1%L;Yq($v`y2)wT!fUHvKGRV^haX z(rBp01tAKu`mt(K{$b}AdF`%Dac{){+uw6hGUZ!m$a(36Ps-Vp_K8b zz7o_?glD~N=lhXgS3=T4ydm}gX{#e}{y2S3RWeSYa9hHusW=i3%Mx!%=DNgnRj`#k zq7wdEr}xq~n1!~ZO2|NZVxG^V{20_VpK^Yr=d<<9Cv6<}K+4_m=oQ74iUMg#NXI>w zPJ~~V3EZQw-UBgyYe-+a`%N9(Ke2nA)Puy*(2Rb}2%y;-)X<9Na#E|VRD`>5&m;Vq zXOqc)jd&TJ*T5{4jX^j9;buJh{c1~E3hF#g`Yyap`60Bak2@~cNloGaG6hn}Oe!f( zhG%4mMEZZ2f`XNJ)|%Y4$j4V8+}}y@P;RiDkqqRWLwr8vhS|>EAWvyC5dQug z5nub@8;MmYu;aI$hPQCjR#=D1hS5+6c{)XWCu59@!E!bOR!rQPRQEE_M&vwsMWwE6ej z^fsg)rJg@*op0!nu7-4YvCXUaGV%(nj;K+6xMri^WSh2;urB_wiTD3McRJxXJPWkxi^-pXwDdOrQ5sH8nr1m2d5Ypk ze9C=@u=o7;A<~!Nb2_n>5oe{4KBSwIp&`!Z`EuL2d*ms_eToLgkS{xVnp37G;WC6T zqpn%xsZ4wn&vczOc>lLEY0-FIKy|YJyx(zNl34e*O!?$cBrKzcR8 z|L`m|6*Qm`T`Ne}b)1exww-N6zF3qGuN&y2lrQ7&nNoQkGntp>qUL~XBPU(wTZHoZ22-gTS0#QS%>$^L;l#L zgZy;kt+!CJCn#WdDo##7A3#70gg(Hz3!8W?p=H=fRdB23_ zqY=JAJG02Qe(Hyzer^X+@)P6V={c+L7PS@R*3}aadP8)L9;_lyIZ8LR&-Ew~@sgAq zVe^%zzU#!#5?_qDi0kT0_;2ph)DvXWNOrxO&6|V&`9%X;$h4JAy8fb}Ma*X}8c9xg zF3)E3tT5rIqz@;*uGYlg5I#=D`>`MSmy&kDJa(FpHwW=0+~LM9+9t-gQ)B`L6g zy956IxvkqTS~s2H}!a5{6lM=ucvD)YX9SGBOV*T-P?foPs@x=O=v@Y5WN7 z{fSWd`JvEzH8t>m;Ky;Jj-_;nUp_cL3D>iEhS6rJ@K>$P@8v81o0~>{VI3NnMu9B0 z@uP(K5!tCu}PnWC`%r%1fY z{e;S9+6;#Y_oRoPsBk|O=~{%fa1WIZB|Ry&C!ek$?#@&=mAenm*7EF~E%z_s@M|4` zUA9bmo=@=pQ*rxrzAaGCW{8aUNy~*{)pVg zNbA6}KwGYs%{QB8HRyb68}CY^ne1RF;yS0ONPisl`?ZpWj@g9GRJfk!aVeOSN3P`ychq%qlld~YuE=ESLbw=(b?xPTK;;{~G4ns? zsdOL}G@!xngmVxc&z;IvnvrZ9Df60VRjDr*`TimPi1b$EX-wVqNNehCgCA7~5!ub1 zmWTZ@l+3y&VXz50@p-n8cm$s7%1t=hRG*>oOJ1az@aq`iB6R;a39o57vd#UIrrOzj z1*z%p-{vBeJc(43+lCz5DA~nUH`3-xYWp*en$v_gg*S-T#6otme5m=MZ7~VYF4%G^ z5`pl0o9}Pp^@tzfzH9R&@cyM89`vw{ro(hR{ELbja_6xXKOns&>4&%zP~ki}y^5RP zmN^eeJ55?X>Io%YhW7}ZBxWZeDI>{CL0wyH z!;?tUwaVb|TQuh!1#{B)bZ%WYiMJ!Y8+Gu{a-Er!)h~=zla`bFKc0^#y+7f^c!9XC z)`XksO?ji3!qLg2YZ3b4Y|0iPPY>!VV>|XY zHluuTp2x@GwvMrQ!IpP75m`%w-<~;1D9{8WP+3FnVx$-2`AjT9#hH0NlDjImt^*2V z3frlslqo^DH2UB~%H*TICD;W+smG6J0XPJg>617r6;vQ0{F=vu`4ss5>O?21lkk8B zUtn6|hixZ5U}_t#MEW(#`e7E*7Sd>5>dQbl{cjZ}Bz+ipDw;Quc@jdw2|Q?rGq{rw z&crCHQ$aR5Sd@4-!ds}UzO5_=>1(NI5b4FqtIPA-U>Z{ozZ7?p*))Ih>e@n@AGf#t zcUYUke^BvG?rFq5ddSttIvR`7h^{X9i~NVEyr``(3Gs}!1CgjBn@#_OGl+lVPQ|^6 zj<{Hndn>ma!!|IS!ab>QHW}XXU=-mh}E~zNM{imiHg+QfLwh1F0nZ`bB}9Wc;Qy3blc@;SaGMl})p= zaf;{R*H>Hd78*}Z*(N-wOFlp9`;YK=@}}lq%pI5KG4)Ms1A)yH96+Y-JW#zpw)bU; zJmL90Ze16D8&xCn7UH=FbrqzJOTRt8Lz%Lq#iO(TlIJ<`mp1QGJV%*v;orn!s8z0X z+_5OokjybKJ?S^>sO}M;PI_CLcN`9)(`9gm&7(Tza!)1SK-*Yv@+=^24dok=w~EdC zFKKQA{^z?*SVf_gjNlvvUXu>qYcmz4q+n4Jev(Jm5ALUSwE3;;?KAzC2)o$EQ&V>d z%3UG(U2Kc>DO`@;>Z(Y_#j8H`dY75|v8`+$6@-%Mv8`k-jo-K7={)N| zxG8Bh?Wi*ok41-$5`T&lZRb?~IKu0=mlDp-9ZWcvo~!*#RHiGBZMY~S9zu8|rsr8F zD!ybJc|yMaq>aLlHve#|>hMr$T{?A){B0<|oM&@MOUgZmdUjIwCig$2*XAxcki^&A zlejlem^Y8qV}k{yWhL?b@GdOz+f>H6c}&_0IhgS=lOZkvXSQ( zcX>Mao_HndyNyw~huPLjk=DePn~6^pR{M#mXli}BV@>HXut~`rPJ@0w0YY_K!!ehz%2M!@$ zQ|bsH-wyKY>We4zdLL^WDotWKDw$12U7yLkz&@Kq=CM>%-xfY+NAcLkyOM7r`E|wO z*&5O-a3`Y7U^)?oIc#0Z6QA%7@~?Nv)PW4Wi9Dm=1v0KCoCe#GKAwze3F`_W{UV)f z!M&37vg99SJEG^)NbAhA{FIBSI(T-HvMqkgqkNM{n@Zk8mwXFV0oPN)yUEjxyEhf)|E;58l<7s;;-o(( z+=BcCFf(}yQEoe7m*>U8U&^ZR1P?Nh_=HR^2sc+E*J3h1w3YuwygTuGG&&ji&pbJo zDN}&wl}S5FcmN&rqr9#gI2r@-3C|aC>#9Rp@1^-KK%ww!GZ_bvsUT^!NxV(Q8Fs|G zXe1)(LwSCNXAMYyM*fPVec|3qXQpxww3S^Y-$UZnC^wzw$*5}~`Gv#-o$gnbG}C-s+^c z$1|k0v(u;wbqymu9`{D_tR-Fv+i{0qsg-8ySK1ZANe5HOEAE=MvgJHzL5Jpezq0kD z_-CrrHJQ{RxQ=*j+vV|8F@~;o>TtFaze-_UHE3K{C(?RjCR{;9iER2u!n!I_@f#Yx&hvR8$JZ&|Bx>Teq0e3Vi+fL&> zD4&Azb-YjbT7v)mR^J}t$;o$({B>;kTQq)A_3Q1hlf=dL0a0fP6+XlxR5HOi>?@)aZ=lRQ~zSXVUah)eqa z)o^wpO@>h%_Z_55rWe}H>_Zb$7jxNLDtaMZ7=8q@Sg{Ld34<0QBMb`y5mFW?EZc^l zAT-v5QmNdN)6#kVT*!?}kujq6{(=MkE2AP=^8wvY^aW*G`Y_TwL@i|8NHdqPx}LNH(Q zChD_b=iv3x57U1aKb0yUUIiIt#SaiKc|XWa>P|LYlIcMvn{b2PXLv7&)%bv1^N2ZR zuTgf Date: Sun, 25 Aug 2024 15:27:59 +0200 Subject: [PATCH 48/56] replace $CI with $this --- application/models/Distances_model.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/application/models/Distances_model.php b/application/models/Distances_model.php index 80def17c5..d3dcb8602 100644 --- a/application/models/Distances_model.php +++ b/application/models/Distances_model.php @@ -5,9 +5,8 @@ class Distances_model extends CI_Model { function get_distances($postdata, $measurement_base) { - $CI =& get_instance(); - $CI->load->model('logbooks_model'); - $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); + $this->load->model('logbooks_model'); + $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); if (!$logbooks_locations_array) { header('Content-Type: application/json'); @@ -231,9 +230,8 @@ class Distances_model extends CI_Model */ public function qso_details($distance, $band, $sat){ $distarray = $this->getdistparams($distance); - $CI =& get_instance(); - $CI->load->model('logbooks_model'); - $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); + $this->load->model('logbooks_model'); + $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); $this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); $this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC', 'left outer'); From 49113fe19ff21841f50c9f44d3445d708a3ea2eb Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Sun, 25 Aug 2024 15:34:09 +0200 Subject: [PATCH 49/56] xss clean of postdata --- application/models/Distances_model.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/application/models/Distances_model.php b/application/models/Distances_model.php index d3dcb8602..be96e7f04 100644 --- a/application/models/Distances_model.php +++ b/application/models/Distances_model.php @@ -5,6 +5,9 @@ class Distances_model extends CI_Model { function get_distances($postdata, $measurement_base) { + + $clean_postdata = $this->security->xss_clean($postdata); + $this->load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); @@ -27,20 +30,20 @@ class Distances_model extends CI_Model $this->db->join('satellite', 'satellite.name = '.$this->config->item('table_name').'.COL_SAT_NAME', 'left outer'); $this->db->where('LENGTH(col_gridsquare) >', 0); - if ($postdata['band'] != 'All') { - if ($postdata['band'] == 'sat') { - $this->db->where('col_prop_mode', $postdata['band']); - if ($postdata['sat'] != 'All') { - $this->db->where('col_sat_name', $postdata['sat']); + if ($clean_postdata['band'] != 'All') { + if ($clean_postdata['band'] == 'sat') { + $this->db->where('col_prop_mode', $clean_postdata['band']); + if ($clean_postdata['sat'] != 'All') { + $this->db->where('col_sat_name', $clean_postdata['sat']); } } else { - $this->db->where('col_band', $postdata['band']); + $this->db->where('col_band', $clean_postdata['band']); } } - if ($postdata['orbit'] != 'All') { - $this->db->where('satellite.orbit', $postdata['orbit']); + if ($clean_postdata['orbit'] != 'All') { + $this->db->where('satellite.orbit', $clean_postdata['orbit']); } $this->db->where('station_id', $station_id); From 9c8011a212ced17676e812fd0378078af6da7851 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Sun, 25 Aug 2024 15:37:48 +0200 Subject: [PATCH 50/56] make sure we have just one distance function in qra lib --- application/libraries/Qra.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/libraries/Qra.php b/application/libraries/Qra.php index d14e0ceb1..081092104 100644 --- a/application/libraries/Qra.php +++ b/application/libraries/Qra.php @@ -50,7 +50,7 @@ class Qra { // Feed in Lat Longs plus the unit type try { - $total_distance = distance($my[0], $my[1], $stn[0], $stn[1], $unit); + $total_distance = calc_distance($my[0], $my[1], $stn[0], $stn[1], $unit); } catch (Exception $e) { @@ -128,7 +128,7 @@ class Qra { } - function distance($lat1, $lon1, $lat2, $lon2, $unit = 'M') { + function calc_distance($lat1, $lon1, $lat2, $lon2, $unit = 'M') { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); @@ -147,7 +147,7 @@ class Qra { } function bearing($lat1, $lon1, $lat2, $lon2, $unit = 'M') { - $dist = distance($lat1, $lon1, $lat2, $lon2, $unit); + $dist = calc_distance($lat1, $lon1, $lat2, $lon2, $unit); $dist = round($dist, 0); $bearing = get_bearing($lat1, $lon1, $lat2, $lon2); From 767eeaca9ec7c9f72d127895510b4ee7eeaee4eb Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Sun, 25 Aug 2024 17:08:43 +0200 Subject: [PATCH 51/56] update htmx lib to 2.0.2 --- assets/js/htmx.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/htmx.min.js b/assets/js/htmx.min.js index 6094f102e..c11fbbdf4 100644 --- a/assets/js/htmx.min.js +++ b/assets/js/htmx.min.js @@ -1 +1 @@ -(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else{e.htmx=t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var D={onLoad:t,process:rt,on:N,off:I,trigger:lt,ajax:$t,find:w,findAll:S,closest:O,values:function(e,t){var r=Ot(e,t||"post");return r.values},remove:E,addClass:C,removeClass:R,toggleClass:q,takeClass:L,defineExtension:Qt,removeExtension:er,logAll:b,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth"},parseInterval:h,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){return new WebSocket(e,[])},version:"1.6.1"};var r=["get","post","put","delete","patch"];var n=r.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function h(e){if(e==undefined){return undefined}if(e.slice(-2)=="ms"){return parseFloat(e.slice(0,-2))||undefined}if(e.slice(-1)=="s"){return parseFloat(e.slice(0,-1))*1e3||undefined}return parseFloat(e)||undefined}function c(e,t){return e.getAttribute&&e.getAttribute(t)}function s(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function F(e,t){return c(e,t)||c(e,"data-"+t)}function l(e){return e.parentElement}function P(){return document}function d(e,t){if(t(e)){return e}else if(l(e)){return d(l(e),t)}else{return null}}function X(e,t){var r=null;d(e,function(e){return r=F(e,t)});if(r!=="unset"){return r}}function v(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function i(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function o(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=P().createDocumentFragment()}return i}function u(e){if(D.config.useTemplateFragments){var t=o("",0);return t.querySelector("template").content}else{var r=i(e);switch(r){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return o("
"+e+"
",1);case"col":return o(""+e+"
",2);case"tr":return o(""+e+"
",2);case"td":case"th":return o(""+e+"
",3);case"script":return o("
"+e+"
",1);default:return o(e,0)}}}function U(e){if(e){e()}}function a(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function f(e){return a(e,"Function")}function g(e){return a(e,"Object")}function j(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function p(e){var t=[];if(e){for(var r=0;r=0}function z(e){return P().body.contains(e)}function y(e){return e.trim().split(/\s+/)}function V(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function x(e){try{return JSON.parse(e)}catch(e){ut(e);return null}}function e(e){return Ut(P().body,function(){return eval(e)})}function t(t){var e=D.on("htmx:load",function(e){t(e.detail.elt)});return e}function b(){D.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function w(e,t){if(t){return e.querySelector(t)}else{return w(P(),e)}}function S(e,t){if(t){return e.querySelectorAll(t)}else{return S(P(),e)}}function E(e,t){e=H(e);if(t){setTimeout(function(){E(e)},t)}else{e.parentElement.removeChild(e)}}function C(e,t,r){e=H(e);if(r){setTimeout(function(){C(e,t)},r)}else{e.classList&&e.classList.add(t)}}function R(e,t,r){e=H(e);if(r){setTimeout(function(){R(e,t)},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function q(e,t){e=H(e);e.classList.toggle(t)}function L(e,t){e=H(e);B(e.parentElement.children,function(e){R(e,t)});C(e,t)}function O(e,t){e=H(e);if(e.closest){return e.closest(t)}else{do{if(e==null||v(e,t)){return e}}while(e=e&&l(e))}}function T(e,t){if(t.indexOf("closest ")===0){return[O(e,t.substr(8))]}else if(t.indexOf("find ")===0){return[w(e,t.substr(5))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else{return P().querySelectorAll(t)}}function A(e,t){if(t){return T(e,t)[0]}else{return T(P().body,e)[0]}}function H(e){if(a(e,"String")){return w(e)}else{return e}}function k(e,t,r){if(f(t)){return{target:P().body,event:e,listener:t}}else{return{target:H(e),event:t,listener:r}}}function N(t,r,n){rr(function(){var e=k(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=f(r);return e?r:n}function I(t,r,n){rr(function(){var e=k(t,r,n);e.target.removeEventListener(e.event,e.listener)});return f(r)?r:n}function _(e){var t=d(e,function(e){return F(e,"hx-target")!==null});if(t){var r=F(t,"hx-target");if(r==="this"){return t}else{return A(e,r)}}else{var n=j(e);if(n.boosted){return P().body}else{return e}}}function M(e){var t=D.config.attributesToSettle;for(var r=0;r0){i=e.substr(0,e.indexOf(":"));n=e.substr(e.indexOf(":")+1,e.length)}else{i=e}var o=P().querySelector(n);if(o){var a;a=P().createDocumentFragment();a.appendChild(t);if(!$(i,o)){a=t}le(i,o,o,a,r)}else{t.parentNode.removeChild(t);ot(P().body,"htmx:oobErrorNoTarget",{content:t})}return e}function Z(e,r){B(S(e,"[hx-swap-oob], [data-hx-swap-oob]"),function(e){var t=F(e,"hx-swap-oob");if(t!=null){J(t,e,r)}})}function G(e){B(S(e,"[hx-preserve], [data-hx-preserve]"),function(e){var t=F(e,"id");var r=P().getElementById(t);if(r!=null){e.parentNode.replaceChild(r,e)}})}function K(n,e,i){B(e.querySelectorAll("[id]"),function(e){if(e.id&&e.id.length>0){var t=n.querySelector(e.tagName+"[id='"+e.id+"']");if(t&&t!==n){var r=e.cloneNode();W(e,t);i.tasks.push(function(){W(e,r)})}}})}function Y(e){return function(){R(e,D.config.addedClass);rt(e);Ke(e);Q(e);lt(e,"htmx:load")}}function Q(e){var t="[autofocus]";var r=v(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function ee(e,t,r,n){K(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;C(i,D.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Y(i))}}}function te(t){var e=j(t);if(e.webSocket){e.webSocket.close()}if(e.sseEventSource){e.sseEventSource.close()}if(e.listenerInfos){B(e.listenerInfos,function(e){if(t!==e.on){e.on.removeEventListener(e.trigger,e.listener)}})}if(t.children){B(t.children,function(e){te(e)})}}function re(e,t,r){if(e.tagName==="BODY"){return se(e,t,r)}else{var n=e.previousSibling;ee(l(e),e,t,r);if(n==null){var i=l(e).firstChild}else{var i=n.nextSibling}j(e).replacedWith=i;r.elts=[];while(i&&i!==e){if(i.nodeType===Node.ELEMENT_NODE){r.elts.push(i)}i=i.nextElementSibling}te(e);l(e).removeChild(e)}}function ne(e,t,r){return ee(e,e.firstChild,t,r)}function ie(e,t,r){return ee(l(e),e,t,r)}function oe(e,t,r){return ee(e,null,t,r)}function ae(e,t,r){return ee(l(e),e.nextSibling,t,r)}function se(e,t,r){var n=e.firstChild;ee(e,n,t,r);if(n){while(n.nextSibling){te(n.nextSibling);e.removeChild(n.nextSibling)}te(n);e.removeChild(n)}}function ue(e,t){var r=X(e,"hx-select");if(r){var n=P().createDocumentFragment();B(t.querySelectorAll(r),function(e){n.appendChild(e)});t=n}return t}function le(e,t,r,n,i){switch(e){case"none":return;case"outerHTML":re(r,n,i);return;case"afterbegin":ne(r,n,i);return;case"beforebegin":ie(r,n,i);return;case"beforeend":oe(r,n,i);return;case"afterend":ae(r,n,i);return;default:var o=tr(t);for(var a=0;a-1){var t=e.replace(/]*>|>)([\s\S]*?)<\/svg>/gim,"");var r=t.match(/]*>|>)([\s\S]*?)<\/title>/im);if(r){return r[2]}}}function ce(e,t,r,n,i){var o=fe(n);if(o){var a=w("title");if(a){a.innerHTML=o}else{window.document.title=o}}var s=u(n);if(s){Z(s,i);s=ue(r,s);G(s);return le(e,r,t,s,i)}}function he(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=x(n);for(var o in i){if(i.hasOwnProperty(o)){var a=i[o];if(!g(a)){a={value:a}}lt(r,o,a)}}}else{lt(r,n,[])}}var de=/\s/;var ve=/[\s,]/;var ge=/[_$a-zA-Z]/;var pe=/[_$a-zA-Z0-9]/;var me=['"',"'","/"];var ye=/[^\s]/;function xe(e){var t=[];var r=0;while(r0){var a=t[0];if(a==="]"){n--;if(n===0){if(o===null){i=i+"true"}t.shift();i+=")})";try{var s=Ut(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){ot(P().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(a==="["){n++}if(be(a,o,r)){i+="(("+r+"."+a+") ? ("+r+"."+a+") : (window."+a+"))"}else{i=i+a}o=t.shift()}}}function Se(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}var Ee="input, textarea, select";function Ce(e){var t=F(e,"hx-trigger");var r=[];if(t){var n=xe(t);do{Se(n,ye);var i=n.length;var o=Se(n,/[,\[\s]/);if(o!==""){if(o==="every"){var a={trigger:"every"};Se(n,ye);a.pollInterval=h(Se(n,/[,\[\s]/));Se(n,ye);var s=we(e,n,"event");if(s){a.eventFilter=s}r.push(a)}else if(o.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:o.substr(4)})}else{var u={trigger:o};var s=we(e,n,"event");if(s){u.eventFilter=s}while(n.length>0&&n[0]!==","){Se(n,ye);var l=n.shift();if(l==="changed"){u.changed=true}else if(l==="once"){u.once=true}else if(l==="consume"){u.consume=true}else if(l==="delay"&&n[0]===":"){n.shift();u.delay=h(Se(n,ve))}else if(l==="from"&&n[0]===":"){n.shift();let e=Se(n,ve);if(e==="closest"||e==="find"){n.shift();e+=" "+Se(n,ve)}u.from=e}else if(l==="target"&&n[0]===":"){n.shift();u.target=Se(n,ve)}else if(l==="throttle"&&n[0]===":"){n.shift();u.throttle=h(Se(n,ve))}else if(l==="queue"&&n[0]===":"){n.shift();u.queue=Se(n,ve)}else if((l==="root"||l==="threshold")&&n[0]===":"){n.shift();u[l]=Se(n,ve)}else{ot(e,"htmx:syntax:error",{token:n.shift()})}}r.push(u)}}if(n.length===i){ot(e,"htmx:syntax:error",{token:n.shift()})}Se(n,ye)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(v(e,"form")){return[{trigger:"submit"}]}else if(v(e,Ee)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function Re(e){j(e).cancelled=true}function qe(e,t,r,n){var i=j(e);i.timeout=setTimeout(function(){if(z(e)&&i.cancelled!==true){if(!He(n,it("hx:poll:trigger",{triggerSpec:n}))){Zt(t,r,e)}qe(e,t,F(e,"hx-"+t),n)}},n.pollInterval)}function Le(e){return location.hostname===e.hostname&&c(e,"href")&&c(e,"href").indexOf("#")!==0}function Oe(t,r,e){if(t.tagName==="A"&&Le(t)&&t.target===""||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=c(t,"href");r.pushURL=true}else{var o=c(t,"method");n=o?o.toLowerCase():"get";if(n==="get"){r.pushURL=true}i=c(t,"action")}e.forEach(function(e){ke(t,n,i,r,e,true)})}}function Te(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(v(t,'input[type="submit"], button')&&O(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function Ae(e,t){return j(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function He(e,t){var r=e.eventFilter;if(r){try{return r(t)!==true}catch(e){ot(P().body,"htmx:eventFilter:error",{error:e,source:r.source});return true}}return false}function ke(o,a,s,e,u,l){var t;if(u.from){t=T(o,u.from)}else{t=[o]}B(t,function(n){var i=function(e){if(!z(o)){n.removeEventListener(u.trigger,i);return}if(Ae(o,e)){return}if(l||Te(e,o)){e.preventDefault()}if(He(u,e)){return}var t=j(e);t.triggerSpec=u;if(t.handledFor==null){t.handledFor=[]}var r=j(o);if(t.handledFor.indexOf(o)<0){t.handledFor.push(o);if(u.consume){e.stopPropagation()}if(u.target&&e.target){if(!v(e.target,u.target)){return}}if(u.once){if(r.triggeredOnce){return}else{r.triggeredOnce=true}}if(u.changed){if(r.lastValue===o.value){return}else{r.lastValue=o.value}}if(r.delayed){clearTimeout(r.delayed)}if(r.throttle){return}if(u.throttle){if(!r.throttle){Zt(a,s,o,e);r.throttle=setTimeout(function(){r.throttle=null},u.throttle)}}else if(u.delay){r.delayed=setTimeout(function(){Zt(a,s,o,e)},u.delay)}else{Zt(a,s,o,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:u.trigger,listener:i,on:n});n.addEventListener(u.trigger,i)})}var Ne=false;var Ie=null;function Me(){if(!Ie){Ie=function(){Ne=true};window.addEventListener("scroll",Ie);setInterval(function(){if(Ne){Ne=false;B(P().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){De(e)})}},200)}}function De(e){if(!s(e,"data-hx-revealed")&&m(e)){e.setAttribute("data-hx-revealed","true");var t=j(e);if(t.initialized){Zt(t.verb,t.path,e)}else{e.addEventListener("htmx:afterProcessNode",function(){Zt(t.verb,t.path,e)},{once:true})}}}function Fe(e,t,r){var n=y(r);for(var i=0;i=0){var t=je(n);setTimeout(function(){Pe(s,r,n+1)},t)}};t.onopen=function(e){n=0};j(s).webSocket=t;t.addEventListener("message",function(e){if(Xe(s)){return}var t=e.data;st(s,function(e){t=e.transformResponse(t,null,s)});var r=Ft(s);var n=u(t);var i=p(n.children);for(var o=0;o0){lt(l,"htmx:validation:halted",i);return}t.send(JSON.stringify(u));if(Te(e,l)){e.preventDefault()}})}else{ot(l,"htmx:noWebSocketSourceError")}}function je(e){var t=D.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}ut('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function Be(e,t,r){var n=y(r);for(var i=0;iD.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){ot(P().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function dt(e){var t=x(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r=200&&this.status<400){lt(P().body,"htmx:historyCacheMissLoad",i);var e=u(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=ct();var r=Ft(t);se(t,e,r);mt(r.tasks);ft=n;lt(P().body,"htmx:historyRestore",{path:n})}else{ot(P().body,"htmx:historyCacheMissLoadError",i)}};e.send()}function xt(e){gt();e=e||location.pathname+location.search;var t=dt(e);if(t){var r=u(t.content);var n=ct();var i=Ft(n);se(n,r,i);mt(i.tasks);document.title=t.title;window.scrollTo(0,t.scroll);ft=e;lt(P().body,"htmx:historyRestore",{path:e})}else{if(D.config.refreshOnHistoryMiss){window.location.reload(true)}else{yt(e)}}}function bt(e){var t=X(e,"hx-push-url");return t&&t!=="false"||j(e).boosted&&j(e).pushURL}function wt(e){var t=X(e,"hx-push-url");return t==="true"||t==="false"?null:t}function St(e){var t=X(e,"hx-indicator");if(t){var r=T(e,t)}else{r=[e]}B(r,function(e){e.classList["add"].call(e.classList,D.config.requestClass)});return r}function Et(e){B(e,function(e){e.classList["remove"].call(e.classList,D.config.requestClass)})}function Ct(e,t){for(var r=0;r=0}function Mt(e){var t=X(e,"hx-swap");var r={swapStyle:j(e).boosted?"innerHTML":D.config.defaultSwapStyle,swapDelay:D.config.defaultSwapDelay,settleDelay:D.config.defaultSettleDelay};if(j(e).boosted&&!It(e)){r["show"]="top"}if(t){var n=y(t);if(n.length>0){r["swapStyle"]=n[0];for(var i=1;i0?s.join(":"):null;r["scroll"]=u;r["scrollTarget"]=l}if(o.indexOf("show:")===0){var f=o.substr(5);var s=f.split(":");var c=s.pop();var l=s.length>0?s.join(":"):null;r["show"]=c;r["showTarget"]=l}}}}return r}function Dt(t,r,n){var i=null;st(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(X(r,"hx-encoding")==="multipart/form-data"||v(r,"form")&&c(r,"enctype")==="multipart/form-data"){return Ht(n)}else{return At(n)}}}function Ft(e){return{tasks:[],elts:[e]}}function Pt(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=A(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var o=t.showTarget;if(t.showTarget==="window"){o="body"}i=A(r,o)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:D.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:D.config.scrollBehavior})}}}function Xt(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=F(e,t);if(i){var o=i.trim();var a=r;if(o.indexOf("javascript:")===0){o=o.substr(11);a=true}else if(o.indexOf("js:")===0){o=o.substr(3);a=true}if(o.indexOf("{")!==0){o="{"+o+"}"}var s;if(a){s=Ut(e,function(){return Function("return ("+o+")")()},{})}else{s=x(o)}for(var u in s){if(s.hasOwnProperty(u)){if(n[u]==null){n[u]=s[u]}}}}return Xt(l(e),t,r,n)}function Ut(e,t,r){if(D.config.allowEval){return t()}else{ot(e,"htmx:evalDisallowedError");return r}}function jt(e,t){return Xt(e,"hx-vars",true,t)}function Bt(e,t){return Xt(e,"hx-vals",false,t)}function zt(e){return V(jt(e),Bt(e))}function Vt(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function _t(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){ot(P().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function Wt(e,t){return e.getAllResponseHeaders().match(t)}function $t(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||a(r,"String")){return Zt(e,t,null,null,{targetOverride:H(r),returnPromise:true})}else{return Zt(e,t,H(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:H(r.target),returnPromise:true})}}else{return Zt(e,t,null,null,{returnPromise:true})}}function Jt(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function Zt(e,t,n,r,i){var o=null;var a=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!=="undefined"){var s=new Promise(function(e,t){o=e;a=t})}if(n==null){n=P().body}var u=i.handler||Gt;if(!z(n)){return}var l=i.targetOverride||_(n);if(l==null){ot(n,"htmx:targetError",{target:F(n,"hx-target")});return}var f=j(n);if(f.requestInFlight){var c="last";if(r){var h=j(r);if(h&&h.triggerSpec&&h.triggerSpec.queue){c=h.triggerSpec.queue}}if(f.queuedRequests==null){f.queuedRequests=[]}if(c==="first"&&f.queuedRequests.length===0){f.queuedRequests.push(function(){Zt(e,t,n,r,i)})}else if(c==="all"){f.queuedRequests.push(function(){Zt(e,t,n,r,i)})}else if(c==="last"){f.queuedRequests=[];f.queuedRequests.push(function(){Zt(e,t,n,r,i)})}return}else{f.requestInFlight=true}var d=function(){f.requestInFlight=false;if(f.queuedRequests!=null&&f.queuedRequests.length>0){var e=f.queuedRequests.shift();e()}};var v=X(n,"hx-prompt");if(v){var g=prompt(v);if(g===null||!lt(n,"htmx:prompt",{prompt:g,target:l})){U(o);d();return s}}var p=X(n,"hx-confirm");if(p){if(!confirm(p)){U(o);d();return s}}var m=new XMLHttpRequest;var y=kt(n,l,g);if(i.headers){y=V(y,i.headers)}var x=Ot(n,e);var b=x.errors;var w=x.values;if(i.values){w=V(w,i.values)}var S=zt(n);var E=V(w,S);var C=Nt(E,n);if(e!=="get"&&X(n,"hx-encoding")==null){y["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"}if(t==null||t===""){t=P().location.href}var R=Xt(n,"hx-request");var q={parameters:C,unfilteredParameters:E,headers:y,target:l,verb:e,errors:b,withCredentials:i.credentials||R.credentials||D.config.withCredentials,timeout:i.timeout||R.timeout||D.config.timeout,path:t,triggeringEvent:r};if(!lt(n,"htmx:configRequest",q)){U(o);d();return s}t=q.path;e=q.verb;y=q.headers;C=q.parameters;b=q.errors;if(b&&b.length>0){lt(n,"htmx:validation:halted",q);U(o);d();return s}var L=t.split("#");var O=L[0];var T=L[1];if(e==="get"){var A=O;var H=Object.keys(C).length!==0;if(H){if(A.indexOf("?")<0){A+="?"}else{A+="&"}A+=At(C);if(T){A+="#"+T}}m.open("GET",A,true)}else{m.open(e.toUpperCase(),t,true)}m.overrideMimeType("text/html");m.withCredentials=q.withCredentials;m.timeout=q.timeout;if(R.noHeaders){}else{for(var k in y){if(y.hasOwnProperty(k)){var N=y[k];Vt(m,k,N)}}}var I={xhr:m,target:l,requestConfig:q,pathInfo:{path:t,finalPath:A,anchor:T}};m.onload=function(){try{var e=Jt(n);u(n,I);Et(M);lt(n,"htmx:afterRequest",I);lt(n,"htmx:afterOnLoad",I);if(!z(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(z(r)){t=r}}if(t){lt(t,"htmx:afterRequest",I);lt(t,"htmx:afterOnLoad",I)}}U(o);d()}catch(e){ot(n,"htmx:onLoadError",V({error:e},I));throw e}};m.onerror=function(){Et(M);ot(n,"htmx:afterRequest",I);ot(n,"htmx:sendError",I);U(a);d()};m.onabort=function(){Et(M);ot(n,"htmx:afterRequest",I);ot(n,"htmx:sendAbort",I);U(a);d()};m.ontimeout=function(){Et(M);ot(n,"htmx:afterRequest",I);ot(n,"htmx:timeout",I);U(a);d()};if(!lt(n,"htmx:beforeRequest",I)){U(o);d();return s}var M=St(n);B(["loadstart","loadend","progress","abort"],function(t){B([m,m.upload],function(e){e.addEventListener(t,function(e){lt(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});lt(n,"htmx:beforeSend",I);m.send(e==="get"?null:Dt(m,n,C));return s}function Gt(a,s){var u=s.xhr;var l=s.target;if(!lt(a,"htmx:beforeOnLoad",s))return;if(Wt(u,/HX-Trigger:/i)){he(u,"HX-Trigger",a)}if(Wt(u,/HX-Push:/i)){var f=u.getResponseHeader("HX-Push")}if(Wt(u,/HX-Redirect:/i)){window.location.href=u.getResponseHeader("HX-Redirect");return}if(Wt(u,/HX-Refresh:/i)){if("true"===u.getResponseHeader("HX-Refresh")){location.reload();return}}if(Wt(u,/HX-Retarget:/i)){s.target=P().querySelector(u.getResponseHeader("HX-Retarget"))}var c=bt(a)||f;var e=u.status>=200&&u.status<400&&u.status!==204;var h=u.response;var t=u.status>=400;var r=V({shouldSwap:e,serverResponse:h,isError:t},s);if(!lt(l,"htmx:beforeSwap",r))return;l=r.target;h=r.serverResponse;t=r.isError;s.failed=t;s.successful=!t;if(r.shouldSwap){if(u.status===286){Re(a)}st(a,function(e){h=e.transformResponse(h,u,a)});if(c){gt()}var d=Mt(a);l.classList.add(D.config.swappingClass);var n=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r=Ft(l);ce(d.swapStyle,l,a,h,r);if(t.elt&&!z(t.elt)&&t.elt.id){var n=document.getElementById(t.elt.id);if(n){if(t.start&&n.setSelectionRange){n.setSelectionRange(t.start,t.end)}n.focus()}}l.classList.remove(D.config.swappingClass);B(r.elts,function(e){if(e.classList){e.classList.add(D.config.settlingClass)}lt(e,"htmx:afterSwap",s)});if(s.pathInfo.anchor){location.hash=s.pathInfo.anchor}if(Wt(u,/HX-Trigger-After-Swap:/i)){var i=a;if(!z(a)){i=P().body}he(u,"HX-Trigger-After-Swap",i)}var o=function(){B(r.tasks,function(e){e.call()});B(r.elts,function(e){if(e.classList){e.classList.remove(D.config.settlingClass)}lt(e,"htmx:afterSettle",s)});if(c){var e=f||wt(a)||_t(u)||s.pathInfo.finalPath||s.pathInfo.path;pt(e);lt(P().body,"htmx:pushedIntoHistory",{path:e})}Pt(r.elts,d);if(Wt(u,/HX-Trigger-After-Settle:/i)){var t=a;if(!z(a)){t=P().body}he(u,"HX-Trigger-After-Settle",t)}};if(d.settleDelay>0){setTimeout(o,d.settleDelay)}else{o()}}catch(e){ot(a,"htmx:swapError",s);throw e}};if(d.swapDelay>0){setTimeout(n,d.swapDelay)}else{n()}}if(t){ot(a,"htmx:responseError",V({error:"Response Status Error Code "+u.status+" from "+s.pathInfo.path},s))}}var Kt={};function Yt(){return{onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Qt(e,t){Kt[e]=V(Yt(),t)}function er(e){delete Kt[e]}function tr(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=F(e,"hx-ext");if(t){B(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Kt[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return tr(l(e),r,n)}function rr(e){if(P().readyState!=="loading"){e()}else{P().addEventListener("DOMContentLoaded",e)}}function nr(){if(D.config.includeIndicatorStyles!==false){P().head.insertAdjacentHTML("beforeend","")}}function ir(){var e=P().querySelector('meta[name="htmx-config"]');if(e){return x(e.content)}else{return null}}function or(){var e=ir();if(e){D.config=V(D.config,e)}}rr(function(){or();nr();var e=P().body;rt(e);window.onpopstate=function(e){if(e.state&&e.state.htmx){xt()}};setTimeout(function(){lt(e,"htmx:load",{})},0)});return D}()}); \ No newline at end of file +var htmx=function(){"use strict";const Q={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){const n=cn(e,t||"post");return n.values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:true,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null,disableInheritance:false,responseHandling:[{code:"204",swap:false},{code:"[23]..",swap:true},{code:"[45]..",swap:false,error:true}],allowNestedOobSwaps:true},parseInterval:null,_:null,version:"2.0.2"};Q.onLoad=$;Q.process=Dt;Q.on=be;Q.off=we;Q.trigger=de;Q.ajax=Hn;Q.find=r;Q.findAll=p;Q.closest=g;Q.remove=K;Q.addClass=Y;Q.removeClass=o;Q.toggleClass=W;Q.takeClass=ge;Q.swap=ze;Q.defineExtension=Bn;Q.removeExtension=Un;Q.logAll=z;Q.logNone=J;Q.parseInterval=h;Q._=_;const n={addTriggerHandler:Et,bodyContains:le,canAccessLocalStorage:j,findThisElement:Ee,filterValues:hn,swap:ze,hasAttribute:s,getAttributeValue:te,getClosestAttributeValue:re,getClosestMatch:T,getExpressionVars:Cn,getHeaders:dn,getInputValues:cn,getInternalData:ie,getSwapSpecification:pn,getTriggerSpecs:lt,getTarget:Ce,makeFragment:D,mergeObjects:ue,makeSettleInfo:xn,oobSwap:Te,querySelectorExt:ae,settleImmediately:Gt,shouldCancel:ht,triggerEvent:de,triggerErrorEvent:fe,withExtensions:Bt};const v=["get","post","put","delete","patch"];const O=v.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");const R=e("head");function e(e,t=false){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`,t?"gim":"im")}function h(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)=="ms"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)=="s"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)=="m"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e instanceof Element&&e.getAttribute(t)}function s(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function te(e,t){return ee(e,t)||ee(e,"data-"+t)}function u(e){const t=e.parentElement;if(!t&&e.parentNode instanceof ShadowRoot)return e.parentNode;return t}function ne(){return document}function H(e,t){return e.getRootNode?e.getRootNode({composed:t}):ne()}function T(e,t){while(e&&!t(e)){e=u(e)}return e||null}function q(e,t,n){const r=te(t,n);const o=te(t,"hx-disinherit");var i=te(t,"hx-inherit");if(e!==t){if(Q.config.disableInheritance){if(i&&(i==="*"||i.split(" ").indexOf(n)>=0)){return r}else{return null}}if(o&&(o==="*"||o.split(" ").indexOf(n)>=0)){return"unset"}}return r}function re(t,n){let r=null;T(t,function(e){return!!(r=q(t,ce(e),n))});if(r!=="unset"){return r}}function f(e,t){const n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function L(e){const t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;const n=t.exec(e);if(n){return n[1].toLowerCase()}else{return""}}function N(e){const t=new DOMParser;return t.parseFromString(e,"text/html")}function A(e,t){while(t.childNodes.length>0){e.append(t.childNodes[0])}}function I(e){const t=ne().createElement("script");se(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}return t}function P(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function k(e){Array.from(e.querySelectorAll("script")).forEach(e=>{if(P(e)){const t=I(e);const n=e.parentNode;try{n.insertBefore(t,e)}catch(e){w(e)}finally{e.remove()}}})}function D(e){const t=e.replace(R,"");const n=L(t);let r;if(n==="html"){r=new DocumentFragment;const i=N(e);A(r,i.body);r.title=i.title}else if(n==="body"){r=new DocumentFragment;const i=N(t);A(r,i.body);r.title=i.title}else{const i=N('");r=i.querySelector("template").content;r.title=i.title;var o=r.querySelector("title");if(o&&o.parentNode===r){o.remove();r.title=o.innerText}}if(r){if(Q.config.allowScriptTags){k(r)}else{r.querySelectorAll("script").forEach(e=>e.remove())}}return r}function oe(e){if(e){e()}}function t(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function M(e){return typeof e==="function"}function X(e){return t(e,"Object")}function ie(e){const t="htmx-internal-data";let n=e[t];if(!n){n=e[t]={}}return n}function F(t){const n=[];if(t){for(let e=0;e=0}function le(e){const t=e.getRootNode&&e.getRootNode();if(t&&t instanceof window.ShadowRoot){return ne().body.contains(t.host)}else{return ne().body.contains(e)}}function U(e){return e.trim().split(/\s+/)}function ue(e,t){for(const n in t){if(t.hasOwnProperty(n)){e[n]=t[n]}}return e}function S(e){try{return JSON.parse(e)}catch(e){w(e);return null}}function j(){const e="htmx:localStorageTest";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function V(t){try{const e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\/$/.test(t)){t=t.replace(/\/+$/,"")}return t}catch(e){return t}}function _(e){return vn(ne().body,function(){return eval(e)})}function $(t){const e=Q.on("htmx:load",function(e){t(e.detail.elt)});return e}function z(){Q.logger=function(e,t,n){if(console){console.log(t,e,n)}}}function J(){Q.logger=null}function r(e,t){if(typeof e!=="string"){return e.querySelector(t)}else{return r(ne(),e)}}function p(e,t){if(typeof e!=="string"){return e.querySelectorAll(t)}else{return p(ne(),e)}}function E(){return window}function K(e,t){e=y(e);if(t){E().setTimeout(function(){K(e);e=null},t)}else{u(e).removeChild(e)}}function ce(e){return e instanceof Element?e:null}function G(e){return e instanceof HTMLElement?e:null}function Z(e){return typeof e==="string"?e:null}function d(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function Y(e,t,n){e=ce(y(e));if(!e){return}if(n){E().setTimeout(function(){Y(e,t);e=null},n)}else{e.classList&&e.classList.add(t)}}function o(e,t,n){let r=ce(y(e));if(!r){return}if(n){E().setTimeout(function(){o(r,t);r=null},n)}else{if(r.classList){r.classList.remove(t);if(r.classList.length===0){r.removeAttribute("class")}}}}function W(e,t){e=y(e);e.classList.toggle(t)}function ge(e,t){e=y(e);se(e.parentElement.children,function(e){o(e,t)});Y(ce(e),t)}function g(e,t){e=ce(y(e));if(e&&e.closest){return e.closest(t)}else{do{if(e==null||f(e,t)){return e}}while(e=e&&ce(u(e)));return null}}function l(e,t){return e.substring(0,t.length)===t}function pe(e,t){return e.substring(e.length-t.length)===t}function i(e){const t=e.trim();if(l(t,"<")&&pe(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function m(e,t,n){e=y(e);if(t.indexOf("closest ")===0){return[g(ce(e),i(t.substr(8)))]}else if(t.indexOf("find ")===0){return[r(d(e),i(t.substr(5)))]}else if(t==="next"){return[ce(e).nextElementSibling]}else if(t.indexOf("next ")===0){return[me(e,i(t.substr(5)),!!n)]}else if(t==="previous"){return[ce(e).previousElementSibling]}else if(t.indexOf("previous ")===0){return[ye(e,i(t.substr(9)),!!n)]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else if(t==="body"){return[document.body]}else if(t==="root"){return[H(e,!!n)]}else if(t.indexOf("global ")===0){return m(e,t.slice(7),true)}else{return F(d(H(e,!!n)).querySelectorAll(i(t)))}}var me=function(t,e,n){const r=d(H(t,n)).querySelectorAll(e);for(let e=0;e=0;e--){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}};function ae(e,t){if(typeof e!=="string"){return m(e,t)[0]}else{return m(ne().body,e)[0]}}function y(e,t){if(typeof e==="string"){return r(d(t)||document,e)}else{return e}}function xe(e,t,n){if(M(t)){return{target:ne().body,event:Z(e),listener:t}}else{return{target:y(e),event:Z(t),listener:n}}}function be(t,n,r){_n(function(){const e=xe(t,n,r);e.target.addEventListener(e.event,e.listener)});const e=M(n);return e?n:r}function we(t,n,r){_n(function(){const e=xe(t,n,r);e.target.removeEventListener(e.event,e.listener)});return M(n)?n:r}const ve=ne().createElement("output");function Se(e,t){const n=re(e,t);if(n){if(n==="this"){return[Ee(e,t)]}else{const r=m(e,n);if(r.length===0){w('The selector "'+n+'" on '+t+" returned no matches!");return[ve]}else{return r}}}}function Ee(e,t){return ce(T(e,function(e){return te(ce(e),t)!=null}))}function Ce(e){const t=re(e,"hx-target");if(t){if(t==="this"){return Ee(e,"hx-target")}else{return ae(e,t)}}else{const n=ie(e);if(n.boosted){return ne().body}else{return e}}}function Oe(t){const n=Q.config.attributesToSettle;for(let e=0;e0){s=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{s=e}const n=ne().querySelectorAll(t);if(n){se(n,function(e){let t;const n=o.cloneNode(true);t=ne().createDocumentFragment();t.appendChild(n);if(!He(s,e)){t=d(n)}const r={shouldSwap:true,target:e,fragment:t};if(!de(e,"htmx:oobBeforeSwap",r))return;e=r.target;if(r.shouldSwap){_e(s,e,e,t,i)}se(i.elts,function(e){de(e,"htmx:oobAfterSwap",r)})});o.parentNode.removeChild(o)}else{o.parentNode.removeChild(o);fe(ne().body,"htmx:oobErrorNoTarget",{content:o})}return e}function qe(e){se(p(e,"[hx-preserve], [data-hx-preserve]"),function(e){const t=te(e,"id");const n=ne().getElementById(t);if(n!=null){e.parentNode.replaceChild(n,e)}})}function Le(l,e,u){se(e.querySelectorAll("[id]"),function(t){const n=ee(t,"id");if(n&&n.length>0){const r=n.replace("'","\\'");const o=t.tagName.replace(":","\\:");const e=d(l);const i=e&&e.querySelector(o+"[id='"+r+"']");if(i&&i!==e){const s=t.cloneNode();Re(t,i);u.tasks.push(function(){Re(t,s)})}}})}function Ne(e){return function(){o(e,Q.config.addedClass);Dt(ce(e));Ae(d(e));de(e,"htmx:load")}}function Ae(e){const t="[autofocus]";const n=G(f(e,t)?e:e.querySelector(t));if(n!=null){n.focus()}}function c(e,t,n,r){Le(e,n,r);while(n.childNodes.length>0){const o=n.firstChild;Y(ce(o),Q.config.addedClass);e.insertBefore(o,t);if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){r.tasks.push(Ne(o))}}}function Ie(e,t){let n=0;while(n0}function ze(e,t,r,o){if(!o){o={}}e=y(e);const n=document.activeElement;let i={};try{i={elt:n,start:n?n.selectionStart:null,end:n?n.selectionEnd:null}}catch(e){}const s=xn(e);if(r.swapStyle==="textContent"){e.textContent=t}else{let n=D(t);s.title=n.title;if(o.selectOOB){const u=o.selectOOB.split(",");for(let t=0;t0){E().setTimeout(l,r.settleDelay)}else{l()}}function Je(e,t,n){const r=e.getResponseHeader(t);if(r.indexOf("{")===0){const o=S(r);for(const i in o){if(o.hasOwnProperty(i)){let e=o[i];if(X(e)){n=e.target!==undefined?e.target:n}else{e={value:e}}de(n,i,e)}}}else{const s=r.split(",");for(let e=0;e0){const s=o[0];if(s==="]"){e--;if(e===0){if(n===null){t=t+"true"}o.shift();t+=")})";try{const l=vn(r,function(){return Function(t)()},function(){return true});l.source=t;return l}catch(e){fe(ne().body,"htmx:syntax:error",{error:e,source:t});return null}}}else if(s==="["){e++}if(nt(s,n,i)){t+="(("+i+"."+s+") ? ("+i+"."+s+") : (window."+s+"))"}else{t=t+s}n=o.shift()}}}function b(e,t){let n="";while(e.length>0&&!t.test(e[0])){n+=e.shift()}return n}function ot(e){let t;if(e.length>0&&Qe.test(e[0])){e.shift();t=b(e,et).trim();e.shift()}else{t=b(e,x)}return t}const it="input, textarea, select";function st(e,t,n){const r=[];const o=tt(t);do{b(o,We);const l=o.length;const u=b(o,/[,\[\s]/);if(u!==""){if(u==="every"){const c={trigger:"every"};b(o,We);c.pollInterval=h(b(o,/[,\[\s]/));b(o,We);var i=rt(e,o,"event");if(i){c.eventFilter=i}r.push(c)}else{const a={trigger:u};var i=rt(e,o,"event");if(i){a.eventFilter=i}while(o.length>0&&o[0]!==","){b(o,We);const f=o.shift();if(f==="changed"){a.changed=true}else if(f==="once"){a.once=true}else if(f==="consume"){a.consume=true}else if(f==="delay"&&o[0]===":"){o.shift();a.delay=h(b(o,x))}else if(f==="from"&&o[0]===":"){o.shift();if(Qe.test(o[0])){var s=ot(o)}else{var s=b(o,x);if(s==="closest"||s==="find"||s==="next"||s==="previous"){o.shift();const d=ot(o);if(d.length>0){s+=" "+d}}}a.from=s}else if(f==="target"&&o[0]===":"){o.shift();a.target=ot(o)}else if(f==="throttle"&&o[0]===":"){o.shift();a.throttle=h(b(o,x))}else if(f==="queue"&&o[0]===":"){o.shift();a.queue=b(o,x)}else if(f==="root"&&o[0]===":"){o.shift();a[f]=ot(o)}else if(f==="threshold"&&o[0]===":"){o.shift();a[f]=b(o,x)}else{fe(e,"htmx:syntax:error",{token:o.shift()})}}r.push(a)}}if(o.length===l){fe(e,"htmx:syntax:error",{token:o.shift()})}b(o,We)}while(o[0]===","&&o.shift());if(n){n[t]=r}return r}function lt(e){const t=te(e,"hx-trigger");let n=[];if(t){const r=Q.config.triggerSpecsCache;n=r&&r[t]||st(e,t,r)}if(n.length>0){return n}else if(f(e,"form")){return[{trigger:"submit"}]}else if(f(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(f(e,it)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function ut(e){ie(e).cancelled=true}function ct(e,t,n){const r=ie(e);r.timeout=E().setTimeout(function(){if(le(e)&&r.cancelled!==true){if(!pt(n,e,Xt("hx:poll:trigger",{triggerSpec:n,target:e}))){t(e)}ct(e,t,n)}},n.pollInterval)}function at(e){return location.hostname===e.hostname&&ee(e,"href")&&ee(e,"href").indexOf("#")!==0}function ft(e){return g(e,Q.config.disableSelector)}function dt(t,n,e){if(t instanceof HTMLAnchorElement&&at(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"&&String(ee(t,"method")).toLowerCase()!=="dialog"){n.boosted=true;let r,o;if(t.tagName==="A"){r="get";o=ee(t,"href")}else{const i=ee(t,"method");r=i?i.toLowerCase():"get";if(r==="get"){}o=ee(t,"action")}e.forEach(function(e){mt(t,function(e,t){const n=ce(e);if(ft(n)){a(n);return}he(r,o,n,t)},n,e,true)})}}function ht(e,t){const n=ce(t);if(!n){return false}if(e.type==="submit"||e.type==="click"){if(n.tagName==="FORM"){return true}if(f(n,'input[type="submit"], button')&&g(n,"form")!==null){return true}if(n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0)){return true}}return false}function gt(e,t){return ie(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function pt(e,t,n){const r=e.eventFilter;if(r){try{return r.call(t,n)!==true}catch(e){const o=r.source;fe(ne().body,"htmx:eventFilter:error",{error:e,source:o});return true}}return false}function mt(s,l,e,u,c){const a=ie(s);let t;if(u.from){t=m(s,u.from)}else{t=[s]}if(u.changed){t.forEach(function(e){const t=ie(e);t.lastValue=e.value})}se(t,function(o){const i=function(e){if(!le(s)){o.removeEventListener(u.trigger,i);return}if(gt(s,e)){return}if(c||ht(e,s)){e.preventDefault()}if(pt(u,s,e)){return}const t=ie(e);t.triggerSpec=u;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(s)<0){t.handledFor.push(s);if(u.consume){e.stopPropagation()}if(u.target&&e.target){if(!f(ce(e.target),u.target)){return}}if(u.once){if(a.triggeredOnce){return}else{a.triggeredOnce=true}}if(u.changed){const n=ie(o);const r=o.value;if(n.lastValue===r){return}n.lastValue=r}if(a.delayed){clearTimeout(a.delayed)}if(a.throttle){return}if(u.throttle>0){if(!a.throttle){de(s,"htmx:trigger");l(s,e);a.throttle=E().setTimeout(function(){a.throttle=null},u.throttle)}}else if(u.delay>0){a.delayed=E().setTimeout(function(){de(s,"htmx:trigger");l(s,e)},u.delay)}else{de(s,"htmx:trigger");l(s,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:u.trigger,listener:i,on:o});o.addEventListener(u.trigger,i)})}let yt=false;let xt=null;function bt(){if(!xt){xt=function(){yt=true};window.addEventListener("scroll",xt);setInterval(function(){if(yt){yt=false;se(ne().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){wt(e)})}},200)}}function wt(e){if(!s(e,"data-hx-revealed")&&B(e)){e.setAttribute("data-hx-revealed","true");const t=ie(e);if(t.initHash){de(e,"revealed")}else{e.addEventListener("htmx:afterProcessNode",function(){de(e,"revealed")},{once:true})}}}function vt(e,t,n,r){const o=function(){if(!n.loaded){n.loaded=true;t(e)}};if(r>0){E().setTimeout(o,r)}else{o()}}function St(t,n,e){let i=false;se(v,function(r){if(s(t,"hx-"+r)){const o=te(t,"hx-"+r);i=true;n.path=o;n.verb=r;e.forEach(function(e){Et(t,e,n,function(e,t){const n=ce(e);if(g(n,Q.config.disableSelector)){a(n);return}he(r,o,n,t)})})}});return i}function Et(r,e,t,n){if(e.trigger==="revealed"){bt();mt(r,n,t,e);wt(ce(r))}else if(e.trigger==="intersect"){const o={};if(e.root){o.root=ae(r,e.root)}if(e.threshold){o.threshold=parseFloat(e.threshold)}const i=new IntersectionObserver(function(t){for(let e=0;e0){t.polling=true;ct(ce(r),n,e)}else{mt(r,n,t,e)}}function Ct(e){const t=ce(e);if(!t){return false}const n=t.attributes;for(let e=0;e", "+e).join(""));return o}else{return[]}}function qt(e){const t=g(ce(e.target),"button, input[type='submit']");const n=Nt(e);if(n){n.lastButtonClicked=t}}function Lt(e){const t=Nt(e);if(t){t.lastButtonClicked=null}}function Nt(e){const t=g(ce(e.target),"button, input[type='submit']");if(!t){return}const n=y("#"+ee(t,"form"),t.getRootNode())||g(t,"form");if(!n){return}return ie(n)}function At(e){e.addEventListener("click",qt);e.addEventListener("focusin",qt);e.addEventListener("focusout",Lt)}function It(t,e,n){const r=ie(t);if(!Array.isArray(r.onHandlers)){r.onHandlers=[]}let o;const i=function(e){vn(t,function(){if(ft(t)){return}if(!o){o=new Function("event",n)}o.call(t,e)})};t.addEventListener(e,i);r.onHandlers.push({event:e,listener:i})}function Pt(t){ke(t);for(let e=0;eQ.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){fe(ne().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function _t(t){if(!j()){return null}t=V(t);const n=S(localStorage.getItem("htmx-history-cache"))||[];for(let e=0;e=200&&this.status<400){de(ne().body,"htmx:historyCacheMissLoad",i);const e=D(this.response);const t=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;const n=jt();const r=xn(n);Dn(e.title);Ve(n,t,r);Gt(r.tasks);Ut=o;de(ne().body,"htmx:historyRestore",{path:o,cacheMiss:true,serverResponse:this.response})}else{fe(ne().body,"htmx:historyCacheMissLoadError",i)}};e.send()}function Yt(e){zt();e=e||location.pathname+location.search;const t=_t(e);if(t){const n=D(t.content);const r=jt();const o=xn(r);Dn(n.title);Ve(r,n,o);Gt(o.tasks);E().setTimeout(function(){window.scrollTo(0,t.scroll)},0);Ut=e;de(ne().body,"htmx:historyRestore",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{Zt(e)}}}function Wt(e){let t=Se(e,"hx-indicator");if(t==null){t=[e]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.classList.add.call(e.classList,Q.config.requestClass)});return t}function Qt(e){let t=Se(e,"hx-disabled-elt");if(t==null){t=[]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute("disabled","");e.setAttribute("data-disabled-by-htmx","")});return t}function en(e,t){se(e,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList.remove.call(e.classList,Q.config.requestClass)}});se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute("disabled");e.removeAttribute("data-disabled-by-htmx")}})}function tn(t,n){for(let e=0;en.indexOf(e)<0)}else{e=e.filter(e=>e!==n)}r.delete(t);se(e,e=>r.append(t,e))}}function sn(t,n,r,o,i){if(o==null||tn(t,o)){return}else{t.push(o)}if(nn(o)){const s=ee(o,"name");let e=o.value;if(o instanceof HTMLSelectElement&&o.multiple){e=F(o.querySelectorAll("option:checked")).map(function(e){return e.value})}if(o instanceof HTMLInputElement&&o.files){e=F(o.files)}rn(s,e,n);if(i){ln(o,r)}}if(o instanceof HTMLFormElement){se(o.elements,function(e){if(t.indexOf(e)>=0){on(e.name,e.value,n)}else{t.push(e)}if(i){ln(e,r)}});new FormData(o).forEach(function(e,t){if(e instanceof File&&e.name===""){return}rn(t,e,n)})}}function ln(e,t){const n=e;if(n.willValidate){de(n,"htmx:validation:validate");if(!n.checkValidity()){t.push({elt:n,message:n.validationMessage,validity:n.validity});de(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})}}}function un(n,e){for(const t of e.keys()){n.delete(t)}e.forEach(function(e,t){n.append(t,e)});return n}function cn(e,t){const n=[];const r=new FormData;const o=new FormData;const i=[];const s=ie(e);if(s.lastButtonClicked&&!le(s.lastButtonClicked)){s.lastButtonClicked=null}let l=e instanceof HTMLFormElement&&e.noValidate!==true||te(e,"hx-validate")==="true";if(s.lastButtonClicked){l=l&&s.lastButtonClicked.formNoValidate!==true}if(t!=="get"){sn(n,o,i,g(e,"form"),l)}sn(n,r,i,e,l);if(s.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&ee(e,"type")==="submit"){const c=s.lastButtonClicked||e;const a=ee(c,"name");rn(a,c.value,o)}const u=Se(e,"hx-include");se(u,function(e){sn(n,r,i,ce(e),l);if(!f(e,"form")){se(d(e).querySelectorAll(it),function(e){sn(n,r,i,e,l)})}});un(r,o);return{errors:i,formData:r,values:An(r)}}function an(e,t,n){if(e!==""){e+="&"}if(String(n)==="[object Object]"){n=JSON.stringify(n)}const r=encodeURIComponent(n);e+=encodeURIComponent(t)+"="+r;return e}function fn(e){e=Ln(e);let n="";e.forEach(function(e,t){n=an(n,t,e)});return n}function dn(e,t,n){const r={"HX-Request":"true","HX-Trigger":ee(e,"id"),"HX-Trigger-Name":ee(e,"name"),"HX-Target":te(t,"id"),"HX-Current-URL":ne().location.href};wn(e,"hx-headers",false,r);if(n!==undefined){r["HX-Prompt"]=n}if(ie(e).boosted){r["HX-Boosted"]="true"}return r}function hn(n,e){const t=re(e,"hx-params");if(t){if(t==="none"){return new FormData}else if(t==="*"){return n}else if(t.indexOf("not ")===0){se(t.substr(4).split(","),function(e){e=e.trim();n.delete(e)});return n}else{const r=new FormData;se(t.split(","),function(t){t=t.trim();if(n.has(t)){n.getAll(t).forEach(function(e){r.append(t,e)})}});return r}}else{return n}}function gn(e){return!!ee(e,"href")&&ee(e,"href").indexOf("#")>=0}function pn(e,t){const n=t||re(e,"hx-swap");const r={swapStyle:ie(e).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ie(e).boosted&&!gn(e)){r.show="top"}if(n){const s=U(n);if(s.length>0){for(let e=0;e0?o.join(":"):null;r.scroll=c;r.scrollTarget=i}else if(l.indexOf("show:")===0){const a=l.substr(5);var o=a.split(":");const f=o.pop();var i=o.length>0?o.join(":"):null;r.show=f;r.showTarget=i}else if(l.indexOf("focus-scroll:")===0){const d=l.substr("focus-scroll:".length);r.focusScroll=d=="true"}else if(e==0){r.swapStyle=l}else{w("Unknown modifier in hx-swap: "+l)}}}}return r}function mn(e){return re(e,"hx-encoding")==="multipart/form-data"||f(e,"form")&&ee(e,"enctype")==="multipart/form-data"}function yn(t,n,r){let o=null;Bt(n,function(e){if(o==null){o=e.encodeParameters(t,r,n)}});if(o!=null){return o}else{if(mn(n)){return un(new FormData,Ln(r))}else{return fn(r)}}}function xn(e){return{tasks:[],elts:[e]}}function bn(e,t){const n=e[0];const r=e[e.length-1];if(t.scroll){var o=null;if(t.scrollTarget){o=ce(ae(n,t.scrollTarget))}if(t.scroll==="top"&&(n||o)){o=o||n;o.scrollTop=0}if(t.scroll==="bottom"&&(r||o)){o=o||r;o.scrollTop=o.scrollHeight}}if(t.show){var o=null;if(t.showTarget){let e=t.showTarget;if(t.showTarget==="window"){e="body"}o=ce(ae(n,e))}if(t.show==="top"&&(n||o)){o=o||n;o.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})}if(t.show==="bottom"&&(r||o)){o=o||r;o.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior})}}}function wn(r,e,o,i){if(i==null){i={}}if(r==null){return i}const s=te(r,e);if(s){let e=s.trim();let t=o;if(e==="unset"){return null}if(e.indexOf("javascript:")===0){e=e.substr(11);t=true}else if(e.indexOf("js:")===0){e=e.substr(3);t=true}if(e.indexOf("{")!==0){e="{"+e+"}"}let n;if(t){n=vn(r,function(){return Function("return ("+e+")")()},{})}else{n=S(e)}for(const l in n){if(n.hasOwnProperty(l)){if(i[l]==null){i[l]=n[l]}}}}return wn(ce(u(r)),e,o,i)}function vn(e,t,n){if(Q.config.allowEval){return t()}else{fe(e,"htmx:evalDisallowedError");return n}}function Sn(e,t){return wn(e,"hx-vars",true,t)}function En(e,t){return wn(e,"hx-vals",false,t)}function Cn(e){return ue(Sn(e),En(e))}function On(t,n,r){if(r!==null){try{t.setRequestHeader(n,r)}catch(e){t.setRequestHeader(n,encodeURIComponent(r));t.setRequestHeader(n+"-URI-AutoEncoded","true")}}}function Rn(t){if(t.responseURL&&typeof URL!=="undefined"){try{const e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(ne().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function C(e,t){return t.test(e.getAllResponseHeaders())}function Hn(e,t,n){e=e.toLowerCase();if(n){if(n instanceof Element||typeof n==="string"){return he(e,t,null,null,{targetOverride:y(n),returnPromise:true})}else{return he(e,t,y(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:y(n.target),swapOverride:n.swap,select:n.select,returnPromise:true})}}else{return he(e,t,null,null,{returnPromise:true})}}function Tn(e){const t=[];while(e){t.push(e);e=e.parentElement}return t}function qn(e,t,n){let r;let o;if(typeof URL==="function"){o=new URL(t,document.location.href);const i=document.location.origin;r=i===o.origin}else{o=t;r=l(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!r){return false}}return de(e,"htmx:validateUrl",ue({url:o,sameHost:r},n))}function Ln(e){if(e instanceof FormData)return e;const t=new FormData;for(const n in e){if(e.hasOwnProperty(n)){if(typeof e[n].forEach==="function"){e[n].forEach(function(e){t.append(n,e)})}else if(typeof e[n]==="object"&&!(e[n]instanceof Blob)){t.append(n,JSON.stringify(e[n]))}else{t.append(n,e[n])}}}return t}function Nn(r,o,e){return new Proxy(e,{get:function(t,e){if(typeof e==="number")return t[e];if(e==="length")return t.length;if(e==="push"){return function(e){t.push(e);r.append(o,e)}}if(typeof t[e]==="function"){return function(){t[e].apply(t,arguments);r.delete(o);t.forEach(function(e){r.append(o,e)})}}if(t[e]&&t[e].length===1){return t[e][0]}else{return t[e]}},set:function(e,t,n){e[t]=n;r.delete(o);e.forEach(function(e){r.append(o,e)});return true}})}function An(r){return new Proxy(r,{get:function(e,t){if(typeof t==="symbol"){return Reflect.get(e,t)}if(t==="toJSON"){return()=>Object.fromEntries(r)}if(t in e){if(typeof e[t]==="function"){return function(){return r[t].apply(r,arguments)}}else{return e[t]}}const n=r.getAll(t);if(n.length===0){return undefined}else if(n.length===1){return n[0]}else{return Nn(e,t,n)}},set:function(t,n,e){if(typeof n!=="string"){return false}t.delete(n);if(typeof e.forEach==="function"){e.forEach(function(e){t.append(n,e)})}else if(typeof e==="object"&&!(e instanceof Blob)){t.append(n,JSON.stringify(e))}else{t.append(n,e)}return true},deleteProperty:function(e,t){if(typeof t==="string"){e.delete(t)}return true},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function he(t,n,r,o,i,D){let s=null;let l=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!=="undefined"){var e=new Promise(function(e,t){s=e;l=t})}if(r==null){r=ne().body}const M=i.handler||Mn;const X=i.select||null;if(!le(r)){oe(s);return e}const u=i.targetOverride||ce(Ce(r));if(u==null||u==ve){fe(r,"htmx:targetError",{target:te(r,"hx-target")});oe(l);return e}let c=ie(r);const a=c.lastButtonClicked;if(a){const L=ee(a,"formaction");if(L!=null){n=L}const N=ee(a,"formmethod");if(N!=null){if(N.toLowerCase()!=="dialog"){t=N}}}const f=re(r,"hx-confirm");if(D===undefined){const K=function(e){return he(t,n,r,o,i,!!e)};const G={target:u,elt:r,path:n,verb:t,triggeringEvent:o,etc:i,issueRequest:K,question:f};if(de(r,"htmx:confirm",G)===false){oe(s);return e}}let d=r;let h=re(r,"hx-sync");let g=null;let F=false;if(h){const A=h.split(":");const I=A[0].trim();if(I==="this"){d=Ee(r,"hx-sync")}else{d=ce(ae(r,I))}h=(A[1]||"drop").trim();c=ie(d);if(h==="drop"&&c.xhr&&c.abortable!==true){oe(s);return e}else if(h==="abort"){if(c.xhr){oe(s);return e}else{F=true}}else if(h==="replace"){de(d,"htmx:abort")}else if(h.indexOf("queue")===0){const Z=h.split(" ");g=(Z[1]||"last").trim()}}if(c.xhr){if(c.abortable){de(d,"htmx:abort")}else{if(g==null){if(o){const P=ie(o);if(P&&P.triggerSpec&&P.triggerSpec.queue){g=P.triggerSpec.queue}}if(g==null){g="last"}}if(c.queuedRequests==null){c.queuedRequests=[]}if(g==="first"&&c.queuedRequests.length===0){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(g==="all"){c.queuedRequests.push(function(){he(t,n,r,o,i)})}else if(g==="last"){c.queuedRequests=[];c.queuedRequests.push(function(){he(t,n,r,o,i)})}oe(s);return e}}const p=new XMLHttpRequest;c.xhr=p;c.abortable=F;const m=function(){c.xhr=null;c.abortable=false;if(c.queuedRequests!=null&&c.queuedRequests.length>0){const e=c.queuedRequests.shift();e()}};const B=re(r,"hx-prompt");if(B){var y=prompt(B);if(y===null||!de(r,"htmx:prompt",{prompt:y,target:u})){oe(s);m();return e}}if(f&&!D){if(!confirm(f)){oe(s);m();return e}}let x=dn(r,u,y);if(t!=="get"&&!mn(r)){x["Content-Type"]="application/x-www-form-urlencoded"}if(i.headers){x=ue(x,i.headers)}const U=cn(r,t);let b=U.errors;const j=U.formData;if(i.values){un(j,Ln(i.values))}const V=Ln(Cn(r));const w=un(j,V);let v=hn(w,r);if(Q.config.getCacheBusterParam&&t==="get"){v.set("org.htmx.cache-buster",ee(u,"id")||"true")}if(n==null||n===""){n=ne().location.href}const S=wn(r,"hx-request");const _=ie(r).boosted;let E=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;const C={boosted:_,useUrlParams:E,formData:v,parameters:An(v),unfilteredFormData:w,unfilteredParameters:An(w),headers:x,target:u,verb:t,errors:b,withCredentials:i.credentials||S.credentials||Q.config.withCredentials,timeout:i.timeout||S.timeout||Q.config.timeout,path:n,triggeringEvent:o};if(!de(r,"htmx:configRequest",C)){oe(s);m();return e}n=C.path;t=C.verb;x=C.headers;v=Ln(C.parameters);b=C.errors;E=C.useUrlParams;if(b&&b.length>0){de(r,"htmx:validation:halted",C);oe(s);m();return e}const $=n.split("#");const z=$[0];const O=$[1];let R=n;if(E){R=z;const Y=!v.keys().next().done;if(Y){if(R.indexOf("?")<0){R+="?"}else{R+="&"}R+=fn(v);if(O){R+="#"+O}}}if(!qn(r,R,C)){fe(r,"htmx:invalidPath",C);oe(l);return e}p.open(t.toUpperCase(),R,true);p.overrideMimeType("text/html");p.withCredentials=C.withCredentials;p.timeout=C.timeout;if(S.noHeaders){}else{for(const k in x){if(x.hasOwnProperty(k)){const W=x[k];On(p,k,W)}}}const H={xhr:p,target:u,requestConfig:C,etc:i,boosted:_,select:X,pathInfo:{requestPath:n,finalRequestPath:R,responsePath:null,anchor:O}};p.onload=function(){try{const t=Tn(r);H.pathInfo.responsePath=Rn(p);M(r,H);if(H.keepIndicators!==true){en(T,q)}de(r,"htmx:afterRequest",H);de(r,"htmx:afterOnLoad",H);if(!le(r)){let e=null;while(t.length>0&&e==null){const n=t.shift();if(le(n)){e=n}}if(e){de(e,"htmx:afterRequest",H);de(e,"htmx:afterOnLoad",H)}}oe(s);m()}catch(e){fe(r,"htmx:onLoadError",ue({error:e},H));throw e}};p.onerror=function(){en(T,q);fe(r,"htmx:afterRequest",H);fe(r,"htmx:sendError",H);oe(l);m()};p.onabort=function(){en(T,q);fe(r,"htmx:afterRequest",H);fe(r,"htmx:sendAbort",H);oe(l);m()};p.ontimeout=function(){en(T,q);fe(r,"htmx:afterRequest",H);fe(r,"htmx:timeout",H);oe(l);m()};if(!de(r,"htmx:beforeRequest",H)){oe(s);m();return e}var T=Wt(r);var q=Qt(r);se(["loadstart","loadend","progress","abort"],function(t){se([p,p.upload],function(e){e.addEventListener(t,function(e){de(r,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});de(r,"htmx:beforeSend",H);const J=E?null:yn(p,r,v);p.send(J);return e}function In(e,t){const n=t.xhr;let r=null;let o=null;if(C(n,/HX-Push:/i)){r=n.getResponseHeader("HX-Push");o="push"}else if(C(n,/HX-Push-Url:/i)){r=n.getResponseHeader("HX-Push-Url");o="push"}else if(C(n,/HX-Replace-Url:/i)){r=n.getResponseHeader("HX-Replace-Url");o="replace"}if(r){if(r==="false"){return{}}else{return{type:o,path:r}}}const i=t.pathInfo.finalRequestPath;const s=t.pathInfo.responsePath;const l=re(e,"hx-push-url");const u=re(e,"hx-replace-url");const c=ie(e).boosted;let a=null;let f=null;if(l){a="push";f=l}else if(u){a="replace";f=u}else if(c){a="push";f=s||i}if(f){if(f==="false"){return{}}if(f==="true"){f=s||i}if(t.pathInfo.anchor&&f.indexOf("#")===-1){f=f+"#"+t.pathInfo.anchor}return{type:a,path:f}}else{return{}}}function Pn(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function kn(e){for(var t=0;t0){E().setTimeout(e,y.swapDelay)}else{e()}}if(f){fe(o,"htmx:responseError",ue({error:"Response Status Error Code "+s.status+" from "+i.pathInfo.requestPath},i))}}const Xn={};function Fn(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,n,r){return false},encodeParameters:function(e,t,n){return null}}}function Bn(e,t){if(t.init){t.init(n)}Xn[e]=ue(Fn(),t)}function Un(e){delete Xn[e]}function jn(e,n,r){if(n==undefined){n=[]}if(e==undefined){return n}if(r==undefined){r=[]}const t=te(e,"hx-ext");if(t){se(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){r.push(e.slice(7));return}if(r.indexOf(e)<0){const t=Xn[e];if(t&&n.indexOf(t)<0){n.push(t)}}})}return jn(ce(u(e)),n,r)}var Vn=false;ne().addEventListener("DOMContentLoaded",function(){Vn=true});function _n(e){if(Vn||ne().readyState==="complete"){e()}else{ne().addEventListener("DOMContentLoaded",e)}}function $n(){if(Q.config.includeIndicatorStyles!==false){const e=Q.config.inlineStyleNonce?` nonce="${Q.config.inlineStyleNonce}"`:"";ne().head.insertAdjacentHTML("beforeend"," ."+Q.config.indicatorClass+"{opacity:0} ."+Q.config.requestClass+" ."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+Q.config.requestClass+"."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ")}}function zn(){const e=ne().querySelector('meta[name="htmx-config"]');if(e){return S(e.content)}else{return null}}function Jn(){const e=zn();if(e){Q.config=ue(Q.config,e)}}_n(function(){Jn();$n();let e=ne().body;Dt(e);const t=ne().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){const t=e.target;const n=ie(t);if(n&&n.xhr){n.xhr.abort()}});const n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){Yt();se(t,function(e){de(e,"htmx:restored",{document:ne(),triggerEvent:de})})}else{if(n){n(e)}}};E().setTimeout(function(){de(e,"htmx:load",{});e=null},0)});return Q}(); \ No newline at end of file From 09e6c4b32d9bfaa08a9fe0e5d9218194df6f9829 Mon Sep 17 00:00:00 2001 From: HB9HIL Date: Sun, 25 Aug 2024 17:09:02 +0200 Subject: [PATCH 52/56] adjust htmx buttons --- application/views/update/index.php | 45 ++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/application/views/update/index.php b/application/views/update/index.php index e7f224e6b..9978926fe 100644 --- a/application/views/update/index.php +++ b/application/views/update/index.php @@ -37,16 +37,37 @@ You can choose to check just the QSOs in the logbook that are missing DXCC metadata or to re-check the entire logbook and update existing metadata as well, in case it has changed."); ?>

-

+
-

+

-

+