ENHANCEMENT: started to incorporate the jQuery version of comments

This commit is contained in:
Will Rossiter 2010-12-07 14:09:52 +13:00
parent 008e2c0143
commit f539a97d07
3 changed files with 123 additions and 239 deletions

View File

@ -1,246 +1,130 @@
/** /**
* Ajax to support the comment posting system * @package userforms
*/ */
PageCommentInterface = Class.create(); (function($) {
$(document).ready(function () {
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");
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 <li> for the post
var pageComments = $('PageComments').getElementsByTagName('li');
var __newComment = document.createElement('li');
// Add it to the list with a 'loading' message // @todo finish
$('PageComments').insertBefore(__newComment, pageComments[0]);
__newComment.innerHTML = '<p><img src="cms/images/network-save.gif" /> Loading...</p>';
// 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 <li>
__newComment.innerHTML = response.responseText;
Behaviour.apply(__newComment);
// Flash it using Scriptaculous
new Effect.Highlight(__newComment, { endcolor: '#e9e9e9' } );
if(response.responseText.match('<b>Spam detected!!</b>')) {
__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.";
}
return false; return false;
},
/** $('.comments-holder-container form').submit(function (e) {
* Ajax handler of moderation removal
*/
deleteComment: function() {
var __comment = this.parentNode.parentNode.parentNode;
__comment.getElementsByTagName('span')[0].innerHTML = "Removing..."; 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();
new Ajax.Request(this.href + '?ajax=1', { $(this).parents(".comments-holder-container")
onSuccess : function(response) { .find(".comments-holder")
// Clear our wee status message .append("<ul class='comments-list'></ul>");
__comment.getElementsByTagName('span')[0].innerHTML = "Removing...";
// 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 = "<p id=\"NoComments\">No one has commented on this page yet.</p>";
}
}
} );
},
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 <li>
__comment.innerHTML = response.responseText;
Behaviour.apply(__comment);
// Flash it using Scriptaculous
new Effect.Highlight(__comment, { endcolor: '#cc9999' } );
__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 = "<p id=\"NoComments\">No one has commented on this page yet.</p>";
}
}
} );
} }
},
onFailure : function(response) { error.hide();
alert(response.responseText); $('#PageComments').prepend('<li><p><img src="cms/images/network-save.gif" /> Loading...</p></li>');
newComment = $('#PageComments').children()[0];
newComment = $(newComment);
$(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('<b>Spam detected!!</b>')) {
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; /**
}, * 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({
* Ajax handler of ham reporting url: $(this).attr('href') + '?ajax=1',
*/ cache: false,
reportHam: function() { success: function(html){
var __comment = this.parentNode.parentNode.parentNode.parentNode; 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();
__comment.getElementsByTagName('span')[0].innerHTML = "Reporting as not spam..."; if(comments.children().length == 0) {
comments.html("<p id=\"no-comments-yet\">No one has commented on this page yet.</p>");
}
});
}
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
new Ajax.Request(this.href + '?ajax=1', { if(comments.children().length == 0) {
onSuccess : function(response) { comments.html("<p id=\"no-comments-yet\">No one has commented on this page yet.</p>");
// Load the response into the <li> }
__comment.innerHTML = response.responseText; });
Behaviour.apply(__comment); }
}
},
failure: function(html) {
alert(html)
}
});
// Flash it using Scriptaculous e.preventDefault();
new Effect.Highlight(__comment, { endcolor: '#e9e9e9' } ); })
__comment.className = 'notspam'; });
}, })(jQuery);
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 <li>
__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;
}
}
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 = '';
}

View File

@ -1,5 +1,5 @@
<% if CommentsEnabled %> <% if CommentsEnabled %>
<div id="$CommentHolderID"> <div id="$CommentHolderID" class="comments-holder-container">
<h4><% _t('POSTCOM','Post your comment') %></h4> <h4><% _t('POSTCOM','Post your comment') %></h4>
@ -21,7 +21,7 @@
<% if Comments %> <% if Comments %>
<ul class="comments-list"> <ul class="comments-list">
<% control Comments %> <% control Comments %>
<li class="$EvenOdd<% if FirstLast %> $FirstLast <% end_if %> $SpamClass"> <li class="comment $EvenOdd<% if FirstLast %> $FirstLast <% end_if %> $SpamClass">
<% include CommentsInterface_singlecomment %> <% include CommentsInterface_singlecomment %>
</li> </li>
<% end_control %> <% end_control %>
@ -51,12 +51,12 @@
</div> </div>
<% end_if %> <% end_if %>
<% else %> <% else %>
<p id="NoComments"><% _t('NOCOMMENTSYET','No one has commented on this page yet.') %></p> <p class="no-comments-yet"><% _t('NOCOMMENTSYET','No one has commented on this page yet.') %></p>
<% end_if %> <% end_if %>
</div> </div>
<% if DeleteAllLink %> <% if DeleteAllLink %>
<p id="DeleteComments"> <p class="delete-comments">
<a href="$DeleteAllLink"><% _t('PageCommentInterface.DELETEALLCOMMENTS','Delete all comments on this page') %></a> <a href="$DeleteAllLink"><% _t('PageCommentInterface.DELETEALLCOMMENTS','Delete all comments on this page') %></a>
</p> </p>
<% end_if %> <% end_if %>

View File

@ -13,17 +13,17 @@
<% end_if %> <% end_if %>
</p> </p>
<ul class="actionLinks"> <ul class="action-links">
<% if ApproveLink %> <% if ApproveLink %>
<li><a href="$ApproveLink" class="approvelink"><% _t('APPROVE', 'approve this comment') %></a></li> <li><a href="$ApproveLink" class="approve"><% _t('APPROVE', 'approve this comment') %></a></li>
<% end_if %> <% end_if %>
<% if SpamLink %> <% if SpamLink %>
<li><a href="$SpamLink" class="spamlink"><% _t('ISSPAM','this comment is spam') %></a></li> <li><a href="$SpamLink" class="spam"><% _t('ISSPAM','this comment is spam') %></a></li>
<% end_if %> <% end_if %>
<% if HamLink %> <% if HamLink %>
<li><a href="$HamLink" class="hamlink"><% _t('ISNTSPAM','this comment is not spam') %></a></li> <li><a href="$HamLink" class="ham"><% _t('ISNTSPAM','this comment is not spam') %></a></li>
<% end_if %> <% end_if %>
<% if DeleteLink %> <% if DeleteLink %>
<li class="last"><a href="$DeleteLink" class="deletelink"><% _t('REMCOM','remove this comment') %></a></li> <li class="last"><a href="$DeleteLink" class="delete"><% _t('REMCOM','remove this comment') %></a></li>
<% end_if %> <% end_if %>
</ul> </ul>