Merge branch 'master' into configurable_modes

pull/499/head
Kim - DG9VH 2020-05-24 00:09:58 +02:00 zatwierdzone przez GitHub
commit 530cba37d6
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
17 zmienionych plików z 751 dodań i 126 usunięć

Wyświetl plik

@ -1,20 +1,25 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**This is for reporting bugs with the code, if this issue is regarding setting up on your local server please use the forum see readme for details**
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
Steps to reproduce the behaviour:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
**Expected behaviour**
A clear and concise description of what you expected to happen.
**Screenshots**

Wyświetl plik

@ -1,9 +1,14 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**This is for reporting bugs with the code, if this issue is regarding setting up on your local server please use the forum see readme for details**
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Wyświetl plik

@ -6,43 +6,24 @@ Website: [http://www.cloudlog.co.uk](http://www.cloudlog.co.uk)
## Requirements
* Linux based Operating System
* Apache (Nignx should work)
* Apache (Nginx should work)
* PHP (Version 7 or higher) & MySQL
You will also needthe following PHP modules installed
php-curl, php-mbstrings, php-xml
## Versions
* Master - Current working copy (Commit wise frozen till v2 is ready for release, unless bug fixes needed)
* cloudlog-v2 - This is the current development copy, while to work on bringing multiclient to Cloudlog without breaking users stable coplies, master now has a freeze on it.
* **Master** - Current working branch
* cloudlog-v2 - This is the current development copy, while to work on bringing multiclient to Cloudlog without breaking users stable copies.
## Setup
You can set up the basics of Cloudlog by opening /install in your browser. Please note theres an issue with the demo account creation (password invalid) so after this process you must disable auth via the config.php file and manually create yourself a user in till this issue is fixed.
More information can be found in the [wiki](https://github.com/magicbug/Cloudlog/wiki).
Installation information can be found on the [wiki](https://github.com/magicbug/Cloudlog/wiki).
Cloudlog now has a [Change Log](https://github.com/magicbug/Cloudlog/wiki/Change-Log) to go along with the commit history please consult this when updating.
## Support
Cloudlog support is handled via Issues on GitHub.
Cloudlog has two support systems for code issues use Github issues, however if you have general issues with setting up your server please use our general discussion forum [https://forum.cloudlog.co.uk](https://forum.cloudlog.co.uk).
## CAT Control
Cloudlog supports pushing radio information just like you would with a desktop operating system this is via a desktop app called [CloudlogCAT](https://github.com/magicbug/CloudlogCAT/releases) this application uses Omni-Rig thus supports most of the radios on the market.
If you use Linux, Mac or just hate Omni-Rig then Tobias (DL4TMA) has made a script called [cloudlog-rigctl-interface](https://github.com/Manawyrm/cloudlog-rigctl-interface) this interfaces rigctl to Cloudlogs CAT API. This script requires PHP-CLI to be installed. If you would like a pure Bash version, Tony (G0WFV) has you covered with [CloudlogBashCat](https://github.com/g0wfv/CloudlogBashCat) which also synchronises Cloudlog with rigctld.
## SatPC32 Interface
If your into satellite operations I have written a application [SatPC32 to Cloud Interface](https://github.com/magicbug/SatPC32-To-Cloudlog) which allows automatic population of satellite fields, Cloudlog just sees this as another radio interface.
## QSL Card Labels
I've started building out some scripts to generate labels for sticking on QSL Cards, at the moment it supports 24 label sheets, but theres no reason for it not to support more, these can be found at [Cloudlog-Labels](https://github.com/magicbug/cloudlog-labels)
## Want Cloudlog Hosting?
@ -50,9 +31,9 @@ If you would prefer not to setup Cloudlog yourself [magicbug](https://magicbug.c
## Contributing
If you would like to contributing in anyway to Cloudlog then its most appreciated, this has been developed in free time, help coding new features or writing documentation is always useful.
If you would like to contribute in any way to Cloudlog, it is most appreciated. This has been developed in free time, help coding new features or writing documentation is always useful.
Please note that Cloudlog was built using [Codeigniter](https://www.codeigniter.com/docs) version 3 and uses Bootstrap 4 for the user CSS framework documentation is available for this when building components.
Please note that Cloudlog was built using [Codeigniter](https://www.codeigniter.com/docs) version 3 and uses Bootstrap 4 for the user CSS framework documentation is available for this when building components, code will also only be accepted for PR with comments.
## Credits
@ -62,6 +43,6 @@ Thanks to Andy (VE7CXZ), Gavin (M1BXF), Graham (W5ISP), Robert (M0VFC), Corby (K
Cloudlog is supported by Patreon and donations via PayPal, thanks to the following people:
Paul (M0TZO), Tim (G4VXE), Paul (N8HM), Michelle (W5NYV), Mitchell (AD0HJ), Dan (M0TCB), Martin (DK3ML), Juan Carlos (EA5WA), Iain (M0PCB), Charlie (GM1TGY)
Paul (M0TZO), Tim (G4VXE), Paul (N8HM), Michelle (W5NYV), Mitchell (AD0HJ), Dan (M0TCB), Martin (DK3ML), Juan Carlos (EA5WA), Iain (M0PCB), Charlie (GM1TGY), Ondrej (OK1CDJ).
If you'd like to donate to Cloudlog to help allow @magicbug spend less time doing commerical work and more time coding Cloudlog then you can donate via [PayPal](https://paypal.me/PGoodhall) or become a [Patreon](https://www.patreon.com/2m0sql)
If you'd like to donate to Cloudlog to help allow @magicbug spend less time doing commercial work and more time coding Cloudlog then you can donate via [PayPal](https://paypal.me/PGoodhall) or become a [Patreon](https://www.patreon.com/2m0sql)

Wyświetl plik

@ -11,14 +11,13 @@ class Qrz extends CI_Controller {
$this->config->load('config');
}
// Upload QSO to QRZ.com
/*
* Upload QSO to QRZ.com
* When called from the url cloudlog/qrz/upload, the function loops through all station_id's with a qrz api key defined.
* All QSOs not previously uploaded, will then be uploaded, one at a time
*/
public function upload() {
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->setOptions();
$this->load->model('logbook_model');
@ -27,7 +26,13 @@ class Qrz extends CI_Controller {
if ($station_ids) {
foreach ($station_ids as $station_id) {
$qrz_api_key = $this->logbook_model->exists_qrz_api_key($station_id);
$this->mass_upload_qsos($station_id, $qrz_api_key);
if($this->mass_upload_qsos($station_id, $qrz_api_key)) {
echo "QSOs has been uploaded to QRZ.com.";
log_message('info', 'QSOs has been uploaded to QRZ.com.');
} else{
echo "No QSOs found for upload.";
log_message('info', 'No QSOs found for upload.');
}
}
} else {
echo "No station_id's with a QRZ API Key found";
@ -36,7 +41,21 @@ class Qrz extends CI_Controller {
}
function setOptions() {
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
}
/*
* Function gets all QSOs from given station_id, that are not previously uploaded to qrz.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $qrz_api_key) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id);
if ($data['qsos']) {
@ -45,17 +64,66 @@ class Qrz extends CI_Controller {
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif);
if ($result) {
$this->markqso($qso['COL_PRIMARY_KEY']);
$i++;
}
}
echo "QSOs has been uploaded to QRZ.com.";
log_message('info', 'QSOs has been uploaded to QRZ.com.');
return $i;
} else {
echo "No QSOs found for upload.";
log_message('info', 'No QSOs found for upload.');
return $i;
}
}
/*
* Function marks QSO with given primarykey as uploaded to qrz
*/
function markqso($primarykey) {
$this->logbook_model->mark_qrz_qsos_sent($primarykey);
}
}
/*
* Used for displaying the uid for manually selecting log for upload to qrz
*/
public function export() {
$this->load->model('stations');
$data['page_title'] = "QRZ.com Export";
$data['station_profile'] = $this->stations->stations_with_qrz_api_key();
$active_station_id = $this->stations->find_active();
$station_profile = $this->stations->profile($active_station_id);
$data['active_station_info'] = $station_profile->row();
$this->load->view('interface_assets/header', $data);
$this->load->view('qrz/export');
$this->load->view('interface_assets/footer');
}
/*
* Used for ajax-function when selecting log for upload to qrz
*/
public function upload_station() {
$this->setOptions();
$this->load->model('stations');
$postData = $this->input->post();
$this->load->model('logbook_model');
$qrz_api_key = $this->logbook_model->exists_qrz_api_key($postData['station_id']);
header('Content-type: application/json');
if ($i = $this->mass_upload_qsos($postData['station_id'], $qrz_api_key)) {
$stationinfo = $this->stations->stations_with_qrz_api_key();
$info = $stationinfo->result();
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $i . " QSOs are now uploaded to QRZ.com";
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error, no QSOs to upload found';
echo json_encode($data);
}
}
}

Wyświetl plik

@ -2,14 +2,26 @@
class Qra {
// Name: QRA
/*
* Class Description: QRA handles manipulation of the Gridsquares used within amateur radio
*
* Units of measurement are the following
*
* Info: Distance Function
*
* M = Miles
* K = Kilometers
* N = Nautical Miles
*/
// Name: qra2latlong
// Task: convert qra to lat/long
function qra2latlong($strQRA)
{
return qra2latlong($strQRA);
}
// calculate the bearing between two squares
function bearing($tx, $rx, $unit = 'M') {
$my = qra2latlong($tx);
$stn = qra2latlong($rx);
@ -18,16 +30,27 @@ class Qra {
return $bearing;
}
/*
* Function: calculate the distance between two gridsqaures
*
* Inputs are QRA's TX and TX and the unit
*
*/
function distance($tx, $rx, $unit = 'M') {
// Calc LatLongs
$my = qra2latlong($tx);
$stn = qra2latlong($rx);
// Feed in Lat Longs plus the unit type
$total_distance = distance($my[0], $my[1], $stn[0], $stn[1], $unit);
// Return the distance
return $total_distance;
}
}
/*
Info: Distance Function
M = Miles
K = Kilometers
N = Nautical Miles
*/
function distance($lat1, $lon1, $lat2, $lon2, $unit = 'M') {
$theta = $lon1 - $lon2;

Wyświetl plik

@ -850,7 +850,7 @@ class Logbook_model extends CI_Model {
function get_qrz_qsos($station_id){
$sql = 'select * from ' . $this->config->item('table_name') .
' where station_id = ' . $station_id .
' and (COL_QRZCOM_QSO_UPLOAD_STATUS = NULL
' and (COL_QRZCOM_QSO_UPLOAD_STATUS is NULL
or COL_QRZCOM_QSO_UPLOAD_STATUS = ""
or COL_QRZCOM_QSO_UPLOAD_STATUS = "M"
or COL_QRZCOM_QSO_UPLOAD_STATUS = "N")';

Wyświetl plik

@ -190,6 +190,34 @@ class Stations extends CI_Model {
}
}
function stations_with_qrz_api_key() {
$sql = "select station_profile.station_id, station_profile.station_profile_name, station_profile.station_callsign, modc.modcount, notc.notcount, totc.totcount
from station_profile
left outer join (
select count(*) modcount, station_id
from ". $this->config->item('table_name') .
" where COL_QRZCOM_QSO_UPLOAD_STATUS = 'M'
group by station_id
) as modc on station_profile.station_id = modc.station_id
left outer join (
select count(*) notcount, station_id
from " . $this->config->item('table_name') .
" where (coalesce(COL_QRZCOM_QSO_UPLOAD_STATUS, '') = ''
or COL_QRZCOM_QSO_UPLOAD_STATUS = 'N')
group by station_id
) as notc on station_profile.station_id = notc.station_id
left outer join (
select count(*) totcount, station_id
from " . $this->config->item('table_name') .
" where COL_QRZCOM_QSO_UPLOAD_STATUS = 'Y'
group by station_id
) as totc on station_profile.station_id = totc.station_id
where coalesce(station_profile.qrzapikey, '') <> ''";
$query = $this->db->query($sql);
return $query;
}
}
?>

Wyświetl plik

@ -25,7 +25,7 @@
</td>
</tr>
<tr>
<td><input type="radio" name="eqslimport" id="fetch" value="fetch" /> Pull eQSL data for me</td>
<td><input type="radio" name="eqslimport" id="fetch" value="fetch" checked="checked"/> Pull eQSL data for me</td>
<td>
<p>Cloudlog will use the eQSL username and password stored in your user profile to download confirmations from eQSL for you. We will only download confirmations received since your last eQSL confirmed QSO.</p>
</td>

Wyświetl plik

@ -269,6 +269,100 @@ $(document).on('keypress',function(e) {
<?php if ($this->uri->segment(1) == "qso") { ?>
<script type="text/javascript">
$( document ).ready(function() {
/*
Populate the Satellite Names Field on the QSO Panel
*/
$.getJSON( "<?php echo base_url();?>assets/json/satellite_data.json", function( data ) {
// Build the options array
var items = [];
$.each( data, function( key, val ) {
items.push(
'<option value="' + key + '">' + key + '</option>'
);
});
// Add to the datalist
$('.satellite_names_list').append(items.join( "" ));
});
});
var selected_sat;
var selected_sat_mode;
$(document).on('change', 'input', function(){
var optionslist = $('.satellite_names_list')[0].options;
var value = $(this).val();
for (var x=0;x<optionslist.length;x++){
if (optionslist[x].value === value) {
$("#sat_mode").val("");
$('.satellite_modes_list').find('option').remove().end();
selected_sat = value;
// get Json file
$.getJSON( "<?php echo base_url();?>assets/json/satellite_data.json", function( data ) {
// Build the options array
var sat_modes = [];
$.each( data, function( key, val ) {
if (key == value) {
$.each( val.Modes, function( key1, val2 ) {
//console.log (key1);
sat_modes.push('<option value="' + key1 + '">' + key1 + '</option>');
});
}
});
// Add to the datalist
$('.satellite_modes_list').append(sat_modes.join( "" ));
});
}
}
});
$(document).on('change', 'input', function(){
var optionslist = $('.satellite_modes_list')[0].options;
var value = $(this).val();
for (var x=0;x<optionslist.length;x++){
if (optionslist[x].value === value) {
// Store selected sat mode
selected_sat_mode = value;
// get Json file
$.getJSON( "<?php echo base_url();?>assets/json/satellite_data.json", function( data ) {
// Build the options array
var sat_modes = [];
$.each( data, function( key, val ) {
if (key == selected_sat) {
$.each( val.Modes, function( key1, val2 ) {
if(key1 == selected_sat_mode) {
if (val2[0].Uplink_Mode == "LSB" || val2[0].Uplink_Mode == "USB") {
$("#mode").val("SSB");
} else {
$("#mode").val(val2[0].Uplink_Mode);
}
$("#band").val(frequencyToBand(val2[0].Uplink_Freq));
$("#frequency").val(val2[0].Uplink_Freq);
$("#frequency_rx").val(val2[0].Downlink_Freq);
$("#selectPropagation").val('SAT');
}
});
}
});
});
}
}
});
</script>
<script>
var markers = L.layerGroup();
var mymap = L.map('qsomap').setView([51.505, -0.09], 13);
@ -1262,5 +1356,35 @@ $(document).ready(function(){
</script>
<?php } ?>
<?php if ($this->uri->segment(1) == "qrz") { ?>
<script>
function ExportQrz(station_id) {
$(".ld-ext-right").addClass('running');
$(".ld-ext-right").prop('disabled', true);
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qrz/upload_station',
type: 'post',
data: {'station_id': station_id},
success: function (data) {
$(".ld-ext-right").removeClass('running');
$(".ld-ext-right").prop('disabled', false);
if (data.status == 'OK') {
$.each(data.info, function(index, value){
$('#modcount'+value.station_id).html(value.modcount);
$('#notcount'+value.station_id).html(value.notcount);
$('#totcount'+value.station_id).html(value.totcount);
});
$(".card-body").append('<div class="alert alert-success" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>' + data.infomessage + '</div>');
}
else {
$(".card-body").append('<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>' + data.info + '</div>');
}
}
});
}
</script>
<?php } ?>
</body>
</html>

Wyświetl plik

@ -24,7 +24,12 @@
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/plugins/quill/quill.snow.css" />
<?php } ?>
<?php if ($this->uri->segment(1) == "qso") { ?>
<?php if ($this->uri->segment(1) == "qrz") { ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/css/loading.min.css" />
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/css/ldbtn.min.css" />
<?php } ?>
<?php if ($this->uri->segment(1) == "qso") { ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/plugins/select2/css/select2.min.css" />
<?php } ?>
<?php if ($this->uri->segment(1) == "adif") { ?>
@ -108,13 +113,17 @@
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('lotw/import');?>" title="LoTW Import/Export"><i class="fas fa-sync"></i> LoTW Import/Export</a>
<a class="dropdown-item" href="<?php echo site_url('lotw/import');?>" title="LoTW Import"><i class="fas fa-sync"></i> LoTW Import</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('eqsl/import');?>" title="eQSL Import/Export"><i class="fas fa-sync"></i> eQSL Import/Export</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('qrz/export');?>" title="QRZ.com Export"><i class="fas fa-sync"></i> QRZ.com Export</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('qslprint');?>" title="Print Requested QSLs"><i class="fas fa-print"></i> Print Requested QSLs</a>
@ -163,6 +172,10 @@
<a class="dropdown-item" target="_blank" href="https://github.com/magicbug/Cloudlog/wiki" title="Help"><i class="fas fa-question"></i> Help</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" target="_blank" href="https://forum.cloudlog.co.uk" title="Forum"><i class="fas fa-question"></i> Forum</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('user/logout');?>" title="Logout"><i class="fas fa-sign-out-alt"></i> Logout</a>

Wyświetl plik

@ -24,7 +24,7 @@
<br><br>
<div class="custom-control custom-radio">
<input type="radio" name="lotwimport" id="fetch" class="custom-control-input" value="fetch" />
<input type="radio" name="lotwimport" id="fetch" class="custom-control-input" value="fetch" checked="checked" />
<label class="custom-control-label" for="fetch">Pull LoTW data for me</label>
</div>
<p class="card-text">From date:</p>

Wyświetl plik

@ -0,0 +1,52 @@
<div class="container adif">
<h1>QRZ.com Functions</h1>
<div class="card">
<div class="card-header">
<h5 class="card-title"><?php echo $page_title; ?></h5>
</div>
<div class="card-body">
<p>Here you can upload all QSOs to QRZ.com, which have not been previously uploaded. This might take a while, since only 1 QSO is uploaded at a time.</p>
<p>You need to set a QRZ API Key in your station profile. Only a station profile with an API Key set, is diplayed in the table below.</p>
<?php
if ($station_profile->result()) {
echo '
<table class="table table-bordered table-hover table-striped table-condensed text-center">
<thead>
<tr>
<td>Profile name</td>
<td>Station callsign</td>
<td>Edited QSOs not uploaded</td>
<td>Total QSOs not uploaded</td>
<td>Total QSOs uploaded</td>
<td></td>
</thead>
<tbody>';
foreach ($station_profile->result() as $station) { // Fills the table with the data
echo '<tr>';
echo '<td>' . $station->station_profile_name . '</td>';
echo '<td>' . $station->station_callsign . '</td>';
echo '<td id ="modcount'.$station->station_id.'">' . $station->modcount . '</td>';
echo '<td id ="notcount'.$station->station_id.'">' . $station->notcount . '</td>';
echo '<td id ="totcount'.$station->station_id.'">' . $station->totcount . '</td>';
echo '<td><button id="qrzUpload" type="button" name="qrzUpload" class="btn btn-primary btn-sm ld-ext-right" onclick="ExportQrz('. $station->station_id .')">Export<div class="ld ld-ring ld-spin"></div></button></td>';
echo '</tr>';
}
echo '</tfoot></table></div>';
}
else {
echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>Nothing found!</div>';
}
?>
</div>
</div>
</div>

Wyświetl plik

@ -332,12 +332,18 @@
<div class="tab-pane fade" id="satellite" role="tabpanel" aria-labelledby="satellite-tab">
<div class="form-group">
<label for="inputSatName">Satellite Name</label>
<input id="sat_name" type="text" name="sat_name" class="form-control" value="<?php echo $this->session->userdata('sat_name'); ?>" />
<input list="satellite_names" id="sat_name" type="text" name="sat_name" class="form-control" value="<?php echo $this->session->userdata('sat_name'); ?>">
<datalist id="satellite_names" class="satellite_names_list"></datalist>
</div>
<div class="form-group">
<label for="inputSatMode">Satellite Mode</label>
<input id="sat_mode" type="text" name="sat_mode" class="form-control" value="<?php echo $this->session->userdata('sat_mode'); ?>" />
<input list="satellite_modes" id="sat_mode" type="text" name="sat_mode" class="form-control" value="<?php echo $this->session->userdata('sat_mode'); ?>">
<datalist id="satellite_modes" class="satellite_modes_list"></datalist>
</div>
</div>

Wyświetl plik

@ -67,6 +67,34 @@
</tr>
<?php } ?>
<?php if($row->COL_GRIDSQUARE != null) { ?>
<!-- Total Distance Between the Station Profile Gridsquare and Logged Square -->
<tr>
<td>Total Distance</td>
<td>
<?php
// Load the QRA Library
$CI =& get_instance();
$CI->load->library('qra');
// Cacluate Distance
echo $CI->qra->distance($row->station_gridsquare, $row->COL_GRIDSQUARE, 'M');
switch ($this->config->item('measurement_base')) {
case 'M':
echo "mi";
break;
case 'K':
echo "km";
break;
case 'N':
echo "nmi";
break;
}
?>
</td>
</tr>
<?php } ?>
<?php if($row->COL_VUCC_GRIDS != null) { ?>
<tr>
<td>Gridsquare (Multi):</td>

1
assets/css/ldbtn.min.css vendored 100644
Wyświetl plik

@ -0,0 +1 @@
.ld-ext-right,.ld-ext-left,.ld-ext-bottom,.ld-ext-top,.ld-over,.ld-over-inverse,.ld-over-full,.ld-over-full-inverse{position:relative;transition:all .3s;transition-timing-function:ease-in}.ld-ext-right>.ld,.ld-ext-left>.ld,.ld-ext-bottom>.ld,.ld-ext-top>.ld,.ld-over>.ld,.ld-over-inverse>.ld,.ld-over-full>.ld,.ld-over-full-inverse>.ld{position:absolute;top:50%;left:50%;width:1em;height:1em;margin:-0.5em;opacity:0;z-index:-1;transition:all .3s;transition-timing-function:ease-in}.ld-ext-right>.ld>*,.ld-ext-left>.ld>*,.ld-ext-bottom>.ld>*,.ld-ext-top>.ld>*,.ld-over>.ld>*,.ld-over-inverse>.ld>*,.ld-over-full>.ld>*,.ld-over-full-inverse>.ld>*{width:1em;height:1em;position:absolute;top:50%;left:50%;transform:translate(-0.5em,-0.5em)}.ld-ext-right.running>.ld,.ld-ext-left.running>.ld,.ld-ext-bottom.running>.ld,.ld-ext-top.running>.ld,.ld-over.running>.ld,.ld-over-inverse.running>.ld,.ld-over-full.running>.ld,.ld-over-full-inverse.running>.ld{opacity:1;z-index:auto;visibility:visible}.ld-ext-right.running{padding-right:2.5em !important}.ld-ext-right>.ld{top:50%;left:auto;right:1.25em}.ld-ext-left.running{padding-left:2.5em !important}.ld-ext-left>.ld{top:50%;right:auto;left:1.25em}.ld-ext-bottom.running{padding-bottom:2.5em !important}.ld-ext-bottom>.ld{top:auto;left:50%;bottom:1.25em}.ld-ext-top.running{padding-top:2.5em !important}.ld-ext-top>.ld{bottom:auto;left:50%;top:1.25em}.ld-over:before,.ld-over-inverse:before,.ld-over-full:before,.ld-over-full-inverse:before{content:" ";display:block;opacity:0;position:absolute;z-index:-1;top:0;left:0;width:100%;height:100%;transition:all .3s;transition-timing-function:ease-in;background:rgba(240,240,240,0.8)}.ld-over.running>.ld,.ld-over-inverse.running>.ld,.ld-over-full.running>.ld,.ld-over-full-inverse.running>.ld{z-index:4001}.ld-over.running:before,.ld-over-inverse.running:before,.ld-over-full.running:before,.ld-over-full-inverse.running:before{opacity:1;z-index:4000;display:block}.ld-over-full.running>.ld,.ld-over-full-inverse.running>.ld,.ld-over-full.running:before,.ld-over-full-inverse.running:before{position:fixed}.ld-over-full>.ld{color:rgba(0,0,0,0.8)}.ld-over-full:before,.ld-over-full-inverse:before{background:rgba(255,255,255,0.8)}.ld-over-inverse>.ld{color:rgba(255,255,255,0.8)}.ld-over-inverse:before{background:rgba(0,0,0,0.6)}.ld-over-full-inverse>.ld{color:rgba(255,255,255,0.8)}.ld-over-full-inverse:before{background:rgba(0,0,0,0.6)}

1
assets/css/loading.min.css vendored 100644

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -1,68 +1,358 @@
{
"QO-100": {
"Modes": ["S/X"]
},
"AO-7": {
"Modes": ["U/V", "V/A"]
},
"AO-73": {
"Modes": ["U/V"]
},
"FO-29": {
"Modes": ["V/U"]
},
"XW-2A": {
"Modes": ["U/V"]
},
"XW-2B": {
"Modes": ["U/V"]
},
"XW-2C": {
"Modes": ["U/V"]
},
"XW-2D": {
"Modes": ["U/V"]
},
"XW-2E": {
"Modes": ["U/V"]
},
"CAS-4A": {
"Modes": ["U/V"]
},
"CAS-4B": {
"Modes": ["U/V"]
},
"EO-88": {
"Modes": ["U/V"]
},
"FO-99": {
"Modes": ["V/U"]
},
"AO-91": {
"Modes": ["U/V"]
},
"AO-92": {
"Modes": ["U/V", "L/V"]
},
"SO-50": {
"Modes": ["V/U"]
},
"Lilacsat-1": {
"Modes": ["V/U"]
},
"PO-101": {
"Modes": ["U/v"]
},
"AISAT-1": {
"Modes": ["V"]
},
"NO-84": {
"Modes": ["A/U", "V"]
},
"NO-104": {
"Modes": ["A/U", "V"]
},
"ARISS": {
"Modes": ["V"]
}
}
"AISAT-1":{
"Modes":{
"V":[
{
"Uplink_Mode":"PKT",
"Uplink_Freq":"145825000",
"Downlink_Mode":"PKT",
"Downlink_Freq":"145825000"
}
]
}
},
"ARISS":{
"Modes":{
"V":[
{
"Uplink_Mode":"PKT",
"Uplink_Freq":"145825000",
"Downlink_Mode":"PKT",
"Downlink_Freq":"145825000"
}
]
}
},
"AO-7":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"432150000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145950000"
}
],
"V/A":[
{
"Uplink_Mode":"USB",
"Uplink_Freq":"145900000",
"Downlink_Mode":"USB",
"Downlink_Freq":"29450000"
}
]
}
},
"AO-27":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"145850000",
"Downlink_Mode":"FM",
"Downlink_Freq":"436795000"
}
]
}
},
"AO-73":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435140000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145960000"
}
]
}
},
"AO-91":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"435250000",
"Downlink_Mode":"FM",
"Downlink_Freq":"145960000"
}
]
}
},
"AO-92":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"435350000",
"Downlink_Mode":"FM",
"Downlink_Freq":"145880000"
}
],
"L/V":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"1267350000",
"Downlink_Mode":"FM",
"Downlink_Freq":"145880000"
}
]
}
},
"CAS-4A":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435220000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145870000"
}
]
}
},
"CAS-4B":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435280000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145925000"
}
]
}
},
"EO-88":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435030000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145975000"
}
]
}
},
"FO-29":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"145950000",
"Downlink_Mode":"USB",
"Downlink_Freq":"435850000"
}
]
}
},
"FO-99":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"145915000",
"Downlink_Mode":"USB",
"Downlink_Freq":"435895000"
}
]
}
},
"FS-3":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"PKT",
"Uplink_Freq":"145840000",
"Downlink_Mode":"PKT",
"Downlink_Freq":"435103000"
}
]
}
},
"HO-107":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435925000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145925000"
}
]
}
},
"IO-86":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"145880000",
"Downlink_Mode":"FM",
"Downlink_Freq":"435880000"
}
]
}
},
"Lilacsat-1":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"144350000",
"Downlink_Mode":"FM",
"Downlink_Freq":"437200000"
}
]
}
},
"NO-84":{
"Modes":{
"A/U":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"28120000",
"Downlink_Mode":"FM",
"Downlink_Freq":"435350000"
}
],
"V":[
{
"Uplink_Mode":"PKT",
"Uplink_Freq":"145825000",
"Downlink_Mode":"PKT",
"Downlink_Freq":"145825000"
}
]
}
},
"NO-104":{
"Modes":{
"A/U":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"29481500",
"Downlink_Mode":"FM",
"Downlink_Freq":"435350000"
}
],
"V":[
{
"Uplink_Mode":"PKT",
"Uplink_Freq":"145825000",
"Downlink_Mode":"PKT",
"Downlink_Freq":"145825000"
}
]
}
},
"PO-101":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"437500000",
"Downlink_Mode":"FM",
"Downlink_Freq":"145900000"
}
]
}
},
"QO-100":{
"Modes":{
"S/X":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"2400175000",
"Downlink_Mode":"USB",
"Downlink_Freq":"110489675000"
}
]
}
},
"RS-44":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"145965000",
"Downlink_Mode":"USB",
"Downlink_Freq":"435640000"
}
]
}
},
"SO-50":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"145850000",
"Downlink_Mode":"FM",
"Downlink_Freq":"436795000"
}
]
}
},
"XW-2A":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435040000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145675000"
}
]
}
},
"XW-2B":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435100000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145675000"
}
]
}
},
"XW-2C":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435160000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145805000"
}
]
}
},
"XW-2D":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435220000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145870000"
}
]
}
},
"XW-2F":{
"Modes":{
"U/V":[
{
"Uplink_Mode":"LSB",
"Uplink_Freq":"435340000",
"Downlink_Mode":"USB",
"Downlink_Freq":"145990000"
}
]
}
}
}