commit 26/08/2025
This commit is contained in:
@@ -1,11 +1,67 @@
|
||||
/**
|
||||
* @typedef {Object} SoundBank
|
||||
* @property {number} index
|
||||
* @property {string} description
|
||||
* @property {string} tag
|
||||
* @property {string} category
|
||||
* @property {string} language
|
||||
* @property {string} voiceType
|
||||
* @property {string} path
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} MessageBank
|
||||
* @property {number} index
|
||||
* @property {string} description
|
||||
* @property {string} language
|
||||
* @property {number} aNN_ID
|
||||
* @property {string} voice_Type
|
||||
* @property {string} message_Detail
|
||||
* @property {string} message_TAGS
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} LanguageBank
|
||||
* @property {number} index
|
||||
* @property {string} tag
|
||||
* @property {string} language
|
||||
* @
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ScheduleBank
|
||||
* @property {number} index
|
||||
* @property {string} description
|
||||
* @property {string} day
|
||||
* @property {string} time
|
||||
* @property {string} soundpath
|
||||
* @property {number} repeat
|
||||
* @property {boolean} enable
|
||||
* @property {string} broadcastZones
|
||||
* @property {string} language
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Log
|
||||
* @property {number} index
|
||||
* @property {string} datenya
|
||||
* @property {string} timenya
|
||||
* @property {string} machine
|
||||
* @property {string} description
|
||||
*/
|
||||
|
||||
$(document).ready(function () {
|
||||
document.title = "Automatic Announcement System"
|
||||
$('#onlineindicator').attr('src', '/assets/img/red_circle.png');
|
||||
|
||||
let soundbankdata = [];
|
||||
let selectedsoundrow = null;
|
||||
let messagebankdata = [];
|
||||
let selectedmessagerow = null;
|
||||
let languagebankdata = [];
|
||||
let selectedlanguagerow = null;
|
||||
let schedulebankdata = [];
|
||||
let selectedschedulerow = null;
|
||||
let logdata = [];
|
||||
|
||||
/**
|
||||
@@ -25,14 +81,30 @@ $(document).ready(function () {
|
||||
<td>${item.path}</td>
|
||||
</tr>`;
|
||||
$('#soundbanktablebody').append(row);
|
||||
let $addedrow = $('#soundbanktablebody tr:last');
|
||||
$addedrow.on('click', function () {
|
||||
if (selectedsoundrow) {
|
||||
selectedsoundrow.find('td').css('background-color', '');
|
||||
if (selectedsoundrow.is($(this))) {
|
||||
selectedsoundrow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$(this).find('td').css('background-color', '#ffeeba');
|
||||
selectedsoundrow = $(this);
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
});
|
||||
});
|
||||
$('#tablesize').text("Table Size: " + vv.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill messagebank table body with values
|
||||
* @param {MessageBank[]} vv values to fill
|
||||
*/
|
||||
* Fill messagebank table body with values
|
||||
* @param {MessageBank[]} vv values to fill
|
||||
*/
|
||||
function fill_messagebanktablebody(vv) {
|
||||
$('#messagebanktablebody').empty();
|
||||
vv.forEach(item => {
|
||||
@@ -46,53 +118,110 @@ $(document).ready(function () {
|
||||
<td>${item.message_TAGS}</td>
|
||||
</tr>`;
|
||||
$('#messagebanktablebody').append(row);
|
||||
let $addedrow = $('#messagebanktablebody tr:last');
|
||||
$addedrow.click(function () {
|
||||
if (selectedmessagerow) {
|
||||
selectedmessagerow.find('td').css('background-color', '');
|
||||
if (selectedmessagerow.is($(this))) {
|
||||
selectedmessagerow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$addedrow.find('td').css('background-color', '#ffeeba');
|
||||
selectedmessagerow = $addedrow;
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
});
|
||||
});
|
||||
console.log("loaded " + vv.length + " messagebank items");
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill languagebank table body with values
|
||||
* @param {LanguageBank[]} vv values to fill
|
||||
*/
|
||||
function fill_languagebanktablebody(vv) {
|
||||
$('#languagebanktablebody').empty();
|
||||
vv.forEach(item => {
|
||||
//TODO examine JSON structure
|
||||
const row = `<tr>
|
||||
<td>${item.index}</td>
|
||||
<td>${item.description}</td>
|
||||
<td>${item.tag}</td>
|
||||
<td>${item.language}</td>
|
||||
<td>${item.aNN_ID}</td>
|
||||
<td>${item.voice_Type}</td>
|
||||
<td>${item.message_Detail}</td>
|
||||
<td>${item.message_TAGS}</td>
|
||||
</tr>`;
|
||||
$('#languagebanktablebody').append(row);
|
||||
let $addedrow = $('#languagebanktablebody tr:last');
|
||||
$addedrow.click(function () {
|
||||
if (selectedlanguagerow) {
|
||||
selectedlanguagerow.find('td').css('background-color', '');
|
||||
if (selectedlanguagerow.is($(this))) {
|
||||
selectedlanguagerow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$addedrow.find('td').css('background-color', '#ffeeba');
|
||||
selectedlanguagerow = $addedrow;
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
});
|
||||
});
|
||||
console.log("loaded " + vv.length + " languagebank items");
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill schedulebank table body with values
|
||||
* @param {ScheduleBank[]} vv values to fill
|
||||
*/
|
||||
function fill_schedulebanktablebody(vv) {
|
||||
$('#schedulebanktablebody').empty();
|
||||
//TODO examine JSON structure
|
||||
vv.forEach(item => {
|
||||
const row = `<tr>
|
||||
<td>${item.index}</td>
|
||||
<td>${item.description}</td>
|
||||
<td>${item.day}</td>
|
||||
<td>${item.time}</td>
|
||||
<td>${item.soundpath}</td>
|
||||
<td>${item.repeat}</td>
|
||||
<td>${item.enable}</td>
|
||||
<td>${item.broadcastZones}</td>
|
||||
<td>${item.language}</td>
|
||||
<td>${item.aNN_ID}</td>
|
||||
<td>${item.voice_Type}</td>
|
||||
<td>${item.message_Detail}</td>
|
||||
<td>${item.message_TAGS}</td>
|
||||
</tr>`;
|
||||
$('#schedulebanktablebody').append(row);
|
||||
let $addedrow = $('#schedulebanktablebody tr:last');
|
||||
$addedrow.click(function () {
|
||||
if (selectedschedulerow) {
|
||||
selectedschedulerow.find('td').css('background-color', '');
|
||||
if (selectedschedulerow.is($(this))) {
|
||||
selectedschedulerow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$addedrow.find('td').css('background-color', '#ffeeba');
|
||||
selectedschedulerow = $addedrow;
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
});
|
||||
});
|
||||
console.log("loaded " + vv.length + " schedulebank items");
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill log table body with values
|
||||
* @param {Log[]} vv values to fill
|
||||
*/
|
||||
function fill_logtablebody(vv) {
|
||||
$('#logtablebody').empty();
|
||||
vv.forEach(item => {
|
||||
const row = `<tr>
|
||||
<td>${item.index}</td>
|
||||
<td>${item.date}</td>
|
||||
<td>${item.time}</td>
|
||||
<td>${item.datenya}</td>
|
||||
<td>${item.timenya}</td>
|
||||
<td>${item.machine}</td>
|
||||
<td>${item.description}</td>
|
||||
</tr>`;
|
||||
$('#logtablebody').append(row);
|
||||
@@ -150,7 +279,7 @@ $(document).ready(function () {
|
||||
);
|
||||
fill_soundbanktablebody(filtered);
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
} else {
|
||||
$soundbankfilter.prop('disabled', true);
|
||||
@@ -198,6 +327,30 @@ $(document).ready(function () {
|
||||
console.log("Setting:");
|
||||
console.log(data);
|
||||
break;
|
||||
case "clearSoundBank":
|
||||
soundbankdata = [];
|
||||
selectedsoundrow = null;
|
||||
fill_soundbanktablebody(soundbankdata);
|
||||
alert(`Clear SoundBank Result : ${data}`);
|
||||
break;
|
||||
case "clearMessageBank":
|
||||
messagebankdata = [];
|
||||
selectedmessagerow = null;
|
||||
fill_messagebanktablebody(messagebankdata);
|
||||
alert(`Clear MessageBank Result : ${data}`);
|
||||
break;
|
||||
case "clearLanguageBank":
|
||||
languagebankdata = [];
|
||||
selectedlanguagerow = null;
|
||||
fill_languagebanktablebody(languagebankdata);
|
||||
alert(`Clear LanguageBank Result : ${data}`);
|
||||
break;
|
||||
case "clearTimerBank":
|
||||
schedulebankdata = [];
|
||||
selectedschedulerow = null;
|
||||
fill_schedulebanktablebody(schedulebankdata);
|
||||
alert(`Clear ScheduleBank Result : ${data}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -231,16 +384,85 @@ $(document).ready(function () {
|
||||
}, 1000)
|
||||
|
||||
let sidemenu = new bootstrap.Offcanvas('#offcanvas-menu');
|
||||
$('#showmenu').click(() => {
|
||||
sidemenu.show();
|
||||
})
|
||||
$('#showmenu').click(() => { sidemenu.show(); })
|
||||
|
||||
|
||||
$('#soundbanklink').click(() => {
|
||||
sidemenu.hide();
|
||||
$('#content').load('soundbank.html', function (response, status, xhr) {
|
||||
if (status === "success") {
|
||||
console.log("Soundbank content loaded successfully");
|
||||
sendCommand("getSoundBankList", "");
|
||||
// initialize first state of buttons and text input
|
||||
$('#soundbanktablebody').empty();
|
||||
selectedsoundrow = null;
|
||||
let $btnRemove = $('#btnRemove');
|
||||
let $btnEdit = $('#btnEdit');
|
||||
let $modal = $('#soundbankmodal');
|
||||
$btnRemove.prop('disabled', true);
|
||||
$btnEdit.prop('disabled', true);
|
||||
|
||||
|
||||
sendCommand("getSoundBankList", "");
|
||||
$('#btnClear').click(() => {
|
||||
if (confirm(`Are you sure want to clear Soundbank ? This procedure is not reversible`)) {
|
||||
sendCommand("clearSoundBank", "");
|
||||
}
|
||||
});
|
||||
$('#btnAdd').click(() => {
|
||||
$modal.modal('show');
|
||||
$modal.off('hidden.bs.modal').on('hidden.bs.modal', function () {
|
||||
const desc = $('#description').val();
|
||||
console.log('Description input value:', desc);
|
||||
// You can use desc here (e.g., send to server)
|
||||
});
|
||||
});
|
||||
$btnRemove.click(() => {
|
||||
if (selectedsoundrow) {
|
||||
let cells = selectedsoundrow.find('td');
|
||||
/** @type {SoundBank} */
|
||||
let sb = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
tag: cells.eq(2).text(),
|
||||
category: cells.eq(3).text(),
|
||||
language: cells.eq(4).text(),
|
||||
voiceType: cells.eq(5).text(),
|
||||
path: cells.eq(6).text()
|
||||
}
|
||||
if (confirm(`Are you sure to delete soundbank [${sb.index}] Description=${sb.description} Tag=${sb.tag}?`)) {
|
||||
sendCommand("deleteSoundBank", sb);
|
||||
}
|
||||
}
|
||||
});
|
||||
$btnEdit.click(() => {
|
||||
if (selectedsoundrow) {
|
||||
let cells = selectedsoundrow.find('td');
|
||||
/** @type {SoundBank} */
|
||||
let sb = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
tag: cells.eq(2).text(),
|
||||
category: cells.eq(3).text(),
|
||||
language: cells.eq(4).text(),
|
||||
voiceType: cells.eq(5).text(),
|
||||
path: cells.eq(6).text()
|
||||
}
|
||||
if (confirm(`Are you sure to edit soundbank [${sb.index}] Description=${sb.description} Tag=${sb.tag}?`)) {
|
||||
$modal.modal('show');
|
||||
$modal.off('hidden.bs.modal').on('hidden.bs.modal', function () {
|
||||
const desc = $('#description').val();
|
||||
console.log('Description input value:', desc);
|
||||
// You can use desc here (e.g., send to server)
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#btnExport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
$('#btnImport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
} else {
|
||||
console.error("Error loading soundbank content:", xhr.status, xhr.statusText);
|
||||
}
|
||||
@@ -252,7 +474,66 @@ $(document).ready(function () {
|
||||
$('#content').load('messagebank.html', function (response, status, xhr) {
|
||||
if (status === "success") {
|
||||
console.log("Messagebank content loaded successfully");
|
||||
// initialize first state of buttons and text input
|
||||
$('#messagebanktablebody').empty();
|
||||
selectedmessagerow = null;
|
||||
let $btnRemove = $('#btnRemove');
|
||||
let $btnEdit = $('#btnEdit');
|
||||
$btnRemove.prop('disabled', true);
|
||||
$btnEdit.prop('disabled', true);
|
||||
|
||||
sendCommand("getMessageBankList", "");
|
||||
$('#btnClear').click(() => {
|
||||
if (confirm(`Are you sure want to clear Messagebank ? This procedure is not reversible`)) {
|
||||
sendCommand("clearMessageBank", "");
|
||||
}
|
||||
});
|
||||
$('#btnAdd').click(() => {
|
||||
//TODO form add messagebank
|
||||
});
|
||||
$btnRemove.click(() => {
|
||||
if (selectedmessagerow) {
|
||||
let cells = selectedmessagerow.find('td');
|
||||
/** @type {MessageBank} */
|
||||
let mb = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
language: cells.eq(2).text(),
|
||||
aNN_ID: parseInt(cells.eq(3).text()),
|
||||
voice_Type: cells.eq(4).text(),
|
||||
message_Detail: cells.eq(5).text(),
|
||||
message_TAGS: cells.eq(6).text()
|
||||
}
|
||||
|
||||
if (confirm(`Are you sure to delete messagebank [${mb.index}] Description=${mb.description}? ANN_ID=${mb.aNN_ID} Language=${mb.language} Voice_Type=${mb.voice_Type} `)) {
|
||||
sendCommand("deleteMessageBank", mb);
|
||||
}
|
||||
}
|
||||
});
|
||||
$btnEdit.click(() => {
|
||||
if (selectedmessagerow) {
|
||||
let cells = selectedmessagerow.find('td');
|
||||
/** @type {MessageBank} */
|
||||
let mb = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
language: cells.eq(2).text(),
|
||||
aNN_ID: parseInt(cells.eq(3).text()),
|
||||
voice_Type: cells.eq(4).text(),
|
||||
message_Detail: cells.eq(5).text(),
|
||||
message_TAGS: cells.eq(6).text()
|
||||
}
|
||||
if (confirm(`Are you sure to edit messagebank [${mb.index}] Description=${mb.description} ANN_ID=${mb.aNN_ID} Language=${mb.language} Voice_Type=${mb.voice_Type} `)) {
|
||||
//TODO send edit command
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#btnExport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
$('#btnImport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
} else {
|
||||
console.error("Error loading messagebank content:", xhr.status, xhr.statusText);
|
||||
}
|
||||
@@ -264,7 +545,57 @@ $(document).ready(function () {
|
||||
$('#content').load('language.html', function (response, status, xhr) {
|
||||
if (status === "success") {
|
||||
console.log("Language content loaded successfully");
|
||||
// initialize first state of buttons and text input
|
||||
$('#languagebanktablebody').empty();
|
||||
selectedlanguagerow = null;
|
||||
let $btnRemove = $('#btnRemove');
|
||||
let $btnEdit = $('#btnEdit');
|
||||
$btnRemove.prop('disabled', true);
|
||||
$btnEdit.prop('disabled', true);
|
||||
|
||||
sendCommand("getLanguageList", "");
|
||||
$('#btnClear').click(() => {
|
||||
if (confirm(`Are you sure want to clear Languagebank ? This procedure is not reversible`)) {
|
||||
sendCommand("clearLanguageBank", "");
|
||||
}
|
||||
});
|
||||
$('#btnAdd').click(() => {
|
||||
//TODO form add language
|
||||
});
|
||||
$btnRemove.click(() => {
|
||||
if (selectedlanguagerow) {
|
||||
let cells = selectedlanguagerow.find('td');
|
||||
/** @type {Language} */
|
||||
let ll = {
|
||||
index: cells.eq(0).text(),
|
||||
tag: cells.eq(1).text(),
|
||||
language: cells.eq(2).text()
|
||||
}
|
||||
if (confirm(`Are you sure to delete language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
|
||||
sendCommand("deleteLanguage", ll);
|
||||
}
|
||||
}
|
||||
});
|
||||
$btnEdit.click(() => {
|
||||
if (selectedlanguagerow) {
|
||||
let cells = selectedlanguagerow.find('td');
|
||||
/** @type {Language} */
|
||||
let ll = {
|
||||
index: cells.eq(0).text(),
|
||||
tag: cells.eq(1).text(),
|
||||
language: cells.eq(2).text()
|
||||
}
|
||||
if (confirm(`Are you sure to edit language [${ll.index}] Tag=${ll.tag} Language=${ll.language}?`)) {
|
||||
//TODO send edit command
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#btnExport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
$('#btnImport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
} else {
|
||||
console.error("Error loading language content:", xhr.status, xhr.statusText);
|
||||
}
|
||||
@@ -275,7 +606,69 @@ $(document).ready(function () {
|
||||
$('#content').load('timer.html', function (response, status, xhr) {
|
||||
if (status === "success") {
|
||||
console.log("Timer content loaded successfully");
|
||||
// initialize first state of buttons and text input
|
||||
$('#schedulebanktablebody').empty();
|
||||
selectedschedulerow = null;
|
||||
let $btnEdit = $('#btnEdit');
|
||||
let $btnRemove = $('#btnRemove');
|
||||
$btnEdit.prop('disabled', true);
|
||||
$btnRemove.prop('disabled', true);
|
||||
|
||||
sendCommand("getTimerList", "");
|
||||
$('#btnClear').click(() => {
|
||||
if (confirm(`Are you sure want to clear Timerbank ? This procedure is not reversible`)) {
|
||||
sendCommand("clearTimerBank", "");
|
||||
}
|
||||
});
|
||||
$('#btnAdd').click(() => {
|
||||
//TODO form add timer
|
||||
});
|
||||
$btnRemove.click(() => {
|
||||
if (selectedtimerow) {
|
||||
let cells = selectedtimerow.find('td');
|
||||
/** @type {ScheduleBank} */
|
||||
let sr = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
day: cells.eq(2).text(),
|
||||
time: cells.eq(3).text(),
|
||||
soundpath: cells.eq(4).text(),
|
||||
repeat: cells.eq(5).text(),
|
||||
enable: cells.eq(6).text(),
|
||||
broadcastZones: cells.eq(7).text(),
|
||||
language: cells.eq(8).text()
|
||||
}
|
||||
if (confirm(`Are you sure to delete schedule [${sr.index}] Description=${sr.description}?`)) {
|
||||
sendCommand("deleteSchedule", sr);
|
||||
}
|
||||
}
|
||||
});
|
||||
$btnEdit.click(() => {
|
||||
if (selectedtimerow) {
|
||||
let cells = selectedtimerow.find('td');
|
||||
/** @type {ScheduleBank} */
|
||||
let sr = {
|
||||
index: cells.eq(0).text(),
|
||||
description: cells.eq(1).text(),
|
||||
day: cells.eq(2).text(),
|
||||
time: cells.eq(3).text(),
|
||||
soundpath: cells.eq(4).text(),
|
||||
repeat: cells.eq(5).text(),
|
||||
enable: cells.eq(6).text(),
|
||||
broadcastZones: cells.eq(7).text(),
|
||||
language: cells.eq(8).text()
|
||||
}
|
||||
if (confirm(`Are you sure to edit schedule [${sr.index}] Description=${sr.description}?`)) {
|
||||
//TODO send edit command
|
||||
}
|
||||
}
|
||||
});
|
||||
$('#btnExport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
$('#btnImport').click(() => {
|
||||
alert("Feature disabled for now");
|
||||
});
|
||||
} else {
|
||||
console.error("Error loading timer content:", xhr.status, xhr.statusText);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user