summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRosandra Cuello <rosandra.cuello@gmail.com>2011-11-28 21:18:21 -0400
committerRosandra Cuello <rosandra.cuello@gmail.com>2011-11-28 21:18:21 -0400
commit2e6a47a525fe50f312744a24d81f6e8da436cee3 (patch)
tree38bfab6e9118f89294b0f229abec8e0acb9a5399
parent63e211e4b7b90ab9d53ed18a556348fc644b1cc1 (diff)
downloadaskbot-2e6a47a525fe50f312744a24d81f6e8da436cee3.tar.gz
askbot-2e6a47a525fe50f312744a24d81f6e8da436cee3.tar.bz2
askbot-2e6a47a525fe50f312744a24d81f6e8da436cee3.zip
Fixing problems with ajax and the urls
-rw-r--r--askbot/skins/common/media/js/live_search.js156
-rw-r--r--askbot/skins/common/media/js/utils.js36
-rw-r--r--askbot/skins/common/templates/widgets/search_bar.html2
-rw-r--r--askbot/skins/default/templates/macros.html2
-rw-r--r--askbot/skins/old/media/js/live_search.js2
-rw-r--r--askbot/views/readers.py26
6 files changed, 182 insertions, 42 deletions
diff --git a/askbot/skins/common/media/js/live_search.js b/askbot/skins/common/media/js/live_search.js
index 73e1453a..55dee5a2 100644
--- a/askbot/skins/common/media/js/live_search.js
+++ b/askbot/skins/common/media/js/live_search.js
@@ -23,6 +23,7 @@ var liveSearch = function(){
sortMethod = prevSortMethod;
}
refresh_x_button();
+ search_url = askbot['urls']['questions'] + 'reset_query:true/';
reset_query(sortMethod);
}
);
@@ -189,23 +190,63 @@ var liveSearch = function(){
return user_html;
};
- var render_tag = function(tag_name, linkable, deletable){
+ var render_tag = function(tag_name, linkable, deletable, query_string){
var tag = new Tag();
tag.setName(tag_name);
tag.setDeletable(deletable);
tag.setLinkable(linkable);
+ tag.setUrlParams(query_string);
return tag.getElement().outerHTML();
};
- var render_tags = function(tags, linkable, deletable){
+ var render_tags = function(tags, linkable, deletable, query_string){
var tags_html = '<ul class="tags">';
$.each(tags, function(idx, item){
- tags_html += render_tag(item, linkable, deletable);
+ tags_html += render_tag(item, linkable, deletable, query_string);
});
tags_html += '</ul>';
return tags_html;
};
+ var render_question = function(question, query_string){
+ var entry_html =
+ '<div class="short-summary">' +
+ '<div class="counts">' +
+ render_counter(
+ question['views'],
+ question['views_word'],
+ 'views',
+ question['views_class']
+ ) +
+ render_counter(
+ question['answers'],
+ question['answers_word'],
+ 'answers',
+ question['answers_class']
+ ) +
+ render_counter(
+ question['votes'],
+ question['votes_word'],
+ 'votes',
+ question['votes_class']
+ ) +
+ '<div style="clear:both"></div>' +
+ render_user_info(question) +
+ '</div>' +
+ render_title(question) +
+ render_tags(question['tags'], true, false, query_string) +
+ '</div>';
+ return entry_html;
+ };
+
+ var render_question_list = function(questions, query_string){
+ var output = '';
+ for (var i=0; i<questions.length; i++){
+ output += render_question(questions[i], query_string);
+ }
+ return output;
+ };
+
var render_faces = function(faces){
if (faces.length === 0){
return;
@@ -218,13 +259,13 @@ var liveSearch = function(){
$('#contrib-users').append(html);
};
- var render_related_tags = function(tags){
+ var render_related_tags = function(tags, query_string){
if (tags.length === 0){
return;
}
var html = '';
for (var i=0; i<tags.length; i++){
- html += render_tag(tags[i]['name'], true, false);
+ html += render_tag(tags[i]['name'], true, false, query_string);
html += '<span class="tag-number">&#215; ' +
tags[i]['used_count'] +
'</span>' +
@@ -283,24 +324,72 @@ var liveSearch = function(){
}
};
- var create_relevance_tab = function(){
+ var create_relevance_tab = function(query_string){
relevance_tab = $('<a></a>');
- relevance_tab.attr('href', '?sort=relevance-desc');
+ href = '/questions/' + replace_in_url(query_string, 'sort:relevance-desc')
+ relevance_tab.attr('href', href);
relevance_tab.attr('id', 'by_relevance');
relevance_tab.html('<span>' + sortButtonData['relevance']['label'] + '</span>');
return relevance_tab;
}
- var set_active_sort_tab = function(sort_method){
+ var replace_in_url = function (query_string, param){
+ values = param.split(':')
+ type = values[0]
+ value = values[1]
+ params = query_string.split('/')
+ url=""
+
+ for (var i = 0; i < params.length; i++){
+ if (params[i] !== ''){
+ if (params[i].substring(0, type.length) == type){
+ url += param + '/'
+ }
+ else{
+ url += params[i] + '/'
+ }
+ }
+ }
+ return url
+ }
+
+ var remove_from_url = function (query_string, type){
+ params = query_string.split('/')
+ url=""
+ for (var i = 0; i < params.length; i++){
+ if (params[i] !== ''){
+ if (params[i].substring(0, type.length) !== type){
+ url += params[i] + '/'
+ }
+ }
+ }
+ return url
+ }
+
+ var set_section_tabs = function(query_string){
+ var tabs = $('#section_tabs>a');
+ tabs.each(function(index, element){
+ var tab = $(element);
+ var tab_name = tab.attr('id').replace(/^by_/,'');
+ href = '/questions/' + replace_in_url(query_string, 'section:'+tab_name)
+ tab.attr(
+ 'href',
+ href
+ );
+ });
+ };
+
+ var set_active_sort_tab = function(sort_method, query_string){
var tabs = $('#sort_tabs>a');
tabs.attr('class', 'off');
tabs.each(function(index, element){
var tab = $(element);
var tab_name = tab.attr('id').replace(/^by_/,'');
if (tab_name in sortButtonData){
+ href = '/questions/' + replace_in_url(query_string, 'sort:'+tab_name+'-desc')
tab.attr(
'href',
- '?sort=' + tab_name + '-desc'
+ href
);
tab.attr(
'title',
@@ -320,14 +409,14 @@ var liveSearch = function(){
active_tab.html(sortButtonData[name]['label'] + arrow);
};
- var render_relevance_sort_tab = function(){
+ var render_relevance_sort_tab = function(query_string){
if (showSortByRelevance === false){
return;
}
var relevance_tab = $('#by_relevance');
if (prev_text && prev_text.length > 0){
if (relevance_tab.length == 0){
- relevance_tab = create_relevance_tab();
+ relevance_tab = create_relevance_tab(query_string);
$('#sort_tabs>span').after(relevance_tab);
}
}
@@ -338,22 +427,21 @@ var liveSearch = function(){
}
};
- var change_rss_url = function(feed_url){
- if(feed_url){
- $("#ContentLeft a.rss:first").attr("href", feed_url);
- }
- }
-
var remove_search_tag = function(tag_name){
$.ajax({
- url: askbot['urls']['questions'],
- data: {remove_tag: tag_name},
+ url: askbot['urls']['questions']+'remove_tag:'+escape(tag_name)+'/',
dataType: 'json',
success: render_result,
complete: try_again
});
};
+ var change_rss_url = function(feed_url){
+ if(feed_url){
+ $("#ContentLeft a.rss:first").attr("href", feed_url);
+ }
+ }
+
var activate_search_tags = function(){
var search_tags = $('#searchTags .tag-left');
$.each(search_tags, function(idx, element){
@@ -418,10 +506,11 @@ var liveSearch = function(){
set_question_count(data['question_counter']);
render_search_tags(data['query_data']['tags']);
render_faces(data['faces']);
- render_related_tags(data['related_tags']);
- render_relevance_sort_tab();
+ render_related_tags(data['related_tags'], data['query_string']);
+ render_relevance_sort_tab(data['query_string']);
+ set_active_sort_tab(sortMethod, data['query_string']);
+ set_section_tabs(data['query_string']);
change_rss_url(data['feed_url']);
- set_active_sort_tab(sortMethod);
query.focus();
//show new div with a fadeIn effect
@@ -431,6 +520,8 @@ var liveSearch = function(){
new_list.fadeIn(400);
});
}
+ var stateObj = { page: data['query_string'] };
+ Path.history.pushState(stateObj, "Questions", data['query_string']);
}
var try_again = function(){
@@ -442,7 +533,7 @@ var liveSearch = function(){
var post_data = {query: query_text};
$.ajax({
url: search_url,
- data: {query: query_text, sort: sort_method},
+ //data: {query: query_text, sort: sort_method},
dataType: 'json',
success: render_result,
complete: try_again
@@ -453,7 +544,7 @@ var liveSearch = function(){
var reset_query = function(sort_method){
$.ajax({
url: search_url,
- data: {reset_query: true, sort: sort_method},
+ //data: {reset_query: true, sort: sort_method},
dataType: 'json',
success: render_result,
complete: try_again
@@ -475,7 +566,7 @@ var liveSearch = function(){
query = $('input#keywords');
refresh_main_page();
},
- init: function(mode){
+ init: function(mode, query_string){
if (mode === 'main_page'){
//live search for the main page
query = $('input#keywords');
@@ -489,11 +580,26 @@ var liveSearch = function(){
sortMethod = 'relevance-desc';
}
}
+ search_url = askbot['urls']['questions']; //resetting search_url every times
+ params = query_string.split('/')
+ for (var i = 0; i < params.length; i++){
+ if (params[i] !== ''){
+ if (params[i].substring(0, 5) == "sort:"){ //change the sort method
+ search_url += 'sort:'+sortMethod+'/'
+ search_url += 'query:'+ cur_text.split(' ').join('+') + '/' //we add the query here
+ }
+ else{
+ search_url += params[i] + '/';
+ }
+ }
+ }
+ //search_url = '/questions/'+search_url
send_query(cur_text, sortMethod);
};
restart_query = function() {
reset_sort_method();
refresh_x_button();
+ search_url = askbot['urls']['questions'] + 'reset_query:true/';
reset_query(sortMethod);
running = true;
};
diff --git a/askbot/skins/common/media/js/utils.js b/askbot/skins/common/media/js/utils.js
index 0afd03a7..8c048885 100644
--- a/askbot/skins/common/media/js/utils.js
+++ b/askbot/skins/common/media/js/utils.js
@@ -356,9 +356,41 @@ Tag.prototype.createDom = function(){
this._inner_element = this.makeElement(this._inner_html_tag);
if (this.isLinkable()){
var url = askbot['urls']['questions'];
- url += '?tags=' + escape(this.getName());
+ var flag = false
+ var author = ''
if (this._url_params !== null){
- url += escape('&' + this._url_params);
+ params = this._url_params.split('/')
+ for (var i = 0; i < params.length; i++){
+ if (params[i] !== ''){
+ if (params[i].substring(0, 5) == "tags:"){
+ tags = params[i].substr(5).split('+');
+ new_tags = ''
+ for(var j = 0; j < tags.length; j++){
+ if(escape(tags[j]) !== escape(this.getName())){
+ new_tags += escape(tags[j]) + '+';
+ }
+ }
+ new_tags += escape(this.getName())
+ url += 'tags:'+new_tags+'/'
+ flag = true
+ }
+ else if (params[i].substring(0, 7) == "author:"){
+ author = params[i];
+ }
+ else{
+ url += params[i] + '/';
+ }
+ }
+ }
+ if (flag == false) {
+ url += 'tags:'+escape(this.getName())+'/'
+ }
+ if (author !== '') {
+ url += author+'/'
+ }
+ }
+ else{
+ url += 'tags:' + escape(this.getName()) + '/';
}
this._inner_element.attr('href', url);
}
diff --git a/askbot/skins/common/templates/widgets/search_bar.html b/askbot/skins/common/templates/widgets/search_bar.html
index c696fba3..8c3a50c4 100644
--- a/askbot/skins/common/templates/widgets/search_bar.html
+++ b/askbot/skins/common/templates/widgets/search_bar.html
@@ -8,7 +8,7 @@
{% elif active_tab == "users" %}
action="{% url users %}"
{% else %}
- action="{% url questions %}"
+ action="{% url questions %}" id="searchForm"
{% endif %}
method="get">
<input type="submit" value="" name="search" class="searchBtn" />
diff --git a/askbot/skins/default/templates/macros.html b/askbot/skins/default/templates/macros.html
index a51b6bc4..0f9eb678 100644
--- a/askbot/skins/default/templates/macros.html
+++ b/askbot/skins/default/templates/macros.html
@@ -553,7 +553,7 @@ answer {% if answer.accepted %}accepted-answer{% endif %} {% if answer.author_id
{% endif %}
{%- endmacro -%}
-{%- macro paginator(p, position='left') -%}{# p is paginator context dictionary #}
+{%- macro paginator(p, position='left', active_tab='') -%}{# p is paginator context dictionary #}
{% spaceless %}
{% if p.is_paginated %}
<div class="paginator" style="float:{{position}}">
diff --git a/askbot/skins/old/media/js/live_search.js b/askbot/skins/old/media/js/live_search.js
index bf855e60..62ae5798 100644
--- a/askbot/skins/old/media/js/live_search.js
+++ b/askbot/skins/old/media/js/live_search.js
@@ -344,9 +344,7 @@ var liveSearch = function(){
}
}
}
-
return url
-
}
var remove_from_url = function (query_string, type){
diff --git a/askbot/views/readers.py b/askbot/views/readers.py
index 7aeba23b..3e247797 100644
--- a/askbot/views/readers.py
+++ b/askbot/views/readers.py
@@ -175,6 +175,14 @@ def questions(request, scope=const.DEFAULT_POST_SCOPE, sort=const.DEFAULT_POST_S
# Format the url with the QueryDict
context_feed_url = '/feeds/rss/?%s' % rss_query_dict.urlencode()
+ reset_method_count = 0
+ if search_state.query:
+ reset_method_count += 1
+ if search_state.tags:
+ reset_method_count += 1
+ if meta_data.get('author_name',None):
+ reset_method_count += 1
+
if request.is_ajax():
q_count = paginator.count
@@ -198,10 +206,11 @@ def questions(request, scope=const.DEFAULT_POST_SCOPE, sort=const.DEFAULT_POST_S
if q_count > search_state.page_size:
paginator_tpl = get_template('main_page/paginator.html', request)
#todo: remove this patch on context after all templates are moved to jinja
- paginator_context['base_url'] = request.path + '?sort=%s&' % search_state.sort
+ #paginator_context['base_url'] = request.path + '?sort=%s&' % search_state.sort
data = {
'context': extra_tags.cnprog_paginator(paginator_context),
- 'questions_count': q_count
+ 'questions_count': q_count,
+ 'page_size' : search_state.page_size,
}
paginator_html = paginator_tpl.render(Context(data))
else:
@@ -225,6 +234,7 @@ def questions(request, scope=const.DEFAULT_POST_SCOPE, sort=const.DEFAULT_POST_S
'feed_url': context_feed_url,
'query_string': search_state.query_string(),
'parameters': search_state.make_parameters(),
+ 'page_size' : search_state.page_size,
}
badge_levels = dict(const.BADGE_TYPE_CHOICES)
@@ -261,24 +271,18 @@ def questions(request, scope=const.DEFAULT_POST_SCOPE, sort=const.DEFAULT_POST_S
'context': paginator_context,
'language_code': translation.get_language(),
'query': search_state.query,
+ 'reset_method_count': reset_method_count,
+ 'query_string': search_state.query_string(),
}
questions_html = questions_tpl.render(Context(data))
+ #import pdb; pdb.set_trace()
ajax_data['questions'] = questions_html.replace('\n','')
return HttpResponse(
simplejson.dumps(ajax_data),
mimetype = 'application/json'
)
- reset_method_count = 0
- if search_state.query:
- reset_method_count += 1
- if search_state.tags:
- reset_method_count += 1
- if meta_data.get('author_name',None):
- reset_method_count += 1
-
-
template_data = {
'active_tab': 'questions',
'author_name' : meta_data.get('author_name',None),