summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--forum/management/commands/multi_award_badges.py4
-rw-r--r--forum/models/repute.py6
-rwxr-xr-xforum/skins/default/media/style/style.css8
-rw-r--r--forum/skins/default/templates/header.html2
-rw-r--r--forum/skins/default/templates/input_bar.html2
-rw-r--r--forum/skins/default/templates/questions.html2
-rw-r--r--forum/templatetags/extra_tags.py162
-rw-r--r--locale/en/LC_MESSAGES/django.mobin24018 -> 24140 bytes
-rw-r--r--locale/en/LC_MESSAGES/django.po8
9 files changed, 129 insertions, 65 deletions
diff --git a/forum/management/commands/multi_award_badges.py b/forum/management/commands/multi_award_badges.py
index 4361713e..1ef40835 100644
--- a/forum/management/commands/multi_award_badges.py
+++ b/forum/management/commands/multi_award_badges.py
@@ -1,3 +1,4 @@
+#encoding:utf-8
"""
#-------------------------------------------------------------------------------
# Name: Award badges command
@@ -12,7 +13,6 @@
#-------------------------------------------------------------------------------
"""
#!/usr/bin/env python
-#encoding:utf-8
from django.db import connection
from django.shortcuts import get_object_or_404
@@ -20,7 +20,7 @@ from django.contrib.contenttypes.models import ContentType
from forum.models import Badge, User, Award, Question, Answer, Tag
from forum import const
-from forum.management.commands.base_command BaseCommand
+from forum.management.commands.base_command import BaseCommand
class Command(BaseCommand):
def handle_noargs(self, **options):
diff --git a/forum/models/repute.py b/forum/models/repute.py
index bc6bec1d..bf44922b 100644
--- a/forum/models/repute.py
+++ b/forum/models/repute.py
@@ -17,6 +17,12 @@ class Badge(models.Model):
(SILVER, _('silver')),
(BRONZE, _('bronze')),
)
+ CSS_CLASSES = {
+ GOLD: 'badge1',
+ SILVER: 'badge2',
+ BRONZE: 'badge3',
+ }
+ DISPLAY_SYMBOL = '●'
name = models.CharField(max_length=50)
type = models.SmallIntegerField(choices=TYPE_CHOICES)
diff --git a/forum/skins/default/media/style/style.css b/forum/skins/default/media/style/style.css
index 25cb2ada..1ae117c4 100755
--- a/forum/skins/default/media/style/style.css
+++ b/forum/skins/default/media/style/style.css
@@ -275,7 +275,8 @@ blockquote {
margin-left: 0;
}
#top a img {
- vertical-align:text-bottom;
+ vertical-align:middle;
+ margin-bottom:2px;
}
#logo {
@@ -2652,3 +2653,8 @@ p.signup_p {
text-align:right;
padding-right:5px;
}
+
+#top a.ab-nav-karma, #top a.ab-nav-badges {
+ margin: 0;
+ text-decoration: none;
+}
diff --git a/forum/skins/default/templates/header.html b/forum/skins/default/templates/header.html
index 014c2990..49811fde 100644
--- a/forum/skins/default/templates/header.html
+++ b/forum/skins/default/templates/header.html
@@ -21,7 +21,7 @@
/>
</a>
{% endspaceless %}
- <span>(karma:</span> {% get_score_badge request.user %})
+ ({% get_long_score_and_badge_report user %})
<a href="{% url logout %}">{% trans "logout" %}</a>
{% else %}
<a href="{% url user_signin %}">{% trans "login" %}</a>
diff --git a/forum/skins/default/templates/input_bar.html b/forum/skins/default/templates/input_bar.html
index 59236350..66e6ed94 100644
--- a/forum/skins/default/templates/input_bar.html
+++ b/forum/skins/default/templates/input_bar.html
@@ -30,7 +30,7 @@
value="true"
class="cancelSearchBtn"/>
{% endif %}
- <input type="submit" value="{% trans "search" %}" name="search" class="searchBtn" default />
+ <input type="submit" value="{% trans "search" %}" name="search" class="searchBtn" />
{% if active_tab == "tags" %}
<input type="hidden" name="t" value="tag"/>
{% else %}
diff --git a/forum/skins/default/templates/questions.html b/forum/skins/default/templates/questions.html
index 78ea8885..1988f0cb 100644
--- a/forum/skins/default/templates/questions.html
+++ b/forum/skins/default/templates/questions.html
@@ -50,7 +50,7 @@
<div class="tabsC">
<span class="label">{% trans "In:" %}</span>
<a id="all" class="off" href="?scope=all" title="{% trans "see all questions" %}">{% trans "all" %}</a>
- <a id="unanswered" class="off" href="?scope=unanswered&sort=coldest" title="{% trans "see unanswered questions" %}">{% trans "unanswered" %}</a>
+ <a id="unanswered" class="off" href="?scope=unanswered&amp;sort=coldest" title="{% trans "see unanswered questions" %}">{% trans "unanswered" %}</a>
{% if request.user.is_authenticated %}
<a id="favorite" class="off" href="?scope=favorite" title="{% trans "see your favorite questions" %}">{% trans "favorite" %}</a>
{% endif %}
diff --git a/forum/templatetags/extra_tags.py b/forum/templatetags/extra_tags.py
index e82537fa..15f97ac8 100644
--- a/forum/templatetags/extra_tags.py
+++ b/forum/templatetags/extra_tags.py
@@ -9,6 +9,7 @@ from django.utils.encoding import smart_unicode
from django.utils.safestring import mark_safe
from forum.const import *
from forum.models import Question, Answer, QuestionRevision, AnswerRevision
+from forum.models import Badge
from django.utils.translation import ugettext as _
from django.utils.translation import ungettext
from django.conf import settings
@@ -149,63 +150,114 @@ def post_contributor_info(post,contributor_type='original_author'):
'wiki_on':forum_settings.WIKI_ON,
'contributor_type':contributor_type
}
-
+
+
+BADGE_TEMPLATE = '<span title="%(pluralized_badge_count)s">' \
+ + '<span class="%(badge_css_class)s">%(badge_symbol)s</span>' \
+ + '<span class="badgecount">%(badge_count)s</span>' \
+ + '</span>'
+BADGE_LEVELS = dict(Badge.TYPE_CHOICES)
+
+def render_badge_counter(badge_level = None, badge_count = None):
+
+ pluralized_badge_count = ungettext(
+ '%(badge_count)d %(badge_level)s badge',
+ '%(badge_count)d %(badge_level)s badges',
+ badge_count
+ ) % {
+ 'badge_count': badge_count,
+ 'badge_level': BADGE_LEVELS[badge_level]
+ }
+
+ output = BADGE_TEMPLATE % \
+ {
+ 'pluralized_badge_count': pluralized_badge_count,
+ 'badge_css_class': Badge.CSS_CLASSES[badge_level],
+ 'badge_symbol': Badge.DISPLAY_SYMBOL,
+ 'badge_count': badge_count,
+ }
+ return output
+
+
+REP_TEMPLATE = '<span class="reputation-score" ' \
+ + 'title="%(reputation)s %(repword)s">%(reputation)s</span>'
@register.simple_tag
-def get_score_badge(user):
- BADGE_TEMPLATE = '<span class="score" title="%(reputation)s %(reputationword)s">%(reputation)s</span>'
- if user.gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(gold)s %(badgesword)s">'
- '<span class="badge1">&#9679;</span>'
- '<span class="badgecount">%(gold)s</span>'
- '</span>')
- if user.silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(silver)s %(badgesword)s">'
- '<span class="silver">&#9679;</span>'
- '<span class="badgecount">%(silver)s</span>'
- '</span>')
- if user.bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(bronze)s %(badgesword)s">'
- '<span class="bronze">&#9679;</span>'
- '<span class="badgecount">%(bronze)s</span>'
- '</span>')
- BADGE_TEMPLATE = smart_unicode(BADGE_TEMPLATE, encoding='utf-8', strings_only=False, errors='strict')
- return mark_safe(BADGE_TEMPLATE % {
- 'reputation' : user.reputation,
- 'gold' : user.gold,
- 'silver' : user.silver,
- 'bronze' : user.bronze,
- 'badgesword' : _('badges'),
- 'reputationword' : _('reputation points'),
- })
-
+def render_reputation_counter(rep):
+ return REP_TEMPLATE % {
+ 'repword': _('reputation points'),
+ 'reputation': rep
+ }
+
+
@register.simple_tag
-def get_score_badge_by_details(rep, gold, silver, bronze):
- BADGE_TEMPLATE = '<span class="reputation-score" title="%(reputation)s %(repword)s">%(reputation)s</span>'
- if gold > 0 :
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(gold)s %(badgeword)s">'
- '<span class="badge1">&#9679;</span>'
- '<span class="badgecount">%(gold)s</span>'
- '</span>')
- if silver > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(silver)s %(badgeword)s">'
- '<span class="badge2">&#9679;</span>'
- '<span class="badgecount">%(silver)s</span>'
- '</span>')
- if bronze > 0:
- BADGE_TEMPLATE = '%s%s' % (BADGE_TEMPLATE, '<span title="%(bronze)s %(badgeword)s">'
- '<span class="badge3">&#9679;</span>'
- '<span class="badgecount">%(bronze)s</span>'
- '</span>')
- BADGE_TEMPLATE = smart_unicode(BADGE_TEMPLATE, encoding='utf-8', strings_only=False, errors='strict')
- return mark_safe(BADGE_TEMPLATE % {
- 'reputation' : rep,
- 'gold' : gold,
- 'silver' : silver,
- 'bronze' : bronze,
- 'repword' : _('reputation points'),
- 'badgeword' : _('badges'),
- })
-
+def render_badge_counters(gold_count, silver_count, bronze_count):
+ output = ''
+ if gold_count > 0 :
+ output += render_badge_counter(
+ badge_level = Badge.GOLD,
+ badge_count = gold_count
+ )
+ if silver_count > 0:
+ output += render_badge_counter(
+ badge_level = Badge.SILVER,
+ badge_count = silver_count
+ )
+ if bronze_count > 0:
+ output += render_badge_counter(
+ badge_level = Badge.BRONZE,
+ badge_count = bronze_count
+ )
+ return output
+
+
+@register.simple_tag
+def get_score_badge_by_details(rep, gold_count, silver_count, bronze_count):
+ output = render_reputation_counter(rep)
+ output += render_badge_counters(gold_count, silver_count, bronze_count)
+ return output
+
+
+#this one is used for the header next to user profile and logout links
+REP_TEMPLATE2 = '<a class="ab-nav-karma" href="%(karma_graph_url)s" ' \
+ + ' title="%(karma_phrase)s">' \
+ + '%(rep_word)s: %(reputation)s</a>'
+BADGE_TEMPLATE2 = '<a class="ab-nav-badges" href="%(user_badges_url)s">' \
+ + '%(badge_counters)s</a>'
+@register.simple_tag
+def get_long_score_and_badge_report(user):
+ profile_url = user.get_absolute_url()
+ karma_graph_url = profile_url + '?sort=reputation'
+ karma_phrase = _('your karma is %(reputation)s') \
+ % { 'reputation': user.reputation }
+
+ output = REP_TEMPLATE2 % {
+ 'repword': _('reputation points'),
+ 'karma_graph_url': karma_graph_url,
+ 'reputation': user.reputation,
+ 'karma_phrase': karma_phrase,
+ 'rep_word': _('reputation points'),
+ }
+
+ badge_counters = render_badge_counters(user.gold, user.silver, user.bronze)
+
+ if badge_counters != '':
+ output += ' ' + BADGE_TEMPLATE2 % {
+ 'user_badges_url': profile_url + '#badges',
+ 'badge_counters': _('badges: ') + badge_counters
+ }
+ return output
+
+
+@register.simple_tag
+def get_score_badge(user):
+ return get_score_badge_by_details(
+ user.reputation,
+ user.gold,
+ user.silver,
+ user.bronze
+ )
+
+
@register.simple_tag
def get_user_vote_image(dic, key, arrow):
if dic.has_key(key):
diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo
index a21172b6..eacc102a 100644
--- a/locale/en/LC_MESSAGES/django.mo
+++ b/locale/en/LC_MESSAGES/django.mo
Binary files differ
diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po
index 3bbc706b..3da33966 100644
--- a/locale/en/LC_MESSAGES/django.po
+++ b/locale/en/LC_MESSAGES/django.po
@@ -1340,10 +1340,10 @@ msgid ""
"go to %(email_settings_link)s to change frequency of email updates or %"
"(admin_email)s administrator"
msgstr ""
-"<p>Please remember that you can always <a href='%(link)s'>adjust</a> "
+"<p>Please remember that you can always <a href='%(email_settings_link)s'>adjust</a> "
"frequency of the email updates or turn them off entirely.<br/>If you believe "
"that this message was sent in an error, please email about it the forum "
-"administrator at %(email)s.</p><p>Sincerely,</p><p>Your friendly Q&A forum "
+"administrator at %(admin_email)s.</p><p>Sincerely,</p><p>Your friendly Q&A forum "
"server.</p>"
#: forum/migrations/0005_install_badges.py:10
@@ -2678,11 +2678,11 @@ msgstr ""
#: forum/skins/default/templates/header.html:10
msgid "logout"
-msgstr ""
+msgstr "sign out"
#: forum/skins/default/templates/header.html:12
msgid "login"
-msgstr ""
+msgstr "Hi, there! Please sign in"
#: forum/skins/default/templates/header.html:22
msgid "back to home page"