atr/templates/release-bulk.html (134 lines of code) (raw):

{% extends "layouts/base.html" %} {% block title %} Bulk download status ~ ATR {% endblock title %} {% block description %} View the status of a bulk download task. {% endblock description %} {% block head_extra %} {% if task.status.value == "queued" or task.status.value == "active" %} <meta http-equiv="refresh" content="2" /> {% endif %} {% endblock head_extra %} {% block content %} <div class="my-3"> <nav class="mb-3"> <ol class="breadcrumb"> {% if release %} <li class="breadcrumb-item">{{ release.committee.display_name }}</li> <li class="breadcrumb-item">{{ release.project.name if release.project else "Unknown project" }}</li> <li class="breadcrumb-item">{{ release.version }}</li> {% endif %} <li class="breadcrumb-item active">Bulk download status</li> </ol> </nav> <div class="d-flex justify-content-between align-items-center p-3 mb-3 bg-light border rounded"> <div class="fw-medium">Task status</div> <div class="badge rounded-pill {% if task.status.value == 'queued' %}bg-secondary {% elif task.status.value == 'active' %}bg-info {% elif task.status.value == 'completed' %}bg-success {% elif task.status.value == 'failed' %}bg-danger {% else %}bg-secondary{% endif %}"> {%- if task.status.value == "queued" -%} Pending {%- elif task.status.value == "active" -%} Running {%- elif task.status.value == "completed" -%} Completed {%- elif task.status.value == "failed" -%} Failed {%- else -%} {{ task.status.value }} {%- endif -%} </div> </div> <div class="card mb-3"> <div class="card-body"> <div class="row mb-3"> <div class="col-md-3 fw-medium">Task ID</div> <div class="col-md-9">{{ task.id }}</div> </div> <div class="row mb-3"> <div class="col-md-3 fw-medium">Started</div> <div class="col-md-9"> {% if task.started %} {{ task.started.strftime("%Y-%m-%d %H:%M:%S UTC") }} {% else %} Not started {% endif %} </div> </div> {% if task.completed %} <div class="row mb-3"> <div class="col-md-3 fw-medium">Completed</div> <div class="col-md-9">{{ task.completed.strftime("%Y-%m-%d %H:%M:%S UTC") }}</div> </div> {% endif %} {% if task.result %} {% if task.result.progress is defined %} <div class="mb-3"> <div class="progress mb-2"> <div class="progress-bar py-2 fs-6" role="progressbar" aria-valuenow="{{ task.result.progress }}" aria-valuemin="0" aria-valuemax="100" data-progress="{{ task.result.progress }}">{{ task.result.progress }}%</div> </div> <div class="text-muted small">{{ task.result.progress }}% complete</div> </div> {% endif %} {% if task.result.message %}<div class="p-3 mb-3 bg-light border rounded">{{ task.result.message }}</div>{% endif %} {% if task.status == TaskStatus.COMPLETED %} <div class="row mb-3"> <div class="col-md-3 fw-medium">Summary</div> <div class="col-md-9"> <div class="border"> <table class="table table-bordered mb-0"> <tbody> {% if task.result.url %} <tr> <th class="bg-light">URL</th> <td>{{ task.result.url }}</td> </tr> {% endif %} {% if task.result.file_types %} <tr> <th class="bg-light">File types</th> <td>{{ task.result.file_types|join(", ") }}</td> </tr> {% endif %} {% if task.result.files_downloaded %} <tr> <th class="bg-light">Files downloaded</th> <td>{{ task.result.files_downloaded }}</td> </tr> {% endif %} </tbody> </table> </div> </div> </div> {% endif %} {% endif %} {% if task.error %} <div class="p-3 mb-3 bg-danger-subtle border border-danger rounded text-danger">{{ task.error }}</div> {% endif %} </div> </div> {% if task.status in [TaskStatus.QUEUED, TaskStatus.ACTIVE] %} <div class="p-3 mb-3 bg-info-subtle border border-info rounded"> This page will automatically refresh every 2 seconds to show the latest status. </div> {% endif %} </div> {% endblock content %} {% block javascripts %} {{ super() }} <script> // Set progress bar width document.addEventListener("DOMContentLoaded", function() { const progressBar = document.querySelector(".progress-bar"); if (progressBar) { const progress = progressBar.getAttribute("data-progress"); progressBar.style.width = progress + "%"; } }); </script> {% endblock javascripts %}