Add hub iframe embed shell with tab fragment API.

Replace full-page soft nav with a persistent shell and /api/embed/page loads so tab switches in the hub iframe avoid document.write flicker.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 01:13:34 +08:00
parent 157d9ada21
commit 4ad335ca84
15 changed files with 2711 additions and 31 deletions
+49
View File
@@ -0,0 +1,49 @@
"""One-off: extract instance_page.css / instance_page_boot.js from gate index.html."""
from __future__ import annotations
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
src = ROOT / "crypto_monitor_gate" / "templates" / "index.html"
text = src.read_text(encoding="utf-8")
m = re.search(r"<style>(.*?)</style>", text, re.S)
if m:
(ROOT / "static" / "instance_page.css").write_text(m.group(1).strip() + "\n", encoding="utf-8")
marker = '<script src="/static/manual_order_rr_preview.js?v=3"></script>'
if marker in text:
part = text.split(marker, 1)[1]
m2 = re.search(r"<script>(.*?)</script>\s*</body>", part, re.S)
if m2:
boot = m2.group(1).strip()
boot = boot.replace(
"setInterval(refreshAccountSnapshot, {{ balance_refresh_seconds * 1000 }});",
"setInterval(refreshAccountSnapshot, Number(document.body.dataset.balanceRefreshMs || 30000));",
)
boot = boot.replace(
"setInterval(refreshPriceSnapshotConditional, {{ price_refresh_seconds * 1000 }});",
"setInterval(refreshPriceSnapshotConditional, Number(document.body.dataset.priceRefreshMs || 5000));",
)
(ROOT / "static" / "instance_page_boot.js").write_text(boot + "\n", encoding="utf-8")
part2 = text.split(marker, 1)[1]
m3 = re.search(r"<script>(.*?)</script>\s*</body>", part2, re.S)
if m3:
boot_tpl = m3.group(1).strip()
boot_tpl = boot_tpl.replace(
"setInterval(refreshAccountSnapshot, {{ balance_refresh_seconds * 1000 }});",
"setInterval(refreshAccountSnapshot, Number(document.body.dataset.balanceRefreshMs || 30000));",
)
boot_tpl = boot_tpl.replace(
"setInterval(refreshPriceSnapshotConditional, {{ price_refresh_seconds * 1000 }});",
"setInterval(refreshPriceSnapshotConditional, Number(document.body.dataset.priceRefreshMs || 5000));",
)
embed_dir = ROOT / "embed_templates"
embed_dir.mkdir(exist_ok=True)
(embed_dir / "embed_boot_scripts.html").write_text(
"<script>\n" + boot_tpl + "\n</script>\n", encoding="utf-8"
)
print("done")