diff options
-rw-r--r-- | askbot/search/state_manager.py | 10 | ||||
-rw-r--r-- | askbot/skins/common/media/js/live_search.js | 1 | ||||
-rw-r--r-- | askbot/skins/common/templates/widgets/related_tags.html | 2 | ||||
-rw-r--r-- | askbot/skins/common/templates/widgets/search_bar.html | 2 | ||||
-rw-r--r-- | askbot/skins/default/templates/macros.html | 2 | ||||
-rw-r--r-- | askbot/skins/default/templates/main_page/tab_bar.html | 2 | ||||
-rw-r--r-- | askbot/templatetags/extra_filters.py | 210 | ||||
-rw-r--r-- | askbot/templatetags/extra_filters_jinja.py | 19 | ||||
-rw-r--r-- | askbot/tests/permission_assertion_tests.py | 2 |
9 files changed, 16 insertions, 234 deletions
diff --git a/askbot/search/state_manager.py b/askbot/search/state_manager.py index 7ba124d7..ef7c14ec 100644 --- a/askbot/search/state_manager.py +++ b/askbot/search/state_manager.py @@ -174,31 +174,31 @@ class SearchState(object): def add_tag(self, tag): ss = self.deepcopy() ss.tags.append(tag) - return ss - - def remove_query(self): - ss = self.deepcopy() - ss.query = None + ss.page = 1 # state change causes page reset return ss def remove_author(self): ss = self.deepcopy() ss.author = None + ss.page = 1 return ss def remove_tags(self): ss = self.deepcopy() ss.tags = [] + ss.page = 1 return ss def change_scope(self, new_scope): ss = self.deepcopy() ss.scope = new_scope + ss.page = 1 return ss def change_sort(self, new_sort): ss = self.deepcopy() ss.sort = new_sort + ss.page = 1 return ss def change_page(self, new_page): diff --git a/askbot/skins/common/media/js/live_search.js b/askbot/skins/common/media/js/live_search.js index 892f5585..401c6c46 100644 --- a/askbot/skins/common/media/js/live_search.js +++ b/askbot/skins/common/media/js/live_search.js @@ -53,6 +53,7 @@ var liveSearch = function(query_string) { var send_query = function(query_text){ running = true; prev_text = update_query_string(query_text); + query_string = QSutils.patch_query_string(query_string, 'page:1'); /* if something has changed, then reset the page no. */ var url = search_url + query_string; $.ajax({ url: url, diff --git a/askbot/skins/common/templates/widgets/related_tags.html b/askbot/skins/common/templates/widgets/related_tags.html index 09baa9e7..6e107976 100644 --- a/askbot/skins/common/templates/widgets/related_tags.html +++ b/askbot/skins/common/templates/widgets/related_tags.html @@ -10,7 +10,7 @@ html_tag = 'div', extra_content = '<span class="tag-number">× ' ~ tag.local_used_count|intcomma ~ '</span>', - search_state = search_state, + search_state = search_state )}} </li> {% endfor %} diff --git a/askbot/skins/common/templates/widgets/search_bar.html b/askbot/skins/common/templates/widgets/search_bar.html index 328744df..59c4fd58 100644 --- a/askbot/skins/common/templates/widgets/search_bar.html +++ b/askbot/skins/common/templates/widgets/search_bar.html @@ -35,8 +35,6 @@ <input type="button" value="X" name="reset_query" - {# todo - make sure it works on Enter keypress #} - onclick="window.location.href='{% url questions %}{{ query_string|remove_from_url('query') }}'" class="cancelSearchBtn" {% if not query %}{# query is only defined by questions view (active_tab) #} style="display: none;" diff --git a/askbot/skins/default/templates/macros.html b/askbot/skins/default/templates/macros.html index 9ddf54d4..dcbe7874 100644 --- a/askbot/skins/default/templates/macros.html +++ b/askbot/skins/default/templates/macros.html @@ -1,4 +1,4 @@ -{% load extra_filters %} +{% load extra_filters_jinja %} {%- macro share(site = None, site_label = None, icon = False) -%} <a class="{{ site }}-share{% if icon == True %} icon{% endif %}" diff --git a/askbot/skins/default/templates/main_page/tab_bar.html b/askbot/skins/default/templates/main_page/tab_bar.html index bcb32930..e08232bb 100644 --- a/askbot/skins/default/templates/main_page/tab_bar.html +++ b/askbot/skins/default/templates/main_page/tab_bar.html @@ -1,5 +1,5 @@ {% import "macros.html" as macros %} -{% load extra_filters %} +{% load extra_filters_jinja %} {% cache 0 "scope_sort_tabs" search_tags request.user scope sort query context.page language_code %} <a class="rss" {% if feed_url %} 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) diff --git a/askbot/tests/permission_assertion_tests.py b/askbot/tests/permission_assertion_tests.py index 50106128..2f746ef9 100644 --- a/askbot/tests/permission_assertion_tests.py +++ b/askbot/tests/permission_assertion_tests.py @@ -7,7 +7,7 @@ from django.core import exceptions from askbot.tests import utils from askbot.conf import settings as askbot_settings from askbot import models -from askbot.templatetags import extra_filters as template_filters +from askbot.templatetags import extra_filters_jinja as template_filters from askbot.tests.utils import skipIf, AskbotTestCase |