import { saveSettingsDebounced } from "../../../script.js"; import { getContext, extension_settings } from "../../extensions.js"; import { initScrollHeight, resetScrollHeight } from "../../utils.js"; export { MODULE_NAME }; const MODULE_NAME = 'quick-reply'; const UPDATE_INTERVAL = 1000; const defaultSettings = { quickReplyEnabled: false, numberOfSlots: 5, quickReplySlots: [], } async function loadSettings() { if (Object.keys(extension_settings.quickReply).length === 0) { Object.assign(extension_settings.quickReply, defaultSettings); } // If the user has an old version of the extension, update it if (!Array.isArray(extension_settings.quickReply.quickReplySlots)) { extension_settings.quickReply.quickReplySlots = []; extension_settings.quickReply.numberOfSlots = defaultSettings.numberOfSlots; for (let i = 1; i <= extension_settings.quickReply.numberOfSlots; i++) { extension_settings.quickReply.quickReplySlots.push({ mes: extension_settings.quickReply[`quickReply${i}Mes`], label: extension_settings.quickReply[`quickReply${i}Label`], enabled: true, }); delete extension_settings.quickReply[`quickReply${i}Mes`]; delete extension_settings.quickReply[`quickReply${i}Label`]; } } initializeEmptySlots(extension_settings.quickReply.numberOfSlots); generateQuickReplyElements(); for (let i = 1; i <= extension_settings.quickReply.numberOfSlots; i++) { $(`#quickReply${i}Mes`).val(extension_settings.quickReply.quickReplySlots[i - 1]?.mes).trigger('input'); $(`#quickReply${i}Label`).val(extension_settings.quickReply.quickReplySlots[i - 1]?.label).trigger('input'); } $('#quickReplyEnabled').prop('checked', extension_settings.quickReply.quickReplyEnabled); $('#quickReplyNumberOfSlots').val(extension_settings.quickReply.numberOfSlots); } function onQuickReplyInput(id) { extension_settings.quickReply.quickReplySlots[id - 1].mes = $(`#quickReply${id}Mes`).val(); $(`#quickReply${id}`).attr('title', ($(`#quickReply${id}Mes`).val())); resetScrollHeight($(`#quickReply${id}Mes`)); saveSettingsDebounced(); } function onQuickReplyLabelInput(id) { extension_settings.quickReply.quickReplySlots[id - 1].label = $(`#quickReply${id}Label`).val(); $(`#quickReply${id}`).text($(`#quickReply${id}Label`).val()); saveSettingsDebounced(); } async function onQuickReplyEnabledInput() { let isEnabled = $(this).prop('checked') extension_settings.quickReply.quickReplyEnabled = !!isEnabled; if (isEnabled === true) { $("#quickReplyBar").show(); } else { $("#quickReplyBar").hide(); } saveSettingsDebounced(); } async function sendQuickReply(index) { const prompt = extension_settings.quickReply.quickReplySlots[index]?.mes || ''; if (!prompt) { console.warn(`Quick reply slot ${index} is empty! Aborting.`); return; } $("#send_textarea").val(prompt); $("#send_but").trigger('click'); } function addQuickReplyBar() { $('#quickReplyBar').remove(); let quickReplyButtonHtml = ''; for (let i = 0; i < extension_settings.quickReply.numberOfSlots; i++) { let quickReplyMes = extension_settings.quickReply.quickReplySlots[i]?.mes || ''; let quickReplyLabel = extension_settings.quickReply.quickReplySlots[i]?.label || ''; quickReplyButtonHtml += `