2026-04-25 03:49:13 +08:00
|
|
|
// 聊天室欢迎语快捷菜单事件绑定,替代 Blade 内联 onclick。
|
|
|
|
|
|
|
|
|
|
let welcomeMenuEventsBound = false;
|
|
|
|
|
|
2026-04-27 09:19:49 +00:00
|
|
|
/**
|
|
|
|
|
* 切换欢迎语下拉浮层的显示/隐藏。
|
|
|
|
|
*/
|
|
|
|
|
function toggleWelcomeMenu(event) {
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
const menu = document.getElementById("welcome-menu");
|
|
|
|
|
const adminMenu = document.getElementById("admin-menu");
|
|
|
|
|
const blockMenu = document.getElementById("block-menu");
|
|
|
|
|
const featureMenu = document.getElementById("feature-menu");
|
|
|
|
|
const dailyStatusEditor = document.getElementById("daily-status-editor-overlay");
|
|
|
|
|
|
|
|
|
|
if (!menu) return;
|
|
|
|
|
|
|
|
|
|
[adminMenu, blockMenu, featureMenu, dailyStatusEditor].forEach((el) => {
|
|
|
|
|
if (el) el.style.display = "none";
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
menu.style.display = menu.style.display === "none" ? "block" : "none";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 挂载到 window 供 Blade 脚本及其他模块使用。
|
|
|
|
|
window.toggleWelcomeMenu = toggleWelcomeMenu;
|
|
|
|
|
|
2026-04-25 03:49:13 +08:00
|
|
|
/**
|
|
|
|
|
* 绑定欢迎语菜单按钮、菜单内点击拦截与模板发送事件。
|
|
|
|
|
*/
|
|
|
|
|
export function bindWelcomeMenuControls() {
|
|
|
|
|
if (welcomeMenuEventsBound || typeof document === "undefined") {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
welcomeMenuEventsBound = true;
|
|
|
|
|
|
|
|
|
|
document.addEventListener("click", (event) => {
|
|
|
|
|
if (!(event.target instanceof Element)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const toggleButton = event.target.closest("[data-chat-welcome-menu-toggle]");
|
|
|
|
|
if (toggleButton) {
|
|
|
|
|
event.preventDefault();
|
2026-04-27 09:19:49 +00:00
|
|
|
toggleWelcomeMenu(event);
|
2026-04-25 03:49:13 +08:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const menu = event.target.closest("[data-chat-welcome-menu]");
|
2026-04-27 09:19:49 +00:00
|
|
|
if (!menu) return;
|
2026-04-25 03:49:13 +08:00
|
|
|
|
2026-04-27 09:19:49 +00:00
|
|
|
// 阻止菜单内部点击冒泡。
|
2026-04-25 03:49:13 +08:00
|
|
|
event.stopPropagation();
|
|
|
|
|
|
|
|
|
|
const item = event.target.closest("[data-chat-welcome-template]");
|
2026-04-27 09:19:49 +00:00
|
|
|
if (!item || !menu.contains(item)) return;
|
2026-04-25 03:49:13 +08:00
|
|
|
|
|
|
|
|
const template = item.getAttribute("data-chat-welcome-template") || "";
|
2026-04-27 09:19:49 +00:00
|
|
|
// sendWelcomeTpl 仍由 Blade 维护(依赖 sendMessage),这里通过 window 调用。
|
2026-04-25 03:49:13 +08:00
|
|
|
if (template && typeof window.sendWelcomeTpl === "function") {
|
|
|
|
|
window.sendWelcomeTpl(template);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-04-27 09:19:49 +00:00
|
|
|
|
|
|
|
|
export { toggleWelcomeMenu };
|