- Dashboard, Workers, Workflows, Executions, Quick Command, Scheduler pages on the shared layout, all behaviour via Pulse delegated actions (no inline handlers) - Executions: server-driven Manual/Automated views, compare mode, detail modal with all log types, ?open= deep link, cross-page re-run via sessionStorage - Workflows: run modal (dry-run available for every workflow), create modal pre-filled with the example definition - Fix EJS comment in page-header partial that broke rendering Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HamVMDrA8RqhyxmUHgiqRp
63 lines
2.9 KiB
Plaintext
63 lines
2.9 KiB
Plaintext
<%#
|
|
Scheduler page (WP-F). List of scheduled commands + admin create/toggle/delete.
|
|
All data loaded client-side by /assets/pages/scheduler.js.
|
|
%>
|
|
<%- include('../partials/page-header', {
|
|
title: 'Scheduler',
|
|
subtitle: 'Automate command execution with flexible scheduling',
|
|
actions: '<button type="button" class="lt-btn lt-btn-secondary lt-btn-sm" data-action="app:refresh">↻ Refresh</button>' +
|
|
(pageConfig && pageConfig.isAdmin ? '<button type="button" class="lt-btn lt-btn-primary lt-btn-sm" data-action="sc:create-open">➕ Create Schedule</button>' : '')
|
|
}) %>
|
|
|
|
<div class="lt-frame">
|
|
<div id="sc-wrap">
|
|
<div class="lt-empty-state" id="sc-loading">
|
|
<div class="lt-empty-state-title">Loading…</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Create Schedule Modal -->
|
|
<div class="lt-modal-overlay" id="sc-create-modal" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="sc-create-title">
|
|
<div class="lt-modal">
|
|
<div class="lt-modal-header">
|
|
<span class="lt-modal-title" id="sc-create-title">Create Scheduled Command</span>
|
|
<button type="button" class="lt-modal-close" data-modal-close aria-label="Close">✕</button>
|
|
</div>
|
|
<form id="sc-create-form" data-submit-action="sc:create-submit">
|
|
<div class="lt-modal-body">
|
|
<div class="lt-form-group">
|
|
<label class="lt-label" for="sc-name">Schedule Name</label>
|
|
<input type="text" id="sc-name" class="lt-input" placeholder="e.g. Daily System Check">
|
|
</div>
|
|
<div class="lt-form-group">
|
|
<label class="lt-label" for="sc-command">Command</label>
|
|
<textarea id="sc-command" class="lt-textarea" rows="3" placeholder="Enter command to execute"></textarea>
|
|
</div>
|
|
<div class="lt-form-group">
|
|
<label class="lt-label">Target Workers</label>
|
|
<div id="sc-worker-list" class="qc-worker-list">
|
|
<div class="lt-empty-state lt-empty-state--sm"><div class="lt-empty-state-title">Loading…</div></div>
|
|
</div>
|
|
</div>
|
|
<div class="lt-form-group">
|
|
<label class="lt-label" for="sc-type">Schedule Type</label>
|
|
<select id="sc-type" class="lt-select" data-change-action="sc:type">
|
|
<option value="interval">Every X Minutes</option>
|
|
<option value="hourly">Every X Hours</option>
|
|
<option value="daily">Daily at Time</option>
|
|
</select>
|
|
</div>
|
|
<div class="lt-form-group" id="sc-value-container">
|
|
<label class="lt-label" for="sc-value">Interval (minutes)</label>
|
|
<input type="number" id="sc-value" class="lt-input" placeholder="e.g. 30" min="1">
|
|
</div>
|
|
</div>
|
|
<div class="lt-modal-footer">
|
|
<button type="submit" class="lt-btn lt-btn-primary">Create Schedule</button>
|
|
<button type="button" class="lt-btn lt-btn-ghost" data-modal-close>Cancel</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|