|
24 | 24 | const mod = {}; |
25 | 25 | const S = window.appState; |
26 | 26 | // const C = window.appConst; // not used in this module currently |
| 27 | + const MAIN_UI_HIDDEN_BY_MODEL_MANAGER_KEY = '__NEKO_MAIN_UI_HIDDEN_BY_MODEL_MANAGER'; |
27 | 28 |
|
28 | 29 | // ===================================================================== |
29 | 30 | // Message deduplication (BC + postMessage deliver the same message twice) |
|
43 | 44 | return false; |
44 | 45 | } |
45 | 46 |
|
| 47 | + function isMainUIHiddenByModelManager() { |
| 48 | + return window[MAIN_UI_HIDDEN_BY_MODEL_MANAGER_KEY] === true; |
| 49 | + } |
| 50 | + |
| 51 | + function ensureMainUIHiddenStyle() { |
| 52 | + if (document.getElementById('neko-main-ui-hidden-by-model-manager-style')) return; |
| 53 | + var style = document.createElement('style'); |
| 54 | + style.id = 'neko-main-ui-hidden-by-model-manager-style'; |
| 55 | + style.textContent = [ |
| 56 | + 'body.neko-main-ui-hidden-by-model-manager #live2d-container,', |
| 57 | + 'body.neko-main-ui-hidden-by-model-manager #vrm-container,', |
| 58 | + 'body.neko-main-ui-hidden-by-model-manager #mmd-container,', |
| 59 | + 'body.neko-main-ui-hidden-by-model-manager #live2d-canvas,', |
| 60 | + 'body.neko-main-ui-hidden-by-model-manager #vrm-canvas,', |
| 61 | + 'body.neko-main-ui-hidden-by-model-manager #mmd-canvas,', |
| 62 | + 'body.neko-main-ui-hidden-by-model-manager #live2d-floating-buttons,', |
| 63 | + 'body.neko-main-ui-hidden-by-model-manager #vrm-floating-buttons,', |
| 64 | + 'body.neko-main-ui-hidden-by-model-manager #mmd-floating-buttons,', |
| 65 | + 'body.neko-main-ui-hidden-by-model-manager #live2d-lock-icon,', |
| 66 | + 'body.neko-main-ui-hidden-by-model-manager #vrm-lock-icon,', |
| 67 | + 'body.neko-main-ui-hidden-by-model-manager #mmd-lock-icon,', |
| 68 | + 'body.neko-main-ui-hidden-by-model-manager #live2d-return-button-container,', |
| 69 | + 'body.neko-main-ui-hidden-by-model-manager #vrm-return-button-container,', |
| 70 | + 'body.neko-main-ui-hidden-by-model-manager #mmd-return-button-container {', |
| 71 | + ' display: none !important;', |
| 72 | + ' visibility: hidden !important;', |
| 73 | + ' pointer-events: none !important;', |
| 74 | + '}' |
| 75 | + ].join('\n'); |
| 76 | + (document.head || document.documentElement).appendChild(style); |
| 77 | + } |
| 78 | + |
| 79 | + function setMainUIHiddenByModelManager(hidden) { |
| 80 | + window[MAIN_UI_HIDDEN_BY_MODEL_MANAGER_KEY] = !!hidden; |
| 81 | + ensureMainUIHiddenStyle(); |
| 82 | + if (document.body) { |
| 83 | + document.body.classList.toggle('neko-main-ui-hidden-by-model-manager', !!hidden); |
| 84 | + } |
| 85 | + try { |
| 86 | + window.dispatchEvent(new CustomEvent('neko:main-ui-hidden-by-model-manager-changed', { |
| 87 | + detail: { hidden: !!hidden } |
| 88 | + })); |
| 89 | + } catch (_) {} |
| 90 | + } |
| 91 | + |
46 | 92 | function applyTutorialChatIdentityOverride(payload) { |
47 | 93 | var detail = payload || {}; |
48 | 94 | if (detail.active) { |
|
892 | 938 | window._modelReloadInFlight = false; |
893 | 939 | resolveReload(); |
894 | 940 |
|
| 941 | + // If the model manager is still open, keep the Pet UI hidden even |
| 942 | + // though the reload path briefly re-created containers/buttons. |
| 943 | + if (isMainUIHiddenByModelManager()) { |
| 944 | + console.log('[Model] 主界面处于模型管理隐藏状态,模型重载完成后重新隐藏 UI'); |
| 945 | + handleHideMainUI({ preserveHiddenState: true }); |
| 946 | + } |
| 947 | + |
895 | 948 | // Process any queued reload request |
896 | 949 | if (window._pendingModelReload) { |
897 | 950 | console.log('[Model] 执行待处理的模型重载请求'); |
|
1131 | 1184 | /** |
1132 | 1185 | * Hide main-page model rendering (entering model manager). |
1133 | 1186 | */ |
1134 | | - function handleHideMainUI() { |
| 1187 | + function handleHideMainUI(options) { |
1135 | 1188 | if (!_isModelHostPage()) return; |
| 1189 | + options = options || {}; |
| 1190 | + var skipHiddenStateUpdate = options.skipHiddenStateUpdate || options.preserveHiddenState; |
| 1191 | + if (!skipHiddenStateUpdate) { |
| 1192 | + setMainUIHiddenByModelManager(true); |
| 1193 | + } |
1136 | 1194 | console.log('[UI] 隐藏主界面并暂停渲染'); |
1137 | 1195 |
|
1138 | 1196 | try { |
|
1206 | 1264 | '#live2d-lock-icon, #vrm-lock-icon, #mmd-lock-icon, ' + |
1207 | 1265 | '#live2d-return-button-container, #vrm-return-button-container, #mmd-return-button-container' |
1208 | 1266 | ).forEach(function (el) { |
1209 | | - var computedDisplay = ''; |
1210 | | - try { |
1211 | | - computedDisplay = window.getComputedStyle(el).display || ''; |
1212 | | - } catch (_) {} |
1213 | | - el.dataset.nekoPreHideDisplay = computedDisplay && computedDisplay !== 'none' |
1214 | | - ? computedDisplay |
1215 | | - : (el.style.display || 'none'); |
| 1267 | + if (!el.dataset.nekoPreHideDisplay) { |
| 1268 | + var computedDisplay = ''; |
| 1269 | + try { |
| 1270 | + computedDisplay = window.getComputedStyle(el).display || ''; |
| 1271 | + } catch (_) {} |
| 1272 | + el.dataset.nekoPreHideDisplay = computedDisplay && computedDisplay !== 'none' |
| 1273 | + ? computedDisplay |
| 1274 | + : (el.style.display || 'none'); |
| 1275 | + } |
1216 | 1276 | el.style.display = 'none'; |
1217 | 1277 | }); |
1218 | 1278 | } catch (error) { |
|
1225 | 1285 | */ |
1226 | 1286 | function handleShowMainUI() { |
1227 | 1287 | if (!_isModelHostPage()) return; |
| 1288 | + setMainUIHiddenByModelManager(false); |
1228 | 1289 | // 模型重载进行中时跳过:handleModelReload 自己会正确切换容器, |
1229 | 1290 | // 此时 lanlan_config.model_type 尚未更新,handleShowMainUI 会 |
1230 | 1291 | // 错误地恢复旧模型类型的容器,导致需要切换两次才能成功。 |
|
2277 | 2338 | mod.resetToDefaultModel = resetToDefaultModel; |
2278 | 2339 | mod.handleHideMainUI = handleHideMainUI; |
2279 | 2340 | mod.handleShowMainUI = handleShowMainUI; |
| 2341 | + mod.isMainUIHiddenByModelManager = isMainUIHiddenByModelManager; |
2280 | 2342 | mod.handleMemoryEdited = handleMemoryEdited; |
2281 | 2343 | mod.cleanupLive2DOverlayUI = cleanupLive2DOverlayUI; |
2282 | 2344 | mod.cleanupVRMOverlayUI = cleanupVRMOverlayUI; |
|
2292 | 2354 | window.resetToDefaultModel = resetToDefaultModel; |
2293 | 2355 | window.handleHideMainUI = handleHideMainUI; |
2294 | 2356 | window.handleShowMainUI = handleShowMainUI; |
| 2357 | + window.isMainUIHiddenByModelManager = isMainUIHiddenByModelManager; |
2295 | 2358 | window.cleanupLive2DOverlayUI = cleanupLive2DOverlayUI; |
2296 | 2359 | window.cleanupVRMOverlayUI = cleanupVRMOverlayUI; |
2297 | 2360 | window.cleanupMMDOverlayUI = cleanupMMDOverlayUI; |
|
0 commit comments