decidim-comments 0.29.2 → 0.30.0.rc2

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 (80) 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 +44 -0
  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 +1 -1
  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/two_columns_comments/column.erb +20 -0
  16. data/app/cells/decidim/comments/two_columns_comments/show.erb +11 -0
  17. data/app/cells/decidim/comments/two_columns_comments_cell.rb +86 -0
  18. data/app/forms/decidim/comments/comment_form.rb +14 -0
  19. data/app/models/decidim/comments/comment.rb +9 -7
  20. data/app/packs/entrypoints/decidim_comments.js +1 -0
  21. data/app/packs/src/decidim/comments/comments.component.js +151 -24
  22. data/app/packs/src/decidim/comments/comments.component.test.js +2 -1
  23. data/app/packs/src/decidim/comments/comments.js +95 -12
  24. data/app/packs/src/decidim/comments/comments_dropdown.js +57 -0
  25. data/app/packs/src/decidim/comments/comments_mobile_modal.js +46 -0
  26. data/app/packs/stylesheets/comments.scss +203 -50
  27. data/app/queries/decidim/comments/metrics/comment_participants_metric_measure.rb +1 -1
  28. data/app/queries/decidim/comments/metrics/comments_metric_manage.rb +22 -17
  29. data/app/views/decidim/comments/comments/create.js.erb +9 -1
  30. data/config/locales/ar.yml +0 -1
  31. data/config/locales/bg.yml +0 -1
  32. data/config/locales/ca.yml +35 -2
  33. data/config/locales/cs.yml +37 -2
  34. data/config/locales/de.yml +35 -2
  35. data/config/locales/el.yml +0 -1
  36. data/config/locales/en.yml +35 -2
  37. data/config/locales/es-MX.yml +35 -2
  38. data/config/locales/es-PY.yml +35 -2
  39. data/config/locales/es.yml +35 -2
  40. data/config/locales/eu.yml +46 -13
  41. data/config/locales/fi-plain.yml +35 -2
  42. data/config/locales/fi.yml +35 -2
  43. data/config/locales/fr-CA.yml +8 -2
  44. data/config/locales/fr.yml +8 -2
  45. data/config/locales/gl.yml +0 -1
  46. data/config/locales/hu.yml +0 -1
  47. data/config/locales/id-ID.yml +0 -1
  48. data/config/locales/is-IS.yml +0 -1
  49. data/config/locales/it.yml +1 -1
  50. data/config/locales/ja.yml +34 -2
  51. data/config/locales/lb.yml +0 -1
  52. data/config/locales/lt.yml +0 -1
  53. data/config/locales/lv.yml +0 -1
  54. data/config/locales/nl.yml +0 -1
  55. data/config/locales/no.yml +0 -1
  56. data/config/locales/pl.yml +0 -2
  57. data/config/locales/pt-BR.yml +0 -1
  58. data/config/locales/pt.yml +0 -1
  59. data/config/locales/ro-RO.yml +92 -58
  60. data/config/locales/ru.yml +0 -1
  61. data/config/locales/sk.yml +0 -1
  62. data/config/locales/sv.yml +35 -2
  63. data/config/locales/tr-TR.yml +0 -1
  64. data/config/locales/uk.yml +0 -1
  65. data/config/locales/zh-CN.yml +0 -1
  66. data/config/locales/zh-TW.yml +0 -1
  67. data/decidim-comments.gemspec +1 -1
  68. data/lib/decidim/api/comment_mutation_type.rb +2 -2
  69. data/lib/decidim/api/comment_type.rb +12 -45
  70. data/lib/decidim/api/commentable_interface.rb +4 -16
  71. data/lib/decidim/api/commentable_mutation_type.rb +2 -3
  72. data/lib/decidim/comments/commentable.rb +11 -0
  73. data/lib/decidim/comments/engine.rb +7 -1
  74. data/lib/decidim/comments/test/factories.rb +8 -0
  75. data/lib/decidim/comments/test/shared_examples/comment_event.rb +1 -1
  76. data/lib/decidim/comments/test/shared_examples/comment_voted_event.rb +2 -2
  77. data/lib/decidim/comments/test/shared_examples/create_comment_context.rb +1 -1
  78. data/lib/decidim/comments/test/shared_examples/translatable_comment.rb +2 -2
  79. data/lib/decidim/comments/version.rb +1 -1
  80. metadata +16 -10
@@ -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:
@@ -39,7 +43,8 @@ ca:
39
43
  error: S'ha produït un error en votar el comentari.
40
44
  components:
41
45
  add_comment_form:
42
- 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
43
48
  form:
44
49
  body:
45
50
  label: Comentari
@@ -49,6 +54,7 @@ ca:
49
54
  submit_root_comment: Publicar comentari
50
55
  user_group_id:
51
56
  label: Comentar com a
57
+ your_profile: El teu perfil
52
58
  opinion:
53
59
  label: La teva opinió sobre aquest tema
54
60
  negative: Negativa
@@ -64,6 +70,9 @@ ca:
64
70
  alignment:
65
71
  against: En contra
66
72
  in_favor: A favor
73
+ answers:
74
+ one: "%{count} resposta"
75
+ other: "%{count} respuestas"
67
76
  cancel_reply: Cancel·lar resposta
68
77
  comment_label: Comentari %{comment_id}
69
78
  comment_label_reply: Comentari %{comment_id} (respon al comentari %{parent_comment_id})
@@ -94,6 +103,7 @@ ca:
94
103
  one: Mostra la resposta
95
104
  other: Mostra les %{count} respostes
96
105
  single_comment_link_title: Obtenir enllaç
106
+ sort_by: 'Ordenar per: '
97
107
  comment_order_selector:
98
108
  order:
99
109
  best_rated: Més ben valorats
@@ -102,16 +112,19 @@ ca:
102
112
  recent: Recent
103
113
  title: 'Ordenar per:'
104
114
  comments:
115
+ against: En contra
105
116
  blocked_comments_for_unauthorized_user_warning: Has d'estar verificat abans de poder fer comentaris, però pots llegir els comentaris anteriors.
106
117
  blocked_comments_for_user_warning: No pots fer comentaris en aquest moment, però pots llegir els anteriors.
107
- 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.
108
119
  comment_details_title: Detalls del comentari
120
+ in_favor: A favor
109
121
  loading: Carregant els comentaris ...
110
122
  single_comment_warning: <a href="%{url}">Mostra tots els comentaris</a>
111
123
  single_comment_warning_title: Estàs veient un sol comentari
112
124
  title:
113
125
  one: "%{count} comentari"
114
126
  other: "%{count} comentaris"
127
+ top_comment_label: Més ben valorat
115
128
  down_vote_button:
116
129
  text: No estic d'acord amb aquest comentari
117
130
  edit_comment_modal_form:
@@ -124,6 +137,26 @@ ca:
124
137
  title: Edita el teu comentari
125
138
  up_vote_button:
126
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)
127
160
  events:
128
161
  comments:
129
162
  comment_by_followed_user:
@@ -21,6 +21,10 @@ cs:
21
21
  many: Hlasy
22
22
  other: Hlasy
23
23
  decidim:
24
+ admin:
25
+ admin_log:
26
+ changeset:
27
+ comments: Komentáře
24
28
  comments:
25
29
  admin:
26
30
  shared:
@@ -43,7 +47,8 @@ cs:
43
47
  error: Při hlasování o komentáři došlo k chybě.
44
48
  components:
45
49
  add_comment_form:
46
- account_message: <a href="%{sign_in_url}">Přihlaste se</a> nebo <a href="%{sign_up_url}">vytvořit účet</a> a přidejte svůj komentář.
50
+ account_message: Přihlaste se nebo vytvořte účet pro přidání komentáře.
51
+ add_comment: Přidat komentář
47
52
  form:
48
53
  body:
49
54
  label: Komentář
@@ -53,6 +58,7 @@ cs:
53
58
  submit_root_comment: Publikovat komentář
54
59
  user_group_id:
55
60
  label: Komentovat jako
61
+ your_profile: Váš profil
56
62
  opinion:
57
63
  label: Váš názor na toto téma
58
64
  negative: Negativní
@@ -68,6 +74,11 @@ cs:
68
74
  alignment:
69
75
  against: Proti
70
76
  in_favor: Ve prospěch
77
+ answers:
78
+ one: "%{count} odpověď"
79
+ few: "%{count} odpovědi"
80
+ many: "%{count} odpovědí"
81
+ other: "%{count} odpovědí"
71
82
  cancel_reply: Zrušit odpověď
72
83
  comment_label: Komentář %{comment_id}
73
84
  comment_label_reply: Komentář %{comment_id} (odpověď na komentář %{parent_comment_id})
@@ -102,6 +113,7 @@ cs:
102
113
  many: Zobrazit %{count} odpovědí
103
114
  other: Zobrazit %{count} odpovědí
104
115
  single_comment_link_title: Získat odkaz
116
+ sort_by: 'Řadit podle: '
105
117
  comment_order_selector:
106
118
  order:
107
119
  best_rated: Nejlépe hodnocené
@@ -110,10 +122,12 @@ cs:
110
122
  recent: Nedávné
111
123
  title: 'Seřadit podle:'
112
124
  comments:
125
+ against: Proti
113
126
  blocked_comments_for_unauthorized_user_warning: Musíte být ověřen, abyste mohli komentovat tuto chvíli, ale můžete si přečíst ty předchozí.
114
127
  blocked_comments_for_user_warning: Momentálně nemůžete komentovat, ale můžete si přečíst ty předchozí.
115
- blocked_comments_warning: Komentáře jsou momentálně zakázány, ale můžete si přečíst ty předchozí.
128
+ blocked_comments_warning: Komentáře jsou momentálně zakázány, pouze administrátoři mohou odpovědět nebo psát nové.
116
129
  comment_details_title: Podrobnosti komentáře
130
+ in_favor: Líbí se mi
117
131
  loading: Načítání komentářů ...
118
132
  single_comment_warning: <a href="%{url}">Zobrazit všechny komentáře</a>
119
133
  single_comment_warning_title: Vidíte jeden komentář
@@ -122,6 +136,7 @@ cs:
122
136
  few: "%{count} komentáře"
123
137
  many: "%{count} komentářů"
124
138
  other: "%{count} komentářů"
139
+ top_comment_label: Nejvíce hlasovalo
125
140
  down_vote_button:
126
141
  text: Nesouhlasím s tímto komentářem
127
142
  edit_comment_modal_form:
@@ -134,6 +149,26 @@ cs:
134
149
  title: Upravit komentář
135
150
  up_vote_button:
136
151
  text: Souhlasím s tímto komentářem
152
+ download_your_data:
153
+ help:
154
+ comment_votes:
155
+ comment: ID komentáře, o kterém bylo hlasováno
156
+ created_at: Datum, kdy bylo toto hlasování vytvořeno
157
+ id: ID hlasování
158
+ updated_at: Datum, kdy bylo toto hlasování naposledy aktualizováno
159
+ weight: Váha hlasování (1 pro zvýšení, -1 pro snížení)
160
+ comments:
161
+ alignment: Pokud byl tento komentář příznivý, proti nebo neutrální
162
+ author: Jméno účastníka, který vytvořil tento komentář
163
+ body: Samotný komentář
164
+ commentable_id: Jedinečné id komentáře
165
+ commentable_type: Typ komentáře (pokud byl výsledek, návrh atd.)
166
+ created_at: Datum, kdy byl komentář vytvořen
167
+ depth: Místo, kde se tento komentář nachází v komentářovém větvení (pokud se jedná o odpověď nebo odpověď na odpověď)
168
+ id: ID pro tento komentář
169
+ locale: Lokalizace (jazyk), kterou měl účastník při opuštění tohoto komentáře
170
+ root_commentable_url: URL adresa zdroje, který má vazbu na tento komentář
171
+ user_group: Název skupiny uživatelů, která přidala tento komentář (pokud existuje)
137
172
  events:
138
173
  comments:
139
174
  comment_by_followed_user: