From 4ae01916358258be8d667726b673193ca70076a7 Mon Sep 17 00:00:00 2001 From: Ava Silver Date: Sun, 2 Aug 2026 15:43:47 -0400 Subject: [PATCH] add previous button --- car/app.py | 17 ++++++++++++++++- car/templates/voter.html | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/car/app.py b/car/app.py index 6b3aae9..a6a3fd6 100644 --- a/car/app.py +++ b/car/app.py @@ -97,6 +97,11 @@ def before_request(): if session.get("phonebank"): g.phonebank = True + if request.endpoint in {"show_turf", "show_voter"} and not request.args.get( + "keep_previous" + ): + session["previous_voter"] = None + c = session.get("canvasser") if c: g.canvasser = c @@ -781,9 +786,10 @@ def phonebank_next_voter(turf_id): if not is_phone(voter.bestphone): continue + session["previous_voter"] = session.get("chosen_voter") session["chosen_voter"] = voter_id cache.set(f"last_seen_{voter_id}", time.time()) - return redirect(url_for("show_voter", id=voter_id)) + return redirect(url_for("show_voter", id=voter_id, keep_previous=1)) flash("No voters to contact in this phonebank.") if not session["admin"] and len(session["turfs"]) == 1: @@ -793,6 +799,15 @@ def phonebank_next_voter(turf_id): return redirect(url_for("index")) +@app.route("/previous/") +def phonebank_previous_voter(): + if not (previous_voter := session.get("previous_voter")): + abort(404) + # pretend that the current voter was the previously "chosen voter" so back behavior works as expected + session["chosen_voter"] = previous_voter + return redirect(url_for("show_voter", id=previous_voter)) + + @app.route("/pair_phone/") def pair_phone_generate_code(): session["return_to"] = request.args.get("return", "/") diff --git a/car/templates/voter.html b/car/templates/voter.html index 935e663..1877f98 100644 --- a/car/templates/voter.html +++ b/car/templates/voter.html @@ -79,6 +79,9 @@

📋️ Contact

{% if g.phonebank %}
+ {% if session.previous_voter is not none and session.previous_voter != voter.id %} + + {% endif %}
{% endif %}