- Vendor web_template base.css/base.js (v1.2 bbec859) under public/web_template with sync script - Add views/layout.ejs (fixed upstream EJS comment delimiters, mobile drawer, cmd palette, keys help, WS status, theme toggle) and lib/render.js two-step renderer - Add page routes for /, /workers, /workflows, /executions, /quick, /scheduler (stub views) - helmet with strict nonce CSP (script-src-attr 'none'), /csp-report, report-only toggle - lib/pageauth.js: shared users upsert + HTML 401/403 for page routes - PULSE_DEV_READONLY guard disabling background writers for local testing - public/assets/app.js shared runtime (Pulse namespace, delegated actions, WS singleton, themed confirm modal) and app.css - eslint globals for browser files; ignore vendored assets Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HamVMDrA8RqhyxmUHgiqRp
55 lines
2.3 KiB
Plaintext
55 lines
2.3 KiB
Plaintext
<%#
|
|
Dashboard page (WP-C). Stats + recent manual executions + workers summary.
|
|
All data loaded client-side by /assets/pages/dashboard.js.
|
|
%>
|
|
<%- include('../partials/page-header', { title: 'Dashboard', subtitle: 'System overview', actions: '' }) %>
|
|
|
|
<div class="lt-stats-grid">
|
|
<div class="lt-stat-card" id="dash-stat-total" role="button" tabindex="0" data-action="dash:goto-workers" aria-label="Total workers">
|
|
<span class="lt-stat-icon lt-text-cyan" aria-hidden="true">◉</span>
|
|
<div class="lt-stat-info">
|
|
<span class="lt-stat-value" id="dash-stat-total-val">0</span>
|
|
<span class="lt-stat-label">Workers</span>
|
|
</div>
|
|
</div>
|
|
<div class="lt-stat-card" id="dash-stat-online" role="button" tabindex="0" data-action="dash:goto-workers" aria-label="Online workers">
|
|
<span class="lt-stat-icon lt-text-green" aria-hidden="true">●</span>
|
|
<div class="lt-stat-info">
|
|
<span class="lt-stat-value" id="dash-stat-online-val">0</span>
|
|
<span class="lt-stat-label">Online</span>
|
|
</div>
|
|
</div>
|
|
<div class="lt-stat-card" id="dash-stat-offline" role="button" tabindex="0" data-action="dash:goto-workers" aria-label="Offline workers">
|
|
<span class="lt-stat-icon lt-text-red" aria-hidden="true">○</span>
|
|
<div class="lt-stat-info">
|
|
<span class="lt-stat-value" id="dash-stat-offline-val">0</span>
|
|
<span class="lt-stat-label">Offline</span>
|
|
</div>
|
|
</div>
|
|
<div class="lt-stat-card" id="dash-stat-running" role="button" tabindex="0" data-action="dash:goto-executions" aria-label="Running executions">
|
|
<span class="lt-stat-icon lt-text-amber" aria-hidden="true">▸</span>
|
|
<div class="lt-stat-info">
|
|
<span class="lt-stat-value" id="dash-stat-running-val">0</span>
|
|
<span class="lt-stat-label">Running</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lt-frame">
|
|
<div class="lt-section-header">Recent Executions</div>
|
|
<div id="dash-executions-wrap">
|
|
<div class="lt-empty-state lt-empty-state--sm" id="dash-executions-loading">
|
|
<div class="lt-empty-state-title">Loading…</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="lt-frame">
|
|
<div class="lt-section-header">Workers</div>
|
|
<div id="dash-workers-wrap">
|
|
<div class="lt-empty-state lt-empty-state--sm" id="dash-workers-loading">
|
|
<div class="lt-empty-state-title">Loading…</div>
|
|
</div>
|
|
</div>
|
|
</div>
|