fix(ui): restore index.html; add Ozon to panel promo

Repair broken HTML merge. Extend /api/panel/footer with PANEL_FOOTER_OZON_URL (default Ozon СБП) and labels in strip+footer.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Андрей Бобырев
2026-05-15 04:12:25 +03:00
parent 9d751922fb
commit c72a7b9c02
6 changed files with 45 additions and 18 deletions

View File

@@ -174,11 +174,15 @@ async function hydratePanelPromoFooter() {
const strip = document.getElementById("panel-promo-strip");
const sub = document.getElementById("panel-promo-subtitle");
const aDonTop = document.getElementById("panel-strip-donate");
const sepTop = document.getElementById("panel-strip-sep");
const sepDO = document.getElementById("panel-strip-sep-donate-ozon");
const aOzonTop = document.getElementById("panel-strip-ozon");
const sepOT = document.getElementById("panel-strip-sep-ozon-tg");
const aTgTop = document.getElementById("panel-strip-telegram");
const gap1 = document.getElementById("footer-promo-gap1");
const aDonF = document.getElementById("footer-promo-donate");
const sepMid = document.getElementById("footer-promo-sep-mid");
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 {
@@ -191,18 +195,25 @@ async function hydratePanelPromoFooter() {
if (sub) sub.textContent = subtitle;
const okD = wirePanelPromoAnchor(aDonTop, j.donateUrl, j.donateLabel);
const okO = wirePanelPromoAnchor(aOzonTop, j.ozonUrl, j.ozonLabel);
const okT = wirePanelPromoAnchor(aTgTop, j.telegramUrl, j.telegramLabel);
if (sepTop) sepTop.classList.toggle("hidden", !(okD && okT));
if (sepDO) sepDO.classList.toggle("hidden", !(okD && (okO || okT)));
if (sepOT) sepOT.classList.toggle("hidden", !(okO && okT));
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 || footerT));
if (sepMid) sepMid.classList.toggle("hidden", !(footerD && footerT));
if (strip && (okD || okT)) strip.classList.remove("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));
if (strip && (okD || okO || okT)) strip.classList.remove("hidden");
} catch {
/* офлайн или сбой — блок остаётся скрытым */
}

View File

@@ -7,7 +7,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<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 rel="stylesheet" href="/styles.css?v=1.2.21">
<link rel="stylesheet" href="/styles.css?v=1.2.22">
<script>
(function () {
try {
@@ -28,7 +28,9 @@
<p id="panel-promo-subtitle" class="panel-promo-subtitle muted"></p>
<div class="panel-promo-links">
<a id="panel-strip-donate" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
<span id="panel-strip-sep" class="panel-promo-sep hidden" aria-hidden="true">·</span>
<span id="panel-strip-sep-donate-ozon" class="panel-promo-sep hidden" aria-hidden="true">·</span>
<a id="panel-strip-ozon" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
<span id="panel-strip-sep-ozon-tg" class="panel-promo-sep hidden" aria-hidden="true">·</span>
<a id="panel-strip-telegram" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
</div>
</div>
@@ -159,7 +161,7 @@
<div class="panel-fold-body">
<p class="muted warp-intro mtproto-intro">
<strong>В базовой панели (FREE).</strong> Отдельный Dockerконтейнер (образ Telegram), публикация порта на хосте VPS.
Ссылка вида <code class="inline">tg://proxy?…</code> появляется, если задан <code class="inline">MTPRO_PUBLIC_HOST</code> или <code class="inline">CLIENT_CONFIG_ENDPOINT</code>
Ссылка вида <code class="inline">tg://proxy?…</code> может появляться без env, если панель открыта по публичному IP/DNS; для фиксированного хоста задайте <code class="inline">MTPRO_PUBLIC_HOST</code> или <code class="inline">CLIENT_CONFIG_ENDPOINT</code>
(переменные контейнера панели, см. install.sh README).
Сохраните <strong>секрет</strong>, который показывается один раз после установки — в интерфейсе он маскируется.
</p>
@@ -264,13 +266,15 @@
<strong class="support-title">amnezia_web</strong>
<span class="support-sep" aria-hidden="true">·</span>
<a href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">GitHub</a>
<span id="footer-promo-gap1" class="support-sep support-footer-promo-gap hidden" aria-hidden="true">·</span>
<span id="footer-promo-gap1" class="support-sep hidden" aria-hidden="true">·</span>
<a id="footer-promo-donate" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
<span id="footer-promo-sep-mid" class="support-sep hidden" aria-hidden="true">·</span>
<span id="footer-promo-sep-donate-ozon" class="support-sep hidden" aria-hidden="true">·</span>
<a id="footer-promo-ozon" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
<span id="footer-promo-sep-ozon-tg" class="support-sep hidden" aria-hidden="true">·</span>
<a id="footer-promo-telegram" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
</div>
<p class="support-blurb">
Базовая панель: AWGклиенты, статусы и MTProtoпрокси (Docker). Ссылки поддержки автора только в этом интерфейсе панели, не на отдельных пользовательских лендингах.
Базовая панель: AWGклиенты, статусы и MTProtoпрокси (Docker). Ссылки поддержки (Boosty, Ozon СБП, Telegram) подставляются из настроек сервера только в этом интерфейсе, не на пользовательских лендингах.
</p>
</footer>
@@ -308,6 +312,6 @@
</div>
</dialog>
<script src="/app.js?v=1.2.21" type="module"></script>
<script src="/app.js?v=1.2.22" type="module"></script>
</body>
</html>