/** * Currently selected soundbank row in the table * @type {JQuery|null} */ window.selectedsoundrow = null; /** * Fill soundbank table body with values * @param {SoundBank[]} vv values to fill */ function fill_soundbanktablebody(vv) { $('#soundbanktablebody').empty(); console.log("Filling soundbank table with " + vv.length + " items"); if (!Array.isArray(vv) || vv.length === 0) return; vv.forEach(item => { const row = ` ${item.index} ${item.description} ${item.tag} ${item.category} ${item.language} ${item.voiceType} ${item.path} `; $('#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); }); }); $('#tablesize').text("Table Size: " + vv.length); } $(document).ready(function () { console.log("soundbank.js loaded successfully"); reloadSoundbankFiles(); $('#soundbanktablebody').empty(); window.selectedsoundrow = null; let $btnClear = $('#btnClear'); let $btnAdd = $('#btnAdd'); let $btnRemove = $('#btnRemove'); let $btnEdit = $('#btnEdit'); let $btnExport = $('#btnExport'); let $btnImport = $('#btnImport'); $btnRemove.prop('disabled', true); $btnEdit.prop('disabled', true); let APIURL = "SoundBank/"; let $modal = $('#soundbankmodal'); let $modalindex = $modal.find('#modalindex'); let $modaldescription = $modal.find('#modaldescription'); let $modaltag = $modal.find('#modaltag'); let $modalcategory = $modal.find('#modalcategory'); let $modallanguage = $modal.find('#modallanguage'); let $modalvoicetype = $modal.find('#modalvoicetype'); let $modalpath = $modal.find('#modalpath'); /** * Clear soundbank modal inputs */ function clearSoundbankModal() { $modalindex.val('').prop('disabled', true); $modaldescription.val(''); $modaltag.val(''); // fill modalcategory options from categories[] $modalcategory.empty(); categories.forEach(cat => { $modalcategory.append(new Option(cat, cat)); }); $modalcategory.val(null); // fill modallanguage options from languages[] $modallanguage.empty(); languages.forEach(lang => { $modallanguage.append(new Option(lang, lang)); }); $modallanguage.val(null); // fill modalvoicetype options from voiceTypes[] $modalvoicetype.empty(); voiceTypes.forEach(vt => { $modalvoicetype.append(new Option(vt, vt)); }); $modalvoicetype.val(null); // fill modalpath options from soundbankfiles[] // TODO read https://jeesite.com/front/jquery-select2/4.0/index.htm console.log("window.select2data has " + window.select2data.length + " items"); $('#modalpath').select2({ data: window.select2data }) } reloadSoundBank(APIURL, () => { 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, () => { fill_soundbanktablebody(window.soundbankdata); alert("Success clear soundbank : " + okdata.message); }); }, (errdata) => { alert("Error clear soundbank : " + errdata.message); }); }); $btnAdd.click(() => { $modal.modal('show'); clearSoundbankModal(); // event on Click save button $modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () { //TODO Add soundbank save process here $modal.modal('hide'); }); // event on Click close button $modal.off('click.soundbankclose').on('click.soundbankclose', '#soundbankclose', function () { $modal.modal('hide'); }); }); $btnRemove.click(() => { if (window.selectedsoundrow) { let cells = window.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}?`)) { fetchAPI(APIURL + "DeleteByIndex/" + sb.index, "DELETE", {}, null, (okdata) => { reloadSoundBank(APIURL, () => { fill_soundbanktablebody(window.soundbankdata); alert("Success delete soundbank : " + okdata.message); }); }, (errdata) => { alert("Error delete soundbank : " + errdata.message); }); } } }); $btnEdit.click(() => { if (window.selectedsoundrow) { let cells = window.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 () { // event on Click save button $modal.off('click.soundbanksave').on('click.soundbanksave', '#soundbanksave', function () { //TODO Add soundbank save process here $modal.modal('hide'); }); // event on Click close button $modal.off('click.soundbankclose').on('click.soundbankclose', '#soundbankclose', function () { $modal.modal('hide'); }); }); } } }); $btnExport.click(() => { DoExport(APIURL, "soundbank.xlsx", {}); }); $btnImport.click(() => { DoImport(APIURL, (okdata) => { reloadSoundBank(APIURL, () => { fill_soundbanktablebody(window.soundbankdata); alert("Success import soundbank : " + okdata.message); }); }, (errdata) => { alert("Error importing soundbank from XLSX : " + errdata.message); }); }); });