decidim-core 0.30.1 → 0.30.2

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity/show.erb +6 -6
  3. data/app/cells/decidim/content_blocks/participatory_space_main_data/title.erb +11 -2
  4. data/app/cells/decidim/footer_topics/show.erb +2 -2
  5. data/app/cells/decidim/group_admins/show.erb +3 -1
  6. data/app/cells/decidim/group_members/show.erb +6 -2
  7. data/app/cells/decidim/images_panel/show.erb +5 -2
  8. data/app/cells/decidim/report_button/flag_modal.erb +11 -9
  9. data/app/cells/decidim/report_user_button/flag_modal.erb +11 -10
  10. data/app/cells/decidim/upload_modal/files.erb +4 -4
  11. data/app/cells/decidim/upload_modal_cell.rb +5 -3
  12. data/app/commands/decidim/amendable/accept.rb +2 -1
  13. data/app/commands/decidim/create_omniauth_registration.rb +1 -1
  14. data/app/controllers/decidim/amendments_controller.rb +3 -3
  15. data/app/helpers/decidim/amendments_helper.rb +2 -1
  16. data/app/helpers/decidim/filters_helper.rb +25 -0
  17. data/app/helpers/decidim/layout_helper.rb +6 -0
  18. data/app/packs/images/decidim/default-avatar.svg +1 -1
  19. data/app/packs/src/decidim/callout.js +13 -8
  20. data/app/packs/src/decidim/confirm.js +15 -3
  21. data/app/packs/src/decidim/datepicker/generate_datepicker.js +2 -0
  22. data/app/packs/src/decidim/datepicker/generate_timepicker.js +2 -0
  23. data/app/packs/src/decidim/direct_uploads/upload_field.js +3 -4
  24. data/app/packs/src/decidim/direct_uploads/upload_modal.js +8 -9
  25. data/app/packs/src/decidim/dropdown_menu.js +18 -0
  26. data/app/packs/src/decidim/editor/common/suggestion.js +11 -1
  27. data/app/packs/src/decidim/index.js +1 -0
  28. data/app/packs/stylesheets/decidim/_activity.scss +4 -4
  29. data/app/packs/stylesheets/decidim/_cards.scss +5 -1
  30. data/app/packs/stylesheets/decidim/_filters.scss +1 -1
  31. data/app/packs/stylesheets/decidim/_header.scss +11 -3
  32. data/app/packs/stylesheets/decidim/_layout.scss +2 -2
  33. data/app/packs/stylesheets/decidim/_modal.scss +1 -5
  34. data/app/packs/stylesheets/decidim/_modal_update.scss +5 -1
  35. data/app/permissions/decidim/permissions.rb +13 -1
  36. data/app/validators/translated_etiquette_validator.rb +2 -0
  37. data/app/views/decidim/errors/internal_server_error.html.erb +1 -1
  38. data/app/views/decidim/errors/not_found.html.erb +1 -1
  39. data/app/views/decidim/newsletters/unsubscribe.html.erb +16 -4
  40. data/app/views/decidim/searches/_filters.html.erb +48 -13
  41. data/app/views/decidim/shared/_component_announcement.html.erb +1 -1
  42. data/app/views/decidim/shared/_confirm_modal.html.erb +3 -5
  43. data/app/views/decidim/shared/_filters.html.erb +6 -4
  44. data/app/views/layouts/decidim/footer/_main.html.erb +1 -1
  45. data/app/views/layouts/decidim/footer/_main_intro.html.erb +1 -1
  46. data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
  47. data/app/views/layouts/decidim/header/_main.html.erb +2 -2
  48. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +6 -0
  49. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +2 -0
  50. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +1 -1
  51. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  52. data/config/locales/ar.yml +0 -3
  53. data/config/locales/bg-BG.yml +2 -2
  54. data/config/locales/bg.yml +0 -5
  55. data/config/locales/ca-IT.yml +28 -5
  56. data/config/locales/ca.yml +28 -5
  57. data/config/locales/cs.yml +15 -6
  58. data/config/locales/de.yml +53 -21
  59. data/config/locales/el.yml +0 -4
  60. data/config/locales/en.yml +28 -5
  61. data/config/locales/es-MX.yml +28 -5
  62. data/config/locales/es-PY.yml +28 -5
  63. data/config/locales/es.yml +28 -5
  64. data/config/locales/eu.yml +66 -43
  65. data/config/locales/fi-plain.yml +76 -5
  66. data/config/locales/fi.yml +77 -6
  67. data/config/locales/fr-CA.yml +28 -5
  68. data/config/locales/fr-LU.yml +3 -3
  69. data/config/locales/fr.yml +28 -5
  70. data/config/locales/gl.yml +0 -3
  71. data/config/locales/hu.yml +0 -5
  72. data/config/locales/id-ID.yml +0 -3
  73. data/config/locales/is-IS.yml +0 -1
  74. data/config/locales/it.yml +165 -3
  75. data/config/locales/ja.yml +36 -5
  76. data/config/locales/lb-LU.yml +2 -2
  77. data/config/locales/lb.yml +0 -3
  78. data/config/locales/lt.yml +0 -5
  79. data/config/locales/lv.yml +0 -3
  80. data/config/locales/nl.yml +0 -3
  81. data/config/locales/no.yml +0 -3
  82. data/config/locales/pl.yml +0 -5
  83. data/config/locales/pt-BR.yml +0 -4
  84. data/config/locales/pt.yml +0 -3
  85. data/config/locales/ro-RO.yml +0 -4
  86. data/config/locales/ru.yml +0 -3
  87. data/config/locales/sk-SK.yml +3 -3
  88. data/config/locales/sk.yml +2 -3
  89. data/config/locales/sv.yml +27 -4
  90. data/config/locales/tr-TR.yml +0 -3
  91. data/config/locales/uk.yml +0 -2
  92. data/config/locales/zh-CN.yml +0 -3
  93. data/config/locales/zh-TW.yml +0 -5
  94. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +2 -1
  95. data/lib/decidim/core/test/factories.rb +2 -2
  96. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +4 -0
  97. data/lib/decidim/core/test/shared_examples/comments_examples.rb +7 -5
  98. data/lib/decidim/core/version.rb +1 -1
  99. data/lib/decidim/form_builder.rb +14 -0
  100. metadata +7 -6
@@ -61,7 +61,7 @@ header {
61
61
  @apply hidden md:block col-span-2 col-start-5 xl:col-start-4;
62
62
 
63
63
  form {
64
- @apply block relative rounded text-md bg-background;
64
+ @apply block relative rounded text-md border border-neutral-200 outline outline-1 outline-transparent rounded bg-background-2 leading-relaxed;
65
65
  }
66
66
 
67
67
  input[type="text"] {
@@ -69,7 +69,7 @@ header {
69
69
  }
70
70
 
71
71
  button[type="submit"] {
72
- @apply absolute ltr:right-2 rtl:left-2 inset-y-2 text-secondary;
72
+ @apply absolute ltr:right-2 rtl:left-2 inset-y-0 text-secondary px-2;
73
73
  }
74
74
  }
75
75
 
@@ -404,7 +404,7 @@ header {
404
404
  @apply w-full px-4;
405
405
 
406
406
  &-menu {
407
- @apply w-full md:w-1/2 mt-0 grid md:grid-cols-2 gap-x-6 text-secondary;
407
+ @apply w-full md:w-[100%] mt-0 grid md:grid-cols-2 gap-x-6 text-secondary;
408
408
 
409
409
  > * {
410
410
  @apply py-3 md:py-3.5 border-b last:border-0 border-gray-3;
@@ -431,6 +431,14 @@ header {
431
431
 
432
432
  &__bottom {
433
433
  @apply hidden md:flex;
434
+
435
+ &-right {
436
+ @apply mr-2 mb-2;
437
+ }
438
+
439
+ &-left {
440
+ @apply mr-2 mt-1;
441
+ }
434
442
  }
435
443
 
436
444
  &__title {
@@ -2,11 +2,11 @@
2
2
  @apply flex flex-col min-h-screen;
3
3
 
4
4
  &__skip {
5
- @apply absolute z-10 left-0 -translate-x-full py-1 px-4 bg-primary rounded-br-lg text-white cursor-pointer transition focus:translate-x-0;
5
+ @apply absolute z-[9999] left-0 -translate-x-full py-1 px-4 bg-primary rounded-br-lg text-white cursor-pointer transition focus:translate-x-0;
6
6
  }
7
7
 
8
8
  [data-content] {
9
- @apply relative flex flex-col;
9
+ @apply relative flex flex-col flex-1;
10
10
  }
11
11
  }
12
12
 
@@ -18,15 +18,11 @@
18
18
  }
19
19
 
20
20
  [data-dialog-container] {
21
- @apply grid grid-cols-[auto_1fr] items-start md:items-center gap-2 text-left;
21
+ @apply grid grid-rows-[auto_1fr] items-start md:items-center gap-2 text-left;
22
22
 
23
23
  > svg {
24
24
  @apply w-6 h-6 text-gray fill-current flex-none;
25
25
  }
26
-
27
- > :last-child {
28
- @apply col-span-2 md:col-span-1 md:col-start-2;
29
- }
30
26
  }
31
27
 
32
28
  [data-dialog-title] {
@@ -132,8 +132,12 @@
132
132
  }
133
133
 
134
134
  span {
135
- @apply text-sm text-gray-2 mx-auto;
135
+ @apply text-sm text-gray-2 mx-auto w-full break-all mb-2;
136
136
  }
137
137
  }
138
138
  }
139
+
140
+ &__span {
141
+ @apply w-full break-all mb-2;
142
+ }
139
143
  }
@@ -106,7 +106,19 @@ module Decidim
106
106
  return allow! if component.current_settings.amendment_creation_enabled
107
107
  when :accept,
108
108
  :reject
109
- return allow! if component.current_settings.amendment_reaction_enabled
109
+ return disallow! unless component.current_settings.amendment_reaction_enabled
110
+
111
+ amendable = context.fetch(:amendable, nil)
112
+
113
+ if amendable.respond_to?(:official?) && amendable.official?
114
+ return allow! if user.admin?
115
+
116
+ return disallow!
117
+ end
118
+
119
+ return disallow! unless amendable.authored_by?(user)
120
+
121
+ return allow!
110
122
  when :promote
111
123
  return allow! if component.current_settings.amendment_promotion_enabled
112
124
  end
@@ -6,6 +6,8 @@
6
6
  # validates :my_i18n_field, translated_etiquette: true
7
7
  class TranslatedEtiquetteValidator < EtiquetteValidator
8
8
  def validate_each(record, attribute, _value)
9
+ return unless Decidim.enable_etiquette_validator
10
+
9
11
  translated_attr = "#{attribute}_#{default_locale_for(record)}".gsub("-", "__")
10
12
  translated_value = record.send(translated_attr)
11
13
  return if translated_value.blank?
@@ -1,6 +1,6 @@
1
1
  <%= render layout: "layouts/decidim/shared/layout_center" do %>
2
2
 
3
- <div class="place-self-center">
3
+ <div class="flex flex-col items-center">
4
4
  <div class="flex justify-center">
5
5
  <h1 class="title-decorator my-12"><%= t("title", scope: "decidim.errors.internal_server_error") %></h1>
6
6
  </div>
@@ -1,6 +1,6 @@
1
1
  <%= render layout: "layouts/decidim/shared/layout_center" do %>
2
2
 
3
- <div class="place-self-center">
3
+ <div class="flex flex-col items-center">
4
4
  <div class="flex justify-center">
5
5
  <h1 class="title-decorator my-12"><%= t("title", scope: "decidim.errors.not_found") %></h1>
6
6
  </div>
@@ -1,4 +1,16 @@
1
- <div class="row">
2
- <h4><%== t ".unsubscribe" %></h4>
3
- <p><%== t ".check_subscription", link: decidim.notifications_settings_path %></p>
4
- </div>
1
+ <main class="layout-1col cols-6">
2
+ <div class="text-center py-12">
3
+ <h1 class="h1 decorator inline-block text-left"><%= t ".unsubscribe" %></h1>
4
+ </div>
5
+ <div class="page__container">
6
+ <div class="editor-content">
7
+ <div class="rich-text-display">
8
+ <%= t ".subscription_preferences", organization_name: translated_attribute(current_organization.name) %>
9
+ </div>
10
+ <br>
11
+ <div class="rich-text-display">
12
+ <%= t ".check_subscription_html", link: decidim.notifications_settings_path %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </main>
@@ -12,35 +12,70 @@
12
12
  <%= icon "arrow-down-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
13
13
  <%= icon "arrow-up-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
14
14
  </button>
15
- <div id="dropdown-menu-search" aria-hidden="true">
16
- <div>
17
- <%= link_to main_search_path, class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == nil}" do %>
15
+ <ul id="dropdown-menu-search" aria-hidden="true">
16
+ <li>
17
+ <%= link_to main_search_path, class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == nil}", "aria-current": params.dig(:filter, :with_resource_type) == nil ? "true" : "" do %>
18
18
  <%= resource_type_icon("all") %>
19
19
  <span><%= t("all", scope: "decidim.searches.filters.state") %></span>
20
20
  <span class="label ml-auto"><%= @results_count %></span>
21
21
  <% end %>
22
- </div>
22
+ </li>
23
23
  <% @blocks.each do |elements| %>
24
- <div>
25
- <% elements.each do |type, results| %>
26
- <div>
24
+ <li>
25
+ <ul>
26
+ <% elements.each do |type, results| %>
27
27
  <% if results[:count].positive? %>
28
- <%= link_to search_path_by_resource_type(type), class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
28
+ <li>
29
+ <%= link_to search_path_by_resource_type(type), class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == type}", "aria-current": params.dig(:filter, :with_resource_type) == type ? "true" : "" do %>
29
30
  <%= resource_type_icon(type) %>
30
31
  <span><%= searchable_resource_human_name(type) %></span>
31
32
  <span class="label ml-auto"><%= results[:count] %></span>
32
33
  <% end %>
34
+ </li>
33
35
  <% else %>
34
- <%= content_tag :div, class: "filter#{" is-empty" if results[:count].zero?}" do %>
36
+ <%= content_tag :li, class: "filter#{" is-empty" if results[:count].zero?}" do %>
35
37
  <%= resource_type_icon(type) %>
36
38
  <span><%= searchable_resource_human_name(type) %></span>
37
39
  <span class="label ml-auto"><%= results[:count] %></span>
38
40
  <% end %>
39
41
  <% end %>
40
- </div>
41
- <% end %>
42
- </div>
42
+ <% end %>
43
+ </ul>
44
+ </li>
43
45
  <% end %>
44
- </div>
46
+ </ul>
45
47
  </div>
46
48
  </nav>
49
+ <script type="text/javascript">
50
+ const button = document.querySelector('#dropdown-trigger-search');
51
+ const arrowDown = button.querySelector('svg:first-of-type');
52
+ const arrowUp = button.querySelector('svg:last-of-type');
53
+ const list = document.querySelector('#dropdown-menu-search');
54
+ // the arrow is up when user arrives on the page, with the list displayed
55
+ arrowUp.addEventListener('click', function(){
56
+ setTimeout(() => {
57
+ button.setAttribute('aria-expanded', 'false');
58
+ list.style.display = "none";
59
+ }, 300)
60
+ })
61
+ arrowDown.addEventListener('click', function(){
62
+ setTimeout(() => {
63
+ button.setAttribute('aria-expanded', 'true');
64
+ list.style.display = "block";
65
+ }, 300)
66
+ })
67
+ // 32 is code for space bar and 13 is code for enter
68
+ button.addEventListener('keydown', function(e){
69
+ if ((e.keyCode === 13 || e.keyCode === 32) && button.getAttribute('aria-expanded') === 'true') {
70
+ setTimeout(() => {
71
+ button.setAttribute('aria-expanded', 'false');
72
+ list.style.display = "none";
73
+ }, 300)
74
+ } else if ((e.keyCode === 13 || e.keyCode === 32) && button.getAttribute('aria-expanded') === 'false'){
75
+ setTimeout(() => {
76
+ button.setAttribute('aria-expanded', 'true');
77
+ list.style.display = "block";
78
+ }, 300)
79
+ }
80
+ })
81
+ </script>
@@ -1,5 +1,5 @@
1
1
  <% announcement = translated_attribute(current_settings.announcement).presence || translated_attribute(component_settings.announcement).presence %>
2
- <% if announcement %>
2
+ <% if strip_tags(announcement).present? %>
3
3
  <section class="layout-main__section">
4
4
  <%= cell("decidim/announcement", announcement, local_assigns.merge(callout_class: "editor-content")) %>
5
5
  </section>
@@ -1,16 +1,14 @@
1
1
  <%= decidim_modal id: "confirm-modal" do %>
2
2
  <div data-dialog-container>
3
- <%= icon "delete-bin-line" %>
4
3
  <h2 class="h2" data-dialog-title id="dialog-title-confirm-modal"><%= t("title", scope: "decidim.shared.confirm_modal") %></h2>
5
-
6
4
  <div data-confirm-modal-content></div>
7
5
  </div>
8
6
 
9
- <div data-dialog-actions>
10
- <button class="button button__lg button__transparent-secondary" data-confirm-cancel data-dialog-close="confirm-modal">
7
+ <div data-dialog-actions class="flex flex-col-reverse md:flex-row">
8
+ <button class="button button__lg button__transparent-secondary w-full md:w-auto" data-confirm-cancel data-dialog-close="confirm-modal">
11
9
  <span><%= t("cancel", scope: "decidim.shared.confirm_modal") %></span>
12
10
  </button>
13
- <button class="button button__lg button__secondary" data-confirm-ok>
11
+ <button class="button button__lg button__secondary w-full md:w-auto" data-confirm-ok>
14
12
  <span><%= t("ok", scope: "decidim.shared.confirm_modal") %></span>
15
13
  </button>
16
14
  </div>
@@ -16,16 +16,18 @@
16
16
  <% if local_assigns.has_key?(:skip_to_id) %>
17
17
  <%= link_to t("skip", scope: "decidim.shared.filter_form_help"), "##{skip_to_id}", class: "filter-skip", role: "menuitem" %>
18
18
  <% end %>
19
- <p class="filter-help" role="menuitem" aria-disabled="true"><%= t("help", scope: "decidim.shared.filter_form_help") %></p>
19
+
20
+ <p id="filter-help-text" class="filter-help" role="menuitem" aria-disabled="true"><%= t("help", scope: "decidim.shared.filter_form_help") %></p>
20
21
 
21
22
  <% if local_assigns.has_key?(:search_variable) %>
22
23
  <div class="filter-search filter-container" role="menuitem">
23
24
  <%= form.search_field search_variable,
24
25
  label: false,
25
26
  placeholder: search_label,
26
- title: search_label,
27
- "aria-label": search_label %>
28
- <button type="submit" aria-label="<%= search_label %>">
27
+ title: filter_search_label(search_label, skip_to_id),
28
+ "aria-label": filter_search_label(search_label, skip_to_id),
29
+ "aria-describedby": "filter-help-text" %>
30
+ <button type="submit" aria-label="<%= filter_search_label(search_label, skip_to_id) %>">
29
31
  <%= icon "search-line" %>
30
32
  </button>
31
33
  </div>
@@ -11,7 +11,7 @@
11
11
  <nav class="md:w-1/2 lg:w-auto" role="navigation" aria-label="Legal">
12
12
  <%= render partial: "layouts/decidim/footer/main_legal" %>
13
13
  </nav>
14
- <nav class="w-full md:w-auto md:ml-auto" role="navigation" aria-label="Social media">
14
+ <nav class="w-full md:w-auto md:ml-auto" role="navigation" aria-label="<%= t("layouts.decidim.footer.social_media") %>">
15
15
  <%= render partial: "layouts/decidim/footer/main_social_media_links" %>
16
16
  </nav>
17
17
  <%= render partial: "layouts/decidim/footer/main_language_chooser" %>
@@ -1,6 +1,6 @@
1
1
  <% if current_organization.official_img_footer.attached? %>
2
2
  <%= link_to current_organization.official_url, class: "block mb-6" do %>
3
- <%= image_tag current_organization.attached_uploader(:official_img_footer).url, alt: current_organization_name, class: "max-h-16" %>
3
+ <%= image_tag current_organization.attached_uploader(:official_img_footer).url, alt: t("layouts.decidim.footer.current_organization_img", organization: current_organization_name), class: "max-h-16" %>
4
4
  <% end %>
5
5
  <% end %>
6
6
  <div class="text-sm text-white prose">
@@ -4,9 +4,9 @@
4
4
  <a rel="decidim noopener noreferrer" href="https://decidim.org/" target="_blank" data-external-link="text-only">
5
5
  <%= image_pack_tag("media/images/decidim-logo.svg", alt: t("layouts.decidim.footer.decidim_logo"), class: "max-h-8 block") %>
6
6
  </a>
7
- <div class="text-xs mt-2 [&_a]:underline">
7
+ <p class="text-xs mt-2 [&_a]:underline">
8
8
  <%= t("layouts.decidim.footer.made_with_open_source").html_safe %>
9
- </div>
9
+ </p>
10
10
  </div>
11
11
  <a class="flex gap-1 hover:opacity-50" rel="license noopener noreferrer" href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" data-external-link="text-only">
12
12
  <span class="sr-only"><%= t("layouts.decidim.footer.cc_by_license") %></span>
@@ -11,10 +11,10 @@
11
11
  <% if current_user&.ephemeral? %>
12
12
  <%= render partial: "layouts/decidim/header/close_ephemeral_session" %>
13
13
  <% else %>
14
- <div class="main-bar__search">
14
+ <div role="search" class="main-bar__search">
15
15
  <%= render partial: "layouts/decidim/header/main_search" %>
16
16
  </div>
17
- <div class="main-bar__links-desktop">
17
+ <div role="navigation" class="main-bar__links-desktop">
18
18
  <%= render partial: "layouts/decidim/header/main_links_desktop" %>
19
19
  </div>
20
20
  <div class="main-bar__menu-mobile">
@@ -30,6 +30,12 @@
30
30
  <% unread_data = current_user_unread_data %>
31
31
  <% if unread_data[:unread_items] %>
32
32
  <%= content_tag :span, "", class: "main-bar__notification", data: unread_data %>
33
+ <% if unread_data[:unread_notifications] %>
34
+ <%= content_tag :span, t("layouts.decidim.user_menu.unread_notifications"), class: "sr-only" %>
35
+ <% end %>
36
+ <% if unread_data[:unread_conversations] %>
37
+ <%= content_tag :span, t("layouts.decidim.user_menu.unread_conversations"), class: "sr-only" %>
38
+ <% end %>
33
39
  <% end %>
34
40
  <% if current_user.avatar.attached? %>
35
41
  <span class="main-bar__avatar">
@@ -17,6 +17,7 @@
17
17
  <span class="text-secondary"><%= t("layouts.decidim.user_menu.notifications") %></span>
18
18
  <% if unread_data[:unread_notifications] %>
19
19
  <%= content_tag :span, "", class: "main-bar__dropdown-notification", data: unread_data %>
20
+ <%= content_tag :span, t("layouts.decidim.user_menu.unread_notifications"), class: "sr-only" %>
20
21
  <% end %>
21
22
  <% end %>
22
23
  </li>
@@ -26,6 +27,7 @@
26
27
  <span class="text-secondary"><%= t("layouts.decidim.user_menu.conversations") %></span>
27
28
  <% if unread_data[:unread_conversations] %>
28
29
  <%= content_tag :span, "", class: "main-bar__dropdown-notification", data: unread_data %>
30
+ <%= content_tag :span, t("layouts.decidim.user_menu.unread_conversations"), class: "sr-only" %>
29
31
  <% end %>
30
32
  <% end %>
31
33
  </li>
@@ -10,7 +10,7 @@
10
10
  </div>
11
11
 
12
12
  <div>
13
- <div class="main-bar__links-mobile__trigger" onclick="document.querySelector('#dropdown-trigger-links-mobile').click();">
13
+ <div class="main-bar__links-mobile__trigger" onclick="document.querySelector('#dropdown-trigger-links-mobile').click();document.querySelector('#dropdown-menu-account-mobile').removeAttribute('aria-modal')">
14
14
  <%= icon "close-line" %>
15
15
  </div>
16
16
  </div>
@@ -1,7 +1,7 @@
1
1
  <% if available_locales.length > 1 %>
2
2
  <div>
3
3
  <button id="dropdown-trigger-language-chooser-mobile" data-component="dropdown" data-target="dropdown-menu-language-chooser-mobile" class="mt-8 rounded-lg py-0 bg-gray-5 h-10 border border-gray outline outline-1 outline-transparent">
4
- <span><%= t("name", scope: "locale" ) %></span>
4
+ <span class="ml-2"><%= t("name", scope: "locale" ) %></span>
5
5
  <%= icon "arrow-down-s-line" %>
6
6
  <%= icon "arrow-up-s-line" %>
7
7
  <span class="sr-only">
@@ -839,7 +839,6 @@ ar:
839
839
  reject_invitation: رفض
840
840
  group_members:
841
841
  actions:
842
- are_you_sure: هل أنت واثق؟
843
842
  promote_to_admin: جعل المشرف
844
843
  remove_from_group: إزالة المشارك
845
844
  index:
@@ -1028,10 +1027,8 @@ ar:
1028
1027
  unsubscribe:
1029
1028
  success: أنت غير مشترك بنجاح.
1030
1029
  token_error: انتهت صلاحية الرابط.
1031
- unsubscribe: إلغاء الاشتراك
1032
1030
  newsletters_opt_in_mailer:
1033
1031
  notify:
1034
- body_1: تزداد أهمية معالجة البيانات الشخصية وحمايتها بالنسبة لنا جميعًا. مع اللائحة العامة الجديدة لحماية البيانات (GDPR) المؤرخة 25 مايو 2018 ، أصبح للأفراد سيطرة أفضل على بياناتهم الشخصية. لهذا السبب نحتاج إلى "موافق" لمواصلة إرسال المعلومات ذات الصلة حول أنشطة %{organization_name}.
1035
1032
  body_2: 'كيف يمكنك أن تعطينا موافقتك؟ فقط انقر على الزر التالي:'
1036
1033
  body_3: مع هذه الموافقة ، ستتمكن من متابعة تلقي معلومات حول خدمات النظام الأساسي. على العكس من ذلك ، إذا لم نتلق تأكيدًا إيجابيًا من جانبك ، فسنوقف إرسال رسائلنا إليك. إذا أكدت رغبتك في أن تظل على اطلاع ، فسيكون لديك دائمًا خيار الإلغاء في أي وقت.
1037
1034
  button: نعم ، أرغب في متابعة تلقي المعلومات ذات الصلة
@@ -405,7 +405,7 @@ bg:
405
405
  newsletter: Получавайте извънреден бюлетин с подходяща информация
406
406
  newsletter_title: Разрешение за контакт с Вас
407
407
  nickname_help: Вашя псевдоним в %{organization}
408
- password_help: "Минимум %{minimun_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
408
+ password_help: "Минимум %{minimum_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
409
409
  sign_in: Вход
410
410
  sign_up: Регистрация
411
411
  sign_up_as:
@@ -1315,7 +1315,7 @@ bg:
1315
1315
  change_your_password: Промени паролата си
1316
1316
  confirm_new_password: Потвърди нова парола
1317
1317
  new_password: Нова парола
1318
- password_help: "Минимум %{minimun_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
1318
+ password_help: "Минимум %{minimum_characters} символа, не трябва да са разпространени (например, 123456) и трябва да са различни от вашите име и ел. поща."
1319
1319
  new:
1320
1320
  forgot_your_password: Забравили сте паролата си?
1321
1321
  send_me_reset_password_instructions: Изпрати ми инструкции за възстановяване на паролата
@@ -926,7 +926,6 @@ bg:
926
926
  title: Какви са значките?
927
927
  group_admins:
928
928
  actions:
929
- are_you_sure: Сигурни ли сте? Това няма да премахне участника от групата.
930
929
  demote_admin: Премахни администратор
931
930
  demote:
932
931
  error: Възникна проблем при премахването на този участник от списъка с администратори.
@@ -956,7 +955,6 @@ bg:
956
955
  error: Възникна проблем при приемането на заявката за присъединяване.
957
956
  success: Заявката за присъединяване е приета успешно.
958
957
  actions:
959
- are_you_sure: Сигурни ли сте?
960
958
  promote_to_admin: Направи администратор
961
959
  remove_from_group: Премахни участник
962
960
  index:
@@ -1186,11 +1184,9 @@ bg:
1186
1184
  main_image: Основно изображение
1187
1185
  newsletters:
1188
1186
  unsubscribe:
1189
- check_subscription: За да зададете предпочитанията си, отидете в страницата <a href="%{link}" target="_blank">настройки</a>.
1190
1187
  error: Възникна проблем при прекратяването на абонамента.
1191
1188
  success: Отписахте се успешно.
1192
1189
  token_error: Срокът на връзката е изтекъл.
1193
- unsubscribe: Отписване
1194
1190
  newsletters_opt_in:
1195
1191
  unauthorized: Съжаляваме, този линк вече не е активен.
1196
1192
  update:
@@ -1198,7 +1194,6 @@ bg:
1198
1194
  success: Настройките за бюлетина са успешно обновени.
1199
1195
  newsletters_opt_in_mailer:
1200
1196
  notify:
1201
- body_1: Обработката на личните данни и тяхната защита стават все по-важни за всички нас. С новия Общ регламент за защита на данните (GDPR) от 25 май 2018 г. лицата имат по-добър контрол върху личните си данни. Поради тази причина се нуждаем от вашето съгласие, за да продължим да изпращаме подходяща информация за дейностите на %{organization_name}.
1202
1197
  body_2: 'Как можете да ни дадете своето съгласие? Просто щракнете върху следния бутон:'
1203
1198
  body_3: С това съгласие ще продължите да получавате информация за дейностите в платформата. Ако не получим потвърждение от Ваша страна, ще спрем да ви изпращаме нашите съобщения. Дори да потвърдите, че желаете да бъдете информирани, винаги ще имате възможност да се откажете по всяко време.
1204
1199
  button: Да, желая да продължа да получавам подбрана информация
@@ -173,6 +173,13 @@ ca-IT:
173
173
  x_seconds:
174
174
  one: 1 segon
175
175
  other: "%{count} segons"
176
+ widget:
177
+ label:
178
+ date: Seleccionar data per %{label}
179
+ time: Seleccionar hora per %{label}
180
+ picker:
181
+ date_button: Obre el selector de calendari per a %{label}
182
+ time_button: Obre el selector d'hora per a %{label}
176
183
  decidim:
177
184
  accessibility:
178
185
  external_link: Enllaç extern
@@ -1163,7 +1170,12 @@ ca-IT:
1163
1170
  title: Què són les ensenyes?
1164
1171
  group_admins:
1165
1172
  actions:
1166
- are_you_sure: Segur? Això no eliminarà la participant del grup.
1173
+ confirm_modal:
1174
+ ok_add: Afegir una administradora
1175
+ ok_remove: Eliminar l'administradora
1176
+ title_add: Confirmar la nova administradora
1177
+ title_remove: Eliminar l'administradora
1178
+ confirm_remove_from_admin: Segur que vols eliminar a l'avaluadora d'aquest grup?
1167
1179
  demote_admin: Elimina l'administradora
1168
1180
  demote:
1169
1181
  error: S'ha produït un error en eliminar aquesta usuària de la llista d'administradores.
@@ -1193,7 +1205,11 @@ ca-IT:
1193
1205
  error: S'ha produït un error en acceptar aquesta sol·licitud d'incorporació al grup.
1194
1206
  success: Sol·licitud d'incorporació rebutjada correctament.
1195
1207
  actions:
1196
- are_you_sure: Segur?
1208
+ confirm_modal:
1209
+ ok_remove: Eliminar membre
1210
+ title_remove: Eliminar membre
1211
+ confirm_promote_to_admin: Segur que vols afegir aquesta usuària com a administradora?
1212
+ confirm_remove_from_group: Segur que vols eliminar a aquesta usuària d'aquest grup?
1197
1213
  promote_to_admin: Fer administradora
1198
1214
  remove_from_group: Eliminar participant
1199
1215
  index:
@@ -1435,11 +1451,12 @@ ca-IT:
1435
1451
  main_image: Imatge principal
1436
1452
  newsletters:
1437
1453
  unsubscribe:
1438
- check_subscription: Si vols canviar les teves preferències, pots fer-ho a la <a href="%{link}" target="_blank">pàgina de configuració</a>.
1454
+ check_subscription_html: Si els vols tornar a rebre, pots tornar a activar la teva subscripció en qualsevol moment des de la <a href="%{link}" target="_blank">pàgina de configuració</a>.
1439
1455
  error: S'ha produït un error en cancel·lar la subscripció.
1456
+ subscription_preferences: Hem actualitzat les teves preferències de subscripció i ja no rebràs butlletins informatius de %{organization_name}.
1440
1457
  success: Has cancel·lat la subscripció correctament.
1441
1458
  token_error: L'enllaç ha caducat.
1442
- unsubscribe: Anul·la la subscripció
1459
+ unsubscribe: Cancel·lar la subscripció al butlletí informatiu
1443
1460
  newsletters_opt_in:
1444
1461
  unauthorized: Ho sentim, aquest enllaç ja no està disponible.
1445
1462
  update:
@@ -1447,7 +1464,7 @@ ca-IT:
1447
1464
  success: La configuració del butlletí de notícies s'ha actualitzat correctament.
1448
1465
  newsletters_opt_in_mailer:
1449
1466
  notify:
1450
- body_1: El processament de les dades personals i la seva protecció cada vegada és més important per a totes nosaltres. Amb el nou Reglament General de Protecció de Dades (GDPR) del 25 de maig de 2018, les persones tenen un major control sobre les seves dades personals. Per aquest motiu, necessitem la teva autorització per continuar enviant informació rellevant sobre les activitats del %{organization_name}.
1467
+ body_1: El processament de les dades personals i la seva protecció cada vegada és més important per a totes nosaltres. Amb el Reglament General de Protecció de Dades (GDPR) del 25 de maig de 2018, les persones tenen un major control sobre les seves dades personals. Per aquest motiu, necessitem la teva autorització per continuar enviant informació rellevant sobre les activitats del %{organization_name}.
1451
1468
  body_2: 'Com ens pots donar el teu consentiment? Només cal que facis clic al botó següent:'
1452
1469
  body_3: Donant consentiment podràs continuar rebent informació sobre els serveis de la plataforma. Si, al contrari, no rebem una confirmació positiva de la teva part, deixarem d'enviar-te els nostres missatges. Si confirmes que vols mantenir-te informada, sempre tindràs l'opció de cancel·lar en qualsevol moment.
1453
1470
  button: Sí, vull continuar rebent informació rellevant
@@ -1783,6 +1800,7 @@ ca-IT:
1783
1800
  searches:
1784
1801
  filters:
1785
1802
  jump_to: 'Salta a:'
1803
+ resource: "%{label} entre %{collection}"
1786
1804
  search: Cercar
1787
1805
  state:
1788
1806
  active: Actiu
@@ -2257,14 +2275,17 @@ ca-IT:
2257
2275
  edit: Edita
2258
2276
  footer:
2259
2277
  cc_by_license: Amb llicència Creative Commons
2278
+ current_organization_img: "%{organization} (Anar a la pàgina d'inici)"
2260
2279
  data_consent_settings: Configuració de les galetes
2261
2280
  decidim_logo: Logo Decidim
2262
2281
  decidim_title: Decidim
2282
+ help: Ajuda
2263
2283
  log_in: Entra
2264
2284
  made_with_open_source: Web creada amb <a target="_blank" href="https://github.com/decidim/decidim">programari lliure</a>.
2265
2285
  open_data: Dades obertes
2266
2286
  resources: Recursos
2267
2287
  sign_up: Crea un compte
2288
+ social_media: Xarxes socials
2268
2289
  terms_of_service: Termes i condicions d'ús
2269
2290
  header:
2270
2291
  close: Tancar
@@ -2306,6 +2327,8 @@ ca-IT:
2306
2327
  profile: El meu compte
2307
2328
  public_profile: El meu perfil públic
2308
2329
  title: Enllaços del perfil
2330
+ unread_conversations: Tens converses sense llegir
2331
+ unread_notifications: Tens notificacions sense llegir
2309
2332
  user_profile:
2310
2333
  account: Compte
2311
2334
  authorizations: Autoritzacions