Release 1.5.3

This commit is contained in:
2026-07-25 15:11:41 +01:00
parent 9ee938fd2f
commit 0e89892c94
89 changed files with 7660 additions and 542 deletions
@@ -3,49 +3,44 @@
<div class="page-header">
<div>
<h2>Background tasks</h2>
<p>Queued data refreshes run in the web process. Finished items stay here until you clear them.</p>
<p>Queued data refreshes run in the web process. Finished items stay here until you clear them. Click a status box or source name to filter the results.</p>
</div>
</div>
<div class="row g-3 mb-4">
<div class="col-6 col-xl-3">
<div class="card card-outline card-primary h-100">
<div class="card-body">
<div class="text-muted small text-uppercase">Queued</div>
<div class="fs-3 fw-semibold">{{summary.counts.queued}}</div>
</div>
</div>
</div>
<div class="col-6 col-xl-3">
<div class="card card-outline card-info h-100">
<div class="card-body">
<div class="text-muted small text-uppercase">Running</div>
<div class="fs-3 fw-semibold">{{summary.counts.running}}</div>
</div>
</div>
</div>
<div class="col-6 col-xl-3">
<div class="card card-outline card-danger h-100">
<div class="card-body">
<div class="text-muted small text-uppercase">Failed</div>
<div class="fs-3 fw-semibold">{{summary.counts.failed}}</div>
</div>
</div>
</div>
<div class="col-6 col-xl-3">
<div class="card card-outline card-success h-100">
<div class="card-body">
<div class="text-muted small text-uppercase">Finished</div>
<div class="fs-3 fw-semibold">{{summary.counts.completed}}</div>
</div>
<div id="background-tasks-filters">
{{#if hasActiveFilters}}
<div class="alert alert-light border d-flex flex-wrap align-items-center justify-content-between gap-2 py-2 mb-3">
<div class="small text-muted">
Showing results for {{#if activeStatusLabel}}{{activeStatusLabel}}{{else}}all tasks{{/if}}{{#if activeSourceLabel}} from {{activeSourceLabel}}{{/if}}.
</div>
<a class="btn btn-outline-secondary btn-sm" href="{{clearFiltersUrl}}" data-background-tasks-nav="clear">Clear filters</a>
</div>
{{/if}}
</div>
<div class="card card-outline card-primary mb-4">
<div class="card-header d-flex align-items-center gap-2">
<div id="background-tasks-summary" class="row g-3 mb-4">
{{#each statusCards}}
<div class="col-6 col-xl-3">
<a href="{{href}}" class="d-block h-100 text-decoration-none text-body" data-background-tasks-nav="status" aria-label="{{ariaLabel}}"{{#if active}} aria-current="page"{{/if}}>
<div class="card card-outline card-{{variant}} h-100{{#if active}} border-2 border-{{variant}}{{/if}}">
<div class="card-body">
<div class="text-muted small text-uppercase">{{label}}</div>
<div class="fs-3 fw-semibold">{{count}}</div>
</div>
</div>
</a>
</div>
{{/each}}
</div>
<div id="background-tasks-task-card" class="card card-outline card-primary mb-4" data-pagination-card="tasks" data-table-search-container>
<div class="card-header d-flex align-items-center">
<h3 class="card-title mb-0">Task queue</h3>
<div class="ms-auto d-flex align-items-center gap-2">
<div class="ms-auto d-flex flex-nowrap align-items-center gap-2 background-tasks-task-tools">
<div class="input-group input-group-sm background-tasks-task-search" style="width: min(12rem, 100%);">
<span class="input-group-text" aria-hidden="true"><i class="bi bi-search"></i></span>
<input type="search" class="form-control" placeholder="Search tasks" aria-label="Search tasks" data-table-search />
</div>
{{#if canManage}}
{{#if canClearFinished}}
<form method="post" action="/settings/background-tasks/clear-finished">
@@ -53,11 +48,10 @@
</form>
{{/if}}
{{/if}}
<span class="text-muted small">Active workers: {{summary.activeCount}}</span>
</div>
</div>
<div class="card-body table-responsive p-0">
<table class="table table-striped w-100 mb-0 align-middle">
<table class="table table-striped w-100 mb-0 align-middle" data-table-searchable>
<thead>
<tr>
<th>Task</th>
@@ -73,7 +67,7 @@
<tbody>
{{#if tasks.length}}
{{#each tasks}}
<tr>
<tr data-table-search-row>
<td data-label="Task">
<div class="fw-semibold">{{title}}</div>
{{#if key}}
@@ -147,7 +141,7 @@
</tr>
{{/each}}
{{else}}
<tr>
<tr data-table-search-empty-default>
<td colspan="8" class="empty">No background tasks are queued right now.</td>
</tr>
{{/if}}
@@ -178,12 +172,18 @@
{{/if}}
</div>
<div class="card card-outline card-secondary">
<div class="card-header">
<div id="background-tasks-recurring-card" class="card card-outline card-secondary" data-pagination-card="recurring" data-table-search-container>
<div class="card-header d-flex align-items-center">
<h3 class="card-title mb-0">Scheduled refreshes</h3>
<div class="ms-auto d-flex flex-nowrap align-items-center gap-2 background-tasks-recurring-tools">
<div class="input-group input-group-sm background-tasks-recurring-search" style="width: min(12rem, 100%);">
<span class="input-group-text" aria-hidden="true"><i class="bi bi-search"></i></span>
<input type="search" class="form-control" placeholder="Search scheduled" aria-label="Search scheduled refreshes" data-table-search />
</div>
</div>
</div>
<div class="card-body table-responsive p-0">
<table class="table table-striped w-100 mb-0 align-middle">
<table class="table table-striped w-100 mb-0 align-middle" data-table-searchable>
<thead>
<tr>
<th>Task</th>
@@ -197,7 +197,7 @@
<tbody>
{{#if recurringTasks.length}}
{{#each recurringTasks}}
<tr>
<tr data-table-search-row>
<td data-label="Task">
<div class="fw-semibold">{{title}}</div>
<div class="text-muted small text-break">{{key}}</div>
@@ -232,7 +232,7 @@
</tr>
{{/each}}
{{else}}
<tr>
<tr data-table-search-empty-default>
<td colspan="6" class="empty">No scheduled refreshes are registered yet.</td>
</tr>
{{/if}}
+13 -8
View File
@@ -7,17 +7,21 @@
<div class="row g-4">
<div class="col-12">
<div class="card card-outline card-primary admin-form-card">
<div class="card card-outline card-primary admin-form-card" data-table-search-container>
<div class="card-header">
<h3 class="card-title">Existing roles</h3>
{{#if (hasPermission currentUser 'rbac.create')}}
<div class="card-tools">
<a class="btn btn-primary btn-sm" href="/rbac/new">Add role</a>
<div class="card-tools d-flex flex-nowrap align-items-center gap-2">
<div class="input-group input-group-sm flex-shrink-1" style="width: min(14rem, 100%);">
<span class="input-group-text" aria-hidden="true"><i class="bi bi-search"></i></span>
<input type="search" class="form-control" placeholder="Search roles" aria-label="Search roles" data-table-search />
</div>
{{/if}}
{{#if (hasPermission currentUser 'rbac.create')}}
<a class="btn btn-primary btn-sm" href="/rbac/new">Add role</a>
{{/if}}
</div>
</div>
<div class="card-body table-responsive p-0">
<table class="table table-striped w-100 mb-0 users-table">
<table class="table table-striped w-100 mb-0 users-table" data-table-searchable>
<thead>
<tr>
<th>Role</th>
@@ -30,7 +34,7 @@
<tbody>
{{#if roles.length}}
{{#each roles}}
<tr>
<tr data-table-search-row>
<td data-label="Role">
<div class="user-cell">
<div>
@@ -68,11 +72,12 @@
</tr>
{{/each}}
{{else}}
<tr><td colspan="5" class="empty">No roles found.</td></tr>
<tr data-table-search-empty-default><td colspan="5" class="empty">No roles found.</td></tr>
{{/if}}
</tbody>
</table>
</div>
{{> table-pagination pagination=pagination basePath="/rbac"}}
</div>
</div>
</div>
+13 -8
View File
@@ -5,17 +5,21 @@
</div>
</div>
<div class="card card-outline card-primary">
<div class="card card-outline card-primary" data-table-search-container>
<div class="card-header">
<h3 class="card-title">Existing users</h3>
{{#if (hasPermission currentUser 'users.create')}}
<div class="card-tools">
<a class="btn btn-primary btn-sm" href="/users/new">Add user</a>
<div class="card-tools d-flex flex-nowrap align-items-center gap-2">
<div class="input-group input-group-sm flex-shrink-1" style="width: min(14rem, 100%);">
<span class="input-group-text" aria-hidden="true"><i class="bi bi-search"></i></span>
<input type="search" class="form-control" placeholder="Search users" aria-label="Search users" data-table-search />
</div>
{{/if}}
{{#if (hasPermission currentUser 'users.create')}}
<a class="btn btn-primary btn-sm" href="/users/new">Add user</a>
{{/if}}
</div>
</div>
<div class="card-body table-responsive p-0">
<table class="table table-striped w-100 mb-0 users-table">
<table class="table table-striped w-100 mb-0 users-table" data-table-searchable>
<thead>
<tr>
<th>User</th>
@@ -27,7 +31,7 @@
<tbody>
{{#if users.length}}
{{#each users}}
<tr>
<tr data-table-search-row>
<td data-label="User">
<div class="user-cell">
<div>
@@ -85,9 +89,10 @@
</tr>
{{/each}}
{{else}}
<tr><td colspan="4" class="empty">No users found.</td></tr>
<tr data-table-search-empty-default><td colspan="4" class="empty">No users found.</td></tr>
{{/if}}
</tbody>
</table>
</div>
{{> table-pagination pagination=pagination basePath="/users"}}
</div>