This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git
The following commit(s) were added to refs/heads/main by this push:
new 457782d Split the compose and vote template into separate templates
457782d is described below
commit 457782d99fc045457f59518e2d1d75a57ae6b23f
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon May 5 16:44:40 2025 +0100
Split the compose and vote template into separate templates
---
atr/templates/check-selected-candidate-forms.html | 81 +++++++
atr/templates/check-selected-path-table.html | 119 ++++++++++
atr/templates/check-selected-release-info.html | 61 +++++
atr/templates/check-selected.html | 272 +---------------------
4 files changed, 264 insertions(+), 269 deletions(-)
diff --git a/atr/templates/check-selected-candidate-forms.html
b/atr/templates/check-selected-candidate-forms.html
new file mode 100644
index 0000000..edc2fc2
--- /dev/null
+++ b/atr/templates/check-selected-candidate-forms.html
@@ -0,0 +1,81 @@
+
+<h2>Cast your vote</h2>
+<div class="card bg-warning-subtle mb-3">
+ <div class="card-body p-3">
+ <i class="bi bi-exclamation-triangle me-1"></i>
+ <strong>TODO:</strong> We plan to make "Binding" dynamic based on
membership. Currently this form always says "Binding" which is known to be
wrong.
+ </div>
+</div>
+<form method="post"
+ action="{{ as_url(routes.vote.selected_post, project_name=project_name,
version_name=version_name) }}"
+ class="atr-canary py-4 px-5 mb-4 border rounded">
+ {{ form.hidden_tag() }}
+ <div class="row mb-3 pb-3 border-bottom">
+ <label class="col-md-3 col-form-label text-md-end">{{
form.vote_value.label.text }}:</label>
+ <div class="col-md-9">
+ <div class="btn-group" role="group" aria-label="Vote options">
+ {% for subfield in form.vote_value %}
+ {% set btn_class = "btn-outline-secondary" %}
+ {% if subfield.data == "+1" %}
+ {% set btn_class = "btn-outline-success" %}
+ {% endif %}
+ {% if subfield.data == "-1" %}
+ {% set btn_class = "btn-outline-danger" %}
+ {% endif %}
+ {{ subfield(class_="btn-check", autocomplete="off") }}
+ <label class="btn {{ btn_class }}" for="{{ subfield.id }}">{{
subfield.label.text }}</label>
+ {% endfor %}
+ </div>
+ {% if form.vote_value.errors %}<div class="text-danger small mt-1">{{
form.vote_value.errors[0] }}</div>{% endif %}
+ </div>
+ </div>
+ <div class="row mb-3">
+ <label for="{{ form.vote_comment.id }}"
+ class="col-md-3 col-form-label text-md-end">{{
form.vote_comment.label.text }}:</label>
+ <div class="col-md-9">
+ {{ form.vote_comment(class_="form-control", rows="3") }}
+ {% if form.vote_comment.errors %}
+ <div class="text-danger small mt-1">{{ form.vote_comment.errors[0]
}}</div>
+ {% endif %}
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-9 offset-md-3">{{ form.submit(class_="btn btn-primary")
}}</div>
+ </div>
+</form>
+
+<h2 id="resolve-vote">Resolve vote</h2>
+<div class="border rounded bg-warning-subtle p-3 mb-3">
+ <i class="bi bi-info-circle me-1"></i>
+ <strong>NOTE:</strong> We are allowing a vote to be resolved early in order
to facilitate testing. This is not the final behaviour.
+</div>
+<form method="post"
+ action="{{ as_url(routes.resolve.selected_post,
project_name=release.project.name, version_name=release.version) }}"
+ class="atr-canary py-4 px-5"
+ novalidate>
+ <input type="hidden" name="candidate_name" value="{{ release.name }}" />
+ {{ resolve_form.csrf_token }}
+
+ <div class="mb-3 pb-3 row border-bottom">
+ <label class="col-sm-3 col-form-label text-sm-end fw-semibold">{{
resolve_form.vote_result.label.text }}:</label>
+ <div class="col-sm-9 pt-2">
+ {% for subfield in resolve_form.vote_result %}
+ <div class="form-check form-check-inline">
+ {{ subfield(class="form-check-input" + (" is-invalid" if
resolve_form.vote_result.errors else "") , id=subfield.id ~ "_" ~ loop.index) }}
+ <label class="form-check-label" for="{{ subfield.id }}_{{ loop.index
}}">{{ subfield.label.text }}</label>
+ </div>
+ {% endfor %}
+ {% if resolve_form.vote_result.errors %}
+ <div class="invalid-feedback d-block">{{
resolve_form.vote_result.errors[0] }}</div>
+ {% endif %}
+ </div>
+ </div>
+ <div class="row">
+ <label class="col-sm-3 col-form-label text-sm-end fw-semibold">{{
resolve_form.resolution_body.label.text }}:</label>
+ <div class="col-sm-9 pt-2">{{
resolve_form.resolution_body(class_="form-control", rows="3") }}</div>
+ </div>
+
+ <div class="row">
+ <div class="col-sm-9 offset-sm-3">{{ resolve_form.submit(class_="btn
btn-primary mt-3") }}</div>
+ </div>
+</form>
diff --git a/atr/templates/check-selected-path-table.html
b/atr/templates/check-selected-path-table.html
new file mode 100644
index 0000000..58ceafb
--- /dev/null
+++ b/atr/templates/check-selected-path-table.html
@@ -0,0 +1,119 @@
+<div class="table-responsive">
+ {# This table uses pairs of rows, so it must be manually striped #}
+ <table class="table table-hover align-middle table-sm mb-0 border">
+ <tbody>
+ {% for path in paths %}
+ {% set has_errors = info.errors[path]|length > 0 %}
+ {% set has_warnings = info.warnings[path]|length > 0 %}
+ {% set row_id = path|string|slugify %}
+
+ {# Manual striping for pairs of rows #}
+ {% set row_bg_class = "" %}
+ {% if loop.index is odd %}
+ {% set row_bg_class = "page-table-striped-odd" %}
+ {% endif %}
+
+ {% set path_style_class = "" %}
+ {% if has_errors %}
+ {% set path_style_class = "text-danger" %}
+ {% elif has_warnings %}
+ {% set path_style_class = "text-warning" %}
+ {% endif %}
+
+ <tr class="{{ row_bg_class }}">
+ <td class="text-center px-1 py-2 page-icon-cell">
+ {% set icon_class = "text-success" %}
+ {% if has_errors %}
+ {% set icon_class = "text-danger" %}
+ {% elif has_warnings %}
+ {% set icon_class = "text-warning" %}
+ {% endif %}
+
+ {% if path in info.artifacts %}
+ <i class="bi bi-archive {{ icon_class }}"
+ title="Artifact"
+ aria-label="Artifact"></i>
+ {% elif path in info.metadata %}
+ <i class="bi bi-file-earmark-text {{ icon_class }}"
+ title="Metadata"
+ aria-label="Metadata"></i>
+ {% else %}
+ <i class="bi bi-file-earmark {{ icon_class }}"
+ title="File"
+ aria-label="File"></i>
+ {% endif %}
+ </td>
+ <td class="py-2">
+ <a href="{{ as_url(routes.file.selected_path,
project_name=project_name, version_name=version_name, file_path=path) }}"
+ title="View file {{ path }}"
+ class="text-decoration-none text-reset">
+ {% if has_errors or has_warnings %}
+ <strong class="{{ path_style_class }}"><code>{{ path
}}</code></strong>
+ {% else %}
+ <code>{{ path }}</code>
+ {% endif %}
+ </a>
+ </td>
+ <td class="text-end text-nowrap py-2">
+ <div class="d-flex justify-content-end align-items-center gap-2">
+ {% if has_errors %}
+ <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
+ class="btn btn-sm btn-outline-danger"><i class="bi
bi-exclamation-triangle me-1"></i> Show {{ info.errors[path]|length }} {{
"error" if info.errors[path]|length == 1 else "errors" }}</a>
+ {% elif has_warnings %}
+ <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
+ class="btn btn-sm btn-outline-warning">Show {{
info.warnings[path]|length }} {{ "warning" if info.warnings[path]|length == 1
else "warnings" }}</a>
+ {% elif info.successes[path] %}
+ <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
+ class="btn btn-sm btn-outline-success"
+ title="Show report for {{ path }}">Show report</a>
+ {% else %}
+ <span class="btn btn-sm btn-outline-secondary disabled">No
checks run</span>
+ {% endif %}
+
+ {% if phase == "release_candidate_draft" %}
+ <button class="btn btn-sm btn-outline-secondary"
+ type="button"
+ data-bs-toggle="collapse"
+ data-bs-target="#actions-{{ row_id }}"
+ aria-expanded="false"
+ aria-controls="actions-{{ row_id }}"
+ title="Show more actions for {{ path }}"
+ onclick="this.innerHTML = (this.innerHTML.trim() ===
'More') ? 'Less' : 'More';">More</button>
+ {% elif phase == "release_candidate" %}
+ <a href="{{ as_url(routes.download.path,
project_name=release.project.name, version_name=release.version,
file_path=path) }}"
+ title="Download file {{ path }}"
+ class="btn btn-sm btn-outline-secondary">Download</a>
+ {% endif %}
+ </div>
+ </td>
+ </tr>
+
+ {% if phase == "release_candidate_draft" %}
+ <tr class="{{ row_bg_class }}">
+ <td colspan="3" class="p-0 border-0">
+ <div class="collapse px-3 py-2" id="actions-{{ row_id }}">
+ <div class="d-flex justify-content-end">
+ <div class="btn-group btn-group-sm"
+ role="group"
+ aria-label="More file actions for {{ path }}">
+ <a href="{{ as_url(routes.download.path,
project_name=release.project.name, version_name=release.version,
file_path=path) }}"
+ title="Download file {{ path }}"
+ class="btn btn-outline-secondary">Download</a>
+ <a href="{{ as_url(routes.draft.tools,
project_name=project_name, version_name=version_name, file_path=path) }}"
+ title="Tools for file {{ path }}"
+ class="btn btn-outline-secondary">Tools</a>
+ <button class="btn btn-outline-danger"
+ data-bs-toggle="modal"
+ data-bs-target="#delete-{{ row_id }}"
+ title="Delete file {{ path }}">Delete</button>
+ </div>
+ {{ dialog.delete_modal(row_id, "Delete file", "file, and any
associated metadata files", as_url(routes.draft.delete_file,
project_name=project_name, version_name=version_name) , delete_file_form,
"file_path") }}
+ </div>
+ </div>
+ </td>
+ </tr>
+ {% endif %}
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
diff --git a/atr/templates/check-selected-release-info.html
b/atr/templates/check-selected-release-info.html
new file mode 100644
index 0000000..7e83ca9
--- /dev/null
+++ b/atr/templates/check-selected-release-info.html
@@ -0,0 +1,61 @@
+<div class="card mb-4">
+ <div class="card-header d-flex justify-content-between align-items-center">
+ <h5 class="mb-0">Release information</h5>
+ </div>
+ <div class="card-body mb-0">
+ <div class="row">
+ <div class="col-md-6">
+ <p>
+ <strong>Project:</strong>
+ <a href="{{ as_url(routes.projects.view, name=release.project.name)
}}">{{ release.project.display_name }}</a>
+ </p>
+ <p>
+ <strong>Label:</strong> {{ release.name }}
+ </p>
+ </div>
+ <div class="col-md-6">
+ <p>
+ <strong>Created:</strong> {{ format_datetime(release.created) }}
+ </p>
+ {% if revision_time %}
+ <p>
+ <strong>Revision:</strong>
+ <a href="{{ as_url(routes.revisions.selected,
project_name=project_name, version_name=version_name) }}#{{
revision_name_from_link }}">
+ {{ format_datetime(revision_time) }}
+ </a>
+ {% if revision_editor %}by {{ revision_editor }}{% endif %}
+ </p>
+ {% endif %}
+ </div>
+ </div>
+ <div class="d-flex flex-wrap gap-2">
+ {% if phase == "release_candidate_draft" %}
+ <a href="{{ as_url(routes.upload.selected,
project_name=release.project.name, version_name=release.version) }}"
+ title="Upload files to this draft"
+ class="btn btn-primary"><i class="bi bi-upload me-1"></i> Upload
files</a>
+ <a href="{{ as_url(routes.download.all_selected,
project_name=release.project.name, version_name=release.version) }}"
+ title="Download files"
+ class="btn btn-primary"><i class="bi bi-download me-1"></i>
Download files</a>
+ <a href="{{ as_url(routes.revisions.selected,
project_name=release.project.name, version_name=release.version) }}"
+ title="View revision history"
+ class="btn btn-secondary"><i class="bi bi-clock-history me-1"></i>
Revisions</a>
+ <a href="{{ as_url(routes.voting.selected_revision,
project_name=release.project.name, version_name=release.version,
revision=release.revision) }}"
+ title="Start a vote on this draft"
+ class="btn btn-success"><i class="bi bi-check-circle me-1"></i>
Start voting</a>
+ <button class="btn btn-danger"
+ title="Delete this entire draft"
+ data-bs-toggle="modal"
+ data-bs-target="#delete-{{ release.name|slugify }}">
+ <i class="bi bi-trash me-1"></i> Delete draft
+ </button>
+ {{ dialog.delete_modal_with_confirm(release.name|slugify, "Delete
candidate draft", "candidate draft", as_url(routes.draft.delete) , delete_form,
"candidate_draft_name") }}
+ {% elif phase == "release_candidate" %}
+ <a href="{{ as_url(routes.download.all_selected,
project_name=release.project.name, version_name=release.version) }}"
+ class="btn btn-primary"><i class="bi bi-download me-1"></i>
Download files</a>
+ <a href="{{ as_url(routes.candidate.view,
project_name=release.project.name, version_name=release.version) }}"
+ class="btn btn-secondary"><i class="bi bi-eye me-1"></i> View
files</a>
+ <a href="#resolve-vote" class="btn btn-success"><i class="bi
bi-clipboard-check me-1"></i> Resolve vote</a>
+ {% endif %}
+ </div>
+ </div>
+</div>
diff --git a/atr/templates/check-selected.html
b/atr/templates/check-selected.html
index c8baffa..f6a8bbb 100644
--- a/atr/templates/check-selected.html
+++ b/atr/templates/check-selected.html
@@ -65,76 +65,7 @@
</p>
{% endif %}
- <div class="card mb-4">
- <div class="card-header d-flex justify-content-between align-items-center">
- <h5 class="mb-0">Release information</h5>
- </div>
- <div class="card-body">
- <div class="row">
- <div class="col-md-6">
- <p>
- <strong>Project:</strong>
- <a href="{{ as_url(routes.projects.view,
name=release.project.name) }}">{{ release.project.display_name }}</a>
- </p>
- <p>
- <strong>Label:</strong> {{ release.name }}
- </p>
- </div>
- <div class="col-md-6">
- <p>
- <strong>Created:</strong> {{ format_datetime(release.created) }}
- </p>
- {% if revision_time %}
- <p>
- <strong>Revision:</strong>
- <a href="{{ as_url(routes.revisions.selected,
project_name=project_name, version_name=version_name) }}#{{
revision_name_from_link }}">
- {{ format_datetime(revision_time) }}
- </a>
- {% if revision_editor %}by {{ revision_editor }}{% endif %}
- </p>
- {% endif %}
- </div>
- </div>
- </div>
- {% if phase == "release_candidate" %}
- <div class="card-body">
- <a href="{{ as_url(routes.download.all_selected,
project_name=release.project.name, version_name=release.version) }}"
- class="btn btn-primary me-2"><i class="bi bi-download me-1"></i>
Download files</a>
- <a href="{{ as_url(routes.candidate.view,
project_name=release.project.name, version_name=release.version) }}"
- class="btn btn-secondary me-2"><i class="bi bi-eye me-1"></i> View
files</a>
- <a href="#resolve-vote" class="btn btn-success"><i class="bi
bi-clipboard-check me-1"></i> Resolve vote</a>
- </div>
- {% endif %}
- </div>
-
- {% if phase == "release_candidate_draft" %}
- <div class="card mb-4">
- <div class="card-header">
- <h5 class="mb-0">Draft actions</h5>
- </div>
- <div class="card-body d-flex flex-wrap gap-2">
- <a href="{{ as_url(routes.upload.selected,
project_name=release.project.name, version_name=release.version) }}"
- title="Upload files to this draft"
- class="btn btn-primary"><i class="bi bi-upload me-1"></i> Upload
files</a>
- <a href="{{ as_url(routes.download.all_selected,
project_name=release.project.name, version_name=release.version) }}"
- title="Download files"
- class="btn btn-primary"><i class="bi bi-download me-1"></i>
Download files</a>
- <a href="{{ as_url(routes.revisions.selected,
project_name=release.project.name, version_name=release.version) }}"
- title="View revision history"
- class="btn btn-secondary"><i class="bi bi-clock-history me-1"></i>
Revisions</a>
- <a href="{{ as_url(routes.voting.selected_revision,
project_name=release.project.name, version_name=release.version,
revision=release.revision) }}"
- title="Start a vote on this draft"
- class="btn btn-success"><i class="bi bi-check-circle me-1"></i>
Start voting</a>
- <button class="btn btn-danger"
- title="Delete this entire draft"
- data-bs-toggle="modal"
- data-bs-target="#delete-{{ release.name|slugify }}">
- <i class="bi bi-trash me-1"></i> Delete draft
- </button>
- </div>
- </div>
- {{ dialog.delete_modal_with_confirm(release.name|slugify, "Delete
candidate draft", "candidate draft", as_url(routes.draft.delete) , delete_form,
"candidate_draft_name") }}
- {% endif %}
+ {% include "check-selected-release-info.html" %}
{% if ongoing_tasks_count > 0 %}
<div class="alert alert-warning" role="alert">
@@ -156,127 +87,8 @@
</div>
<div class="card-body">
{% if paths|length > 0 %}
- <div class="table-responsive">
- {# This table uses pairs of rows, so it must be manually striped #}
- <table class="table table-hover align-middle table-sm mb-0 border">
- <tbody>
- {% for path in paths %}
- {% set has_errors = info.errors[path]|length > 0 %}
- {% set has_warnings = info.warnings[path]|length > 0 %}
- {% set row_id = path|string|slugify %}
+ {% include "check-selected-path-table.html" %}
- {# Manual striping for pairs of rows #}
- {% set row_bg_class = "" %}
- {% if loop.index is odd %}
- {% set row_bg_class = "page-table-striped-odd" %}
- {% endif %}
-
- {% set path_style_class = "" %}
- {% if has_errors %}
- {% set path_style_class = "text-danger" %}
- {% elif has_warnings %}
- {% set path_style_class = "text-warning" %}
- {% endif %}
-
- <tr class="{{ row_bg_class }}">
- <td class="text-center px-1 py-2 page-icon-cell">
- {% set icon_class = "text-success" %}
- {% if has_errors %}
- {% set icon_class = "text-danger" %}
- {% elif has_warnings %}
- {% set icon_class = "text-warning" %}
- {% endif %}
-
- {% if path in info.artifacts %}
- <i class="bi bi-archive {{ icon_class }}"
- title="Artifact"
- aria-label="Artifact"></i>
- {% elif path in info.metadata %}
- <i class="bi bi-file-earmark-text {{ icon_class }}"
- title="Metadata"
- aria-label="Metadata"></i>
- {% else %}
- <i class="bi bi-file-earmark {{ icon_class }}"
- title="File"
- aria-label="File"></i>
- {% endif %}
- </td>
- <td class="py-2">
- <a href="{{ as_url(routes.file.selected_path,
project_name=project_name, version_name=version_name, file_path=path) }}"
- title="View file {{ path }}"
- class="text-decoration-none text-reset">
- {% if has_errors or has_warnings %}
- <strong class="{{ path_style_class }}"><code>{{ path
}}</code></strong>
- {% else %}
- <code>{{ path }}</code>
- {% endif %}
- </a>
- </td>
- <td class="text-end text-nowrap py-2">
- <div class="d-flex justify-content-end align-items-center
gap-2">
- {% if has_errors %}
- <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
- class="btn btn-sm btn-outline-danger"><i class="bi
bi-exclamation-triangle me-1"></i> Show {{ info.errors[path]|length }} {{
"error" if info.errors[path]|length == 1 else "errors" }}</a>
- {% elif has_warnings %}
- <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
- class="btn btn-sm btn-outline-warning">Show {{
info.warnings[path]|length }} {{ "warning" if info.warnings[path]|length == 1
else "warnings" }}</a>
- {% elif info.successes[path] %}
- <a href="{{ as_url(routes.report.selected_path,
project_name=project_name, version_name=version_name, rel_path=path) }}"
- class="btn btn-sm btn-outline-success"
- title="Show report for {{ path }}">Show report</a>
- {% else %}
- <span class="btn btn-sm btn-outline-secondary
disabled">No checks run</span>
- {% endif %}
-
- {% if phase == "release_candidate_draft" %}
- <button class="btn btn-sm btn-outline-secondary"
- type="button"
- data-bs-toggle="collapse"
- data-bs-target="#actions-{{ row_id }}"
- aria-expanded="false"
- aria-controls="actions-{{ row_id }}"
- title="Show more actions for {{ path }}"
- onclick="this.innerHTML =
(this.innerHTML.trim() === 'More') ? 'Less' : 'More';">
- More
- </button>
- {% elif phase == "release_candidate" %}
- <a href="{{ as_url(routes.download.path,
project_name=release.project.name, version_name=release.version,
file_path=path) }}"
- title="Download file {{ path }}"
- class="btn btn-sm
btn-outline-secondary">Download</a>
- {% endif %}
- </div>
- </td>
- </tr>
-
- {% if phase == "release_candidate_draft" %}
- <tr class="{{ row_bg_class }}">
- <td colspan="3" class="p-0 border-0">
- <div class="collapse px-3 py-2" id="actions-{{ row_id
}}">
- <div class="d-flex justify-content-end">
- <div class="btn-group btn-group-sm"
- role="group"
- aria-label="More file actions for {{ path }}">
- <a href="{{ as_url(routes.download.path,
project_name=release.project.name, version_name=release.version,
file_path=path) }}"
- title="Download file {{ path }}"
- class="btn btn-outline-secondary">Download</a>
- <a href="{{ as_url(routes.draft.tools,
project_name=project_name, version_name=version_name, file_path=path) }}"
- title="Tools for file {{ path }}"
- class="btn btn-outline-secondary">Tools</a>
- <button class="btn btn-outline-danger"
- data-bs-toggle="modal"
- data-bs-target="#delete-{{ row_id }}"
- title="Delete file {{ path
}}">Delete</button>
- </div>
- {{ dialog.delete_modal(row_id, "Delete file", "file,
and any associated metadata files", as_url(routes.draft.delete_file,
project_name=project_name, version_name=version_name) , delete_file_form,
"file_path") }}
- </div>
- </div>
- </td>
- </tr>
- {% endif %}
- {% endfor %}
- </tbody>
- </table>
- </div>
{% else %}
<div class="alert alert-info">This draft does not have any files
yet.</div>
{% endif %}
@@ -284,86 +96,8 @@
</div>
{% if phase == "release_candidate" %}
- <h2>Cast your vote</h2>
- <div class="card bg-warning-subtle mb-3">
- <div class="card-body p-3">
- <i class="bi bi-exclamation-triangle me-1"></i>
- <strong>TODO:</strong> We plan to make "Binding" dynamic based on
membership. Currently this form always says "Binding" which is known to be
wrong.
- </div>
- </div>
- <form method="post"
- action="{{ as_url(routes.vote.selected_post,
project_name=project_name, version_name=version_name) }}"
- class="atr-canary py-4 px-5 mb-4 border rounded">
- {{ form.hidden_tag() }}
- <div class="row mb-3 pb-3 border-bottom">
- <label class="col-md-3 col-form-label text-md-end">{{
form.vote_value.label.text }}:</label>
- <div class="col-md-9">
- <div class="btn-group" role="group" aria-label="Vote options">
- {% for subfield in form.vote_value %}
- {% set btn_class = "btn-outline-secondary" %}
- {% if subfield.data == "+1" %}
- {% set btn_class = "btn-outline-success" %}
- {% endif %}
- {% if subfield.data == "-1" %}
- {% set btn_class = "btn-outline-danger" %}
- {% endif %}
- {{ subfield(class_="btn-check", autocomplete="off") }}
- <label class="btn {{ btn_class }}" for="{{ subfield.id }}">{{
subfield.label.text }}</label>
- {% endfor %}
- </div>
- {% if form.vote_value.errors %}<div class="text-danger small
mt-1">{{ form.vote_value.errors[0] }}</div>{% endif %}
- </div>
- </div>
- <div class="row mb-3">
- <label for="{{ form.vote_comment.id }}"
- class="col-md-3 col-form-label text-md-end">{{
form.vote_comment.label.text }}:</label>
- <div class="col-md-9">
- {{ form.vote_comment(class_="form-control", rows="3") }}
- {% if form.vote_comment.errors %}
- <div class="text-danger small mt-1">{{ form.vote_comment.errors[0]
}}</div>
- {% endif %}
- </div>
- </div>
- <div class="row">
- <div class="col-md-9 offset-md-3">{{ form.submit(class_="btn
btn-primary") }}</div>
- </div>
- </form>
-
- <h2 id="resolve-vote">Resolve vote</h2>
- <div class="border rounded bg-warning-subtle p-3 mb-3">
- <i class="bi bi-info-circle me-1"></i>
- <strong>NOTE:</strong> We are allowing a vote to be resolved early in
order to facilitate testing. This is not the final behaviour.
- </div>
- <form method="post"
- action="{{ as_url(routes.resolve.selected_post,
project_name=release.project.name, version_name=release.version) }}"
- class="atr-canary py-4 px-5"
- novalidate>
- <input type="hidden" name="candidate_name" value="{{ release.name }}" />
- {{ resolve_form.csrf_token }}
-
- <div class="mb-3 pb-3 row border-bottom">
- <label class="col-sm-3 col-form-label text-sm-end fw-semibold">{{
resolve_form.vote_result.label.text }}:</label>
- <div class="col-sm-9 pt-2">
- {% for subfield in resolve_form.vote_result %}
- <div class="form-check form-check-inline">
- {{ subfield(class="form-check-input" + (" is-invalid" if
resolve_form.vote_result.errors else "") , id=subfield.id ~ "_" ~ loop.index) }}
- <label class="form-check-label" for="{{ subfield.id }}_{{
loop.index }}">{{ subfield.label.text }}</label>
- </div>
- {% endfor %}
- {% if resolve_form.vote_result.errors %}
- <div class="invalid-feedback d-block">{{
resolve_form.vote_result.errors[0] }}</div>
- {% endif %}
- </div>
- </div>
- <div class="row">
- <label class="col-sm-3 col-form-label text-sm-end fw-semibold">{{
resolve_form.resolution_body.label.text }}:</label>
- <div class="col-sm-9 pt-2">{{
resolve_form.resolution_body(class_="form-control", rows="3") }}</div>
- </div>
+ {% include "check-selected-candidate-forms.html" %}
- <div class="row">
- <div class="col-sm-9 offset-sm-3">{{ resolve_form.submit(class_="btn
btn-primary mt-3") }}</div>
- </div>
- </form>
{% endif %}
{% endblock content %}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]