|
31 | 31 | submitBtnLoadingText: 'Loading...' |
32 | 32 | }; |
33 | 33 |
|
| 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 | + |
34 | 91 | var commentData = {}; |
35 | 92 |
|
36 | 93 | // Methods |
|
65 | 122 |
|
66 | 123 | /** |
67 | 124 | * Create a comment |
68 | | - * @returns {boolean} |
69 | 125 | */ |
70 | | - function createComment(event) { |
| 126 | + function createComment(params) { |
71 | 127 | 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; |
73 | 136 | var pjaxSettings = $.extend({container: settings.pjaxContainerId}, settings.pjaxSettings); |
74 | 137 | var formData = $commentForm.serializeArray(); |
75 | 138 | formData.push({'name': 'CommentModel[url]', 'value': getCurrentUrl()}); |
76 | | - // disable submit button |
77 | 139 | $commentForm.find(':submit').prop('disabled', true).text(settings.submitBtnLoadingText); |
78 | | - // creating a comment and errors handling |
| 140 | + |
79 | 141 | $.post($commentForm.attr('action'), formData, function (data) { |
80 | | - if (data.status == 'success') { |
| 142 | + if (data.status === 'success') { |
81 | 143 | $.pjax(pjaxSettings); |
| 144 | + |
| 145 | + $commentForm.trigger($.Event(events.afterCreate)); |
82 | 146 | } |
83 | 147 | // errors handling |
84 | 148 | else { |
|
88 | 152 | else { |
89 | 153 | $commentForm.yiiActiveForm('updateAttribute', 'commentmodel-content', [data.message]); |
90 | 154 | } |
91 | | - // enable submit button |
92 | 155 | $commentForm.find(':submit').prop('disabled', false).text(settings.submitBtnText); |
93 | 156 | } |
94 | 157 | }).fail(function (xhr, status, error) { |
|
101 | 164 |
|
102 | 165 | /** |
103 | 166 | * Reply to comment |
104 | | - * @param event |
| 167 | + * |
| 168 | + * @param params |
105 | 169 | */ |
106 | | - function reply(event) { |
| 170 | + function reply(params) { |
107 | 171 | 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; |
110 | 181 | var parentCommentSelector = $this.parents('[data-comment-content-id="' + $this.data('comment-id') + '"]'); |
111 | 182 | // append the comment form inside particular comment container |
112 | 183 | $commentForm.appendTo(parentCommentSelector); |
113 | 184 | $commentForm.find('[data-comment="parent-id"]').val($this.data('comment-id')); |
114 | 185 | $commentForm.find(settings.cancelReplyBtnSelector).show(); |
115 | 186 |
|
| 187 | + $commentForm.trigger($.Event(events.afterReply)); |
| 188 | + |
116 | 189 | return false; |
117 | 190 | } |
118 | 191 |
|
119 | 192 | /** |
120 | 193 | * Cancel reply |
121 | | - * @param event |
| 194 | + * |
| 195 | + * @param params |
122 | 196 | */ |
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; |
126 | 200 | var formContainer = $(settings.pjaxContainerId).find(settings.formContainerSelector); |
127 | 201 | // prepend the comment form to `formContainer` |
128 | 202 | $commentForm.find(settings.cancelReplyBtnSelector).hide(); |
|
134 | 208 |
|
135 | 209 | /** |
136 | 210 | * Delete a comment |
137 | | - * @param event |
| 211 | + * |
| 212 | + * @param params |
138 | 213 | */ |
139 | | - function deleteComment(event) { |
| 214 | + function deleteComment(params) { |
140 | 215 | 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 | + } |
142 | 224 |
|
143 | 225 | $.ajax({ |
144 | 226 | url: $this.data('url'), |
|
152 | 234 | } |
153 | 235 | }); |
154 | 236 |
|
| 237 | + $commentForm.trigger(events.afterDelete); |
| 238 | + |
155 | 239 | return false; |
156 | 240 | } |
157 | 241 |
|
|
0 commit comments