mirror of
https://github.com/andrey271192/amnezia_web.git
synced 2026-09-20 14:41:59 +00:00
fix: restore panel boot after PRO refactor
hydratePanelPromoFooter was removed in 90f9443 but still called at
module load, causing ReferenceError and leaving login/app hidden.
Restore footer hydration; drop yellow promo strip from panel UI.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amnezia-admin",
|
"name": "amnezia-admin",
|
||||||
"version": "1.2.29",
|
"version": "1.2.30",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "amnezia_web — открытая базовая веб-панель AmneziaWG на VPS (Docker): просмотр и удаление клиентов, MTProto-прокси.",
|
"description": "amnezia_web — открытая базовая веб-панель AmneziaWG на VPS (Docker): просмотр и удаление клиентов, MTProto-прокси.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1666,6 +1666,54 @@ function initThemeSwitch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Ссылки доната в подвале панели (`GET /api/panel/footer`). */
|
||||||
|
function wirePanelPromoAnchor(el, url, label) {
|
||||||
|
const u = typeof url === "string" ? url.trim() : "";
|
||||||
|
const lb = typeof label === "string" ? label.trim() : "";
|
||||||
|
if (!el || !u || !lb) {
|
||||||
|
if (el) {
|
||||||
|
el.classList.add("hidden");
|
||||||
|
el.removeAttribute("href");
|
||||||
|
el.textContent = "";
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
el.href = u;
|
||||||
|
el.textContent = lb;
|
||||||
|
el.classList.remove("hidden");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function hydratePanelPromoFooter() {
|
||||||
|
const gap1 = document.getElementById("footer-promo-gap1");
|
||||||
|
const aDonF = document.getElementById("footer-promo-donate");
|
||||||
|
const fSepDO = document.getElementById("footer-promo-sep-donate-ozon");
|
||||||
|
const aOzonF = document.getElementById("footer-promo-ozon");
|
||||||
|
const fSepOT = document.getElementById("footer-promo-sep-ozon-tg");
|
||||||
|
const aTgF = document.getElementById("footer-promo-telegram");
|
||||||
|
|
||||||
|
try {
|
||||||
|
const r = await fetch("/api/panel/footer", { credentials: "same-origin" });
|
||||||
|
if (!r.ok) return;
|
||||||
|
const j = await r.json().catch(() => null);
|
||||||
|
if (!j || typeof j !== "object") return;
|
||||||
|
|
||||||
|
wirePanelPromoAnchor(aDonF, j.donateUrl, j.donateLabel);
|
||||||
|
wirePanelPromoAnchor(aOzonF, j.ozonUrl, j.ozonLabel);
|
||||||
|
wirePanelPromoAnchor(aTgF, j.telegramUrl, j.telegramLabel);
|
||||||
|
|
||||||
|
const footerD = aDonF && !aDonF.classList.contains("hidden");
|
||||||
|
const footerO = aOzonF && !aOzonF.classList.contains("hidden");
|
||||||
|
const footerT = aTgF && !aTgF.classList.contains("hidden");
|
||||||
|
|
||||||
|
if (gap1) gap1.classList.toggle("hidden", !(footerD || footerO || footerT));
|
||||||
|
if (fSepDO) fSepDO.classList.toggle("hidden", !(footerD && (footerO || footerT)));
|
||||||
|
if (fSepOT) fSepOT.classList.toggle("hidden", !(footerO && footerT));
|
||||||
|
} catch {
|
||||||
|
/* офлайн или сбой — в HTML уже дефолтные ссылки подвала */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function initMtprotoLinkCopy() {
|
function initMtprotoLinkCopy() {
|
||||||
if (!mtprotoLinkCopyBtn) return;
|
if (!mtprotoLinkCopyBtn) return;
|
||||||
mtprotoLinkCopyBtn.addEventListener("click", async () => {
|
mtprotoLinkCopyBtn.addEventListener("click", async () => {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="/styles.css?v=1.2.29">
|
<link rel="stylesheet" href="/styles.css?v=1.2.30">
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
try {
|
try {
|
||||||
@@ -23,21 +23,6 @@
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body class="page">
|
<body class="page">
|
||||||
<aside id="panel-promo-strip" class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат">
|
|
||||||
<div class="panel-promo-strip-inner">
|
|
||||||
<p id="panel-promo-subtitle" class="panel-promo-subtitle muted">Поддержите через Boosty (или вашу ссылку), Ozon СБП и Telegram — те же ссылки внизу панели. На пользовательские лендинги это не выводится.</p>
|
|
||||||
<div class="panel-promo-links">
|
|
||||||
<a class="panel-promo-a panel-promo-github-fixed" href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">⭐ GitHub</a>
|
|
||||||
<span class="panel-promo-sep" aria-hidden="true">·</span>
|
|
||||||
<a id="panel-strip-donate" class="panel-promo-a" href="https://boosty.to/andrey27/donate" target="_blank" rel="noopener noreferrer">Поддержать проект</a>
|
|
||||||
<span id="panel-strip-sep-donate-ozon" class="panel-promo-sep" aria-hidden="true">·</span>
|
|
||||||
<a id="panel-strip-ozon" class="panel-promo-a" href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">Донат · Ozon СБП</a>
|
|
||||||
<span id="panel-strip-sep-ozon-tg" class="panel-promo-sep" aria-hidden="true">·</span>
|
|
||||||
<a id="panel-strip-telegram" class="panel-promo-a" href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram‑канал спонсора</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<div id="login-gate" class="gate hidden" aria-hidden="true">
|
<div id="login-gate" class="gate hidden" aria-hidden="true">
|
||||||
<div class="gate-card">
|
<div class="gate-card">
|
||||||
<p class="eyebrow">Панель сервера</p>
|
<p class="eyebrow">Панель сервера</p>
|
||||||
@@ -334,7 +319,7 @@
|
|||||||
<a id="footer-promo-telegram" class="support-promo-link" href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram‑канал спонсора</a>
|
<a id="footer-promo-telegram" class="support-promo-link" href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram‑канал спонсора</a>
|
||||||
</div>
|
</div>
|
||||||
<p class="support-blurb">
|
<p class="support-blurb">
|
||||||
AWG‑клиенты, статусы и MTProto‑прокси. Жёлтая шапка поддержки совпадает с подвалом; текст ссылок может подтягиваться с сервера. На пользовательских лендингах блоков поддержки нет.
|
AWG‑клиенты, статусы и MTProto‑прокси. Ссылки поддержки — в подвале; подписи могут подтягиваться с сервера.
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
@@ -372,6 +357,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="/app.js?v=1.2.29" type="module"></script>
|
<script src="/app.js?v=1.2.30" type="module"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user