aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorubq323 <ubq323>2021-07-18 14:38:07 +0000
committerubq323 <ubq323>2021-07-18 14:38:07 +0000
commit153ac274490c08375d58fa83042406c6ec52f968 (patch)
tree26e878a1c7df08b1a68c7ab02bd2c85550c8a3b4
parent8d2e7d0f6562f42730b8bc62576f10e7d06e5117 (diff)
vote meter on view thread page
-rw-r--r--apioforum/forum.py2
-rw-r--r--apioforum/templates/common.html37
-rw-r--r--apioforum/templates/view_forum.html39
-rw-r--r--apioforum/templates/view_thread.html3
-rw-r--r--apioforum/thread.py6
5 files changed, 47 insertions, 40 deletions
diff --git a/apioforum/forum.py b/apioforum/forum.py
index 56811e0..1da6d27 100644
--- a/apioforum/forum.py
+++ b/apioforum/forum.py
@@ -45,7 +45,7 @@ def view_forum():
# todo: make this not be duplicated from thread.py
poll_row= db.execute("""
SELECT polls.*,total_vote_counts.total_votes FROM polls
- LEFT OUTER JOIN total_vote_counts ON polls.id = total_vote_counts.poll
+ LEFT OUTER JOIN total_vote_counts ON polls.id = total_vote_counts.poll
WHERE polls.id = ?;
""",(thread['poll'],)).fetchone()
options = db.execute("""
diff --git a/apioforum/templates/common.html b/apioforum/templates/common.html
index 3321085..c8afd9e 100644
--- a/apioforum/templates/common.html
+++ b/apioforum/templates/common.html
@@ -49,3 +49,40 @@
{% macro tag(the_tag) -%}
<span class="tag" style="color: {{the_tag.text_colour}}; background-color: {{the_tag.bg_colour}}">{{the_tag.name}}</span>
{%- endmacro %}
+
+{% macro vote_meter(poll) %}
+ {% set total_votes = poll.total_votes %}
+ {% set n = namespace() %}
+ {% set n.runningtotal = 0 %}
+ <svg width="100%" height="15px" xmlns="http://www.w3.org/2000/svg">
+ {% if total_votes == 0 %}
+ <text text-anchor="middle" dominant-baseline="middle" x="11%" y="55%" fill="black" style="font-size:15px">no votes</text>
+ {% else %}
+ {% for opt in poll.options %}
+ {% set opt_count = opt.num or 0 %}
+ {% set colour = (loop.count|string + opt.text)|gen_colour %}
+ {% if opt_count != 0 %}
+ {% set percentage = 100*(opt_count/total_votes) %}
+ {# todo: do this in css somehow #}
+ {% if opt.text|length > 10 %}
+ {% set opt_text = opt.text[:7] + "..." %}
+ {% else %}
+ {% set opt_text = opt.text %}
+ {% endif %}
+ <rect y="0" height="100%" x="{{n.runningtotal}}%" width="{{percentage}}%" stroke="black" fill="{{colour}}" />
+ <text text-anchor="middle" dominant-baseline="middle" y="55%" fill="black" style="font-size:15px" x="{{n.runningtotal+(percentage/2)}}%">
+ {{opt_text}}: {{opt_count}}
+ </text>
+ {% set n.runningtotal = n.runningtotal + percentage %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ <desc>
+ poll: {{poll.title}}
+ {% for opt in poll.options %}
+ option "{{opt.text}}": {{opt.num or 0}} votes
+ {% endfor %}
+ total votes: {{total_votes}}
+ </desc>
+ </svg>
+{% endmacro %}
diff --git a/apioforum/templates/view_forum.html b/apioforum/templates/view_forum.html
index 2e49a41..e8d4f8a 100644
--- a/apioforum/templates/view_forum.html
+++ b/apioforum/templates/view_forum.html
@@ -1,5 +1,5 @@
{% extends 'base.html' %}
-{% from 'common.html' import ts, tag, disp_user, post_url %}
+{% from 'common.html' import ts, tag, disp_user, post_url, vote_meter %}
{% block header %}<h1>{% block title %}apioforum{%endblock%}</h1>{%endblock%}
{%block content%}
<p>welcome to the apioforum</p>
@@ -44,43 +44,8 @@
</div>
{% endif %}
{% if thread_polls[thread.id] %}
- {% set poll = thread_polls[thread.id] %}
- {% set total_votes = poll.total_votes %}
- {% set n = namespace() %}
- {% set n.runningtotal = 0 %}
-
<div class="thread-vote-summary">
- <svg width="100%" height="15px" xmlns="http://www.w3.org/2000/svg">
- {% if total_votes == 0 %}
- <text text-anchor="middle" dominant-baseline="middle" x="11%" y="55%" fill="black" style="font-size:15px">no votes</text>
- {% else %}
- {% for opt in poll.options %}
- {% set opt_count = opt.num or 0 %}
- {% set colour = (loop.count|string + opt.text)|gen_colour %}
- {% if opt_count != 0 %}
- {% set percentage = 100*(opt_count/total_votes) %}
- {# todo: do this in css somehow #}
- {% if opt.text|length > 10 %}
- {% set opt_text = opt.text[:7] + "..." %}
- {% else %}
- {% set opt_text = opt.text %}
- {% endif %}
- <rect y="0" height="100%" x="{{n.runningtotal}}%" width="{{percentage}}%" stroke="black" fill="{{colour}}" />
- <text text-anchor="middle" dominant-baseline="middle" y="55%" fill="black" style="font-size:15px" x="{{n.runningtotal+(percentage/2)}}%">
- {{opt_text}}: {{opt_count}}
- </text>
- {% set n.runningtotal = n.runningtotal + percentage %}
- {% endif %}
- {% endfor %}
- {% endif %}
- <desc>
- poll: {{poll.title}}
- {% for opt in poll.options %}
- option "{{opt.text}}": {{opt.num or 0}} votes
- {% endfor %}
- total votes: {{total_votes}}
- </desc>
- </svg>
+ {{ vote_meter(thread_polls[thread.id]) }}
</div>
{% endif %}
</div>
diff --git a/apioforum/templates/view_thread.html b/apioforum/templates/view_thread.html
index 7bf253d..aec9103 100644
--- a/apioforum/templates/view_thread.html
+++ b/apioforum/templates/view_thread.html
@@ -1,4 +1,4 @@
-{% from 'common.html' import disp_post,tag %}
+{% from 'common.html' import disp_post,tag,vote_meter %}
{% extends 'base.html' %}
{% block header %}
<h1>{%block title %}{{thread.title}}{% endblock %}</h1>
@@ -12,6 +12,7 @@
<li>#{{opt.option_idx}} - {{opt.text}} - {{opt.num or 0}}</li>
{%endfor%}
</ul>
+{{ vote_meter(poll) }}
{% endif %}
<div class="thread-top-bar">
<span class="thread-top-bar-a">
diff --git a/apioforum/thread.py b/apioforum/thread.py
index daf0b85..f8e8036 100644
--- a/apioforum/thread.py
+++ b/apioforum/thread.py
@@ -33,7 +33,11 @@ def view_thread(thread_id):
poll = None
votes = None
if thread['poll'] is not None:
- poll_row = db.execute("SELECT * FROM polls where id = ?",(thread['poll'],)).fetchone()
+ poll_row= db.execute("""
+ SELECT polls.*,total_vote_counts.total_votes FROM polls
+ LEFT OUTER JOIN total_vote_counts ON polls.id = total_vote_counts.poll
+ WHERE polls.id = ?;
+ """,(thread['poll'],)).fetchone()
options = db.execute("""
SELECT poll_options.*, vote_counts.num
FROM poll_options