This is an automated email from the ASF dual-hosted git repository. gstein pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/steve.git
commit 246e8c2e04471662a27867f207698a5501c1b3b6 Author: Greg Stein <[email protected]> AuthorDate: Sat Dec 20 02:25:42 2025 -0600 draft up a modal to create an Election --- v3/server/templates/admin.ezt | 61 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/v3/server/templates/admin.ezt b/v3/server/templates/admin.ezt index a9753c8..760c4b6 100644 --- a/v3/server/templates/admin.ezt +++ b/v3/server/templates/admin.ezt @@ -3,7 +3,13 @@ <h1>[title]</h1> [include "flashes.ezt"] - [for owned] + <div class="mb-4"> + <button type="button" class="btn btn-primary" onclick="openCreateElectionModal()"> + <i class="bi bi-plus-circle me-1"></i>Create Election + </button> + </div> + + [for owned] <div class="w-auto mb-4"> <a href="/manage/[owned.eid]" class="text-decoration-none"> <div class="card h-100"> @@ -55,10 +61,61 @@ </div> </a> </div> - [end] + [end] <p> You have [len_election] election(s) <a href="/voter">to vote upon</a>. </p> </div> + + <!-- Create Election Modal --> + <div class="modal fade" id="createElectionModal" tabindex="-1" aria-labelledby="createElectionModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="createElectionModalLabel">Create Election</h5> + <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> + </div> + <div class="modal-body"> + <form id="createElectionForm" method="POST" action="/do-create-election"> + <input type="hidden" name="csrf_token" value="[csrf_token]"> + <div class="mb-3"> + <label for="electionTitle" class="form-label">Election Title</label> + <input type="text" class="form-control" id="electionTitle" name="title" required + aria-describedby="electionTitleHelp"> + <div id="electionTitleHelp" class="form-text"> + Give your election a descriptive title. Issues will define the specific items to vote on. + </div> + <div class="invalid-feedback">Title is required.</div> + </div> + </form> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button> + <button type="button" class="btn btn-primary" id="createElectionBtn" onclick="saveElection()">Create</button> + </div> + </div> + </div> + </div> + [include "footer.ezt"] + +<script> + // Open modal for creating election + function openCreateElectionModal() { + document.getElementById('electionTitle').value = ''; + document.getElementById('electionTitle').classList.remove('is-invalid'); + showModal('createElectionModal'); + } + + // Save election + function saveElection() { + const titleInput = document.getElementById('electionTitle'); + + if (!validateRequiredField('electionTitle')) { + return; + } + + submitFormWithLoading('createElectionForm', 'createElectionBtn', 'Creating...'); + } +</script>
