/** * Currently selected messagebank row in the table * @type {JQuery|null} */ window.selectedmessagerow = null; /** * Fill messagebank table body with values * @param {MessageBank[]} vv values to fill */ function fill_messagebanktablebody(vv) { $('#messagebanktablebody').empty(); if (!Array.isArray(vv) || vv.length === 0) return; vv.forEach(item => { const row = ` ${item.index} ${item.description} ${item.language} ${item.aNN_ID} ${item.voice_Type} ${item.message_Detail} ${item.message_TAGS} `; $('#messagebanktablebody').append(row); let $addedrow = $('#messagebanktablebody tr:last'); $addedrow.click(function () { if (window.selectedmessagerow) { window.selectedmessagerow.find('td').css('background-color', ''); if (window.selectedmessagerow.is($(this))) { window.selectedmessagerow = null; $('#btnRemove').prop('disabled', true); $('#btnEdit').prop('disabled', true); return; } } $addedrow.find('td').css('background-color', '#ffeeba'); window.selectedmessagerow = $addedrow; $('#btnRemove').prop('disabled', false); $('#btnEdit').prop('disabled', false); }); }); $('#tablesize').text("Table Size: " + vv.length); } /** * @typedef {Object} MessageBank * @property {string} Description - Description of the messagebank entry * @property {string} Language - Language code * @property {number} ANN_ID - ANN ID (1-100) * @property {string} Voice_Type - Voice type * @property {string} Message_Detail - Detailed message constructed from categories and phrases * @property {string} Message_TAGS - Tags associated with the message */ /** * Get data from modal inputs and return as MessageBank object * @returns {MessageBank} messagebank object or null if validation fails */ function GetDataFromModal() { let description = $messagedescription.val().trim(); let language = $messagelanguage.val(); let annid = parseInt($messageannid.val()); let voicetype = $messagevoicetype.val(); let messagedetail = ""; let messagetags = ""; // iterate messageselectedvariables children $messageselectedvariables.children().each(function () { let text = $(this).text().trim(); let value = $(this).val().trim(); console.log('selected text:' + text + ', value:' + value); if (text.length > 0) { k if (value.length > 0) { messagetags += (messagetags.length > 0 ? " " : "") + value; messagedetail += (messagedetail.length > 0 ? " " : "") + text; } } }); console.log(`Constructed Message_Detail: ${messagedetail}`); console.log(`Constructed Message_TAGS: ${messagetags}`); if (description.length === 0) { alert("Description cannot be empty"); return null; } if (!language) { alert("Language cannot be empty"); return null; } if (isNaN(annid) || annid < 1 || annid > 100) { alert("ANN_ID must be a number between 1 and 100"); return null; } if (!voicetype) { alert("Voice Type cannot be empty"); return null; } if (messagedetail.length === 0 || messagetags.length === 0) { alert("Message haven't been constructed, please add categories and phrases"); return null; } let mb = { Description: description, Language: language, ANN_ID: annid, Voice_Type: voicetype, Message_Detail: messagedetail, Message_TAGS: messagetags }; return mb; } $(document).ready(function () { console.log("messagebank.js loaded"); $('#messagebanktablebody').empty(); window.selectedmessagerow = 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 = "MessageBank/"; let $findmessage = $('#findmessage'); // modal for add / edit messagebank let $modal = $('#messagebankmodal'); // text input, disabled by default let $messageindex = $modal.find('#messageindex'); // text input let $messagedescription = $modal.find('#messagedescription'); // select input, options loaded from languages[] let $messagelanguage = $modal.find('#messagelanguage'); // number input from 1 to 100 let $messageannid = $modal.find('#messageannid'); // select input, options loaded from voiceTypes[] let $messagevoicetype = $modal.find('#messagevoicetype'); // list