summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoretienne2008-12-06 01:21:48 +0000
committeretienne2008-12-06 01:21:48 +0000
commit599c62e4e77aaa4898b9ba690e39b1102ac09a71 (patch)
treeb40a9757d4e3cc0152b96cc79efbf3147eebfd86
parent23de64513f703edc914a77787a804d322fc86b05 (diff)
Highlight prefered choice - Open/close a poll - Css modification
-rw-r--r--polls/models.py2
-rw-r--r--polls/views.py32
-rw-r--r--static/styles.css22
-rw-r--r--templates/createOrEdit.html29
-rw-r--r--templates/vote.html31
5 files changed, 73 insertions, 43 deletions
diff --git a/polls/models.py b/polls/models.py
index f4cf93a..7128e0d 100644
--- a/polls/models.py
+++ b/polls/models.py
@@ -90,4 +90,4 @@ class Vote(models.Model):
VOTE = ((1, (_('Yes'), _('Yes'))),
(0, (_('No'), _('Maybe')), ),
(-1, (_('No'), _('No'))),)
- value = models.IntegerField(choices=VOTE, blank=True)
+ value = models.IntegerField(choices=VOTE, blank=True, null=True)
diff --git a/polls/views.py b/polls/views.py
index 4c6499d..b81e393 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -202,9 +202,13 @@ public=public)
Vote.objects.filter(choice=choice).delete()
choice.delete()
if key.startswith('modify_') and request.POST[key]:
- choice = Choice.objects.get(id=int(key[len('modify_'):]))
- choice.name = request.POST[key]
- choice.save()
+ try:
+ choice = Choice.objects.get(id=int(key[len('modify_'):]))
+ choice.name = request.POST[key]
+ choice.save()
+ except Choice.DoesNotExist:
+ # throw when want to modify a deleted choice
+ pass
return response_dct, None
response_dct, redirect = getBaseResponse(request)
@@ -394,7 +398,7 @@ def poll(request, poll_url):
return HttpResponseRedirect(url)
# a vote is submitted
- if 'author_name' in request.POST:
+ if 'author_name' in request.POST and poll.open:
if 'voter' in request.POST:
# modification of an old vote
modifyVote(request, choices)
@@ -404,17 +408,14 @@ def poll(request, poll_url):
poll.save()
# 'voter' is in request.GET when the edit button is pushed
- if 'voter' in request.GET:
+ if 'voter' in request.GET and poll.open:
try:
response_dct['current_voter_id'] = int(request.GET['voter'])
except ValueError:
pass
response_dct.update({'poll_type_name':poll.getTypeLabel(),
- 'poll_type':poll.type,
- 'poll_name':poll.name,
- 'poll_desc':poll.description,
- 'poll_base_url':poll.base_url,
+ 'poll':poll,
'VOTE':Vote.VOTE,})
response_dct['base_url'] = "/".join(request.path.split('/')[:-2]) \
+ '/%s/' % poll.base_url
@@ -423,6 +424,8 @@ def poll(request, poll_url):
voters = Voter.objects.filter(poll=poll)
for choice in choices:
choice.sum = 0
+ max = -100
+ max_ids = []
choice_ids = [choice.id for choice in choices]
for voter in voters:
# highlight a voter
@@ -436,7 +439,13 @@ def poll(request, poll_url):
for vote in voter.votes:
if vote.choice.id in choice_ids:
if vote.value:
- choices[choice_ids.index(vote.choice.id)].sum += vote.value
+ c_id = choice_ids.index(vote.choice.id)
+ choices[c_id].sum += vote.value
+ if choices[c_id].sum > max:
+ max_ids = [c_id]
+ max = choices[c_id].sum
+ elif choices[c_id].sum == max:
+ max_ids.append(c_id)
else:
# the choice is probably not available anymore
voter.votes.remove(vote)
@@ -449,7 +458,8 @@ def poll(request, poll_url):
vote.save()
idx = choices.index(choice)
voter.votes.insert(idx, vote)
-
+ for max_id in max_ids:
+ choices[max_id].highlight = True
# set non-available choices if the limit is reached for a choice
response_dct['limit_set'] = None
for choice in choices:
diff --git a/static/styles.css b/static/styles.css
index 0d44f63..e95cd1e 100644
--- a/static/styles.css
+++ b/static/styles.css
@@ -138,20 +138,24 @@ color:grey;
text-decoration:none;
}
-.error{
-color:red;
+.alert{
+color:blue;
}
-#new_poll input{
-width:100px;
+.new_poll{
+width:600px;
+}
+
+.new_poll input{
+width:160px;
}
-#new_poll input#limit{
+.new_poll input#limit{
width:20px;
}
-#new_poll textarea{
-width:130px;
+.new_poll textarea{
+width:160px;
height:100px;
}
@@ -221,7 +225,11 @@ text-align:center;
#sum td{
border:None;
+}
+
+.highlight{
font-weight:bold;
+background-color:#ced3e1;
}
tr.highlighted_voter td{
diff --git a/templates/createOrEdit.html b/templates/createOrEdit.html
index 417f7b7..3e88bfe 100644
--- a/templates/createOrEdit.html
+++ b/templates/createOrEdit.html
@@ -7,7 +7,7 @@
{% endif %}
<h2>{% if new %}{% trans "New poll" %}{% else %}{% trans "Edit poll" %}{% endif %}</h2>
{% if error %}<p class='error'>{{ error }}</p>{% endif %}
-<table id='new_poll'>
+<table class='new_poll'>
<form action="{{admin_url}}" method="post">
{% if not new %}<tr>
@@ -88,14 +88,6 @@
</td>
</tr>
- {% if choices %}<tr>
- <th>{% trans "Choices" %}</th><th>{% trans "Label" %}</th><th>{% trans "Limit" %}</th><th>{% trans "Delete?"%}</th>
- </tr>
- {% for choice in choices %}<tr>
- <td>&nbsp;</td><td><input type='text' name='modify_{{choice.id}}' value="{{choice.name}}"/></td><td>{%if choice.limit%}{% blocktrans with choice.limit as choice_limit%}Limited to {{choice_limit}} vote(s){% endblocktrans %}{%endif%}</td><td><input type='checkbox' name='delete_{{choice.id}}'/></td>
- </tr>
- {% endfor %}{% endif %}
-
<tr>
<td></td>
<td>{% if new %}<input type='hidden' name='new' value='1'/>
@@ -106,9 +98,24 @@
</tr>
</form>
-{% if new %}
</table>
-{% else %}
+{% if not new %}
+<h2>{% trans "Choices" %}</h2>
+<table class='new_poll'>
+ {% if choices %}<form action="{{admin_url}}" method="post">
+ <tr>
+ <th>{% trans "Choices" %}</th><th>{% trans "Label" %}</th><th>{% trans "Limit" %}</th><th>{% trans "Delete?"%}</th>
+ </tr>
+ {% for choice in choices %}<tr>
+ <td>&nbsp;</td><td><input type='text' name='modify_{{choice.id}}' value="{{choice.name}}"/></td><td>{%if choice.limit%}{% blocktrans with choice.limit as choice_limit%}Limited to {{choice_limit}} vote(s){% endblocktrans %}{%endif%}</td><td><input type='checkbox' name='delete_{{choice.id}}'/></td>
+ </tr>{% endfor %}
+ <tr>
+ <td></td>
+ <td><input type='hidden' name='edit' value='1'/>
+ <input type='submit' value='{% trans "Edit" %}' /></td>
+ </tr>
+ </form>{% endif %}
+
<form action="{{admin_url}}" method="post">
<tr><td><label>{% trans "New choice" %}</label></td><td><input type='text' name='new_choice'/></td><td>{%trans "Limited to"%} <input type='text' name='limit' id='limit'/> {%trans "vote(s)"%}</td><td class='form_description'>{% trans "Setting a new choice. Optionally you can set a limit of vote for this choice. This limit is usefull for limited resources allocation." %}</td></tr>
<tr>
diff --git a/templates/vote.html b/templates/vote.html
index e000bc9..803813e 100644
--- a/templates/vote.html
+++ b/templates/vote.html
@@ -2,9 +2,10 @@
{% load i18n %}
{% block content %}
- <h2>{{poll_type_name}} - {{poll_name}}</h2>
-{% if error %}<p class='error'>{{ error }}</p>{% endif %}
- <p>{{poll_desc}}</p>
+ <h2>{{poll_type_name}} - {{poll.name}}</h2>
+{% if error %}<p class='alert'>{{ error }}</p>{% endif %}
+{% if not poll.open %}<p class='alert'>{% trans "The current poll is closed."%}</p>{% endif %}
+ <p>{{ poll.description }}</p>
<form method='post' action='{{base_url}}'>
<div id='poll_table'>
<table id='poll'>
@@ -20,13 +21,13 @@
<td><input type='text' name='author_name' value='{{voter.user.name}}'/></td>
{% for vote in voter.votes %}<td>
{% if vote.choice.available or vote.value %}
- {% ifequal poll_type 'P' %}
+ {% ifequal poll.type 'P' %}
<input type='checkbox' name='vote_{{vote.id}}'{%ifequal vote.value 1%} checked='checked'{%endifequal%}/>
{% endifequal %}
- {% ifequal poll_type 'O' %}
+ {% ifequal poll.type 'O' %}
<input type='radio' name='vote' value='{{vote.id}}' {%ifequal vote.value 1%} checked='checked'{%endifequal%}/>
{% endifequal %}
- {% ifequal poll_type 'B' %}
+ {% ifequal poll.type 'B' %}
<select name='vote_{{vote.id}}'>
{% for vote_choice in VOTE %}
<option value='{{vote_choice.0}}'{%ifequal vote.value vote_choice.0%} selected='selected'{%endifequal%}>{{vote_choice.1.1}}</option>
@@ -37,10 +38,10 @@
{% trans "Limit reached" %}
{% endif %}
</td>{%endfor%}
- {%else%}<td class='simple'><a href='?voter={{voter.id}}'>{% trans "Edit" %}</a></td>
+ {%else%}<td class='simple'>{% if poll.open %}<a href='?voter={{voter.id}}'>{% trans "Edit" %}</a>{%else%}&nbsp;{%endif%}</td>
<td>{{voter.user.name}}</td>
{% for vote in voter.votes %}<td class='{%ifequal vote.value 1%}OK{%else%}{%ifequal vote.value 0%}OKO{%else%}KO{%endifequal%}{%endifequal%}'>
- {%ifequal poll_type 'B'%}
+ {%ifequal poll.type 'B'%}
{%for VOT in VOTE%}
{%ifequal VOT.0 vote.value%}{{VOT.1.1}}{%endifequal%}{%endfor%}
{%else%}
@@ -52,16 +53,17 @@
{%endifequal%}
</tr>{%endfor%}
{%if not current_voter_id%}
+ {% if poll.open %}
<tr>
<td class='simple'></td>
<td><input type='text' name='author_name'/></td>
{%for choice in choices%}<td>
{% if choice.available %}
- {% ifequal poll_type 'P' %}
+ {% ifequal poll.type 'P' %}
<input type='checkbox' name='choice_{{choice.id}}'/>{% endifequal %}
- {% ifequal poll_type 'O' %}
+ {% ifequal poll.type 'O' %}
<input type='radio' name='choice' value='{{choice.id}}'/>{% endifequal %}
- {% ifequal poll_type 'B' %}
+ {% ifequal poll.type 'B' %}
<select name='choice_{{choice.id}}'>{% for vote_choice in VOTE %}
<option value='{{vote_choice.0}}'{%ifequal vote_choice.0 0%} selected='selected'{%endifequal%}>{{vote_choice.1.1}}</option>{% endfor %}
</select>
@@ -72,17 +74,20 @@
</td>{%endfor%}
</tr>
{%endif%}
+ {%endif%}
<tr id='sum'>
<td class='simple'></td><th>{% trans "Sum" %}</th>
- {% for choice in choices %}<td>{{choice.sum}}</td>
+ {% for choice in choices %}<td{%if choice.highlight %} class='highlight'{%endif%}>{{choice.sum}}</td>
{% endfor %}
</tr>
</table>
+ {% if poll.open %}
<input type='submit' value='{%if current_voter_id%}{% trans "Edit" %}{%else%}{% trans "Participate" %}{%endif%}'/>
+ {% endif %}
</div>
<hr class='spacer'/>
</form>
<div id='syndication'>
- {% trans "Remain informed of poll evolution:" %} <a href="/papillon/feeds/poll/{{poll_base_url}}/">{%trans "Syndication"%}</a>
+ {% trans "Remain informed of poll evolution:" %} <a href="/papillon/feeds/poll/{{poll.base_url}}/">{%trans "Syndication"%}</a>
</div>
{% endblock %}