From 4e0bf9f25e42fccc81e037a19f5e402cd3fc184b Mon Sep 17 00:00:00 2001 From: Gaudenz Steinlin Date: Mon, 7 May 2012 11:11:19 +0200 Subject: [PATCH] Fix JS comment deletion If the comment tree had just one top level comment the whole tree was removed by the JS code if just one comment in the tree was deleted. These comments were (correctly) not removed from the ZODB. --- CHANGES.txt | 3 ++ .../browser/javascripts/comments.js | 35 ++++++++----------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 60c1dd9..337580d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,9 @@ Changelog 2.1.6 (unreleased) ------------------ +- Fix excessive JS comment deletion. + [gaudenz] + - No longer depend on zope.app packages. [hannosch] diff --git a/plone/app/discussion/browser/javascripts/comments.js b/plone/app/discussion/browser/javascripts/comments.js index 4e7cb97..6519202 100644 --- a/plone/app/discussion/browser/javascripts/comments.js +++ b/plone/app/discussion/browser/javascripts/comments.js @@ -179,31 +179,24 @@ url: form_url, context: $(trigger).parents(".comment"), success: function (data) { - if ($(".discussion .replyTreeLevel0").length === 1) { - $(".discussion").fadeOut('fast', function () { - $(".discussion").remove(); - }); + var comment = $(this); + var clss = comment.attr('class'); + // remove replies + var treelevel = parseInt(clss[clss.indexOf('replyTreeLevel') + 'replyTreeLevel'.length], 10); + // selector for all the following elements of lower level + var selector = ".replyTreeLevel" + treelevel; + for (var i = 0; i < treelevel; i++) { + selector += ", .replyTreeLevel" + i; } - else { - var comment = $(this); - var clss = comment.attr('class'); - // remove replies - var treelevel = parseInt(clss[clss.indexOf('replyTreeLevel') + 'replyTreeLevel'.length], 10); - // selector for all the following elements of lower level - var selector = ".replyTreeLevel" + treelevel; - for (var i = 0; i < treelevel; i++) { - selector += ", .replyTreeLevel" + i; - } - comment.nextUntil(selector).each(function () { - $(this).fadeOut('fast', function () { - $(this).remove(); - }); - }); - // remove comment + comment.nextUntil(selector).each(function () { $(this).fadeOut('fast', function () { $(this).remove(); }); - } + }); + // remove comment + $(this).fadeOut('fast', function () { + $(this).remove(); + }); }, error: function (req, error) { return true;