summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-01-21 14:08:21 -0500
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2011-01-21 14:08:21 -0500
commit0ce911a43aee2b6df0f66ce7a17f8a54683ed363 (patch)
tree92ec2af372f13e4c8f693d0b6bc6f849198b0f81
parent64838a9f2b1d208ba0b837550bc95956099aa7ff (diff)
downloadaskbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.tar.gz
askbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.tar.bz2
askbot-0ce911a43aee2b6df0f66ce7a17f8a54683ed363.zip
made some tweaks in the search state manager
-rw-r--r--askbot/__init__.py2
-rw-r--r--askbot/middleware/view_log.py8
-rw-r--r--askbot/search/state_manager.py6
-rw-r--r--askbot/skins/default/media/js/live_search.js25
-rw-r--r--askbot/tests/page_load_tests.py16
-rw-r--r--askbot/tests/search_state_tests.py15
-rw-r--r--askbot/views/readers.py23
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 += '&#10003;'
+ if (counter_class === 'accepted'){
+ output += '&#10003;';
}
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()