From 04f152a8735b1c17ebfe61a0de6ee52ff826ed2e Mon Sep 17 00:00:00 2001 From: urbnywrt Date: Fri, 15 May 2026 00:19:50 +0300 Subject: [PATCH] feat: add Jinja2 admin UI templates --- app/templates/base.html | 42 +++++++++++++++++++- app/templates/config_detail.html | 66 +++++++++++++++++++++++++++++++- app/templates/config_form.html | 21 +++++++++- app/templates/index.html | 51 +++++++++++++++++++++++- app/templates/logs.html | 41 +++++++++++++++++++- app/templates/sub_form.html | 20 +++++++++- 6 files changed, 235 insertions(+), 6 deletions(-) diff --git a/app/templates/base.html b/app/templates/base.html index 7f16efb..bdbde30 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1 +1,41 @@ -{% block content %}{% endblock %} + + + + + + Mihomo Expander + + + +
+ Mihomo Expander +
+
+ {% block content %}{% endblock %} +
+ + diff --git a/app/templates/config_detail.html b/app/templates/config_detail.html index 50ad955..0506e22 100644 --- a/app/templates/config_detail.html +++ b/app/templates/config_detail.html @@ -1 +1,65 @@ -{% extends "base.html" %}{% block content %}detail{% endblock %} +{% extends "base.html" %} +{% block content %} +
+

{{ config.name }}

+
+
+ +
+
+ +
+
+
+ +
+

Client URL

+
{{ request.url.scheme }}://{{ request.url.netloc }}/config/{{ config.token }}.yaml
+
+ +
+

Base YAML

+
+ +
+ +
+
+
+ +
+
+

Subscriptions

+ + Add +
+ {% if subscriptions %} + + + + + + {% for sub in subscriptions %} + + + + + + + {% endfor %} + +
NameURLLast Fetched
{{ sub.name }}{{ sub.url }}{{ sub.last_fetched_at.strftime('%Y-%m-%d %H:%M') if sub.last_fetched_at else '—' }} +
+ +
+
+ {% else %} +

No subscriptions. Add one above.

+ {% endif %} +
+ +
+ View Export Logs + ← Back +
+{% endblock %} diff --git a/app/templates/config_form.html b/app/templates/config_form.html index f95561e..dde51e0 100644 --- a/app/templates/config_form.html +++ b/app/templates/config_form.html @@ -1 +1,20 @@ -{% extends "base.html" %}{% block content %}form{% endblock %} +{% extends "base.html" %} +{% block content %} +

{{ "Edit Config" if config else "New Config" }}

+
+
+ {% if not config %} +
+ + +
+ {% endif %} +
+ + +
+ + Cancel +
+
+{% endblock %} diff --git a/app/templates/index.html b/app/templates/index.html index 148a828..0cd30fe 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -1 +1,50 @@ -{% extends "base.html" %}{% block content %}index{% endblock %} +{% extends "base.html" %} +{% block content %} +
+

Configs

+ + New Config +
+ +{% if configs %} + + + + + + + + + + + + {% for config in configs %} + + + + + + + + {% endfor %} + +
NameClient URLLast ExportNodesActions
{{ config.name }} + {{ request.url.scheme }}://{{ request.url.netloc }}/config/{{ config.token }}.yaml + + {% set log = last_logs[config.id] %} + {% if log %} + + {{ log.fetched_at.strftime('%Y-%m-%d %H:%M') }} + + {% else %} + Never + {% endif %} + {{ last_logs[config.id].node_count if last_logs[config.id] else '—' }} + Edit + Logs +
+{% else %} +
+

No configs yet. Create one.

+
+{% endif %} +{% endblock %} diff --git a/app/templates/logs.html b/app/templates/logs.html index bc545dd..4c8b81a 100644 --- a/app/templates/logs.html +++ b/app/templates/logs.html @@ -1 +1,40 @@ -{% extends "base.html" %}{% block content %}logs{% endblock %} +{% extends "base.html" %} +{% block content %} +
+

Export Logs — {{ config.name }}

+ ← Back +
+ +{% if logs %} + + + + + + + + + + + {% for log in logs %} + + + + + + + {% endfor %} + +
TimeStatusNodesError
{{ log.fetched_at.strftime('%Y-%m-%d %H:%M:%S') }} + {% if log.success %} + ✓ OK + {% else %} + ✗ Failed + {% endif %} + {{ log.node_count }}{{ log.error_message or '' }}
+{% else %} +
+

No export logs yet.

+
+{% endif %} +{% endblock %} diff --git a/app/templates/sub_form.html b/app/templates/sub_form.html index 6a0fe35..8e40b35 100644 --- a/app/templates/sub_form.html +++ b/app/templates/sub_form.html @@ -1 +1,19 @@ -{% extends "base.html" %}{% block content %}sub{% endblock %} +{% extends "base.html" %} +{% block content %} +

Add Subscription to "{{ config.name }}"

+
+
+
+ + +
+
+ + +
+ + Cancel +
+
+{% endblock %}