fix(lampa): add DOM fallback for left menu item
This commit is contained in:
@@ -213,11 +213,46 @@
|
|||||||
log('UI mounted');
|
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() {
|
function registerLeftMenuEntry() {
|
||||||
try {
|
try {
|
||||||
if (!window.Lampa) return;
|
if (!window.Lampa) return;
|
||||||
|
|
||||||
// Основной путь: пункт в левом меню
|
var added = false;
|
||||||
|
|
||||||
if (Lampa.Menu && typeof Lampa.Menu.add === 'function') {
|
if (Lampa.Menu && typeof Lampa.Menu.add === 'function') {
|
||||||
Lampa.Menu.add({
|
Lampa.Menu.add({
|
||||||
title: 'P365X',
|
title: 'P365X',
|
||||||
@@ -228,9 +263,17 @@
|
|||||||
action: function () { openPanel(); }
|
action: function () { openPanel(); }
|
||||||
});
|
});
|
||||||
log('Left menu entry registered via Lampa.Menu.add');
|
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') {
|
if (Lampa.SettingsApi && typeof Lampa.SettingsApi.addParam === 'function') {
|
||||||
Lampa.SettingsApi.addParam({
|
Lampa.SettingsApi.addParam({
|
||||||
component: 'interface',
|
component: 'interface',
|
||||||
|
|||||||
Reference in New Issue
Block a user