76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
// 聊天室上下文初始化模块,从 Blade 输出的 JSON 数据节点恢复 window.chatContext。
|
|
|
|
const CHAT_CONTEXT_ELEMENT_ID = "chat-context-data";
|
|
|
|
/**
|
|
* 读取并解析 Blade 注入的聊天室上下文 JSON。
|
|
*
|
|
* @returns {Record<string, any>}
|
|
*/
|
|
function readChatContextPayload() {
|
|
const element = document.getElementById(CHAT_CONTEXT_ELEMENT_ID);
|
|
|
|
if (!element) {
|
|
return {};
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(element.textContent || "{}");
|
|
} catch (error) {
|
|
console.error("[chatContext] 初始化数据解析失败", error);
|
|
return {};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 使用模板生成带 ID 的 URL。
|
|
*
|
|
* @param {string} template URL 模板
|
|
* @param {number|string} id 资源 ID
|
|
* @returns {string}
|
|
*/
|
|
function fillIdTemplate(template, id) {
|
|
return String(template || "").replace("__ID__", encodeURIComponent(id));
|
|
}
|
|
|
|
/**
|
|
* 恢复婚姻系统 URL 工厂函数,兼容存量调用方式。
|
|
*
|
|
* @param {Record<string, any>} context 聊天室上下文
|
|
* @returns {void}
|
|
*/
|
|
function hydrateMarriageUrlFactories(context) {
|
|
const marriage = context.marriage || {};
|
|
|
|
marriage.acceptUrl = (id) => fillIdTemplate(marriage.acceptUrlTemplate, id);
|
|
marriage.rejectUrl = (id) => fillIdTemplate(marriage.rejectUrlTemplate, id);
|
|
marriage.divorceUrl = (id) => fillIdTemplate(marriage.divorceUrlTemplate, id);
|
|
marriage.confirmDivorceUrl = (id) => fillIdTemplate(marriage.confirmDivorceUrlTemplate, id);
|
|
marriage.rejectDivorceUrl = (id) => fillIdTemplate(marriage.rejectDivorceUrlTemplate, id);
|
|
marriage.weddingSetupUrl = (id) => fillIdTemplate(marriage.weddingSetupUrlTemplate, id);
|
|
marriage.claimEnvelopeUrl = (id, ceremonyId) => fillIdTemplate(
|
|
fillIdTemplate(marriage.claimEnvelopeUrlTemplate, id),
|
|
ceremonyId,
|
|
);
|
|
marriage.envelopeStatusUrl = (id) => fillIdTemplate(marriage.envelopeStatusUrlTemplate, id);
|
|
|
|
context.marriage = marriage;
|
|
}
|
|
|
|
/**
|
|
* 初始化 window.chatContext,供后续聊天室模块和存量 Blade 脚本读取。
|
|
*
|
|
* @returns {Record<string, any>}
|
|
*/
|
|
export function initializeChatContext() {
|
|
// Blade 底部仍有同步脚本会立即读取 chatContext;若兼容桥已初始化,这里只做函数补齐。
|
|
const context = window.chatContext || readChatContextPayload();
|
|
hydrateMarriageUrlFactories(context);
|
|
|
|
window.chatContext = context;
|
|
|
|
return context;
|
|
}
|
|
|
|
initializeChatContext();
|