Skip to content

Commit 56ce457

Browse files
author
Igor Chepurnoy
committed
added events to comment.js
1 parent bd5ed59 commit 56ce457

File tree

3 files changed

+126
-22
lines changed

3 files changed

+126
-22
lines changed

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,26 @@ You may use the following events:
202202
]
203203
```
204204

205+
## Using Comment Plugin Events
206+
207+
```js
208+
$(document).on('beforeCreate', '#comment-form', function (e) {
209+
if (!confirm("Everything is correct. Submit?")) {
210+
return false;
211+
}
212+
return true;
213+
});
214+
```
215+
216+
Available events are:
217+
218+
* beforeCreate
219+
* afterCreate
220+
* beforeDelete
221+
* afterDelete
222+
* beforeReply
223+
* afterReply
224+
205225
## Internationalization
206226

207227
All text and messages introduced in this extension are translatable under category 'yii2mod.comments'.

assets/js/comment.js

Lines changed: 102 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,63 @@
3131
submitBtnLoadingText: 'Loading...'
3232
};
3333

34+
var events = {
35+
/**
36+
* beforeCreate event is triggered before creating the comment.
37+
* The signature of the event handler should be:
38+
* function (event)
39+
* where
40+
* - event: an Event object.
41+
*
42+
* If the handler returns a boolean false, it will stop further comment creation after this event.
43+
*/
44+
beforeCreate: 'beforeCreate',
45+
/**
46+
* afterCreate event is triggered after comment has been created.
47+
* The signature of the event handler should be:
48+
* function (event)
49+
* where
50+
* - event: an Event object.
51+
*/
52+
afterCreate: 'afterCreate',
53+
/**
54+
* beforeDelete event is triggered before comment has been deleted.
55+
* The signature of the event handler should be:
56+
* function (event)
57+
* where
58+
* - event: an Event object.
59+
*
60+
* If the handler returns a boolean false, it will stop further comment deletion after this event.
61+
*/
62+
beforeDelete: 'beforeDelete',
63+
/**
64+
* afterDelete event is triggered after comment has been deleted.
65+
* The signature of the event handler should be:
66+
* function (event)
67+
* where
68+
* - event: an Event object.
69+
*/
70+
afterDelete: 'afterDelete',
71+
/**
72+
* beforeReply event is triggered before reply to comment.
73+
* The signature of the event handler should be:
74+
* function (event)
75+
* where
76+
* - event: an Event object.
77+
*
78+
* If the handler returns a boolean false, it will stop further comment reply after this event.
79+
*/
80+
beforeReply: 'beforeReply',
81+
/**
82+
* beforeReply event is triggered after reply to comment.
83+
* The signature of the event handler should be:
84+
* function (event)
85+
* where
86+
* - event: an Event object.
87+
*/
88+
afterReply: 'afterReply'
89+
};
90+
3491
var commentData = {};
3592

3693
// Methods
@@ -65,20 +122,27 @@
65122

66123
/**
67124
* Create a comment
68-
* @returns {boolean}
69125
*/
70-
function createComment(event) {
126+
function createComment(params) {
71127
var $commentForm = $(this);
72-
var settings = commentData[event.data.wrapperSelector].settings;
128+
129+
var event = $.Event(events.beforeCreate);
130+
$commentForm.trigger(event);
131+
if (event.result === false) {
132+
return false;
133+
}
134+
135+
var settings = commentData[params.data.wrapperSelector].settings;
73136
var pjaxSettings = $.extend({container: settings.pjaxContainerId}, settings.pjaxSettings);
74137
var formData = $commentForm.serializeArray();
75138
formData.push({'name': 'CommentModel[url]', 'value': getCurrentUrl()});
76-
// disable submit button
77139
$commentForm.find(':submit').prop('disabled', true).text(settings.submitBtnLoadingText);
78-
// creating a comment and errors handling
140+
79141
$.post($commentForm.attr('action'), formData, function (data) {
80-
if (data.status == 'success') {
142+
if (data.status === 'success') {
81143
$.pjax(pjaxSettings);
144+
145+
$commentForm.trigger($.Event(events.afterCreate));
82146
}
83147
// errors handling
84148
else {
@@ -88,7 +152,6 @@
88152
else {
89153
$commentForm.yiiActiveForm('updateAttribute', 'commentmodel-content', [data.message]);
90154
}
91-
// enable submit button
92155
$commentForm.find(':submit').prop('disabled', false).text(settings.submitBtnText);
93156
}
94157
}).fail(function (xhr, status, error) {
@@ -101,28 +164,39 @@
101164

102165
/**
103166
* Reply to comment
104-
* @param event
167+
*
168+
* @param params
105169
*/
106-
function reply(event) {
170+
function reply(params) {
107171
var $this = $(this);
108-
var $commentForm = $(event.data.formSelector);
109-
var settings = commentData[event.data.wrapperSelector].settings;
172+
var $commentForm = $(params.data.formSelector);
173+
174+
var event = $.Event(events.beforeReply);
175+
$commentForm.trigger(event);
176+
if (event.result === false) {
177+
return false;
178+
}
179+
180+
var settings = commentData[params.data.wrapperSelector].settings;
110181
var parentCommentSelector = $this.parents('[data-comment-content-id="' + $this.data('comment-id') + '"]');
111182
// append the comment form inside particular comment container
112183
$commentForm.appendTo(parentCommentSelector);
113184
$commentForm.find('[data-comment="parent-id"]').val($this.data('comment-id'));
114185
$commentForm.find(settings.cancelReplyBtnSelector).show();
115186

187+
$commentForm.trigger($.Event(events.afterReply));
188+
116189
return false;
117190
}
118191

119192
/**
120193
* Cancel reply
121-
* @param event
194+
*
195+
* @param params
122196
*/
123-
function cancelReply(event) {
124-
var $commentForm = $(event.data.formSelector);
125-
var settings = commentData[event.data.wrapperSelector].settings;
197+
function cancelReply(params) {
198+
var $commentForm = $(params.data.formSelector);
199+
var settings = commentData[params.data.wrapperSelector].settings;
126200
var formContainer = $(settings.pjaxContainerId).find(settings.formContainerSelector);
127201
// prepend the comment form to `formContainer`
128202
$commentForm.find(settings.cancelReplyBtnSelector).hide();
@@ -134,11 +208,19 @@
134208

135209
/**
136210
* Delete a comment
137-
* @param event
211+
*
212+
* @param params
138213
*/
139-
function deleteComment(event) {
214+
function deleteComment(params) {
140215
var $this = $(this);
141-
var settings = commentData[event.data.wrapperSelector].settings;
216+
var $commentForm = $(params.data.formSelector);
217+
var settings = commentData[params.data.wrapperSelector].settings;
218+
219+
var event = $.Event(events.beforeDelete);
220+
$commentForm.trigger(event);
221+
if (event.result === false) {
222+
return false;
223+
}
142224

143225
$.ajax({
144226
url: $this.data('url'),
@@ -152,6 +234,8 @@
152234
}
153235
});
154236

237+
$commentForm.trigger(events.afterDelete);
238+
155239
return false;
156240
}
157241

widgets/views/_list.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
<div class="comment-details">
1717
<div class="comment-action-buttons">
1818
<?php if (Yii::$app->getUser()->can('admin')) : ?>
19-
<?php echo Html::a('<span class="glyphicon glyphicon-trash"></span> ' . Yii::t('yii2mod.comments', 'Delete'), '#', ['data' => ['action' => 'delete', 'url' => Url::to(['/comment/default/delete', 'id' => $model->id]), 'comment-id' => $model->id]]); ?>
19+
<?php echo Html::a('<span class="glyphicon glyphicon-trash"></span> ' . Yii::t('yii2mod.comments', 'Delete'), '#', ['class' => 'delete-comment-btn', 'data' => ['action' => 'delete', 'url' => Url::to(['/comment/default/delete', 'id' => $model->id]), 'comment-id' => $model->id]]); ?>
2020
<?php endif; ?>
2121
<?php if (!Yii::$app->user->isGuest && ($model->level < $maxLevel || is_null($maxLevel))) : ?>
22-
<?php echo Html::a("<span class='glyphicon glyphicon-share-alt'></span> " . Yii::t('yii2mod.comments', 'Reply'), '#', ['class' => 'comment-reply', 'data' => ['action' => 'reply', 'comment-id' => $model->id]]); ?>
22+
<?php echo Html::a("<span class='glyphicon glyphicon-share-alt'></span> " . Yii::t('yii2mod.comments', 'Reply'), '#', ['class' => 'reply-comment-btn', 'data' => ['action' => 'reply', 'comment-id' => $model->id]]); ?>
2323
<?php endif; ?>
2424
</div>
2525
<div class="comment-author-name">
@@ -31,7 +31,7 @@
3131
<?php echo Editable::widget([
3232
'model' => $model,
3333
'attribute' => 'content',
34-
'url' => '/comment/default/quick-edit',
34+
'url' => Url::to(['/comment/default/quick-edit']),
3535
'options' => [
3636
'id' => 'editable-comment-' . $model->id,
3737
],
@@ -46,7 +46,7 @@
4646
<?php if ($model->hasChildren()) : ?>
4747
<ul class="children">
4848
<?php foreach ($model->getChildren() as $children) : ?>
49-
<?php echo $this->render('_list', ['model' => $children, 'maxLevel' => $maxLevel]) ?>
49+
<?php echo $this->render('_list', ['model' => $children, 'maxLevel' => $maxLevel]); ?>
5050
<?php endforeach; ?>
5151
</ul>
5252
<?php endif; ?>

0 commit comments

Comments
 (0)