commit 10/09/2025
This commit is contained in:
@@ -323,9 +323,7 @@ let ws = null;
|
||||
function sendCommand(command, data) {
|
||||
if (ws.readyState === WebSocket.OPEN) {
|
||||
ws.send(JSON.stringify({ command, data }));
|
||||
} else {
|
||||
console.error('WebSocket is not open');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -561,13 +559,19 @@ function DoClear(APIURL, whattoclear, cbOK, cbError) {
|
||||
* Export mechanism to XLSX file
|
||||
* @param {String} APIURL API URL endpoint
|
||||
* @param {String} filename target filename
|
||||
* @param {Object} queryParams additional query parameters as object
|
||||
*/
|
||||
function DoExport(APIURL, filename) {
|
||||
function DoExport(APIURL, filename, queryParams = {}) {
|
||||
// send GET request to APIURL + "ExportXLSX"
|
||||
// reply Content-Type is application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
// reply Content-Disposition: attachment; filename=filename
|
||||
// Use fetch to download the XLSX file as a blob and trigger download
|
||||
fetch("/api/" + APIURL + "ExportXLSX", {
|
||||
let url = "/api/" + APIURL + "ExportXLSX";
|
||||
if (queryParams && Object.keys(queryParams).length > 0) {
|
||||
url += "?" + new URLSearchParams(queryParams).toString();
|
||||
}
|
||||
|
||||
fetch(url, {
|
||||
method: "GET",
|
||||
headers: {}
|
||||
})
|
||||
@@ -809,7 +813,7 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
$btnExport.click(() => {
|
||||
DoExport(APIURL, "soundbank.xlsx");
|
||||
DoExport(APIURL, "soundbank.xlsx",{});
|
||||
});
|
||||
$btnImport.click(() => {
|
||||
DoImport(APIURL, (okdata) => {
|
||||
@@ -917,7 +921,7 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
$btnExport.click(() => {
|
||||
DoExport(APIURL, "messagebank.xlsx");
|
||||
DoExport(APIURL, "messagebank.xlsx",{});
|
||||
});
|
||||
$btnImport.click(() => {
|
||||
DoImport(APIURL, (okdata) => {
|
||||
@@ -949,6 +953,7 @@ $(document).ready(function () {
|
||||
$btnRemove.prop('disabled', true);
|
||||
$btnEdit.prop('disabled', true);
|
||||
let APIURL = "LanguageLink/";
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -968,16 +973,24 @@ $(document).ready(function () {
|
||||
// show modal with id 'languagemodal'
|
||||
let $modal = $('#languagemodal');
|
||||
$modal.modal('show');
|
||||
let $langtag = $modal.find('#languagelinktag');
|
||||
let $cbInd = $modal.find('#langId');
|
||||
let $cbLocal = $modal.find('#langLocal');
|
||||
let $cbEn = $modal.find('#langEn');
|
||||
let $cbArb = $modal.find('#langArb');
|
||||
let $cbJap = $modal.find('#langJap');
|
||||
let $cbChi = $modal.find('#langChi');
|
||||
|
||||
// save button click event
|
||||
$modal.off('click.languagelinksave').on('click.languagelinksave', '#languagelinksave', function () {
|
||||
const tag = $('#languagelinktag').val();
|
||||
const tag = $langtag.val();
|
||||
const langs = [];
|
||||
if ($('#langID').is(':checked')) langs.push('INDONESIA');
|
||||
if ($('#langLocal').is(':checked')) langs.push('LOCAL');
|
||||
if ($('#langEN').is(':checked')) langs.push('ENGLISH');
|
||||
if ($('#langARB').is(':checked')) langs.push('ARABIC');
|
||||
if ($('#langJAP').is(':checked')) langs.push('JAPANESE');
|
||||
if ($('#langCHI').is(':checked')) langs.push('CHINESE');
|
||||
if ($cbInd.is(':checked')) langs.push('INDONESIA');
|
||||
if ($cbLocal.is(':checked')) langs.push('LOCAL');
|
||||
if ($cbEn.is(':checked')) langs.push('ENGLISH');
|
||||
if ($cbArb.is(':checked')) langs.push('ARABIC');
|
||||
if ($cbJap.is(':checked')) langs.push('JAPANESE');
|
||||
if ($cbChi.is(':checked')) langs.push('CHINESE');
|
||||
|
||||
if (tag.length === 0) {
|
||||
alert("Tag cannot be empty");
|
||||
@@ -1040,26 +1053,34 @@ $(document).ready(function () {
|
||||
}
|
||||
if (confirm(`Are you sure to edit language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
|
||||
let $modal = $('#languagemodal');
|
||||
$modal.find('#languagelinkindex').val(ll.index);
|
||||
$modal.find('#languagelinktag').val(ll.tag);
|
||||
let langs = ll.language.split(';');
|
||||
$modal.find('#langID').prop('checked', langs.includes('INDONESIA'));
|
||||
$modal.find('#langLocal').prop('checked', langs.includes('LOCAL'));
|
||||
$modal.find('#langEN').prop('checked', langs.includes('ENGLISH'));
|
||||
$modal.find('#langARB').prop('checked', langs.includes('ARABIC'));
|
||||
$modal.find('#langJAP').prop('checked', langs.includes('JAPANESE'));
|
||||
$modal.find('#langCHI').prop('checked', langs.includes('CHINESE'));
|
||||
let $cbInd = $modal.find('#langId');
|
||||
let $cbLocal = $modal.find('#langLocal');
|
||||
let $cbEn = $modal.find('#langEn');
|
||||
let $cbArb = $modal.find('#langArb');
|
||||
let $cbJap = $modal.find('#langJap');
|
||||
let $cbChi = $modal.find('#langChi');
|
||||
let $langtag = $modal.find('#languagelinktag');
|
||||
let $langid = $modal.find('#languagelinkindex');
|
||||
$langid.val(ll.index);
|
||||
$langtag.val(ll.tag);
|
||||
let langs = ll.language.toUpperCase().split(';');
|
||||
$cbInd.prop('checked', langs.includes('INDONESIA'));
|
||||
$cbLocal.prop('checked', langs.includes('LOCAL'));
|
||||
$cbEn.prop('checked', langs.includes('ENGLISH'));
|
||||
$cbArb.prop('checked', langs.includes('ARABIC'));
|
||||
$cbJap.prop('checked', langs.includes('JAPANESE'));
|
||||
$cbChi.prop('checked', langs.includes('CHINESE'));
|
||||
$modal.modal('show');
|
||||
// save button click event
|
||||
$modal.off('click.languagelinksave').on('click.languagelinksave', '#languagelinksave', function () {
|
||||
const tag = $('#languagelinktag').val();
|
||||
const tag = $langtag.val();
|
||||
const langs = [];
|
||||
if ($('#langID').is(':checked')) langs.push('INDONESIA');
|
||||
if ($('#langLocal').is(':checked')) langs.push('LOCAL');
|
||||
if ($('#langEN').is(':checked')) langs.push('ENGLISH');
|
||||
if ($('#langARB').is(':checked')) langs.push('ARABIC');
|
||||
if ($('#langJAP').is(':checked')) langs.push('JAPANESE');
|
||||
if ($('#langCHI').is(':checked')) langs.push('CHINESE');
|
||||
if ($cbInd.is(':checked')) langs.push('INDONESIA');
|
||||
if ($cbLocal.is(':checked')) langs.push('LOCAL');
|
||||
if ($cbEn.is(':checked')) langs.push('ENGLISH');
|
||||
if ($cbArb.is(':checked')) langs.push('ARABIC');
|
||||
if ($cbJap.is(':checked')) langs.push('JAPANESE');
|
||||
if ($cbChi.is(':checked')) langs.push('CHINESE');
|
||||
if (tag.length === 0) {
|
||||
alert("Tag cannot be empty");
|
||||
return;
|
||||
@@ -1096,7 +1117,7 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
$btnExport.click(() => {
|
||||
DoExport(APIURL, "languagebank.xlsx");
|
||||
DoExport(APIURL, "languagebank.xlsx",{});
|
||||
|
||||
});
|
||||
$btnImport.click(() => {
|
||||
@@ -1194,7 +1215,7 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
$btnExport.click(() => {
|
||||
DoExport(APIURL, "schedulebank.xlsx");
|
||||
DoExport(APIURL, "schedulebank.xlsx",{});
|
||||
});
|
||||
$btnImport.click(() => {
|
||||
DoImport(APIURL, (okdata) => {
|
||||
@@ -1216,6 +1237,7 @@ $(document).ready(function () {
|
||||
const $logdate = $('#logdate');
|
||||
const $searchfilter = $('#searchfilter');
|
||||
const $logtable = $('#logtablebody')
|
||||
const $btnExport = $('#btnExport');
|
||||
let selectedlogdate = "";
|
||||
let logfilter = "";
|
||||
let APIURL = "Log/";
|
||||
@@ -1244,6 +1266,9 @@ $(document).ready(function () {
|
||||
logfilter = $(this).val();
|
||||
reloadLogs(APIURL, selectedlogdate, logfilter);
|
||||
});
|
||||
$btnExport.off('click').on('click', function () {
|
||||
DoExport(APIURL, "log.xlsx",{date:selectedlogdate,filter:logfilter});
|
||||
});
|
||||
|
||||
} else {
|
||||
console.error("Error loading log content:", xhr.status, xhr.statusText);
|
||||
@@ -1265,25 +1290,4 @@ $(document).ready(function () {
|
||||
window.location.href = "login.html"
|
||||
})
|
||||
|
||||
|
||||
/**
|
||||
* Create log Request Data
|
||||
* @param {String} logdate in format dd/mm/yyyy
|
||||
* @param {String} logfilter
|
||||
* @returns JSON string of log Request data
|
||||
*/
|
||||
function logRequstData(logdate, logfilter) {
|
||||
if (logdate && logdate.length > 0) {
|
||||
const dateRegex = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/;
|
||||
if (dateRegex.test(logdate)) {
|
||||
// logdate is valid
|
||||
return JSON.stringify({
|
||||
date: logdate,
|
||||
filter: logfilter
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
return ""
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user