2020-12-07 20:26:16 +00:00
|
|
|
// Callsign always has focus on load
|
|
|
|
$("#callsign").focus();
|
|
|
|
|
2024-01-14 18:04:35 +00:00
|
|
|
var sessiondata = {};
|
2023-08-06 07:05:33 +00:00
|
|
|
$(document).ready(async function () {
|
2024-01-14 18:04:35 +00:00
|
|
|
sessiondata = await getSession(); // save sessiondata global (we need it later, when adding qso)
|
2023-08-06 08:01:21 +00:00
|
|
|
await restoreContestSession(sessiondata); // wait for restoring until finished
|
2021-10-11 16:54:48 +00:00
|
|
|
setRst($("#mode").val());
|
2020-12-27 08:37:48 +00:00
|
|
|
});
|
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
// Resets the logging form and deletes session from database
|
2020-12-28 18:55:51 +00:00
|
|
|
function reset_contest_session() {
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#name').val("");
|
|
|
|
$('.callsign-suggestions').text("");
|
|
|
|
$('#callsign').val("");
|
|
|
|
$('#comment').val("");
|
2021-08-12 17:37:16 +00:00
|
|
|
|
|
|
|
$("#exch_serial_s").val("1");
|
|
|
|
$("#exch_serial_r").val("");
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#exch_sent').val("");
|
2022-11-08 22:57:39 +00:00
|
|
|
$('#exch_rcvd').val("");
|
2021-08-12 17:37:16 +00:00
|
|
|
$("#exch_gridsquare_r").val("");
|
|
|
|
|
2021-10-11 16:54:48 +00:00
|
|
|
$("#callsign").focus();
|
|
|
|
setRst($("#mode").val());
|
2021-08-12 17:37:16 +00:00
|
|
|
$("#exchangetype").val("None");
|
2021-10-11 16:54:48 +00:00
|
|
|
setExchangetype("None");
|
|
|
|
$("#contestname").val("Other").change();
|
|
|
|
$(".contest_qso_table_contents").empty();
|
2021-10-16 14:03:54 +00:00
|
|
|
$('#copyexchangetodok').prop('checked', false);
|
2020-12-29 16:29:43 +00:00
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/contesting/deleteSession',
|
|
|
|
type: 'post',
|
|
|
|
success: function (data) {
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
2020-12-27 08:37:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Storing the contestid in contest session
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#contestname').change(function () {
|
2023-04-10 16:54:24 +00:00
|
|
|
var formdata = new FormData(document.getElementById("qso_input"));
|
|
|
|
setSession(formdata);
|
2020-12-27 08:37:48 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// Storing the exchange type in contest session
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#exchangetype').change(function () {
|
2023-04-10 16:54:24 +00:00
|
|
|
var exchangetype = $("#exchangetype").val();
|
|
|
|
var formdata = new FormData(document.getElementById("qso_input"));
|
|
|
|
setSession(formdata);
|
|
|
|
setExchangetype(exchangetype);
|
2020-12-27 08:37:48 +00:00
|
|
|
});
|
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
function setSession(formdata) {
|
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/contesting/setSession',
|
|
|
|
type: 'post',
|
|
|
|
data: formdata,
|
|
|
|
processData: false,
|
|
|
|
contentType: false,
|
|
|
|
success: function (data) {
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2020-12-07 20:26:16 +00:00
|
|
|
// realtime clock
|
2024-01-14 18:04:35 +00:00
|
|
|
if (!manual) {
|
2022-03-27 15:33:05 +00:00
|
|
|
$(function ($) {
|
2024-01-14 18:04:35 +00:00
|
|
|
handleStart = setInterval(function () { getUTCTimeStamp($('.input_time')); }, 500);
|
2022-03-27 15:33:05 +00:00
|
|
|
});
|
2020-12-07 20:26:16 +00:00
|
|
|
|
2022-03-27 15:33:05 +00:00
|
|
|
$(function ($) {
|
2024-01-14 18:04:35 +00:00
|
|
|
handleDate = setInterval(function () { getUTCDateStamp($('.input_date')); }, 1000);
|
2022-03-27 15:33:05 +00:00
|
|
|
});
|
|
|
|
}
|
2020-12-07 20:26:16 +00:00
|
|
|
|
|
|
|
// We don't want spaces to be written in callsign
|
2021-10-11 16:54:48 +00:00
|
|
|
$(function () {
|
|
|
|
$('#callsign').on('keypress', function (e) {
|
|
|
|
if (e.which == 32) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
2020-12-07 20:26:16 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// We don't want spaces to be written in exchange
|
2021-10-11 16:54:48 +00:00
|
|
|
$(function () {
|
2022-11-08 22:57:39 +00:00
|
|
|
$('#exch_rcvd').on('keypress', function (e) {
|
2021-10-11 16:54:48 +00:00
|
|
|
if (e.which == 32) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
2020-12-07 20:26:16 +00:00
|
|
|
});
|
|
|
|
|
2023-04-05 12:52:05 +00:00
|
|
|
// We don't want spaces to be written in serial
|
|
|
|
$(function () {
|
|
|
|
$('#exch_serial_r').on('keypress', function (e) {
|
|
|
|
if (e.which == 32) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2024-03-08 12:41:12 +00:00
|
|
|
// checked if worked before after blur
|
|
|
|
$("#callsign").blur(function () {
|
|
|
|
checkIfWorkedBefore();
|
|
|
|
});
|
|
|
|
|
2021-08-12 17:37:16 +00:00
|
|
|
// Here we capture keystrokes to execute functions
|
2021-10-11 16:54:48 +00:00
|
|
|
document.onkeyup = function (e) {
|
|
|
|
// ALT-W wipe
|
|
|
|
if (e.altKey && e.which == 87) {
|
|
|
|
reset_log_fields();
|
|
|
|
// CTRL-Enter logs QSO
|
|
|
|
} else if ((e.keyCode == 10 || e.keyCode == 13) && (e.ctrlKey || e.metaKey)) {
|
|
|
|
logQso();
|
2023-04-01 19:20:03 +00:00
|
|
|
// Enter in received exchange logs QSO
|
|
|
|
} else if ((e.which == 13) && (
|
2024-01-14 18:04:35 +00:00
|
|
|
($(document.activeElement).attr("id") == "exch_rcvd")
|
|
|
|
|| ($(document.activeElement).attr("id") == "exch_gridsquare_r")
|
|
|
|
|| ($(document.activeElement).attr("id") == "exch_serial_r")
|
|
|
|
)
|
2023-04-01 19:20:03 +00:00
|
|
|
) {
|
2021-10-11 16:54:48 +00:00
|
|
|
logQso();
|
|
|
|
} else if (e.which == 27) {
|
|
|
|
reset_log_fields();
|
|
|
|
// Space to jump to either callsign or the various exchanges
|
|
|
|
} else if (e.which == 32) {
|
2021-08-13 10:47:17 +00:00
|
|
|
var exchangetype = $("#exchangetype").val();
|
2021-10-11 16:54:48 +00:00
|
|
|
if (exchangetype == 'Exchange') {
|
2021-08-13 10:47:17 +00:00
|
|
|
if ($(document.activeElement).attr("id") == "callsign") {
|
2022-11-08 22:57:39 +00:00
|
|
|
$("#exch_rcvd").focus();
|
2021-08-13 10:47:17 +00:00
|
|
|
return false;
|
2022-11-08 22:57:39 +00:00
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_rcvd") {
|
2021-08-13 10:47:17 +00:00
|
|
|
$("#callsign").focus();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (exchangetype == 'Serial') {
|
|
|
|
if ($(document.activeElement).attr("id") == "callsign") {
|
|
|
|
$("#exch_serial_r").focus();
|
|
|
|
return false;
|
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_serial_r") {
|
|
|
|
$("#callsign").focus();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (exchangetype == 'Serialexchange') {
|
|
|
|
if ($(document.activeElement).attr("id") == "callsign") {
|
|
|
|
$("#exch_serial_r").focus();
|
|
|
|
return false;
|
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_serial_r") {
|
2022-11-08 22:57:39 +00:00
|
|
|
$("#exch_rcvd").focus();
|
2021-08-13 10:47:17 +00:00
|
|
|
return false;
|
2022-11-08 22:57:39 +00:00
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_rcvd") {
|
2021-08-13 10:47:17 +00:00
|
|
|
$("#callsign").focus();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (exchangetype == 'Serialgridsquare') {
|
|
|
|
if ($(document.activeElement).attr("id") == "callsign") {
|
|
|
|
$("#exch_serial_r").focus();
|
|
|
|
return false;
|
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_serial_r") {
|
|
|
|
$("#exch_gridsquare_r").focus();
|
|
|
|
return false;
|
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_gridsquare_r") {
|
|
|
|
$("#callsign").focus();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (exchangetype == 'Gridsquare') {
|
|
|
|
if ($(document.activeElement).attr("id") == "callsign") {
|
|
|
|
$("#exch_gridsquare_r").focus();
|
|
|
|
return false;
|
|
|
|
} else if ($(document.activeElement).attr("id") == "exch_gridsquare_r") {
|
|
|
|
$("#callsign").focus();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-11 16:54:48 +00:00
|
|
|
}
|
2020-12-07 20:26:16 +00:00
|
|
|
|
|
|
|
};
|
|
|
|
|
2022-09-25 10:32:39 +00:00
|
|
|
/* time input shortcut */
|
2024-01-14 18:04:35 +00:00
|
|
|
$('#start_time').change(function () {
|
2022-09-25 10:32:39 +00:00
|
|
|
var raw_time = $(this).val();
|
2024-01-14 18:04:35 +00:00
|
|
|
if (raw_time.match(/^\d\[0-6]d$/)) {
|
|
|
|
raw_time = "0" + raw_time;
|
2022-09-25 10:32:39 +00:00
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
if (raw_time.match(/^[012]\d[0-5]\d$/)) {
|
|
|
|
raw_time = raw_time.substring(0, 2) + ":" + raw_time.substring(2, 4);
|
2022-09-25 10:32:39 +00:00
|
|
|
$('#start_time').val(raw_time);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/* date input shortcut */
|
2024-01-14 18:04:35 +00:00
|
|
|
$('#start_date').change(function () {
|
|
|
|
raw_date = $(this).val();
|
|
|
|
if (raw_date.match(/^[12]\d{3}[01]\d[0123]\d$/)) {
|
|
|
|
raw_date = raw_date.substring(0, 4) + "-" + raw_date.substring(4, 6) + "-" + raw_date.substring(6, 8);
|
2022-09-25 10:32:39 +00:00
|
|
|
$('#start_date').val(raw_date);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-12-07 20:26:16 +00:00
|
|
|
// On Key up check and suggest callsigns
|
2024-04-04 16:38:47 +00:00
|
|
|
$("#callsign").keyup(scp_keyup({
|
|
|
|
selector: $("#callsign"),
|
|
|
|
showSuggestions: function (call, text) {
|
|
|
|
$('.callsign-suggestions').text(text);
|
|
|
|
highlight(call);
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
$("#callsign").keyup(function() {
|
|
|
|
const call = $(this).val().toUpperCase();
|
|
|
|
if (call.length >= 3) {
|
|
|
|
var qTable = $('.qsotable').DataTable();
|
|
|
|
qTable.search(call).draw();
|
|
|
|
}
|
2020-12-07 20:26:16 +00:00
|
|
|
});
|
|
|
|
|
2024-04-04 16:38:47 +00:00
|
|
|
|
2021-10-24 14:48:23 +00:00
|
|
|
function checkIfWorkedBefore() {
|
2023-04-10 16:54:24 +00:00
|
|
|
var call = $("#callsign").val();
|
|
|
|
if (call.length >= 3) {
|
|
|
|
$('#callsign_info').text("");
|
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/contesting/checkIfWorkedBefore',
|
|
|
|
type: 'post',
|
|
|
|
data: {
|
|
|
|
'call': call,
|
|
|
|
'mode': $("#mode").val(),
|
|
|
|
'band': $("#band").val(),
|
|
|
|
'contest': $("#contestname").val()
|
|
|
|
},
|
|
|
|
success: function (result) {
|
2024-01-14 18:04:35 +00:00
|
|
|
if (result.message.substr(0, 6) == 'Worked') {
|
2024-03-08 12:41:12 +00:00
|
|
|
$('#callsign_info').removeClass('text-bg-success');
|
|
|
|
$('#callsign_info').addClass('text-bg-danger');
|
2023-12-30 20:17:43 +00:00
|
|
|
$('#callsign_info').text(result.message);
|
2023-04-10 16:54:24 +00:00
|
|
|
}
|
2024-03-08 12:41:12 +00:00
|
|
|
else if (result.message == "OKAY") {
|
|
|
|
$('#callsign_info').removeClass('text-bg-danger');
|
|
|
|
$('#callsign_info').addClass('text-bg-success');
|
|
|
|
$('#callsign_info').text("Go Work Them!");
|
|
|
|
} else {
|
|
|
|
$('#callsign_info').text("");
|
|
|
|
}
|
2021-10-24 14:48:23 +00:00
|
|
|
}
|
2023-04-10 16:54:24 +00:00
|
|
|
});
|
2024-03-08 12:41:12 +00:00
|
|
|
} else {
|
|
|
|
$('#callsign_info').text("");
|
2023-04-10 16:54:24 +00:00
|
|
|
}
|
2021-10-24 14:48:23 +00:00
|
|
|
}
|
|
|
|
|
2023-10-02 11:46:01 +00:00
|
|
|
async function reset_log_fields() {
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#name').val("");
|
|
|
|
$('.callsign-suggestions').text("");
|
|
|
|
$('#callsign').val("");
|
|
|
|
$('#comment').val("");
|
2022-11-08 22:57:39 +00:00
|
|
|
$('#exch_rcvd').val("");
|
2021-08-12 17:37:16 +00:00
|
|
|
$('#exch_serial_r').val("");
|
|
|
|
$('#exch_gridsquare_r').val("");
|
2021-10-11 16:54:48 +00:00
|
|
|
$("#callsign").focus();
|
|
|
|
setRst($("#mode").val());
|
2021-10-24 14:48:23 +00:00
|
|
|
$('#callsign_info').text("");
|
2022-10-30 07:02:32 +00:00
|
|
|
|
2023-10-02 11:46:01 +00:00
|
|
|
await refresh_qso_table(sessiondata);
|
2022-10-30 07:02:32 +00:00
|
|
|
var qTable = $('.qsotable').DataTable();
|
|
|
|
qTable.search('').draw();
|
2020-12-07 20:26:16 +00:00
|
|
|
}
|
|
|
|
|
2021-10-11 16:54:48 +00:00
|
|
|
RegExp.escape = function (text) {
|
|
|
|
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
2020-12-07 20:26:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function highlight(term, base) {
|
2021-10-11 16:54:48 +00:00
|
|
|
if (!term) return;
|
|
|
|
base = base || document.body;
|
|
|
|
var re = new RegExp("(" + RegExp.escape(term) + ")", "gi");
|
|
|
|
var replacement = "<span class=\"text-primary\">" + term + "</span>";
|
|
|
|
$(".callsign-suggestions", base).contents().each(function (i, el) {
|
|
|
|
if (el.nodeType === 3) {
|
|
|
|
var data = el.data;
|
|
|
|
if (data = data.replace(re, replacement)) {
|
|
|
|
var wrapper = $("<span>").html(data);
|
|
|
|
$(el).before(wrapper.contents()).remove();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2020-12-07 20:26:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Only set the frequency when not set by userdata/PHP.
|
2021-10-11 16:54:48 +00:00
|
|
|
if ($('#frequency').val() == "") {
|
|
|
|
$.get('qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function (result) {
|
|
|
|
$('#frequency').val(result);
|
|
|
|
$('#frequency_rx').val("");
|
|
|
|
});
|
2020-12-07 20:26:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* on mode change */
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#mode').change(function () {
|
|
|
|
$.get('qso/band_to_freq/' + $('#band').val() + '/' + $('.mode').val(), function (result) {
|
|
|
|
$('#frequency').val(result);
|
|
|
|
$('#frequency_rx').val("");
|
|
|
|
});
|
2021-08-12 17:37:16 +00:00
|
|
|
setRst($("#mode").val());
|
2021-10-24 14:48:23 +00:00
|
|
|
checkIfWorkedBefore();
|
2020-12-07 20:26:16 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
/* Calculate Frequency */
|
|
|
|
/* on band change */
|
2021-10-11 16:54:48 +00:00
|
|
|
$('#band').change(function () {
|
|
|
|
$.get('qso/band_to_freq/' + $(this).val() + '/' + $('.mode').val(), function (result) {
|
|
|
|
$('#frequency').val(result);
|
|
|
|
$('#frequency_rx').val("");
|
|
|
|
});
|
2021-10-24 14:48:23 +00:00
|
|
|
checkIfWorkedBefore();
|
2021-03-14 11:44:42 +00:00
|
|
|
});
|
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
function setSerial(data) {
|
|
|
|
var serialsent = 1;
|
|
|
|
if (data.serialsent != "") {
|
2023-04-29 08:17:07 +00:00
|
|
|
serialsent = parseInt(data.serialsent);
|
2023-04-10 16:54:24 +00:00
|
|
|
}
|
|
|
|
$("#exch_serial_s").val(serialsent);
|
|
|
|
}
|
2021-08-12 09:52:36 +00:00
|
|
|
|
|
|
|
function setExchangetype(exchangetype) {
|
2021-10-12 11:10:54 +00:00
|
|
|
// Perhaps a better approach is to hide everything, then just enable the things you need
|
|
|
|
$(".exchanger").hide();
|
|
|
|
$(".exchanges").hide();
|
|
|
|
$(".serials").hide();
|
|
|
|
$(".serialr").hide();
|
|
|
|
$(".gridsquarer").hide();
|
|
|
|
$(".gridsquares").hide();
|
|
|
|
|
|
|
|
if (exchangetype == 'Exchange') {
|
2021-08-12 09:52:36 +00:00
|
|
|
$(".exchanger").show();
|
|
|
|
$(".exchanges").show();
|
|
|
|
}
|
|
|
|
else if (exchangetype == 'Serial') {
|
2021-10-12 11:10:54 +00:00
|
|
|
$(".serials").show();
|
|
|
|
$(".serialr").show();
|
|
|
|
}
|
2021-08-12 09:52:36 +00:00
|
|
|
else if (exchangetype == 'Serialexchange') {
|
2021-08-10 20:32:15 +00:00
|
|
|
$(".exchanger").show();
|
|
|
|
$(".exchanges").show();
|
|
|
|
$(".serials").show();
|
|
|
|
$(".serialr").show();
|
2021-08-07 08:13:38 +00:00
|
|
|
}
|
2021-08-12 09:52:36 +00:00
|
|
|
else if (exchangetype == 'Serialgridsquare') {
|
2021-08-10 20:32:15 +00:00
|
|
|
$(".serials").show();
|
|
|
|
$(".serialr").show();
|
|
|
|
$(".gridsquarer").show();
|
|
|
|
$(".gridsquares").show();
|
2021-08-07 08:13:38 +00:00
|
|
|
}
|
2021-08-12 09:52:36 +00:00
|
|
|
else if (exchangetype == 'Gridsquare') {
|
2021-08-10 20:32:15 +00:00
|
|
|
$(".gridsquarer").show();
|
|
|
|
$(".gridsquares").show();
|
2021-08-07 08:13:38 +00:00
|
|
|
}
|
2021-08-12 09:52:36 +00:00
|
|
|
}
|
2021-08-07 08:13:38 +00:00
|
|
|
|
2021-08-11 06:54:24 +00:00
|
|
|
/*
|
|
|
|
Function: logQso
|
|
|
|
Job: this handles the logging done in the contesting module.
|
|
|
|
*/
|
|
|
|
function logQso() {
|
|
|
|
if ($("#callsign").val().length > 0) {
|
|
|
|
|
|
|
|
$('.callsign-suggestions').text("");
|
|
|
|
|
|
|
|
var table = $('.qsotable').DataTable();
|
2023-04-06 17:28:16 +00:00
|
|
|
var exchangetype = $("#exchangetype").val();
|
|
|
|
|
2021-08-13 10:47:17 +00:00
|
|
|
var gridsquare = $("#exch_gridsquare_r").val();
|
|
|
|
var vucc = '';
|
2021-08-11 06:54:24 +00:00
|
|
|
|
2021-08-13 10:47:17 +00:00
|
|
|
if (gridsquare.indexOf(',') != -1) {
|
|
|
|
vucc = gridsquare;
|
|
|
|
gridsquare = '';
|
|
|
|
}
|
|
|
|
|
2023-04-06 17:28:16 +00:00
|
|
|
var gridr = '';
|
|
|
|
var vuccr = '';
|
|
|
|
var exchsent = '';
|
|
|
|
var exchrcvd = '';
|
|
|
|
var serials = '';
|
|
|
|
var serialr = '';
|
|
|
|
|
|
|
|
switch (exchangetype) {
|
|
|
|
case 'Exchange':
|
|
|
|
exchsent = $("#exch_sent").val();
|
|
|
|
exchrcvd = $("#exch_rcvd").val();
|
2024-01-14 18:04:35 +00:00
|
|
|
break;
|
2023-04-06 17:28:16 +00:00
|
|
|
|
|
|
|
case 'Gridsquare':
|
|
|
|
gridr = gridsquare;
|
|
|
|
vuccr = vucc;
|
2024-01-14 18:04:35 +00:00
|
|
|
break;
|
2023-04-06 17:28:16 +00:00
|
|
|
|
|
|
|
case 'Serial':
|
|
|
|
serials = $("#exch_serial_s").val();
|
|
|
|
serialr = $("#exch_serial_r").val();
|
2024-01-14 18:04:35 +00:00
|
|
|
break;
|
|
|
|
|
2023-04-06 17:28:16 +00:00
|
|
|
case 'Serialexchange':
|
|
|
|
exchsent = $("#exch_sent").val();
|
|
|
|
exchrcvd = $("#exch_rcvd").val();
|
|
|
|
serials = $("#exch_serial_s").val();
|
|
|
|
serialr = $("#exch_serial_r").val();
|
2024-01-14 18:04:35 +00:00
|
|
|
break;
|
|
|
|
|
2023-04-06 17:28:16 +00:00
|
|
|
case 'Serialgridsquare':
|
|
|
|
gridr = gridsquare;
|
|
|
|
vuccr = vucc;
|
|
|
|
serials = $("#exch_serial_s").val();
|
|
|
|
serialr = $("#exch_serial_r").val();
|
2024-01-14 18:04:35 +00:00
|
|
|
break;
|
2023-04-06 17:28:16 +00:00
|
|
|
}
|
|
|
|
|
2021-08-13 10:47:17 +00:00
|
|
|
var data = [[
|
2021-10-11 16:54:48 +00:00
|
|
|
$("#start_date").val() + ' ' + $("#start_time").val(),
|
2021-08-11 06:54:24 +00:00
|
|
|
$("#callsign").val().toUpperCase(),
|
|
|
|
$("#band").val(),
|
|
|
|
$("#mode").val(),
|
|
|
|
$("#rst_sent").val(),
|
2022-11-08 22:57:39 +00:00
|
|
|
$("#rst_rcvd").val(),
|
2023-04-06 17:28:16 +00:00
|
|
|
exchsent,
|
|
|
|
exchrcvd,
|
|
|
|
serials,
|
|
|
|
serialr,
|
|
|
|
gridr,
|
|
|
|
vuccr,
|
2021-08-13 10:47:17 +00:00
|
|
|
]];
|
2021-08-11 06:54:24 +00:00
|
|
|
|
|
|
|
var formdata = new FormData(document.getElementById("qso_input"));
|
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/qso/saveqso',
|
|
|
|
type: 'post',
|
|
|
|
data: formdata,
|
|
|
|
processData: false,
|
|
|
|
contentType: false,
|
|
|
|
enctype: 'multipart/form-data',
|
2023-08-06 07:05:33 +00:00
|
|
|
success: async function (html) {
|
2023-04-29 08:17:07 +00:00
|
|
|
var exchangetype = $("#exchangetype").val();
|
|
|
|
if (exchangetype == "Serial" || exchangetype == 'Serialexchange' || exchangetype == 'Serialgridsquare') {
|
|
|
|
$("#exch_serial_s").val(+$("#exch_serial_s").val() + 1);
|
|
|
|
formdata.set('exch_serial_s', $("#exch_serial_s").val());
|
|
|
|
}
|
2021-08-11 06:54:24 +00:00
|
|
|
|
2023-04-29 08:17:07 +00:00
|
|
|
$('#name').val("");
|
2024-01-14 18:04:35 +00:00
|
|
|
|
2021-08-11 06:54:24 +00:00
|
|
|
$('#callsign').val("");
|
|
|
|
$('#comment').val("");
|
2022-11-08 22:57:39 +00:00
|
|
|
$('#exch_rcvd').val("");
|
2021-08-13 10:47:17 +00:00
|
|
|
$('#exch_gridsquare_r').val("");
|
|
|
|
$('#exch_serial_r').val("");
|
2021-08-11 06:54:24 +00:00
|
|
|
$("#callsign").focus();
|
2023-04-29 08:17:07 +00:00
|
|
|
setSession(formdata);
|
|
|
|
|
2024-01-14 18:04:35 +00:00
|
|
|
// try setting session data
|
|
|
|
console.log(sessiondata);
|
2023-08-06 07:05:33 +00:00
|
|
|
await refresh_qso_table(sessiondata);
|
2022-10-30 07:02:32 +00:00
|
|
|
var qTable = $('.qsotable').DataTable();
|
2023-05-03 10:28:41 +00:00
|
|
|
qTable.search('').order([0, 'desc']).draw();
|
|
|
|
|
2021-08-11 06:54:24 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-08-06 07:05:33 +00:00
|
|
|
async function getSession() {
|
|
|
|
return await $.ajax({
|
2023-04-10 16:54:24 +00:00
|
|
|
url: base_url + 'index.php/contesting/getSession',
|
|
|
|
type: 'post',
|
|
|
|
});
|
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
|
2023-08-06 07:05:33 +00:00
|
|
|
async function restoreContestSession(data) {
|
2023-04-10 16:54:24 +00:00
|
|
|
if (data) {
|
|
|
|
if (data.copytodok == "1") {
|
|
|
|
$('#copyexchangetodok').prop('checked', true);
|
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
if (data.contestid != "") {
|
|
|
|
$("#contestname").val(data.contestid);
|
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
if (data.exchangetype != "") {
|
|
|
|
$("#exchangetype").val(data.exchangetype);
|
|
|
|
setExchangetype(data.exchangetype);
|
2023-04-28 13:55:58 +00:00
|
|
|
setSerial(data);
|
2023-04-10 16:54:24 +00:00
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
if (data.exchangesent != "") {
|
|
|
|
$("#exch_sent").val(data.exchangesent);
|
|
|
|
}
|
2023-04-29 08:17:07 +00:00
|
|
|
|
2023-04-10 16:54:24 +00:00
|
|
|
if (data.qso != "") {
|
2023-08-06 07:05:33 +00:00
|
|
|
await refresh_qso_table(data);
|
2023-04-10 16:54:24 +00:00
|
|
|
}
|
2023-04-29 08:17:07 +00:00
|
|
|
} else {
|
|
|
|
$("#exch_serial_s").val("1");
|
2021-08-11 06:54:24 +00:00
|
|
|
}
|
|
|
|
}
|
2023-05-27 12:52:55 +00:00
|
|
|
|
2023-08-06 07:05:33 +00:00
|
|
|
async function refresh_qso_table(data) {
|
2024-01-14 18:04:35 +00:00
|
|
|
if (data && data.qso) {
|
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/contesting/getSessionQsos',
|
|
|
|
type: 'post',
|
|
|
|
data: { 'qso': data.qso, },
|
|
|
|
success: function (html) {
|
|
|
|
var mode = '';
|
|
|
|
$(".contest_qso_table_contents").empty();
|
|
|
|
$.each(html, function () {
|
|
|
|
if (this.col_submode == null || this.col_submode == '') {
|
|
|
|
mode = this.col_mode;
|
|
|
|
} else {
|
|
|
|
mode = this.col_submode;
|
|
|
|
}
|
|
|
|
|
|
|
|
$(".qsotable tbody").prepend('<tr>' +
|
|
|
|
'<td>' + this.col_time_on + '</td>' +
|
|
|
|
'<td>' + this.col_call + '</td>' +
|
|
|
|
'<td>' + this.col_band + '</td>' +
|
|
|
|
'<td>' + mode + '</td>' +
|
|
|
|
'<td>' + this.col_rst_sent + '</td>' +
|
|
|
|
'<td>' + this.col_rst_rcvd + '</td>' +
|
|
|
|
'<td>' + this.col_stx_string + '</td>' +
|
|
|
|
'<td>' + this.col_srx_string + '</td>' +
|
|
|
|
'<td>' + this.col_stx + '</td>' +
|
|
|
|
'<td>' + this.col_srx + '</td>' +
|
|
|
|
'<td>' + this.col_gridsquare + '</td>' +
|
|
|
|
'<td>' + this.col_vucc_grids + '</td>' +
|
|
|
|
'</tr>');
|
|
|
|
});
|
|
|
|
if (!$.fn.DataTable.isDataTable('.qsotable')) {
|
|
|
|
$.fn.dataTable.moment('DD-MM-YYYY HH:mm:ss');
|
|
|
|
$('.qsotable').DataTable({
|
|
|
|
"stateSave": true,
|
|
|
|
"pageLength": 25,
|
|
|
|
responsive: false,
|
|
|
|
"scrollY": "400px",
|
|
|
|
"scrollCollapse": true,
|
|
|
|
"paging": false,
|
|
|
|
"scrollX": true,
|
|
|
|
"language": {
|
|
|
|
url: getDataTablesLanguageUrl(),
|
2023-08-06 07:05:33 +00:00
|
|
|
},
|
2024-01-14 18:04:35 +00:00
|
|
|
order: [0, 'desc'],
|
|
|
|
"columnDefs": [
|
|
|
|
{
|
|
|
|
"render": function (data, type, row) {
|
|
|
|
return pad(row[8], 3);
|
|
|
|
},
|
|
|
|
"targets": 8
|
2023-08-06 07:05:33 +00:00
|
|
|
},
|
2024-01-14 18:04:35 +00:00
|
|
|
{
|
|
|
|
"render": function (data, type, row) {
|
|
|
|
return pad(row[9], 3);
|
|
|
|
},
|
|
|
|
"targets": 9
|
|
|
|
}
|
|
|
|
]
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
// Runs when no session is set usually when its a clean contest
|
|
|
|
var selectElement = document.getElementById('contestname');
|
|
|
|
var selected_contest_id = selectElement.options[selectElement.selectedIndex].value;
|
|
|
|
$.ajax({
|
|
|
|
url: base_url + 'index.php/contesting/getSessionFreshQsos',
|
|
|
|
type: 'post',
|
|
|
|
data: { 'contest_id': selected_contest_id },
|
|
|
|
success: function (html) {
|
|
|
|
var mode = '';
|
|
|
|
$(".contest_qso_table_contents").empty();
|
|
|
|
$.each(html, function () {
|
|
|
|
if (this.col_submode == null || this.col_submode == '') {
|
|
|
|
mode = this.col_mode;
|
|
|
|
} else {
|
|
|
|
mode = this.col_submode;
|
|
|
|
}
|
|
|
|
|
|
|
|
$(".qsotable tbody").prepend('<tr>' +
|
|
|
|
'<td>' + this.col_time_on + '</td>' +
|
|
|
|
'<td>' + this.col_call + '</td>' +
|
|
|
|
'<td>' + this.col_band + '</td>' +
|
|
|
|
'<td>' + mode + '</td>' +
|
|
|
|
'<td>' + this.col_rst_sent + '</td>' +
|
|
|
|
'<td>' + this.col_rst_rcvd + '</td>' +
|
|
|
|
'<td>' + this.col_stx_string + '</td>' +
|
|
|
|
'<td>' + this.col_srx_string + '</td>' +
|
|
|
|
'<td>' + this.col_stx + '</td>' +
|
|
|
|
'<td>' + this.col_srx + '</td>' +
|
|
|
|
'<td>' + this.col_gridsquare + '</td>' +
|
|
|
|
'<td>' + this.col_vucc_grids + '</td>' +
|
|
|
|
'</tr>');
|
2023-08-06 07:05:33 +00:00
|
|
|
});
|
2024-01-14 18:04:35 +00:00
|
|
|
if (!$.fn.DataTable.isDataTable('.qsotable')) {
|
|
|
|
$.fn.dataTable.moment('DD-MM-YYYY HH:mm:ss');
|
|
|
|
$('.qsotable').DataTable({
|
|
|
|
"stateSave": true,
|
|
|
|
"pageLength": 25,
|
|
|
|
responsive: false,
|
|
|
|
"scrollY": "400px",
|
|
|
|
"scrollCollapse": true,
|
|
|
|
"paging": false,
|
|
|
|
"scrollX": true,
|
|
|
|
"language": {
|
|
|
|
url: getDataTablesLanguageUrl(),
|
|
|
|
},
|
|
|
|
order: [0, 'desc'],
|
|
|
|
"columnDefs": [
|
|
|
|
{
|
|
|
|
"render": function (data, type, row) {
|
|
|
|
return pad(row[8], 3);
|
|
|
|
},
|
|
|
|
"targets": 8
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"render": function (data, type, row) {
|
|
|
|
return pad(row[9], 3);
|
|
|
|
},
|
|
|
|
"targets": 9
|
|
|
|
}
|
|
|
|
]
|
|
|
|
});
|
|
|
|
}
|
2023-08-06 07:05:33 +00:00
|
|
|
}
|
2024-01-14 18:04:35 +00:00
|
|
|
});
|
|
|
|
}
|
2023-08-06 07:05:33 +00:00
|
|
|
}
|
|
|
|
|
2024-01-14 18:04:35 +00:00
|
|
|
function pad(str, max) {
|
2023-05-27 12:52:55 +00:00
|
|
|
str = str.toString();
|
|
|
|
return str.length < max ? pad("0" + str, max) : str;
|
|
|
|
}
|
2023-11-01 13:24:13 +00:00
|
|
|
|
|
|
|
function getUTCTimeStamp(el) {
|
|
|
|
var now = new Date();
|
|
|
|
var localTime = now.getTime();
|
|
|
|
var utc = localTime + (now.getTimezoneOffset() * 60000);
|
2024-01-14 18:04:35 +00:00
|
|
|
$(el).attr('value', ("0" + now.getUTCHours()).slice(-2) + ':' + ("0" + now.getUTCMinutes()).slice(-2) + ':' + ("0" + now.getUTCSeconds()).slice(-2));
|
2023-11-01 13:24:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function getUTCDateStamp(el) {
|
|
|
|
var now = new Date();
|
|
|
|
var localTime = now.getTime();
|
|
|
|
var utc = localTime + (now.getTimezoneOffset() * 60000);
|
2024-01-14 18:04:35 +00:00
|
|
|
$(el).attr('value', ("0" + now.getUTCDate()).slice(-2) + '-' + ("0" + (now.getUTCMonth() + 1)).slice(-2) + '-' + now.getUTCFullYear());
|
2023-11-01 13:24:13 +00:00
|
|
|
}
|
2024-03-29 15:13:10 +00:00
|
|
|
|
2024-04-04 16:38:47 +00:00
|
|
|
function scp_keyup(options) {
|
|
|
|
// options must have two keys:
|
|
|
|
// * selector - element, with .val() which gives the entered callsign
|
|
|
|
// * showSuggestions - function(call, text), where the text is
|
|
|
|
// the list of callsign-suggestions
|
|
|
|
const scp = {
|
|
|
|
request: "",
|
|
|
|
data: []
|
|
|
|
};
|
|
|
|
const callFromInput = (el) => el.val().toUpperCase().replace('0','Ø');
|
|
|
|
const checkCacheValid = (call) => (scp.request != "" && call.includes(scp.request));
|
|
|
|
const filterCallsignList = function (call) {
|
|
|
|
return scp.data?.filter((el) => (el.includes(call) == true)).join(' ') || '';
|
|
|
|
};
|
|
|
|
const updateSuggestions = function (call) {
|
|
|
|
const suggestions = filterCallsignList(call);
|
|
|
|
options.showSuggestions(call, suggestions);
|
|
|
|
}
|
|
|
|
|
|
|
|
const keyup = function(){
|
|
|
|
const call = callFromInput(options.selector);
|
|
|
|
|
|
|
|
if (call.length < 3) {
|
|
|
|
options.showSuggestions("", "");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( checkCacheValid(call) ) {
|
|
|
|
updateSuggestions(call);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Cache invalid, so update it and reset suggestions
|
|
|
|
options.showSuggestions("");
|
|
|
|
|
|
|
|
scp.request = call;
|
|
|
|
scp.data = [];
|
|
|
|
$.ajax({
|
|
|
|
url: 'lookup/scp',
|
|
|
|
method: 'POST',
|
|
|
|
data: {
|
|
|
|
callsign: call
|
|
|
|
},
|
|
|
|
success: function (result) {
|
|
|
|
const call_now = callFromInput(options.selector);
|
|
|
|
if (checkCacheValid(call_now)) {
|
|
|
|
scp.data = result.split(" ");
|
|
|
|
|
|
|
|
updateSuggestions(call_now);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
return keyup;
|
2024-03-29 15:13:10 +00:00
|
|
|
}
|
2024-04-04 16:38:47 +00:00
|
|
|
|