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]

Reply via email to