From 3708bd7381bcb154a5321c0eee4cf6ebdc3f09a3 Mon Sep 17 00:00:00 2001 From: OpenClaw Assistant Date: Tue, 3 Mar 2026 11:39:50 +0300 Subject: [PATCH] fix(lampa): add DOM fallback for left menu item --- integrations/lampa/p365x-plugin.js | 47 ++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/integrations/lampa/p365x-plugin.js b/integrations/lampa/p365x-plugin.js index 642560b..d66da35 100644 --- a/integrations/lampa/p365x-plugin.js +++ b/integrations/lampa/p365x-plugin.js @@ -213,11 +213,46 @@ log('UI mounted'); } + function injectLeftMenuDomFallback() { + try { + if (qs('#p365x-left-menu-item')) return true; + + var host = qs('.menu .menu__list') || qs('.menu__list') || qs('.menu .menu__body') || qs('.menu'); + if (!host) return false; + + var item = ce('div', 'menu__item selector'); + item.id = 'p365x-left-menu-item'; + item.setAttribute('data-action', 'p365x'); + item.innerHTML = '' + + '' + + ''; + + item.addEventListener('click', function (e) { + e.preventDefault(); + e.stopPropagation(); + openPanel(); + }); + + host.appendChild(item); + log('Left menu entry injected via DOM fallback'); + return true; + } catch (e) { + log('DOM fallback menu error: ' + (e && e.message ? e.message : e)); + return false; + } + } + function registerLeftMenuEntry() { try { if (!window.Lampa) return; - // Основной путь: пункт в левом меню + var added = false; + if (Lampa.Menu && typeof Lampa.Menu.add === 'function') { Lampa.Menu.add({ title: 'P365X', @@ -228,9 +263,17 @@ action: function () { openPanel(); } }); log('Left menu entry registered via Lampa.Menu.add'); + added = true; + } + + // Доп. фолбэк: принудительная вставка в DOM левого меню + if (!added) { + injectLeftMenuDomFallback(); + // повторная попытка, т.к. меню иногда рисуется позже + setTimeout(injectLeftMenuDomFallback, 1200); + setTimeout(injectLeftMenuDomFallback, 3000); } - // Фолбэк: оставим кнопку в настройках, если API меню недоступно if (Lampa.SettingsApi && typeof Lampa.SettingsApi.addParam === 'function') { Lampa.SettingsApi.addParam({ component: 'interface',