decidim-comments 0.29.3 → 0.30.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/comments/comment/actions.erb +0 -8
  3. data/app/cells/decidim/comments/comment/show.erb +41 -5
  4. data/app/cells/decidim/comments/comment_cell.rb +37 -1
  5. data/app/cells/decidim/comments/comment_form/comment_as.erb +24 -6
  6. data/app/cells/decidim/comments/comment_form/opinion.erb +0 -4
  7. data/app/cells/decidim/comments/comment_form/show.erb +31 -29
  8. data/app/cells/decidim/comments/comment_form_cell.rb +7 -2
  9. data/app/cells/decidim/comments/comment_thread/show.erb +2 -2
  10. data/app/cells/decidim/comments/comments/add_comment.erb +12 -14
  11. data/app/cells/decidim/comments/comments/comments_in_single_column.erb +6 -0
  12. data/app/cells/decidim/comments/comments/order_control.erb +32 -9
  13. data/app/cells/decidim/comments/comments/show.erb +7 -7
  14. data/app/cells/decidim/comments/comments_cell.rb +56 -12
  15. data/app/cells/decidim/comments/edit_comment_modal_form_cell.rb +1 -1
  16. data/app/cells/decidim/comments/two_columns_comments/column.erb +20 -0
  17. data/app/cells/decidim/comments/two_columns_comments/show.erb +11 -0
  18. data/app/cells/decidim/comments/two_columns_comments_cell.rb +86 -0
  19. data/app/controllers/decidim/comments/comments_controller.rb +1 -2
  20. data/app/forms/decidim/comments/comment_form.rb +14 -0
  21. data/app/models/decidim/comments/comment.rb +10 -8
  22. data/app/packs/entrypoints/decidim_comments.js +1 -0
  23. data/app/packs/src/decidim/comments/comments.component.js +151 -24
  24. data/app/packs/src/decidim/comments/comments.component.test.js +2 -1
  25. data/app/packs/src/decidim/comments/comments.js +95 -12
  26. data/app/packs/src/decidim/comments/comments_dropdown.js +57 -0
  27. data/app/packs/src/decidim/comments/comments_mobile_modal.js +46 -0
  28. data/app/packs/stylesheets/comments.scss +203 -50
  29. data/app/queries/decidim/comments/metrics/comment_participants_metric_measure.rb +1 -1
  30. data/app/queries/decidim/comments/metrics/comments_metric_manage.rb +22 -17
  31. data/app/views/decidim/comments/comments/create.js.erb +9 -1
  32. data/config/locales/ar.yml +0 -1
  33. data/config/locales/bg.yml +0 -1
  34. data/config/locales/ca.yml +35 -4
  35. data/config/locales/cs.yml +37 -2
  36. data/config/locales/de.yml +35 -4
  37. data/config/locales/el.yml +0 -1
  38. data/config/locales/en.yml +35 -4
  39. data/config/locales/es-MX.yml +35 -4
  40. data/config/locales/es-PY.yml +35 -4
  41. data/config/locales/es.yml +35 -4
  42. data/config/locales/eu.yml +55 -24
  43. data/config/locales/fi-plain.yml +35 -2
  44. data/config/locales/fi.yml +36 -3
  45. data/config/locales/fr-CA.yml +8 -4
  46. data/config/locales/fr.yml +8 -4
  47. data/config/locales/gl.yml +0 -1
  48. data/config/locales/hu.yml +0 -1
  49. data/config/locales/id-ID.yml +0 -1
  50. data/config/locales/is-IS.yml +0 -1
  51. data/config/locales/it.yml +1 -2
  52. data/config/locales/ja.yml +34 -4
  53. data/config/locales/lb.yml +0 -1
  54. data/config/locales/lt.yml +1 -2
  55. data/config/locales/lv.yml +0 -1
  56. data/config/locales/nl.yml +0 -1
  57. data/config/locales/no.yml +0 -1
  58. data/config/locales/pl.yml +1 -3
  59. data/config/locales/pt-BR.yml +0 -1
  60. data/config/locales/pt.yml +0 -1
  61. data/config/locales/ro-RO.yml +57 -60
  62. data/config/locales/ru.yml +0 -1
  63. data/config/locales/sk.yml +0 -1
  64. data/config/locales/sv.yml +19 -4
  65. data/config/locales/tr-TR.yml +1 -2
  66. data/config/locales/uk.yml +0 -1
  67. data/config/locales/zh-CN.yml +0 -1
  68. data/config/locales/zh-TW.yml +0 -1
  69. data/decidim-comments.gemspec +1 -1
  70. data/lib/decidim/api/comment_mutation_type.rb +2 -2
  71. data/lib/decidim/api/comment_type.rb +12 -45
  72. data/lib/decidim/api/commentable_interface.rb +4 -16
  73. data/lib/decidim/api/commentable_mutation_type.rb +2 -3
  74. data/lib/decidim/comments/commentable.rb +11 -0
  75. data/lib/decidim/comments/engine.rb +7 -1
  76. data/lib/decidim/comments/test/factories.rb +8 -0
  77. data/lib/decidim/comments/test/shared_examples/comment_event.rb +1 -1
  78. data/lib/decidim/comments/test/shared_examples/comment_voted_event.rb +2 -2
  79. data/lib/decidim/comments/test/shared_examples/create_comment_context.rb +1 -1
  80. data/lib/decidim/comments/test/shared_examples/translatable_comment.rb +2 -2
  81. data/lib/decidim/comments/version.rb +1 -1
  82. metadata +16 -11
  83. data/config/locales/ca-IT.yml +0 -178
@@ -0,0 +1,46 @@
1
+ // The code: 1. Manages a responsive "Add Comment" modal: Opens fullscreen on mobile (<= sm) and closes it via a "close" button.
2
+ // 2. Handles dropdown menus: Dynamically updates button content based on user selection, hides selected items, and manages dropdown visibility.
3
+ // This creates a responsive, interactive comment interface with mobile-friendly design and dynamic user group selection.
4
+
5
+ import { screens } from "tailwindcss/defaultTheme"
6
+ import { initializeCommentsDropdown } from "../../decidim/comments/comments_dropdown";
7
+
8
+ // Add comment card for mobile
9
+ const addCommentMobile = function (addCommentCard) {
10
+ const smBreakpoint = parseInt(screens.sm.replace("px", ""), 10);
11
+ if (window.matchMedia(`(max-width: ${smBreakpoint}px)`).matches) {
12
+ addCommentCard.classList.remove("hidden");
13
+ addCommentCard.classList.add("fullscreen");
14
+ }
15
+ };
16
+
17
+ const closeAddComment = function (addCommentCard) {
18
+ addCommentCard.classList.add("hidden");
19
+ addCommentCard.classList.remove("fullscreen");
20
+ }
21
+
22
+ document.addEventListener("DOMContentLoaded", () => {
23
+ // Add comment card for mobile
24
+ const addCommentCard = document.getElementById("add-comment-anchor");
25
+ if (addCommentCard) {
26
+ document.querySelectorAll(".add-comment-mobile").forEach((addButtonMobile) => {
27
+ addButtonMobile.addEventListener("click", () => {
28
+ addCommentMobile(addCommentCard);
29
+ });
30
+ });
31
+ }
32
+
33
+ // Close comment modal
34
+ const closeButton = document.querySelector(
35
+ "#add-comment-anchor .close-add-comment-fullscreen"
36
+ );
37
+ if (closeButton) {
38
+ closeButton.addEventListener("click", () =>
39
+ closeAddComment(addCommentCard)
40
+ );
41
+ }
42
+
43
+
44
+ // Initialize dropdown menu
45
+ initializeCommentsDropdown(document);
46
+ });
@@ -1,13 +1,19 @@
1
+ @import "stylesheets/decidim/_tribute.scss";
2
+
1
3
  .comments {
2
4
  &__container {
3
5
  @apply md:mt-12;
4
6
  }
5
7
 
6
8
  .add-comment {
7
- @apply mt-12;
9
+ @apply mt-12 md:bg-gray-5 p-0 md:px-4 md:pb-6 md:pt-1 rounded-lg w-full;
10
+
11
+ .new_comment {
12
+ @apply w-full;
13
+ }
8
14
 
9
15
  .remaining-character-count {
10
- @apply block text-right text-sm text-gray-2;
16
+ @apply block text-left text-sm text-gray-2 mx-4 md:m-0;
11
17
  }
12
18
 
13
19
  .form__wrapper {
@@ -19,61 +25,62 @@
19
25
  }
20
26
  }
21
27
 
28
+ .account-message {
29
+ a {
30
+ @apply text-secondary underline font-semibold;
31
+ }
32
+ }
33
+
22
34
  &__header {
23
- @apply flex flex-col md:flex-row md:items-center gap-x-2 mb-4;
35
+ @apply flex justify-between md:flex-row md:items-center mb-4;
36
+
37
+ option {
38
+ &.selected {
39
+ @apply font-bold;
40
+ }
41
+ }
24
42
  }
25
43
 
26
44
  .author__avatar-container {
27
45
  @apply w-8 h-8;
28
46
  }
29
47
 
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;
48
+ .comments-section {
49
+ &__header {
50
+ @apply flex items-center justify-center space-x-2 p-4 bg-secondary/5 rounded-b-md mb-4;
44
51
 
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;
52
+ svg {
53
+ @apply w-6 h-6 mr-2 fill-secondary;
55
54
  }
55
+ }
56
56
 
57
- small {
58
- @apply font-normal text-gray-2 text-xs;
59
- }
57
+ &__title {
58
+ @apply text-md font-semibold text-secondary;
59
+ }
60
+ }
61
+ }
60
62
 
61
- svg {
62
- @apply w-4 h-4 text-primary fill-current;
63
- }
63
+ .comments-two-columns {
64
+ .most-upvoted-label {
65
+ @apply px-2 mb-2;
66
+ }
64
67
 
65
- .is-group {
66
- @apply ml-auto flex items-center gap-1;
67
- }
68
+ input[type="radio"] {
69
+ &:not(.reset-defaults) {
70
+ @apply inline-block mr-0;
68
71
  }
69
72
  }
70
73
  }
71
74
 
72
75
  .comment {
73
- @apply rounded-lg border-2 border-background p-3 pl-6;
76
+ @apply rounded-lg border-2 border-background-5 p-3 pl-6;
77
+
78
+ &.top-comment {
79
+ @apply border-gray-2;
80
+ }
74
81
 
75
82
  &__header {
76
- @apply flex items-center gap-x-2 mb-2 -ml-10 relative;
83
+ @apply flex items-center gap-x-2 mb-2 relative;
77
84
 
78
85
  a[href^="/profile"] > span:first-child {
79
86
  @apply z-10;
@@ -82,11 +89,30 @@
82
89
  &--edited {
83
90
  @apply text-sm font-semibold;
84
91
  }
92
+
93
+ /* affects the left margin of the avatar in the comment replies */
94
+ & ~ [data-comment-footer] {
95
+ .comment__header {
96
+ @apply -ml-10;
97
+ }
98
+
99
+ [data-target*="dropdown-menu-add-comment"] {
100
+ @apply w-full flex items-center justify-between gap-2 px-0 pt-2 pb-0 first-of-type:[&>svg]:block last-of-type:[&>svg]:hidden;
101
+
102
+ > svg {
103
+ @apply w-6 h-6 flex-none text-secondary fill-current;
104
+ }
105
+ }
106
+ }
85
107
  }
86
108
 
87
109
  /* overwrite default dropdown styles */
88
110
  [data-target*="dropdown"] {
89
111
  @apply md:flex w-auto cursor-pointer text-sm text-secondary;
112
+
113
+ > svg {
114
+ @apply h-3 w-3;
115
+ }
90
116
  }
91
117
 
92
118
  /* overwrite default dropdown styles */
@@ -95,11 +121,11 @@
95
121
  }
96
122
 
97
123
  &__footer-grid {
98
- @apply grid grid-cols-2 items-center mt-4;
124
+ @apply grid items-center mt-4;
99
125
  }
100
126
 
101
127
  &-reply {
102
- @apply rounded-lg border-2 border-background ml-3 relative;
128
+ @apply rounded-lg border-2 border-background-5 ml-3 relative;
103
129
  }
104
130
 
105
131
  &-reply:empty {
@@ -107,7 +133,7 @@
107
133
  }
108
134
 
109
135
  &-reply::after {
110
- @apply bg-background-3 inline-block absolute top-8 h-4/5 w-px -z-10;
136
+ @apply bg-background-5 inline-block absolute top-8 h-4/5 w-px -z-10;
111
137
 
112
138
  content: "";
113
139
  }
@@ -142,7 +168,27 @@
142
168
  }
143
169
 
144
170
  &__as {
145
- @apply my-4;
171
+ @apply my-4 px-4 md:p-0;
172
+
173
+ &-author-container {
174
+ @apply flex justify-between items-center;
175
+ }
176
+
177
+ &-author-info {
178
+ @apply flex items-center gap-2;
179
+ }
180
+
181
+ &-author-name {
182
+ @apply text-secondary font-semibold;
183
+ }
184
+
185
+ &-author-selected {
186
+ @apply flex flex-col;
187
+
188
+ .author__avatar-container {
189
+ @apply -mt-3.5;
190
+ }
191
+ }
146
192
  }
147
193
 
148
194
  .add-comment {
@@ -156,10 +202,8 @@
156
202
  @apply mr-2;
157
203
  }
158
204
 
159
- .button_to:first-child,
160
- button:first-child,
161
- button:nth-child(2),
162
- .button_to:nth-child(2) {
205
+ > :first-child,
206
+ > :nth-child(2) {
163
207
  svg:first-child {
164
208
  @apply block;
165
209
  }
@@ -189,7 +233,7 @@
189
233
  }
190
234
  }
191
235
 
192
- .button_to:nth-child(2) {
236
+ > :nth-child(2) {
193
237
  svg:first-child {
194
238
  @apply block;
195
239
  }
@@ -234,11 +278,15 @@
234
278
  }
235
279
 
236
280
  &-order-by {
237
- @apply ml-auto grid grid-cols-4 place-items-center mt-4 md:mt-0;
281
+ @apply ml-auto flex place-items-center md:mt-0;
282
+
283
+ > form {
284
+ @apply flex;
285
+ }
238
286
  }
239
287
 
240
288
  &__actions {
241
- @apply flex items-center gap-4;
289
+ @apply flex items-center justify-center gap-4;
242
290
 
243
291
  .button[aria-expanded="false"] {
244
292
  svg:first-of-type {
@@ -277,6 +325,50 @@
277
325
  }
278
326
  }
279
327
 
328
+ &__reply-button {
329
+ @apply flex items-center justify-center;
330
+
331
+ .button[aria-expanded="false"] {
332
+ svg:first-of-type {
333
+ @apply block;
334
+ }
335
+
336
+ svg:last-of-type {
337
+ @apply hidden;
338
+ }
339
+
340
+ span:first-of-type {
341
+ @apply block;
342
+ }
343
+
344
+ span:last-of-type {
345
+ @apply hidden;
346
+ }
347
+ }
348
+
349
+ .button[aria-expanded="true"] {
350
+ svg:first-of-type {
351
+ @apply hidden;
352
+ }
353
+
354
+ svg:last-of-type {
355
+ @apply block;
356
+ }
357
+
358
+ span:first-of-type {
359
+ @apply hidden;
360
+ }
361
+
362
+ span:last-of-type {
363
+ @apply block;
364
+ }
365
+ }
366
+ }
367
+
368
+ &__votes-actions {
369
+ @apply flex justify-between;
370
+ }
371
+
280
372
  &__content {
281
373
  &--label {
282
374
  @apply inline-block mb-2;
@@ -289,7 +381,15 @@
289
381
  }
290
382
 
291
383
  &-submit {
292
- @apply flex flex-col md:flex-row justify-between items-stretch md:items-end gap-4 mt-4;
384
+ @apply flex flex-col md:flex-row md:justify-between items-stretch md:items-end gap-4 mt-4;
385
+ }
386
+
387
+ &-mobile-banner {
388
+ @apply flex relative md:hidden h-[72px] border-b border-gray justify-center items-center;
389
+
390
+ .close-button {
391
+ @apply absolute top-7 right-6 [&_svg]:w-4 [&_svg]:h-4;
392
+ }
293
393
  }
294
394
  }
295
395
 
@@ -325,3 +425,56 @@
325
425
  @apply text-md;
326
426
  }
327
427
  }
428
+
429
+ .comments-label-dropdown {
430
+ @apply mr-2 mt-2;
431
+ }
432
+
433
+ [id*="dropdown-menu-add-comment"] {
434
+ @apply flex flex-col py-0 mx-0 border-t-0 border-gray-3 cursor-pointer;
435
+
436
+ &[aria-hidden="true"] {
437
+ @apply hidden;
438
+ }
439
+ }
440
+
441
+ [data-target*="dropdown-menu-add-comment"] {
442
+ @apply w-full flex items-center justify-between mb-4 gap-2 px-0 pt-2 pb-0 first-of-type:[&>svg]:block last-of-type:[&>svg]:hidden;
443
+
444
+ & > span {
445
+ @apply hidden font-semibold text-secondary;
446
+
447
+ &:only-of-type,
448
+ &.is-active {
449
+ @apply flex items-center gap-2 [&_svg]:fill-current;
450
+ }
451
+ }
452
+
453
+ > svg {
454
+ @apply w-6 h-6 flex-none text-secondary fill-current;
455
+ }
456
+
457
+ &[aria-expanded="false"] > svg:last-of-type,
458
+ &[aria-expanded="true"] > svg:first-of-type {
459
+ @apply hidden;
460
+ }
461
+
462
+ &[aria-expanded="true"] > svg:last-of-type,
463
+ &[aria-expanded="false"] > svg:first-of-type {
464
+ @apply block;
465
+ }
466
+ }
467
+
468
+ .publish-comment-button {
469
+ @apply md:relative fixed inset-x-0 bottom-0 z-30 md:z-0 flex flex-row items-center md:items-end md:justify-end font-semibold justify-around bg-white md:bg-transparent gap-4 md:gap-0 p-4 md:p-0 shadow-inner md:shadow-none first:[&>*]:grow md:first:[&>*]:grow-0 h-14 md:h-fit first:[&>button]:py-3;
470
+ }
471
+
472
+ .fullscreen {
473
+ @apply fixed md:relative inset-0 w-screen md:w-full h-screen bg-white z-50 p-0 overflow-auto md:overflow-hidden rounded-none;
474
+ }
475
+
476
+ .comments {
477
+ .fullscreen.add-comment {
478
+ @apply mt-0;
479
+ }
480
+ }
@@ -40,7 +40,7 @@ module Decidim
40
40
  def retrieve_comments_for_organization
41
41
  user_ids = Decidim::User.where(organization: @resource.organization).pluck(:id)
42
42
  Decidim::Comments::Comment.includes(:root_commentable).not_hidden.not_deleted
43
- .where("decidim_comments_comments.created_at <= ?", end_time)
43
+ .where(decidim_comments_comments: { created_at: ..end_time })
44
44
  .where(decidim_comments_comments: { decidim_author_id: user_ids })
45
45
  .where(decidim_comments_comments: { decidim_author_type: "Decidim::UserBaseEntity" })
46
46
  end
@@ -14,10 +14,10 @@ module Decidim
14
14
  next if cumulative_value.zero?
15
15
 
16
16
  quantity_value = results[:quantity] || 0
17
- space_type, space_id, category_id, related_object_type, related_object_id = key
17
+ space_type, space_id, taxonomy_id, related_object_type, related_object_id = key
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
- organization: @organization, decidim_category_id: category_id,
20
+ organization: @organization, decidim_taxonomy_id: taxonomy_id,
21
21
  related_object_type:, related_object_id:)
22
22
  record.assign_attributes(cumulative: cumulative_value, quantity: quantity_value)
23
23
  record.save!
@@ -29,7 +29,7 @@ module Decidim
29
29
  # Creates a Hashed structure with comments grouped by
30
30
  #
31
31
  # - ParticipatorySpace (type & ID)
32
- # - Category (ID)
32
+ # - Taxonomy (ID)
33
33
  # - RelatedObject (type & ID)
34
34
  #
35
35
  def query
@@ -39,14 +39,15 @@ module Decidim
39
39
  related_object = comment.root_commentable
40
40
  next grouped_comments unless related_object
41
41
 
42
- group_key = generate_group_key(related_object)
43
- next grouped_comments unless group_key
42
+ group_keys = generate_group_keys(related_object)
44
43
 
45
- grouped_comments[group_key] ||= { cumulative: 0, quantity: 0 }
46
- grouped_comments[group_key][:cumulative] += 1
47
- grouped_comments[group_key][:quantity] += 1 if comment.created_at >= start_time
44
+ next grouped_comments unless group_keys
48
45
 
49
- grouped_comments
46
+ group_keys.map do |group_key|
47
+ grouped_comments[group_key] ||= { cumulative: 0, quantity: 0 }
48
+ grouped_comments[group_key][:cumulative] += 1
49
+ grouped_comments[group_key][:quantity] += 1 if comment.created_at >= start_time
50
+ end
50
51
  end
51
52
 
52
53
  @query
@@ -60,22 +61,26 @@ module Decidim
60
61
  user_ids = Decidim::User.select(:id).where(organization: @organization).collect(&:id)
61
62
  user_group_ids = Decidim::UserGroup.select(:id).where(organization: @organization).collect(&:id)
62
63
  Decidim::Comments::Comment.includes(:root_commentable).not_hidden.not_deleted
63
- .where("decidim_comments_comments.created_at <= ?", end_time)
64
+ .where(decidim_comments_comments: { created_at: ..end_time })
64
65
  .where("decidim_comments_comments.decidim_author_id IN (?) OR
65
66
  decidim_comments_comments.decidim_user_group_id IN (?)", user_ids, user_group_ids)
66
67
  end
67
68
 
68
69
  # Generates a group key from the related object of a Comment
69
- def generate_group_key(related_object)
70
+ def generate_group_keys(related_object)
70
71
  participatory_space = retrieve_participatory_space(related_object)
71
72
  return unless participatory_space
72
73
 
73
- category_id = related_object.respond_to?(:category) ? related_object.category.try(:id) : ""
74
- group_key = []
75
- group_key += [participatory_space.class.name, participatory_space.id]
76
- group_key += [category_id]
77
- group_key += [related_object.class.name, related_object.id]
78
- group_key
74
+ return unless related_object.respond_to?(:taxonomies)
75
+
76
+ taxonomy_ids = related_object.taxonomies.pluck(:id)
77
+ taxonomy_ids.each_with_object([]) do |taxonomy_id, group_keys|
78
+ group_key = []
79
+ group_key += [participatory_space.class.name, participatory_space.id]
80
+ group_key += [taxonomy_id]
81
+ group_key += [related_object.class.name, related_object.id]
82
+ group_keys << group_key
83
+ end
79
84
  end
80
85
 
81
86
  # Gets current ParticipatorySpace of a given 'related_object'
@@ -2,6 +2,7 @@
2
2
  var rootCommentableId = <%== "comments-for-#{@comment.root_commentable.commentable_type.demodulize}-#{@comment.root_commentable.id}".to_json %>;
3
3
  var commentHtml = '<%== j(render @comment).strip %>';
4
4
  var inReplyTo = <%== (reply?(@comment) ? @commentable.id : nil).to_json %>;
5
+ var alignment = <%= @comment.alignment.nil? ? "null" : @comment.alignment %>;
5
6
 
6
7
  var $comments = $("#" + rootCommentableId);
7
8
  var component = $comments.data("comments");
@@ -12,7 +13,7 @@
12
13
  hideButton.find("[data-show-comment-reply]").first().html('<%= t("decidim.components.comment.show_replies", count: Decidim::Comments::SortedComments.for(root_comment.reload).size) %>');
13
14
 
14
15
  } else {
15
- component.addThread(commentHtml, true);
16
+ component.addThread(commentHtml, alignment, true);
16
17
  }
17
18
 
18
19
  Rails.fire(document, "comments:loaded", {
@@ -21,4 +22,11 @@
21
22
 
22
23
  // Update the comments count
23
24
  $(".comments-count", $comments).text(<%== t("decidim.components.comments.title", count: @comments_count).to_json %>);
25
+
26
+ var $addCommentCard = $("#add-comment-anchor");
27
+
28
+ if ($addCommentCard.hasClass("fullscreen")) {
29
+ $addCommentCard.addClass("hidden");
30
+ $addCommentCard.removeClass("fullscreen");
31
+ }
24
32
  }());
@@ -92,7 +92,6 @@ ar:
92
92
  comments:
93
93
  blocked_comments_for_unauthorized_user_warning: يجب أن تكون عضوا محققا من أجل التعليق حالياً، ولكن يمكنك قراءة ما سبق.
94
94
  blocked_comments_for_user_warning: لا يمكنك التعليق في هذه اللحظة ، ولكن يمكنك قراءة التعليقات السابقة.
95
- blocked_comments_warning: التعليقات معطلة في هذا الوقت ، لكن يمكنك قراءة التعليقات السابقة.
96
95
  comment_details_title: تفاصيل التعليق
97
96
  loading: جارٍ تحميل التعليقات ...
98
97
  single_comment_warning: <a href="%{url}"> عرض جميع التعليقات</a>
@@ -103,7 +103,6 @@ bg:
103
103
  comments:
104
104
  blocked_comments_for_unauthorized_user_warning: Трябва да сте верифицирани, за да коментирате в този момент, но можете да прочетете предишните.
105
105
  blocked_comments_for_user_warning: Понастоящем не можете да коментирате, но можете да прочетете предходните коментари.
106
- blocked_comments_warning: Коментарите в момента са деактивирани, но можете да прочетете предишните.
107
106
  comment_details_title: Детайли за коментара
108
107
  loading: Коментарите се зареждат...
109
108
  single_comment_warning: <a href="%{url}">Вижте всички коментари</a>
@@ -17,6 +17,10 @@ ca:
17
17
  one: Vot
18
18
  other: Vots
19
19
  decidim:
20
+ admin:
21
+ admin_log:
22
+ changeset:
23
+ comments: Comentaris
20
24
  comments:
21
25
  admin:
22
26
  shared:
@@ -24,8 +28,6 @@ ca:
24
28
  enabled: Comentaris habilitats
25
29
  end_time: Comentaris habilitats fins al
26
30
  start_time: Comentaris habilitats des de
27
- comment_thread:
28
- accessibility_label: Fil de comentaris iniciat per %{full_name} el %{date}
29
31
  comments:
30
32
  create:
31
33
  error: S'ha produït un error en crear el comentari.
@@ -41,7 +43,8 @@ ca:
41
43
  error: S'ha produït un error en votar el comentari.
42
44
  components:
43
45
  add_comment_form:
44
- account_message: <a href="%{sign_in_url}">Inicia sessió</a> o <a href="%{sign_up_url}">crea un compte</a> per afegir el teu comentari.
46
+ account_message: Inicia sessió o crea un compte per afegir el teu comentari.
47
+ add_comment: Afegir un comentari
45
48
  form:
46
49
  body:
47
50
  label: Comentari
@@ -51,6 +54,7 @@ ca:
51
54
  submit_root_comment: Publicar comentari
52
55
  user_group_id:
53
56
  label: Comentar com a
57
+ your_profile: El teu perfil
54
58
  opinion:
55
59
  label: La teva opinió sobre aquest tema
56
60
  negative: Negativa
@@ -66,6 +70,9 @@ ca:
66
70
  alignment:
67
71
  against: En contra
68
72
  in_favor: A favor
73
+ answers:
74
+ one: "%{count} resposta"
75
+ other: "%{count} respuestas"
69
76
  cancel_reply: Cancel·lar resposta
70
77
  comment_label: Comentari %{comment_id}
71
78
  comment_label_reply: Comentari %{comment_id} (respon al comentari %{parent_comment_id})
@@ -96,6 +103,7 @@ ca:
96
103
  one: Mostra la resposta
97
104
  other: Mostra les %{count} respostes
98
105
  single_comment_link_title: Obtenir enllaç
106
+ sort_by: 'Ordenar per: '
99
107
  comment_order_selector:
100
108
  order:
101
109
  best_rated: Més ben valorats
@@ -104,16 +112,19 @@ ca:
104
112
  recent: Recent
105
113
  title: 'Ordenar per:'
106
114
  comments:
115
+ against: En contra
107
116
  blocked_comments_for_unauthorized_user_warning: Has d'estar verificat abans de poder fer comentaris, però pots llegir els comentaris anteriors.
108
117
  blocked_comments_for_user_warning: No pots fer comentaris en aquest moment, però pots llegir els anteriors.
109
- blocked_comments_warning: Els comentaris estan desactivats en aquest moment, però pots llegir els anteriors.
118
+ blocked_comments_warning: Els comentaris estan deshabilitats en aquests moments, només les administradores poden respondre o publicar-ne de nous.
110
119
  comment_details_title: Detalls del comentari
120
+ in_favor: A favor
111
121
  loading: Carregant els comentaris ...
112
122
  single_comment_warning: <a href="%{url}">Mostra tots els comentaris</a>
113
123
  single_comment_warning_title: Estàs veient un sol comentari
114
124
  title:
115
125
  one: "%{count} comentari"
116
126
  other: "%{count} comentaris"
127
+ top_comment_label: Més ben valorat
117
128
  down_vote_button:
118
129
  text: No estic d'acord amb aquest comentari
119
130
  edit_comment_modal_form:
@@ -126,6 +137,26 @@ ca:
126
137
  title: Edita el teu comentari
127
138
  up_vote_button:
128
139
  text: Estic d'acord amb aquest comentari
140
+ download_your_data:
141
+ help:
142
+ comment_votes:
143
+ comment: La id del comentari que es va valorar
144
+ created_at: La data i l'hora en què es va valorar aquest comentari
145
+ id: La id de la valoració del comentari
146
+ updated_at: La data i l'hora de la darrera actualització de la valoració d'aquest comentari
147
+ weight: El pes de la valoració (1 a favor, -1 en contra)
148
+ comments:
149
+ alignment: Si aquest comentari va ser a favor, en contra o neutral
150
+ author: El nom d'usuària de la participant que va fer aquest comentari
151
+ body: El comentari pròpiament
152
+ commentable_id: L'identificador únic d'allò que es podia comentar
153
+ commentable_type: La tipologia d'allò sobre el que es va fer el comentari (si va ser un resultat, una proposta, etc.)
154
+ created_at: La data en què es va crear aquest comentari
155
+ depth: El lloc on es troba aquest comentari a la terna de comentaris (si és una resposta a un comentari, o la resposta d'una resposta)
156
+ id: L'identificador d'aquest comentari
157
+ locale: La configuració regional (idioma) que la participant tenia en deixar aquest comentari
158
+ root_commentable_url: L'URL (adreça web) del recurs que enllaça amb aquest comentari
159
+ user_group: El nom del grup d'usuàries que va fer aquest comentari (si n'hi ha)
129
160
  events:
130
161
  comments:
131
162
  comment_by_followed_user: