diff --git a/ui/bindings.js b/ui/bindings.js index bbd413c..cd00232 100644 --- a/ui/bindings.js +++ b/ui/bindings.js @@ -3,45 +3,36 @@ import { saveSettingsDebounced } from "/script.js"; import { defaultSettings, extensionName } from "../utils/settings.js"; import { pluginAuthStatus, activatePluginAuthorization } from "../utils/auth.js"; import { fetchSupportedModels } from "../core/api.js"; -import { setAvailableModels, populateModelDropdown } from "./state.js"; + +import { setAvailableModels, populateModelDropdown, getLatestUpdateInfo } from "./state.js"; import { fixCommand, testReplyChecker } from "../core/commands.js"; - export function bindModalEvents() { - const container = $("#amily2-drawer-content"); + const container = $("#amily2_drawer_content"); - if (container.data("events-bound")) return; + if (container.data("events-bound")) return; - - const snakeToCamel = (s) => s.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); - const updateAndSaveSetting = (key, value) => { - - console.log(`[Amily-谕令确认] 收到指令: 将 [${key}] 设置为 ->`, value); - - if (!extension_settings[extensionName]) { - extension_settings[extensionName] = {}; - } - extension_settings[extensionName] = { - ...extension_settings[extensionName], - [key]: value, + const snakeToCamel = (s) => s.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); + const updateAndSaveSetting = (key, value) => { + console.log(`[Amily-谕令确认] 收到指令: 将 [${key}] 设置为 ->`, value); + if (!extension_settings[extensionName]) { + extension_settings[extensionName] = {}; + } + extension_settings[extensionName] = { ...extension_settings[extensionName], [key]: value }; + saveSettingsDebounced(); + console.log(`[Amily-谕令镌刻] [${key}] 的新状态已保存。`); }; - saveSettingsDebounced(); - - console.log(`[Amily-谕令镌刻] [${key}] 的新状态已保存。`); - }; - - - container - .off("click.amily2.auth") - .on("click.amily2.auth", "#auth_submit", async function () { - const authCode = $("#amily2_auth_code").val().trim(); - if (authCode) { - await activatePluginAuthorization(authCode); - } else { - toastr.warning("请输入授权码", "Amily2号"); - } - }); + container + .off("click.amily2.auth") + .on("click.amily2.auth", "#auth_submit", async function () { + const authCode = $("#amily2_auth_code").val().trim(); + if (authCode) { + await activatePluginAuthorization(authCode); + } else { + toastr.warning("请输入授权码", "Amily2号"); + } + }); container .off("click.amily2.actions") @@ -83,6 +74,62 @@ export function bindModalEvents() { } }, ); + + + container + .off("click.amily2.expand_editor") + .on("click.amily2.expand_editor", "#amily2_expand_editor", function (event) { + if (!pluginAuthStatus.authorized) return; + event.stopPropagation(); + const selectedKey = $("#amily2_prompt_selector").val(); + const currentContent = $("#amily2_unified_editor").val(); + const dialogHtml = ` + + + `; + const dialogElement = $(dialogHtml).appendTo('body'); + const dialogTextarea = dialogElement.find('#amily2_dialog_editor'); + dialogTextarea.val(currentContent); + const closeDialog = () => { dialogElement[0].close(); dialogElement.remove(); }; + dialogElement.find('.popup-button-ok').on('click', () => { + const newContent = dialogTextarea.val(); + $("#amily2_unified_editor").val(newContent); + updateAndSaveSetting(selectedKey, newContent); + toastr.success(`谕令 [${selectedKey}] 已镌刻!`, "Amily2号"); + closeDialog(); + }); + dialogElement.find('.popup-button-cancel').on('click', closeDialog); + dialogElement[0].showModal(); + }); + + container + .off("click.amily2.update") + .on("click.amily2.update", "#amily2_update_button", function() { + $("#amily2_update_indicator").hide(); + + const updateInfo = getLatestUpdateInfo(); + if (updateInfo && updateInfo.changelog) { + const dialogHtml = ` + + + `; + const dialogElement = $(dialogHtml).appendTo('body'); + const closeDialog = () => { dialogElement[0].close(); dialogElement.remove(); }; + dialogElement.find('.popup-button-ok').on('click', closeDialog); + dialogElement[0].showModal(); + + } else { + toastr.info("未能获取到云端情报,请稍后再试。", "情报部回报"); + } + }); container .off("change.amily2.checkbox") @@ -193,4 +240,4 @@ export function bindModalEvents() { setTimeout(updateEditorView, 100); container.data("events-bound", true); -} \ No newline at end of file +}