connected_apps.html 61 lignes · 3029 octets
<!DOCTYPE html>
<html lang="{{ current_locale }}">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ page_title }}</title>
    <link href="/static/css/tailwind.css" rel="stylesheet">
    <link href="/static/css/custom.css" rel="stylesheet">
</head>
<body class="min-h-screen bg-base-200 px-4 py-8">
    <main class="container mx-auto max-w-3xl">
        <header class="mb-6">
            <h1 class="text-3xl font-bold mb-2">{{ heading }}</h1>
            <p class="text-base-content/70">{{ subtitle }}</p>
        </header>

        {% if has_rows %}
        <section class="card bg-base-100 shadow-xl mb-6">
            <div class="card-body">
                <div class="overflow-x-auto">
                    <table class="table table-zebra">
                        <thead>
                            <tr>
                                <th>{{ table_domain }}</th>
                                <th>{{ table_count }}</th>
                                <th>{{ table_last_seen }}</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% for row in rows %}
                            <tr>
                                <td class="font-mono">{{ row.domain }}</td>
                                <td>{{ row.session_count }}</td>
                                <td class="text-base-content/70">{{ row.last_seen }}</td>
                            </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
                <div class="alert alert-info mt-4" role="status">
                    <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>
                    <span>{{ revoke_note }}</span>
                </div>
            </div>
        </section>
        {% else %}
        <section class="card bg-base-200 shadow-inner mb-6" aria-label="empty-state">
            <div class="card-body items-center text-center py-12">
                <svg xmlns="http://www.w3.org/2000/svg" class="h-16 w-16 text-base-content/30 mb-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" /></svg>
                <h3 class="text-lg font-semibold">{{ empty_title }}</h3>
                <p class="text-base-content/70 max-w-md">{{ empty_body }}</p>
            </div>
        </section>
        {% endif %}

        <div class="flex justify-end">
            <a href="/profile" class="btn btn-ghost">{{ back_to_profile }}</a>
        </div>
    </main>
</body>
</html>