aboutsummaryrefslogtreecommitdiffstats
path: root/app.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2024-02-29 18:00:11 +0200
committerJan Tuomi <jan@jantuomi.fi>2024-12-21 19:43:13 +0200
commita137846541ef862ebd40ed8e2edc4ff464d7c0ca (patch)
tree507dbe5693aa171fca857ee8046a217596b78d5e /app.py
parent3213fb576a0aec19527f44237fbcfe4b65af6f29 (diff)
Add user-agent parsing to guess table or list mode
Diffstat (limited to 'app.py')
-rw-r--r--app.py33
1 files changed, 22 insertions, 11 deletions
diff --git a/app.py b/app.py
index c7a4267..6e575de 100644
--- a/app.py
+++ b/app.py
@@ -2,9 +2,8 @@ from dotenv import load_dotenv
load_dotenv()
import datetime
-import sys
import os
-import traceback
+from user_agents import parse as parse_user_agent
from dataclasses import dataclass
from flask import Flask, render_template, redirect, request, make_response
from flask_compress import Compress
@@ -91,7 +90,15 @@ def poll(id):
if poll is None:
return "Poll not found", 404
- display_mode = request.cookies.get("diddle_display_mode", "table")
+ display_mode_cookie = request.cookies.get("diddle_display_mode")
+ if display_mode_cookie is None:
+ user_agent = parse_user_agent(request.user_agent.string)
+ if user_agent.is_mobile or user_agent.is_tablet:
+ display_mode = "list"
+ else:
+ display_mode = "table"
+ else:
+ display_mode = display_mode_cookie
voter_names_set: set[str] = set()
selections: dict[VoterNameChoiceIdPair, int] = {}
@@ -103,14 +110,18 @@ def poll(id):
voter_names = list(voter_names_set)
voter_names.sort()
- return render_template('poll.html.j2',
- poll=poll,
- selections=selections,
- choices=poll.choices,
- voter_names=voter_names,
- now=datetime.datetime.now(),
- display_mode=display_mode,
- )
+ resp = make_response(
+ render_template("poll.html.j2",
+ poll=poll,
+ selections=selections,
+ choices=poll.choices,
+ voter_names=voter_names,
+ now=datetime.datetime.now(),
+ display_mode=display_mode))
+
+ resp.set_cookie("diddle_display_mode", display_mode)
+ return resp
+
@app.post("/poll/<id>/vote")
def vote_poll(id):