decidim-core 0.30.0 → 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 (142) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity/show.erb +6 -6
  3. data/app/cells/decidim/address/show.erb +3 -3
  4. data/app/cells/decidim/author/show.erb +1 -1
  5. data/app/cells/decidim/content_blocks/participatory_space_extra_data/extra_data.erb +2 -2
  6. data/app/cells/decidim/content_blocks/participatory_space_main_data/title.erb +11 -2
  7. data/app/cells/decidim/footer_topics/show.erb +2 -2
  8. data/app/cells/decidim/group_admins/show.erb +3 -1
  9. data/app/cells/decidim/group_members/show.erb +6 -2
  10. data/app/cells/decidim/images_panel/show.erb +5 -2
  11. data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +4 -4
  12. data/app/cells/decidim/report_button/flag_modal.erb +11 -9
  13. data/app/cells/decidim/report_user_button/flag_modal.erb +11 -10
  14. data/app/cells/decidim/upload_modal/files.erb +4 -4
  15. data/app/cells/decidim/upload_modal_cell.rb +5 -3
  16. data/app/commands/decidim/amendable/accept.rb +2 -1
  17. data/app/commands/decidim/create_omniauth_registration.rb +1 -1
  18. data/app/commands/decidim/create_report.rb +5 -1
  19. data/app/commands/decidim/invite_user.rb +1 -1
  20. data/app/controllers/concerns/decidim/participatory_space_context.rb +4 -1
  21. data/app/controllers/decidim/amendments_controller.rb +3 -3
  22. data/app/controllers/decidim/reports_controller.rb +6 -1
  23. data/app/forms/decidim/ephemeral_user_form.rb +1 -1
  24. data/app/forms/decidim/omniauth_registration_form.rb +1 -1
  25. data/app/forms/decidim/registration_form.rb +1 -1
  26. data/app/helpers/decidim/amendments_helper.rb +2 -1
  27. data/app/helpers/decidim/filters_helper.rb +25 -0
  28. data/app/helpers/decidim/layout_helper.rb +6 -0
  29. data/app/helpers/decidim/menu_helper.rb +2 -2
  30. data/app/helpers/decidim/paginate_helper.rb +1 -1
  31. data/app/helpers/decidim/tooltip_helper.rb +4 -1
  32. data/app/mailers/decidim/notifications_digest_mailer.rb +7 -1
  33. data/app/mailers/decidim/reported_mailer.rb +17 -2
  34. data/app/packs/images/decidim/default-avatar.svg +1 -1
  35. data/app/packs/src/decidim/callout.js +13 -8
  36. data/app/packs/src/decidim/confirm.js +15 -3
  37. data/app/packs/src/decidim/datepicker/generate_datepicker.js +2 -0
  38. data/app/packs/src/decidim/datepicker/generate_timepicker.js +2 -0
  39. data/app/packs/src/decidim/direct_uploads/upload_field.js +3 -4
  40. data/app/packs/src/decidim/direct_uploads/upload_modal.js +8 -9
  41. data/app/packs/src/decidim/dropdown_menu.js +18 -0
  42. data/app/packs/src/decidim/editor/common/suggestion.js +11 -1
  43. data/app/packs/src/decidim/index.js +1 -0
  44. data/app/packs/src/decidim/input_character_counter.js +1 -1
  45. data/app/packs/stylesheets/decidim/_activity.scss +4 -4
  46. data/app/packs/stylesheets/decidim/_cards.scss +4 -0
  47. data/app/packs/stylesheets/decidim/_filters.scss +1 -1
  48. data/app/packs/stylesheets/decidim/_header.scss +64 -37
  49. data/app/packs/stylesheets/decidim/_layout.scss +2 -2
  50. data/app/packs/stylesheets/decidim/_modal.scss +1 -5
  51. data/app/packs/stylesheets/decidim/_modal_update.scss +5 -1
  52. data/app/packs/stylesheets/decidim/resource_history.scss +14 -4
  53. data/app/permissions/decidim/default_permissions.rb +2 -0
  54. data/app/permissions/decidim/permissions.rb +13 -1
  55. data/app/presenters/decidim/notification_to_mailer_presenter.rb +7 -3
  56. data/app/queries/decidim/last_activity.rb +25 -0
  57. data/app/validators/translated_etiquette_validator.rb +2 -0
  58. data/app/views/decidim/errors/internal_server_error.html.erb +1 -1
  59. data/app/views/decidim/errors/not_found.html.erb +1 -1
  60. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +1 -2
  61. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  62. data/app/views/decidim/newsletters/unsubscribe.html.erb +16 -4
  63. data/app/views/decidim/reported_mailer/hidden_manually.html.erb +25 -0
  64. data/app/views/decidim/searches/_filters.html.erb +48 -13
  65. data/app/views/decidim/shared/_component_announcement.html.erb +1 -1
  66. data/app/views/decidim/shared/_confirm_modal.html.erb +3 -5
  67. data/app/views/decidim/shared/_filters.html.erb +6 -4
  68. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  69. data/app/views/kaminari/decidim/_page.html.erb +1 -1
  70. data/app/views/kaminari/decidim/_paginator.html.erb +1 -1
  71. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  72. data/app/views/layouts/decidim/footer/_main.html.erb +1 -1
  73. data/app/views/layouts/decidim/footer/_main_intro.html.erb +1 -1
  74. data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
  75. data/app/views/layouts/decidim/header/_main.html.erb +2 -2
  76. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +6 -0
  77. data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +2 -0
  78. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +1 -1
  79. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +5 -11
  80. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +5 -5
  81. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
  82. data/config/locales/ar.yml +0 -10
  83. data/config/locales/bg-BG.yml +2 -2
  84. data/config/locales/bg.yml +0 -12
  85. data/config/locales/ca-IT.yml +40 -6
  86. data/config/locales/ca.yml +40 -6
  87. data/config/locales/cs.yml +37 -17
  88. data/config/locales/de.yml +76 -29
  89. data/config/locales/el.yml +0 -11
  90. data/config/locales/en.yml +40 -6
  91. data/config/locales/es-MX.yml +41 -7
  92. data/config/locales/es-PY.yml +41 -7
  93. data/config/locales/es.yml +40 -6
  94. data/config/locales/eu.yml +82 -47
  95. data/config/locales/fi-plain.yml +65 -9
  96. data/config/locales/fi.yml +66 -10
  97. data/config/locales/fr-CA.yml +42 -13
  98. data/config/locales/fr-LU.yml +3 -3
  99. data/config/locales/fr.yml +42 -13
  100. data/config/locales/gl.yml +0 -8
  101. data/config/locales/hu.yml +0 -12
  102. data/config/locales/id-ID.yml +0 -8
  103. data/config/locales/is-IS.yml +0 -6
  104. data/config/locales/it.yml +165 -8
  105. data/config/locales/ja.yml +47 -14
  106. data/config/locales/lb-LU.yml +2 -2
  107. data/config/locales/lb.yml +0 -8
  108. data/config/locales/lt.yml +0 -12
  109. data/config/locales/lv.yml +0 -8
  110. data/config/locales/nl.yml +0 -8
  111. data/config/locales/no.yml +0 -8
  112. data/config/locales/pl.yml +0 -12
  113. data/config/locales/pt-BR.yml +0 -11
  114. data/config/locales/pt.yml +0 -8
  115. data/config/locales/ro-RO.yml +0 -18
  116. data/config/locales/ru.yml +0 -8
  117. data/config/locales/sk-SK.yml +3 -3
  118. data/config/locales/sk.yml +2 -8
  119. data/config/locales/sv.yml +63 -16
  120. data/config/locales/tr-TR.yml +0 -8
  121. data/config/locales/uk.yml +0 -7
  122. data/config/locales/zh-CN.yml +0 -8
  123. data/config/locales/zh-TW.yml +0 -12
  124. data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
  125. data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
  126. data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
  127. data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
  128. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  129. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +2 -1
  130. data/lib/decidim/core/test/factories.rb +14 -2
  131. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +4 -0
  132. data/lib/decidim/core/test/shared_examples/comments_examples.rb +7 -5
  133. data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -2
  134. data/lib/decidim/core/version.rb +1 -1
  135. data/lib/decidim/form_builder.rb +14 -0
  136. data/lib/decidim/nicknamizable.rb +6 -9
  137. data/lib/decidim/private_download_helper.rb +3 -3
  138. data/lib/tasks/upgrade/clean.rake +9 -1
  139. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +1 -1
  140. data/lib/tasks/upgrade/migrations.rake +2 -0
  141. metadata +9 -7
  142. /data/app/views/decidim/reported_mailer/{hide.html.erb → hidden_automatically.html.erb} +0 -0
@@ -0,0 +1,25 @@
1
+ <p class="email-greeting"><%= t(".hello", name: @user.name) %></p>
2
+
3
+ <p class="email-instructions">
4
+ <%= t(".report_html", url: reported_content_url, moderator: @moderator.name) %>
5
+ </p>
6
+
7
+ <p><b><%= t(".participatory_space") %></b></p>
8
+ <p><%= link_to translated_attribute(@participatory_space.title), resource_locator(@participatory_space).url %></p>
9
+
10
+ <p><b><%= t(".reason") %></b></p>
11
+ <p><%= t(@report.reason, organization_name: organization_name(@participatory_space.organization), scope: "decidim.shared.flag_modal") %></p>
12
+
13
+ <% if @report.details.present? %>
14
+ <p><b><%= t(".details") %></b></p>
15
+ <blockquote>
16
+ <%= @report.details %>
17
+ </blockquote>
18
+ <% end %>
19
+
20
+ <p><b><%= t(".content") %></b></p>
21
+ <%= reported_content_cell %>
22
+
23
+ <p class="email-button email-button__cta">
24
+ <%= link_to t(".manage_moderations"), manage_moderations_url %>
25
+ </p>
@@ -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>
@@ -1,7 +1,7 @@
1
1
  <% menu_id = "#{SecureRandom.uuid}_results_per_page_menu" %>
2
2
  <div class="flex items-center gap-1">
3
3
  <%= icon "list-check-2", class: "w-4 h-4 text-gray fill-current" %>
4
- <span class="text-gray-2"><%= t("decidim.shared.results_per_page.label") %></span>
4
+ <p class="text-gray-2"><%= t("decidim.shared.results_per_page.label") %></p>
5
5
 
6
6
  <details class="relative">
7
7
  <summary id="<%= menu_id %>-control" class="flex items-center cursor-pointer text-secondary font-semibold" aria-controls="<%= menu_id %>" aria-haspopup="menu" title="<%= t("decidim.shared.results_per_page.title") %>">
@@ -6,6 +6,6 @@
6
6
  total_pages: total number of pages
7
7
  per_page: number of items to fetch per page
8
8
  remote: data-remote -%>
9
- <li class="w-6 h-6 rounded-full hover:bg-background-3 transition<%= "mx-2 bg-background-3 grid place-items-center" if page.current? %>" <%== 'aria-current="page"' if page.current? %> data-page>
9
+ <li class="w-6 h-6 px-2 rounded-full hover:bg-background-3 transition min-w-fit <%= "bg-background-3 grid place-items-center" if page.current? %>" <%== 'aria-current="page"' if page.current? %> data-page>
10
10
  <%= link_to_unless page.current?, page, url, { class: "w-full h-full grid place-items-center", remote:, rel: page.rel, title: t("views.pagination.title") << page.to_s } %>
11
11
  </li>
@@ -8,7 +8,7 @@ paginator: the paginator that renders the pagination tags inside -%>
8
8
 
9
9
  <% if total_pages > 1 %>
10
10
  <nav aria-label="<%= t("views.pagination.pagination") %>">
11
- <ul class="flex items-center text-sm text-secondary" data-pages>
11
+ <ul class="flex flex-wrap items-center text-sm text-secondary gap-x-1" data-pages>
12
12
  <%= paginator.prev_page_tag unless current_page.first? %>
13
13
 
14
14
  <% paginator.each_page do |page| -%>
@@ -1,7 +1,7 @@
1
1
  <% if organization %>
2
- <%= link_to root_url, "aria-label": t("front_page_link", scope: "decidim.accessibility") do %>
2
+ <%= link_to root_url do %>
3
3
  <% if organization.logo.attached? %>
4
- <%= image_tag organization.attached_uploader(:logo).variant_url(:medium), alt: t("logo", scope: "decidim.accessibility", organization: current_organization_name) %>
4
+ <%= image_tag organization.attached_uploader(:logo).variant_url(:medium), alt: "#{current_organization_name} (#{t("decidim.errors.not_found.back_home")})" %>
5
5
  <% else %>
6
6
  <span><%= current_organization_name %></span>
7
7
  <% end %>
@@ -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,16 +1,10 @@
1
1
  <div id="<%= id %>" class="menu-bar__main-dropdown">
2
- <div class="menu-bar__main-dropdown__top">
3
- <div class="menu-bar__main-dropdown__top-left">
2
+ <div class="menu-bar__main-dropdown__left">
3
+ <div class="menu-bar__main-dropdown__left-top">
4
4
  <%= render partial: "layouts/decidim/header/menu_breadcrumb_main_dropdown_top_left" %>
5
5
  </div>
6
- <%= breadcrumb_root_menu.render %>
7
- </div>
8
- <div class="menu-bar__main-dropdown__bottom">
9
- <div class="menu-bar__main-dropdown__bottom-left">
10
- <%= cell("decidim/highlighted_participatory_process", menu_highlighted_participatory_process) %>
11
- </div>
12
- <div class="menu-bar__main-dropdown__bottom-right">
13
- <%= cell "decidim/content_blocks/menu_breadcrumb_last_activity", current_organization %>
14
- </div>
6
+ <%= cell("decidim/highlighted_participatory_process", menu_highlighted_participatory_process) %>
7
+ <%= cell "decidim/content_blocks/menu_breadcrumb_last_activity", current_organization %>
15
8
  </div>
9
+ <%= breadcrumb_root_menu.render %>
16
10
  </div>
@@ -1,12 +1,12 @@
1
1
  <% dropdown_item = breadcrumb_items.select { |item| item[:dropdown_cell].present? }.last %>
2
2
  <div class="menu-bar__breadcrumb-mobile__dropdown-trigger">
3
- <span>
4
- <% breadcrumb_items.last(2).each_with_index do |item, i| %>
5
- <% item_label = decidim_escape_translated(item[:label]).html_safe %>
6
- <% if i.positive? %>
3
+ <span class="inline-block w-full overflow-hidden text-ellipsis align-middle">
4
+ <% breadcrumb_items.last(2).each_with_index do |item, idx| %>
5
+ <% item_label = decidim_escape_translated(item[:label]) %>
6
+ <% if idx.positive? %>
7
7
  <span>/</span>
8
8
  <% end %>
9
- <span class="cursor-pointer <%= "truncate" if i.positive? %>" <%== 'aria-current="page"' if item[:active] %>>
9
+ <span class="cursor-pointer truncate" <%== 'aria-current="page"' if item[:active] %>>
10
10
  <% if item[:url].present? && !is_active_link?(item[:url], :exclusive) %>
11
11
  <%= link_to(item_label, item[:url]) %>
12
12
  <% else %>
@@ -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">
@@ -556,8 +556,6 @@ ar:
556
556
  ready: جاهز
557
557
  editor_images:
558
558
  drag_and_drop_help: يمكن إضافة صور عن طريق سحبها وإسقاطها أو لصقها.
559
- endorsement_buttons_cell:
560
- endorse: يعجبني
561
559
  endorsements:
562
560
  identities:
563
561
  done: تم
@@ -841,7 +839,6 @@ ar:
841
839
  reject_invitation: رفض
842
840
  group_members:
843
841
  actions:
844
- are_you_sure: هل أنت واثق؟
845
842
  promote_to_admin: جعل المشرف
846
843
  remove_from_group: إزالة المشارك
847
844
  index:
@@ -1030,10 +1027,8 @@ ar:
1030
1027
  unsubscribe:
1031
1028
  success: أنت غير مشترك بنجاح.
1032
1029
  token_error: انتهت صلاحية الرابط.
1033
- unsubscribe: إلغاء الاشتراك
1034
1030
  newsletters_opt_in_mailer:
1035
1031
  notify:
1036
- body_1: تزداد أهمية معالجة البيانات الشخصية وحمايتها بالنسبة لنا جميعًا. مع اللائحة العامة الجديدة لحماية البيانات (GDPR) المؤرخة 25 مايو 2018 ، أصبح للأفراد سيطرة أفضل على بياناتهم الشخصية. لهذا السبب نحتاج إلى "موافق" لمواصلة إرسال المعلومات ذات الصلة حول أنشطة %{organization_name}.
1037
1032
  body_2: 'كيف يمكنك أن تعطينا موافقتك؟ فقط انقر على الزر التالي:'
1038
1033
  body_3: مع هذه الموافقة ، ستتمكن من متابعة تلقي معلومات حول خدمات النظام الأساسي. على العكس من ذلك ، إذا لم نتلق تأكيدًا إيجابيًا من جانبك ، فسنوقف إرسال رسائلنا إليك. إذا أكدت رغبتك في أن تظل على اطلاع ، فسيكون لديك دائمًا خيار الإلغاء في أي وقت.
1039
1034
  button: نعم ، أرغب في متابعة تلقي المعلومات ذات الصلة
@@ -1157,11 +1152,6 @@ ar:
1157
1152
  message: الرسالة
1158
1153
  resend_email_confirmation_instructions: إعادة إرسال تعليمات تأكيد البريد الإلكتروني
1159
1154
  reported_mailer:
1160
- hide:
1161
- hello: مرحبا %{name}،
1162
- manage_moderations: إدارة التعديلات
1163
- report_html: <p>بعد <a href="%{url}">محتوى</a> تم إخفاء تلقائيا.</p>
1164
- subject: تم إخفاء المورد تلقائيًا
1165
1155
  report:
1166
1156
  authors: المؤلفون
1167
1157
  content: محتوى تم الإبلاغ عنه
@@ -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: Изпрати ми инструкции за възстановяване на паролата
@@ -640,8 +640,6 @@ bg:
640
640
  error: Грешка при качването на изображението.
641
641
  success: Изображението е качено успешно.
642
642
  drag_and_drop_help: Добавете изображения чрез плъзгане и пускане или поставяне (paste).
643
- endorsement_buttons_cell:
644
- endorse: Харесвам
645
643
  endorsements:
646
644
  identities:
647
645
  done: Готово
@@ -928,7 +926,6 @@ bg:
928
926
  title: Какви са значките?
929
927
  group_admins:
930
928
  actions:
931
- are_you_sure: Сигурни ли сте? Това няма да премахне участника от групата.
932
929
  demote_admin: Премахни администратор
933
930
  demote:
934
931
  error: Възникна проблем при премахването на този участник от списъка с администратори.
@@ -958,7 +955,6 @@ bg:
958
955
  error: Възникна проблем при приемането на заявката за присъединяване.
959
956
  success: Заявката за присъединяване е приета успешно.
960
957
  actions:
961
- are_you_sure: Сигурни ли сте?
962
958
  promote_to_admin: Направи администратор
963
959
  remove_from_group: Премахни участник
964
960
  index:
@@ -1188,11 +1184,9 @@ bg:
1188
1184
  main_image: Основно изображение
1189
1185
  newsletters:
1190
1186
  unsubscribe:
1191
- check_subscription: За да зададете предпочитанията си, отидете в страницата <a href="%{link}" target="_blank">настройки</a>.
1192
1187
  error: Възникна проблем при прекратяването на абонамента.
1193
1188
  success: Отписахте се успешно.
1194
1189
  token_error: Срокът на връзката е изтекъл.
1195
- unsubscribe: Отписване
1196
1190
  newsletters_opt_in:
1197
1191
  unauthorized: Съжаляваме, този линк вече не е активен.
1198
1192
  update:
@@ -1200,7 +1194,6 @@ bg:
1200
1194
  success: Настройките за бюлетина са успешно обновени.
1201
1195
  newsletters_opt_in_mailer:
1202
1196
  notify:
1203
- body_1: Обработката на личните данни и тяхната защита стават все по-важни за всички нас. С новия Общ регламент за защита на данните (GDPR) от 25 май 2018 г. лицата имат по-добър контрол върху личните си данни. Поради тази причина се нуждаем от вашето съгласие, за да продължим да изпращаме подходяща информация за дейностите на %{organization_name}.
1204
1197
  body_2: 'Как можете да ни дадете своето съгласие? Просто щракнете върху следния бутон:'
1205
1198
  body_3: С това съгласие ще продължите да получавате информация за дейностите в платформата. Ако не получим потвърждение от Ваша страна, ще спрем да ви изпращаме нашите съобщения. Дори да потвърдите, че желаете да бъдете информирани, винаги ще имате възможност да се откажете по всяко време.
1206
1199
  button: Да, желая да продължа да получавам подбрана информация
@@ -1356,11 +1349,6 @@ bg:
1356
1349
  confirmation_instructions_sent: Изпратени са инструкции за потвърждение по имейл.
1357
1350
  fill_in_email_to_confirm_it: Моля, попълнете електронната поща на групата си, за да я потвърдите.
1358
1351
  reported_mailer:
1359
- hide:
1360
- hello: Здравейте %{name},
1361
- manage_moderations: Управлявай модераторите
1362
- report_html: <p>Следното <a href="%{url}">съдържание</a> е скрито автоматично.</p>
1363
- subject: Ресурсът е скрит автоматично
1364
1352
  report:
1365
1353
  authors: Автори
1366
1354
  content: Докладвано съдържание
@@ -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
@@ -1728,7 +1745,7 @@ ca-IT:
1728
1745
  confirmation_instructions_sent: Instruccions de confirmació enviades per correu electrònic.
1729
1746
  fill_in_email_to_confirm_it: Si us plau, omple el correu electrònic del teu grup per confirmar-lo.
1730
1747
  reported_mailer:
1731
- hide:
1748
+ hidden_automatically:
1732
1749
  content: Contingut reportat
1733
1750
  details: Detalls
1734
1751
  hello: Hola %{name},
@@ -1737,6 +1754,15 @@ ca-IT:
1737
1754
  reason: Motiu
1738
1755
  report_html: <p>El següent <a href="%{url}">contingut</a> s'ha ocultat automàticament.</p>
1739
1756
  subject: Un contingut s'ha ocultat automàticament
1757
+ hidden_manually:
1758
+ content: Contingut reportat
1759
+ details: Detalls
1760
+ hello: Hola %{name},
1761
+ manage_moderations: Gestiona moderacions
1762
+ participatory_space: Espai de participació
1763
+ reason: Motiu
1764
+ report_html: <p>El següent <a href="%{url}">contingut</a> s'ha ocultat automàticament per %{moderator}.</p>
1765
+ subject: Un recurs ha estat amagat per %{moderator}
1740
1766
  report:
1741
1767
  authors: Autores
1742
1768
  content: Contingut reportat
@@ -1754,6 +1780,8 @@ ca-IT:
1754
1780
  create:
1755
1781
  error: Hi ha hagut un problema en crear l'informe d'error. Si us plau, torna-ho a provar.
1756
1782
  success: El contingut s'ha denunciat amb èxit i serà revisat per una administradora.
1783
+ hide:
1784
+ success: Aquest recurs s'ha amagat.
1757
1785
  parent_hidden:
1758
1786
  report_details: El recurs principal estava amagat
1759
1787
  resource:
@@ -1772,6 +1800,7 @@ ca-IT:
1772
1800
  searches:
1773
1801
  filters:
1774
1802
  jump_to: 'Salta a:'
1803
+ resource: "%{label} entre %{collection}"
1775
1804
  search: Cercar
1776
1805
  state:
1777
1806
  active: Actiu
@@ -2246,14 +2275,17 @@ ca-IT:
2246
2275
  edit: Edita
2247
2276
  footer:
2248
2277
  cc_by_license: Amb llicència Creative Commons
2278
+ current_organization_img: "%{organization} (Anar a la pàgina d'inici)"
2249
2279
  data_consent_settings: Configuració de les galetes
2250
2280
  decidim_logo: Logo Decidim
2251
2281
  decidim_title: Decidim
2282
+ help: Ajuda
2252
2283
  log_in: Entra
2253
2284
  made_with_open_source: Web creada amb <a target="_blank" href="https://github.com/decidim/decidim">programari lliure</a>.
2254
2285
  open_data: Dades obertes
2255
2286
  resources: Recursos
2256
2287
  sign_up: Crea un compte
2288
+ social_media: Xarxes socials
2257
2289
  terms_of_service: Termes i condicions d'ús
2258
2290
  header:
2259
2291
  close: Tancar
@@ -2295,6 +2327,8 @@ ca-IT:
2295
2327
  profile: El meu compte
2296
2328
  public_profile: El meu perfil públic
2297
2329
  title: Enllaços del perfil
2330
+ unread_conversations: Tens converses sense llegir
2331
+ unread_notifications: Tens notificacions sense llegir
2298
2332
  user_profile:
2299
2333
  account: Compte
2300
2334
  authorizations: Autoritzacions