decidim-core 0.29.1 → 0.29.3

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/activity_cell.rb +0 -3
  3. data/app/cells/decidim/author/show.erb +5 -4
  4. data/app/cells/decidim/author_cell.rb +26 -0
  5. data/app/cells/decidim/card_s/show.erb +5 -3
  6. data/app/cells/decidim/diff_cell.rb +4 -0
  7. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +1 -1
  8. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +5 -3
  9. data/app/cells/decidim/profile_actions/show.erb +1 -1
  10. data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
  11. data/app/cells/decidim/report_button/flag_modal.erb +13 -27
  12. data/app/cells/decidim/report_button_cell.rb +2 -8
  13. data/app/cells/decidim/report_user_button/already_reported_modal.erb +11 -0
  14. data/app/cells/decidim/report_user_button/flag_modal.erb +46 -0
  15. data/app/cells/decidim/report_user_button/show.erb +2 -0
  16. data/app/cells/decidim/report_user_button_cell.rb +59 -0
  17. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  18. data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
  19. data/app/cells/decidim/translation_bar/show.erb +2 -2
  20. data/app/cells/decidim/translation_bar_cell.rb +1 -1
  21. data/app/cells/decidim/user_activity/show.erb +1 -1
  22. data/app/commands/decidim/create_omniauth_registration.rb +14 -8
  23. data/app/commands/decidim/create_report.rb +1 -6
  24. data/app/commands/decidim/destroy_account.rb +3 -0
  25. data/app/commands/decidim/search.rb +14 -0
  26. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
  27. data/app/controllers/decidim/links_controller.rb +1 -1
  28. data/app/controllers/decidim/profiles_controller.rb +6 -2
  29. data/app/controllers/decidim/reports_controller.rb +1 -1
  30. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  31. data/app/forms/decidim/account_form.rb +5 -2
  32. data/app/helpers/concerns/decidim/user_role_checker.rb +46 -0
  33. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  34. data/app/helpers/decidim/map_helper.rb +6 -1
  35. data/app/helpers/decidim/orders_helper.rb +2 -1
  36. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  37. data/app/helpers/decidim/sanitize_helper.rb +11 -2
  38. data/app/jobs/decidim/hide_child_resources_job.rb +24 -0
  39. data/app/mailers/decidim/reported_mailer.rb +1 -0
  40. data/app/models/decidim/action_log.rb +1 -9
  41. data/app/models/decidim/attachment.rb +1 -1
  42. data/app/models/decidim/report.rb +1 -1
  43. data/app/models/decidim/user.rb +0 -4
  44. data/app/models/decidim/user_base_entity.rb +4 -0
  45. data/app/packs/src/decidim/append_redirect_url_to_modals.js +14 -6
  46. data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
  47. data/app/packs/src/decidim/direct_uploads/upload_field.js +21 -8
  48. data/app/packs/src/decidim/index.js +5 -0
  49. data/app/packs/src/decidim/map/provider/here.js +1 -1
  50. data/app/packs/src/decidim/remote_tooltips.js +38 -0
  51. data/app/packs/src/decidim/toggle.js +1 -1
  52. data/app/packs/src/decidim/tooltips.js +42 -22
  53. data/app/packs/stylesheets/decidim/_content_blocks.scss +4 -0
  54. data/app/packs/stylesheets/decidim/_hashtags.scss +5 -0
  55. data/app/packs/stylesheets/decidim/_header.scss +11 -5
  56. data/app/packs/stylesheets/decidim/_labels.scss +1 -1
  57. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  58. data/app/packs/stylesheets/decidim/_progress-bar.scss +1 -1
  59. data/app/packs/stylesheets/decidim/application.scss +1 -0
  60. data/app/packs/stylesheets/decidim/legacy/conference-diploma.scss +2 -1
  61. data/app/presenters/decidim/attachment_presenter.rb +1 -1
  62. data/app/presenters/decidim/log/user_presenter.rb +1 -0
  63. data/app/presenters/decidim/user_presenter.rb +1 -1
  64. data/app/services/decidim/base_diff_renderer.rb +28 -2
  65. data/app/services/decidim/email_notification_generator.rb +14 -5
  66. data/app/services/decidim/static_map_generator.rb +1 -1
  67. data/app/views/decidim/last_activities/index.html.erb +1 -1
  68. data/app/views/decidim/pages/_tabbed.html.erb +2 -2
  69. data/app/views/decidim/reported_mailer/hide.html.erb +17 -1
  70. data/app/views/decidim/reported_mailer/report.html.erb +1 -1
  71. data/app/views/decidim/searches/_count.html.erb +1 -1
  72. data/app/views/decidim/searches/_filters.html.erb +40 -38
  73. data/app/views/decidim/shared/_orders.html.erb +2 -2
  74. data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
  75. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  76. data/config/locales/ar.yml +56 -27
  77. data/config/locales/bg.yml +10 -24
  78. data/config/locales/bn-BD.yml +1 -0
  79. data/config/locales/bs-BA.yml +100 -0
  80. data/config/locales/ca-IT.yml +2111 -0
  81. data/config/locales/ca.yml +70 -38
  82. data/config/locales/cs.yml +60 -32
  83. data/config/locales/de.yml +66 -38
  84. data/config/locales/el.yml +17 -15
  85. data/config/locales/en.yml +48 -16
  86. data/config/locales/eo.yml +2 -0
  87. data/config/locales/es-MX.yml +61 -29
  88. data/config/locales/es-PY.yml +66 -34
  89. data/config/locales/es.yml +71 -39
  90. data/config/locales/eu.yml +303 -261
  91. data/config/locales/fi-plain.yml +48 -28
  92. data/config/locales/fi.yml +85 -65
  93. data/config/locales/fr-CA.yml +64 -27
  94. data/config/locales/fr.yml +62 -25
  95. data/config/locales/ga-IE.yml +13 -4
  96. data/config/locales/gl.yml +33 -15
  97. data/config/locales/hu.yml +12 -26
  98. data/config/locales/id-ID.yml +32 -16
  99. data/config/locales/is-IS.yml +18 -2
  100. data/config/locales/it.yml +54 -27
  101. data/config/locales/ja.yml +70 -38
  102. data/config/locales/lb.yml +33 -22
  103. data/config/locales/lt.yml +10 -18
  104. data/config/locales/lv.yml +26 -15
  105. data/config/locales/nl.yml +33 -19
  106. data/config/locales/no.yml +27 -16
  107. data/config/locales/pl.yml +8 -22
  108. data/config/locales/pt-BR.yml +13 -25
  109. data/config/locales/pt.yml +32 -16
  110. data/config/locales/ro-RO.yml +500 -220
  111. data/config/locales/ru.yml +31 -8
  112. data/config/locales/sk.yml +38 -19
  113. data/config/locales/sl.yml +4 -0
  114. data/config/locales/sr-CS.yml +2 -0
  115. data/config/locales/sv.yml +29 -33
  116. data/config/locales/tr-TR.yml +34 -24
  117. data/config/locales/uk.yml +20 -3
  118. data/config/locales/zh-CN.yml +27 -15
  119. data/config/locales/zh-TW.yml +16 -16
  120. data/config/routes.rb +1 -0
  121. data/decidim-core.gemspec +4 -1
  122. data/lib/decidim/api/functions/component_list.rb +1 -1
  123. data/lib/decidim/api/functions/participatory_space_finder_base.rb +11 -1
  124. data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -1
  125. data/lib/decidim/api/types/component_type.rb +7 -0
  126. data/lib/decidim/api/types/user_group_type.rb +4 -0
  127. data/lib/decidim/api/types/user_type.rb +4 -0
  128. data/lib/decidim/asset_router/storage.rb +7 -2
  129. data/lib/decidim/attributes/rich_text.rb +38 -0
  130. data/lib/decidim/attributes/time_with_zone.rb +16 -2
  131. data/lib/decidim/attributes.rb +2 -0
  132. data/lib/decidim/content_parsers/blob_parser.rb +95 -0
  133. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  134. data/lib/decidim/content_parsers.rb +1 -0
  135. data/lib/decidim/content_renderers/blob_renderer.rb +90 -0
  136. data/lib/decidim/content_renderers.rb +1 -0
  137. data/lib/decidim/core/engine.rb +29 -1
  138. data/lib/decidim/core/test/factories.rb +28 -0
  139. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +1 -1
  140. data/lib/decidim/core/test/shared_examples/comments_examples.rb +15 -2
  141. data/lib/decidim/core/test/shared_examples/reports_examples.rb +48 -6
  142. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +32 -0
  143. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +26 -0
  144. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +26 -0
  145. data/lib/decidim/core/version.rb +1 -1
  146. data/lib/decidim/diffy_extension.rb +18 -0
  147. data/lib/decidim/form_builder.rb +1 -1
  148. data/lib/decidim/map/autocomplete.rb +1 -0
  149. data/lib/decidim/map/provider/dynamic_map/here.rb +1 -40
  150. data/lib/decidim/map/provider/static_map/here.rb +34 -0
  151. data/lib/decidim/moderation_tools.rb +16 -2
  152. data/lib/decidim/nicknamizable.rb +1 -1
  153. data/lib/decidim/participatory_space_user.rb +4 -0
  154. data/lib/decidim/query_extensions.rb +0 -26
  155. data/lib/decidim/reportable.rb +6 -2
  156. data/lib/decidim/settings_manifest.rb +2 -0
  157. data/lib/decidim/translatable_attributes.rb +10 -1
  158. data/lib/tasks/upgrade/clean_hidden_resources.rake +33 -0
  159. data/lib/tasks/upgrade/decidim_fix_categorization.rake +34 -8
  160. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +23 -20
  161. metadata +37 -15
  162. data/app/cells/decidim/author/flag.erb +0 -6
  163. data/app/cells/decidim/author/flag_user.erb +0 -14
  164. data/app/cells/decidim/flag_modal/flag_user.erb +0 -34
  165. data/app/cells/decidim/flag_modal/show.erb +0 -52
  166. data/app/cells/decidim/flag_modal_cell.rb +0 -56
  167. data/app/cells/decidim/profile_sidebar/show.erb +0 -167
  168. data/app/cells/decidim/profile_sidebar_cell.rb +0 -68
  169. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +0 -212
@@ -46,6 +46,7 @@ module Decidim
46
46
  # Returns an HTML-safe String.
47
47
  def present_user
48
48
  return h.content_tag(:span, present_user_name, class: "logs__log__author") if user.blank?
49
+ return I18n.t("decidim.profile.deleted") if user.respond_to?(:deleted?) && user.deleted?
49
50
 
50
51
  h.link_to(
51
52
  present_user_name,
@@ -37,7 +37,7 @@ module Decidim
37
37
  return default_avatar_url if __getobj__.blocked?
38
38
  return default_avatar_url unless avatar.attached?
39
39
 
40
- avatar.path(variant:)
40
+ avatar.url(variant:)
41
41
  end
42
42
 
43
43
  def default_avatar_url
@@ -41,7 +41,9 @@ module Decidim
41
41
  end
42
42
 
43
43
  def parse_i18n_changeset(attribute, values, type, diff)
44
- values.last.keys.each do |locale, _value|
44
+ return diff unless values.last.is_a?(Hash)
45
+
46
+ (values.last.keys - ["machine_translations"]).each do |locale, _value|
45
47
  first_value = values.first.try(:[], locale)
46
48
  last_value = values.last.try(:[], locale)
47
49
  next if first_value == last_value
@@ -56,6 +58,27 @@ module Decidim
56
58
  }
57
59
  )
58
60
  end
61
+
62
+ return diff unless values.last.has_key?("machine_translations")
63
+
64
+ values.last.fetch("machine_translations").each_key do |locale, _value|
65
+ next unless I18n.available_locales.include?(locale.to_sym)
66
+
67
+ first_value = values.first.try(:[], "machine_translations").try(:[], locale)
68
+ last_value = values.last.try(:[], "machine_translations").try(:[], locale)
69
+
70
+ attribute_locale = :"#{attribute}_machine_translations_#{locale}"
71
+
72
+ diff.update(
73
+ attribute_locale => {
74
+ type:,
75
+ label: generate_i18n_label(attribute, locale, "decidim.machine_translations.automatic"),
76
+ old_value: first_value,
77
+ new_value: last_value
78
+ }
79
+ )
80
+ end
81
+
59
82
  diff
60
83
  end
61
84
 
@@ -108,7 +131,8 @@ module Decidim
108
131
  end
109
132
 
110
133
  # Returns a String.
111
- def generate_i18n_label(attribute, locale)
134
+ # i18n-tasks-use t("decidim.machine_translations.automatic")
135
+ def generate_i18n_label(attribute, locale, postfix = "")
112
136
  label = I18n.t(attribute, scope: i18n_scope)
113
137
  locale_name = if I18n.available_locales.include?(locale.to_sym)
114
138
  I18n.t("locale.name", locale:)
@@ -116,6 +140,8 @@ module Decidim
116
140
  locale
117
141
  end
118
142
 
143
+ locale_name = I18n.t(postfix, locale_name:, locale:) if postfix.present?
144
+
119
145
  "#{label} (#{locale_name})"
120
146
  end
121
147
 
@@ -36,20 +36,29 @@ module Decidim
36
36
  return unless resource
37
37
  return unless event_class.types.include?(:email)
38
38
 
39
- followers.each do |recipient|
40
- next unless ["all", "followed-only"].include?(recipient.notification_types)
39
+ send_to_followers
40
+ send_to_affected_users
41
+ end
41
42
 
42
- send_email_to(recipient, user_role: :follower)
43
- end
43
+ private
44
44
 
45
+ def send_to_affected_users
45
46
  affected_users.each do |recipient|
46
47
  next unless ["all", "own-only"].include?(recipient.notification_types)
48
+ next if recipient.deleted? || recipient.blocked?
47
49
 
48
50
  send_email_to(recipient, user_role: :affected_user)
49
51
  end
50
52
  end
51
53
 
52
- private
54
+ def send_to_followers
55
+ followers.each do |recipient|
56
+ next unless ["all", "followed-only"].include?(recipient.notification_types)
57
+ next if recipient.deleted? || recipient.blocked?
58
+
59
+ send_email_to(recipient, user_role: :follower)
60
+ end
61
+ end
53
62
 
54
63
  attr_reader :event, :event_class, :resource, :followers, :affected_users, :extra
55
64
 
@@ -15,7 +15,7 @@ module Decidim
15
15
  def data
16
16
  return if @resource.blank? || map_utility.nil?
17
17
 
18
- Rails.cache.fetch(@resource.cache_key) do
18
+ Rails.cache.fetch(@resource.cache_key_with_version) do
19
19
  map_utility.image_data(
20
20
  latitude: @resource.latitude,
21
21
  longitude: @resource.longitude,
@@ -5,7 +5,7 @@
5
5
  <h1 class="title-decorator my-12"><%= t("last_activity", scope: "decidim.last_activities.index") %></h1>
6
6
 
7
7
  <div class="profile__activity pb-16">
8
- <%= cell "decidim/resource_types_filter", resource_types, form_path: last_activities_path, filter_param_key: :with_resource_type, filter: %>
8
+ <%= cell "decidim/resource_types_filter", resource_types, source: :last_activities, filter_param_key: :with_resource_type %>
9
9
  <div id="activities">
10
10
  <%= render partial: "activities" %>
11
11
  </div>
@@ -10,7 +10,7 @@
10
10
  </header>
11
11
 
12
12
  <div class="vertical-tabs">
13
- <nav>
13
+ <nav role="navigation" aria-label="<%= I18n.t("layouts.decidim.navigation.aria_label", title: translated_attribute(page.title)) %>">
14
14
  <button id="dropdown-trigger-pages" data-component="dropdown" data-target="dropdown-menu-pages" data-open-md="true" data-auto-close="true">
15
15
  <span>
16
16
  <%= translated_attribute(page.title) %>
@@ -21,7 +21,7 @@
21
21
  <ul id="dropdown-menu-pages" class="vertical-tabs__list" role="menu">
22
22
  <% pages.each do |sibling| %>
23
23
  <li class="<%= "is-active" if page == sibling %>" role="menuitem">
24
- <%= link_to translated_attribute(sibling.title), page_path(sibling.slug) %>
24
+ <%= link_to translated_attribute(sibling.title), page_path(sibling.slug), "aria-current": (page == sibling).to_s %>
25
25
  </li>
26
26
  <% end %>
27
27
  </ul>
@@ -1,9 +1,25 @@
1
1
  <p class="email-greeting"><%= t(".hello", name: @user.name) %></p>
2
2
 
3
3
  <p class="email-instructions">
4
- <%= t(".report_html", url: reported_content_url ) %>
4
+ <%= t(".report_html", url: report_url ) %>
5
5
  </p>
6
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
+
7
23
  <p class="email-button email-button__cta">
8
24
  <%= link_to t(".manage_moderations"), manage_moderations_url %>
9
25
  </p>
@@ -1,7 +1,7 @@
1
1
  <p class="email-greeting"><%= t(".hello", name: @user.name) %></p>
2
2
 
3
3
  <p class="email-instructions">
4
- <%= t(".report_html", url: reported_content_url) %>
4
+ <%= t(".report_html", url: report_url) %>
5
5
  </p>
6
6
 
7
7
  <br>
@@ -15,6 +15,6 @@
15
15
  <% end %>
16
16
  </div>
17
17
 
18
- <h1 class="h3 decorator mb-10 md:my-10">
18
+ <h1 id="search-results-title" class="h3 decorator mb-10 md:my-10">
19
19
  <%= t("decidim.search.results_found_for_term", count: @results_count, term:) %>
20
20
  </h1>
@@ -1,44 +1,46 @@
1
- <div class="filter-container search__filter">
2
- <button id="dropdown-trigger-search" data-component="dropdown" data-target="dropdown-menu-search" data-auto-close="true">
3
- <%= content_tag :span, t("decidim.searches.filters_small_view.filter_by"), class: "#{"is-active" if params.dig(:filter, :with_resource_type) == nil}" %>
4
- <% @blocks.each do |elements| %>
5
- <% elements.each do |type, results| %>
6
- <%= content_tag :span, class: "#{"is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
7
- <span><%= searchable_resource_human_name(type) %></span>
1
+ <nav role="navigation" aria-labelledby="search-results-title">
2
+ <div class="filter-container search__filter">
3
+ <button id="dropdown-trigger-search" data-component="dropdown" data-target="dropdown-menu-search" data-auto-close="true">
4
+ <%= content_tag :span, t("decidim.searches.filters_small_view.filter_by"), class: "#{"is-active" if params.dig(:filter, :with_resource_type) == nil}" %>
5
+ <% @blocks.each do |elements| %>
6
+ <% elements.each do |type, results| %>
7
+ <%= content_tag :span, class: "#{"is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
8
+ <span><%= searchable_resource_human_name(type) %></span>
9
+ <% end %>
8
10
  <% end %>
9
11
  <% end %>
10
- <% end %>
11
- <%= icon "arrow-down-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
12
- <%= icon "arrow-up-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
13
- </button>
14
- <div id="dropdown-menu-search" aria-hidden="true">
15
- <div>
16
- <%= link_to main_search_path, class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == nil}" do %>
17
- <%= resource_type_icon("all") %>
18
- <span><%= t("all", scope: "decidim.searches.filters.state") %></span>
19
- <span class="label ml-auto"><%= @results_count %></span>
20
- <% end %>
21
- </div>
22
- <% @blocks.each do |elements| %>
12
+ <%= icon "arrow-down-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
13
+ <%= icon "arrow-up-s-line", class: "w-8 h-8 flex-none text-secondary fill-current" %>
14
+ </button>
15
+ <div id="dropdown-menu-search" aria-hidden="true">
23
16
  <div>
24
- <% elements.each do |type, results| %>
25
- <div>
26
- <% if results[:count].positive? %>
27
- <%= link_to search_path_by_resource_type(type), class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == type}" do %>
28
- <%= resource_type_icon(type) %>
29
- <span><%= searchable_resource_human_name(type) %></span>
30
- <span class="label ml-auto"><%= results[:count] %></span>
31
- <% end %>
32
- <% else %>
33
- <%= content_tag :div, class: "filter#{" is-empty" if results[:count].zero?}" do %>
34
- <%= resource_type_icon(type) %>
35
- <span><%= searchable_resource_human_name(type) %></span>
36
- <span class="label ml-auto"><%= results[:count] %></span>
37
- <% end %>
38
- <% end %>
39
- </div>
17
+ <%= link_to main_search_path, class: "filter#{" is-active" if params.dig(:filter, :with_resource_type) == nil}" do %>
18
+ <%= resource_type_icon("all") %>
19
+ <span><%= t("all", scope: "decidim.searches.filters.state") %></span>
20
+ <span class="label ml-auto"><%= @results_count %></span>
40
21
  <% end %>
41
22
  </div>
42
- <% end %>
23
+ <% @blocks.each do |elements| %>
24
+ <div>
25
+ <% elements.each do |type, results| %>
26
+ <div>
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 %>
29
+ <%= resource_type_icon(type) %>
30
+ <span><%= searchable_resource_human_name(type) %></span>
31
+ <span class="label ml-auto"><%= results[:count] %></span>
32
+ <% end %>
33
+ <% else %>
34
+ <%= content_tag :div, class: "filter#{" is-empty" if results[:count].zero?}" do %>
35
+ <%= resource_type_icon(type) %>
36
+ <span><%= searchable_resource_human_name(type) %></span>
37
+ <span class="label ml-auto"><%= results[:count] %></span>
38
+ <% end %>
39
+ <% end %>
40
+ </div>
41
+ <% end %>
42
+ </div>
43
+ <% end %>
44
+ </div>
43
45
  </div>
44
- </div>
46
+ </nav>
@@ -1,9 +1,9 @@
1
- <button class="order-by__button" id="dropdown-trigger-order" data-component="dropdown" data-target="dropdown-menu-order" data-open-md="true">
1
+ <button class="order-by__button <%= b_css_class if defined?(b_css_class) %>" id="dropdown-trigger-order" data-component="dropdown" data-target="dropdown-menu-order" data-open-md="true">
2
2
  <%= icon "arrow-down-s-line" %>
3
3
  <%= icon "arrow-up-s-line" %>
4
4
  <span><%= t("#{i18n_scope}.label") %></span>
5
5
  </button>
6
- <div id="dropdown-menu-order" class="order-by">
6
+ <div id="dropdown-menu-order" class="order-by <%= css_class if defined?(css_class) %>">
7
7
  <% orders.each do |order_name| %>
8
8
  <%= order_link order_name,
9
9
  i18n_scope:,
@@ -3,6 +3,6 @@
3
3
  <%= link_to t("layouts.decidim.footer.terms_of_service"), decidim.page_path("terms-of-service") %>
4
4
  </li>
5
5
  <li>
6
- <a href="#" data-dialog-open="dc-modal"><%= t("layouts.decidim.footer.data_consent_settings") %></a>
6
+ <a href="#" role="button" data-dialog-open="dc-modal"><%= t("layouts.decidim.footer.data_consent_settings") %></a>
7
7
  </li>
8
8
  </ul>
@@ -2,7 +2,7 @@
2
2
  <div class="menu-bar__breadcrumb-mobile__dropdown-trigger">
3
3
  <span>
4
4
  <% breadcrumb_items.last(2).each_with_index do |item, i| %>
5
- <% item_label = decidim_escape_translated(item[:label]) %>
5
+ <% item_label = decidim_escape_translated(item[:label]).html_safe %>
6
6
  <% if i.positive? %>
7
7
  <span>/</span>
8
8
  <% end %>
@@ -4,10 +4,18 @@ ar:
4
4
  attributes:
5
5
  account:
6
6
  delete_reason: سبب حذف حسابك
7
+ attachment:
8
+ documents: المستندات
9
+ photos: الصور
7
10
  common:
8
11
  created_at: تم إنشاؤها في
12
+ content_block_attachment:
13
+ background_image: صورة الخلفية
14
+ main_image: الصورة الرئيسية
9
15
  conversation:
10
16
  body: المحتوى
17
+ editor_image:
18
+ file: ملف
11
19
  group:
12
20
  about: عن
13
21
  avatar: الصورة الرمزية
@@ -16,12 +24,15 @@ ar:
16
24
  name: الإسم
17
25
  nickname: الاسم المستعار
18
26
  phone: الهاتف
27
+ import:
28
+ file: ملف
19
29
  message:
20
30
  body: المحتوى
21
31
  report:
22
32
  details: تعليقات إضافية
23
33
  user:
24
34
  about: عن
35
+ avatar: الصورة الرمزية
25
36
  email: بريدك الإلكتروني
26
37
  locale: اللغة
27
38
  name: اسمك
@@ -30,6 +41,8 @@ ar:
30
41
  password_confirmation: أكد كلمتك السرية
31
42
  personal_url: العنوان الشبكي الشخصي
32
43
  remove_avatar: إزالة الصورة الرمزية
44
+ user_group:
45
+ avatar: الصورة الرمزية
33
46
  models:
34
47
  decidim/attachment_created_event: المرفق
35
48
  decidim/component_published_event: العنصر النشط
@@ -91,6 +104,8 @@ ar:
91
104
  'false': 'لا'
92
105
  'true': 'نعم'
93
106
  date:
107
+ buttons:
108
+ select: تحديد
94
109
  formats:
95
110
  decidim_short: "%d/%m/%Y"
96
111
  decidim_short_with_month_name_short: "%d %b %Y"
@@ -282,6 +297,7 @@ ar:
282
297
  withdrawn: |-
283
298
  تم سحب هذا التعديل على %{amendable_type} %{amendable_link}
284
299
  من قبل المؤلف.
300
+ name: تعديل
285
301
  new:
286
302
  amendment_author: مؤلف التعديل
287
303
  send: إنشاء
@@ -454,6 +470,8 @@ ar:
454
470
  description: الوصف
455
471
  footer_sub_hero:
456
472
  name: تذييل البطل الفرعي راية
473
+ global_menu:
474
+ name: القائمة العامة
457
475
  hero_settings_form:
458
476
  background_image: الصورة الخلفية
459
477
  welcome_text: نص الترحيب
@@ -473,8 +491,12 @@ ar:
473
491
  name: النشاط الاخير
474
492
  title: النشاط الاخير
475
493
  view_all: عرض الكل
494
+ metadata:
495
+ name: البيانات الوصفية
476
496
  metrics:
477
497
  name: مقاييس المنظمة
498
+ participatory_space_metrics:
499
+ name: المشاركة في الأرقام
478
500
  participatory_space_stats:
479
501
  name: الإحصائيات
480
502
  social_networks_metadata:
@@ -493,6 +515,10 @@ ar:
493
515
  name: احصائيات المنظمة
494
516
  sub_hero:
495
517
  name: البطل الفرعي راية
518
+ core:
519
+ application_helper:
520
+ filter_category_values:
521
+ all: الكل
496
522
  devise:
497
523
  omniauth_registrations:
498
524
  new:
@@ -619,6 +645,11 @@ ar:
619
645
  email_outro: لقد تلقيت هذا الإشعار لأنك تتابع %{amendable_title}. يمكنك إيقاف تلقي الإخطارات باتباع الرابط السابق.
620
646
  email_subject: تم رفض التعديل لـ %{amendable_title} من %{emendation_author_nickname}
621
647
  notification_title: تم رفض التعديل <a href="%{emendation_path}"></a> تم إنشاؤه بواسطة <a href="%{emendation_author_path}">%{emendation_author_nickname}</a> لـ <a href="%{amendable_path}">%{amendable_title}</a>.
648
+ emendation_promoted:
649
+ follower:
650
+ email_intro: 'تم نشر تعديل لـ %{amendable_title}. يمكنك رؤيته من هذه الصفحة:'
651
+ email_outro: لقد تلقيت هذا الإشعار لأنك مؤلف %{amendable_title}.
652
+ email_subject: تم نشر تعديل من قبل %{emendation_author_nickname} كـ %{amendable_type} جديد
622
653
  attachments:
623
654
  attachment_created:
624
655
  email_intro: 'تمت إضافة مستند جديد إلى %{resource_title}. يمكنك أن ترى ذلك من هذه الصفحة:'
@@ -923,12 +954,12 @@ ar:
923
954
  conversation_mailer:
924
955
  comanagers_new_conversation:
925
956
  admin_in_group: تتلقى هذا لأنك مدير في %{group}.
926
- greeting: مرحباً، %{recipient}!
957
+ greeting: مرحبًا ، %{recipient}!
927
958
  intro: "بدأ %{manager} محادثة جديدة باسم %{group}. انقر هنا لرؤيتها:"
928
959
  subject: "بدأ %{manager} محادثة جديدة كـ %{group}"
929
960
  comanagers_new_message:
930
961
  admin_in_group: تتلقى هذا لأنك مدير في %{group}.
931
- greeting: مرحباً، %{recipient}!
962
+ greeting: مرحبًا ، %{recipient}!
932
963
  intro: "قام %{manager} بنشر رسائل جديدة في المحادثة ذات اسم %{group}. انقر هنا لرؤيتها:"
933
964
  subject: "%{manager} أرسل رسائل جديدة كـ %{group}"
934
965
  new_conversation:
@@ -937,12 +968,12 @@ ar:
937
968
  subject: "%{sender} بدأ محادثة معك"
938
969
  new_group_conversation:
939
970
  admin_in_group: تتلقى هذا لأنك مدير في %{group}.
940
- greeting: مرحباً، %{recipient}!
971
+ greeting: مرحبًا ، %{recipient}!
941
972
  intro: "بدأ %{sender} محادثة جديدة مع المجموعة %{group}. انقر هنا لرؤيتها:"
942
973
  subject: "بدأ %{sender} محادثة جديدة مع %{group}"
943
974
  new_group_message:
944
975
  admin_in_group: تتلقى هذا لأنك مدير في %{group}.
945
- greeting: مرحباً، %{recipient}!
976
+ greeting: مرحبًا ، %{recipient}!
946
977
  intro: "قام %{sender} بنشر رسائل جديدة في المحادثة مع المجوعة %{group}. انقر هنا لرؤيتها:"
947
978
  subject: "%{group} لديها رسائل جديدة من %{sender}"
948
979
  new_message:
@@ -976,6 +1007,8 @@ ar:
976
1007
  placeholder: رسالتك...
977
1008
  send: إرسال
978
1009
  metrics:
1010
+ blocked_users:
1011
+ description: عدد المشاركين المحظورين
979
1012
  download:
980
1013
  csv: تحميل البيانات (CSV)
981
1014
  followers:
@@ -985,11 +1018,15 @@ ar:
985
1018
  participants:
986
1019
  description: عدد المشاركين النشطين في المنظمة
987
1020
  object: المشاركين
988
- title: المشاركين
1021
+ title: المشاركون
1022
+ reported_users:
1023
+ description: عدد المشاركين المبلّغ عنهم
1024
+ user_reports:
1025
+ description: عدد التقارير التي قدمها المشاركون
989
1026
  users:
990
1027
  description: عدد المشاركين في المنظمة
991
1028
  object: المشاركين
992
- title: المشاركين
1029
+ title: المشاركون
993
1030
  newsletter_mailer:
994
1031
  newsletter:
995
1032
  no_reply_notice: تم إرسال هذا البريد الإلكتروني من عنوان بريد إلكتروني للإشعارات لا يستقبل لا بريد إلكتروني وارد. يرجى عدم الرد على هذه الرسالة.
@@ -1040,10 +1077,12 @@ ar:
1040
1077
  notifications_digest_mailer:
1041
1078
  header:
1042
1079
  daily: ملخص التنبيهات اليومية
1080
+ real_time: مزامنة آنيّة
1043
1081
  weekly: ملخص التنبيهات الأسبوعية
1044
1082
  hello: مرحبا %{name}،
1045
1083
  intro:
1046
1084
  daily: 'هذه هي إخطارات اليوم الأخير بناءً على النشاط الذي تتابعه:'
1085
+ real_time: 'هذا تنبيه عن النشاط الذي تتبعّه:'
1047
1086
  weekly: 'هذه هي إخطارات الأسبوع الأخير بناءً على النشاط الذي تتابعه:'
1048
1087
  outro: لقد تلقيت هذه الإشعارات لأنك تتبع هذا المحتوى أو مؤلفيه. يمكنك إلغاء متابعتها من صفحات كل منهم.
1049
1088
  see_more: عرض المزيد من الإشعارات
@@ -1122,35 +1161,25 @@ ar:
1122
1161
  conversations: محادثات
1123
1162
  followers: متابعون
1124
1163
  following: يتبع
1164
+ group_admins: إدارة المشرفين
1165
+ group_members: إدارة الأعضاء
1125
1166
  groups: المجموعات
1126
1167
  members: أفراد
1127
1168
  officialized: مشارك رسمي
1128
1169
  send_private_message: ارسال رسالة خاصة
1129
- sidebar:
1130
- badges:
1131
- info: يتم الحصول على الشارات من خلال أداء نشاط معين في النظام الأساسي.
1132
- title: شارات
1133
1170
  user:
1134
1171
  actions:
1135
1172
  create_user_group: إنشاء مجموعة
1136
1173
  edit_profile: تعديل الملف الشخصي
1137
- edit_user_group: تعديل الملف الشخصي للمجموعة
1174
+ edit_user_group: تحرير ملف تعريف المجموعة
1138
1175
  invite_user: دعوة مشارك
1139
- join_user_group: طلب الانضمام للمجموعة
1140
- leave_user_group: مغادرة الفريق
1176
+ join_user_group: طلب الانضمام إلى المجموعة
1177
+ leave_user_group: غادر المجموعة
1141
1178
  manage_user_group: إدارة الفريق
1142
- manage_user_group_admins: إدارة المدراء
1143
- manage_user_group_users: إدارة الاعضاء
1179
+ manage_user_group_admins: إدارة المشرفين
1180
+ manage_user_group_users: إدارة الأعضاء
1144
1181
  message: الرسالة
1145
- create_user_group: إنشاء مجموعة
1146
- edit_profile: تعديل الملف الشخصي
1147
- edit_user_group: تحرير ملف تعريف المجموعة
1148
- invite_user: دعوة مشارك
1149
- join_user_group: طلب الانضمام إلى المجموعة
1150
- leave_user_group: غادر المجموعة
1151
- manage_user_group_admins: إدارة المشرفين
1152
- manage_user_group_users: إدارة الأعضاء
1153
- resend_email_confirmation_instructions: إعادة إرسال تعليمات تأكيد البريد الإلكتروني
1182
+ resend_email_confirmation_instructions: إعادة إرسال تعليمات تأكيد البريد الإلكتروني
1154
1183
  reported_mailer:
1155
1184
  hide:
1156
1185
  hello: مرحبا %{name}،
@@ -1237,12 +1266,9 @@ ar:
1237
1266
  title: الإبلاغ عن مشكلة
1238
1267
  flag_user_modal:
1239
1268
  already_reported: تم الإبلاغ عن هذا المحتوى وسيتم مراجعته من قبل مدير.
1240
- close: إغلاق
1241
- description: ما هو الأمر الغير مناسب بخصوص هذا المستخدم؟
1242
1269
  offensive: يتضمن العنصرية أو التحيز الجنسي أو الشتائم أو الهجمات الشخصية أو التهديد بالقتل أو طلبات الانتحار أو أي شكل من أشكال خطاب الكراهية.
1243
1270
  report: إبلاغ
1244
1271
  spam: يحتوي على طعم النقر(clickbaiting) أو إعلان، أو احتيال، أو روبوتات سكريبتة.
1245
- title: الإبلاغ عن مستخدم مخل
1246
1272
  floating_help:
1247
1273
  help: المساعدة
1248
1274
  login_modal:
@@ -1252,6 +1278,7 @@ ar:
1252
1278
  participatory_space_filters:
1253
1279
  filters:
1254
1280
  areas: المناطق
1281
+ scope: نطاق
1255
1282
  select_an_area: اختر المنطقة
1256
1283
  public_participation:
1257
1284
  public_participation: إبراز حضوري علنا
@@ -1664,6 +1691,8 @@ ar:
1664
1691
  whatsapp_web: واتساب
1665
1692
  xing: شينغ
1666
1693
  time:
1694
+ buttons:
1695
+ select: تحديد
1667
1696
  formats:
1668
1697
  day_of_month: "%b %d"
1669
1698
  day_of_week: "%a"
@@ -33,6 +33,8 @@ bg:
33
33
  personal_url: Персонален URL
34
34
  remove_avatar: Премахни аватара
35
35
  tos_agreement: Споразумение за условия на услугата
36
+ user_group:
37
+ avatar: Аватар
36
38
  models:
37
39
  decidim/attachment_created_event: Прикачени файлове
38
40
  decidim/component_published_event: Активен компонент
@@ -91,7 +93,7 @@ bg:
91
93
  decidim_with_month_name_short: "%d %b"
92
94
  help:
93
95
  date_format: 'Формат: дд/мм/гггг'
94
- order: д-м-г
96
+ order: d-m-y
95
97
  separator: "/"
96
98
  datetime:
97
99
  distance_in_words:
@@ -546,7 +548,7 @@ bg:
546
548
  metrics:
547
549
  name: Показатели за организацията
548
550
  participatory_space_metrics:
549
- name: Метрики
551
+ name: Индикатори
550
552
  participatory_space_stats:
551
553
  name: Статистики
552
554
  social_networks_metadata:
@@ -1359,41 +1361,28 @@ bg:
1359
1361
  conversations: Разговори
1360
1362
  followers: Последователи
1361
1363
  following: Следванния
1362
- group_admins: Управление на администраторите
1363
- group_members: Управление на членовете
1364
+ group_admins: Управлявай администраторите
1365
+ group_members: Управллявай членовете
1364
1366
  groups: Групи
1365
1367
  members: Членове
1366
1368
  officialized: Официален участник
1367
1369
  send_private_message: Изпрати лично съобщение
1368
- sidebar:
1369
- badges:
1370
- info: Значките се заслужват чрез извършване на конкретна дейност в платформата.
1371
- title: Значки
1372
1370
  user:
1373
1371
  actions:
1374
- create_user_group: Създаване на група
1372
+ create_user_group: Създай група
1375
1373
  disabled_message: Съобщение
1376
1374
  edit_profile: Редактиране на профил
1377
- edit_user_group: Редактиране на профила на групата
1375
+ edit_user_group: Редактиране профил на група
1378
1376
  invite_user: Покани участник
1379
1377
  join_user_group: Заявка за присъединяване към група
1380
1378
  leave_user_group: Напусни на групата
1381
1379
  manage_user_group: Управление на групата
1382
- manage_user_group_admins: Управление на администраторите
1383
- manage_user_group_users: Управление на членовете
1380
+ manage_user_group_admins: Управлявай администраторите
1381
+ manage_user_group_users: Управллявай членовете
1384
1382
  message: Съобщение
1385
1383
  resend_email_confirmation_instructions: Изпрати отново инструкции за потвърждение
1386
1384
  confirmation_instructions_sent: Изпратени са инструкции за потвърждение по имейл.
1387
- create_user_group: Създай група
1388
- edit_profile: Редактиране на профил
1389
- edit_user_group: Редактиране профил на група
1390
1385
  fill_in_email_to_confirm_it: Моля, попълнете електронната поща на групата си, за да я потвърдите.
1391
- invite_user: Покани участник
1392
- join_user_group: Заявка за присъединяване към група
1393
- leave_user_group: Напусни на групата
1394
- manage_user_group_admins: Управлявай администраторите
1395
- manage_user_group_users: Управлявай членовете
1396
- resend_email_confirmation_instructions: Изпрати отново инструкции за потвърждение
1397
1386
  reported_mailer:
1398
1387
  hide:
1399
1388
  hello: Здравейте %{name},
@@ -1485,14 +1474,11 @@ bg:
1485
1474
  flag_user_modal:
1486
1475
  already_reported: Това съдържание вече е докладвано и ще бъде прегледано от администратор.
1487
1476
  block: Блокирай този участник
1488
- close: Затвори
1489
- description: Какво е неприемливо при този потребител?
1490
1477
  does_not_belong: Съдържа незаконна дейност, заплахи за самоубийство, лична информация или нещо друго, което смятате, че не принадлежи на %{organization_name}.
1491
1478
  hide: Скрийте цялото им съдържание
1492
1479
  offensive: Съдържа расизъм, сексизъм, злословия, лични атаки, заплахи за смърт, заявки за самоубийство или всякаква форма на омраза.
1493
1480
  report: Доклад
1494
1481
  spam: Съдържа примамка за кликване, реклама, измами или скриптове.
1495
- title: Докладвайте за неподходящ потребител
1496
1482
  floating_help:
1497
1483
  help: Помощ
1498
1484
  follow_button:
@@ -0,0 +1 @@
1
+ bn: