Added centralized templating system with static asset serving.
CI / Formatting (push) Successful in 13s
CI / Linting (push) Successful in 14s
CI / Tests (Python 3.12) (push) Failing after 29s
CI / Tests (Python 3.13) (push) Failing after 29s
CI / Tests (Python 3.14) (push) Failing after 26s
CI / Type Checking (push) Failing after 25s
CI / Spelling (push) Successful in 13s

This commit is contained in:
2026-02-27 10:05:52 -05:00
parent 4e2c8b4d67
commit 410c0cd791
14 changed files with 238 additions and 152 deletions
@@ -14,19 +14,10 @@
"""Web routes for the custom commands module."""
from pathlib import Path
import jinja2
from aiohttp import web
from owlbot.api import RouteContext, on_route
_template_dir = Path(__file__).resolve().parent / "templates"
_jinja_env = jinja2.Environment(
loader=jinja2.FileSystemLoader(_template_dir),
autoescape=True,
)
@on_route("/list", methods=["GET"])
async def command_list_page(ctx: RouteContext) -> web.Response:
@@ -63,7 +54,5 @@ async def command_list_page(ctx: RouteContext) -> web.Response:
for row in rows
]
template = _jinja_env.get_template("list.html")
page = template.render(commands=commands, prefix=ctx.commands.prefix)
page = ctx.templates.render("list.html", commands=commands, prefix=prefix)
return web.Response(text=page, content_type="text/html")
@@ -1,43 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Custom Commands</title>
<style>
body { font-family: sans-serif; margin: 2rem; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ccc; padding: 0.5rem 0.75rem; text-align: left; }
th { background: #f5f5f5; }
td:nth-child(4), th:nth-child(4),
td:nth-child(5), th:nth-child(5) { text-align: center; }
</style>
</head>
<body>
<h1>Custom Commands</h1>
{% extends "base.html" %}
{% block title %}Custom Commands{% endblock %}
{% block content %}
<h1 class="mb-3">Custom Commands</h1>
{% if commands %}
<table>
<thead><tr>
<th>Command</th>
<th>Aliases</th>
<th>Response</th>
<th>Cooldown</th>
<th>Permissions</th>
</tr></thead>
<tbody>
{% for cmd in commands %}
<tr>
<td>{{ prefix }}{{ cmd.name }}</td>
<td>{{ cmd.aliases }}</td>
<td>{{ cmd.response }}</td>
<td>{{ cmd.cooldown }}</td>
<td>{{ cmd.permissions }}</td>
</tr>
{% endfor %}
</tbody>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Command</th>
<th>Aliases</th>
<th>Response</th>
<th class="text-center">Cooldown</th>
<th class="text-center">Permissions</th>
</tr>
</thead>
<tbody>
{% for cmd in commands %}
<tr>
<td>{{ prefix }}{{ cmd.name }}</td>
<td>{{ cmd.aliases }}</td>
<td>{{ cmd.response }}</td>
<td class="text-center">{{ cmd.cooldown }}</td>
<td class="text-center">{{ cmd.permissions }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No custom commands defined.</p>
{% endif %}
</body>
</html>
{% endblock %}