d9de3fe784
Embed UI looked unstyled because hub_bridge no longer registers lib/common/static. Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
3.6 KiB
Python
69 lines
3.6 KiB
Python
"""Serve shared UI assets from lib/common/static under /static/*."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
from flask import Flask, Response, send_file
|
|
|
|
from lib.paths import common_static_dir
|
|
|
|
# mime by extension; listed names are served from lib/common/static
|
|
_COMMON_STATIC_ASSETS: dict[str, str] = {
|
|
"instance_theme.js": "application/javascript; charset=utf-8",
|
|
"instance_theme_early.css": "text/css; charset=utf-8",
|
|
"instance_theme.css": "text/css; charset=utf-8",
|
|
"account_risk_badge.css": "text/css; charset=utf-8",
|
|
"account_risk_badge.js": "application/javascript; charset=utf-8",
|
|
"instance_ui.js": "application/javascript; charset=utf-8",
|
|
"instance_records_mobile.js": "application/javascript; charset=utf-8",
|
|
"records_review_page.js": "application/javascript; charset=utf-8",
|
|
"form_submit_guard.js": "application/javascript; charset=utf-8",
|
|
"autofill_guard.js": "application/javascript; charset=utf-8",
|
|
"open_submit_gate.js": "application/javascript; charset=utf-8",
|
|
"key_monitor_form.js": "application/javascript; charset=utf-8",
|
|
"time_close_ui.js": "application/javascript; charset=utf-8",
|
|
"manual_order_rr_preview.js": "application/javascript; charset=utf-8",
|
|
"symbol_live_price.js": "application/javascript; charset=utf-8",
|
|
"journal_upload_slots.js": "application/javascript; charset=utf-8",
|
|
"journal_form_save.js": "application/javascript; charset=utf-8",
|
|
"instance_page.css": "text/css; charset=utf-8",
|
|
"instance_embed.js": "application/javascript; charset=utf-8",
|
|
"instance_mobile_nav.js": "application/javascript; charset=utf-8",
|
|
"instance_stats.js": "application/javascript; charset=utf-8",
|
|
"instance_live.js": "application/javascript; charset=utf-8",
|
|
"instance_settings_prefs.js": "application/javascript; charset=utf-8",
|
|
"instance_dashboard.js": "application/javascript; charset=utf-8",
|
|
"account_ledger.js": "application/javascript; charset=utf-8",
|
|
"options_expiry_countdown.js": "application/javascript; charset=utf-8",
|
|
"options_panel.js": "application/javascript; charset=utf-8",
|
|
"options_settings.js": "application/javascript; charset=utf-8",
|
|
"options_position_cards.js": "application/javascript; charset=utf-8",
|
|
"options_review.js": "application/javascript; charset=utf-8",
|
|
"hedge_plan.js": "application/javascript; charset=utf-8",
|
|
"order_entry_model.js": "application/javascript; charset=utf-8",
|
|
"focus_chart_page.js": "application/javascript; charset=utf-8",
|
|
"focus_chart_page.css": "text/css; charset=utf-8",
|
|
"trade_stats_calendar.js": "application/javascript; charset=utf-8",
|
|
"trade_stats_calendar.css": "text/css; charset=utf-8",
|
|
}
|
|
|
|
|
|
def install_common_static(app: Flask, repo_root: str | None = None) -> None:
|
|
"""Register /static/<asset> for shared CSS/JS (replaces hub_bridge mount)."""
|
|
repo_static = common_static_dir(repo_root)
|
|
for name, mime in _COMMON_STATIC_ASSETS.items():
|
|
path = os.path.join(repo_static, name)
|
|
|
|
def _view(p: str = path, m: str = mime):
|
|
if not os.path.isfile(p):
|
|
return Response("not found", status=404, mimetype="text/plain; charset=utf-8")
|
|
return send_file(p, mimetype=m)
|
|
|
|
endpoint = f"common_static_{name.replace('.', '_').replace('-', '_')}"
|
|
# 覆盖同名旧路由(若有),确保样式一定从 lib/common/static 提供
|
|
try:
|
|
app.add_url_rule(f"/static/{name}", endpoint=endpoint, view_func=_view)
|
|
except AssertionError:
|
|
# endpoint 已存在时替换 view
|
|
app.view_functions[endpoint] = _view
|