Cloudlog/assets/js/sections/qso.js

1159 行
36 KiB
JavaScript

var lastCallsignUpdated=""
$( document ).ready(function() {
2023-11-07 03:10:47 +08:00
setTimeout(function() {
var callsignValue = localStorage.getItem("quicklogCallsign");
2023-11-15 03:29:58 +08:00
if (callsignValue !== null && callsignValue !== undefined) {
$("#callsign").val(callsignValue);
$("#mode").focus();
2023-11-07 05:19:47 +08:00
localStorage.removeItem("quicklogCallsign");
2023-11-07 03:10:47 +08:00
}
2023-11-15 06:25:06 +08:00
}, 100);
$('#reset_time').click(function() {
var now = new Date();
var localTime = now.getTime();
var utc = localTime + (now.getTimezoneOffset() * 60000);
$('#start_time').val(("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2));
$("[id='start_time']").each(function() {
$(this).attr("value", ("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2));
});
});
$('#reset_start_time').click(function() {
var now = new Date();
var localTime = now.getTime();
var utc = localTime + (now.getTimezoneOffset() * 60000);
$('#start_time').val(("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2));
$("[id='start_time']").each(function() {
$(this).attr("value", ("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2));
});
$('#end_time').val(("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2));
$("[id='end_time']").each(function() {
$(this).attr("value", ("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2));
});
});
$('#reset_end_time').click(function() {
var now = new Date();
var localTime = now.getTime();
var utc = localTime + (now.getTimezoneOffset() * 60000);
$('#end_time').val(("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2));
$("[id='end_time']").each(function() {
$(this).attr("value", ("0" + now.getUTCHours()).slice(-2)+':'+("0" + now.getUTCMinutes()).slice(-2)+':'+("0" + now.getUTCSeconds()).slice(-2));
});
});
2023-08-19 00:54:50 +08:00
var favs={};
get_fav();
$('#fav_add').click(function (event) {
2023-08-18 20:48:31 +08:00
save_fav();
});
2023-08-19 12:50:18 +08:00
$(document).on("click", "#fav_del", function (event) {
del_fav($(this).attr('name'));
});
2023-08-19 00:54:50 +08:00
$(document).on("click", "#fav_recall", function (event) {
$('#sat_name').val(favs[this.innerText].sat_name);
$('#sat_mode').val(favs[this.innerText].sat_mode);
$('#band_rx').val(favs[this.innerText].band_rx);
$('#band').val(favs[this.innerText].band);
$('#frequency_rx').val(favs[this.innerText].frequency_rx);
$('#frequency').val(favs[this.innerText].frequency);
$('#selectPropagation').val(favs[this.innerText].prop_mode);
$('#mode').val(favs[this.innerText].mode);
2023-08-18 23:00:40 +08:00
});
2023-08-19 00:54:50 +08:00
2023-08-18 23:00:40 +08:00
function del_fav(name) {
if (confirm("Are you sure to delete Fav?")) {
$.ajax({
url: base_url+'index.php/user_options/del_fav',
method: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ "option_name": name }),
success: function(result) {
get_fav();
}
});
}
2023-08-18 23:00:40 +08:00
}
function get_fav() {
$.ajax({
url: base_url+'index.php/user_options/get_fav',
method: 'GET',
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function(result) {
2023-08-19 00:54:50 +08:00
$("#fav_menu").empty();
for (const key in result) {
2023-12-29 01:48:56 +08:00
$("#fav_menu").append('<label class="dropdown-item" style="display: flex; justify-content: space-between;"><span id="fav_recall">' + key + '</span><span class="badge bg-danger" id="fav_del" name="' + key + '"><i class="fas fa-trash-alt"></i></span></label>');
2023-08-19 00:54:50 +08:00
}
favs=result;
2023-08-18 23:00:40 +08:00
}
});
}
2023-08-18 20:48:31 +08:00
function save_fav() {
var payload={};
payload.sat_name=$('#sat_name').val();
2023-08-19 00:54:50 +08:00
payload.sat_mode=$('#sat_mode').val();
2023-08-18 20:48:31 +08:00
payload.band_rx=$('#band_rx').val();
payload.band=$('#band').val();
2023-08-19 00:54:50 +08:00
payload.frequency_rx=$('#frequency_rx').val();
2023-08-18 20:48:31 +08:00
payload.frequency=$('#frequency').val();
2023-08-19 00:54:50 +08:00
payload.prop_mode=$('#selectPropagation').val();
2023-08-18 20:48:31 +08:00
payload.mode=$('#mode').val();
$.ajax({
2023-08-18 21:16:01 +08:00
url: base_url+'index.php/user_options/add_edit_fav',
2023-08-18 20:48:31 +08:00
method: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(payload),
success: function(result) {
2023-08-19 00:54:50 +08:00
get_fav();
2023-08-18 20:48:31 +08:00
}
});
}
2023-07-27 01:55:35 +08:00
var bc_bandmap = new BroadcastChannel('qso_window');
bc_bandmap.onmessage = function (ev) {
if (ev.data == 'ping') {
bc_bandmap.postMessage('pong');
}
}
2023-07-27 00:38:38 +08:00
var bc = new BroadcastChannel('qso_wish');
bc.onmessage = function (ev) {
2023-07-27 01:55:35 +08:00
if (ev.data.ping) {
let message={};
message.pong=true;
bc.postMessage(message);
2023-07-27 01:55:35 +08:00
} else {
$('#frequency').val(ev.data.frequency);
$("#band").val(frequencyToBand(ev.data.frequency));
if (ev.data.frequency_rx != "") {
$('#frequency_rx').val(ev.data.frequency_rx);
$("#band_rx").val(frequencyToBand(ev.data.frequency_rx));
}
2023-07-27 01:55:35 +08:00
$("#callsign").val(ev.data.call);
2023-07-27 23:27:47 +08:00
$("#callsign").focusout();
$("#callsign").blur();
2023-07-27 01:55:35 +08:00
}
} /* receive */
2023-07-27 00:38:38 +08:00
$("#locator")
.popover({ placement: 'top', title: 'Gridsquare Formatting', content: "Enter multiple (4-digit) grids separated with commas. For example: IO77,IO78" })
.focus(function () {
$('#locator').popover('show');
})
.blur(function () {
$('#locator').popover('hide');
});
$("#sat_name").change(function(){
var sat = $("#sat_name").val();
if (sat == "") {
$("#sat_mode").val("");
$("#selectPropagation").val("");
}
});
$('#input_usa_state').change(function(){
var state = $("#input_usa_state option:selected").text();
if (state != "") {
$("#stationCntyInput").prop('disabled', false);
$('#stationCntyInput').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
var state = $("#input_usa_state option:selected").text();
if (!query || state == "") return callback();
$.ajax({
url: base_url+'index.php/qso/get_county',
type: 'GET',
dataType: 'json',
data: {
query: query,
state: state,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
} else {
$("#stationCntyInput").prop('disabled', true);
//$('#stationCntyInput')[0].selectize.destroy();
$("#stationCntyInput").val("");
}
});
$('#sota_ref').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_sota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
2022-01-02 19:52:39 +08:00
$('#sota_ref').change(function(){
$('#sota_info').html('<a target="_blank" href="https://summits.sota.org.uk/summit/'+$('#sota_ref').val()+'"><img width="32" height="32" src="'+base_url+'images/icons/sota.org.uk.png"></a>');
2022-01-02 19:52:39 +08:00
$('#sota_info').attr('title', 'Lookup '+$('#sota_ref').val()+' summit info on sota.org.uk');
});
2022-08-15 22:04:33 +08:00
$('#wwff_ref').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
2022-08-15 22:04:33 +08:00
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_wwff',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#wwff_ref').change(function(){
$('#wwff_info').html('<a target="_blank" href="https://www.cqgma.org/zinfo.php?ref='+$('#wwff_ref').val()+'"><img width="32" height="32" src="'+base_url+'images/icons/wwff.co.png"></a>');
2022-10-19 00:54:50 +08:00
$('#wwff_info').attr('title', 'Lookup '+$('#wwff_ref').val()+' reference info on cqgma.org');
2022-08-15 22:04:33 +08:00
});
2022-10-05 23:05:53 +08:00
$('#pota_ref').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
2022-10-05 23:05:53 +08:00
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_pota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#pota_ref').change(function(){
$('#pota_info').html('<a target="_blank" href="https://pota.app/#/park/'+$('#pota_ref').val()+'"><img width="32" height="32" src="'+base_url+'images/icons/pota.app.png"></a>');
2022-10-05 23:05:53 +08:00
$('#pota_info').attr('title', 'Lookup '+$('#pota_ref').val()+' reference info on pota.co');
});
$('#darc_dok').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
load: function(query, callback) {
if (!query) return callback(); // Only trigger if at least 1 character is entered
$.ajax({
url: base_url+'index.php/qso/get_dok',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
/*
Populate the Satellite Names Field on the QSO Panel
*/
$.getJSON(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( "" ));
});
2023-12-05 04:06:00 +08:00
// Test Consistency value on submit form //
var isSubmitting = false;
$("#qso_input").off('submit').on('submit', function(e){
// Prevent double submission
if (isSubmitting) {
e.preventDefault();
return false;
}
2023-12-05 04:06:00 +08:00
var _submit = true;
if ((typeof qso_manual !== "undefined")&&(qso_manual == "1")) {
if ($('#qso_input input[name="end_time"]').length == 1) { _submit = testTimeOffConsistency(); }
}
if (_submit) {
// Mark as submitting and disable the submit button
isSubmitting = true;
var submitBtn = $(this).find('button[type="submit"]');
var originalText = submitBtn.data('original-text');
if (!originalText) {
// Store original text first time
originalText = submitBtn.html();
submitBtn.data('original-text', originalText);
}
submitBtn.prop('disabled', true);
submitBtn.html('<i class="fas fa-spinner fa-spin"></i> Saving...');
}
2023-12-05 04:06:00 +08:00
return _submit;
})
// Prevent Enter key from causing double submissions
$("#qso_input").on('keydown', function(e) {
if (e.key === 'Enter' && e.target.type !== 'textarea') {
if (isSubmitting) {
e.preventDefault();
return false;
}
}
});
// Reset submission state when page becomes visible again (handles cases where submission gets stuck)
document.addEventListener('visibilitychange', function() {
if (!document.hidden && typeof isSubmitting !== 'undefined' && isSubmitting) {
setTimeout(function() {
resetSubmissionState();
}, 1000); // Wait 1 second before resetting to avoid interfering with legitimate submissions
}
});
});
var selected_sat;
var selected_sat_mode;
$(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(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].Downlink_Mode == "LSB" && val2[0].Uplink_Mode == "USB") || (val2[0].Downlink_Mode == "USB" && val2[0].Uplink_Mode == "LSB") ) { // inverting Transponder? set to SSB
$("#mode").val("SSB");
} else {
$("#mode").val(val2[0].Uplink_Mode);
}
$("#band").val(frequencyToBand(val2[0].Uplink_Freq));
$("#band_rx").val(frequencyToBand(val2[0].Downlink_Freq));
$("#frequency").val(val2[0].Uplink_Freq);
$("#frequency_rx").val(val2[0].Downlink_Freq);
$("#selectPropagation").val('SAT');
}
});
}
});
});
}
}
});
$(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( 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( "" ));
});
}
}
});
function changebadge(entityname) {
if($("#sat_name" ).val() != "") {
$.getJSON(base_url + 'index.php/logbook/jsonlookupdxcc/' + convert_case(entityname) + '/SAT/0/0', function(result)
{
2023-09-12 17:57:21 +08:00
$('#callsign_info').removeClass("lotw_info_orange");
$('#callsign_info').removeClass("text-bg-secondary");
$('#callsign_info').removeClass("text-bg-success");
$('#callsign_info').removeClass("text-bg-danger");
$('#callsign_info').attr('title', '');
2023-09-12 17:57:21 +08:00
if (result.confirmed) {
$('#callsign_info').addClass("text-bg-success");
2023-09-12 17:57:21 +08:00
$('#callsign_info').attr('title', 'DXCC was already worked and confirmed in the past on this band and mode!');
} else if (result.workedBefore) {
$('#callsign_info').addClass("text-bg-success");
2023-09-12 17:57:21 +08:00
$('#callsign_info').addClass("lotw_info_orange");
$('#callsign_info').attr('title', 'DXCC was already worked in the past on this band and mode!');
2023-09-12 17:57:21 +08:00
} else {
$('#callsign_info').addClass("text-bg-danger");
$('#callsign_info').attr('title', 'New DXCC, not worked on this band and mode!');
}
})
} else {
$.getJSON(base_url + 'index.php/logbook/jsonlookupdxcc/' + convert_case(entityname) + '/0/' + $("#band").val() +'/' + $("#mode").val(), function(result)
{
// Reset CSS values before updating
2023-09-12 17:57:21 +08:00
$('#callsign_info').removeClass("lotw_info_orange");
$('#callsign_info').removeClass("text-bg-secondary");
$('#callsign_info').removeClass("text-bg-success");
$('#callsign_info').removeClass("text-bg-danger");
$('#callsign_info').attr('title', '');
2023-09-12 17:57:21 +08:00
if (result.confirmed) {
$('#callsign_info').addClass("text-bg-success");
2023-09-12 17:57:21 +08:00
$('#callsign_info').attr('title', 'DXCC was already worked and confirmed in the past on this band and mode!');
} else if (result.workedBefore) {
$('#callsign_info').addClass("text-bg-success");
2023-09-12 17:57:21 +08:00
$('#callsign_info').addClass("lotw_info_orange");
$('#callsign_info').attr('title', 'DXCC was already worked in the past on this band and mode!');
2023-09-12 17:57:21 +08:00
} else {
$('#callsign_info').addClass("text-bg-danger");
$('#callsign_info').attr('title', 'New DXCC, not worked on this band and mode!');
}
})
}
}
/* Function: resetSubmissionState resets the form submission state */
function resetSubmissionState() {
if (typeof isSubmitting !== 'undefined') {
isSubmitting = false;
}
var submitBtn = $('#qso_input button[type="submit"]');
if (submitBtn.length > 0) {
submitBtn.prop('disabled', false);
// Get the original text from the button or use a fallback
var originalText = submitBtn.data('original-text');
if (!originalText) {
// Store original text first time
originalText = submitBtn.html();
submitBtn.data('original-text', originalText);
}
submitBtn.html(originalText);
}
}
/* Function: reset_fields is used to reset the fields on the QSO page */
function reset_fields() {
// Reset submission state
resetSubmissionState();
$('#locator_info').text("");
$('#country').val("");
$('#continent').val("");
$('#lotw_info').text("");
$('#lotw_info').removeClass("lotw_info_red");
$('#lotw_info').removeClass("lotw_info_yellow");
$('#lotw_info').removeClass("lotw_info_orange");
2021-12-19 21:22:49 +08:00
$('#qrz_info').text("");
2021-12-20 05:07:51 +08:00
$('#hamqth_info').text("");
2022-01-02 19:52:39 +08:00
$('#sota_info').text("");
$('#dxcc_id').val("");
$('#cqz').val("");
$('#name').val("");
$('#qth').val("");
$('#locator').val("");
$('#iota_ref').val("");
2022-01-02 19:52:39 +08:00
$('#sota_ref').val("");
$("#locator").removeClass("confirmedGrid");
$("#locator").removeClass("workedGrid");
$("#locator").removeClass("newGrid");
$("#callsign").removeClass("confirmedGrid");
$("#callsign").removeClass("workedGrid");
$("#callsign").removeClass("newGrid");
$('#callsign_info').removeClass("text-bg-secondary");
$('#callsign_info').removeClass("text-bg-success");
$('#callsign_info').removeClass("text-bg-danger");
$('#callsign-image').attr('style', 'display: none;');
$('#callsign-image-content').text("");
$('#qsl_via').val("");
$('#callsign_info').text("");
$('#input_usa_state').val("");
$('#qso-last-table').show();
$('#partial_view').hide();
2022-08-15 22:04:33 +08:00
var $select = $('#wwff_ref').selectize();
var selectize = $select[0].selectize;
selectize.clear();
2022-10-05 23:05:53 +08:00
var $select = $('#pota_ref').selectize();
var selectize = $select[0].selectize;
selectize.clear();
2022-04-15 04:36:47 +08:00
var $select = $('#darc_dok').selectize();
var selectize = $select[0].selectize;
selectize.clear();
2022-04-17 04:07:13 +08:00
$select = $('#stationCntyInput').selectize();
selectize = $select[0].selectize;
selectize.clear();
2022-01-05 22:21:26 +08:00
mymap.setView(pos, 12);
mymap.removeLayer(markers);
$('.callsign-suggest').hide();
$('.dxccsummary').remove();
2023-12-29 15:26:15 +08:00
$('#timesWorked').html(lang_qso_title_previous_contacts);
}
2023-12-06 17:23:53 +08:00
function resetTimers(manual) {
if (typeof manual !== 'undefined' && manual != 1) {
handleStart = setInterval(function() { getUTCTimeStamp($('.input_start_time')); }, 500);
handleEnd = setInterval(function() { getUTCTimeStamp($('.input_end_time')); }, 500);
handleDate = setInterval(function() { getUTCDateStamp($('.input_date')); }, 1000);
}
Add option to log QSO end times separately Squashed commit of the following: commit 595f620d9ea32cde52cd8094c9ba928b2242ebce Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 13:58:05 2023 +0100 Update languages commit f670a0605923e3e3e50548cdc6872afce620d2bb Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 13:55:04 2023 +0100 Added user option for enabling QSO end time logging commit 36d9a95ebbebb6cdcdd382d1460dd858b425e1c7 Merge: 54d5bb53 352931b1 Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 12:18:39 2023 +0100 Merge branch 'dev' into qsoTime commit 54d5bb535bfe820feb617b2c7205733af7b9f91d Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:58 2023 +0200 start/end times for other languages commit c5f6bb0cab5dd3b38d1d74ec1a666c82a71929d6 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:42 2023 +0200 Hide end time if only differs in seconds as we only display minutes anyway ... commit d519d88604bf1730a1c2e0631a6047326fa57a56 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:29 2023 +0200 use start as end time if end is not set separately commit f2588ad1321df63d6840f33c05700f55eb681f9c Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:43 2023 +0200 reset timers on form reset commit 2b7ee4e48c27d0373e74a362f5c5d18d3616cd1e Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:27 2023 +0200 Strip seconds from session time variable commit e0c35aa0cfaf2569c1e9254d287a98251a771593 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:11 2023 +0200 Adapt contest logging commit 5368ef25f3a59756654092767c863684775f4483 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:12:50 2023 +0200 Make date field a little smaller commit ad2d7e756c101a387b4449ee0fcbfcbaac286d28 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:12:30 2023 +0200 Add button to reset start time commit f56e031946ef80978857da4f49629a51bb98ad57 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:11:09 2023 +0200 Copy start to end time on focus out commit b741d0428deac43efe33f8bf22943c09a994c271 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:10:45 2023 +0200 Only min and sec for post QSO template commit 77314edd31be56469d1355b95287e580e8414d8b Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:08:49 2023 +0200 Basics for QSO end time logging
2023-11-01 21:24:13 +08:00
}
$("#callsign").focusout(function() {
// Temp store the callsign
var temp_callsign = $(this).val();
if (temp_callsign == lastCallsignUpdated) {
return;
}
lastCallsignUpdated = temp_callsign;
if ($(this).val().length >= 3) {
/* Find and populate DXCC */
$('.callsign-suggest').hide();
if($("#sat_name").val() != ""){
var sat_type = "SAT";
var json_band = "0";
var json_mode = "0";
} else {
var sat_type = "0";
var json_band = $("#band").val();
var json_mode = $("#mode").val();
}
var find_callsign = $(this).val().toUpperCase();
var callsign = find_callsign;
2023-09-29 17:13:32 +08:00
find_callsign=find_callsign.replace(/\//g, "-");
find_callsign=find_callsign.replace('Ø', '0');
// Replace / in a callsign with - to stop urls breaking
$.getJSON(base_url + 'index.php/logbook/json/' + find_callsign + '/' + sat_type + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val(), function(result)
{
// Make sure the typed callsign and json result match
if($('#callsign').val = result.callsign) {
2022-12-01 22:08:30 +08:00
// Reset QSO fields
resetDefaultQSOFields();
if(result.dxcc.entity != undefined) {
$('#country').val(convert_case(result.dxcc.entity));
$('#callsign_info').text(convert_case(result.dxcc.entity));
if($("#sat_name" ).val() != "") {
//logbook/jsonlookupgrid/io77/SAT/0/0
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/SAT/0/0', function(result)
{
// Reset CSS values before updating
$('#callsign').removeClass("workedGrid");
$('#callsign').removeClass("confirmedGrid");
$('#callsign').removeClass("newGrid");
$('#callsign').attr('title', '');
if (result.confirmed) {
$('#callsign').addClass("confirmedGrid");
$('#callsign').attr('title', 'Callsign was already worked and confirmed in the past on this band and mode!');
} else if (result.workedBefore) {
$('#callsign').addClass("workedGrid");
$('#callsign').attr('title', 'Callsign was already worked in the past on this band and mode!');
}
else
{
$('#callsign').addClass("newGrid");
$('#callsign').attr('title', 'New Callsign!');
}
})
} else {
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/0/' + $("#band").val() +'/' + $("#mode").val(), function(result)
{
// Reset CSS values before updating
$('#callsign').removeClass("confirmedGrid");
$('#callsign').removeClass("workedGrid");
$('#callsign').removeClass("newGrid");
$('#callsign').attr('title', '');
if (result.confirmed) {
$('#callsign').addClass("confirmedGrid");
$('#callsign').attr('title', 'Callsign was already worked and confirmed in the past on this band and mode!');
} else if (result.workedBefore) {
$('#callsign').addClass("workedGrid");
$('#callsign').attr('title', 'Callsign was already worked in the past on this band and mode!');
} else {
$('#callsign').addClass("newGrid");
$('#callsign').attr('title', 'New Callsign!');
}
})
}
changebadge(result.dxcc.entity);
}
if(result.lotw_member == "active") {
$('#lotw_info').text("LoTW");
if (result.lotw_days > 365) {
$('#lotw_info').addClass('lotw_info_red');
} else if (result.lotw_days > 30) {
$('#lotw_info').addClass('lotw_info_orange');
$lotw_hint = ' lotw_info_orange';
} else if (result.lotw_days > 7) {
$('#lotw_info').addClass('lotw_info_yellow');
}
$('#lotw_link').attr('href',"https://lotw.arrl.org/lotwuser/act?act="+callsign);
$('#lotw_link').attr('target',"_blank");
2023-11-26 16:54:29 +08:00
$('#lotw_info').attr('data-bs-toggle',"tooltip");
$('#lotw_info').attr('title',"LoTW User. Last upload was "+result.lotw_days+" days ago");
$('[data-bs-toggle="tooltip"]').tooltip();
}
$('#qrz_info').html('<a target="_blank" href="https://www.qrz.com/db/'+callsign+'"><img width="32" height="32" src="'+base_url+'images/icons/qrz.com.png"></a>');
$('#qrz_info').attr('title', 'Lookup '+callsign+' info on qrz.com');
$('#hamqth_info').html('<a target="_blank" href="https://www.hamqth.com/'+callsign+'"><img width="32" height="32" src="'+base_url+'images/icons/hamqth.com.png"></a>');
$('#hamqth_info').attr('title', 'Lookup '+callsign+' info on hamqth.com');
var $dok_select = $('#darc_dok').selectize();
var dok_selectize = $dok_select[0].selectize;
2022-04-15 04:36:47 +08:00
if (result.dxcc.adif == '230') {
$.get(base_url + 'index.php/lookup/dok/' + $('#callsign').val().toUpperCase(), function(result) {
if (result) {
dok_selectize.addOption({name: result});
dok_selectize.setValue(result, false);
}
});
2022-04-15 04:36:47 +08:00
} else {
dok_selectize.clear();
2022-04-15 04:36:47 +08:00
}
$('#dxcc_id').val(result.dxcc.adif);
$('#cqz').val(result.dxcc.cqz);
$('#ituz').val(result.dxcc.ituz);
var redIcon = L.icon({
iconUrl: icon_dot_url,
iconSize: [18, 18], // size of the icon
});
// Set Map to Lat/Long
markers.clearLayers();
mymap.setZoom(8);
if (typeof result.latlng !== "undefined" && result.latlng !== false) {
var marker = L.marker([result.latlng[0], result.latlng[1]], {icon: redIcon});
mymap.panTo([result.latlng[0], result.latlng[1]]);
mymap.setView([result.latlng[0], result.latlng[1]], 8);
} else {
var marker = L.marker([result.dxcc.lat, result.dxcc.long], {icon: redIcon});
mymap.panTo([result.dxcc.lat, result.dxcc.long]);
mymap.setView([result.dxcc.lat, result.dxcc.long], 8);
}
markers.addLayer(marker).addTo(mymap);
/* Find Locator if the field is empty */
if($('#locator').val() == "") {
$('#locator').val(result.callsign_qra);
$('#locator_info').html(result.bearing);
2023-06-15 22:03:24 +08:00
if (result.callsign_distance != "" && result.callsign_distance != 0)
{
document.getElementById("distance").value = result.callsign_distance;
}
if (result.callsign_qra != "")
{
if (result.confirmed) {
$('#locator').addClass("confirmedGrid");
$('#locator').attr('title', 'Grid was already worked and confirmed in the past');
} else if (result.workedBefore) {
$('#locator').addClass("workedGrid");
$('#locator').attr('title', 'Grid was already worked in the past');
} else {
$('#locator').addClass("newGrid");
$('#locator').attr('title', 'New grid!');
}
} else {
$('#locator').removeClass("workedGrid");
$('#locator').removeClass("confirmedGrid");
$('#locator').removeClass("newGrid");
$('#locator').attr('title', '');
}
}
/* Find Operators Name */
if($('#qsl_via').val() == "") {
$('#qsl_via').val(result.qsl_manager);
}
/* Find Operators Name */
if($('#name').val() == "") {
$('#name').val(result.callsign_name);
}
if($('#continent').val() == "") {
$('#continent').val(result.dxcc.cont);
}
if($('#qth').val() == "") {
$('#qth').val(result.callsign_qth);
}
/* Find link to qrz.com picture */
if (result.image != "n/a") {
$('#callsign-image-content').html('<img class="callsign-image-pic" src="'+result.image+'">');
$('#callsign-image').attr('style', 'display: true;');
}
/*
* Update state with returned value
*/
if($("#input_usa_state").val() == "") {
$("#input_usa_state").val(result.callsign_state).trigger('change');
}
2022-04-17 04:07:13 +08:00
/*
* Update county with returned value
*/
if( $('#stationCntyInput').has('option').length == 0 && result.callsign_us_county != "") {
var $county_select = $('#stationCntyInput').selectize();
var county_selectize = $county_select[0].selectize;
county_selectize.addOption({name: result.callsign_us_county});
county_selectize.setValue(result.callsign_us_county, false);
2022-04-17 04:07:13 +08:00
}
2023-12-29 15:26:15 +08:00
if(result.timesWorked != "") {
2023-12-29 15:35:58 +08:00
$('#timesWorked').html(result.timesWorked + ' ' + lang_qso_title_times_worked_before);
2023-12-29 15:26:15 +08:00
} else {
$('#timesWorked').html(lang_qso_title_previous_contacts);
}
if($('#iota_ref').val() == "") {
$('#iota_ref').val(result.callsign_iota);
}
// Hide the last QSO table
$('#qso-last-table').hide();
$('#partial_view').show();
/* display past QSOs */
$('#partial_view').html(result.partial);
// Get DXX Summary
getDxccResult(result.dxcc.adif, convert_case(result.dxcc.entity));
}
});
} else {
2022-12-01 22:08:30 +08:00
// Reset QSO fields
resetDefaultQSOFields();
}
})
// Only set the frequency when not set by userdata/PHP.
if ($('#frequency').val() == "")
{
$.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) {
$('#frequency').val(result);
$('#frequency_rx').val("");
});
}
2021-08-30 03:17:43 +08:00
/* time input shortcut */
$('#start_time').change(function() {
var raw_time = $(this).val();
if(raw_time.match(/^\d\[0-6]d$/)) {
raw_time = "0"+raw_time;
}
if(raw_time.match(/^[012]\d[0-5]\d$/)) {
raw_time = raw_time.substring(0,2)+":"+raw_time.substring(2,4);
$('#start_time').val(raw_time);
}
});
Add option to log QSO end times separately Squashed commit of the following: commit 595f620d9ea32cde52cd8094c9ba928b2242ebce Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 13:58:05 2023 +0100 Update languages commit f670a0605923e3e3e50548cdc6872afce620d2bb Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 13:55:04 2023 +0100 Added user option for enabling QSO end time logging commit 36d9a95ebbebb6cdcdd382d1460dd858b425e1c7 Merge: 54d5bb53 352931b1 Author: phl0 <github@florian-wolters.de> Date: Wed Nov 1 12:18:39 2023 +0100 Merge branch 'dev' into qsoTime commit 54d5bb535bfe820feb617b2c7205733af7b9f91d Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:58 2023 +0200 start/end times for other languages commit c5f6bb0cab5dd3b38d1d74ec1a666c82a71929d6 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:42 2023 +0200 Hide end time if only differs in seconds as we only display minutes anyway ... commit d519d88604bf1730a1c2e0631a6047326fa57a56 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:14:29 2023 +0200 use start as end time if end is not set separately commit f2588ad1321df63d6840f33c05700f55eb681f9c Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:43 2023 +0200 reset timers on form reset commit 2b7ee4e48c27d0373e74a362f5c5d18d3616cd1e Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:27 2023 +0200 Strip seconds from session time variable commit e0c35aa0cfaf2569c1e9254d287a98251a771593 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:13:11 2023 +0200 Adapt contest logging commit 5368ef25f3a59756654092767c863684775f4483 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:12:50 2023 +0200 Make date field a little smaller commit ad2d7e756c101a387b4449ee0fcbfcbaac286d28 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:12:30 2023 +0200 Add button to reset start time commit f56e031946ef80978857da4f49629a51bb98ad57 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:11:09 2023 +0200 Copy start to end time on focus out commit b741d0428deac43efe33f8bf22943c09a994c271 Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:10:45 2023 +0200 Only min and sec for post QSO template commit 77314edd31be56469d1355b95287e580e8414d8b Author: phl0 <github@florian-wolters.de> Date: Fri Oct 27 10:08:49 2023 +0200 Basics for QSO end time logging
2023-11-01 21:24:13 +08:00
$('#end_time').change(function() {
var raw_time = $(this).val();
if(raw_time.match(/^\d\[0-6]d$/)) {
raw_time = "0"+raw_time;
}
if(raw_time.match(/^[012]\d[0-5]\d$/)) {
raw_time = raw_time.substring(0,2)+":"+raw_time.substring(2,4);
$('#end_time').val(raw_time);
}
});
2021-08-30 03:17:43 +08:00
/* date input shortcut */
$('#start_date').change(function() {
raw_date = $(this).val();
2021-08-30 15:03:39 +08:00
if(raw_date.match(/^[12]\d{3}[01]\d[0123]\d$/)) {
2021-08-30 03:17:43 +08:00
raw_date = raw_date.substring(0,4)+"-"+raw_date.substring(4,6)+"-"+raw_date.substring(6,8);
$('#start_date').val(raw_date);
}
});
/* on mode change */
$('.mode').change(function() {
$.get(base_url + 'index.php/qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function(result) {
$('#frequency').val(result);
$('#frequency_rx').val("");
});
});
/* Calculate Frequency */
/* on band change */
$('#band').change(function() {
$.get(base_url + 'index.php/qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function(result) {
$('#frequency').val(result);
$('#frequency_rx').val("");
});
});
/* On Key up Calculate Bearing and Distance */
$("#locator").keyup(function(){
if ($(this).val()) {
var qra_input = $(this).val();
var qra_lookup = qra_input.substring(0, 4);
if(qra_lookup.length >= 4) {
// Check Log if satname is provided
if($("#sat_name" ).val() != "") {
//logbook/jsonlookupgrid/io77/SAT/0/0
2023-08-14 05:24:58 +08:00
$.getJSON(base_url + 'index.php/logbook/jsonlookupgrid/' + qra_lookup.toUpperCase() + '/SAT/0/0', function(result)
{
// Reset CSS values before updating
$('#locator').removeClass("confirmedGrid");
$('#locator').removeClass("workedGrid");
$('#locator').removeClass("newGrid");
$('#locator').attr('title', '');
if (result.confirmed) {
$('#locator').addClass("confirmedGrid");
$('#locator').attr('title', 'Grid was already worked and confirmed in the past');
} else if (result.workedBefore) {
$('#locator').addClass("workedGrid");
$('#locator').attr('title', 'Grid was already worked in the past');
} else {
$('#locator').addClass("newGrid");
$('#locator').attr('title', 'New grid!');
}
})
} else {
2023-08-14 05:24:58 +08:00
$.getJSON(base_url + 'index.php/logbook/jsonlookupgrid/' + qra_lookup.toUpperCase() + '/0/' + $("#band").val() +'/' + $("#mode").val(), function(result)
{
// Reset CSS values before updating
$('#locator').removeClass("confirmedGrid");
$('#locator').removeClass("workedGrid");
$('#locator').removeClass("newGrid");
$('#locator').attr('title', '');
if (result.confirmed) {
$('#locator').addClass("confirmedGrid");
$('#locator').attr('title', 'Grid was already worked and confimred in the past');
} else if (result.workedBefore) {
$('#locator').addClass("workedGrid");
$('#locator').attr('title', 'Grid was already worked in the past');
} else {
$('#locator').addClass("newGrid");
$('#locator').attr('title', 'New grid!');
}
})
}
}
if(qra_input.length >= 4 && $(this).val().length > 0) {
2023-08-28 21:21:56 +08:00
$.ajax({
url: base_url + 'index.php/logbook/qralatlngjson',
type: 'post',
data: {
qra: $(this).val(),
},
success: function(data) {
// Set Map to Lat/Long
result = JSON.parse(data);
markers.clearLayers();
if (typeof result[0] !== "undefined" && typeof result[1] !== "undefined") {
var redIcon = L.icon({
iconUrl: icon_dot_url,
iconSize: [18, 18], // size of the icon
});
2023-08-28 21:21:56 +08:00
var marker = L.marker([result[0], result[1]], {icon: redIcon});
mymap.setZoom(8);
mymap.panTo([result[0], result[1]]);
mymap.setView([result[0], result[1]], 8);
markers.addLayer(marker).addTo(mymap);
}
},
error: function() {
},
});
2023-08-25 22:26:25 +08:00
$.ajax({
url: base_url + 'index.php/logbook/searchbearing',
type: 'post',
data: {
grid: $(this).val(),
stationProfile: $('#stationProfile').val()
},
success: function(data) {
$('#locator_info').html(data).fadeIn("slow");
},
error: function() {
2023-08-30 05:38:24 +08:00
$('#locator_info').text("Error loading bearing!").fadeIn("slow");
2023-08-25 22:26:25 +08:00
},
});
2023-08-30 05:38:24 +08:00
$.ajax({
url: base_url + 'index.php/logbook/searchdistance',
type: 'post',
data: {
grid: $(this).val(),
stationProfile: $('#stationProfile').val()
},
success: function(data) {
document.getElementById("distance").value = data;
},
error: function() {
document.getElementById("distance").value = null;
2023-08-30 05:38:24 +08:00
},
2023-06-16 00:15:29 +08:00
});
}
}
});
// Change report based on mode
$('.mode').change(function(){
setRst($('.mode') .val());
});
function convert_case(str) {
var lower = str.toLowerCase();
return lower.replace(/(^| )(\w)/g, function(x) {
return x.toUpperCase();
});
}
$('#dxcc_id').on('change', function() {
2023-08-14 05:38:03 +08:00
$.getJSON(base_url + 'index.php/logbook/jsonentity/' + $(this).val(), function (result) {
if (result.dxcc.name != undefined) {
$('#country').val(convert_case(result.dxcc.name));
$('#cqz').val(convert_case(result.dxcc.cqz));
$('#callsign_info').removeClass("text-bg-secondary");
$('#callsign_info').removeClass("text-bg-success");
$('#callsign_info').removeClass("text-bg-danger");
$('#callsign_info').attr('title', '');
$('#callsign_info').text(convert_case(result.dxcc.name));
changebadge(result.dxcc.name);
// Set Map to Lat/Long it locator is not empty
if($('#locator').val() == "") {
var redIcon = L.icon({
iconUrl: icon_dot_url,
iconSize: [18, 18], // size of the icon
});
markers.clearLayers();
var marker = L.marker([result.dxcc.lat, result.dxcc.long], {icon: redIcon});
mymap.setZoom(8);
mymap.panTo([result.dxcc.lat, result.dxcc.long]);
markers.addLayer(marker).addTo(mymap);
}
}
});
});
//Spacebar moves to the name field when you're entering a callsign
//Similar to contesting ux, good for pileups.
$("#callsign").on("keypress", function(e) {
if (e.which == 32){
$("#name").focus();
return false; //Eliminate space char
}
});
// On Key up check and suggest callsigns
$("#callsign").keyup(function() {
if ($(this).val().length >= 3) {
$('.callsign-suggest').show();
$callsign = $(this).val().replace('Ø', '0');
$.ajax({
url: 'lookup/scp',
method: 'POST',
data: {
callsign: $callsign.toUpperCase()
},
success: function(result) {
$('.callsign-suggestions').text(result);
}
});
}
});
2022-12-01 22:08:30 +08:00
//Reset QSO form Fields function
function resetDefaultQSOFields() {
$('#callsign_info').text("");
$('#locator_info').text("");
$('#country').val("");
$('#continent').val("");
2022-12-01 22:08:30 +08:00
$('#dxcc_id').val("");
$('#cqz').val("");
$('#name').val("");
$('#qth').val("");
$('#locator').val("");
$('#iota_ref').val("");
$('#sota_ref').val("");
$("#locator").removeClass("workedGrid");
2023-09-12 21:05:58 +08:00
$("#locator").removeClass("confirmedGrid");
2022-12-01 22:08:30 +08:00
$("#locator").removeClass("newGrid");
$("#callsign").removeClass("workedGrid");
2023-09-12 21:05:58 +08:00
$("#callsign").removeClass("confirmedGrid");
2022-12-01 22:08:30 +08:00
$("#callsign").removeClass("newGrid");
$('#callsign_info').removeClass("text-bg-secondary");
$('#callsign_info').removeClass("text-bg-success");
$('#callsign_info').removeClass("text-bg-danger");
2022-12-01 22:08:30 +08:00
$('#input_usa_state').val("");
2022-12-01 22:43:24 +08:00
$('#callsign-image').attr('style', 'display: none;');
$('#callsign-image-content').text("");
$('.dxccsummary').remove();
2023-12-29 15:26:15 +08:00
$('#timesWorked').html(lang_qso_title_previous_contacts);
2022-12-01 22:43:24 +08:00
}
function closeModal() {
var container = document.getElementById("modals-here")
var backdrop = document.getElementById("modal-backdrop")
var modal = document.getElementById("modal")
modal.classList.remove("show")
backdrop.classList.remove("show")
setTimeout(function() {
container.removeChild(backdrop)
container.removeChild(modal)
}, 200)
}
2023-12-05 04:06:00 +08:00
// [TimeOff] test Consistency timeOff value (concidering start and end are between 23:00 and 00:59) //
2023-12-05 04:06:00 +08:00
function testTimeOffConsistency() {
var _start_time = $('#qso_input input[name="start_time"]').val();
var _end_time = $('#qso_input input[name="end_time"]').val();
$('#qso_input input[name="end_time"]').removeClass('inputError');
$('#qso_input .warningOnSubmit').hide();
2023-12-05 04:56:04 +08:00
$('#qso_input .warningOnSubmit_txt').empty();
if ( !( (parseInt(_start_time.replaceAll(':','')) <= parseInt(_end_time.replaceAll(':','')))
2023-12-05 04:06:00 +08:00
|| ((_start_time.substring(0,2)=="23")&&(_end_time.substring(0,2)=="00")) ) ) {
$('#qso_input input[name="end_time"]').addClass('inputError');
2023-12-05 04:56:04 +08:00
$('#qso_input .warningOnSubmit_txt').html(text_error_timeoff_less_timeon);
2023-12-05 04:06:00 +08:00
$('#qso_input .warningOnSubmit').show();
$('#qso_input input[name="end_time"]').off('change').on('change',function(){ testTimeOffConsistency(); });
return false;
}
return true;
2023-12-05 04:06:00 +08:00
}