diff --git a/javascript/CommentsInterface.js b/javascript/CommentsInterface.js
index ba37e0d..23812f7 100755
--- a/javascript/CommentsInterface.js
+++ b/javascript/CommentsInterface.js
@@ -2,157 +2,85 @@
* @package comments
*/
(function($) {
- $.entwine( "ss.comments", function($) {
-
+ $(function() {
/**
* Enable form validation
*/
- $('.comments-holder-container form').entwine({
- onmatch: function() {
+ $('.comments-holder-container form').validate({
- // @todo Reinstate preview-comment functionality
+ // Ignore hidden elements in this form
+ ignore: ':hidden',
- /**
- * Validate
- */
- $(this).validate({
+ // Use default 'required' for error labels
+ errorClass: "required",
- /**
- * Ignore hidden elements in this form
- */
- ignore: ':hidden',
+ // Use span instead of labels
+ errorElement: "span",
- /**
- * Use default 'required' for error labels
- */
- errorClass: "required",
-
- /**
- * Use span instead of labels
- */
- errorElement: "span",
-
- /**
- * On error, scroll to the invalid element
- */
- invalidHandler : function(form, validator){
- $('html, body').animate({
- scrollTop: $(validator.errorList[0].element).offset().top - 30
- }, 200);
- },
-
- /**
- * Ensure any new error message has the correct class and placement
- */
- errorPlacement: function(error, element) {
- error
- .addClass('message')
- .insertAfter(element);
- }
- });
- this._super();
+ // On error, scroll to the invalid element
+ invalidHandler : function(form, validator){
+ $('html, body').animate({
+ scrollTop: $(validator.errorList[0].element).offset().top - 30
+ }, 200);
},
- onunmatch: function() {
- this._super();
+
+ // Ensure any new error message has the correct class and placement
+ errorPlacement: function(error, element) {
+ error
+ .addClass('message')
+ .insertAfter(element);
}
});
/**
- * Comment reply form
+ * Hide comment reply forms by default (unless visiting via permalink)
*/
- $( ".comment-replies-container .comment-reply-form-holder" ).entwine({
- onmatch: function() {
- // If and only if this is not the currently selected form, hide it on page load
- var selectedHash = window.document.location.hash.substr(1),
- form = $(this).children('.reply-form');
- if( !selectedHash || selectedHash !== form.prop( 'id' ) ) {
- this.hide();
- }
- this._super();
- },
- onunmatch: function() {
- this._super();
- }
- });
+ $(".comment")
+ .children('.info')
+ .not(window.document.location.hash)
+ .nextAll(".comment-replies-container")
+ .children(".comment-reply-form-holder")
+ .hide();
/**
* Toggle on/off reply form
*/
- $( ".comment-reply-link" ).entwine({
- onclick: function( e ) {
- var allForms = $( ".comment-reply-form-holder" ),
- formID = '#' + $( this ).attr('aria-controls');
- form = $(formID).closest('.comment-reply-form-holder');
+ $('.comments-holder').on('click', '.comment-reply-link', function(e) {
+ var allForms = $('.comment-reply-form-holder');
+ var formID = '#' + $(this).attr('aria-controls');
+ var form = $(formID).closest('.comment-reply-form-holder');
- $(this).attr('aria-expanded', function (i, attr) {
- return attr == 'true' ? 'false' : 'true'
- });
+ $(this).attr('aria-expanded', function (i, attr) {
+ return attr == 'true' ? 'false' : 'true'
+ });
- // Prevent focus
- e.preventDefault();
-
- if(form.is(':visible')) {
- allForms.slideUp();
- } else {
- allForms.not(form).slideUp();
- form.slideDown();
- }
- }
+ // Prevent focus
+ e.preventDefault();
+
+ if(form.is(':visible')) {
+ allForms.slideUp();
+ } else {
+ allForms.not(form).slideUp();
+ form.slideDown();
+ }
});
-
- /**
- * Preview comment by fetching it from the server via ajax.
- */
- /* @todo Migrate to work with nested comments
- $(':submit[name=action_doPreviewComment]', form).click(function(e) {
- e.preventDefault();
-
- if(!form.validate().valid()) {
- return false;
- }
-
- previewEl.show().addClass('loading').find('.middleColumn').html(' ');
-
- form.ajaxSubmit({
- success: function(response) {
- var responseEl = $(response);
- if(responseEl.is('form')) {
- // Validation failed, renders form instead of single comment
- form.find(".data-fields").replaceWith(responseEl.find(".data-fields"));
- } else {
- // Default behaviour
- previewEl.removeClass('loading').find('.middleColumn').html(responseEl);
- }
- },
- data: {'action_doPreviewComment': 1}
- });
- });
- */
-
- /**
- * Hide outdated preview on form changes
- */
- /*
- $(':input', form).on('change keydown', function() {
- previewEl.removeClass('loading').hide();
- });*/
-
/**
* Clicking one of the metalinks performs the operation via ajax
* this inclues the spam and approve links
*/
-
$('.comments-holder .comments-list').on('click', 'div.comment-moderation-options a', function(e) {
+ e.stopPropagation();
+
var link = $(this);
- if (link.hasClass('delete')) {
- var confirmationMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION');
- var confirmation = window.confirm(confirmationMsg);
- if (!confirmation) {
- e.preventDefault();
- return false;
- }
- }
+ if (link.hasClass('delete')) {
+ var confirmationMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION');
+ var confirmation = window.confirm(confirmationMsg);
+ if (!confirmation) {
+ e.preventDefault();
+ return false;
+ }
+ }
var comment = link.parents('.comment:first');
$.ajax({
@@ -171,10 +99,10 @@
}
else if(link.hasClass('delete')) {
comment.fadeOut(1000, function() {
- comment.remove();
+ comment.remove();
- if(commentsList.children().length === 0) {
- noCommentsYet.show();
+ if($('.comments-holder .comments-list').children().length === 0) {
+ $('.no-comments-yet').show();
}
});
}
@@ -184,38 +112,11 @@
},
failure: function(html) {
var errorMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.AJAX_ERROR');
- alert(errorMsg);
+ alert(errorMsg);
}
});
e.preventDefault();
});
-
- /**
- * Ajax pagination
- */
- /* @todo Migrate to work with nested comments
- pagination.find('a').on('click', function(){
- commentsList.addClass('loading');
- $.ajax({
- url: $(this).attr('href'),
- cache: false,
- success: function(html){
- html = $(html);
- commentsList.hide().html(html.find('.comments-list:first').html()).fadeIn();
- pagination.hide().html(html.find('.comments-pagination:first').html()).fadeIn();
- commentsList.removeClass('loading');
- $('html, body').animate({
- scrollTop: commentsList.offset().top - 30
- }, 200);
- },
- failure: function(html) {
- alert('Error loading comments');
- }
- });
- return false;
- });*/
});
})(jQuery);
-
-
diff --git a/src/Controllers/CommentingController.php b/src/Controllers/CommentingController.php
index a1bdbab..f69afc7 100644
--- a/src/Controllers/CommentingController.php
+++ b/src/Controllers/CommentingController.php
@@ -432,6 +432,7 @@ class CommentingController extends Controller
// Enables multiple forms with different names to use the same handler
$form = $this->CommentsForm();
$form->setName('ReplyForm_' . $comment->ID);
+ $form->setHTMLID(null);
$form->addExtraClass('reply-form');
// Load parent into reply form
diff --git a/src/Extensions/CommentsExtension.php b/src/Extensions/CommentsExtension.php
index f5d397f..ed827fb 100644
--- a/src/Extensions/CommentsExtension.php
+++ b/src/Extensions/CommentsExtension.php
@@ -450,9 +450,7 @@ class CommentsExtension extends DataExtension
// Check if enabled
$enabled = $this->getCommentsEnabled();
if ($enabled && $this->owner->getCommentsOption('include_js')) {
- Requirements::javascript('silverstripe/admin:thirdparty/jquery/jquery.js');
- Requirements::javascript('silverstripe/admin:thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
- Requirements::javascript('silverstripe/admin:thirdparty/jquery-form/jquery.form.js');
+ Requirements::javascript('//code.jquery.com/jquery-3.3.1.min.js');
Requirements::javascript('silverstripe/comments:thirdparty/jquery-validate/jquery.validate.min.js');
Requirements::javascript('silverstripe/admin:client/dist/js/i18n.js');
Requirements::add_i18n_javascript('silverstripe/comments:javascript/lang');
diff --git a/src/Forms/CommentForm.php b/src/Forms/CommentForm.php
index 977eb03..5e875ce 100644
--- a/src/Forms/CommentForm.php
+++ b/src/Forms/CommentForm.php
@@ -126,10 +126,6 @@ class CommentForm extends Form
'ReturnURL' => $controller->getRequest()->getURL(),
'ParentClassName' => $controller->getParentClass()
));
-
- if ($holder = $record->getCommentHolderID()) {
- $this->setHTMLID($holder);
- }
}
// Set it so the user gets redirected back down to the form upon form fail
diff --git a/templates/Includes/CommentsInterface_singlecomment.ss b/templates/Includes/CommentsInterface_singlecomment.ss
index b584768..aab7204 100755
--- a/templates/Includes/CommentsInterface_singlecomment.ss
+++ b/templates/Includes/CommentsInterface_singlecomment.ss
@@ -11,7 +11,7 @@
<% if $Gravatar %>
<% end_if %>
-
$EscapedComment