Fixes matching to 'anywhere', isolates and restructures code

- server side matches anywhere, thus replace `startsWith` by `includes`,
- callsigns *should* be with stroked-0, improving consistency here,
- code restructuring (reduce nesting a lot),
- isolating code, same codebase for qso.js and contesting.js, could
  be put in a 'lib'-like file
pull/3025/head
DJ3CE 2024-04-04 18:38:47 +02:00 zatwierdzone przez DJ3CE
rodzic aaf7f994aa
commit 181dcbe53c
3 zmienionych plików z 136 dodań i 88 usunięć

Wyświetl plik

@ -55,7 +55,7 @@ class Lookup extends CI_Controller {
public function scp() { public function scp() {
if($_POST['callsign']) { if($_POST['callsign']) {
$uppercase_callsign = strtoupper($_POST['callsign']); $uppercase_callsign = str_replace('Ø', '0', strtoupper($_POST['callsign']));
} }
// SCP results from logbook // SCP results from logbook

Wyświetl plik

@ -8,11 +8,6 @@ $(document).ready(async function () {
setRst($("#mode").val()); setRst($("#mode").val());
}); });
var scp_data = {
request: "",
data: [],
};
// Resets the logging form and deletes session from database // Resets the logging form and deletes session from database
function reset_contest_session() { function reset_contest_session() {
$('#name').val(""); $('#name').val("");
@ -212,48 +207,23 @@ $('#start_date').change(function () {
}); });
// On Key up check and suggest callsigns // On Key up check and suggest callsigns
$("#callsign").keyup(function () { $("#callsign").keyup(scp_keyup({
let call = $(this).val().toUpperCase(); selector: $("#callsign"),
if (call.length >= 3) { showSuggestions: function (call, text) {
$('.callsign-suggestions').text(text);
highlight(call);
}
}));
if ( scp_data.request == "" || ! call.startsWith(scp_data.request) ) { $("#callsign").keyup(function() {
scp_data.request = call; const call = $(this).val().toUpperCase();
scp_data.data = []; if (call.length >= 3) {
$.ajax({ var qTable = $('.qsotable').DataTable();
url: 'lookup/scp', qTable.search(call).draw();
method: 'POST', }
data: {
callsign: call
},
success: function (result) {
var call_now = $("#callsign").val().toUpperCase(); // Might have changed while running the query...
if (call_now.startsWith(call)) {
scp_data.data = result.split(" ");
call_now = call_now.replace('0','Ø');
$('.callsign-suggestions').text(filterCallsignList(call_now, scp_data.data));
highlight(call_now);
}
}
});
} else {
// Filter the already obtained list:
call = call.replace('0','Ø');
$('.callsign-suggestions').text(filterCallsignList(call, scp_data.data));
highlight(call);
}
// moved to blur
// checkIfWorkedBefore();
var qTable = $('.qsotable').DataTable();
qTable.search(call).draw();
}
else {
$('.callsign-suggestions').text("");
}
}); });
function checkIfWorkedBefore() { function checkIfWorkedBefore() {
var call = $("#callsign").val(); var call = $("#callsign").val();
if (call.length >= 3) { if (call.length >= 3) {
@ -689,7 +659,61 @@ function getUTCDateStamp(el) {
$(el).attr('value', ("0" + now.getUTCDate()).slice(-2) + '-' + ("0" + (now.getUTCMonth() + 1)).slice(-2) + '-' + now.getUTCFullYear()); $(el).attr('value', ("0" + now.getUTCDate()).slice(-2) + '-' + ("0" + (now.getUTCMonth() + 1)).slice(-2) + '-' + now.getUTCFullYear());
} }
function filterCallsignList(call, list) { function scp_keyup(options) {
let re = "(^|\/)" + call; // options must have two keys:
return list?.filter((el) => (el.search(re) !== -1)).join(' ') || ''; // * 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;
} }

Wyświetl plik

@ -1,9 +1,4 @@
var lastCallsignUpdated="" var lastCallsignUpdated=""
var scp_data = {
request: "",
status: -1 , // -1 - never req, 0 - req in progress, 1 - request done
data: [],
};
$( document ).ready(function() { $( document ).ready(function() {
setTimeout(function() { setTimeout(function() {
@ -1022,38 +1017,13 @@ $("#callsign").on("keypress", function(e) {
}); });
// On Key up check and suggest callsigns // On Key up check and suggest callsigns
$("#callsign").keyup(function() { $("#callsign").keyup( scp_keyup({
if ($(this).val().length >= 3) { selector: $(this),
let call = $(this).val().toUpperCase(); showSuggestions: function (call, text) {
$('.callsign-suggestions').text(text);
if ( scp_data.request == "" || ! call.startsWith(scp_data.request) ) { $('.callsign-suggest').show();
scp_data.request = call; }
scp_data.data = []; }));
$.ajax({
url: 'lookup/scp',
method: 'POST',
data: {
callsign: call
},
success: function(result) {
var call_now = $("#callsign").val().toUpperCase();
if (call_now.startsWith(call)) {
scp_data.data = result.split(" ");
call_now = call_now.replace('0','Ø');
$('.callsign-suggestions').text(filterCallsignList(call_now, scp_data.data));
$('.callsign-suggest').show();
}
}
});
} else {
call = call.replace('0','Ø');
$('.callsign-suggestions').text(filterCallsignList(call, scp_data.data));
$('.callsign-suggest').show();
}
}
});
//Reset QSO form Fields function //Reset QSO form Fields function
function resetDefaultQSOFields() { function resetDefaultQSOFields() {
@ -1116,7 +1086,61 @@ function testTimeOffConsistency() {
return true; return true;
} }
function filterCallsignList(call, list) { function scp_keyup(options) {
let re = "(^|\/)" + call; // options must have two keys:
return list?.filter((el) => (el.search(re) !== -1)).join(' ') || ''; // * 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;
} }