fix(lampa): add DOM fallback for left menu item
This commit is contained in:
@@ -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 = '' +
|
||||
'<div class="menu__ico">' +
|
||||
'<svg width="24" height="24" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">' +
|
||||
'<circle cx="32" cy="32" r="30" fill="currentColor" opacity="0.18"></circle>' +
|
||||
'<text x="32" y="39" text-anchor="middle" font-size="20" fill="currentColor" font-family="sans-serif">P</text>' +
|
||||
'</svg>' +
|
||||
'</div>' +
|
||||
'<div class="menu__text">P365X</div>';
|
||||
|
||||
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',
|
||||
|
||||
Reference in New Issue
Block a user