commit 10/09/2025

This commit is contained in:
2025-09-10 16:08:24 +07:00
parent f48ead1b44
commit 34fc71cfbc
4 changed files with 159 additions and 148 deletions

View File

@@ -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 ""
}
});