diff options
author | Tomasz Zielinski <tomasz.zielinski@pyconsultant.eu> | 2012-01-14 23:49:04 +0100 |
---|---|---|
committer | Tomasz Zielinski <tomasz.zielinski@pyconsultant.eu> | 2012-01-14 23:49:04 +0100 |
commit | 6b3f4f81d3617bbb3e4f77d7e6252e659037083e (patch) | |
tree | 5f07c7778513136128b2873187da4d864c9c9b55 /askbot/templatetags | |
parent | d40a86164c91ce26ea796a6253712bdab8218dea (diff) | |
download | askbot-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.py | 210 | ||||
-rw-r--r-- | askbot/templatetags/extra_filters_jinja.py | 19 |
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) |