From 323ce995b8bc7d042a0e4d8df4b64f026205ee87 Mon Sep 17 00:00:00 2001 From: Zambom Date: Mon, 24 Oct 2016 16:28:54 -0300 Subject: [PATCH] Fixing new answer position [Issue: #215] --- forum/static/js/forum.js | 40 +++++++++++++++++++++++++++++++++++----- forum/templates/post/post_render.html | 2 +- forum/templates/post_answers/post_answer_load_more_render.html | 38 ++++++++++++++++++++++++++++++++++++++ forum/templates/post_answers/post_answer_render.html | 2 +- forum/views.py | 16 +++++++++++++--- 5 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 forum/templates/post_answers/post_answer_load_more_render.html diff --git a/forum/static/js/forum.js b/forum/static/js/forum.js index ddd69c1..b182b39 100644 --- a/forum/static/js/forum.js +++ b/forum/static/js/forum.js @@ -1,5 +1,5 @@ var new_posts = []; //Store the new posts ids - +var new_answers = {}; /* * * Defining action of the form to make a post in forum @@ -294,10 +294,21 @@ function answer(id, url) { type: frm.attr('method'), url: frm.attr('action'), data: frm.serialize(), + dataType: 'json', success: function (data) { - $("#post_"+id).find(".answer_list").append(data); - $("#post_"+id).find(".answer_post").hide(); + + if ($("#post_"+id).find(".load_more_answers").length == 0) { + $("#post_"+id).find(".answer_list").append(data.html); + } else { + $("#post_"+id).find(".load_more_answers").before(data.html); + } + + if (typeof(new_answers[id]) == 'undefined') { + new_answers[id] = []; + } + + new_answers[id].push(data.new_id); }, error: function(data) { console.log(frm.serialize()); @@ -397,6 +408,14 @@ function load_more_answers(post_id, pageNum, numberPages, url) { pageNum += 1; + var showing; + + if (typeof(new_answers[post_id]) == 'undefined') { + showing = ""; + } else { + showing = new_answers[post_id].join(','); + } + // Show loader $("#post_"+post_id).find(".loading_answers").show(); @@ -404,11 +423,22 @@ function load_more_answers(post_id, pageNum, numberPages, url) { setTimeout(function (){ $.ajax({ url: url, - data: {'page_answer': pageNum}, + data: {'page_answer': pageNum, 'showing_ans': showing}, + dataType: 'json', success: function(data) { $("#post_"+post_id).find(".loading_answers").hide(); - $("#post_"+post_id).find(".answer_list").append(data); + var child = $("#post_"+post_id).find(".answer_list").find(".new_answer:first"); + + if (child.length == 0) { + $("#post_"+post_id).find(".answer_list").append(data.html); + } else { + child.before(data.html); + } + + if (data.page != data.num_pages) { + $("#post_"+post_id).find(".answer_list").append('' + data.btn_text + ''); + } } }); }, 1000) diff --git a/forum/templates/post/post_render.html b/forum/templates/post/post_render.html index 7e717cf..bf0f1f1 100644 --- a/forum/templates/post/post_render.html +++ b/forum/templates/post/post_render.html @@ -1,6 +1,6 @@ {% load i18n permission_tags list_post_answer %} -
+

{{ post.user }} diff --git a/forum/templates/post_answers/post_answer_load_more_render.html b/forum/templates/post_answers/post_answer_load_more_render.html new file mode 100644 index 0000000..6f2a201 --- /dev/null +++ b/forum/templates/post_answers/post_answer_load_more_render.html @@ -0,0 +1,38 @@ +{% load i18n permission_tags %} + +{% if answers|length > 0 %} + {% for answer in answers %} +
+
+
+

+ {{ answer.user }} + {% if request.user|has_role:'system_admin' or request.user == answer.user %} + + {% endif %} +

+
+
+

{{ answer.answer_date|timesince }} {% trans 'ago' %} + {% if answer.is_modified %} + - {% trans 'Edited' %} + {% endif %} +

+
+

{{ answer.message|linebreaks }}

+
+
+
+
+ {% endfor %} +{% endif %} \ No newline at end of file diff --git a/forum/templates/post_answers/post_answer_render.html b/forum/templates/post_answers/post_answer_render.html index 15ca97a..06fc867 100644 --- a/forum/templates/post_answers/post_answer_render.html +++ b/forum/templates/post_answers/post_answer_render.html @@ -1,6 +1,6 @@ {% load i18n permission_tags %} -
+

diff --git a/forum/views.py b/forum/views.py index 434f2d7..5035337 100644 --- a/forum/views.py +++ b/forum/views.py @@ -231,7 +231,13 @@ def load_answers(request, post_id): post = get_object_or_404(Post, id = post_id) - answers = PostAnswer.objects.filter(post = post) + showing = request.GET.get('showing_ans', '') + + if showing == '': + answers = PostAnswer.objects.filter(post = post) + else: + showing = showing.split(',') + answers = PostAnswer.objects.filter(post = post).exclude(id__in = showing) paginator = Paginator(answers, 2) @@ -251,7 +257,9 @@ def load_answers(request, post_id): context['answers'] = page_obj.object_list context['post'] = post - return render(request, 'post_answers/post_answer_list.html', context) + html = render_to_string('post_answers/post_answer_load_more_render.html', context, request) + + return JsonResponse({'num_pages': paginator.num_pages, 'page': page_obj.number, 'btn_text': _('Load more answers'), 'html': html}) class PostAnswerIndex(LoginRequiredMixin, generic.ListView): login_url = reverse_lazy("core:home") @@ -294,7 +302,9 @@ def render_post_answer(request, answer): context = {} context['answer'] = last_answer - return render(request, "post_answers/post_answer_render.html", context) + html = render_to_string("post_answers/post_answer_render.html", context, request) + + return JsonResponse({'new_id': last_answer.id, 'html': html}) class PostAnswerUpdateView(LoginRequiredMixin, generic.UpdateView): login_url = reverse_lazy("core:home") -- libgit2 0.21.2