diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-01-21 14:08:21 -0500 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2011-01-21 14:08:21 -0500 |
commit | 0ce911a43aee2b6df0f66ce7a17f8a54683ed363 (patch) | |
tree | 92ec2af372f13e4c8f693d0b6bc6f849198b0f81 | |
parent | 64838a9f2b1d208ba0b837550bc95956099aa7ff (diff) | |
download | askbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.tar.gz askbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.tar.bz2 askbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.zip |
made some tweaks in the search state manager
-rw-r--r-- | askbot/__init__.py | 2 | ||||
-rw-r--r-- | askbot/middleware/view_log.py | 8 | ||||
-rw-r--r-- | askbot/search/state_manager.py | 6 | ||||
-rw-r--r-- | askbot/skins/default/media/js/live_search.js | 25 | ||||
-rw-r--r-- | askbot/tests/page_load_tests.py | 16 | ||||
-rw-r--r-- | askbot/tests/search_state_tests.py | 15 | ||||
-rw-r--r-- | askbot/views/readers.py | 23 |
7 files changed, 52 insertions, 43 deletions
diff --git a/askbot/__init__.py b/askbot/__init__.py index e7a3e29e..b348cc2a 100644 --- a/askbot/__init__.py +++ b/askbot/__init__.py @@ -19,4 +19,4 @@ def get_version(): """returns version of the askbot app this version is meaningful for pypi only """ - return '0.6.58' + return '0.6.61' diff --git a/askbot/middleware/view_log.py b/askbot/middleware/view_log.py index 58815f89..8f036077 100644 --- a/askbot/middleware/view_log.py +++ b/askbot/middleware/view_log.py @@ -6,18 +6,20 @@ Included here is the ViewLogMiddleware import logging import datetime from django.conf import settings -from askbot.models import signals from django.views.static import serve +from django.views.i18n import javascript_catalog +from askbot.models import signals from askbot.views.readers import questions as questions_view from askbot.views.commands import vote from askbot.views.writers import delete_comment, post_comments, retag_question from askbot.views.readers import revisions +from askbot.views.meta import media from askbot.search.state_manager import ViewLog #todo: the list is getting bigger and bigger - maybe there is a better way to #trigger reset of sarch state? -IGNORED_VIEWS = (serve, vote, delete_comment, post_comments, - retag_question, revisions) +IGNORED_VIEWS = (serve, vote, media, delete_comment, post_comments, + retag_question, revisions, javascript_catalog) class ViewLogMiddleware(object): diff --git a/askbot/search/state_manager.py b/askbot/search/state_manager.py index dac71d0c..d7045799 100644 --- a/askbot/search/state_manager.py +++ b/askbot/search/state_manager.py @@ -175,12 +175,16 @@ class SearchState(object): if self.sort == 'relevance-desc': self.reset_sort() - def update(self, input_dict, view_log): + def update(self, input_dict, view_log, user): """update the search state according to the user input and the queue of the page hits that user made""" if view_log.should_reset_search_state(): self.reset() + + if user.is_authenticated(): + search_state.set_logged_in() + self.update_from_user_input(input_dict) self.relax_stickiness(input_dict, view_log) diff --git a/askbot/skins/default/media/js/live_search.js b/askbot/skins/default/media/js/live_search.js index 03716a1a..9c090a99 100644 --- a/askbot/skins/default/media/js/live_search.js +++ b/askbot/skins/default/media/js/live_search.js @@ -7,7 +7,7 @@ $(document).ready(function(){ var refresh_x_button = function(){ if ($.trim(query.val()).length > 0){ - if (query.attr('class') == 'searchInput'){ + if (query.attr('class') === 'searchInput'){ query.attr('class', 'searchInputCancelable'); x_button = $('<input class="cancelSearchBtn" type="button" name="reset_query"/>'); //x_button.click(reset_query); @@ -15,7 +15,7 @@ $(document).ready(function(){ x_button.click( function(){ query.val(''); - if (sortMethod == 'relevance-desc'){ + if (sortMethod === 'relevance-desc'){ sortMethod = prevSortMethod; } reset_query(sortMethod); @@ -23,21 +23,19 @@ $(document).ready(function(){ ); query.after(x_button); } - } - else { + } else { $('input[name=reset_query]').remove(); query.attr('class', 'searchInput'); } }; var reset_sort_method = function(){ - if (sortMethod == 'relevance-desc'){ + if (sortMethod === 'relevance-desc'){ sortMethod = prevSortMethod; - if (sortMethod == 'relevance-desc'){ + if (sortMethod === 'relevance-desc'){ sortMethod = 'activity-desc'; } - } - else { + } else { sortMethod = 'activity-desc'; prevSortMethod = 'activity-desc'; } @@ -45,18 +43,17 @@ $(document).ready(function(){ var eval_query = function(){ cur_text = $.trim(query.val()); - if (cur_text != prev_text && running === false){ + if (cur_text !== prev_text && running === false){ if (cur_text.length >= minSearchWordLength){ if (prev_text.length === 0 && showSortByRelevance){ - if (sortMethod == 'activity-desc'){ + if (sortMethod === 'activity-desc'){ prevSortMethod = sortMethod; sortMethod = 'relevance-desc'; } } send_query(cur_text, sortMethod); running = true; - } - else if (cur_text.length === 0){ + } else if (cur_text.length === 0){ reset_sort_method(); reset_query(sortMethod); running = true; @@ -82,8 +79,8 @@ $(document).ready(function(){ var output = '<div class="votes">' + '<span class="item-count ' + counter_class + '">' + count; - if (counter_class == 'accepted'){ - output += '✓' + if (counter_class === 'accepted'){ + output += '✓'; } output += '</span>' + '<div>' + word + '</div>' + diff --git a/askbot/tests/page_load_tests.py b/askbot/tests/page_load_tests.py index cd1b6735..a4ef2547 100644 --- a/askbot/tests/page_load_tests.py +++ b/askbot/tests/page_load_tests.py @@ -106,42 +106,42 @@ class PageLoadTests(PageLoadTestCase): ) self.try_url( 'questions', - data={'scope':'unanswered', 'sort':'latest'}, + data={'scope':'unanswered', 'sort':'age-desc'}, template='questions.html' ) self.try_url( 'questions', - data={'scope':'unanswered', 'sort':'oldest'}, + data={'scope':'unanswered', 'sort':'age-asc'}, template='questions.html' ) self.try_url( 'questions', - data={'scope':'unanswered', 'sort':'active'}, + data={'scope':'unanswered', 'sort':'activity-desc'}, template='questions.html' ) self.try_url( 'questions', - data={'scope':'unanswered', 'sort':'inactive'}, + data={'scope':'unanswered', 'sort':'activity-asc'}, template='questions.html' ) self.try_url( 'questions', - data={'sort':'hottest'}, + data={'sort':'answers-desc'}, template='questions.html' ) self.try_url( 'questions', - data={'sort':'coldest'}, + data={'sort':'answers-asc'}, template='questions.html' ) self.try_url( 'questions', - data={'sort':'mostvoted'}, + data={'sort':'votes-desc'}, template='questions.html' ) self.try_url( 'questions', - data={'sort':'leastvoted'}, + data={'sort':'votes-asc'}, template='questions.html' ) self.try_url( diff --git a/askbot/tests/search_state_tests.py b/askbot/tests/search_state_tests.py index 622ce378..bb1423ca 100644 --- a/askbot/tests/search_state_tests.py +++ b/askbot/tests/search_state_tests.py @@ -1,6 +1,9 @@ from django.test import TestCase +from django.contrib.auth.models import AnonymousUser from askbot.search.state_manager import SearchState, ViewLog +from askbot import const +DEFAULT_SORT = const.DEFAULT_POST_SORT_METHOD class SearchStateTests(TestCase): def setUp(self): self.state = SearchState() @@ -12,9 +15,11 @@ class SearchStateTests(TestCase): """ self.log.set_current(page_name) - def update(self, data): + def update(self, data, user = None): self.visit_page('questions') - self.state.update(data, self.log) + if user is None: + user = AnonymousUser() + self.state.update(data, self.log, user) def add_tag(self, tag): self.update({'tags': set([tag])}) @@ -47,3 +52,9 @@ class SearchStateTests(TestCase): self.update({'reset_query':True}) self.assertEquals(self.state.query, None) self.assert_tags_are('tag1') + + def test_auto_reset_sort(self): + self.update({'sort': 'age-asc'}) + self.assertEquals(self.state.sort, 'age-asc') + self.update({}) + self.assertEquals(self.state.sort, DEFAULT_SORT) diff --git a/askbot/views/readers.py b/askbot/views/readers.py index 6d471096..3ae17660 100644 --- a/askbot/views/readers.py +++ b/askbot/views/readers.py @@ -80,22 +80,17 @@ def questions(request): if request.method == 'POST': raise Http404 - #todo: redo SearchState to accept input from - #view_log, session and request parameters - search_state = request.session.get('search_state', SearchState()) - view_log = request.session['view_log'] - - #todo: move this call inside SearchState.update() - if request.user.is_authenticated(): - search_state.set_logged_in() - + #update search state form = AdvancedSearchForm(request.GET) - #todo: form is used only for validation... - if form.is_valid(): - search_state.update(form.cleaned_data, view_log) - request.session['search_state'] = search_state - request.session.modified = True + user_input = form.cleaned_data + else: + user_input = None + search_state = request.session.get('search_state', SearchState()) + view_log = request.session['view_log'] + search_state.update(user_input, view_log, request.user) + request.session['search_state'] = search_state + request.session.modified = True #force reset for debugging #search_state.reset() |