decidim-comments 0.27.8 → 0.28.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/comments/comment/actions.erb +13 -7
  3. data/app/cells/decidim/comments/comment/alignment_badge.erb +1 -4
  4. data/app/cells/decidim/comments/comment/deletion_data.erb +9 -1
  5. data/app/cells/decidim/comments/comment/moderation_data.erb +1 -1
  6. data/app/cells/decidim/comments/comment/replies.erb +3 -0
  7. data/app/cells/decidim/comments/comment/show.erb +72 -35
  8. data/app/cells/decidim/comments/comment/votes.erb +14 -14
  9. data/app/cells/decidim/comments/comment_activity_cell.rb +11 -7
  10. data/app/cells/decidim/comments/comment_card_cell.rb +2 -2
  11. data/app/cells/decidim/comments/comment_cell.rb +9 -21
  12. data/app/cells/decidim/comments/comment_form/comment_as.erb +3 -3
  13. data/app/cells/decidim/comments/comment_form/opinion.erb +18 -0
  14. data/app/cells/decidim/comments/comment_form/show.erb +33 -16
  15. data/app/cells/decidim/comments/comment_form_cell.rb +9 -1
  16. data/app/cells/decidim/comments/comment_metadata_cell.rb +27 -0
  17. data/app/cells/decidim/comments/comment_s_cell.rb +27 -0
  18. data/app/cells/decidim/comments/comment_thread/show.erb +2 -5
  19. data/app/cells/decidim/comments/comment_thread_cell.rb +0 -6
  20. data/app/cells/decidim/comments/comments/add_comment.erb +1 -20
  21. data/app/cells/decidim/comments/comments/blocked_comments_warning.erb +1 -3
  22. data/app/cells/decidim/comments/comments/comments_loading.erb +1 -3
  23. data/app/cells/decidim/comments/comments/order_control.erb +11 -35
  24. data/app/cells/decidim/comments/comments/show.erb +8 -9
  25. data/app/cells/decidim/comments/comments/single_comment_warning.erb +6 -9
  26. data/app/cells/decidim/comments/comments/user_comments_blocked_warning.erb +9 -6
  27. data/app/cells/decidim/comments/comments_cell.rb +1 -1
  28. data/app/cells/decidim/comments/edit_comment_modal_form/show.erb +20 -15
  29. data/app/commands/decidim/comments/create_comment.rb +17 -5
  30. data/app/commands/decidim/comments/delete_comment.rb +1 -1
  31. data/app/commands/decidim/comments/update_comment.rb +14 -2
  32. data/app/commands/decidim/comments/vote_comment.rb +1 -1
  33. data/app/controllers/decidim/comments/comments_controller.rb +14 -9
  34. data/app/controllers/decidim/comments/votes_controller.rb +1 -1
  35. data/app/events/decidim/comments/comment_by_followed_user_event.rb +1 -1
  36. data/app/events/decidim/comments/comment_by_followed_user_group_event.rb +1 -1
  37. data/app/events/decidim/comments/comment_event.rb +2 -7
  38. data/app/events/decidim/comments/reply_created_event.rb +1 -1
  39. data/app/events/decidim/comments/user_group_mentioned_event.rb +1 -1
  40. data/app/events/decidim/comments/user_mentioned_event.rb +1 -1
  41. data/app/helpers/decidim/comments/comment_cells_helper.rb +1 -1
  42. data/app/jobs/decidim/comments/hide_all_created_by_author_job.rb +13 -0
  43. data/app/models/decidim/comments/comment.rb +9 -7
  44. data/app/models/decidim/comments/comment_vote.rb +0 -10
  45. data/app/models/decidim/comments/seed.rb +30 -14
  46. data/app/packs/entrypoints/decidim_comments.js +5 -0
  47. data/app/packs/src/decidim/comments/comments.component.js +27 -36
  48. data/app/packs/src/decidim/comments/comments.component.test.js +218 -240
  49. data/app/packs/src/decidim/comments/comments.component_for_testing.js +1 -1
  50. data/app/packs/src/decidim/comments/comments.js +20 -1
  51. data/app/packs/stylesheets/comments.scss +327 -0
  52. data/app/queries/decidim/comments/metrics/comments_metric_manage.rb +1 -1
  53. data/app/queries/decidim/comments/sorted_comments.rb +10 -10
  54. data/app/services/decidim/comments/comment_creation.rb +1 -1
  55. data/app/services/decidim/comments/new_comment_notification_creator.rb +8 -8
  56. data/app/views/decidim/comments/admin/shared/_availability_fields.html.erb +4 -9
  57. data/app/views/decidim/comments/comments/_comment.html.erb +1 -1
  58. data/app/views/decidim/comments/comments/_comments.html.erb +1 -1
  59. data/app/views/decidim/comments/comments/_delete.html.erb +2 -4
  60. data/app/views/decidim/comments/comments/_moderated.html.erb +2 -4
  61. data/app/views/decidim/comments/comments/create.js.erb +5 -3
  62. data/app/views/decidim/comments/comments/delete.js.erb +4 -1
  63. data/app/views/decidim/comments/comments/index.js.erb +8 -1
  64. data/app/views/decidim/comments/comments/reload.js.erb +1 -2
  65. data/app/views/decidim/comments/comments/update.js.erb +5 -4
  66. data/app/views/decidim/comments/votes/create.js.erb +5 -5
  67. data/config/assets.rb +3 -0
  68. data/config/locales/ar.yml +0 -16
  69. data/config/locales/bg.yml +0 -166
  70. data/config/locales/ca.yml +15 -17
  71. data/config/locales/cs.yml +8 -10
  72. data/config/locales/de.yml +7 -9
  73. data/config/locales/el.yml +3 -11
  74. data/config/locales/en.yml +10 -12
  75. data/config/locales/es-MX.yml +10 -12
  76. data/config/locales/es-PY.yml +10 -12
  77. data/config/locales/es.yml +16 -18
  78. data/config/locales/eu.yml +6 -8
  79. data/config/locales/fi-plain.yml +7 -9
  80. data/config/locales/fi.yml +7 -9
  81. data/config/locales/fr-CA.yml +9 -11
  82. data/config/locales/fr.yml +9 -11
  83. data/config/locales/ga-IE.yml +0 -4
  84. data/config/locales/gl.yml +0 -16
  85. data/config/locales/hu.yml +3 -11
  86. data/config/locales/id-ID.yml +0 -11
  87. data/config/locales/is-IS.yml +0 -8
  88. data/config/locales/it.yml +0 -16
  89. data/config/locales/ja.yml +6 -8
  90. data/config/locales/lb.yml +0 -16
  91. data/config/locales/lt.yml +7 -10
  92. data/config/locales/lv.yml +0 -11
  93. data/config/locales/nl.yml +0 -16
  94. data/config/locales/no.yml +0 -16
  95. data/config/locales/pl.yml +7 -11
  96. data/config/locales/pt-BR.yml +0 -18
  97. data/config/locales/pt.yml +0 -16
  98. data/config/locales/ro-RO.yml +6 -14
  99. data/config/locales/ru.yml +0 -11
  100. data/config/locales/sk.yml +0 -11
  101. data/config/locales/sq-AL.yml +0 -38
  102. data/config/locales/sv.yml +2 -16
  103. data/config/locales/tr-TR.yml +1 -13
  104. data/config/locales/uk.yml +0 -8
  105. data/config/locales/zh-CN.yml +0 -13
  106. data/config/locales/zh-TW.yml +1 -9
  107. data/lib/decidim/api/comment_type.rb +2 -2
  108. data/lib/decidim/api/commentable_interface.rb +1 -1
  109. data/lib/decidim/comments/comment_serializer.rb +1 -1
  110. data/lib/decidim/comments/comment_vote_serializer.rb +1 -1
  111. data/lib/decidim/comments/commentable.rb +1 -1
  112. data/lib/decidim/comments/comments_helper.rb +6 -3
  113. data/lib/decidim/comments/engine.rb +31 -1
  114. data/lib/decidim/comments/export.rb +1 -1
  115. data/lib/decidim/comments/test/factories.rb +9 -22
  116. data/lib/decidim/comments/test/shared_examples/comment_event.rb +4 -37
  117. data/lib/decidim/comments/test/shared_examples/comment_voted_event.rb +4 -4
  118. data/lib/decidim/comments/test/shared_examples/create_comment_context.rb +5 -5
  119. data/lib/decidim/comments/test/shared_examples/has_comments_availability_attributes.rb +2 -2
  120. data/lib/decidim/comments/test/shared_examples/translatable_comment.rb +3 -3
  121. data/lib/decidim/comments/version.rb +1 -1
  122. metadata +27 -24
  123. data/app/cells/decidim/comments/comment/author.erb +0 -1
  124. data/app/cells/decidim/comments/comment/utilities.erb +0 -41
  125. data/app/cells/decidim/comments/comment_m/footer.erb +0 -5
  126. data/app/cells/decidim/comments/comment_m/top.erb +0 -7
  127. data/app/cells/decidim/comments/comment_m_cell.rb +0 -29
  128. data/app/cells/decidim/comments/comment_thread/title.erb +0 -3
  129. data/config/locales/he-IL.yml +0 -1
  130. data/db/migrate/20240304092558_add_comment_vote_counter_cache_to_comments.rb +0 -21
  131. data/decidim-comments.gemspec +0 -33
@@ -3,6 +3,6 @@
3
3
  import CommentsComponent from "./comments.component"
4
4
 
5
5
  // This module.exports is necessary for the tests to load
6
- // doesn't conflict with import/export
6
+ // does not conflict with import/export
7
7
  module.exports = CommentsComponent;
8
8
 
@@ -1 +1,20 @@
1
- import "src/decidim/comments/comments.component"
1
+ import CommentsComponent from "src/decidim/comments/comments.component"
2
+
3
+ window.Decidim.CommentsComponent = CommentsComponent;
4
+
5
+ const commentsInitializer = () => {
6
+ // Mount comments component
7
+ $("[data-decidim-comments]").each((_i, el) => {
8
+ const $el = $(el);
9
+ let comments = $(el).data("comments");
10
+ if (!comments) {
11
+ comments = new CommentsComponent($el, $el.data("decidim-comments"));
12
+ }
13
+ comments.mountComponent();
14
+ $(el).data("comments", comments);
15
+ });
16
+ }
17
+
18
+ // If no jQuery is used the Tribute feature used in comments to autocomplete
19
+ // mentions stops working
20
+ $(() => commentsInitializer());
@@ -0,0 +1,327 @@
1
+ .comments {
2
+ &__container {
3
+ @apply md:mt-12;
4
+ }
5
+
6
+ .add-comment {
7
+ @apply mt-12;
8
+
9
+ .remaining-character-count {
10
+ @apply block text-right text-sm text-gray-2;
11
+ }
12
+
13
+ .form__wrapper {
14
+ @apply pt-0;
15
+ }
16
+
17
+ a {
18
+ @apply text-secondary underline font-semibold;
19
+ }
20
+ }
21
+
22
+ &__header {
23
+ @apply flex flex-col md:flex-row md:items-center gap-x-2 mb-4;
24
+ }
25
+
26
+ .author__avatar-container {
27
+ @apply w-8 h-8;
28
+ }
29
+
30
+ .tribute-container {
31
+ @apply w-full relative;
32
+
33
+ #results {
34
+ @apply absolute max-h-[225px] top-full left-0 right-0 p-0 my-2 rounded z-50 overflow-y-scroll bg-white;
35
+
36
+ border: 1px solid rgba(33, 33, 33, 0.1);
37
+
38
+ li {
39
+ @apply flex items-center gap-2 cursor-pointer px-4 py-2;
40
+ }
41
+
42
+ li:hover {
43
+ @apply cursor-pointer;
44
+
45
+ background-color: rgba(123, 123, 123, 0.1);
46
+ }
47
+
48
+ img {
49
+ @apply rounded-full w-6 h-6 object-cover;
50
+ }
51
+
52
+ span,
53
+ strong {
54
+ @apply font-semibold text-sm text-secondary;
55
+ }
56
+
57
+ small {
58
+ @apply font-normal text-gray-2 text-xs;
59
+ }
60
+
61
+ svg {
62
+ @apply w-4 h-4 text-primary fill-current;
63
+ }
64
+
65
+ .is-group {
66
+ @apply ml-auto flex items-center gap-1;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ .comment {
73
+ @apply rounded-lg border-2 border-background p-3 pl-6;
74
+
75
+ &__header {
76
+ @apply flex items-center gap-x-2 mb-2 -ml-10 relative;
77
+
78
+ a[href^="/profile"] > span:first-child {
79
+ @apply z-10;
80
+ }
81
+
82
+ &--edited {
83
+ @apply text-sm font-semibold;
84
+ }
85
+ }
86
+
87
+ /* overwrite default dropdown styles */
88
+ [data-target*="dropdown"] {
89
+ @apply md:flex w-auto cursor-pointer text-sm text-secondary;
90
+ }
91
+
92
+ /* overwrite default dropdown styles */
93
+ [id*="dropdown-menu"][aria-hidden="true"] {
94
+ @apply md:hidden;
95
+ }
96
+
97
+ &__footer-grid {
98
+ @apply grid grid-cols-2 items-center mt-4;
99
+ }
100
+
101
+ &-reply {
102
+ @apply rounded-lg border-2 border-background ml-3 relative;
103
+ }
104
+
105
+ &-reply:empty {
106
+ @apply hidden;
107
+ }
108
+
109
+ &-reply::after {
110
+ @apply bg-background-3 inline-block absolute top-8 h-4/5 w-px -z-10;
111
+
112
+ content: "";
113
+ }
114
+
115
+ &-reply &,
116
+ & &-reply {
117
+ @apply border-0 pr-0 mt-4;
118
+ }
119
+
120
+ &-thread {
121
+ @apply mb-8;
122
+
123
+ .button[aria-expanded="false"] {
124
+ svg:first-of-type {
125
+ @apply block;
126
+ }
127
+
128
+ svg:last-of-type {
129
+ @apply hidden;
130
+ }
131
+ }
132
+
133
+ .button[aria-expanded="true"] {
134
+ svg:first-of-type {
135
+ @apply hidden;
136
+ }
137
+
138
+ svg:last-of-type {
139
+ @apply block;
140
+ }
141
+ }
142
+ }
143
+
144
+ &__as {
145
+ @apply my-4;
146
+ }
147
+
148
+ .add-comment {
149
+ @apply w-full;
150
+ }
151
+
152
+ .comment__votes {
153
+ @apply justify-self-end;
154
+
155
+ .comment__votes--up {
156
+ @apply mr-2;
157
+ }
158
+
159
+ .button_to:first-child,
160
+ button:first-child,
161
+ button:nth-child(2),
162
+ .button_to:nth-child(2) {
163
+ svg:first-child {
164
+ @apply block;
165
+ }
166
+
167
+ svg:nth-child(2) {
168
+ @apply hidden;
169
+ }
170
+
171
+ .is-vote-selected {
172
+ svg:first-child {
173
+ @apply hidden;
174
+ }
175
+
176
+ svg:nth-child(2) {
177
+ @apply block;
178
+ }
179
+ }
180
+
181
+ .is-vote-notselected {
182
+ svg:first-child {
183
+ @apply block;
184
+ }
185
+
186
+ svg:nth-child(2) {
187
+ @apply hidden;
188
+ }
189
+ }
190
+ }
191
+
192
+ .button_to:nth-child(2) {
193
+ svg:first-child {
194
+ @apply block;
195
+ }
196
+
197
+ svg:nth-child(2) {
198
+ @apply hidden;
199
+ }
200
+
201
+ .is-vote-selected {
202
+ svg:first-child {
203
+ @apply hidden;
204
+ }
205
+
206
+ svg:nth-child(2) {
207
+ @apply block;
208
+ }
209
+ }
210
+
211
+ .is-vote-notselected {
212
+ svg:first-child {
213
+ @apply block;
214
+ }
215
+
216
+ svg:nth-child(2) {
217
+ @apply hidden;
218
+ }
219
+ }
220
+ }
221
+
222
+ .comment__votes--count {
223
+ @apply text-gray-2 text-sm;
224
+ }
225
+
226
+ .button_to {
227
+ @apply inline-block;
228
+ }
229
+
230
+ /* override button default styles */
231
+ .button[disabled] {
232
+ @apply border-0 bg-transparent;
233
+ }
234
+ }
235
+
236
+ &-order-by {
237
+ @apply ml-auto grid grid-cols-4 place-items-center mt-4 md:mt-0;
238
+ }
239
+
240
+ &__actions {
241
+ @apply flex items-center gap-4;
242
+
243
+ .button[aria-expanded="false"] {
244
+ svg:first-of-type {
245
+ @apply block;
246
+ }
247
+
248
+ svg:last-of-type {
249
+ @apply hidden;
250
+ }
251
+
252
+ span:first-of-type {
253
+ @apply block;
254
+ }
255
+
256
+ span:last-of-type {
257
+ @apply hidden;
258
+ }
259
+ }
260
+
261
+ .button[aria-expanded="true"] {
262
+ svg:first-of-type {
263
+ @apply hidden;
264
+ }
265
+
266
+ svg:last-of-type {
267
+ @apply block;
268
+ }
269
+
270
+ span:first-of-type {
271
+ @apply hidden;
272
+ }
273
+
274
+ span:last-of-type {
275
+ @apply block;
276
+ }
277
+ }
278
+ }
279
+
280
+ &__content {
281
+ &--label {
282
+ @apply inline-block mb-2;
283
+ }
284
+ }
285
+
286
+ &__form {
287
+ &-label {
288
+ @apply font-semibold text-lg text-gray-2;
289
+ }
290
+
291
+ &-submit {
292
+ @apply flex flex-col md:flex-row justify-between items-stretch md:items-end gap-4 mt-4;
293
+ }
294
+ }
295
+
296
+ &__opinion {
297
+ &-container {
298
+ @apply flex mt-2 w-full md:w-fit;
299
+
300
+ button {
301
+ @apply grow border border-gray first-of-type:rounded-l last-of-type:rounded-r inline-flex justify-center items-center gap-1 px-4 py-1.5 text-sm text-gray-2 -ml-px first:ml-0 transition-all;
302
+
303
+ svg {
304
+ @apply fill-current;
305
+ }
306
+
307
+ &:hover,
308
+ &.is-active {
309
+ @apply border-secondary text-secondary bg-background-4;
310
+ }
311
+ }
312
+ }
313
+
314
+ &-label {
315
+ @apply text-sm text-gray-2;
316
+ }
317
+ }
318
+
319
+ &__deleted,
320
+ &__moderated {
321
+ @apply font-bold;
322
+ }
323
+
324
+ .comment__content > * {
325
+ @apply text-md;
326
+ }
327
+ }
@@ -18,7 +18,7 @@ module Decidim
18
18
  record = Decidim::Metric.find_or_initialize_by(day: @day.to_s, metric_type: @metric_name,
19
19
  participatory_space_type: space_type, participatory_space_id: space_id,
20
20
  organization: @organization, decidim_category_id: category_id,
21
- related_object_type: related_object_type, related_object_id: related_object_id)
21
+ related_object_type:, related_object_id:)
22
22
  record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
23
23
  record.save!
24
24
  end
@@ -45,11 +45,19 @@ module Decidim
45
45
  end
46
46
  end
47
47
 
48
+ def count_replies(comment)
49
+ if comment.comment_threads.size.positive?
50
+ comment.comment_threads.size + comment.comment_threads.sum { |reply| count_replies(reply) }
51
+ else
52
+ 0
53
+ end
54
+ end
55
+
48
56
  private
49
57
 
50
58
  def base_scope
51
59
  id = @options[:id]
52
- return Comment.where(root_commentable: commentable, id: id) if id.present?
60
+ return Comment.where(root_commentable: commentable, id:) if id.present?
53
61
 
54
62
  after = @options[:after]
55
63
  if after.present?
@@ -59,7 +67,7 @@ module Decidim
59
67
  )
60
68
  end
61
69
 
62
- Comment.where(commentable: commentable)
70
+ Comment.where(commentable:)
63
71
  end
64
72
 
65
73
  def order_by_older(scope)
@@ -81,14 +89,6 @@ module Decidim
81
89
  count_replies(comment)
82
90
  end.reverse
83
91
  end
84
-
85
- def count_replies(comment)
86
- if comment.comment_threads.size.positive?
87
- comment.comment_threads.size + comment.comment_threads.sum { |reply| count_replies(reply) }
88
- else
89
- 0
90
- end
91
- end
92
92
  end
93
93
  end
94
94
  end
@@ -16,7 +16,7 @@ module Decidim
16
16
  ActiveSupport::Notifications.publish(
17
17
  EVENT_NAME,
18
18
  comment_id: comment.id,
19
- metadatas: metadatas
19
+ metadatas:
20
20
  )
21
21
  end
22
22
 
@@ -7,7 +7,7 @@ module Decidim
7
7
  #
8
8
  # - A user is mentioned in the comment
9
9
  # - My comment is replied
10
- # - A user I'm following has created a comment/reply
10
+ # - A user I am following has created a comment/reply
11
11
  # - A new comment has been created on a resource, and I should be notified.
12
12
  #
13
13
  # A given user will only receive one of these notifications, for a given
@@ -46,7 +46,7 @@ module Decidim
46
46
  affected_users = mentioned_users - already_notified_users
47
47
  @already_notified_users += affected_users
48
48
 
49
- notify(:user_mentioned, affected_users: affected_users)
49
+ notify(:user_mentioned, affected_users:)
50
50
  end
51
51
 
52
52
  def notify_mentioned_groups
@@ -56,7 +56,7 @@ module Decidim
56
56
  affected_users = group.accepted_users - already_notified_users
57
57
  @already_notified_users += affected_users
58
58
 
59
- notify(:user_group_mentioned, affected_users: affected_users, extra: { group_id: group.id })
59
+ notify(:user_group_mentioned, affected_users:, extra: { group_id: group.id })
60
60
  end
61
61
  end
62
62
 
@@ -68,14 +68,14 @@ module Decidim
68
68
  affected_users = [comment.commentable.author] - already_notified_users
69
69
  @already_notified_users += affected_users
70
70
 
71
- notify(:reply_created, affected_users: affected_users)
71
+ notify(:reply_created, affected_users:)
72
72
  end
73
73
 
74
74
  def notify_author_followers
75
75
  followers = comment.author.followers - already_notified_users
76
76
  @already_notified_users += followers
77
77
 
78
- notify(:comment_by_followed_user, followers: followers)
78
+ notify(:comment_by_followed_user, followers:)
79
79
  end
80
80
 
81
81
  def notify_user_group_followers
@@ -84,7 +84,7 @@ module Decidim
84
84
  followers = comment.user_group.followers - already_notified_users
85
85
  @already_notified_users += followers
86
86
 
87
- notify(:comment_by_followed_user_group, followers: followers)
87
+ notify(:comment_by_followed_user_group, followers:)
88
88
  end
89
89
 
90
90
  # Notifies the users the `comment.commentable` resource implements as necessary.
@@ -92,7 +92,7 @@ module Decidim
92
92
  followers = comment.commentable.users_to_notify_on_comment_created - already_notified_users
93
93
  @already_notified_users += followers
94
94
 
95
- notify(:comment_created, followers: followers)
95
+ notify(:comment_created, followers:)
96
96
  end
97
97
 
98
98
  # Creates the notifications for the given user IDS and the given event.
@@ -110,7 +110,7 @@ module Decidim
110
110
  event_class = "Decidim::Comments::#{event.to_s.camelcase}Event".constantize
111
111
  data = {
112
112
  event: "decidim.events.comments.#{event}",
113
- event_class: event_class,
113
+ event_class:,
114
114
  resource: comment.root_commentable,
115
115
  extra: {
116
116
  comment_id: comment.id
@@ -1,15 +1,10 @@
1
1
  <div class="row column">
2
- <%= form.check_box :comments_enabled, label: t(".enabled"), :"data-toggle" => "customize_comments_times-div" %>
2
+ <%= form.check_box :comments_enabled, label: t(".enabled"), "data-toggle": "customize_comments_times-div" %>
3
3
  </div>
4
4
 
5
5
  <div id="customize_comments_times-div" data-toggler=".hide" class="row column <%= @form.comments_enabled ? nil : "hide" %>">
6
- <div class="row">
7
- <div class="columns xlarge-6">
8
- <%= form.datetime_field :comments_start_time, label: t(".start_time") %>
9
- </div>
10
-
11
- <div class="columns xlarge-6">
12
- <%= form.datetime_field :comments_end_time, label: t(".end_time") %>
13
- </div>
6
+ <div class="mb-4">
7
+ <%= form.datetime_field :comments_start_time, label: t(".start_time") %>
14
8
  </div>
9
+ <%= form.datetime_field :comments_end_time, label: t(".end_time") %>
15
10
  </div>
@@ -1,5 +1,5 @@
1
1
  <% if reply?(comment) %>
2
- <%= cell("decidim/comments/comment", comment, root_depth: root_depth) %>
2
+ <%= cell("decidim/comments/comment", comment, root_depth:) %>
3
3
  <% else %>
4
4
  <%= cell("decidim/comments/comment_thread", comment) %>
5
5
  <% end %>
@@ -1 +1 @@
1
- <%= inline_comments_for(commentable, order: order) %>
1
+ <%= inline_comments_for(commentable, order:) %>
@@ -1,5 +1,3 @@
1
- <div class="comment__header">
2
- <div class="comment__deleted">
3
- <%= t("decidim.components.comment.deleted_at", date: l(comment.deleted_at, format: :decidim_short)) %>
4
- </div>
1
+ <div class="comment__deleted">
2
+ <%= t("decidim.components.comment.deleted_at", date: l(comment.deleted_at, format: :decidim_short)) %>
5
3
  </div>
@@ -1,5 +1,3 @@
1
- <div class="comment__header">
2
- <div class="comment__moderated">
3
- <%= t("decidim.components.comment.moderated_at", date: l(comment.moderation.hidden_at, format: :decidim_short)) %>
4
- </div>
1
+ <div class="comment__moderated">
2
+ <%= t("decidim.components.comment.moderated_at", date: l(comment.moderation.hidden_at, format: :decidim_short)) %>
5
3
  </div>
@@ -10,13 +10,15 @@
10
10
 
11
11
  var hideButton = $("#comment_" + <%= root_comment.id %>).find(".comment__hide").first();
12
12
  hideButton.find(".show-comment-replies").first().html('<%= t("decidim.components.comment.show_replies", count: Decidim::Comments::SortedComments.for(root_comment.reload).size) %>');
13
- hideButton.removeClass("hide");
13
+
14
14
  } else {
15
15
  component.addThread(commentHtml, true);
16
16
  }
17
17
 
18
+ Rails.fire(document, "comments:loaded", {
19
+ commentsIds: [<%= @comment.id %>, <%= @comment.commentable.id %>]
20
+ });
21
+
18
22
  // Update the comments count
19
23
  $(".comments-count", $comments).text(<%== t("decidim.components.comments.title", count: @comments_count).to_json %>);
20
-
21
- Decidim.addInputEmoji();
22
24
  }());
@@ -5,13 +5,16 @@ $(() => {
5
5
  const $comment = $(`#comment_${commentId}`);
6
6
  const $commentReply = $(`#comment${commentId}-reply`);
7
7
  const $content = $("> .comment__content", $comment);
8
- const sectionsToDelete = ["header", "footer", "additionalreply"];
8
+ const sectionsToDelete = ["header", "footer-grid", "reply", "additionalreply"];
9
9
 
10
10
  sectionsToDelete.forEach((section) => {
11
11
  $(`> .comment__${section}`, $comment).remove();
12
12
  });
13
13
  $commentReply.remove();
14
14
  $content.replaceWith(deleteDataHtml);
15
+ Rails.fire(document, "comments:loaded", {
16
+ commentsIds: [commentId]
17
+ });
15
18
 
16
19
  $(".comments-count", $(`#${rootCommentableId}`)).text(<%== t("decidim.components.comments.title", count: @comment.root_commentable.comments_count).to_json %>);
17
20
  });
@@ -4,9 +4,11 @@
4
4
  var $comments = $("#" + rootCommentableId);
5
5
  var component = $comments.data("comments");
6
6
 
7
- $(".loading-comments").addClass("hide");
7
+ $(".loading-comments").addClass("hidden");
8
+ var commentsIds = [];
8
9
  <% @comments.each do |comment| %>
9
10
  var commentId = <%= comment.id.to_json %>;
11
+ commentsIds.push(commentId);
10
12
  var commentHtml = '<%== j(render comment).strip %>';
11
13
  var inReplyTo = <%== (reply?(comment) ? comment.commentable.id : nil).to_json %>;
12
14
 
@@ -19,6 +21,11 @@
19
21
  }
20
22
  }
21
23
  <% end %>
24
+ if (commentsIds.length) {
25
+ Rails.fire(document, "comments:loaded", {
26
+ commentsIds: commentsIds
27
+ });
28
+ }
22
29
 
23
30
  // Update the comments count
24
31
  $(".comments-count", $comments).text(<%== t("decidim.components.comments.title", count: @comments_count).to_json %>);
@@ -6,11 +6,10 @@
6
6
  component.unmountComponent();
7
7
 
8
8
  var commentsHtml = '<%== j(render partial: "comments").strip %>';
9
- $(".loading-comments").addClass("hide");
9
+ $(".loading-comments").addClass("hidden");
10
10
  $comments.replaceWith(commentsHtml);
11
11
 
12
12
  $comments = $("#" + rootCommentableId);
13
- $comments.foundation();
14
13
 
15
14
  // Re-create the component
16
15
  component = new Decidim.CommentsComponent($comments, $comments.data("decidim-comments"));
@@ -1,5 +1,5 @@
1
1
  $(() => {
2
- var rootCommentableId = <%== "comments-for-#{@comment.commentable.commentable_type.demodulize}-#{@comment.commentable.id}".to_json %>;
2
+ var rootCommentableId = <%== "comments-for-#{@commentable.class.name.demodulize}-#{@commentable.id}".to_json %>;
3
3
  var $comments = $("#" + rootCommentableId);
4
4
  var config = $comments.data("decidim-comments");
5
5
 
@@ -12,11 +12,12 @@ $(() => {
12
12
 
13
13
  $comment.replaceWith(commentHtml);
14
14
 
15
- $comments = $("#" + rootCommentableId);
16
- $comments.foundation();
17
-
18
15
  // Re-create the component
19
16
  component = new Decidim.CommentsComponent($comments, $comments.data("decidim-comments"));
20
17
  component.mountComponent();
21
18
  $comments.data("comments", component);
19
+
20
+ Rails.fire(document, "comments:loaded", {
21
+ commentsIds: [commentId]
22
+ });
22
23
  });
@@ -3,12 +3,12 @@
3
3
  var upVotes = <%= comment.up_votes.count.to_json %>;
4
4
  var downVotes = <%= comment.down_votes.count.to_json %>;
5
5
  var $comment = $("#comment_" + commentId);
6
- var $votes = $("> .comment__footer .comment__votes", $comment);
7
- var $upVote = $(".comment__votes--up", $votes);
8
- var $downVote = $(".comment__votes--down", $votes);
6
+ var $votes = $("> .comment__footer > .comment__footer-grid .comment__votes", $comment);
7
+ var $upVote = $(".js-comment__votes--up", $votes);
8
+ var $downVote = $(".js-comment__votes--down", $votes);
9
9
 
10
- $(".comment__votes--count", $upVote).text(upVotes);
11
- $(".comment__votes--count", $downVote).text(downVotes);
10
+ $("span", $upVote).text(upVotes);
11
+ $("span", $downVote).text(downVotes);
12
12
 
13
13
  $upVote.removeClass("is-vote-selected is-vote-notselected").removeAttr("disabled");
14
14
  $downVote.removeClass("is-vote-selected is-vote-notselected").removeAttr("disabled");
data/config/assets.rb CHANGED
@@ -3,3 +3,6 @@
3
3
  base_path = File.expand_path("..", __dir__)
4
4
 
5
5
  Decidim::Webpacker.register_path("#{base_path}/app/packs")
6
+ Decidim::Webpacker.register_entrypoints(
7
+ decidim_comments: "#{base_path}/app/packs/entrypoints/decidim_comments.js"
8
+ )