summaryrefslogtreecommitdiffstats
path: root/askbot/templatetags
diff options
context:
space:
mode:
authorTomasz Zielinski <tomasz.zielinski@pyconsultant.eu>2012-01-14 23:49:04 +0100
committerTomasz Zielinski <tomasz.zielinski@pyconsultant.eu>2012-01-14 23:49:04 +0100
commit6b3f4f81d3617bbb3e4f77d7e6252e659037083e (patch)
tree5f07c7778513136128b2873187da4d864c9c9b55 /askbot/templatetags
parentd40a86164c91ce26ea796a6253712bdab8218dea (diff)
downloadaskbot-6b3f4f81d3617bbb3e4f77d7e6252e659037083e.tar.gz
askbot-6b3f4f81d3617bbb3e4f77d7e6252e659037083e.tar.bz2
askbot-6b3f4f81d3617bbb3e4f77d7e6252e659037083e.zip
Added reseting search page to 1 on search terms change; minor cleanup of templates and template filters
Diffstat (limited to 'askbot/templatetags')
-rw-r--r--askbot/templatetags/extra_filters.py210
-rw-r--r--askbot/templatetags/extra_filters_jinja.py19
2 files changed, 6 insertions, 223 deletions
diff --git a/askbot/templatetags/extra_filters.py b/askbot/templatetags/extra_filters.py
deleted file mode 100644
index 7bf3a8af..00000000
--- a/askbot/templatetags/extra_filters.py
+++ /dev/null
@@ -1,210 +0,0 @@
-from django import template
-from django.core import exceptions as django_exceptions
-from django.utils.translation import ugettext as _
-from askbot import exceptions as askbot_exceptions
-from askbot import auth
-from askbot.conf import settings as askbot_settings
-from askbot.utils.slug import slugify
-import urllib2
-
-register = template.Library()
-
-@register.filter
-def collapse(input):
- input = unicode(input)
- return ' '.join(input.split())
-
-slugify = register.filter(slugify)
-
-def make_template_filter_from_permission_assertion(
- assertion_name = None,
- filter_name = None,
- allowed_exception = None
- ):
- """a decorator-like function that will create a True/False test from
- permission assertion
- """
- def filter_function(user, post):
-
- if askbot_settings.ALWAYS_SHOW_ALL_UI_FUNCTIONS:
- return True
-
- if user.is_anonymous():
- return False
-
- assertion = getattr(user, assertion_name)
- if allowed_exception:
- try:
- assertion(post)
- return True
- except allowed_exception:
- return True
- except django_exceptions.PermissionDenied:
- return False
- else:
- try:
- assertion(post)
- return True
- except django_exceptions.PermissionDenied:
- return False
-
- register.filter(filter_name, filter_function)
- return filter_function
-
-
-@register.filter
-def can_moderate_user(user, other_user):
- if user.is_authenticated() and user.can_moderate_user(other_user):
- return True
- return False
-
-can_flag_offensive = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_flag_offensive',
- filter_name = 'can_flag_offensive',
- allowed_exception = askbot_exceptions.DuplicateCommand
- )
-
-can_post_comment = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_post_comment',
- filter_name = 'can_post_comment'
- )
-
-can_close_question = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_close_question',
- filter_name = 'can_close_question'
- )
-
-can_delete_comment = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_delete_comment',
- filter_name = 'can_delete_comment'
- )
-
-#this works for questions, answers and comments
-can_delete_post = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_delete_post',
- filter_name = 'can_delete_post'
- )
-
-can_reopen_question = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_reopen_question',
- filter_name = 'can_reopen_question'
- )
-
-can_edit_post = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_edit_post',
- filter_name = 'can_edit_post'
- )
-
-can_retag_question = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_retag_question',
- filter_name = 'can_retag_question'
- )
-
-can_accept_best_answer = make_template_filter_from_permission_assertion(
- assertion_name = 'assert_can_accept_best_answer',
- filter_name = 'can_accept_best_answer'
- )
-
-@register.filter
-def can_see_offensive_flags(user, post):
- """Determines if a User can view offensive flag counts.
- there is no assertion like this User.assert_can...
- so all of the code is here
-
- user can see flags on own posts
- otherwise enough rep is required
- or being a moderator or administrator
-
- suspended or blocked users cannot see flags
- """
- if user.is_authenticated():
- if user == post.get_owner():
- return True
- if user.reputation >= askbot_settings.MIN_REP_TO_VIEW_OFFENSIVE_FLAGS:
- return True
- elif user.is_administrator() or user.is_moderator():
- return True
- else:
- return False
- else:
- return False
-
-@register.filter
-def cnprog_intword(number):
- try:
- if 1000 <= number < 10000:
- string = str(number)[0:1]
- return '<span class="thousand">%sk</span>' % string
- else:
- return number
- except:
- return number
-
-@register.filter
-def humanize_counter(number):
- if number == 0:
- return _('no items in counter')
- elif number >= 1000:
- number = number/1000
- s = '%.1f' % number
- if s.endswith('.0'):
- return s[:-2] + 'k'
- else:
- return s + 'k'
- else:
- return str(number)
-
-@register.filter
-def absolute_value(number):
- return abs(number)
-
-
-@register.filter
-def replace_in_url(query_string, param):
- type, value = param.split(':')
- params = query_string.rstrip('/').split('/')
-
- for p in params:
- if type in p:
- params[params.index(p)] = param
-
- query_string = '/'.join(params)+'/'
- return query_string
-
-@register.filter
-def add_tag_to_url(query_string, param):
- if query_string:
- params = query_string.rstrip('/').split('/')
- flag = False
-
- tags = [s for s in params if "tags:" in s]
- if tags:
- tags = tags[0]
- flag = True
- type, value = tags.split(':')
- values = value.split('+')
- if not urllib2.unquote(param) in values:
- values.append(param)
- values = [urllib2.quote(value) for value in values]
- params[params.index(tags)] = 'tags:'+'+'.join(values)
-
- if not flag:
- author = [s for s in params if "author:" in s]
- if author:
- author = author[0]
- params.insert(params.index(author), 'tags:'+param)
- else:
- params.append('tags:'+param)
- query_string = '/'.join(params)+'/'
- return query_string
-
-@register.filter
-def remove_from_url(query_string, param_type):
- if query_string:
- params = query_string.rstrip('/').split('/')
- new_params = []
- for p in params:
- if not p.startswith(param_type):
- new_params.append(p)
- query_string = '/'.join(new_params)+'/'
- return query_string
diff --git a/askbot/templatetags/extra_filters_jinja.py b/askbot/templatetags/extra_filters_jinja.py
index e4fcebd4..d98c4a4f 100644
--- a/askbot/templatetags/extra_filters_jinja.py
+++ b/askbot/templatetags/extra_filters_jinja.py
@@ -9,7 +9,6 @@ from django.template import defaultfilters
from django.core.urlresolvers import reverse, resolve
from django.http import Http404
from askbot import exceptions as askbot_exceptions
-from askbot import auth
from askbot.conf import settings as askbot_settings
from askbot.skins import utils as skin_utils
from askbot.utils import functions
@@ -59,6 +58,7 @@ def collapse(input):
input = unicode(input)
return ' '.join(input.split())
+
@register.filter
def split(string, separator):
return string.split(separator)
@@ -165,6 +165,7 @@ def can_moderate_user(user, other_user):
can_flag_offensive = make_template_filter_from_permission_assertion(
assertion_name = 'assert_can_flag_offensive',
filter_name = 'can_flag_offensive',
+ allowed_exception = askbot_exceptions.DuplicateCommand
)
can_remove_flag_offensive = make_template_filter_from_permission_assertion(
@@ -223,7 +224,6 @@ can_accept_best_answer = make_template_filter_from_permission_assertion(
filter_name = 'can_accept_best_answer'
)
-@register.filter
def can_see_offensive_flags(user, post):
"""Determines if a User can view offensive flag counts.
there is no assertion like this User.assert_can...
@@ -246,17 +246,9 @@ def can_see_offensive_flags(user, post):
return False
else:
return False
-
-@register.filter
-def cnprog_intword(number):
- try:
- if 1000 <= number < 10000:
- string = str(number)[0:1]
- return '<span class="thousand">%sk</span>' % string
- else:
- return number
- except:
- return number
+# Manual Jinja filter registration this leaves can_see_offensive_flags() untouched (unwrapped by decorator),
+# which is needed by some tests
+register.filter('can_see_offensive_flags', can_see_offensive_flags)
@register.filter
def humanize_counter(number):
@@ -272,6 +264,7 @@ def humanize_counter(number):
else:
return str(number)
+
@register.filter
def absolute_value(number):
return abs(number)