commit 26/01/2026
This commit is contained in:
@@ -28,7 +28,7 @@ window.soundbankdata = [];
|
||||
*/
|
||||
window.selectedsoundrow = null;
|
||||
|
||||
|
||||
dtSoundbank = null;
|
||||
|
||||
/**
|
||||
* Select2 data source
|
||||
@@ -46,6 +46,7 @@ function reloadSoundBank(APIURL = "SoundBank/") {
|
||||
fetchAPI(APIURL + "List", "GET", {}, null, (okdata) => {
|
||||
|
||||
if (Array.isArray(okdata)) {
|
||||
//console.log("reloadSoundBank: got " + okdata.length + " items");
|
||||
window.soundbankdata.push(...okdata);
|
||||
window.selectedsoundrow = null;
|
||||
fill_soundbanktablebody(window.soundbankdata);
|
||||
@@ -60,41 +61,41 @@ function reloadSoundBank(APIURL = "SoundBank/") {
|
||||
* @param {SoundBank[]} vv values to fill
|
||||
*/
|
||||
function fill_soundbanktablebody(vv) {
|
||||
$('#soundbanktablebody').empty();
|
||||
dtSoundbank.clear();
|
||||
if (!Array.isArray(vv) || vv.length === 0) return;
|
||||
vv.forEach(item => {
|
||||
const row = `<tr>
|
||||
<td>${item.index}</td>
|
||||
<td>${item.description}</td>
|
||||
<td>${item.tag}</td>
|
||||
<td>${item.category}</td>
|
||||
<td>${item.language}</td>
|
||||
<td>${item.voiceType}</td>
|
||||
<td>${item.path}</td>
|
||||
</tr>`;
|
||||
$('#soundbanktablebody').append(row);
|
||||
let $addedrow = $('#soundbanktablebody tr:last');
|
||||
$addedrow.on('click', function () {
|
||||
if (window.selectedsoundrow) {
|
||||
window.selectedsoundrow.find('td').css('background-color', '');
|
||||
if (window.selectedsoundrow.is($(this))) {
|
||||
window.selectedsoundrow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$(this).find('td').css('background-color', '#ffeeba');
|
||||
window.selectedsoundrow = $(this);
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
});
|
||||
});
|
||||
dtSoundbank.rows.add(vv);
|
||||
dtSoundbank.draw();
|
||||
|
||||
$('#soundbanktable tbody').off('click').on('click', 'tr', function () {
|
||||
// if no data
|
||||
if (!dtSoundbank) return;
|
||||
// if user click an empty row
|
||||
if (!dtSoundbank.data().any()) return;
|
||||
|
||||
const selected = dtSoundbank.row(this)
|
||||
// toggle behaviour - unselect if already selected
|
||||
if ($(this).hasClass('row-selected')) {
|
||||
$(this).removeClass('row-selected').find('td').css('background-color', '');
|
||||
window.selectedsoundrow = null;
|
||||
$('#btnRemove').prop('disabled', true);
|
||||
$('#btnEdit').prop('disabled', true);
|
||||
return;
|
||||
}
|
||||
|
||||
// unselect previously selected row
|
||||
$('#soundbanktable tbody tr.row-selected').removeClass('row-selected').find('td').css('background-color', '');
|
||||
|
||||
$(this).addClass('row-selected').find('td').css('background-color', '#ffeeba');
|
||||
window.selectedsoundrow = selected.data();
|
||||
$('#btnRemove').prop('disabled', false);
|
||||
$('#btnEdit').prop('disabled', false);
|
||||
})
|
||||
|
||||
$('#tablesize').text("Table Size: " + vv.length);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reload soundbank files from server and filter by language, category, and voiceType
|
||||
* @param {String} language
|
||||
@@ -102,17 +103,17 @@ function fill_soundbanktablebody(vv) {
|
||||
* @param {String} voiceType
|
||||
* @param {Function} cb callback function when done
|
||||
*/
|
||||
function reloadSoundbankFiles(language, category, voiceType, cb=null) {
|
||||
function reloadSoundbankFiles(language, category, voiceType, cb = null) {
|
||||
window.select2data = [];
|
||||
$('#modalpath').empty().trigger('change');
|
||||
if (language && language.length > 0) {
|
||||
if (category && category.length > 0) {
|
||||
if (voiceType && voiceType.length > 0) {
|
||||
fetchAPI(`ListFiles/${language}/${voiceType}/${category}`, "GET", {}, null, (okdata) => {
|
||||
console.log("reloadSoundbankFiles: got " + okdata.length + " items");
|
||||
if (Array.isArray(okdata)){
|
||||
window.select2data = okdata.map(p => ({id: getFilenameFromPath(p), text: getFilenameFromPath(p)}));
|
||||
|
||||
//console.log("reloadSoundbankFiles: got " + okdata.length + " items");
|
||||
if (Array.isArray(okdata)) {
|
||||
window.select2data = okdata.map(p => ({ id: getFilenameFromPath(p), text: getFilenameFromPath(p) }));
|
||||
|
||||
$('#modalpath').select2({
|
||||
data: window.select2data,
|
||||
placeholder: 'Select a sound file',
|
||||
@@ -141,7 +142,7 @@ function getFilenameFromPath(path) {
|
||||
let parts = path.split('/');
|
||||
return parts[parts.length - 1];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -171,6 +172,23 @@ $(document).ready(function () {
|
||||
let selected_language = null;
|
||||
let selected_voicetype = null;
|
||||
|
||||
if (dtSoundbank === null) {
|
||||
dtSoundbank = new DataTable('#soundbanktable', {
|
||||
data: [],
|
||||
pageLength: 25,
|
||||
columns: [
|
||||
{ title: "Index", data: "index" },
|
||||
{ title: "Description", data: "description" },
|
||||
{ title: "Tag", data: "tag" },
|
||||
{ title: "Category", data: "category" },
|
||||
{ title: "Language", data: "language" },
|
||||
{ title: "Type", data: "voiceType" },
|
||||
{ title: "Filename", data: "path" }
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clear soundbank modal inputs
|
||||
*/
|
||||
@@ -201,17 +219,17 @@ $(document).ready(function () {
|
||||
}
|
||||
|
||||
reloadSoundBank(APIURL);
|
||||
$('#findsoundbank').on('input', function () {
|
||||
let searchTerm = $(this).val().trim().toLowerCase();
|
||||
if (searchTerm.length > 0) {
|
||||
window.selectedsoundrow = null;
|
||||
let filtered = window.soundbankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.tag.toLowerCase().includes(searchTerm) || item.path.toLowerCase().includes(searchTerm));
|
||||
fill_soundbanktablebody(filtered);
|
||||
} else {
|
||||
window.selectedsoundrow = null;
|
||||
fill_soundbanktablebody(window.soundbankdata);
|
||||
}
|
||||
});
|
||||
// $('#findsoundbank').on('input', function () {
|
||||
// let searchTerm = $(this).val().trim().toLowerCase();
|
||||
// if (searchTerm.length > 0) {
|
||||
// window.selectedsoundrow = null;
|
||||
// let filtered = window.soundbankdata.filter(item => item.description.toLowerCase().includes(searchTerm) || item.tag.toLowerCase().includes(searchTerm) || item.path.toLowerCase().includes(searchTerm));
|
||||
// fill_soundbanktablebody(filtered);
|
||||
// } else {
|
||||
// window.selectedsoundrow = null;
|
||||
// fill_soundbanktablebody(window.soundbankdata);
|
||||
// }
|
||||
// });
|
||||
$btnClear.click(() => {
|
||||
DoClear(APIURL, "Soundbank", (okdata) => {
|
||||
reloadSoundBank(APIURL);
|
||||
@@ -304,16 +322,16 @@ $(document).ready(function () {
|
||||
});
|
||||
$btnRemove.click(() => {
|
||||
if (window.selectedsoundrow) {
|
||||
let cells = window.selectedsoundrow.find('td');
|
||||
//console.log(window.selectedsoundrow);
|
||||
/** @type {SoundBank} */
|
||||
let sb = {
|
||||
index: Number(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()
|
||||
index: window.selectedsoundrow.index,
|
||||
description: window.selectedsoundrow.description,
|
||||
tag: window.selectedsoundrow.tag,
|
||||
category: window.selectedsoundrow.category,
|
||||
language: window.selectedsoundrow.language,
|
||||
voiceType: window.selectedsoundrow.voiceType,
|
||||
path: window.selectedsoundrow.path
|
||||
}
|
||||
if (confirm(`Are you sure to delete soundbank [${sb.index}] Description=${sb.description} Tag=${sb.tag}?`)) {
|
||||
fetchAPI(APIURL + "DeleteByIndex/" + sb.index, "DELETE", {}, null, (okdata) => {
|
||||
@@ -327,16 +345,16 @@ $(document).ready(function () {
|
||||
});
|
||||
$btnEdit.click(() => {
|
||||
if (window.selectedsoundrow) {
|
||||
let cells = window.selectedsoundrow.find('td');
|
||||
//console.log(window.selectedsoundrow);
|
||||
/** @type {SoundBank} */
|
||||
let sb = {
|
||||
index: Number(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()
|
||||
index: window.selectedsoundrow.index,
|
||||
Description: window.selectedsoundrow.description,
|
||||
TAG: window.selectedsoundrow.tag,
|
||||
Category: window.selectedsoundrow.category,
|
||||
Language: window.selectedsoundrow.language,
|
||||
VoiceType: window.selectedsoundrow.voiceType,
|
||||
Path: window.selectedsoundrow.path
|
||||
}
|
||||
if (confirm(`Are you sure to edit soundbank [${sb.index}] Description=${sb.Description} Tag=${sb.TAG}?`)) {
|
||||
$modal.modal('show');
|
||||
@@ -358,63 +376,63 @@ $(document).ready(function () {
|
||||
});
|
||||
|
||||
|
||||
|
||||
// event on Click save button
|
||||
$modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () {
|
||||
let description = $modaldescription.val().trim();
|
||||
let tag = $modaltag.val().trim();
|
||||
let category = $modalcategory.val();
|
||||
let language = $modallanguage.val();
|
||||
let voiceType = $modalvoicetype.val();
|
||||
let path = $('#soundbankmodal #modalpath').val();
|
||||
if (!description || description.length === 0) {
|
||||
alert("Description is required");
|
||||
return;
|
||||
}
|
||||
if (!tag || tag.length === 0) {
|
||||
alert("Tag is required");
|
||||
return;
|
||||
}
|
||||
if (!category || category.length === 0) {
|
||||
alert("Category is required");
|
||||
return;
|
||||
}
|
||||
if (!language || language.length === 0) {
|
||||
alert("Language is required");
|
||||
return;
|
||||
}
|
||||
if (!voiceType || voiceType.length === 0) {
|
||||
alert("Voice Type is required");
|
||||
return;
|
||||
}
|
||||
if (!path || path.length === 0) {
|
||||
alert("Path is required");
|
||||
return;
|
||||
}
|
||||
if (description === sb.Description && tag === sb.TAG && category === sb.Category && language === sb.Language && voiceType === sb.VoiceType && path === sb.Path) {
|
||||
alert("No changes detected");
|
||||
return;
|
||||
}
|
||||
sb.Description = description;
|
||||
sb.TAG = tag;
|
||||
sb.Category = category;
|
||||
sb.Language = language;
|
||||
sb.VoiceType = voiceType;
|
||||
sb.Path = path;
|
||||
fetchAPI(APIURL + "UpdateByIndex/" + sb.index, "PATCH", {}, sb, (okdata) => {
|
||||
reloadSoundBank(APIURL);
|
||||
alert("Success update soundbank : " + okdata.message);
|
||||
}, (errdata) => {
|
||||
alert("Error update soundbank : " + errdata.message);
|
||||
});
|
||||
$modal.modal('hide');
|
||||
|
||||
// event on Click save button
|
||||
$modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () {
|
||||
let description = $modaldescription.val().trim();
|
||||
let tag = $modaltag.val().trim();
|
||||
let category = $modalcategory.val();
|
||||
let language = $modallanguage.val();
|
||||
let voiceType = $modalvoicetype.val();
|
||||
let path = $('#soundbankmodal #modalpath').val();
|
||||
if (!description || description.length === 0) {
|
||||
alert("Description is required");
|
||||
return;
|
||||
}
|
||||
if (!tag || tag.length === 0) {
|
||||
alert("Tag is required");
|
||||
return;
|
||||
}
|
||||
if (!category || category.length === 0) {
|
||||
alert("Category is required");
|
||||
return;
|
||||
}
|
||||
if (!language || language.length === 0) {
|
||||
alert("Language is required");
|
||||
return;
|
||||
}
|
||||
if (!voiceType || voiceType.length === 0) {
|
||||
alert("Voice Type is required");
|
||||
return;
|
||||
}
|
||||
if (!path || path.length === 0) {
|
||||
alert("Path is required");
|
||||
return;
|
||||
}
|
||||
if (description === sb.Description && tag === sb.TAG && category === sb.Category && language === sb.Language && voiceType === sb.VoiceType && path === sb.Path) {
|
||||
alert("No changes detected");
|
||||
return;
|
||||
}
|
||||
sb.Description = description;
|
||||
sb.TAG = tag;
|
||||
sb.Category = category;
|
||||
sb.Language = language;
|
||||
sb.VoiceType = voiceType;
|
||||
sb.Path = path;
|
||||
fetchAPI(APIURL + "UpdateByIndex/" + sb.index, "PATCH", {}, sb, (okdata) => {
|
||||
reloadSoundBank(APIURL);
|
||||
alert("Success update soundbank : " + okdata.message);
|
||||
}, (errdata) => {
|
||||
alert("Error update soundbank : " + errdata.message);
|
||||
});
|
||||
// event on Click close button
|
||||
$modal.off('click.soundbankclose').on('click.soundbankclose', '#soundbankclose', function () {
|
||||
$modal.modal('hide');
|
||||
});
|
||||
|
||||
$modal.modal('hide');
|
||||
|
||||
});
|
||||
// event on Click close button
|
||||
$modal.off('click.soundbankclose').on('click.soundbankclose', '#soundbankclose', function () {
|
||||
$modal.modal('hide');
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user