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>

Reply via email to