working on simplefle
这个提交包含在:
父节点
0364df723a
当前提交
a63244a78a
共有 5 个文件被更改,包括 685 次插入 和 21 次删除
|
|
@ -7,11 +7,18 @@ class SimpleFLE extends CI_Controller {
|
|||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
$data['page_title'] = "Simple Fast Log Entry";
|
||||
|
||||
$footerData = [];
|
||||
$footerData['scripts'] = [
|
||||
'assets/js/moment.min.js',
|
||||
'assets/js/tempusdominus-bootstrap-4.min.js',
|
||||
'assets/js/datetime-moment.js',
|
||||
'assets/js/sections/simplefle.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/simplefle.js"))
|
||||
];
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('simplefle/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
|
||||
$this->load->view('interface_assets/footer', $footerData);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -43,4 +43,4 @@ $lang['simplefle_info'] = "What is that?";
|
|||
$lang['simplefle_info_ln1'] = "Simple Fast Log Entry (FLE)";
|
||||
$lang['simplefle_info_ln2'] = "'Fast Log Entry', or simply 'FLE' is a system to log QSOs very quickly and efficiently. Due to its syntax, only a minimum of input is required to log many QSOs with as little effort as possible.";
|
||||
$lang['simplefle_info_ln3'] = "FLE was originally written by DF3CB. He offers a program for Windows on his website. Simple FLE was written by OK2CQR based on DF3CB's FLE and provides a web interface to log QSOs.";
|
||||
$lang['simplefle_info_ln4'] = "Now SimpleFLE is also available in Cloudlog. Information about the syntax and how FLE works can be found <a href='https://df3cb.com/fle/documentation/' target='_blank'>here</a>.";
|
||||
$lang['simplefle_info_ln4'] = "A common use-case is if you have to import your paperlogs from a outdoor session and now SimpleFLE is also available in Cloudlog. Information about the syntax and how FLE works can be found <a href='https://df3cb.com/fle/documentation/' target='_blank'>here</a>.";
|
||||
|
|
@ -2405,23 +2405,6 @@ function viewEqsl(picture, callsign) {
|
|||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$('#simpleFleInfo').click(function (event) {
|
||||
var awardInfoLines = [
|
||||
lang_simplefle_info_ln2,
|
||||
lang_simplefle_info_ln3,
|
||||
lang_simplefle_info_ln4
|
||||
];
|
||||
var simpleFleInfo = "";
|
||||
awardInfoLines.forEach(function (line) {
|
||||
simpleFleInfo += line + "<br><br>";
|
||||
});
|
||||
BootstrapDialog.alert({
|
||||
title: "<h4>"+lang_simplefle_info_ln1+"</h4>",
|
||||
message: simpleFleInfo,
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
/*
|
||||
* Used to fetch QSOs from the logbook in the awards
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@
|
|||
<button class="btn btn-primary js-reload-qso">Reload QSO list</button>
|
||||
</div>
|
||||
<div class="col-3 col-sm-3">
|
||||
<button class="btn btn-warning js-download-adif">Download ADIF</button>
|
||||
<button class="btn btn-warning js-download-adif">Save in Cloudlog</button>
|
||||
</div>
|
||||
<div class="col-3 col-sm-3">
|
||||
<button class="btn btn-danger js-empty-qso">Clear logging session</button>
|
||||
|
|
|
|||
674
assets/js/sections/simplefle.js
普通文件
674
assets/js/sections/simplefle.js
普通文件
|
|
@ -0,0 +1,674 @@
|
|||
var Bands = {
|
||||
b160M: {
|
||||
cw: "1.825",
|
||||
ssb: "1.890",
|
||||
digi: "1.840",
|
||||
},
|
||||
b80M: {
|
||||
cw: "3.532",
|
||||
ssb: "3.770",
|
||||
digi: "3.573",
|
||||
},
|
||||
b60M: {
|
||||
cw: "5.353",
|
||||
ssb: "5.450",
|
||||
digi: "5.357",
|
||||
},
|
||||
b40M: {
|
||||
cw: "7.032",
|
||||
ssb: "7.100",
|
||||
digi: "7.074",
|
||||
},
|
||||
b30M: {
|
||||
cw: "10.110",
|
||||
ssb: "10.120",
|
||||
digi: "10.136",
|
||||
},
|
||||
b20M: {
|
||||
cw: "14.032",
|
||||
ssb: "14.200",
|
||||
digi: "14.074",
|
||||
},
|
||||
b17M: {
|
||||
cw: "18.070",
|
||||
ssb: "18.120",
|
||||
digi: "18.104",
|
||||
},
|
||||
b15M: {
|
||||
cw: "21.032",
|
||||
ssb: "21.200",
|
||||
digi: "21.074",
|
||||
},
|
||||
b12M: {
|
||||
cw: "24.895",
|
||||
ssb: "24.910",
|
||||
digi: "24.915",
|
||||
},
|
||||
b10M: {
|
||||
cw: "20.032",
|
||||
ssb: "28.200",
|
||||
digi: "28.074",
|
||||
},
|
||||
b6M: {
|
||||
cw: "50.090",
|
||||
ssb: "50.350",
|
||||
digi: "50.313",
|
||||
},
|
||||
b2M: {
|
||||
cw: "144.090",
|
||||
ssb: "144.250",
|
||||
digi: "144.174",
|
||||
},
|
||||
b70CM: {
|
||||
cw: "432.050",
|
||||
ssb: "432.300",
|
||||
digi: "432.065",
|
||||
},
|
||||
};
|
||||
|
||||
var $textarea = $("textarea");
|
||||
var qsodate = "";
|
||||
var qsotime = "";
|
||||
var band = "";
|
||||
var mode = "";
|
||||
var freq = "";
|
||||
var callsign = "";
|
||||
var errors = [];
|
||||
var qsoList = [];
|
||||
|
||||
$('#simpleFleInfo').click(function (event) {
|
||||
var awardInfoLines = [
|
||||
lang_simplefle_info_ln2,
|
||||
lang_simplefle_info_ln3,
|
||||
lang_simplefle_info_ln4
|
||||
];
|
||||
var simpleFleInfo = "";
|
||||
awardInfoLines.forEach(function (line) {
|
||||
simpleFleInfo += line + "<br><br>";
|
||||
});
|
||||
BootstrapDialog.alert({
|
||||
title: "<h4>"+lang_simplefle_info_ln1+"</h4>",
|
||||
message: simpleFleInfo,
|
||||
});
|
||||
});
|
||||
|
||||
function handleInput() {
|
||||
var qsodate = "";
|
||||
if ($("#qsodate").val()) {
|
||||
qsodate = new Date($("#qsodate").val()).toISOString().split("T")[0];
|
||||
} else {
|
||||
qsodate = new Date().toISOString().split("T")[0];
|
||||
}
|
||||
|
||||
var operator = $("#operator").val();
|
||||
operator = operator.toUpperCase();
|
||||
var ownCallsign = $("#my-call").val().toUpperCase();
|
||||
ownCallsign = ownCallsign.toUpperCase();
|
||||
|
||||
var extraQsoDate = qsodate;
|
||||
var band = "";
|
||||
var mode = "";
|
||||
var freq = "";
|
||||
var callsign = "";
|
||||
var sotaWff = "";
|
||||
qsoList = [];
|
||||
$("#qsoTable tbody").empty();
|
||||
|
||||
var text = $textarea.val().trim();
|
||||
lines = text.split("\n");
|
||||
lines.forEach((row) => {
|
||||
var rst_s = null;
|
||||
var rst_r = null;
|
||||
items = row.split(" ");
|
||||
var itemNumber = 0;
|
||||
items.forEach((item) => {
|
||||
if (item === "") {
|
||||
return;
|
||||
}
|
||||
if (
|
||||
item.match(/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/)
|
||||
) {
|
||||
extraQsoDate = item;
|
||||
} else if (
|
||||
item.match(/^[0-2][0-9][0-5][0-9]$/) &&
|
||||
itemNumber === 0
|
||||
) {
|
||||
qsotime = item;
|
||||
} else if (item.match(/^CW$|^SSB$|^FM$|^AM$|^PSK$|^FT8$/i)) {
|
||||
mode = item.toUpperCase();
|
||||
} else if (
|
||||
item.match(/^[1-9]?\d\d[Mm]$/) ||
|
||||
item.toUpperCase() === "70CM"
|
||||
) {
|
||||
band = item.toUpperCase();
|
||||
freq = 0;
|
||||
} else if (item.match(/^\d+\.\d+$/)) {
|
||||
freq = item;
|
||||
band = "";
|
||||
} else if (
|
||||
item.match(/^[1-9]{1}$/) &&
|
||||
qsotime &&
|
||||
itemNumber === 0
|
||||
) {
|
||||
qsotime = qsotime.replace(/.$/, item);
|
||||
} else if (
|
||||
item.match(/^[0-5][0-9]{1}$/) &&
|
||||
qsotime &&
|
||||
itemNumber === 0
|
||||
) {
|
||||
qsotime = qsotime.slice(0, -2) + item;
|
||||
} else if (
|
||||
item.match(
|
||||
/^([A-Z]*[F]{2}-\d{4})|([A-Z]*[A-Z]\/[A-Z]{2}-\d{3})$/i
|
||||
)
|
||||
) {
|
||||
sotaWff = item.toUpperCase();
|
||||
} else if (
|
||||
item.match(
|
||||
/([a-zA-Z0-9]{1,3}[0123456789][a-zA-Z0-9]{0,3}[a-zA-Z])|.*\/([a-zA-Z0-9]{1,3}[0123456789][a-zA-Z0-9]{0,3}[a-zA-Z])|([a-zA-Z0-9]{1,3}[0123456789][a-zA-Z0-9]{0,3}[a-zA-Z])\/.*/
|
||||
)
|
||||
) {
|
||||
callsign = item.toUpperCase();
|
||||
} else if (itemNumber > 0 && item.match(/^\d{1,2}$/)) {
|
||||
if (rst_s === null) {
|
||||
rst_s = item;
|
||||
} else {
|
||||
rst_r = item;
|
||||
}
|
||||
}
|
||||
|
||||
itemNumber = itemNumber + 1;
|
||||
});
|
||||
|
||||
errors = [];
|
||||
checkMainFieldsErrors();
|
||||
|
||||
if (callsign) {
|
||||
if (freq === 0) {
|
||||
freq = getFreqFromBand(band, mode);
|
||||
} else if (band === "") {
|
||||
band = getBandFromFreq(freq);
|
||||
}
|
||||
|
||||
if (band === "") {
|
||||
addErrorMessage("Band is missing!");
|
||||
}
|
||||
if (mode === "") {
|
||||
addErrorMessage("Mode is missing");
|
||||
}
|
||||
if (qsotime === "") {
|
||||
addErrorMessage("Time is not set!");
|
||||
}
|
||||
|
||||
if (isValidDate(extraQsoDate) === false) {
|
||||
addErrorMessage("Invalid date " + extraQsoDate);
|
||||
extraQsoDate = qsodate;
|
||||
}
|
||||
|
||||
rst_s = getReportByMode(rst_s, mode);
|
||||
rst_r = getReportByMode(rst_r, mode);
|
||||
|
||||
qsoList.push([
|
||||
extraQsoDate,
|
||||
qsotime,
|
||||
callsign,
|
||||
freq,
|
||||
band,
|
||||
mode,
|
||||
rst_s,
|
||||
rst_r,
|
||||
sotaWff,
|
||||
]);
|
||||
|
||||
const tableRow = $(`<tr>
|
||||
<td>${extraQsoDate}</td>
|
||||
<td>${qsotime}</td>
|
||||
<td>${callsign}</td>
|
||||
<td><span data-toggle="tooltip" data-placement="left" title="${freq}">${band}</span></td>
|
||||
<td>${mode}</td>
|
||||
<td>${rst_s}</td>
|
||||
<td>${rst_r}</td>
|
||||
<td>${operator}</td>
|
||||
<td>${sotaWff}</td>
|
||||
</tr>`);
|
||||
|
||||
$("#qsoTable > tbody:last-child").append(tableRow);
|
||||
|
||||
localStorage.setItem("tabledata", $("#qsoTable").html());
|
||||
localStorage.setItem("my-call", $("#my-call").val());
|
||||
localStorage.setItem("operator", $("#operator").val());
|
||||
localStorage.setItem("my-sota-wwff", $("#my-sota-wwff").val());
|
||||
localStorage.setItem("qso-area", $(".qso-area").val());
|
||||
localStorage.setItem("qsodate", $("#qsodate").val());
|
||||
localStorage.setItem("my-power", $("#my-power").val());
|
||||
localStorage.setItem("my-grid", $("#my-grid").val());
|
||||
|
||||
callsign = "";
|
||||
sotaWff = "";
|
||||
}
|
||||
|
||||
showErrors();
|
||||
}); //lines.forEach((row)
|
||||
|
||||
// Scroll to the bototm of #qsoTableBody (scroll by the value of its scrollheight property)
|
||||
$("#qsoTableBody").scrollTop($("#qsoTableBody").get(0).scrollHeight);
|
||||
|
||||
var qsoCount = qsoList.length;
|
||||
if (qsoCount) {
|
||||
$(".js-qso-count").html("<strong>Total:</strong> " + qsoCount + " QSO");
|
||||
} else {
|
||||
$(".js-qso-count").html("");
|
||||
}
|
||||
|
||||
if (errors) {
|
||||
$(".js-status").html(errors.join("<br>"));
|
||||
}
|
||||
}
|
||||
|
||||
function checkMainFieldsErrors() {
|
||||
if ($("#my-call").val() === "") {
|
||||
addErrorMessage("'My call' field is empty!");
|
||||
}
|
||||
|
||||
if ($("#operator").val() === "") {
|
||||
addErrorMessage("'Operator' field is empty!");
|
||||
}
|
||||
}
|
||||
|
||||
$textarea.keydown(function (event) {
|
||||
if (event.which == 13) {
|
||||
handleInput();
|
||||
}
|
||||
});
|
||||
|
||||
$textarea.focus(function () {
|
||||
errors = [];
|
||||
checkMainFieldsErrors();
|
||||
showErrors();
|
||||
});
|
||||
|
||||
function addErrorMessage(errorMessage) {
|
||||
errorMessage = '<span class="text-danger">' + errorMessage + "</span>";
|
||||
if (errors.includes(errorMessage) == false) {
|
||||
errors.push(errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
function isValidDate(d) {
|
||||
return new Date(d) !== "Invalid Date" && !isNaN(new Date(d));
|
||||
}
|
||||
|
||||
$(".js-reload-qso").click(function () {
|
||||
handleInput();
|
||||
});
|
||||
|
||||
$(".js-empty-qso").click(function () {
|
||||
var result = confirm("Do you really want to reset everything?");
|
||||
if (result == true) {
|
||||
localStorage.removeItem("tabledata");
|
||||
localStorage.removeItem("my-call");
|
||||
localStorage.removeItem("operator");
|
||||
localStorage.removeItem("my-sota-wwff");
|
||||
localStorage.removeItem("qso-area");
|
||||
localStorage.removeItem("qsodate");
|
||||
localStorage.removeItem("my-grid");
|
||||
$("#qsodate").val("");
|
||||
$("#qsoTable tbody").empty();
|
||||
$("#my-sota-wwff").val("");
|
||||
$("#my-call").val("");
|
||||
$("#operator").val("");
|
||||
$(".qso-area").val("");
|
||||
$("#my-grid").val("");
|
||||
qsoList = [];
|
||||
$(".js-qso-count").html("");
|
||||
}
|
||||
});
|
||||
|
||||
function showErrors() {
|
||||
if (errors) {
|
||||
$(".js-status").html(errors.join("<br>"));
|
||||
}
|
||||
}
|
||||
|
||||
$(".js-download-qso").click(function () {
|
||||
handleInput();
|
||||
});
|
||||
|
||||
$(".js-load-sample-log").click(function () {
|
||||
if ($textarea.val()) {
|
||||
if (
|
||||
false ===
|
||||
confirm(
|
||||
"Do you really want to replace the entered data with the sample log?"
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const logData = `
|
||||
80m cw
|
||||
1212 ok1uu okff-1234
|
||||
3 ok1rr
|
||||
4 ok1tn
|
||||
20 dl6kva 7 8
|
||||
5 dl5cw
|
||||
ssb
|
||||
32 ok7wa ol/zl-071 5 8
|
||||
33 ok1xxx 4 3
|
||||
`;
|
||||
|
||||
$textarea.val(logData.trim());
|
||||
if ($("#my-call").val() === "") {
|
||||
$("#my-call").val("OK2CQR/P");
|
||||
}
|
||||
if ($("#operator").val() === "") {
|
||||
$("#operator").val("OK2CQR");
|
||||
}
|
||||
if ($("#my-sota-wwff").val() === "") {
|
||||
$("#my-sota-wwff").val("OKFF-2068");
|
||||
}
|
||||
|
||||
handleInput();
|
||||
});
|
||||
|
||||
function getBandFromFreq(freq) {
|
||||
if (freq > 1.7 && freq < 2) {
|
||||
return "160M";
|
||||
} else if (freq > 3.4 && freq < 4) {
|
||||
return "80M";
|
||||
} else if (freq > 6.9 && freq < 7.3) {
|
||||
return "40M";
|
||||
} else if (freq > 5 && freq < 6) {
|
||||
return "60M";
|
||||
} else if (freq > 10 && freq < 11) {
|
||||
return "30M";
|
||||
} else if (freq > 13 && freq < 15) {
|
||||
return "20M";
|
||||
} else if (freq > 18 && freq < 19) {
|
||||
return "17M";
|
||||
} else if (freq > 20 && freq < 22) {
|
||||
return "15M";
|
||||
} else if (freq > 24 && freq < 25) {
|
||||
return "12M";
|
||||
} else if (freq > 27 && freq < 30) {
|
||||
return "10M";
|
||||
} else if (freq > 50 && freq < 55) {
|
||||
return "6M";
|
||||
} else if (freq > 144 && freq < 149) {
|
||||
return "2M";
|
||||
} else if (freq > 430 && freq < 460) {
|
||||
return "70CM";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function getFreqFromBand(band, mode) {
|
||||
const settingsMode = getSettingsMode(mode.toUpperCase());
|
||||
const id = "#" + band.toUpperCase() + settingsMode;
|
||||
if ($(id).length) {
|
||||
return $(id).val();
|
||||
}
|
||||
}
|
||||
|
||||
function getSettingsMode(mode) {
|
||||
if (mode === "AM" || mode === "FM" || mode === "SSB") {
|
||||
return "SSB";
|
||||
}
|
||||
|
||||
if (mode === "CW") {
|
||||
return "CW";
|
||||
}
|
||||
|
||||
return "DIGI";
|
||||
}
|
||||
|
||||
var htmlSettings = "";
|
||||
for (const [key, value] of Object.entries(Bands)) {
|
||||
htmlSettings = `
|
||||
${htmlSettings}
|
||||
<div class="row">
|
||||
<div class="col-3 mt-4">
|
||||
<strong>${key.slice(1)}</strong>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="${key.slice(1)}CW">CW</label>
|
||||
<input type="text" class="form-control text-uppercase" id="${key.slice(
|
||||
1
|
||||
)}CW" value="${value.cw}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="${key.slice(1)}SSB">SSB</label>
|
||||
<input type="text" class="form-control text-uppercase" id="${key.slice(
|
||||
1
|
||||
)}SSB" value="${value.ssb}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="${key.slice(1)}DIGI">DIGI</label>
|
||||
<input type="text" class="form-control text-uppercase" id="${key.slice(
|
||||
1
|
||||
)}DIGI" value="${value.digi}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
$(".js-band-settings").html(htmlSettings);
|
||||
|
||||
$(".js-download-adif").click(function () {
|
||||
var operator = $("#operator").val();
|
||||
operator = operator.toUpperCase();
|
||||
var ownCallsign = $("#my-call").val().toUpperCase();
|
||||
ownCallsign = ownCallsign.toUpperCase();
|
||||
var mySotaWwff = $("#my-sota-wwff").val().toUpperCase();
|
||||
|
||||
var myPower = $("#my-power").val();
|
||||
var myGrid = $("#my-grid").val().toUpperCase();
|
||||
|
||||
const adifHeader = `
|
||||
ADIF export from Simple fast log entry by Petr, OK2CQR
|
||||
|
||||
Internet: https://sfle.ok2cqr.com
|
||||
|
||||
<ADIF_VER:5>2.2.1
|
||||
<PROGRAMID:4>SFLE
|
||||
<PROGRAMVERSION:5>0.0.1
|
||||
<EOH>
|
||||
|
||||
`;
|
||||
|
||||
if (false === isBandModeEntered()) {
|
||||
alert("Some QSO do not have band and/or mode defined!");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
var adif = adifHeader;
|
||||
qsoList.forEach((item) => {
|
||||
const qsodate = item[0].replace("-", "").replace("-", "");
|
||||
qso = getAdifTag("QSO_DATE", qsodate);
|
||||
qso = qso + getAdifTag("TIME_ON", item[1].replace(":", ""));
|
||||
qso = qso + getAdifTag("CALL", item[2]);
|
||||
qso = qso + getAdifTag("FREQ", item[3]);
|
||||
qso = qso + getAdifTag("BAND", item[4]);
|
||||
qso = qso + getAdifTag("MODE", item[5]);
|
||||
|
||||
var rst = item[6];
|
||||
settingsMode = getSettingsMode(rst);
|
||||
if (settingsMode === "SSB") {
|
||||
rst = "59";
|
||||
}
|
||||
qso = qso + getAdifTag("RST_SENT", rst);
|
||||
|
||||
var rst = item[7];
|
||||
settingsMode = getSettingsMode(rst);
|
||||
if (settingsMode === "SSB") {
|
||||
rst = "59";
|
||||
}
|
||||
qso = qso + getAdifTag("RST_RCVD", rst);
|
||||
|
||||
qso = qso + getAdifTag("OPERATOR", operator);
|
||||
qso = qso + getAdifTag("STATION_CALLSIGN", ownCallsign);
|
||||
|
||||
if (isSOTA(mySotaWwff)) {
|
||||
qso = qso + getAdifTag("MY_SOTA_REF", mySotaWwff);
|
||||
} else if (isWWFF(mySotaWwff)) {
|
||||
qso = qso + getAdifTag("MY_SIG", "WWFF");
|
||||
qso = qso + getAdifTag("MY_SIG_INFO", mySotaWwff);
|
||||
}
|
||||
|
||||
if (isSOTA(item[8])) {
|
||||
qso = qso + getAdifTag("SOTA_REF", item[8]);
|
||||
} else if (isWWFF(item[8])) {
|
||||
qso = qso + getAdifTag("SIG", "WWFF");
|
||||
qso = qso + getAdifTag("SIG_INFO", item[8]);
|
||||
}
|
||||
|
||||
if (myPower) {
|
||||
qso = qso + getAdifTag("TX_PWR", myPower);
|
||||
}
|
||||
|
||||
if (myGrid) {
|
||||
qso = qso + getAdifTag("MY_GRIDSQUARE", myGrid);
|
||||
}
|
||||
|
||||
qso = qso + "<EOR>";
|
||||
|
||||
adif = adif + qso + "\n";
|
||||
});
|
||||
|
||||
qsodate = qsoList[0][0].replace("-", "").replace("-", "");
|
||||
const filename =
|
||||
operator.replace("/", "-") +
|
||||
"_" +
|
||||
mySotaWwff.replace("/", "-") +
|
||||
"_" +
|
||||
qsodate +
|
||||
".adi";
|
||||
download(filename, adif);
|
||||
});
|
||||
|
||||
function isBandModeEntered() {
|
||||
let isBandModeOK = true;
|
||||
qsoList.forEach((item) => {
|
||||
if (item[4] === "" || item[5] === "") {
|
||||
isBandModeOK = false;
|
||||
}
|
||||
});
|
||||
|
||||
return isBandModeOK;
|
||||
}
|
||||
|
||||
function getAdifTag(tagName, value) {
|
||||
return "<" + tagName + ":" + value.length + ">" + value + " ";
|
||||
}
|
||||
|
||||
function getReportByMode(rst, mode) {
|
||||
settingsMode = getSettingsMode(mode);
|
||||
|
||||
if (rst === null) {
|
||||
if (settingsMode === "SSB") {
|
||||
return "59";
|
||||
}
|
||||
|
||||
return "599";
|
||||
}
|
||||
|
||||
if (settingsMode === "SSB") {
|
||||
if (rst.length === 1) {
|
||||
return "5" + rst;
|
||||
}
|
||||
|
||||
return rst;
|
||||
}
|
||||
|
||||
if (rst.length === 1) {
|
||||
return "5" + rst + "9";
|
||||
} else if (rst.length === 2) {
|
||||
return rst + "9";
|
||||
}
|
||||
|
||||
return rst;
|
||||
}
|
||||
|
||||
function isSOTA(value) {
|
||||
if (value.match(/^[A-Z]*[A-Z]\/[A-Z]{2}-\d{3}$/)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function isWWFF(value) {
|
||||
if (value.match(/^[A-Z]*[F]{2}-\d{4}$/)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function download(filename, text) {
|
||||
var element = document.createElement("a");
|
||||
element.setAttribute(
|
||||
"href",
|
||||
"data:text/plain;charset=utf-8," + encodeURIComponent(text)
|
||||
);
|
||||
element.setAttribute("download", filename);
|
||||
|
||||
element.style.display = "none";
|
||||
document.body.appendChild(element);
|
||||
|
||||
element.click();
|
||||
|
||||
document.body.removeChild(element);
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
var tabledata = localStorage.getItem("tabledata");
|
||||
var mycall = localStorage.getItem("my-call");
|
||||
var operator = localStorage.getItem("operator");
|
||||
var mysotawwff = localStorage.getItem("my-sota-wwff");
|
||||
var qsoarea = localStorage.getItem("qso-area");
|
||||
var qsodate = localStorage.getItem("qsodate");
|
||||
var myPower = localStorage.getItem("my-power");
|
||||
var myGrid = localStorage.getItem("my-grid");
|
||||
|
||||
if (mycall != null) {
|
||||
$("#my-call").val(mycall);
|
||||
}
|
||||
|
||||
if (operator != null) {
|
||||
$("#operator").val(operator);
|
||||
}
|
||||
|
||||
if (mysotawwff != null) {
|
||||
$("#my-sota-wwff").val(mysotawwff);
|
||||
}
|
||||
|
||||
if (qsoarea != null) {
|
||||
$(".qso-area").val(qsoarea);
|
||||
}
|
||||
|
||||
if (qsodate != null) {
|
||||
$("#qsodate").val(qsodate);
|
||||
}
|
||||
|
||||
if (myPower != null) {
|
||||
$("#my-power").val(myPower);
|
||||
}
|
||||
|
||||
if (myGrid != null) {
|
||||
$("#my-grid").val(myGrid);
|
||||
}
|
||||
|
||||
if (tabledata != null) {
|
||||
$("#qsoTable").html(tabledata);
|
||||
handleInput();
|
||||
}
|
||||
});
|
||||
正在加载…
在新工单中引用