From 7f5e25a1b44bd8ad23ecb5d8194306b319998a72 Mon Sep 17 00:00:00 2001 From: qw3rty Date: Tue, 27 Apr 2010 21:58:24 +0000 Subject: [PATCH] fixes osqa-152: interesting and ignored tags work again. also fixed potential performance problem on systems with lots of tags. We no longer shove ALL the tags into the HTML, we now hit a URL that pulls back only tags that start with the query you're typing. All pages that used the old method have been updated. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@80 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- forum/skins/default/media/js/osqa.main.js | 18 ++++++++++-------- forum/skins/default/templates/ask.html | 14 ++++++++++---- .../default/templates/question_retag.html | 12 +++++++++--- forum/urls.py | 3 ++- forum/views/commands.py | 11 +++++++++++ forum/views/readers.py | 2 +- forum/views/writers.py | 8 ++++---- 7 files changed, 47 insertions(+), 21 deletions(-) diff --git a/forum/skins/default/media/js/osqa.main.js b/forum/skins/default/media/js/osqa.main.js index e372638..6264fb4 100644 --- a/forum/skins/default/media/js/osqa.main.js +++ b/forum/skins/default/media/js/osqa.main.js @@ -400,17 +400,19 @@ function pickedTags(){ init: function(){ collectPickedTags(); setupHideIgnoredQuestionsControl(); - $("#interestingTagInput, #ignoredTagInput").autocomplete(tags, { + $("#interestingTagInput, #ignoredTagInput").autocomplete("/matching_tags", { minChars: 1, matchContains: true, max: 20, - multiple: true, - multipleSeparator: " ", - formatItem: function(row, i, max) { - return row.n + " ("+ row.c +")"; + /*multiple: false, - the favorite tags and ignore tags don't let you do multiple tags + multipleSeparator: " "*/ + + formatItem: function(row, i, max, value) { + return row[1].split(".")[0] + " (" + row[1].split(".")[1] + ")"; }, - formatResult: function(row, i, max){ - return row.n; + + formatResult: function(row, i, max, value){ + return row[0]; } }); @@ -421,7 +423,7 @@ function pickedTags(){ } $(document).ready( function(){ - if (window.tags != undefined) + //if (window.tags != undefined) pickedTags().init(); }); diff --git a/forum/skins/default/templates/ask.html b/forum/skins/default/templates/ask.html index e681f4f..1f7d6c6 100644 --- a/forum/skins/default/templates/ask.html +++ b/forum/skins/default/templates/ask.html @@ -25,19 +25,25 @@ $('#pre-collapse').text(txt); }); - //Tags autocomplete action - var tags = {{ tags|safe }}; - $("#id_tags").autocomplete(tags, { + // Tags autocomplete action + $("#id_tags").autocomplete("/matching_tags", { minChars: 1, matchContains: true, max: 20, multiple: true, multipleSeparator: " ", - formatItem: function(row, i, max) { + /*formatItem: function(row, i, max) { return row.n + " ("+ row.c +")"; }, formatResult: function(row, i, max){ return row.n; + }*/ + formatItem: function(row, i, max, value) { + return row[1].split(".")[0] + " (" + row[1].split(".")[1] + ")"; + }, + + formatResult: function(row, i, max, value){ + return row[0]; } }); diff --git a/forum/skins/default/templates/question_retag.html b/forum/skins/default/templates/question_retag.html index 3e073e8..04d96f3 100644 --- a/forum/skins/default/templates/question_retag.html +++ b/forum/skins/default/templates/question_retag.html @@ -9,18 +9,24 @@ $().ready(function(){ $("#nav_questions").attr('className',"on"); //Tags autocomplete action - var tags = {{ tags|safe }}; - $("#id_tags").autocomplete(tags, { + $("#id_tags").autocomplete("/matching_tags", { minChars: 1, matchContains: true, max: 20, multiple: true, multipleSeparator: " ", - formatItem: function(row, i, max) { + /*formatItem: function(row, i, max) { return row.n + " ("+ row.c +")"; }, formatResult: function(row, i, max){ return row.n; + } */ + formatItem: function(row, i, max, value) { + return row[1].split(".")[0] + " (" + row[1].split(".")[1] + ")"; + }, + + formatResult: function(row, i, max, value){ + return row[0]; } }); diff --git a/forum/urls.py b/forum/urls.py index cb97329..e6a0eb8 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -68,7 +68,8 @@ urlpatterns += patterns('', url(r'^%s(?P\d+)/' % _('flag/'), app.commands.flag_post, name='flag_post'), url(r'^%s(?P\d+)/' % _('delete/'), app.commands.delete_post, name='delete_post'), url(r'^%s(?P\d+)/$' % _('subscribe/'), app.commands.subscribe, name="subscribe"), - + url(r'^%s' % _('matching_tags/'), app.commands.matching_tags, name='matching_tags'), + url(r'^%s(?P\d+)/%s$' % (_('questions/'), _('revisions/')), app.readers.revisions, name='question_revisions'), url(r'^%s$' % _('command/'), app.commands.ajax_command, name='call_ajax'), diff --git a/forum/views/commands.py b/forum/views/commands.py index ee62af4..5a76d06 100644 --- a/forum/views/commands.py +++ b/forum/views/commands.py @@ -346,6 +346,17 @@ def mark_tag(request, tag=None, **kwargs):#tagging system ts.update(reason=reason) return HttpResponse(simplejson.dumps(''), mimetype="application/json") +def matching_tags(request): + if len(request.GET['q']) == 0: + raise Exception(_("Invalid request")) + + possible_tags = Tag.objects.filter(name__istartswith = request.GET['q']) + tag_output = '' + for tag in possible_tags: + tag_output += (tag.name + "|" + tag.name + "." + tag.used_count.__str__() + "\n") + + return HttpResponse(tag_output, mimetype="text/plain") + @ajax_login_required def ajax_toggle_ignored_questions(request):#ajax tagging and tag-filtering system if request.user.hide_ignored_questions: diff --git a/forum/views/readers.py b/forum/views/readers.py index 31efdce..385a4be 100644 --- a/forum/views/readers.py +++ b/forum/views/readers.py @@ -96,7 +96,7 @@ def question_list(request, initial, list_description=_('questions'), sort=None, return { "questions" : questions, "questions_count" : questions.count(), - "tags_autocomplete" : _get_tags_cache_json(), + #"tags_autocomplete" : _get_tags_cache_json(), "list_description": list_description, "base_path" : base_path, } diff --git a/forum/views/writers.py b/forum/views/writers.py index 70be5ee..e2143a8 100644 --- a/forum/views/writers.py +++ b/forum/views/writers.py @@ -112,10 +112,10 @@ def ask(request): else: form = AskForm() - tags = _get_tags_cache_json() + #tags = _get_tags_cache_json() return render_to_response('ask.html', { 'form' : form, - 'tags' : tags, + #'tags' : tags, 'email_validation_faq_url':reverse('faq') + '#validate', }, context_instance=RequestContext(request)) @@ -152,7 +152,7 @@ def _retag_question(request, question): return render_to_response('question_retag.html', { 'question': question, 'form' : form, - 'tags' : _get_tags_cache_json(), + #'tags' : _get_tags_cache_json(), }, context_instance=RequestContext(request)) def _edit_question(request, question): @@ -192,7 +192,7 @@ def _edit_question(request, question): 'question': question, 'revision_form': revision_form, 'form' : form, - 'tags' : _get_tags_cache_json() + #'tags' : _get_tags_cache_json() }, context_instance=RequestContext(request)) @login_required -- 2.45.1