From f539a97d071bc3a348d7f97b6af5518268994228 Mon Sep 17 00:00:00 2001
From: Will Rossiter
Date: Tue, 7 Dec 2010 14:09:52 +1300
Subject: [PATCH] ENHANCEMENT: started to incorporate the jQuery version of
comments
---
javascript/CommentsInterface.js | 344 ++++++-------------
templates/CommentsInterface.ss | 8 +-
templates/CommentsInterface_singlecomment.ss | 10 +-
3 files changed, 123 insertions(+), 239 deletions(-)
diff --git a/javascript/CommentsInterface.js b/javascript/CommentsInterface.js
index 84248ef..fe1561b 100755
--- a/javascript/CommentsInterface.js
+++ b/javascript/CommentsInterface.js
@@ -1,246 +1,130 @@
/**
- * Ajax to support the comment posting system
+ * @package userforms
*/
-PageCommentInterface = Class.create();
-
-PageCommentInterface.prototype = {
- initialize: function() {
- Behaviour.register({
- '#PageCommentInterface_Form_PostCommentForm_action_postcomment' : {
- onclick : this.postComment
- },
-
- '#PageComments a.deletelink' : {
- onclick : this.deleteComment
- },
- '#PageComments a.spamlink' : {
- onclick : this.reportSpam
- },
- '#PageComments a.hamlink' : {
- onclick : this.reportHam
- },
- '#PageComments a.approvelink' : {
- onclick : this.approveComment
- }
- });
- },
-
- loadSpamQuestion: function(response) {
- var spamQuestionDiv = $('Math');
- var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
- mathLabel.innerHTML = response.responseText;
- var mathQuestion = spamQuestionDiv.getElementsByTagName('input')[0];
- mathQuestion.value = '';
- },
-
- postComment: function() {
- var form = $("PageCommentInterface_Form_PostCommentForm");
- var message = $("PageCommentInterface_Form_PostCommentForm_error");
+(function($) {
+ $(document).ready(function () {
- if(form.elements.Name.value && form.elements.Comment.value) {
- if(noComments = $('NoComments')) {
- Element.remove(noComments);
- var pageComments = document.createElement('ul');
- pageComments.id = 'PageComments';
- $('CommentHolder').appendChild(pageComments);
- }
-
- message.style.display = 'none';
- // Create a new for the post
- var pageComments = $('PageComments').getElementsByTagName('li');
- var __newComment = document.createElement('li');
-
-
- // Add it to the list with a 'loading' message
- $('PageComments').insertBefore(__newComment, pageComments[0]);
- __newComment.innerHTML = ' Loading...
';
-
-
- // Submit the form via ajax
- Ajax.SubmitForm(form, "action_postcomment", {
- onSuccess : function(response) {
-
- // Create an Ajax request to regenerate the spam protection question
- //need to check if there is actually a spam question to change first
- if(form.elements.Math){
- new Ajax.Request(document.getElementsByTagName('base')[0].href+'PageCommentInterface_Controller/newspamquestion', {
- onSuccess: loadSpamQuestion,
- onFailure: Ajax.Evaluator
- });
- }
-
- if(response.responseText != "spamprotectionfailed"){
- __newComment.className ="even";
- // Load the response into the new
- __newComment.innerHTML = response.responseText;
- Behaviour.apply(__newComment);
-
- // Flash it using Scriptaculous
- new Effect.Highlight(__newComment, { endcolor: '#e9e9e9' } );
- if(response.responseText.match('Spam detected!!')) {
- __newComment.className = 'spam';
- }
-
- }else{
- __newComment.innerHTML = "";
- Behaviour.apply(__newComment);
- message.style.display = '';
- message.innerHTML = "You got the spam question wrong.";
-
- }
-
-
- },
- onFailure : function(response) {
- alert(response.responseText);
- }
- });
- } else {
- message.style.display = '';
- message.innerHTML = "Please enter your name and a comment to be posted to the site.";
- }
+ // @todo finish
return false;
- },
-
- /**
- * Ajax handler of moderation removal
- */
- deleteComment: function() {
- var __comment = this.parentNode.parentNode.parentNode;
- __comment.getElementsByTagName('span')[0].innerHTML = "Removing...";
-
- new Ajax.Request(this.href + '?ajax=1', {
- onSuccess : function(response) {
- // Clear our wee status message
- __comment.getElementsByTagName('span')[0].innerHTML = "Removing...";
+ $('.comments-holder-container form').submit(function (e) {
- // Remove it using Scriptaculous
- new Effect.Highlight(__comment, {
- startcolor: '#cc9999' , endcolor: '#e9e9e9', duration: 0.5,
- afterFinish : function () {
- var commentList = __comment.parentNode;
- commentList.removeChild(__comment);
- if(!commentList.firstChild) {
- $('CommentHolder').innerHTML = "";
- }
- }
- } );
- },
-
- onFailure : function(response) {
- alert(response.responseText);
- }
- });
-
- return false;
- },
-
- /**
- * Ajax handler of spam reporting
- */
- reportSpam: function() {
- var __comment = this.parentNode.parentNode.parentNode.parentNode;
-
- __comment.getElementsByTagName('span')[0].innerHTML = "Reporting spam...";
-
-
- new Ajax.Request(this.href + '?ajax=1', {
- onSuccess : function(response) {
- if(response.responseText != '') {
- // Load the response into the
- __comment.innerHTML = response.responseText;
- Behaviour.apply(__comment);
-
- // Flash it using Scriptaculous
- new Effect.Highlight(__comment, { endcolor: '#cc9999' } );
+ if($('.comment-holder form [name=Name]').val() && $('.comment-holder form [name=Comment]').val()) {
+ // remove the no comments posted text
+ if($('.no-comments-yet').length > 0) {
+ $('.no-comments-yet').remove();
- __comment.className = 'spam';
- } else {
- new Effect.Highlight(__comment, {
- startcolor: '#cc9999' , endcolor: '#e9e9e9', duration: 0.5,
- afterFinish : function() {
- var commentList = __comment.parentNode;
- commentList.removeChild(__comment);
- if(!commentList.firstChild) {
- $('CommentHolder').innerHTML = "";
- }
- }
- } );
+ $(this).parents(".comments-holder-container")
+ .find(".comments-holder")
+ .append("");
}
- },
-
- onFailure : function(response) {
- alert(response.responseText);
- }
- });
-
- return false;
- },
-
- /**
- * Ajax handler of ham reporting
- */
- reportHam: function() {
- var __comment = this.parentNode.parentNode.parentNode.parentNode;
-
- __comment.getElementsByTagName('span')[0].innerHTML = "Reporting as not spam...";
-
- new Ajax.Request(this.href + '?ajax=1', {
- onSuccess : function(response) {
- // Load the response into the
- __comment.innerHTML = response.responseText;
- Behaviour.apply(__comment);
- // Flash it using Scriptaculous
- new Effect.Highlight(__comment, { endcolor: '#e9e9e9' } );
- __comment.className = 'notspam';
- },
-
- onFailure : function(response) {
- alert(response.responseText);
- }
- });
-
- return false;
- },
-
- /**
- * Ajax handler of ham reporting
- */
- approveComment: function() {
- var __comment = this.parentNode.parentNode.parentNode.parentNode;
-
- __comment.getElementsByTagName('span')[0].innerHTML = "Marking comment as approved...";
-
- new Ajax.Request(this.href + '?ajax=1', {
- onSuccess : function(response) {
- // Load the response into the
- __comment.innerHTML = response.responseText;
- Behaviour.apply(__comment);
+ error.hide();
+ $('#PageComments').prepend(' Loading...
');
+ newComment = $('#PageComments').children()[0];
+ newComment = $(newComment);
- // Flash it using Scriptaculous
- new Effect.Highlight(__comment, { endcolor: '#e9e9e9' } );
- __comment.className = 'notspam';
- },
-
- onFailure : function(response) {
- alert(response.responseText);
+ $(this).ajaxSubmit(function(response) {
+ if($('#PageComments_holder [name=Math]').length > 0) {
+ $.ajax({
+ url: jQuery('base').attr('href') + 'PageCommentInterface_Controller/newspamquestion',
+ cache: false,
+ success: function(html){
+ // Load spam stuff goes in here
+ $('#PageComments_holder #Math label').text(html);
+ $('#PageComments_holder #Math input').val('');
+ },
+ failure: function(html) {
+ eval(html);
+ }
+ });
+ }
+ if(response.match('validationError')) {
+ newComment.remove();
+ eval(response);
+ } else if(response != "spamprotectionfailed") {
+ newComment.addClass('even');
+ newComment.html(response);
+ newComment.effects('highlight', {}, 1000);
+ if(response.match('Spam detected!!')) {
+ newComment.addClass('spam');
+ }
+ $(this).resetForm();
+ } else {
+ error.text('You got the spam question wrong');
+ error.show();
+ newComment.remove();
+ $('#PageComments_holder #Math input').focus();
+ }
+ });
+ } else {
+ // We're missing things, alert it here
+
+ error.show();
}
+
+ e.preventDefault();
});
- return false;
- }
-}
-
-PageCommentInterface.applyTo("#PageComments_holder");
-function loadSpamQuestion(response) {
- var spamQuestionDiv = $('Math');
- var mathLabel = spamQuestionDiv.getElementsByTagName('label')[0];
- mathLabel.innerHTML = response.responseText;
- var mathQuestion = spamQuestionDiv.getElementsByTagName('input')[0];
- mathQuestion.value = '';
-}
+ /**
+ * Clicking one of the metalinks performs the operation via ajax
+ * this inclues the spam and approve links
+ */
+ $(".action-links a").live('click', function(e) {
+ var link = $(this);
+ var hide = $(this).parents("li.comments");
+
+ $.ajax({
+ url: $(this).attr('href') + '?ajax=1',
+ cache: false,
+ success: function(html){
+ if(link.hasClass('ham')) {
+ // comment has been marked as not spam
+ comment.html(html);
+ comment.removeClass('spam');
+ comment.effect("highlight", {}, 1000);
+ }
+ else if(link.hasClass('approve')) {
+ // comment has been approved
+ comment.html(html);
+ comment.removeClass('unmoderated');
+ comment.effect("highlight", {}, 1000);
+ }
+ else if(link.hasClass('delete')) {
+ hide.fadeOut(1000, function() {
+ var comments = hide.parents("ul");
+ hide.remove();
+
+ if(comments.children().length == 0) {
+ comments.html("");
+ }
+ });
+ }
+ else if(link.hasClass('spam')) {
+ if(html) {
+ hide.html(html);
+ hide.effect("highlight", {}, 1000);
+ } else {
+ hide.fadeOut(1000, function() { // Fade out the comment
+ var comments = hide.parent(); // Grab the comments holder
+ hide.remove(); // remove the comment
+
+ if(comments.children().length == 0) {
+ comments.html("");
+ }
+ });
+ }
+ }
+ },
+ failure: function(html) {
+ alert(html)
+ }
+ });
+
+ e.preventDefault();
+ })
+ });
+})(jQuery);
diff --git a/templates/CommentsInterface.ss b/templates/CommentsInterface.ss
index 3b64145..6678453 100755
--- a/templates/CommentsInterface.ss
+++ b/templates/CommentsInterface.ss
@@ -1,5 +1,5 @@
<% if CommentsEnabled %>
-
<% if DeleteAllLink %>
-
<% end_if %>
diff --git a/templates/CommentsInterface_singlecomment.ss b/templates/CommentsInterface_singlecomment.ss
index b32a193..44f966e 100755
--- a/templates/CommentsInterface_singlecomment.ss
+++ b/templates/CommentsInterface_singlecomment.ss
@@ -13,17 +13,17 @@
<% end_if %>
-
<% _t('POSTCOM','Post your comment') %>
@@ -21,7 +21,7 @@ <% if Comments %><% control Comments %> --
+
-
<% include CommentsInterface_singlecomment %>
<% end_control %>
@@ -51,12 +51,12 @@