mirror of
https://github.com/wavelog/wavelog
synced 2026-08-13 18:41:16 -04:00
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
$(document).ready(function () {
|
|
$("#operator_callsign").on("keydown", function (event) {
|
|
if (event.which == 13) {
|
|
saveOperator();
|
|
}
|
|
});
|
|
});
|
|
|
|
function displayOperatorDialog() {
|
|
$.ajax({
|
|
url: base_url + "index.php/Operator/displayOperatorDialog",
|
|
type: "GET",
|
|
dataType: "html",
|
|
success: function (data) {
|
|
$("#operatorModal").remove();
|
|
$("body").append(data);
|
|
|
|
var operatorModal = new bootstrap.Modal($("#operatorModal"));
|
|
operatorModal.show();
|
|
},
|
|
error: function () {
|
|
console.log("Error loading the PHP view for the operator call dialog.");
|
|
},
|
|
});
|
|
}
|
|
|
|
function closeOperatorDialog() {
|
|
var operatorModal = bootstrap.Modal.getInstance($("#operatorModal"));
|
|
if (operatorModal) {
|
|
operatorModal.hide();
|
|
$("#operatorModal").remove();
|
|
}
|
|
}
|
|
|
|
// Kept in sync with the server-side check in Operator::isValidCallsign().
|
|
function isValidOperatorCallsign(callsign) {
|
|
if (!callsign || callsign.length < 3) return false;
|
|
if (!/^[A-Z0-9]+$/.test(callsign)) return false; // letters and digits only
|
|
if (!/[A-Z]/.test(callsign)) return false; // at least one letter
|
|
if (!/[0-9]/.test(callsign)) return false; // at least one digit
|
|
// A bare 3-char string ending in a digit is a prefix, not a call (e.g. "ZL3")
|
|
if (callsign.length === 3 && !/[A-Z]$/.test(callsign)) return false;
|
|
return true;
|
|
}
|
|
|
|
function saveOperator() {
|
|
var operatorInput = $("#operator_callsign");
|
|
var operatorCallsign = operatorInput.val().trim().toUpperCase();
|
|
|
|
if (operatorCallsign != sc_account_call && isValidOperatorCallsign(operatorCallsign)) {
|
|
$.ajax({
|
|
url: base_url + "index.php/operator/saveOperator",
|
|
method: "POST",
|
|
type: "post",
|
|
data: {
|
|
operator_callsign: operatorCallsign,
|
|
},
|
|
// Reload only after the session write succeeded — reloading earlier races
|
|
// the POST and can render the previous operator.
|
|
success: function () {
|
|
closeOperatorDialog();
|
|
window.location.reload();
|
|
},
|
|
error: function () {
|
|
showToast("error", lang_operator_modal_save_error, 'bg-danger text-white', 5000);
|
|
}
|
|
});
|
|
} else {
|
|
operatorInput.addClass("is-invalid");
|
|
}
|
|
}
|