79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
// 聊天室用户名快捷操作,提供 switchTarget/openUserCard 全局兼容函数。
|
|
|
|
/**
|
|
* 将聊天目标切换到指定用户,离线用户会临时补入下拉框。
|
|
*
|
|
* @param {string} username
|
|
* @returns {void}
|
|
*/
|
|
export function switchTarget(username) {
|
|
const toUserSelect = document.getElementById("to_user");
|
|
if (!toUserSelect) {
|
|
return;
|
|
}
|
|
|
|
const options = toUserSelect.options;
|
|
let found = false;
|
|
|
|
for (let index = 0; index < options.length; index += 1) {
|
|
if (options[index].value === username) {
|
|
toUserSelect.value = username;
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 已离线用户不在下拉列表时,临时加入一次,方便直接发起悄悄话。
|
|
if (!found && username !== "大家") {
|
|
const option = document.createElement("option");
|
|
option.value = username;
|
|
option.textContent = username;
|
|
toUserSelect.appendChild(option);
|
|
toUserSelect.value = username;
|
|
}
|
|
|
|
document.getElementById("content")?.focus();
|
|
}
|
|
|
|
/**
|
|
* 打开指定用户的名片弹窗。
|
|
*
|
|
* @param {string} username
|
|
* @returns {void}
|
|
*/
|
|
export function openUserCard(username) {
|
|
const normalizedUsername = String(username)
|
|
.replace(/^[\u3010\[【\s]+|[\u3011\]】\s]+$/g, "")
|
|
.trim();
|
|
|
|
if (!normalizedUsername) {
|
|
return;
|
|
}
|
|
|
|
if (!window.Alpine) {
|
|
console.warn("[openUserCard] Alpine.js 尚未初始化,请稍后再试");
|
|
return;
|
|
}
|
|
|
|
const container = document.getElementById("user-modal-container");
|
|
if (!container) {
|
|
return;
|
|
}
|
|
|
|
window.Alpine.$data(container)?.fetchUser?.(normalizedUsername);
|
|
}
|
|
|
|
/**
|
|
* 暴露用户名快捷操作给存量 Blade 调用点。
|
|
*
|
|
* @returns {void}
|
|
*/
|
|
export function bindUserTargetActions() {
|
|
if (typeof window === "undefined") {
|
|
return;
|
|
}
|
|
|
|
window.switchTarget = switchTarget;
|
|
window.openUserCard = openUserCard;
|
|
}
|