decidim-core 0.29.4 → 0.30.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. checksums.yaml +4 -4
  2. data/app/cells/decidim/address/show.erb +3 -3
  3. data/app/cells/decidim/amendable/amend_button_card/show.erb +6 -4
  4. data/app/cells/decidim/amendable/amend_button_card_cell.rb +8 -0
  5. data/app/cells/decidim/amendable/amendments/show.erb +1 -1
  6. data/app/cells/decidim/amendable/promote_button_card/show.erb +2 -0
  7. data/app/cells/decidim/author/flag.erb +6 -0
  8. data/app/cells/decidim/author/flag_user.erb +14 -0
  9. data/app/cells/decidim/author/show.erb +4 -2
  10. data/app/cells/decidim/author_cell.rb +1 -1
  11. data/app/cells/decidim/card_l/extra_data.erb +1 -0
  12. data/app/cells/decidim/card_metadata_cell.rb +9 -16
  13. data/app/cells/decidim/comments_button_cell.rb +14 -2
  14. data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +2 -0
  15. data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +1 -1
  16. data/app/cells/decidim/content_blocks/participatory_space_extra_data/extra_data.erb +2 -2
  17. data/app/cells/decidim/endorsement_block/show.erb +0 -1
  18. data/app/cells/decidim/endorsement_block_cell.rb +6 -0
  19. data/app/cells/decidim/endorsement_buttons/button_content.erb +1 -1
  20. data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +1 -1
  21. data/app/cells/decidim/endorsement_buttons/show.erb +7 -7
  22. data/app/cells/decidim/endorsement_buttons/verification_modal.erb +4 -2
  23. data/app/cells/decidim/endorsers_list/empty.erb +3 -0
  24. data/app/cells/decidim/endorsers_list/full.erb +17 -5
  25. data/app/cells/decidim/endorsers_list/show.erb +19 -10
  26. data/app/cells/decidim/endorsers_list_cell.rb +19 -6
  27. data/app/cells/decidim/flag_modal/flag_user.erb +34 -0
  28. data/app/cells/decidim/flag_modal/show.erb +52 -0
  29. data/app/cells/decidim/flag_modal_cell.rb +56 -0
  30. data/app/cells/decidim/follow_button/show.erb +1 -2
  31. data/app/cells/decidim/follow_button_cell.rb +5 -0
  32. data/app/cells/decidim/map/show.erb +3 -0
  33. data/app/cells/decidim/map/template.erb +14 -0
  34. data/app/cells/decidim/map_cell.rb +39 -0
  35. data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
  36. data/app/cells/decidim/onboarding_action_message/show.erb +15 -0
  37. data/app/cells/decidim/onboarding_action_message_cell.rb +81 -0
  38. data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +4 -4
  39. data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +3 -5
  40. data/app/cells/decidim/participatory_space_private_user/show.erb +23 -0
  41. data/app/cells/decidim/participatory_space_private_user_cell.rb +21 -0
  42. data/app/cells/decidim/profile_actions/show.erb +1 -1
  43. data/app/cells/decidim/profile_sidebar/show.erb +167 -0
  44. data/app/cells/decidim/profile_sidebar_cell.rb +68 -0
  45. data/app/cells/decidim/progress_bar/show.erb +2 -2
  46. data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
  47. data/app/cells/decidim/report_button/flag_modal.erb +27 -13
  48. data/app/cells/decidim/report_button_cell.rb +9 -2
  49. data/app/cells/decidim/resource_history/show.erb +20 -0
  50. data/app/cells/decidim/resource_history_cell.rb +66 -0
  51. data/app/cells/decidim/resource_types_filter/show.erb +1 -1
  52. data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
  53. data/app/cells/decidim/share_button_cell.rb +0 -4
  54. data/app/cells/decidim/share_widget/modal.erb +26 -0
  55. data/app/cells/decidim/share_widget/show.erb +2 -0
  56. data/app/cells/decidim/share_widget_cell.rb +20 -0
  57. data/app/cells/decidim/tags/show.erb +7 -4
  58. data/app/cells/decidim/tags_cell.rb +11 -72
  59. data/app/cells/decidim/user_activity/show.erb +1 -1
  60. data/app/commands/decidim/amendable/create_draft.rb +2 -2
  61. data/app/commands/decidim/create_ephemeral_user.rb +52 -0
  62. data/app/commands/decidim/create_omniauth_registration.rb +21 -17
  63. data/app/commands/decidim/create_report.rb +8 -11
  64. data/app/commands/decidim/create_user_group.rb +6 -2
  65. data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
  66. data/app/commands/decidim/invite_user.rb +1 -1
  67. data/app/commands/decidim/search.rb +0 -14
  68. data/app/commands/decidim/update_account.rb +11 -3
  69. data/app/commands/decidim/update_notifications_settings.rb +1 -0
  70. data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
  71. data/app/commands/decidim/update_user_group.rb +7 -1
  72. data/app/constraints/decidim/current_component.rb +1 -1
  73. data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
  74. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
  75. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
  76. data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
  77. data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
  78. data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
  79. data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
  80. data/app/controllers/concerns/decidim/headers/browser_feature_permissions.rb +50 -0
  81. data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
  82. data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
  83. data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
  84. data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
  85. data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
  86. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -4
  87. data/app/controllers/decidim/application_controller.rb +10 -0
  88. data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
  89. data/app/controllers/decidim/components/base_controller.rb +3 -7
  90. data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
  91. data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
  92. data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
  93. data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
  94. data/app/controllers/decidim/download_your_data_controller.rb +33 -2
  95. data/app/controllers/decidim/editor_images_controller.rb +1 -11
  96. data/app/controllers/decidim/follows_controller.rb +1 -1
  97. data/app/controllers/decidim/geolocation_controller.rb +19 -0
  98. data/app/controllers/decidim/homepage_controller.rb +0 -1
  99. data/app/controllers/decidim/open_data_controller.rb +33 -8
  100. data/app/controllers/decidim/profiles_controller.rb +2 -2
  101. data/app/controllers/decidim/reports_controller.rb +2 -7
  102. data/app/controllers/decidim/user_activities_controller.rb +1 -1
  103. data/app/controllers/decidim/user_conversations_controller.rb +1 -11
  104. data/app/events/decidim/soft_delete_resource_event.rb +15 -0
  105. data/app/forms/decidim/account_form.rb +2 -5
  106. data/app/forms/decidim/amendable/form.rb +4 -2
  107. data/app/forms/decidim/ephemeral_user_form.rb +22 -0
  108. data/app/forms/decidim/notifications_settings_form.rb +1 -0
  109. data/app/forms/decidim/omniauth_registration_form.rb +15 -2
  110. data/app/forms/decidim/registration_form.rb +1 -1
  111. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
  112. data/app/helpers/decidim/action_authorization_helper.rb +75 -14
  113. data/app/helpers/decidim/amendments_helper.rb +0 -9
  114. data/app/helpers/decidim/application_helper.rb +6 -2
  115. data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
  116. data/app/helpers/decidim/cache_helper.rb +1 -1
  117. data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
  118. data/app/helpers/decidim/decidim_form_helper.rb +0 -44
  119. data/app/helpers/decidim/endorsable_helper.rb +0 -10
  120. data/app/helpers/decidim/layout_helper.rb +6 -0
  121. data/app/helpers/decidim/menu_helper.rb +2 -2
  122. data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
  123. data/app/helpers/decidim/meta_tags_helper.rb +32 -23
  124. data/app/helpers/decidim/modal_helper.rb +23 -0
  125. data/app/helpers/decidim/omniauth_helper.rb +5 -5
  126. data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
  127. data/app/helpers/decidim/orders_helper.rb +1 -2
  128. data/app/helpers/decidim/paginate_helper.rb +1 -1
  129. data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
  130. data/app/helpers/decidim/passwords_helper.rb +2 -2
  131. data/app/helpers/decidim/taxonomies_helper.rb +40 -0
  132. data/app/helpers/decidim/tooltip_helper.rb +1 -4
  133. data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
  134. data/app/jobs/decidim/event_publisher_job.rb +18 -9
  135. data/app/jobs/decidim/export_job.rb +5 -1
  136. data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
  137. data/app/jobs/decidim/open_data_job.rb +4 -4
  138. data/app/mailers/decidim/export_mailer.rb +7 -12
  139. data/app/mailers/decidim/notifications_digest_mailer.rb +1 -7
  140. data/app/mailers/decidim/reported_mailer.rb +2 -18
  141. data/app/models/decidim/action_log.rb +20 -1
  142. data/app/models/decidim/category.rb +4 -0
  143. data/app/models/decidim/component.rb +25 -3
  144. data/app/models/decidim/metric.rb +2 -1
  145. data/app/models/decidim/moderation.rb +16 -0
  146. data/app/models/decidim/newsletter.rb +12 -8
  147. data/app/models/decidim/organization.rb +7 -3
  148. data/app/models/decidim/participatory_space_private_user.rb +20 -0
  149. data/app/models/decidim/private_export.rb +24 -0
  150. data/app/models/decidim/push_notification_message.rb +1 -1
  151. data/app/models/decidim/report.rb +1 -1
  152. data/app/models/decidim/scope.rb +4 -0
  153. data/app/models/decidim/share_token.rb +36 -10
  154. data/app/models/decidim/taxonomization.rb +23 -0
  155. data/app/models/decidim/taxonomy.rb +139 -0
  156. data/app/models/decidim/taxonomy_filter.rb +130 -0
  157. data/app/models/decidim/taxonomy_filter_item.rb +33 -0
  158. data/app/models/decidim/user.rb +13 -23
  159. data/app/models/decidim/user_base_entity.rb +12 -4
  160. data/app/models/decidim/user_moderation.rb +9 -0
  161. data/app/models/decidim/user_report.rb +4 -0
  162. data/app/packs/entrypoints/decidim_core.js +1 -0
  163. data/app/packs/entrypoints/decidim_geocoding.js +2 -0
  164. data/app/packs/images/decidim/brands/facebook.svg +10 -0
  165. data/app/packs/images/decidim/brands/google.svg +7 -1
  166. data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
  167. data/app/packs/src/decidim/check_boxes_tree.js +0 -1
  168. data/app/packs/src/decidim/clipboard.js +18 -9
  169. data/app/packs/src/decidim/confirm.js +79 -59
  170. data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
  171. data/app/packs/src/decidim/decidim_application.js +1 -0
  172. data/app/packs/src/decidim/form_remote.js +1 -1
  173. data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
  174. data/app/packs/src/decidim/impersonation.js +1 -1
  175. data/app/packs/src/decidim/index.js +13 -5
  176. data/app/packs/src/decidim/input_character_counter.js +1 -1
  177. data/app/packs/src/decidim/map/provider/here.js +1 -1
  178. data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
  179. data/app/packs/src/decidim/session_timeouter.js +1 -1
  180. data/app/packs/src/decidim/sticky_footer.js +29 -0
  181. data/app/packs/src/decidim/sticky_header.js +6 -31
  182. data/app/packs/src/decidim/user_registrations.js +13 -0
  183. data/app/packs/src/decidim/utilities/dom.js +148 -0
  184. data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +212 -0
  185. data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
  186. data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
  187. data/app/packs/stylesheets/decidim/_cards.scss +1 -1
  188. data/app/packs/stylesheets/decidim/_content_blocks.scss +0 -4
  189. data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
  190. data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
  191. data/app/packs/stylesheets/decidim/_forms.scss +2 -2
  192. data/app/packs/stylesheets/decidim/_header.scss +37 -60
  193. data/app/packs/stylesheets/decidim/_layout.scss +32 -2
  194. data/app/packs/stylesheets/decidim/_login.scss +53 -6
  195. data/app/packs/stylesheets/decidim/_modal.scss +42 -0
  196. data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
  197. data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
  198. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  199. data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
  200. data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
  201. data/app/packs/stylesheets/decidim/application.scss +1 -1
  202. data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
  203. data/app/packs/stylesheets/decidim/map.scss +7 -10
  204. data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
  205. data/app/permissions/decidim/default_permissions.rb +0 -2
  206. data/app/permissions/decidim/permissions.rb +8 -2
  207. data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
  208. data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
  209. data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
  210. data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
  211. data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
  212. data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
  213. data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
  214. data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
  215. data/app/presenters/decidim/log/user_presenter.rb +0 -1
  216. data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
  217. data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
  218. data/app/presenters/decidim/notification_to_mailer_presenter.rb +3 -7
  219. data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
  220. data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
  221. data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
  222. data/app/presenters/decidim/user_presenter.rb +1 -1
  223. data/app/queries/decidim/last_activity.rb +0 -25
  224. data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
  225. data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
  226. data/app/queries/decidim/public_activities.rb +1 -12
  227. data/app/queries/decidim/stats_users_count.rb +2 -2
  228. data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
  229. data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
  230. data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
  231. data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
  232. data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
  233. data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
  234. data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
  235. data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
  236. data/app/serializers/decidim/exporters/serializer.rb +25 -0
  237. data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
  238. data/app/services/decidim/action_authorizer.rb +32 -3
  239. data/app/services/decidim/base_diff_renderer.rb +1 -3
  240. data/app/services/decidim/download_your_data_exporter.rb +58 -24
  241. data/app/services/decidim/onboarding_manager.rb +272 -0
  242. data/app/services/decidim/open_data_exporter.rb +139 -13
  243. data/app/services/decidim/static_map_generator.rb +1 -1
  244. data/app/services/decidim/traceability.rb +13 -0
  245. data/app/uploaders/decidim/application_uploader.rb +1 -1
  246. data/app/validators/etiquette_validator.rb +9 -2
  247. data/app/validators/passthru_validator.rb +1 -1
  248. data/app/validators/translated_etiquette_validator.rb +32 -0
  249. data/app/views/decidim/account/_password_fields.html.erb +2 -2
  250. data/app/views/decidim/application/_accordion_section.html.erb +14 -0
  251. data/app/views/decidim/application/_collection.html.erb +30 -18
  252. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
  253. data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
  254. data/app/views/decidim/devise/registrations/new.html.erb +10 -22
  255. data/app/views/decidim/devise/sessions/new.html.erb +24 -29
  256. data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
  257. data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
  258. data/app/views/decidim/download_your_data/_export.html.erb +15 -0
  259. data/app/views/decidim/download_your_data/show.html.erb +51 -5
  260. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
  261. data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
  262. data/app/views/decidim/export_mailer/export.html.erb +5 -1
  263. data/app/views/decidim/last_activities/index.html.erb +1 -1
  264. data/app/views/decidim/messaging/conversations/_reply_form.html.erb +2 -1
  265. data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
  266. data/app/views/decidim/notifications_settings/show.html.erb +22 -0
  267. data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
  268. data/app/views/decidim/open_data/index.html.erb +108 -0
  269. data/app/views/decidim/pages/show.html.erb +2 -1
  270. data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
  271. data/app/views/decidim/reported_mailer/hide.html.erb +9 -0
  272. data/app/views/decidim/reported_mailer/report.html.erb +1 -1
  273. data/app/views/decidim/searches/_count.html.erb +1 -1
  274. data/app/views/decidim/searches/_filters.html.erb +38 -40
  275. data/app/views/decidim/shared/_login_modal.html.erb +26 -20
  276. data/app/views/decidim/shared/_orders.html.erb +2 -2
  277. data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
  278. data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
  279. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
  280. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  281. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
  282. data/app/views/kaminari/decidim/_page.html.erb +1 -1
  283. data/app/views/kaminari/decidim/_paginator.html.erb +1 -1
  284. data/app/views/layouts/decidim/_application.html.erb +0 -1
  285. data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
  286. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  287. data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
  288. data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
  289. data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
  290. data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
  291. data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
  292. data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
  293. data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
  294. data/app/views/layouts/decidim/header/_main.html.erb +14 -10
  295. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
  296. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +11 -5
  297. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +5 -5
  298. data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
  299. data/config/assets.rb +2 -1
  300. data/config/locales/ar.yml +35 -74
  301. data/config/locales/bg.yml +33 -74
  302. data/config/locales/bs-BA.yml +0 -2
  303. data/config/locales/ca.yml +370 -102
  304. data/config/locales/cs.yml +374 -102
  305. data/config/locales/de.yml +350 -88
  306. data/config/locales/el.yml +22 -58
  307. data/config/locales/en.yml +350 -82
  308. data/config/locales/eo.yml +0 -4
  309. data/config/locales/es-MX.yml +364 -99
  310. data/config/locales/es-PY.yml +369 -104
  311. data/config/locales/es.yml +370 -102
  312. data/config/locales/eu.yml +426 -156
  313. data/config/locales/fi-plain.yml +366 -76
  314. data/config/locales/fi.yml +370 -77
  315. data/config/locales/fr-CA.yml +176 -97
  316. data/config/locales/fr.yml +176 -94
  317. data/config/locales/ga-IE.yml +4 -25
  318. data/config/locales/gl.yml +20 -58
  319. data/config/locales/hu.yml +30 -62
  320. data/config/locales/id-ID.yml +21 -57
  321. data/config/locales/is-IS.yml +5 -25
  322. data/config/locales/it.yml +36 -94
  323. data/config/locales/ja.yml +231 -112
  324. data/config/locales/lb.yml +28 -76
  325. data/config/locales/lt.yml +24 -64
  326. data/config/locales/lv.yml +21 -58
  327. data/config/locales/nl.yml +23 -75
  328. data/config/locales/no.yml +23 -70
  329. data/config/locales/pl.yml +30 -72
  330. data/config/locales/pt-BR.yml +41 -63
  331. data/config/locales/pt.yml +23 -70
  332. data/config/locales/ro-RO.yml +115 -184
  333. data/config/locales/ru.yml +13 -43
  334. data/config/locales/sk.yml +24 -70
  335. data/config/locales/sl.yml +0 -4
  336. data/config/locales/sr-CS.yml +0 -2
  337. data/config/locales/sv.yml +138 -106
  338. data/config/locales/tr-TR.yml +29 -75
  339. data/config/locales/uk.yml +6 -29
  340. data/config/locales/zh-CN.yml +21 -68
  341. data/config/locales/zh-TW.yml +23 -62
  342. data/config/routes.rb +4 -10
  343. data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
  344. data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
  345. data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
  346. data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
  347. data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
  348. data/db/migrate/20190412131728_fix_user_names.rb +1 -1
  349. data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
  350. data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
  351. data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
  352. data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
  353. data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
  354. data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
  355. data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
  356. data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
  357. data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
  358. data/db/migrate/20241022002600_create_private_exports.rb +18 -0
  359. data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
  360. data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
  361. data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
  362. data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
  363. data/decidim-core.gemspec +14 -17
  364. data/lib/decidim/action_authorization.rb +3 -2
  365. data/lib/decidim/amendable.rb +1 -1
  366. data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
  367. data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
  368. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
  369. data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
  370. data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
  371. data/lib/decidim/api/interfaces/author_interface.rb +3 -2
  372. data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
  373. data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
  374. data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
  375. data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
  376. data/lib/decidim/api/types/amendment_type.rb +5 -7
  377. data/lib/decidim/api/types/area_api_type.rb +3 -3
  378. data/lib/decidim/api/types/attachment_type.rb +3 -3
  379. data/lib/decidim/api/types/category_type.rb +2 -2
  380. data/lib/decidim/api/types/decidim_type.rb +5 -1
  381. data/lib/decidim/api/types/fingerprint_type.rb +1 -1
  382. data/lib/decidim/api/types/localized_string_type.rb +1 -1
  383. data/lib/decidim/api/types/metric_history_type.rb +2 -0
  384. data/lib/decidim/api/types/metric_type.rb +1 -1
  385. data/lib/decidim/api/types/organization_type.rb +5 -0
  386. data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
  387. data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
  388. data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
  389. data/lib/decidim/api/types/scope_api_type.rb +2 -3
  390. data/lib/decidim/api/types/session_type.rb +1 -2
  391. data/lib/decidim/api/types/taxonomy_type.rb +15 -0
  392. data/lib/decidim/api/types/trace_version_type.rb +2 -2
  393. data/lib/decidim/api/types/translated_field_type.rb +3 -5
  394. data/lib/decidim/api/types/user_group_type.rb +7 -20
  395. data/lib/decidim/api/types/user_type.rb +7 -20
  396. data/lib/decidim/asset_router/storage.rb +6 -11
  397. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +2 -1
  398. data/lib/decidim/attachment_attributes.rb +1 -1
  399. data/lib/decidim/attribute_encryptor.rb +1 -1
  400. data/lib/decidim/attribute_object/nested_validator.rb +1 -1
  401. data/lib/decidim/attributes/integer_with_units.rb +27 -0
  402. data/lib/decidim/attributes/time_with_zone.rb +1 -5
  403. data/lib/decidim/attributes.rb +2 -0
  404. data/lib/decidim/authorization_form_builder.rb +0 -7
  405. data/lib/decidim/coauthorable.rb +1 -1
  406. data/lib/decidim/command.rb +3 -3
  407. data/lib/decidim/commands/destroy_resource.rb +5 -1
  408. data/lib/decidim/commands/resource_handler.rb +2 -2
  409. data/lib/decidim/commands/restore_resource.rb +45 -0
  410. data/lib/decidim/commands/soft_delete_resource.rb +63 -0
  411. data/lib/decidim/component_manifest.rb +7 -0
  412. data/lib/decidim/content_parsers/blob_parser.rb +8 -10
  413. data/lib/decidim/content_parsers/user_parser.rb +1 -1
  414. data/lib/decidim/core/api.rb +2 -0
  415. data/lib/decidim/core/engine.rb +21 -7
  416. data/lib/decidim/core/menu.rb +0 -5
  417. data/lib/decidim/core/seeds.rb +42 -2
  418. data/lib/decidim/core/test/factories.rb +105 -2
  419. data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
  420. data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
  421. data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
  422. data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
  423. data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
  424. data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
  425. data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
  426. data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
  427. data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
  428. data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
  429. data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
  430. data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
  431. data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
  432. data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
  433. data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
  434. data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
  435. data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
  436. data/lib/decidim/core/test/shared_examples/reports_examples.rb +15 -53
  437. data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
  438. data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
  439. data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
  440. data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
  441. data/lib/decidim/core/test/shared_examples/social_share_examples.rb +7 -14
  442. data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
  443. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
  444. data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
  445. data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
  446. data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
  447. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
  448. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +0 -26
  449. data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -28
  450. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  451. data/lib/decidim/core/test.rb +9 -5
  452. data/lib/decidim/core/version.rb +1 -1
  453. data/lib/decidim/core.rb +58 -0
  454. data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
  455. data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
  456. data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
  457. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
  458. data/lib/decidim/download_your_data_serializers.rb +19 -0
  459. data/lib/decidim/exporters/csv.rb +6 -0
  460. data/lib/decidim/exporters/export_manifest.rb +14 -0
  461. data/lib/decidim/exporters/pdf.rb +26 -22
  462. data/lib/decidim/filter_form_builder.rb +12 -15
  463. data/lib/decidim/form_builder.rb +6 -129
  464. data/lib/decidim/has_category.rb +5 -1
  465. data/lib/decidim/has_private_users.rb +4 -0
  466. data/lib/decidim/has_taxonomy_settings.rb +47 -0
  467. data/lib/decidim/has_upload_validations.rb +1 -1
  468. data/lib/decidim/legacy_form_builder.rb +118 -0
  469. data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
  470. data/lib/decidim/maintenance/import_models/area.rb +82 -0
  471. data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
  472. data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
  473. data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
  474. data/lib/decidim/maintenance/import_models/category.rb +107 -0
  475. data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
  476. data/lib/decidim/maintenance/import_models/scope.rb +163 -0
  477. data/lib/decidim/maintenance/import_models.rb +19 -0
  478. data/lib/decidim/maintenance/taxonomy_importer.rb +132 -0
  479. data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
  480. data/lib/decidim/maintenance.rb +12 -0
  481. data/lib/decidim/map/autocomplete.rb +52 -8
  482. data/lib/decidim/map/dynamic_map.rb +1 -1
  483. data/lib/decidim/map/provider/dynamic_map/here.rb +40 -1
  484. data/lib/decidim/map/provider/geocoding/here.rb +9 -3
  485. data/lib/decidim/map/provider/static_map/here.rb +0 -34
  486. data/lib/decidim/map.rb +3 -6
  487. data/lib/decidim/moderation_tools.rb +16 -19
  488. data/lib/decidim/newsletter_encryptor.rb +1 -1
  489. data/lib/decidim/nicknamizable.rb +9 -6
  490. data/lib/decidim/paddable.rb +1 -1
  491. data/lib/decidim/participable.rb +10 -10
  492. data/lib/decidim/participatory_space_user.rb +10 -0
  493. data/lib/decidim/private_download_helper.rb +15 -0
  494. data/lib/decidim/record_encryptor.rb +51 -46
  495. data/lib/decidim/reportable.rb +2 -6
  496. data/lib/decidim/resourceable.rb +16 -0
  497. data/lib/decidim/seeds.rb +18 -20
  498. data/lib/decidim/settings_manifest.rb +34 -1
  499. data/lib/decidim/soft_deletable.rb +17 -0
  500. data/lib/decidim/taxonomizable.rb +72 -0
  501. data/lib/decidim/translatable_attributes.rb +1 -5
  502. data/lib/decidim/view_model.rb +0 -1
  503. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
  504. data/lib/tasks/decidim_procfile.rake +6 -0
  505. data/lib/tasks/decidim_tasks.rake +1 -0
  506. data/lib/tasks/decidim_taxonomies.rake +155 -0
  507. data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
  508. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
  509. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +20 -23
  510. data/lib/tasks/upgrade/migrations.rake +91 -0
  511. metadata +203 -112
  512. data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
  513. data/app/cells/decidim/content_blocks/base/content.erb +0 -0
  514. data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
  515. data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
  516. data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
  517. data/app/cells/decidim/report_user_button/already_reported_modal.erb +0 -11
  518. data/app/cells/decidim/report_user_button/flag_modal.erb +0 -46
  519. data/app/cells/decidim/report_user_button/show.erb +0 -2
  520. data/app/cells/decidim/report_user_button_cell.rb +0 -59
  521. data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
  522. data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
  523. data/app/cells/decidim/scopes_picker/show.erb +0 -14
  524. data/app/cells/decidim/scopes_picker_cell.rb +0 -92
  525. data/app/commands/decidim/update_user_interests.rb +0 -41
  526. data/app/controllers/decidim/scopes_controller.rb +0 -84
  527. data/app/controllers/decidim/user_interests_controller.rb +0 -30
  528. data/app/forms/decidim/user_interest_scope_form.rb +0 -25
  529. data/app/forms/decidim/user_interests_form.rb +0 -17
  530. data/app/helpers/decidim/categories_helper.rb +0 -26
  531. data/app/helpers/decidim/scopes_helper.rb +0 -105
  532. data/app/jobs/decidim/hide_child_resources_job.rb +0 -24
  533. data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
  534. data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
  535. data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
  536. data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
  537. data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
  538. data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
  539. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
  540. data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
  541. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
  542. data/app/validators/scope_belongs_to_component_validator.rb +0 -16
  543. data/app/views/decidim/account/_user_groups.html.erb +0 -0
  544. data/app/views/decidim/reported_mailer/hidden_automatically.html.erb +0 -25
  545. data/app/views/decidim/reported_mailer/hidden_manually.html.erb +0 -25
  546. data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
  547. data/app/views/decidim/scopes/picker.html.erb +0 -53
  548. data/app/views/decidim/shared/_comments.html.erb +0 -0
  549. data/app/views/decidim/shared/_share_modal.html.erb +0 -26
  550. data/app/views/decidim/shared/_tags.html.erb +0 -1
  551. data/app/views/decidim/user_interests/_areas.html.erb +0 -14
  552. data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
  553. data/app/views/decidim/user_interests/show.html.erb +0 -22
  554. data/config/initializers/foundation_rails_helper.rb +0 -4
  555. data/config/locales/ca-IT.yml +0 -2122
  556. data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
  557. data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
  558. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
  559. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
  560. data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
  561. data/lib/decidim/seven_zip_wrapper.rb +0 -29
  562. data/lib/tasks/upgrade/clean_hidden_resources.rake +0 -33
@@ -51,7 +51,7 @@
51
51
  }
52
52
 
53
53
  .layout-item {
54
- @apply container grid grid-cols-1 lg:grid-cols-12 py-4 lg:py-24 gap-12 lg:gap-x-0;
54
+ @apply container grid grid-cols-1 lg:grid-cols-12 py-4 lg:py-24 gap-12 lg:gap-x-0 pt-12;
55
55
 
56
56
  &__main {
57
57
  @apply xl:col-start-2 lg:col-span-8 xl:col-span-7 relative;
@@ -59,6 +59,10 @@
59
59
 
60
60
  &__aside {
61
61
  @apply lg:col-start-10 xl:col-start-10 lg:col-span-3 xl:col-span-2;
62
+
63
+ &--footer {
64
+ @apply order-last;
65
+ }
62
66
  }
63
67
 
64
68
  &__back {
@@ -92,10 +96,36 @@
92
96
 
93
97
  .layout-main__heading {
94
98
  @apply space-y-8;
99
+
100
+ .layout-author.has_status {
101
+ @apply mt-6;
102
+
103
+ &:last-of-type {
104
+ @apply mt-2;
105
+ }
106
+ }
95
107
  }
96
108
 
97
109
  .layout-author {
98
110
  @apply flex items-center gap-4;
111
+
112
+ /* overwrite default dropdown styles */
113
+ [data-target*="dropdown"] {
114
+ @apply w-auto cursor-pointer text-secondary text-2xl flex;
115
+ }
116
+
117
+ /* overwrite default dropdown styles */
118
+ [id*="dropdown-menu"][aria-hidden="true"] {
119
+ @apply md:hidden;
120
+ }
121
+
122
+ .dropdown__bottom {
123
+ @apply [&>li]:pl-0;
124
+
125
+ .button {
126
+ @apply [&>svg]:order-1 [&>span]:order-2;
127
+ }
128
+ }
99
129
  }
100
130
 
101
131
  .layout-aside__buttons {
@@ -103,7 +133,7 @@
103
133
  }
104
134
 
105
135
  .layout-main__buttons {
106
- @apply flex gap-x-1 items-center;
136
+ @apply flex gap-x-4 items-center;
107
137
  }
108
138
 
109
139
  .layout-aside__ctas-buttons {
@@ -1,6 +1,11 @@
1
+ $facebook_background: #0866ff;
2
+ $facebook_background_hover: #155cba; // 30% opacity
3
+ $google_background: #f2f2f2;
4
+ $google_background_hover: #dcdcdc; // 30% opacity
5
+
1
6
  .login {
2
7
  &__info {
3
- @apply text-gray-2 text-lg space-y-4 mb-10 prose-a:text-secondary prose-a:underline;
8
+ @apply text-gray-2 text-lg space-y-4 mt-10 prose-a:text-secondary prose-a:underline;
4
9
  }
5
10
 
6
11
  &__info-required {
@@ -12,18 +17,50 @@
12
17
  }
13
18
 
14
19
  &__omniauth {
15
- @apply flex flex-col items-center gap-8 text-gray-2 font-semibold w-fit mx-auto mt-10;
20
+ @apply flex flex-row items-center gap-8 text-gray-2 font-semibold w-fit mx-auto mt-10 [&>a]:w-auto;
16
21
 
17
22
  &-button {
18
- @apply button button__xl border border-gray shadow-[0_4px_6px_rgba(211,211,211,0.25)] justify-start gap-8 text-lg w-full;
23
+ @apply button__lg border border-gray shadow-[0_4px_6px_rgba(211,211,211,0.25)] justify-start gap-8 text-lg w-full rounded;
19
24
 
20
25
  svg {
21
- @apply w-6 h-6 fill-current flex-none;
26
+ @apply w-6 h-6 flex-none fill-white;
27
+ }
28
+
29
+ span {
30
+ @apply hidden 2xl:inline;
31
+ }
32
+
33
+ &--developer {
34
+ @apply flex;
35
+ }
36
+
37
+ &--facebook {
38
+ @apply flex flex-row text-white border border-background;
39
+
40
+ background-color: $facebook_background;
41
+ }
42
+
43
+ &--facebook:hover {
44
+ background-color: $facebook_background_hover;
45
+ }
46
+
47
+ &--x {
48
+ @apply flex flex-row text-white bg-black;
49
+ }
50
+
51
+ &--google {
52
+ @apply flex flex-row text-black border border-background;
53
+
54
+ background-color: $google_background;
55
+ }
56
+
57
+ &--google:hover {
58
+ background-color: $google_background_hover;
22
59
  }
23
60
  }
24
61
 
25
62
  &-separator {
26
- @apply mt-10 flex items-center justify-center gap-12 after:content-[''] before:content-[''] after:h-px before:h-px after:bg-background before:bg-background after:grow before:grow;
63
+ @apply mt-10 flex items-center justify-center gap-8 after:content-[''] before:content-[''] after:h-0.5 before:h-0.5 after:bg-background before:bg-background after:grow before:grow;
27
64
  }
28
65
 
29
66
  &__horizontal {
@@ -32,7 +69,7 @@
32
69
  }
33
70
 
34
71
  &__links {
35
- @apply flex flex-col gap-4 py-10 border-t-2 border-background;
72
+ @apply flex flex-col gap-4 pb-10 border-background items-center;
36
73
 
37
74
  a {
38
75
  @apply w-fit text-secondary hover:underline;
@@ -40,10 +77,20 @@
40
77
  }
41
78
 
42
79
  &__modal {
80
+ @apply p-8;
81
+
43
82
  &-links {
44
83
  @apply flex flex-col md:flex-row gap-4 justify-between items-start md:items-center [&>a]:text-secondary;
45
84
  }
46
85
 
86
+ &-remember {
87
+ @apply flex flex-row justify-between;
88
+
89
+ a {
90
+ @apply underline;
91
+ }
92
+ }
93
+
47
94
  [data-announcement] {
48
95
  @apply mt-4;
49
96
  }
@@ -42,4 +42,46 @@
42
42
  @apply w-full md:w-auto;
43
43
  }
44
44
  }
45
+
46
+ &[data-drawer] {
47
+ & > * {
48
+ @apply h-full max-h-full w-0 inset-0 translate-x-0 translate-y-0 right-0 left-auto max-w-[90%] lg:max-w-[900px] transition-none transition-[width] duration-500 overflow-visible;
49
+ }
50
+
51
+ &[aria-hidden="false"] {
52
+ > * {
53
+ @apply w-[60%];
54
+ }
55
+ }
56
+
57
+ [data-dialog-container] {
58
+ @apply grid-cols-none;
59
+
60
+ &.layout-content {
61
+ @apply bg-white;
62
+
63
+ > .spinner-container {
64
+ @apply sticky h-screen;
65
+ }
66
+ }
67
+ }
68
+
69
+ [data-dialog-closable] {
70
+ @apply absolute top-0 right-auto -left-10 p-4 py-2 bg-white rounded-bl;
71
+ }
72
+
73
+ .form-defaults {
74
+ h1 {
75
+ @apply text-2xl font-semibold text-black my-10 mx-4 border-b border-gray border-b-[1px] pb-8;
76
+
77
+ > .button {
78
+ @apply text-sm float-right;
79
+ }
80
+ }
81
+ }
82
+
83
+ .card {
84
+ @apply p-4 my-4 bg-background-2;
85
+ }
86
+ }
45
87
  }
@@ -3,4 +3,8 @@
3
3
  [data-dialog-actions] {
4
4
  @apply flex-nowrap;
5
5
  }
6
+
7
+ a {
8
+ @apply underline text-secondary;
9
+ }
6
10
  }
@@ -19,6 +19,52 @@
19
19
  > [id^="html-block"] {
20
20
  @apply w-full prose max-w-none [&+*]:border-t-0;
21
21
  }
22
+
23
+ .content-block {
24
+ @apply gap-0;
25
+
26
+ &__title {
27
+ @apply pb-8;
28
+ }
29
+
30
+ .documents {
31
+ &__container > div {
32
+ @apply border-b border-[#D3D5D9] border-t-0 pb-4 pt-6;
33
+ }
34
+
35
+ &__dropdown-container {
36
+ @apply border-b border-[#D3D5D9];
37
+ }
38
+
39
+ &__collection-trigger {
40
+ @apply bg-transparent max-w-full mt-0 pb-4 pt-6 px-0 rounded-none;
41
+
42
+ .documents-details {
43
+ @apply flex flex-col gap-2.5;
44
+
45
+ span {
46
+ @apply flex items-center text-lg leading-6 text-[var(--secondary)] font-semibold gap-1.5;
47
+ }
48
+ }
49
+ }
50
+
51
+ &__collection-content {
52
+ @apply w-auto ml-6 my-4 pl-4 lg:pl-8 border-l border-[#D3D5D9];
53
+
54
+ p {
55
+ @apply pt-4;
56
+ }
57
+
58
+ & > .documents__container {
59
+ @apply border-t-0 pt-0 mt-0;
60
+
61
+ & > :last-child {
62
+ @apply border-b-0;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
22
68
  }
23
69
 
24
70
  &__content-block {
@@ -166,7 +166,7 @@
166
166
  }
167
167
 
168
168
  &-container {
169
- @apply w-12 h-12 relative flex-none;
169
+ @apply w-20 h-20 relative flex-none mr-4;
170
170
  }
171
171
 
172
172
  &-badge {
@@ -0,0 +1,64 @@
1
+ .success-image {
2
+ --success: #28a745;
3
+
4
+ width: 100px;
5
+ height: 100px;
6
+ margin: auto;
7
+
8
+ .animation-success__checkmark {
9
+ width: 100%;
10
+ height: 100%;
11
+ border-radius: 50%;
12
+ display: block;
13
+ stroke-width: 5;
14
+ stroke: var(--success);
15
+ stroke-miterlimit: 10;
16
+ box-shadow: inset 0 0 0 #4bb71b;
17
+ animation: fill 0.4s ease-in-out 0.4s forwards,
18
+ scale 0.3s ease-in-out 0.09s both;
19
+ position: relative;
20
+ top: 5px;
21
+ right: 5px;
22
+ margin: 0 auto;
23
+ }
24
+
25
+ .animation-success__checkmark__circle {
26
+ stroke-dasharray: 166;
27
+ stroke-dashoffset: 166;
28
+ stroke-width: 5;
29
+ stroke-miterlimit: 10;
30
+ stroke: var(--success);
31
+ fill: #fff;
32
+ animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
33
+ }
34
+
35
+ .animation-success__checkmark__check {
36
+ transform-origin: 50% 50%;
37
+ stroke-dasharray: 48;
38
+ stroke-dashoffset: 48;
39
+ animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
40
+ }
41
+
42
+ @keyframes stroke {
43
+ 100% {
44
+ stroke-dashoffset: 0;
45
+ }
46
+ }
47
+
48
+ @keyframes scale {
49
+ 0%,
50
+ 100% {
51
+ transform: none;
52
+ }
53
+
54
+ 50% {
55
+ transform: scale3d(1.1, 1.1, 1);
56
+ }
57
+ }
58
+
59
+ @keyframes fill {
60
+ 100% {
61
+ box-shadow: inset 0 0 0 30 var(--success);
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,36 @@
1
+ .tribute-container {
2
+ @apply w-full relative;
3
+
4
+ #results {
5
+ @apply absolute max-h-[225px] top-full left-0 right-0 p-0 my-2 rounded z-50 overflow-y-scroll bg-white border border-gray-3;
6
+
7
+ li {
8
+ @apply flex items-center gap-2 cursor-pointer px-4 py-2;
9
+ }
10
+
11
+ li:hover {
12
+ @apply cursor-pointer bg-background;
13
+ }
14
+
15
+ img {
16
+ @apply rounded-full w-6 h-6 object-cover;
17
+ }
18
+
19
+ span,
20
+ strong {
21
+ @apply font-semibold text-sm text-secondary;
22
+ }
23
+
24
+ small {
25
+ @apply font-normal text-gray-2 text-xs;
26
+ }
27
+
28
+ svg {
29
+ @apply w-4 h-4 text-primary fill-current;
30
+ }
31
+
32
+ .is-group {
33
+ @apply ml-auto flex items-center gap-1;
34
+ }
35
+ }
36
+ }
@@ -58,7 +58,7 @@
58
58
  @import "stylesheets/decidim/_hero.scss";
59
59
  @import "stylesheets/decidim/_actions.scss";
60
60
  @import "stylesheets/decidim/_emoji.scss";
61
- @import "stylesheets/decidim/_hashtags.scss";
61
+ @import "stylesheets/decidim/_success_image.scss";
62
62
  }
63
63
 
64
64
  @import "stylesheets/decidim/vendor/datepicker_light.scss";
@@ -0,0 +1,5 @@
1
+ .geocoding-container {
2
+ .user-device-location button {
3
+ @apply mt-4;
4
+ }
5
+ }
@@ -1,13 +1,6 @@
1
- /*
2
- NOTE: Bad practice. These dependencies should not be loaded in this way (as static files),
3
- but leaflet makes use of image files, which are being wrong resolved by webpack,
4
- as currently is missing the "file-loader" in the webpack.config.js
5
-
6
- See https://github.com/Leaflet/Leaflet/issues/4849 for further info
7
- */
8
- @import "stylesheets/decidim/legacy/leaflet";
9
- @import "stylesheets/decidim/legacy/MarkerCluster";
10
- @import "stylesheets/decidim/legacy/MarkerCluster.Default";
1
+ @import "leaflet/dist/leaflet";
2
+ @import "leaflet.markercluster/dist/MarkerCluster";
3
+ @import "leaflet.markercluster/dist/MarkerCluster.Default";
11
4
 
12
5
  /* overwrite leaflet and card styles */
13
6
  .leaflet-popup-content-wrapper {
@@ -30,6 +23,10 @@
30
23
  @apply font-sans text-white;
31
24
  }
32
25
 
26
+ &-metadata svg {
27
+ @apply fill-current;
28
+ }
29
+
33
30
  &-title {
34
31
  @apply truncate;
35
32
  }
@@ -0,0 +1,31 @@
1
+ .resource_history {
2
+ @apply flex flex-col gap-3.5 lg:gap-[20px] p-4;
3
+
4
+ &__item {
5
+ @apply flex flex-row gap-2.5;
6
+
7
+ &_icon {
8
+ @apply w-8 h-8 rounded-full border-secondary border flex justify-center items-center;
9
+
10
+ &-creation {
11
+ @apply bg-secondary w-6 h-6 rounded-full flex justify-center items-center;
12
+ }
13
+ }
14
+
15
+ &_content {
16
+ @apply flex flex-col lg:items-center lg:flex-row lg:gap-1;
17
+ }
18
+
19
+ &_date {
20
+ @apply text-sm text-gray-2;
21
+ }
22
+ }
23
+
24
+ &_text {
25
+ @apply flex flex-col lg:flex-none lg:block relative;
26
+ }
27
+
28
+ &__line {
29
+ @apply absolute -left-[26px] lg:-left-[130px] top-3.5 lg:top-[26px] w-px h-full bg-secondary;
30
+ }
31
+ }
@@ -5,8 +5,6 @@ module Decidim
5
5
  # actions by any kind of user. Also works as a default implementation so other
6
6
  # components can inherit from it and get some convenience methods.
7
7
  class DefaultPermissions
8
- include Decidim::UserRoleChecker
9
-
10
8
  def initialize(user, permission_action, context = {})
11
9
  @user = user
12
10
  @permission_action = permission_action
@@ -24,6 +24,7 @@ module Decidim
24
24
  user_group_action?
25
25
  user_group_invitations_action?
26
26
  apply_endorsement_permissions if permission_action.subject == :endorsement
27
+ show_my_location_button?
27
28
 
28
29
  permission_action
29
30
  end
@@ -56,7 +57,6 @@ module Decidim
56
57
 
57
58
  return allow! if component.published?
58
59
  return allow! if user_can_preview_component?
59
- return allow! if user_can_admin_component?
60
60
  return allow! if user_can_admin_component_via_space?
61
61
 
62
62
  disallow!
@@ -163,7 +163,7 @@ module Decidim
163
163
  end
164
164
 
165
165
  def user_can_preview_component?
166
- return allow! if context[:share_token].present? && Decidim::ShareToken.use!(token_for: component, token: context[:share_token])
166
+ context[:share_token].present? && Decidim::ShareToken.use!(token_for: component, token: context[:share_token], user:)
167
167
  rescue ActiveRecord::RecordNotFound, StandardError
168
168
  nil
169
169
  end
@@ -193,6 +193,12 @@ module Decidim
193
193
  end
194
194
  end
195
195
 
196
+ def show_my_location_button?
197
+ return unless permission_action.action == :locate && permission_action.subject == :geolocation
198
+
199
+ allow!
200
+ end
201
+
196
202
  def not_already_active?(authorization)
197
203
  Verifications::Authorizations.new(organization: user.organization, user:, name: authorization.name).none?
198
204
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module AdminLog
5
+ # This class holds the shared logic for `Decidim::User` and `Decidim::UserGroup`
6
+ # presenters for the `AdminLog`.
7
+ class BaseUserPresenter < Decidim::Log::BasePresenter
8
+ private
9
+
10
+ def i18n_params
11
+ super.merge(
12
+ blocked_count: blocked_users.count,
13
+ unblocked_count: unblocked_users.count,
14
+ unreported_users_count: unreported_users.count
15
+ )
16
+ end
17
+
18
+ def blocked_users
19
+ action_log.extra.dig("extra", "blocked")&.values || []
20
+ end
21
+
22
+ def unblocked_users
23
+ action_log.extra.dig("extra", "unblocked")&.values || []
24
+ end
25
+
26
+ def unreported_users
27
+ action_log.extra.dig("extra", "unreported")&.values || []
28
+ end
29
+
30
+ def current_justification
31
+ action_log.extra.dig("extra", "current_justification") || Hash.new("")
32
+ end
33
+
34
+ def changeset
35
+ config = changeset_config[action.to_s]
36
+ return {} unless config
37
+
38
+ original = config[:original].call
39
+ return {} if original.values.flatten.all?(&:empty?)
40
+
41
+ Decidim::Log::DiffChangesetCalculator.new(original, config[:fields], i18n_labels_scope).changeset
42
+ end
43
+
44
+ def changeset_config
45
+ {
46
+ "bulk_block" => {
47
+ original: -> { { justification: [blocked_users.join(", "), current_justification] } },
48
+ fields: { justification: :string }
49
+ },
50
+ "bulk_unblock" => {
51
+ original: -> { { unblocked_users: ["", unblocked_users.join(", ")] } },
52
+ fields: { unblocked_users: :string }
53
+ },
54
+ "bulk_ignore" => {
55
+ original: -> { { unreported_users: ["", unreported_users.join(", ")] } },
56
+ fields: { unreported_users: :string }
57
+ }
58
+ }
59
+ end
60
+
61
+ # override this as it not depend on the old version
62
+ def has_diff?
63
+ diff_actions.include?(action.to_s) && changeset.any?
64
+ end
65
+ end
66
+ end
67
+ end
@@ -29,9 +29,9 @@ module Decidim
29
29
 
30
30
  def action_string
31
31
  case action
32
- when "export_component"
32
+ when "export_component", "soft_delete", "restore"
33
33
  "decidim.admin_log.component.#{action}"
34
- when "create", "delete", "publish", "unpublish", "update_permissions"
34
+ when "create", "delete", "publish", "unpublish", "update_permissions", "update_filters"
35
35
  generate_action_string(action)
36
36
  else
37
37
  super
@@ -48,7 +48,7 @@ module Decidim
48
48
  end
49
49
 
50
50
  def diff_actions
51
- super + %w(unpublish update_permissions)
51
+ super + %w(unpublish update_permissions update_filters)
52
52
  end
53
53
 
54
54
  def i18n_params
@@ -70,6 +70,35 @@ module Decidim
70
70
  })
71
71
  end
72
72
  end
73
+
74
+ def changeset
75
+ changes = action_log.version.changeset
76
+ mapping = diff_fields_mapping
77
+ if action == "update_filters"
78
+ changes = {
79
+ "taxonomy_filters" => [
80
+ filters_for(action_log.version.changeset["settings"].first.dig("global", "taxonomy_filters")),
81
+ filters_for(action_log.version.changeset["settings"].last.dig("global", "taxonomy_filters"))
82
+ ]
83
+ }
84
+ mapping = { taxonomy_filters: :array }
85
+ end
86
+ Decidim::Log::DiffChangesetCalculator.new(
87
+ changes,
88
+ mapping,
89
+ i18n_labels_scope
90
+ ).changeset
91
+ end
92
+
93
+ def filters_for(ids)
94
+ return [] if ids.blank?
95
+
96
+ @filters_ids ||= {}
97
+ ids.map do |id|
98
+ @filters_ids[id] ||= Decidim::TaxonomyFilter.find_by(id: ids)
99
+ @filters_ids[id] ? "#{id}: #{@filters_ids[id].translated_internal_name}" : id
100
+ end
101
+ end
73
102
  end
74
103
  end
75
104
  end
@@ -12,6 +12,8 @@ module Decidim
12
12
  # view_helpers # => this comes from the views
13
13
  # ModerationPresenter.new(action_log, view_helpers).present
14
14
  class ModerationPresenter < Decidim::Log::BasePresenter
15
+ include Decidim::TranslatableAttributes
16
+
15
17
  private
16
18
 
17
19
  def diff_fields_mapping
@@ -23,7 +25,7 @@ module Decidim
23
25
 
24
26
  def action_string
25
27
  case action
26
- when "hide", "unreport"
28
+ when "hide", "unreport", "bulk_hide", "bulk_unhide", "bulk_unreport"
27
29
  "decidim.admin_log.moderation.#{action}"
28
30
  else
29
31
  super
@@ -36,12 +38,37 @@ module Decidim
36
38
 
37
39
  def i18n_params
38
40
  super.merge(
39
- resource_type: action_log.extra.dig("extra", "reportable_type").try(:demodulize)
41
+ resource_type: action_log.extra.dig("extra", "reportable_type").try(:demodulize),
42
+ reported_count: action_log.extra.dig("extra", "reported_count") || "?"
40
43
  )
41
44
  end
42
45
 
46
+ def reported_content
47
+ action_log.extra.dig("extra", "reported_content") || {}
48
+ end
49
+
50
+ # Overwrite the changeset.
51
+ def changeset
52
+ types = changeset_config.keys.index_with { |_key| :string }
53
+ Decidim::Log::DiffChangesetCalculator.new(changeset_config, types, "decidim.admin.admin_log.changeset").changeset
54
+ end
55
+
56
+ def changeset_config
57
+ reported_content.to_h do |key, items|
58
+ [
59
+ key.to_sym,
60
+ ["", items.values.map { |title| translated_attribute(title) }.join(", ")]
61
+ ]
62
+ end
63
+ end
64
+
65
+ # override this as it not depend on the old version
66
+ def has_diff?
67
+ diff_actions.include?(action.to_s) && changeset.any?
68
+ end
69
+
43
70
  def diff_actions
44
- super + %w(unreport)
71
+ super + %w(unreport bulk_hide bulk_unhide bulk_unreport)
45
72
  end
46
73
  end
47
74
  end