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 278411a7f76ef0daa049a81e4edd2c17a69866fc Author: Greg Stein <[email protected]> AuthorDate: Tue Oct 7 18:04:02 2025 -0500 Switch to server-rendering of the Election workflow state. --- v3/server/pages.py | 1 + v3/server/templates/manage.ezt | 87 +++++++++++++++--------------------------- 2 files changed, 31 insertions(+), 57 deletions(-) diff --git a/v3/server/pages.py b/v3/server/pages.py index af68b68..9369bbf 100644 --- a/v3/server/pages.py +++ b/v3/server/pages.py @@ -187,6 +187,7 @@ async def admin_page(): async def manage_page(election): result = await signin_info() result.title = 'Manage an Election' + result.eid = election.eid md = election.get_metadata() result.e_title = md[1] diff --git a/v3/server/templates/manage.ezt b/v3/server/templates/manage.ezt index 7a86d47..2bcba42 100644 --- a/v3/server/templates/manage.ezt +++ b/v3/server/templates/manage.ezt @@ -6,14 +6,21 @@ </div> <div class="state-diagram"> - <div id="state-editing" class="state">Editing</div> + <div id="state-editing" + class="state [is e_state "editable"]current[end]">Editing</div> <div id="arrow1" class="arrow">→</div> - <div id="state-open" class="state">Open for Voting</div> + <div id="state-open" + class="state [is e_state "open"]current[end]">Open for Voting</div> <div id="arrow2" class="arrow">→</div> - <div id="state-closed" class="state">Closed</div> - - <button id="open-btn" class="btn btn-success action-button open-button">Open</button> - <button id="close-btn" class="btn btn-danger action-button close-button d-none">Close</button> + <div id="state-closed" + class="state [is e_state "closed"]current[end]">Closed</div> + + [is e_state "editable"] + <button id="open-btn" class="btn btn-success action-button open-button">Open</button> + [end] + [is e_state "open"] + <button id="close-btn" class="btn btn-danger action-button close-button">Close</button> + [end] </div> <!-- Open Confirmation Modal --> @@ -74,64 +81,30 @@ [include "footer.ezt"] <script> - let currentState = 'editing'; // Initial state: 'editing', 'open', 'closed' - - const states = { - editing: document.getElementById('state-editing'), - open: document.getElementById('state-open'), - closed: document.getElementById('state-closed') - }; - - const openBtn = document.getElementById('open-btn'); - const closeBtn = document.getElementById('close-btn'); const openModal = new bootstrap.Modal(document.getElementById('openConfirmModal')); const closeModal = new bootstrap.Modal(document.getElementById('closeConfirmModal')); - const confirmOpen = document.getElementById('confirm-open'); - const confirmClose = document.getElementById('confirm-close'); - - function updateUI() { - // Remove current class from all - Object.values(states).forEach(state => state.classList.remove('current')); - - // Highlight current - [# careful! opening bracket here, within ezt syntax ] - states[[]currentState].classList.add('current'); - - // Show/hide buttons - if (currentState === 'editing') { - openBtn.classList.remove('d-none'); - closeBtn.classList.add('d-none'); - } else if (currentState === 'open') { - openBtn.classList.add('d-none'); - closeBtn.classList.remove('d-none'); - } else { // closed - openBtn.classList.add('d-none'); - closeBtn.classList.add('d-none'); - } - } - - openBtn.addEventListener('click', () => { - openModal.show(); - }); + [is e_state "editable"] + const openBtn = document.getElementById('open-btn'); + openBtn.addEventListener('click', () => { + openModal.show(); + }); + [end] + const confirmOpen = document.getElementById('confirm-open'); confirmOpen.addEventListener('click', () => { - currentState = 'open'; - updateUI(); openModal.hide(); - // Here, you would call your backend API to update the election state - }); - - closeBtn.addEventListener('click', () => { - closeModal.show(); + window.location.href = '/do-open/[eid]'; }); + [is e_state "open"] + const closeBtn = document.getElementById('close-btn'); + closeBtn.addEventListener('click', () => { + closeModal.show(); + }); + [end] + const confirmClose = document.getElementById('confirm-close'); confirmClose.addEventListener('click', () => { - currentState = 'closed'; - updateUI(); closeModal.hide(); - // Here, you would call your backend API to update the election state + window.location.href = '/do-close/[eid]'; }); - - // Initial update - updateUI(); - </script> +</script>
