summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-10-23 01:49:49 -0300
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2014-10-23 01:49:49 -0300
commitd0b4e20bf4d2cb45b65e8eee54abc1eedbaa57d9 (patch)
tree6077fdfafb5ee877b6abba597881c542665e262c
parentbd98e62263cd5e6b312754e0039f4735e0b4d42a (diff)
downloadaskbot-d0b4e20bf4d2cb45b65e8eee54abc1eedbaa57d9.tar.gz
askbot-d0b4e20bf4d2cb45b65e8eee54abc1eedbaa57d9.tar.bz2
askbot-d0b4e20bf4d2cb45b65e8eee54abc1eedbaa57d9.zip
initial set of django template tags and filters
-rw-r--r--askbot/models/question.py3
-rw-r--r--askbot/templatetags/askbot_django.py159
2 files changed, 161 insertions, 1 deletions
diff --git a/askbot/models/question.py b/askbot/models/question.py
index f851e33c..36f7bbd4 100644
--- a/askbot/models/question.py
+++ b/askbot/models/question.py
@@ -11,6 +11,7 @@ from django.core import cache # import cache, not from cache import cache, to b
from django.core import exceptions as django_exceptions
from django.core.urlresolvers import reverse
from django.template.loader import get_template
+from django.template import Context
from django.utils.hashcompat import md5_constructor
from django.utils.translation import ugettext as _
from django.utils.translation import ungettext
@@ -1776,7 +1777,7 @@ class Thread(models.Model):
from askbot.views.context import get_extra as get_extra_context
context.update(get_extra_context('ASKBOT_QUESTION_SUMMARY_EXTRA_CONTEXT', None, context))
activate_language(self.language_code)
- html = get_template('widgets/question_summary.html').render(context)
+ html = get_template('widgets/question_summary.html').render(Context(context))
# INFO: Timeout is set to 30 days:
# * timeout=0/None is not a reliable cross-backend way to set infinite timeout
# * We probably don't need to pollute the cache with threads older than 30 days
diff --git a/askbot/templatetags/askbot_django.py b/askbot/templatetags/askbot_django.py
new file mode 100644
index 00000000..5a90af16
--- /dev/null
+++ b/askbot/templatetags/askbot_django.py
@@ -0,0 +1,159 @@
+from django import template
+from django.core.urlresolvers import reverse
+from django.contrib.humanize.templatetags.humanize import intcomma
+from askbot.conf import settings as askbot_settings
+from askbot.utils.pluralization import py_pluralize as _py_pluralize
+from askbot.utils import functions
+from askbot.search.state_manager import SearchState
+from askbot.utils.slug import slugify
+
+register = template.Library()
+
+@register.filter
+def as_js_bool(some_object):
+ if bool(some_object):
+ return 'true'
+ return 'false'
+
+@register.filter
+def set_sort_method(search_state, sort_method):
+ """sets sort method on search state"""
+ return search_state.change_sort(sort_method).full_url()
+
+@register.filter
+def remove_author(search_state):
+ return search_state.remove_author()
+
+@register.filter
+def remove_tags(search_state):
+ return search_state.remove_tags()
+
+@register.filter
+def change_page(search_state, page):
+ return search_state.change_page(page)
+
+@register.filter
+def get_url(search_state):
+ return search_state.full_url()
+
+@register.filter
+def get_answer_count(thread, visitor):
+ return thread.get_answer_count(visitor)
+
+@register.filter
+def get_latest_revision(thread, visitor):
+ return thread.get_latest_revision(visitor)
+
+setup_paginator = register.filter(functions.setup_paginator)
+
+@register.filter
+def reverse(iterable):
+ return reversed(iterable)
+
+@register.filter
+def tag_used_count(count):
+ return '<span class="tag-number">&#215; %s</span>' % intcomma(count)
+
+@register.filter
+def get_avatar_url(user):
+ return user.get_avatar_url()
+
+@register.filter
+def question_absolute_url(question, thread):
+ return question.get_absolute_url(thread=thread)
+
+@register.filter
+def show_block_to(block_name, user):
+ block = getattr(askbot_settings, block_name)
+ if block:
+ flag_name = block_name + '_ANON_ONLY'
+ require_anon = getattr(askbot_settings, flag_name, False)
+ return (require_anon is False) or user.is_anonymous()
+ return False
+
+@register.filter
+def py_pluralize(source, count):
+ plural_forms = source.strip().split('\n')
+ return _py_pluralize(plural_forms, count)
+
+class ThreadSummaryNode(template.Node):
+ def __init__(self, thread_token, search_state_token, visitor_token):
+ self.thread = template.Variable(thread_token)
+ self.search_state = template.Variable(search_state_token)
+ self.visitor = template.Variable(visitor_token)
+
+ def render(self, context):
+ thread = self.thread.resolve(context)
+ search_state = self.search_state.resolve(context)
+ visitor = self.visitor.resolve(context)
+ return thread.get_summary_html(search_state, visitor)
+
+@register.tag
+def thread_summary_html(thread, tokens):
+ tag_name, thread_token, search_state_token, visitor_token = tokens.split_contents()
+ return ThreadSummaryNode(thread_token, search_state_token, visitor_token)
+
+@register.inclusion_tag('widgets/avatar.html')
+def avatar(user, size):
+ return {'user': user, 'size': size}
+
+@register.inclusion_tag('widgets/tag_list.html')
+def tag_list_widget(tags, **kwargs):
+ kwargs['tags'] = tags
+ return kwargs
+
+@register.inclusion_tag('widgets/tag.html')
+def tag_widget(tag, **kwargs):
+ kwargs['tag'] = tag
+ if kwargs.get('search_state') is None:
+ kwargs['search_state'] = SearchState.get_empty()
+ return kwargs
+
+@register.inclusion_tag('widgets/radio_select.html')
+def radio_select(name=None, value=None, choices=None):
+ choices_data = list()
+ for choice in choices:
+ choice_datum = {
+ 'id': 'id_%s_%s' % (name, choice[0]),
+ 'value': choice[0],
+ 'label': choice[1]
+ }
+ choices_data.append(choice_datum)
+ return {
+ 'name': name,
+ 'value': value,
+ 'choices': choices_data
+ }
+
+@register.inclusion_tag('widgets/tag_cloud.html')
+def tag_cloud(tags=None, font_sizes=None, search_state=None):
+ tags_data = list()
+ for tag in tags:
+ tag_datum = {
+ 'name': tag.name,
+ 'font_size': font_sizes[tag.name]
+ }
+ tags_data.append(tag_datum)
+ return {
+ 'tags': tags_data,
+ 'search_state': search_state
+ }
+
+@register.inclusion_tag('widgets/user_country_flag.html')
+def user_country_flag(user):
+ context = {
+ 'user': user,
+ }
+ if user.country and user.show_counry:
+ context['flag_url'] = '/images/flags/' + user.country.code.lower() + '.gif'
+ return context
+
+@register.inclusion_tag('widgets/user_primary_group.html')
+def user_primary_group(user):
+ group = user.get_primary_group()
+ group_name = group.name.replace('-', ' ')
+ group_url = reverse('users_by_group', args=(group.id, slugify(group_name)))
+ return {
+ 'group_name': group_name,
+ 'group_url': group_url
+ }