decidim-core 0.28.5 → 0.29.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 (714) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/cells/decidim/activities_cell.rb +0 -1
  4. data/app/cells/decidim/activity_cell.rb +7 -6
  5. data/app/cells/decidim/address/online.erb +2 -2
  6. data/app/cells/decidim/address_cell.rb +3 -9
  7. data/app/cells/decidim/amendable/amend_button_card_cell.rb +0 -2
  8. data/app/cells/decidim/amendable/amendments_cell.rb +0 -2
  9. data/app/cells/decidim/amendable/announcement_cell.rb +10 -14
  10. data/app/cells/decidim/amendable/emendation_actions_cell.rb +0 -2
  11. data/app/cells/decidim/amendable/promote_button_card_cell.rb +0 -2
  12. data/app/cells/decidim/amendable/wizard_step_form_cell.rb +6 -19
  13. data/app/cells/decidim/announcement/show.erb +1 -1
  14. data/app/cells/decidim/announcement_cell.rb +6 -2
  15. data/app/cells/decidim/attachments_file_tab/show.erb +3 -0
  16. data/app/cells/decidim/attachments_file_tab_cell.rb +11 -0
  17. data/app/cells/decidim/attachments_link_tab/show.erb +12 -0
  18. data/app/cells/decidim/attachments_link_tab_cell.rb +21 -0
  19. data/app/cells/decidim/author/flag.erb +2 -2
  20. data/app/cells/decidim/author/show.erb +4 -5
  21. data/app/cells/decidim/author_cell.rb +0 -28
  22. data/app/cells/decidim/authorization_modal_cell.rb +0 -3
  23. data/app/cells/decidim/badge_cell.rb +0 -4
  24. data/app/cells/decidim/badges_cell.rb +0 -2
  25. data/app/cells/decidim/button_cell.rb +0 -3
  26. data/app/cells/decidim/card_cell.rb +1 -5
  27. data/app/cells/decidim/card_g/show.erb +1 -1
  28. data/app/cells/decidim/card_g_cell.rb +4 -7
  29. data/app/cells/decidim/card_l/image.erb +2 -2
  30. data/app/cells/decidim/card_l/space.erb +1 -1
  31. data/app/cells/decidim/card_l_cell.rb +3 -8
  32. data/app/cells/decidim/card_metadata_cell.rb +1 -5
  33. data/app/cells/decidim/card_s/show.erb +3 -5
  34. data/app/cells/decidim/card_s_cell.rb +1 -4
  35. data/app/cells/decidim/coauthorships_cell.rb +0 -2
  36. data/app/cells/decidim/comments_button_cell.rb +0 -2
  37. data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +1 -1
  38. data/app/cells/decidim/content_blocks/footer_sub_hero_cell.rb +0 -3
  39. data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
  40. data/app/cells/decidim/content_blocks/hero_cell.rb +1 -2
  41. data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
  42. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +0 -2
  43. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
  44. data/app/cells/decidim/content_blocks/how_to_participate_cell.rb +0 -1
  45. data/app/cells/decidim/content_blocks/participatory_space_documents/content.erb +1 -1
  46. data/app/cells/decidim/content_blocks/participatory_space_documents_cell.rb +17 -1
  47. data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +2 -4
  48. data/app/cells/decidim/content_blocks/participatory_space_last_activity_cell.rb +1 -3
  49. data/app/cells/decidim/content_blocks/stats/show.erb +1 -1
  50. data/app/cells/decidim/content_blocks/stats_cell.rb +1 -1
  51. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +0 -3
  52. data/app/cells/decidim/date_range/show.erb +10 -10
  53. data/app/cells/decidim/date_range_cell.rb +0 -2
  54. data/app/cells/decidim/diff_cell.rb +0 -5
  55. data/app/cells/decidim/documents_panel/show.erb +4 -0
  56. data/app/cells/decidim/documents_panel_cell.rb +9 -1
  57. data/app/cells/decidim/endorsement_buttons_cell.rb +6 -14
  58. data/app/cells/decidim/flag_modal/flag_user.erb +3 -3
  59. data/app/cells/decidim/followers_cell.rb +0 -1
  60. data/app/cells/decidim/following_cell.rb +0 -1
  61. data/app/cells/decidim/footer_topics/show.erb +8 -0
  62. data/app/cells/decidim/footer_topics_cell.rb +39 -0
  63. data/app/cells/decidim/groups_cell.rb +0 -3
  64. data/app/cells/decidim/linked_resources_for_cell.rb +0 -3
  65. data/app/cells/decidim/members_cell.rb +0 -1
  66. data/app/cells/decidim/nav_links/show.erb +3 -3
  67. data/app/cells/decidim/navbar_admin_link_cell.rb +0 -2
  68. data/app/cells/decidim/newsletter_templates/base_cell.rb +0 -1
  69. data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +2 -2
  70. data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +2 -2
  71. data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +1 -1
  72. data/app/cells/decidim/notification/show.erb +5 -0
  73. data/app/cells/decidim/notification_actions/base_cell.rb +13 -0
  74. data/app/cells/decidim/notification_actions/buttons/show.erb +5 -0
  75. data/app/cells/decidim/notification_actions/buttons_cell.rb +41 -0
  76. data/app/cells/decidim/notification_cell.rb +9 -3
  77. data/app/cells/decidim/notifications_cell.rb +0 -1
  78. data/app/cells/decidim/pad_iframe/show.erb +2 -2
  79. data/app/cells/decidim/pad_iframe_cell.rb +0 -1
  80. data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +1 -2
  81. data/app/cells/decidim/photo_cell.rb +1 -5
  82. data/app/cells/decidim/photos_list_cell.rb +0 -2
  83. data/app/cells/decidim/profile_cell.rb +0 -2
  84. data/app/cells/decidim/profile_sidebar/show.erb +20 -20
  85. data/app/cells/decidim/profile_sidebar_cell.rb +1 -10
  86. data/app/cells/decidim/progress_bar/show.erb +8 -6
  87. data/app/cells/decidim/public_participation/show.erb +1 -1
  88. data/app/cells/decidim/report_button/flag_modal.erb +1 -1
  89. data/app/cells/decidim/resource_types_filter/show.erb +12 -11
  90. data/app/cells/decidim/resource_types_filter_cell.rb +0 -2
  91. data/app/cells/decidim/scopes_picker/show.erb +1 -1
  92. data/app/cells/decidim/scopes_picker_cell.rb +0 -1
  93. data/app/cells/decidim/search_results_cell.rb +1 -1
  94. data/app/cells/decidim/statistic_cell.rb +0 -2
  95. data/app/cells/decidim/tab_panels/show.erb +1 -1
  96. data/app/cells/decidim/tab_panels_cell.rb +12 -2
  97. data/app/cells/decidim/tags_cell.rb +0 -2
  98. data/app/cells/decidim/tos_page_cell.rb +0 -3
  99. data/app/cells/decidim/translation_bar/show.erb +2 -2
  100. data/app/cells/decidim/translation_bar_cell.rb +1 -3
  101. data/app/cells/decidim/upload_modal/files.erb +1 -1
  102. data/app/cells/decidim/upload_modal_cell.rb +1 -3
  103. data/app/cells/decidim/user_conversation/new.erb +1 -1
  104. data/app/cells/decidim/user_conversation/show.erb +1 -1
  105. data/app/cells/decidim/user_conversation_cell.rb +0 -1
  106. data/app/cells/decidim/user_conversations/show.erb +1 -1
  107. data/app/cells/decidim/user_conversations_cell.rb +0 -1
  108. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -1
  109. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -1
  110. data/app/cells/decidim/user_timeline/show.erb +1 -1
  111. data/app/cells/decidim/version_cell.rb +3 -5
  112. data/app/cells/decidim/versions_list_cell.rb +1 -3
  113. data/app/cells/decidim/versions_list_item_cell.rb +2 -4
  114. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +2 -2
  115. data/app/cells/decidim/wizard_step_form/wizard_header.erb +2 -3
  116. data/app/cells/decidim/wizard_step_form_cell.rb +0 -8
  117. data/app/commands/decidim/amendable/create_draft.rb +4 -4
  118. data/app/commands/decidim/amendable/promote.rb +3 -2
  119. data/app/commands/decidim/amendable/publish_draft.rb +3 -2
  120. data/app/commands/decidim/amendable/update_draft.rb +4 -3
  121. data/app/commands/decidim/amendable/withdraw.rb +1 -1
  122. data/app/commands/decidim/create_follow.rb +4 -4
  123. data/app/commands/decidim/create_omniauth_registration.rb +4 -10
  124. data/app/commands/decidim/create_report.rb +3 -3
  125. data/app/commands/decidim/create_user_report.rb +5 -5
  126. data/app/commands/decidim/delete_follow.rb +4 -4
  127. data/app/commands/decidim/demote_membership.rb +2 -2
  128. data/app/commands/decidim/destroy_account.rb +21 -22
  129. data/app/commands/decidim/endorse_resource.rb +1 -1
  130. data/app/commands/decidim/invite_user_to_group.rb +5 -4
  131. data/app/commands/decidim/update_account.rb +24 -22
  132. data/app/commands/decidim/update_notifications_settings.rb +13 -11
  133. data/app/commands/decidim/update_password.rb +7 -7
  134. data/app/commands/decidim/update_user_interests.rb +9 -7
  135. data/app/controllers/concerns/decidim/devise_authentication_methods.rb +1 -1
  136. data/app/controllers/concerns/decidim/devise_controllers.rb +2 -1
  137. data/app/controllers/concerns/decidim/filter_resource.rb +1 -1
  138. data/app/controllers/concerns/decidim/needs_rtl_direction.rb +23 -0
  139. data/app/controllers/concerns/decidim/paginable.rb +1 -1
  140. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -23
  141. data/app/controllers/concerns/decidim/payload_info.rb +2 -1
  142. data/app/controllers/concerns/decidim/registers_permissions.rb +4 -4
  143. data/app/controllers/concerns/decidim/use_organization_time_zone.rb +1 -1
  144. data/app/controllers/concerns/decidim/withdrawable.rb +1 -1
  145. data/app/controllers/decidim/account_controller.rb +2 -2
  146. data/app/controllers/{concerns/decidim → decidim}/amendments_controller.rb +3 -16
  147. data/app/controllers/decidim/application_controller.rb +1 -1
  148. data/app/controllers/decidim/components/base_controller.rb +1 -1
  149. data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
  150. data/app/controllers/decidim/devise/passwords_controller.rb +2 -2
  151. data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
  152. data/app/controllers/decidim/endorsements_controller.rb +1 -1
  153. data/app/controllers/decidim/favicon_controller.rb +1 -1
  154. data/app/controllers/decidim/follows_controller.rb +2 -2
  155. data/app/controllers/decidim/group_invites_controller.rb +36 -9
  156. data/app/controllers/decidim/links_controller.rb +1 -1
  157. data/app/controllers/decidim/newsletters_opt_in_controller.rb +1 -1
  158. data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
  159. data/app/controllers/decidim/profiles_controller.rb +0 -4
  160. data/app/controllers/decidim/report_users_controller.rb +1 -1
  161. data/app/controllers/decidim/reports_controller.rb +1 -1
  162. data/app/controllers/decidim/user_interests_controller.rb +1 -1
  163. data/app/events/decidim/change_nickname_event.rb +0 -1
  164. data/app/events/decidim/invited_to_group_event.rb +29 -0
  165. data/app/events/decidim/welcome_notification_event.rb +2 -4
  166. data/app/forms/decidim/form.rb +4 -0
  167. data/app/forms/decidim/omniauth_registration_form.rb +1 -1
  168. data/app/forms/decidim/upload_validation_form.rb +2 -2
  169. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +1 -1
  170. data/app/helpers/decidim/amendments_helper.rb +4 -14
  171. data/app/helpers/decidim/application_helper.rb +8 -0
  172. data/app/helpers/decidim/authorization_form_helper.rb +2 -2
  173. data/app/helpers/decidim/breadcrumb_helper.rb +1 -1
  174. data/app/helpers/decidim/cells_helper.rb +1 -1
  175. data/app/helpers/decidim/check_boxes_tree_helper.rb +1 -1
  176. data/app/helpers/decidim/cta_button_helper.rb +1 -1
  177. data/app/helpers/decidim/datalist_select_helper.rb +1 -1
  178. data/app/helpers/decidim/decidim_form_helper.rb +3 -3
  179. data/app/helpers/decidim/filters_helper.rb +1 -1
  180. data/app/helpers/decidim/layout_helper.rb +1 -64
  181. data/app/helpers/decidim/localized_locales_helper.rb +1 -1
  182. data/app/helpers/decidim/map_helper.rb +1 -6
  183. data/app/helpers/decidim/menu_helper.rb +9 -1
  184. data/app/helpers/decidim/meta_tags_helper.rb +26 -23
  185. data/app/helpers/decidim/modal_helper.rb +1 -1
  186. data/app/helpers/decidim/orders_helper.rb +1 -1
  187. data/app/helpers/decidim/organization_helper.rb +55 -0
  188. data/app/helpers/decidim/paginate_helper.rb +5 -3
  189. data/app/helpers/decidim/resource_helper.rb +0 -7
  190. data/app/helpers/decidim/sanitize_helper.rb +2 -11
  191. data/app/helpers/decidim/scopes_helper.rb +3 -4
  192. data/app/helpers/decidim/searches_helper.rb +1 -1
  193. data/app/helpers/decidim/short_link_helper.rb +2 -2
  194. data/app/helpers/decidim/translations_helper.rb +2 -2
  195. data/app/helpers/decidim/twitter_search_helper.rb +1 -1
  196. data/app/helpers/decidim/user_profile_helper.rb +0 -1
  197. data/app/jobs/decidim/email_notifications_digest_generator_job.rb +2 -2
  198. data/app/mailers/decidim/application_mailer.rb +6 -2
  199. data/app/mailers/decidim/block_user_mailer.rb +1 -1
  200. data/app/mailers/decidim/decidim_devise_mailer.rb +7 -1
  201. data/app/mailers/decidim/newsletter_mailer.rb +1 -4
  202. data/app/mailers/decidim/newsletters_opt_in_mailer.rb +2 -2
  203. data/app/mailers/decidim/notification_mailer.rb +0 -1
  204. data/app/mailers/decidim/notifications_digest_mailer.rb +0 -1
  205. data/app/mailers/decidim/reported_mailer.rb +6 -3
  206. data/app/mailers/decidim/user_report_mailer.rb +1 -1
  207. data/app/models/decidim/action_log.rb +2 -12
  208. data/app/models/decidim/area_type.rb +1 -1
  209. data/app/models/decidim/attachment.rb +28 -4
  210. data/app/models/decidim/authorization.rb +1 -1
  211. data/app/models/decidim/authorization_transfer.rb +1 -0
  212. data/app/models/decidim/component.rb +3 -6
  213. data/app/models/decidim/content_block.rb +3 -3
  214. data/app/models/decidim/messaging/message.rb +2 -2
  215. data/app/models/decidim/newsletter.rb +9 -9
  216. data/app/models/decidim/notification.rb +2 -2
  217. data/app/models/decidim/organization.rb +23 -2
  218. data/app/models/decidim/push_notification_message.rb +1 -1
  219. data/app/models/decidim/resource_link.rb +1 -1
  220. data/app/models/decidim/user.rb +14 -14
  221. data/app/models/decidim/user_group.rb +2 -2
  222. data/app/packs/src/decidim/a11y.js +61 -11
  223. data/app/packs/src/decidim/append_redirect_url_to_modals.js +14 -24
  224. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +55 -0
  225. data/app/packs/src/decidim/attachments/index.js +1 -0
  226. data/app/packs/src/decidim/back_to_list.js +1 -1
  227. data/app/packs/src/decidim/check_boxes_tree.js +1 -1
  228. data/app/packs/src/decidim/data_consent/consent_manager.js +1 -1
  229. data/app/packs/src/decidim/data_consent/consent_manager.test.js +6 -6
  230. data/app/packs/src/decidim/data_consent/index.js +1 -1
  231. data/app/packs/src/decidim/datepicker/datepicker_functions.js +243 -0
  232. data/app/packs/src/decidim/datepicker/datepicker_listeners.js +78 -0
  233. data/app/packs/src/decidim/datepicker/form_datepicker.js +91 -0
  234. data/app/packs/src/decidim/datepicker/generate_datepicker.js +148 -0
  235. data/app/packs/src/decidim/datepicker/generate_timepicker.js +298 -0
  236. data/app/packs/src/decidim/datepicker/test/date.test.js +118 -0
  237. data/app/packs/src/decidim/datepicker/test/time.test.js +227 -0
  238. data/app/packs/src/decidim/direct_uploads/upload_field.js +8 -21
  239. data/app/packs/src/decidim/direct_uploads/upload_modal.js +0 -3
  240. data/app/packs/src/decidim/editor/extensions/indent/index.js +1 -1
  241. data/app/packs/src/decidim/editor/extensions/video_embed/index.js +4 -4
  242. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +0 -15
  243. data/app/packs/src/decidim/editor/test/extensions/indent.test.js +1 -1
  244. data/app/packs/src/decidim/editor/test/fixtures/upload_templates.js +1 -1
  245. data/app/packs/src/decidim/editor/test/helpers.js +1 -14
  246. data/app/packs/src/decidim/editor/utilities/paste_transform.js +2 -2
  247. data/app/packs/src/decidim/external_domain_warning.js +2 -2
  248. data/app/packs/src/decidim/external_domain_warning.test.js +4 -4
  249. data/app/packs/src/decidim/form_filter.js +4 -4
  250. data/app/packs/src/decidim/impersonation.js +1 -1
  251. data/app/packs/src/decidim/index.js +11 -8
  252. data/app/packs/src/decidim/input_character_counter.js +2 -2
  253. data/app/packs/src/decidim/input_emoji.js +171 -72
  254. data/app/packs/src/decidim/input_hashtags.js +1 -1
  255. data/app/packs/src/decidim/input_mentions.js +1 -1
  256. data/app/packs/src/decidim/notifications_actions.js +40 -0
  257. data/app/packs/src/decidim/sticky_header.js +87 -0
  258. data/app/packs/src/decidim/sw/sw.js +8 -6
  259. data/app/packs/src/decidim/toggle.js +1 -1
  260. data/app/packs/src/decidim/tooltips.js +23 -43
  261. data/app/packs/stylesheets/decidim/_buttons.scss +1 -1
  262. data/app/packs/stylesheets/decidim/_datepicker.scss +193 -0
  263. data/app/packs/stylesheets/decidim/_dropdown.scss +45 -9
  264. data/app/packs/stylesheets/decidim/_emoji.scss +36 -0
  265. data/app/packs/stylesheets/decidim/_filters.scss +4 -2
  266. data/app/packs/stylesheets/decidim/_flash.scss +2 -2
  267. data/app/packs/stylesheets/decidim/_footer.scss +1 -3
  268. data/app/packs/stylesheets/decidim/_forms.scss +13 -5
  269. data/app/packs/stylesheets/decidim/_header.scss +70 -50
  270. data/app/packs/stylesheets/decidim/_home.scss +1 -1
  271. data/app/packs/stylesheets/decidim/_layout.scss +13 -0
  272. data/app/packs/stylesheets/decidim/_modal.scss +1 -1
  273. data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
  274. data/app/packs/stylesheets/decidim/_notifications.scss +4 -0
  275. data/app/packs/stylesheets/decidim/_profile.scss +1 -1
  276. data/app/packs/stylesheets/decidim/_progress-bar.scss +1 -1
  277. data/app/packs/stylesheets/decidim/_tabs_x.scss +5 -1
  278. data/app/packs/stylesheets/decidim/_tooltip.scss +10 -10
  279. data/app/packs/stylesheets/decidim/application.scss +4 -0
  280. data/app/packs/stylesheets/decidim/editor.scss +1 -1
  281. data/app/packs/stylesheets/decidim/legacy/conference-diploma.scss +1 -2
  282. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +1 -1
  283. data/app/packs/stylesheets/decidim/vendor/_datepicker_light.scss +228 -0
  284. data/app/permissions/decidim/default_permissions.rb +2 -2
  285. data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -1
  286. data/app/presenters/decidim/admin_log/static_page_presenter.rb +1 -1
  287. data/app/presenters/decidim/attachment_presenter.rb +1 -1
  288. data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
  289. data/app/presenters/decidim/component_attachment_collection_presenter.rb +81 -0
  290. data/app/presenters/decidim/footer_menu_presenter.rb +1 -1
  291. data/app/presenters/decidim/home_stats_presenter.rb +1 -1
  292. data/app/presenters/decidim/menu_item_presenter.rb +1 -1
  293. data/app/presenters/decidim/organization_presenter.rb +1 -1
  294. data/app/queries/decidim/last_activity.rb +5 -16
  295. data/app/queries/decidim/metric_measure.rb +1 -1
  296. data/app/queries/decidim/public_activities.rb +1 -1
  297. data/app/queries/decidim/user_groups/admin_memberships.rb +1 -1
  298. data/app/queries/decidim/user_groups/member_memberships.rb +1 -1
  299. data/app/services/decidim/action_logger.rb +3 -3
  300. data/app/services/decidim/base_diff_renderer.rb +2 -26
  301. data/app/services/decidim/download_your_data_exporter.rb +25 -36
  302. data/app/services/decidim/email_notification_generator.rb +5 -14
  303. data/app/services/decidim/log/diff_changeset_calculator.rb +2 -2
  304. data/app/services/decidim/notifications_digest_sending_decider.rb +1 -1
  305. data/app/services/decidim/open_data_exporter.rb +7 -8
  306. data/app/services/decidim/zip_stream/writer.rb +39 -0
  307. data/app/uploaders/decidim/organization_favicon_uploader.rb +1 -1
  308. data/app/uploaders/decidim/record_image_uploader.rb +2 -2
  309. data/app/validators/organization_present_validator.rb +1 -1
  310. data/app/validators/passthru_validator.rb +1 -1
  311. data/app/validators/uploader_image_dimensions_validator.rb +2 -2
  312. data/app/views/decidim/account/show.html.erb +1 -1
  313. data/app/views/decidim/amendments/_wizard_header.html.erb +1 -2
  314. data/app/views/decidim/application/_collection.html.erb +3 -1
  315. data/app/views/decidim/application/_component_documents.html.erb +4 -0
  316. data/app/views/decidim/application/_document.html.erb +23 -9
  317. data/app/views/decidim/block_user_mailer/notify.html.erb +2 -2
  318. data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
  319. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +2 -2
  320. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  321. data/app/views/decidim/devise/shared/_login_boxes.html.erb +1 -1
  322. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +1 -1
  323. data/app/views/decidim/endorsements/_identity.html.erb +1 -1
  324. data/app/views/decidim/gamification/badges/index.html.erb +1 -1
  325. data/app/views/decidim/manifests/show.json.erb +4 -4
  326. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
  327. data/app/views/decidim/messaging/conversations/_error_modal.html.erb +5 -5
  328. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +1 -1
  329. data/app/views/decidim/newsletters/show.html.erb +1 -1
  330. data/app/views/decidim/newsletters_opt_in_mailer/notify.html.erb +2 -2
  331. data/app/views/decidim/offline/show.html.erb +1 -1
  332. data/app/views/decidim/pages/_tabbed.html.erb +5 -5
  333. data/app/views/decidim/pages/index.html.erb +1 -2
  334. data/app/views/decidim/reported_mailer/report.html.erb +4 -2
  335. data/app/views/decidim/scopes/picker.html.erb +5 -5
  336. data/app/views/decidim/searches/_resources_filter_block.html.erb +6 -6
  337. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +8 -8
  338. data/app/views/decidim/shared/_filters.html.erb +5 -5
  339. data/app/views/decidim/shared/_login_modal.html.erb +1 -1
  340. data/app/views/decidim/shared/_orders.html.erb +2 -3
  341. data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
  342. data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
  343. data/app/views/decidim/user_interests/_areas.html.erb +2 -2
  344. data/app/views/decidim/user_report_mailer/notify.html.erb +2 -2
  345. data/app/views/decidim/user_update_mailer/notify.html.erb +1 -1
  346. data/app/views/decidim/widgets/_data_picker.html.erb +1 -1
  347. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  348. data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
  349. data/app/views/devise/mailer/invite_admin.html.erb +2 -2
  350. data/app/views/devise/mailer/invite_admin.text.erb +2 -2
  351. data/app/views/devise/mailer/invite_collaborator.html.erb +2 -2
  352. data/app/views/devise/mailer/invite_collaborator.text.erb +2 -2
  353. data/app/views/devise/mailer/invite_private_user.html.erb +2 -2
  354. data/app/views/devise/mailer/invite_private_user.text.erb +2 -2
  355. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +1 -1
  356. data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +1 -1
  357. data/app/views/layouts/decidim/_application.html.erb +3 -6
  358. data/app/views/layouts/decidim/_data_consent_warning.html.erb +2 -2
  359. data/app/views/layouts/decidim/_decidim_javascript.html.erb +1 -1
  360. data/app/views/layouts/decidim/_head.html.erb +1 -1
  361. data/app/views/layouts/decidim/_head_extra.html.erb +2 -2
  362. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  363. data/app/views/layouts/decidim/_js_configuration.html.erb +7 -2
  364. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  365. data/app/views/layouts/decidim/_logo_mobile.html.erb +11 -0
  366. data/app/views/layouts/decidim/_mailer_logo.html.erb +2 -2
  367. data/app/views/layouts/decidim/_meta_tags_config.html.erb +1 -1
  368. data/app/views/layouts/decidim/_wrapper.html.erb +16 -9
  369. data/app/views/layouts/decidim/footer/_main.html.erb +2 -3
  370. data/app/views/layouts/decidim/footer/_main_intro.html.erb +2 -2
  371. data/app/views/layouts/decidim/footer/_main_legal.html.erb +2 -3
  372. data/app/views/layouts/decidim/footer/_main_links.html.erb +13 -11
  373. data/app/views/layouts/decidim/footer/_main_social_media_links.html.erb +8 -8
  374. data/app/views/layouts/decidim/header/_main.html.erb +9 -22
  375. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +4 -5
  376. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +11 -4
  377. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +24 -0
  378. data/app/views/layouts/decidim/header/_main_links_mobile_search.html.erb +0 -21
  379. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +12 -0
  380. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
  381. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +17 -0
  382. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +1 -1
  383. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  384. data/app/views/layouts/decidim/header/_menu_form_search_mobile.html.erb +16 -0
  385. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +25 -0
  386. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  387. data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
  388. data/app/views/layouts/decidim/shared/_layout_item.html.erb +0 -14
  389. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
  390. data/config/initializers/active_storage.rb +3 -0
  391. data/config/initializers/devise.rb +1 -1
  392. data/config/initializers/new_framework_defaults_7_0.rb +145 -0
  393. data/config/locales/ar.yml +3 -54
  394. data/config/locales/bg.yml +56 -57
  395. data/config/locales/ca.yml +78 -71
  396. data/config/locales/cs.yml +54 -63
  397. data/config/locales/de.yml +77 -70
  398. data/config/locales/el.yml +1 -32
  399. data/config/locales/en.yml +69 -62
  400. data/config/locales/es-MX.yml +69 -62
  401. data/config/locales/es-PY.yml +69 -62
  402. data/config/locales/es.yml +74 -67
  403. data/config/locales/eu.yml +251 -257
  404. data/config/locales/fi-plain.yml +70 -63
  405. data/config/locales/fi.yml +128 -121
  406. data/config/locales/fr-CA.yml +62 -61
  407. data/config/locales/fr.yml +56 -55
  408. data/config/locales/ga-IE.yml +0 -16
  409. data/config/locales/gl.yml +1 -22
  410. data/config/locales/hu.yml +38 -57
  411. data/config/locales/id-ID.yml +0 -18
  412. data/config/locales/is-IS.yml +1 -17
  413. data/config/locales/it.yml +0 -65
  414. data/config/locales/ja.yml +83 -74
  415. data/config/locales/lb.yml +0 -30
  416. data/config/locales/lt.yml +2 -49
  417. data/config/locales/lv.yml +0 -25
  418. data/config/locales/nl.yml +1 -30
  419. data/config/locales/no.yml +0 -30
  420. data/config/locales/pl.yml +69 -57
  421. data/config/locales/pt-BR.yml +5 -250
  422. data/config/locales/pt.yml +0 -36
  423. data/config/locales/ro-RO.yml +180 -329
  424. data/config/locales/ru.yml +0 -19
  425. data/config/locales/sk.yml +1 -26
  426. data/config/locales/sl.yml +0 -8
  427. data/config/locales/sv.yml +164 -605
  428. data/config/locales/tr-TR.yml +5 -33
  429. data/config/locales/uk.yml +1 -14
  430. data/config/locales/zh-CN.yml +0 -27
  431. data/config/locales/zh-TW.yml +1 -51
  432. data/config/routes.rb +0 -2
  433. data/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +1 -1
  434. data/db/migrate/20181025082245_add_timestamps_to_components.rb +1 -5
  435. data/db/migrate/20240110150230_rename_external_domain_whitelist_to_external_domain_allowlist.rb +7 -0
  436. data/db/migrate/20240326104215_remove_show_in_footer_in_static_pages.rb +7 -0
  437. data/db/migrate/20240401192628_change_name_on_decidim_organizations.rb +31 -0
  438. data/db/seeds/avatars/001.jpg +0 -0
  439. data/db/seeds/avatars/002.jpg +0 -0
  440. data/db/seeds/avatars/003.jpg +0 -0
  441. data/db/seeds/avatars/004.jpg +0 -0
  442. data/db/seeds/avatars/005.jpg +0 -0
  443. data/db/seeds/avatars/006.jpg +0 -0
  444. data/db/seeds/avatars/007.jpg +0 -0
  445. data/db/seeds/avatars/008.jpg +0 -0
  446. data/db/seeds/avatars/009.jpg +0 -0
  447. data/db/seeds/avatars/010.jpg +0 -0
  448. data/db/seeds/avatars/011.jpg +0 -0
  449. data/db/seeds/avatars/012.jpg +0 -0
  450. data/db/seeds/avatars/013.jpg +0 -0
  451. data/db/seeds/avatars/014.jpg +0 -0
  452. data/db/seeds/avatars/015.jpg +0 -0
  453. data/db/seeds/avatars/016.jpg +0 -0
  454. data/db/seeds/avatars/017.jpg +0 -0
  455. data/db/seeds/avatars/018.jpg +0 -0
  456. data/db/seeds/avatars/019.jpg +0 -0
  457. data/db/seeds/avatars/020.jpg +0 -0
  458. data/db/seeds/avatars/021.jpg +0 -0
  459. data/db/seeds/avatars/022.jpg +0 -0
  460. data/db/seeds/avatars/023.jpg +0 -0
  461. data/db/seeds/avatars/024.jpg +0 -0
  462. data/db/seeds/avatars/025.jpg +0 -0
  463. data/db/seeds/avatars/026.jpg +0 -0
  464. data/db/seeds/avatars/027.jpg +0 -0
  465. data/db/seeds/avatars/028.jpg +0 -0
  466. data/db/seeds/avatars/029.jpg +0 -0
  467. data/db/seeds/avatars/030.jpg +0 -0
  468. data/db/seeds/avatars/031.jpg +0 -0
  469. data/db/seeds/avatars/032.jpg +0 -0
  470. data/db/seeds/avatars/033.jpg +0 -0
  471. data/db/seeds/avatars/034.jpg +0 -0
  472. data/db/seeds/avatars/035.jpg +0 -0
  473. data/db/seeds/avatars/036.jpg +0 -0
  474. data/db/seeds/avatars/037.jpg +0 -0
  475. data/db/seeds/avatars/038.jpg +0 -0
  476. data/db/seeds/avatars/039.jpg +0 -0
  477. data/db/seeds/avatars/040.jpg +0 -0
  478. data/db/seeds/avatars/041.jpg +0 -0
  479. data/db/seeds/avatars/042.jpg +0 -0
  480. data/db/seeds/avatars/043.jpg +0 -0
  481. data/db/seeds/avatars/044.jpg +0 -0
  482. data/db/seeds/avatars/045.jpg +0 -0
  483. data/db/seeds/avatars/046.jpg +0 -0
  484. data/db/seeds/avatars/047.jpg +0 -0
  485. data/db/seeds/avatars/048.jpg +0 -0
  486. data/db/seeds/avatars/049.jpg +0 -0
  487. data/db/seeds/avatars/050.jpg +0 -0
  488. data/db/seeds/avatars/051.jpg +0 -0
  489. data/db/seeds/avatars/052.jpg +0 -0
  490. data/db/seeds/avatars/053.jpg +0 -0
  491. data/db/seeds/avatars/054.jpg +0 -0
  492. data/db/seeds/avatars/055.jpg +0 -0
  493. data/db/seeds/avatars/056.jpg +0 -0
  494. data/db/seeds/avatars/057.jpg +0 -0
  495. data/db/seeds/avatars/058.jpg +0 -0
  496. data/db/seeds/avatars/059.jpg +0 -0
  497. data/db/seeds/avatars/060.jpg +0 -0
  498. data/db/seeds/avatars/061.jpg +0 -0
  499. data/db/seeds/avatars/062.jpg +0 -0
  500. data/db/seeds/avatars/063.jpg +0 -0
  501. data/db/seeds/avatars/064.jpg +0 -0
  502. data/db/seeds/avatars/065.jpg +0 -0
  503. data/db/seeds/avatars/066.jpg +0 -0
  504. data/db/seeds/avatars/067.jpg +0 -0
  505. data/db/seeds/avatars/068.jpg +0 -0
  506. data/db/seeds/avatars/069.jpg +0 -0
  507. data/db/seeds/avatars/070.jpg +0 -0
  508. data/db/seeds/avatars/071.jpg +0 -0
  509. data/db/seeds/avatars/072.jpg +0 -0
  510. data/db/seeds/avatars/073.jpg +0 -0
  511. data/db/seeds/avatars/074.jpg +0 -0
  512. data/db/seeds/avatars/075.jpg +0 -0
  513. data/db/seeds/avatars/076.jpg +0 -0
  514. data/db/seeds/avatars/077.jpg +0 -0
  515. data/db/seeds/avatars/078.jpg +0 -0
  516. data/db/seeds/avatars/079.jpg +0 -0
  517. data/db/seeds/avatars/080.jpg +0 -0
  518. data/db/seeds/avatars/081.jpg +0 -0
  519. data/db/seeds/avatars/082.jpg +0 -0
  520. data/db/seeds/avatars/083.jpg +0 -0
  521. data/db/seeds/avatars/084.jpg +0 -0
  522. data/db/seeds/avatars/085.jpg +0 -0
  523. data/db/seeds/avatars/086.jpg +0 -0
  524. data/db/seeds/avatars/087.jpg +0 -0
  525. data/db/seeds/avatars/088.jpg +0 -0
  526. data/db/seeds/avatars/089.jpg +0 -0
  527. data/db/seeds/avatars/090.jpg +0 -0
  528. data/db/seeds/avatars/091.jpg +0 -0
  529. data/db/seeds/avatars/092.jpg +0 -0
  530. data/db/seeds/avatars/093.jpg +0 -0
  531. data/db/seeds/avatars/094.jpg +0 -0
  532. data/db/seeds/avatars/095.jpg +0 -0
  533. data/db/seeds/avatars/096.jpg +0 -0
  534. data/db/seeds/avatars/097.jpg +0 -0
  535. data/db/seeds/avatars/098.jpg +0 -0
  536. data/db/seeds/avatars/099.jpg +0 -0
  537. data/db/seeds/avatars/100.jpg +0 -0
  538. data/db/seeds/avatars/CREDITS.md +114 -0
  539. data/db/seeds/avatars/README.md +25 -0
  540. data/decidim-core.gemspec +8 -9
  541. data/lib/decidim/acts_as_author.rb +1 -1
  542. data/lib/decidim/admin_filter.rb +44 -0
  543. data/lib/decidim/admin_filters_registry.rb +55 -0
  544. data/lib/decidim/amendable.rb +1 -2
  545. data/lib/decidim/api/functions/component_finder_base.rb +1 -1
  546. data/lib/decidim/api/functions/component_list.rb +1 -1
  547. data/lib/decidim/api/functions/needs_api_filter_and_order.rb +3 -3
  548. data/lib/decidim/api/functions/participatory_space_finder_base.rb +2 -12
  549. data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -1
  550. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +3 -3
  551. data/lib/decidim/api/interfaces/author_interface.rb +1 -1
  552. data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -1
  553. data/lib/decidim/api/types/component_type.rb +0 -7
  554. data/lib/decidim/api/types/organization_type.rb +1 -1
  555. data/lib/decidim/api/types/user_group_type.rb +1 -5
  556. data/lib/decidim/api/types/user_type.rb +1 -5
  557. data/lib/decidim/asset_router/pipeline.rb +2 -2
  558. data/lib/decidim/asset_router/storage.rb +11 -214
  559. data/lib/decidim/assets/tailwind/instance.rb +1 -1
  560. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +8 -3
  561. data/lib/decidim/attribute_object/model.rb +2 -2
  562. data/lib/decidim/attribute_object/type_resolver.rb +1 -3
  563. data/lib/decidim/attribute_object.rb +2 -2
  564. data/lib/decidim/attributes/time_with_zone.rb +1 -11
  565. data/lib/decidim/attributes.rb +0 -6
  566. data/lib/decidim/authorable.rb +5 -0
  567. data/lib/decidim/command.rb +2 -2
  568. data/lib/decidim/commands/create_resource.rb +63 -0
  569. data/lib/decidim/commands/destroy_resource.rb +74 -0
  570. data/lib/decidim/commands/hook_error.rb +8 -0
  571. data/lib/decidim/commands/resource_handler.rb +85 -0
  572. data/lib/decidim/commands/update_resource.rb +64 -0
  573. data/lib/decidim/component_manifest.rb +3 -1
  574. data/lib/decidim/component_validator.rb +1 -1
  575. data/lib/decidim/content_blocks/has_related_components.rb +1 -1
  576. data/lib/decidim/content_parsers/resource_parser.rb +2 -2
  577. data/lib/decidim/content_parsers.rb +0 -1
  578. data/lib/decidim/content_processor.rb +1 -1
  579. data/lib/decidim/content_renderers.rb +0 -1
  580. data/lib/decidim/content_security_policy.rb +1 -1
  581. data/lib/decidim/core/engine.rb +13 -58
  582. data/lib/decidim/core/menu.rb +13 -3
  583. data/lib/decidim/core/seeds.rb +120 -147
  584. data/lib/decidim/core/test/factories.rb +24 -31
  585. data/lib/decidim/core/test/shared_examples/acts_as_author_examples.rb +1 -1
  586. data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +2 -2
  587. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -3
  588. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +4 -4
  589. data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +1 -1
  590. data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +1 -1
  591. data/lib/decidim/core/test/shared_examples/comments_examples.rb +90 -107
  592. data/lib/decidim/core/test/shared_examples/comments_reports_examples.rb +4 -4
  593. data/lib/decidim/core/test/shared_examples/digest_mail_examples.rb +1 -1
  594. data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +1 -1
  595. data/lib/decidim/core/test/shared_examples/editor_shared_examples.rb +7 -7
  596. data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +1 -1
  597. data/lib/decidim/core/test/shared_examples/follows_examples.rb +6 -11
  598. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +4 -2
  599. data/lib/decidim/core/test/shared_examples/has_attachments.rb +3 -2
  600. data/lib/decidim/core/test/shared_examples/has_contextual_help.rb +4 -4
  601. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  602. data/lib/decidim/core/test/shared_examples/logo_email.rb +1 -1
  603. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +9 -9
  604. data/lib/decidim/core/test/shared_examples/map_examples.rb +5 -5
  605. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +7 -7
  606. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +3 -3
  607. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +3 -3
  608. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +4 -4
  609. data/lib/decidim/core/test/shared_examples/reports_examples.rb +5 -5
  610. data/lib/decidim/core/test/shared_examples/rich_text_editor_examples.rb +10 -10
  611. data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +1 -1
  612. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -8
  613. data/lib/decidim/core/test/shared_examples/share_link_examples.rb +2 -2
  614. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -1
  615. data/lib/decidim/core/test/shared_examples/space_cell_changes_button_text_cta.rb +3 -3
  616. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +15 -113
  617. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
  618. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -2
  619. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  620. data/lib/decidim/core/version.rb +1 -1
  621. data/lib/decidim/core.rb +24 -17
  622. data/lib/decidim/dependency_resolver.rb +3 -3
  623. data/lib/decidim/diffy_extension.rb +1 -19
  624. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +2 -1
  625. data/lib/decidim/engine_router.rb +2 -2
  626. data/lib/decidim/events/base_event.rb +19 -0
  627. data/lib/decidim/events/simple_event.rb +1 -0
  628. data/lib/decidim/exporters/export_manifest.rb +1 -1
  629. data/lib/decidim/faker/localized.rb +3 -3
  630. data/lib/decidim/form_builder.rb +5 -5
  631. data/lib/decidim/hashtag.rb +1 -1
  632. data/lib/decidim/jsonb_attributes.rb +4 -4
  633. data/lib/decidim/manifest_messages.rb +2 -2
  634. data/lib/decidim/map/autocomplete.rb +0 -1
  635. data/lib/decidim/organization_settings.rb +5 -8
  636. data/lib/decidim/paddable.rb +1 -1
  637. data/lib/decidim/participable.rb +1 -1
  638. data/lib/decidim/participatory_space_manifest.rb +1 -1
  639. data/lib/decidim/participatory_space_user.rb +0 -4
  640. data/lib/decidim/query_extensions.rb +26 -0
  641. data/lib/decidim/resourceable.rb +1 -1
  642. data/lib/decidim/search_resource_fields_mapper.rb +2 -2
  643. data/lib/decidim/searchable.rb +3 -3
  644. data/lib/decidim/seeds.rb +62 -0
  645. data/lib/decidim/settings_manifest.rb +0 -2
  646. data/lib/decidim/stats_registry.rb +2 -2
  647. data/lib/decidim/translatable_attributes.rb +4 -9
  648. data/lib/decidim/translatable_resource.rb +1 -1
  649. data/lib/decidim/view_hooks.rb +1 -1
  650. data/lib/decidim/view_model.rb +5 -1
  651. data/lib/decidim/webpacker/esbuild.config.js +14 -0
  652. data/lib/decidim/webpacker/shakapacker.yml +2 -2
  653. data/lib/decidim/webpacker/tsconfig.json +11 -0
  654. data/lib/decidim/webpacker/webpack/custom.js +13 -35
  655. data/lib/devise/models/decidim_newsletterable.rb +1 -1
  656. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -2
  657. data/lib/tasks/decidim_locales_tasks.rake +1 -1
  658. data/lib/tasks/decidim_mailers_tasks.rake +2 -2
  659. data/lib/tasks/decidim_metrics_tasks.rake +6 -6
  660. data/lib/tasks/decidim_procfile.rake +9 -3
  661. data/lib/tasks/decidim_tasks.rake +5 -4
  662. data/lib/tasks/decidim_webpacker_tasks.rake +126 -117
  663. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +80 -0
  664. data/lib/tasks/upgrade/decidim_content_blocks_tasks.rake +50 -0
  665. data/lib/tasks/upgrade/decidim_deduplicate_endorsements.rake +1 -1
  666. data/lib/tasks/upgrade/decidim_fix_categorization.rake +6 -132
  667. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +1 -1
  668. data/lib/tasks/upgrade/decidim_fix_short_url_resolver.rake +1 -1
  669. data/lib/tasks/upgrade/decidim_moderation_tasks.rake +1 -1
  670. data/lib/tasks/upgrade/decidim_user_moderation.rake +1 -1
  671. metadata +219 -101
  672. data/app/cells/decidim/content_blocks/cta/show.erb +0 -12
  673. data/app/cells/decidim/content_blocks/cta_cell.rb +0 -31
  674. data/app/cells/decidim/footer_pages/pages.erb +0 -3
  675. data/app/cells/decidim/footer_pages/topics.erb +0 -12
  676. data/app/cells/decidim/footer_pages_cell.rb +0 -68
  677. data/app/controllers/concerns/decidim/direct_upload.rb +0 -82
  678. data/app/helpers/concerns/decidim/user_role_checker.rb +0 -46
  679. data/app/packs/src/decidim/remote_tooltips.js +0 -38
  680. data/app/packs/src/decidim/vendor/modernizr.js +0 -5
  681. data/app/queries/decidim/similar_emendations.rb +0 -56
  682. data/app/uploaders/decidim/cw/application_uploader.rb +0 -77
  683. data/app/uploaders/decidim/cw/attachment_uploader.rb +0 -56
  684. data/app/uploaders/decidim/cw/avatar_uploader.rb +0 -24
  685. data/app/uploaders/decidim/cw/banner_image_uploader.rb +0 -7
  686. data/app/uploaders/decidim/cw/download_your_data_uploader.rb +0 -15
  687. data/app/uploaders/decidim/cw/downloader.rb +0 -9
  688. data/app/uploaders/decidim/cw/hero_image_uploader.rb +0 -10
  689. data/app/uploaders/decidim/cw/homepage_image_uploader.rb +0 -14
  690. data/app/uploaders/decidim/cw/image_uploader.rb +0 -78
  691. data/app/uploaders/decidim/cw/newsletter_template_image_uploader.rb +0 -38
  692. data/app/uploaders/decidim/cw/oauth_application_logo_uploader.rb +0 -10
  693. data/app/uploaders/decidim/cw/official_image_footer_uploader.rb +0 -10
  694. data/app/uploaders/decidim/cw/official_image_header_uploader.rb +0 -10
  695. data/app/uploaders/decidim/cw/open_data_uploader.rb +0 -23
  696. data/app/uploaders/decidim/cw/organization_favicon_uploader.rb +0 -18
  697. data/app/uploaders/decidim/cw/organization_logo_uploader.rb +0 -10
  698. data/app/uploaders/decidim/cw/record_image_uploader.rb +0 -15
  699. data/app/uploaders/decidim/downloader.rb +0 -9
  700. data/app/views/decidim/amendments/compare_draft.html.erb +0 -18
  701. data/app/views/layouts/decidim/_edit_link.html.erb +0 -0
  702. data/app/views/layouts/decidim/header/_main_links_mobile.html.erb +0 -36
  703. data/config/initializers/carrierwave.rb +0 -15
  704. data/config/locales/bn-BD.yml +0 -1
  705. data/config/locales/bs-BA.yml +0 -98
  706. data/lib/decidim/attributes/rich_text.rb +0 -38
  707. data/lib/decidim/carrier_wave_migrator_service.rb +0 -287
  708. data/lib/decidim/content_parsers/blob_parser.rb +0 -93
  709. data/lib/decidim/content_renderers/blob_renderer.rb +0 -90
  710. data/lib/decidim/seven_zip_wrapper.rb +0 -29
  711. data/lib/tasks/decidim_active_storage_migration_tasks.rake +0 -114
  712. data/lib/tasks/decidim_content_blocks_tasks.rake +0 -48
  713. data/lib/tasks/upgrade/decidim_attachments.rake +0 -14
  714. /data/app/views/layouts/decidim/header/{_menu_breadcrumb_main_dropdown.html.erb → _menu_breadcrumb_main_dropdown_desktop.html.erb} +0 -0
@@ -22,7 +22,7 @@ module Decidim
22
22
  # HasBreadcrumbItems concern with the add_breadcrumb_item_from_menu
23
23
  # method. The list contains the identifier of a menu to insert its items
24
24
  # in the breadcrumb displaying the active element.
25
- # * controller_breadcrumb_items: A list of additional breadrumb items
25
+ # * controller_breadcrumb_items: A list of additional breadcrumb items
26
26
  # which is expected to receive its elements from controllers and contains
27
27
  # the last items of the breadcrumb.
28
28
  def breadcrumb_items(context = :public)
@@ -15,7 +15,7 @@ module Decidim
15
15
  end
16
16
 
17
17
  def current_component
18
- from_context.component
18
+ context[:controller].try(:current_component) || from_context.component
19
19
  end
20
20
 
21
21
  def withdrawable?
@@ -92,7 +92,7 @@ module Decidim
92
92
  end
93
93
 
94
94
  def filter_global_scopes_values
95
- filter_scopes_values_from(current_organization.scopes.top_level.includes(:scope_type, :children))
95
+ filter_scopes_values_from(current_organization.scopes.top_level)
96
96
  end
97
97
 
98
98
  def filter_areas_values
@@ -16,7 +16,7 @@ module Decidim
16
16
  # Finds the CTA button path to reuse it in other places.
17
17
  def cta_button_path
18
18
  if current_organization.cta_button_path.present?
19
- "/#{current_organization.cta_button_path}"
19
+ current_organization.cta_button_path
20
20
  elsif Decidim::ParticipatoryProcess.where(organization: current_organization).published.any?
21
21
  decidim_participatory_processes.participatory_processes_path
22
22
  elsif current_user
@@ -3,7 +3,7 @@
3
3
  module Decidim
4
4
  # Helper that provides a single method to create datalist select.
5
5
  module DatalistSelectHelper
6
- # Public: Creates HTML for datalist select so that you can use seperate ids and labels.
6
+ # Public: Creates HTML for datalist select so that you can use separate ids and labels.
7
7
  #
8
8
  # items - Items in datalist, item should have id and name.
9
9
  # options - a Hash with options
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Decidim
4
- # A heper to expose an easy way to add authorization forms in a view.
4
+ # A helper to expose an easy way to add authorization forms in a view.
5
5
  module DecidimFormHelper
6
6
  # A custom form for that injects client side validations with Abide.
7
7
  #
@@ -12,7 +12,7 @@ module Decidim
12
12
  # Returns a String.
13
13
  def decidim_form_for(record, options = {}, &)
14
14
  options[:data] ||= {}
15
- options[:data].update(abide: true, "live-validate" => true, "validate-on-blur" => true)
15
+ options[:data].update(:abide => true, "live-validate" => true, "validate-on-blur" => true)
16
16
 
17
17
  options[:html] ||= {}
18
18
  options[:html].update(novalidate: true) unless options[:html].has_key?(:novalidate)
@@ -25,7 +25,7 @@ module Decidim
25
25
  if record.is_a?(ActiveRecord::Base)
26
26
  object = record.is_a?(Array) ? record.last : record
27
27
  format = options[:format]
28
- apply_form_for_options!(record, object, options) if object
28
+ apply_form_for_options!(object, options) if object
29
29
  options[:format] = format if format
30
30
  end
31
31
 
@@ -34,7 +34,7 @@ module Decidim
34
34
 
35
35
  private
36
36
 
37
- # Creates a unique namespace for a filter form to prevent dupliacte IDs in
37
+ # Creates a unique namespace for a filter form to prevent duplicate IDs in
38
38
  # the DOM when multiple filter forms are rendered with the same fields (e.g.
39
39
  # for desktop and mobile).
40
40
  def filter_form_namespace
@@ -3,6 +3,7 @@
3
3
  module Decidim
4
4
  # View helpers related to the layout.
5
5
  module LayoutHelper
6
+ include Decidim::OrganizationHelper
6
7
  include Decidim::ModalHelper
7
8
  include Decidim::TooltipHelper
8
9
 
@@ -129,28 +130,6 @@ module Decidim
129
130
  }
130
131
  end
131
132
 
132
- # Renders a view with the customizable CSS variables in two flavours:
133
- # 1. as a hexadecimal valid CSS color (ie: #ff0000)
134
- # 2. as a disassembled RGB components (ie: 255 0 0)
135
- #
136
- # Example:
137
- #
138
- # --primary: #ff0000;
139
- # --primary-rgb: 255 0 0
140
- #
141
- # Hexadecimal variables can be used as a normal CSS color:
142
- #
143
- # color: var(--primary)
144
- #
145
- # While the disassembled variant can be used where you need to manipulate
146
- # the color somehow (ie: adding a background transparency):
147
- #
148
- # background-color: rgba(var(--primary-rgb), 0.5)
149
- def organization_colors
150
- css = current_organization.colors.each.map { |k, v| "--#{k}: #{v};--#{k}-rgb: #{v[1..2].hex} #{v[3..4].hex} #{v[5..6].hex};" }.join
151
- render partial: "layouts/decidim/organization_colors", locals: { css: }
152
- end
153
-
154
133
  def current_user_unread_data
155
134
  return {} if current_user.blank?
156
135
 
@@ -161,50 +140,8 @@ module Decidim
161
140
  end
162
141
  end
163
142
 
164
- def organization_description_label
165
- @organization_description_label ||= if empty_organization_description?
166
- t("decidim.pages.home.footer_sub_hero.footer_sub_hero_body_html")
167
- else
168
- decidim_sanitize_admin(translated_attribute(current_organization.description))
169
- end
170
- end
171
-
172
- def current_url(params = request.parameters)
173
- return url_for(params) if respond_to?(:current_participatory_space) || respond_to?(:current_component)
174
-
175
- each_decidim_engine do |helpers|
176
- return helpers.url_for(params)
177
- rescue ActionController::UrlGenerationError
178
- # Continue to next engine in case the URL is not available.
179
- end
180
-
181
- main_app.url_for(params)
182
- rescue ActionController::UrlGenerationError
183
- "#{request.base_url}#{"?#{params.to_query}" unless params.empty?}"
184
- end
185
-
186
143
  private
187
144
 
188
- def empty_organization_description?
189
- organization_description = translated_attribute(current_organization.description)
190
-
191
- organization_description.blank? || organization_description == "<p></p>"
192
- end
193
-
194
- def each_decidim_engine
195
- Rails.application.railties.each do |engine|
196
- next unless engine.is_a?(Rails::Engine)
197
- next unless engine.isolated?
198
- next unless engine.engine_name.start_with?("decidim_")
199
- next unless respond_to?(engine.engine_name)
200
-
201
- yield public_send(engine.engine_name)
202
- end
203
- return unless respond_to?(:decidim)
204
-
205
- yield decidim
206
- end
207
-
208
145
  def tag_builder
209
146
  @tag_builder ||= ActionView::Helpers::TagHelper::TagBuilder.new(self)
210
147
  end
@@ -21,7 +21,7 @@ module Decidim
21
21
  # locales.
22
22
  #
23
23
  # collection - an Array of Strings. By default it uses all the available
24
- # locales in Decidim, but you can passa nother collection of locales (for
24
+ # locales in Decidim, but you can pass another collection of locales (for
25
25
  # example, the available locales for an organization)
26
26
  def localized_locales(collection = Decidim.available_locales)
27
27
  klass = Class.new do
@@ -35,12 +35,7 @@ module Decidim
35
35
  data: { "external-link": "text-only" }
36
36
  }.merge(map_html_options)
37
37
  return link_to(map_url, html_options) do
38
- # We also add the latitude and the longitude to prevent the Workbox cache to be overly aggressive when updating a map
39
- image_tag decidim.static_map_path(
40
- sgid: resource.to_sgid.to_s,
41
- latitude: resource.latitude,
42
- longitude: resource.longitude
43
- ), alt: "#{map_service_brand} - #{address_text}"
38
+ image_tag decidim.static_map_path(sgid: resource.to_sgid.to_s), alt: "#{map_service_brand} - #{address_text}"
44
39
  end
45
40
  end
46
41
  end
@@ -43,13 +43,21 @@ module Decidim
43
43
  )
44
44
  end
45
45
 
46
+ def mobile_breadcrumb_root_menu
47
+ @mobile_breadcrumb_root_menu ||= ::Decidim::BreadcrumbRootMenuPresenter.new(
48
+ :mobile_menu,
49
+ self,
50
+ container_options: { class: "menu-bar__main-dropdown__menu" }
51
+ )
52
+ end
53
+
46
54
  def footer_menu
47
55
  @footer_menu ||= ::Decidim::FooterMenuPresenter.new(
48
56
  :menu,
49
57
  self,
50
58
  element_class: "font-semibold underline",
51
59
  active_class: "is-active",
52
- container_options: { class: "space-y-4 break-inside-avoid", role: :menu },
60
+ container_options: { class: "space-y-4 break-inside-avoid" },
53
61
  label: t("layouts.decidim.footer.decidim_title")
54
62
  )
55
63
  end
@@ -3,13 +3,13 @@
3
3
  module Decidim
4
4
  # Helper that provides convenient methods to deal with the page meta tags.
5
5
  module MetaTagsHelper
6
- # Public: Sets the given metatags for the page. It is a wrapper for the individual
6
+ # Sets the given metatags for the page. It is a wrapper for the individual
7
7
  # methods, so that you can set multiple values with a single call. See the docs for
8
8
  # the other methods to see how they work.
9
9
  #
10
- # tags - A Hash containing the meta tag name as keys and its content as values.
10
+ # @param [Hash] tags - A Hash containing the meta tag name as keys and its content as values.
11
11
  #
12
- # Returns nothing.
12
+ # @return [nil]
13
13
  def add_decidim_meta_tags(tags)
14
14
  add_decidim_page_title(tags[:title])
15
15
  add_decidim_meta_description(tags[:description])
@@ -18,9 +18,11 @@ module Decidim
18
18
  add_decidim_meta_image_url(add_base_url_to(tags[:image_url]))
19
19
  end
20
20
 
21
- # Public: Add base url to path if path does not include host.
22
- # path - A String containing path (e.g. "/proposals/1" )
23
- # Returns a String of URL including base URL and path, or path if it is blank.
21
+ # Add base url to path if path does not include host.
22
+ #
23
+ # @parma [String] path - A String containing path (e.g. "/proposals/1" )
24
+ #
25
+ # @return [String] - a String of URL including base URL and path, or path if it is blank.
24
26
  def add_base_url_to(path)
25
27
  return path if path.blank?
26
28
  return path if URI.parse(path).host.present?
@@ -28,8 +30,9 @@ module Decidim
28
30
  "#{resolve_base_url}#{path}"
29
31
  end
30
32
 
31
- # Public: Resolve base url (example: https://www.decidim.org) without url params
32
- # Returns a String of base URL
33
+ # Resolve base url (example: https://www.decidim.org) without url params
34
+ #
35
+ # @return [String] - a String of base URL
33
36
  def resolve_base_url
34
37
  return request.base_url if respond_to?(:request) && request&.base_url.present?
35
38
 
@@ -41,20 +44,20 @@ module Decidim
41
44
  end
42
45
  end
43
46
 
44
- # Public: Accumulates the given `title` so that they can be chained. Since Rails views
45
- # are rendered inside-out, `title` is appended to an array. This way the beggining of
47
+ # Accumulates the given `title` so that they can be chained. Since Rails views
48
+ # are rendered inside-out, `title` is appended to an array. This way the beginning of
46
49
  # the title will be the most specific one. Use the `decidim_page_title` method to
47
50
  # render the title whenever you need to (most surely, in the `<title>` tag in the HTML
48
51
  # head and in some `title` metatags).
49
52
  #
50
- # Example:
53
+ # @example
51
54
  # add_decidim_page_title("My Process")
52
55
  # add_decidim_page_title("My Organization")
53
56
  # decidim_page_title # => "My Process - My Organization"
54
57
  #
55
- # title - A String to be added to the title
58
+ # @param [String] title - A String to be added to the title
56
59
  #
57
- # Returns an Array of Strings.
60
+ # @return [Array<String>]
58
61
  def add_decidim_page_title(title)
59
62
  @decidim_page_title ||= []
60
63
  return @decidim_page_title if title.blank?
@@ -62,11 +65,11 @@ module Decidim
62
65
  @decidim_page_title << title
63
66
  end
64
67
 
65
- # Public: Renders the title for a page. Use the `add_decidim_page_title` method to
68
+ # Renders the title for a page. Use the `add_decidim_page_title` method to
66
69
  # accumulate elements for the title. Basically, it joins the elements of the title
67
70
  # array with `" - "`.
68
71
  #
69
- # Returns a String.
72
+ # @return [String]
70
73
  def decidim_page_title
71
74
  (@decidim_page_title || []).join(" - ")
72
75
  end
@@ -80,9 +83,9 @@ module Decidim
80
83
  # is the last one to be rendered. You can put there a basic content and override it
81
84
  # in other layers.
82
85
  #
83
- # description - The String to be set as description
86
+ # @param [String] description - The String to be set as description
84
87
  #
85
- # Returns nothing.
88
+ # @return [nil]
86
89
  def add_decidim_meta_description(description)
87
90
  @decidim_meta_description ||= strip_tags(description)
88
91
  end
@@ -93,9 +96,9 @@ module Decidim
93
96
  # is the last one to be rendered. You can put there a basic content and override it
94
97
  # in other layers.
95
98
  #
96
- # twitter_handler - The String to be set as Twitter handler
99
+ # @param [String] twitter_handler - The String to be set as Twitter handler
97
100
  #
98
- # Returns nothing.
101
+ # @return [nil]
99
102
  def add_decidim_meta_twitter_handler(twitter_handler)
100
103
  @decidim_meta_twitter_handler ||= twitter_handler
101
104
  end
@@ -106,9 +109,9 @@ module Decidim
106
109
  # is the last one to be rendered. You can put there a basic content and override it
107
110
  # in other layers.
108
111
  #
109
- # url - The String to be set as URL
112
+ # @param [String] url - The String to be set as URL
110
113
  #
111
- # Returns nothing.
114
+ # @return [nil]
112
115
  def add_decidim_meta_url(url)
113
116
  @decidim_meta_url ||= url
114
117
  end
@@ -119,9 +122,9 @@ module Decidim
119
122
  # is the last one to be rendered. You can put there a basic content and override it
120
123
  # in other layers.
121
124
  #
122
- # image_url - The String to be set as image URL
125
+ # @param [String] image_url - The String to be set as image URL
123
126
  #
124
- # Returns nothing.
127
+ # @return [nil]
125
128
  def add_decidim_meta_image_url(image_url)
126
129
  @decidim_meta_image_url ||= image_url
127
130
  end
@@ -8,7 +8,7 @@ module Decidim
8
8
  # you also can add your custom close button through data-dialog-close="<seed>"
9
9
  #
10
10
  # Options available:
11
- # - id: String. Unique identificator for the dialog, if the page has distinct modal windows (default: "")
11
+ # - id: String. Unique identifier for the dialog, if the page has distinct modal windows (default: "")
12
12
  # - class: String. CSS classes for the modal content.
13
13
  # - closable: Boolean. Whether the modal can be closed or not (default: true)
14
14
  module ModalHelper
@@ -7,7 +7,7 @@ module Decidim
7
7
  # (Note) This method requires the javascript 'decidim/orders' to be
8
8
  # present in the page.
9
9
  #
10
- # orders - An array of order criterias
10
+ # orders - An array of order criteria
11
11
  # options - An optional hash of options
12
12
  # * i18n_scope - The scope of the i18n translations
13
13
  def order_selector(orders, options = {})
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ # View helpers related to the organization.
5
+
6
+ module OrganizationHelper
7
+ include Decidim::TranslatableAttributes
8
+
9
+ # Renders a view with the customizable CSS variables in two flavours:
10
+ # 1. as a hexadecimal valid CSS color (ie: #ff0000)
11
+ # 2. as a disassembled RGB components (ie: 255 0 0)
12
+ #
13
+ # Example:
14
+ #
15
+ # --primary: #ff0000;
16
+ # --primary-rgb: 255 0 0
17
+ #
18
+ # Hexadecimal variables can be used as a normal CSS color:
19
+ #
20
+ # color: var(--primary)
21
+ #
22
+ # While the disassembled variant can be used where you need to manipulate
23
+ # the color somehow (ie: adding a background transparency):
24
+ #
25
+ # background-color: rgba(var(--primary-rgb), 0.5)
26
+ def organization_colors
27
+ css = current_organization.colors.each.map { |k, v| "--#{k}: #{v};--#{k}-rgb: #{v[1..2].hex} #{v[3..4].hex} #{v[5..6].hex};" }.join
28
+ render partial: "layouts/decidim/organization_colors", locals: { css: }
29
+ end
30
+
31
+ def organization_description_label
32
+ @organization_description_label ||= if empty_organization_description?
33
+ t("decidim.pages.home.footer_sub_hero.footer_sub_hero_body_html")
34
+ else
35
+ decidim_sanitize_admin(translated_attribute(current_organization.description))
36
+ end
37
+ end
38
+
39
+ def organization_name(organization = current_organization)
40
+ translated_attribute(organization.name, organization)
41
+ end
42
+
43
+ def current_organization_name
44
+ organization_name(current_organization)
45
+ end
46
+
47
+ private
48
+
49
+ def empty_organization_description?
50
+ organization_description = translated_attribute(current_organization.description)
51
+
52
+ organization_description.blank? || organization_description == "<p></p>"
53
+ end
54
+ end
55
+ end
@@ -11,14 +11,16 @@ module Decidim
11
11
  def decidim_paginate(collection, paginate_params = {})
12
12
  return if collection.total_pages <= 1
13
13
 
14
- per_page = (params[:per_page] || paginate_params[:per_page] || Decidim::Paginable::OPTIONS.first).to_i
15
-
16
14
  content_tag :div, class: "flex flex-col-reverse md:flex-row items-center justify-between gap-1 py-8 md:py-16", data: { pagination: "" } do
17
15
  template = ""
18
- template += render(partial: "decidim/shared/results_per_page", locals: { per_page: }, formats: [:html]) if collection.total_pages.positive?
16
+ template += render(partial: "decidim/shared/results_per_page", formats: [:html]) if collection.total_pages.positive?
19
17
  template += paginate collection, window: 2, outer_window: 1, theme: "decidim", params: paginate_params
20
18
  template.html_safe
21
19
  end
22
20
  end
21
+
22
+ def per_page
23
+ params[:per_page].to_i || Decidim::Paginable::OPTIONS.first
24
+ end
23
25
  end
24
26
  end
@@ -47,12 +47,5 @@ module Decidim
47
47
 
48
48
  ::Decidim::ResourceLocatorPresenter.new(resource)
49
49
  end
50
-
51
- # Returns a descriptive title for the resource
52
- def resource_title(resource)
53
- title = resource.try(:title) || resource.try(:name) || resource.try(:subject) || "#{resource.model_name.human} ##{resource.id}"
54
- title = translated_attribute(title) if title.is_a?(Hash)
55
- title
56
- end
57
50
  end
58
51
  end
@@ -37,22 +37,13 @@ module Decidim
37
37
  end
38
38
  end
39
39
 
40
- # Converts the blob and blob variant references to blob URLs.
41
- def decidim_rich_text(html, options = {})
42
- renderer = Decidim::ContentProcessor.renderer_klass(:blob).constantize.new(html)
43
- renderer.render(options)
44
- end
45
-
46
40
  def decidim_sanitize_editor(html, options = {})
47
41
  content_tag(:div, decidim_sanitize(html, options), class: %w(rich-text-display))
48
42
  end
49
43
 
50
44
  def decidim_sanitize_editor_admin(html, options = {})
51
45
  html = Decidim::IframeDisabler.new(html, options).perform
52
- decidim_sanitize_editor(
53
- decidim_rich_text(html),
54
- { scrubber: Decidim::AdminInputScrubber.new }.merge(options)
55
- )
46
+ decidim_sanitize_editor(html, { scrubber: Decidim::AdminInputScrubber.new }.merge(options))
56
47
  end
57
48
 
58
49
  def decidim_html_escape(text)
@@ -60,7 +51,7 @@ module Decidim
60
51
  end
61
52
 
62
53
  def decidim_url_escape(text)
63
- decidim_html_escape(text).sub(/^\s*javascript:/, "")
54
+ decidim_html_escape(text).sub(/^javascript:/, "")
64
55
  end
65
56
 
66
57
  def decidim_sanitize_translated(text)
@@ -9,7 +9,7 @@ module Decidim
9
9
  Option = Struct.new(:id, :name)
10
10
 
11
11
  # Checks if the resource should show its scope or not.
12
- # resource - the resource to analize
12
+ # resource - the resource to analyze
13
13
  #
14
14
  # Returns boolean.
15
15
  def has_visible_scopes?(resource)
@@ -53,14 +53,13 @@ module Decidim
53
53
  # options - An optional Hash with options:
54
54
  #
55
55
  # Returns nothing.
56
- def scopes_select_field(form, name, root: false, options: {}, html_options: {})
56
+ def scopes_select_field(form, name, root: false, options: {})
57
57
  options = options.merge(include_blank: I18n.t("decidim.scopes.prompt")) unless options.has_key?(:include_blank)
58
58
 
59
59
  form.select(
60
60
  name,
61
61
  ordered_scopes_descendants_for_select(root),
62
- options,
63
- html_options
62
+ options
64
63
  )
65
64
  end
66
65
 
@@ -7,7 +7,7 @@ module Decidim
7
7
  #
8
8
  # klass_name - a String representing the class name of the resource to render
9
9
  # count - (optional) the number of resources so that the I18n backend
10
- # can decide to translate into singluar or plural form.
10
+ # can decide to translate into singular or plural form.
11
11
  def searchable_resource_human_name(resource, count: 5)
12
12
  resource = if resource.is_a?(String)
13
13
  resource.constantize
@@ -15,14 +15,14 @@ module Decidim
15
15
  # @option kwargs [Float] :params the URL query parameters that should be
16
16
  # included in the URL where the short link redirects to
17
17
  # @return [String] The short URL
18
- def short_url(**kwargs)
18
+ def short_url(**)
19
19
  target = respond_to?(:current_component) && current_component
20
20
  target ||= respond_to?(:current_participatory_space) && current_participatory_space
21
21
  target ||= respond_to?(:current_organization) && current_organization
22
22
  target ||= Rails.application
23
23
 
24
24
  mounted_engine = target.try(:mounted_engine) || EngineResolver.new(_routes).mounted_name
25
- ShortLink.to(target, mounted_engine, **kwargs).short_url
25
+ ShortLink.to(target, mounted_engine, **).short_url
26
26
  end
27
27
  end
28
28
  end
@@ -14,10 +14,10 @@ module Decidim
14
14
  # options - Any other option to delegate to the individual I18n.t calls
15
15
  #
16
16
  # Returns a Hash with the locales as keys and the translations as values.
17
- def multi_translation(key, locales = Decidim.available_locales, **options)
17
+ def multi_translation(key, locales = Decidim.available_locales, **)
18
18
  locales.each_with_object({}) do |locale, result|
19
19
  I18n.with_locale(locale) do
20
- result[locale.to_sym] = I18n.t(key, **options)
20
+ result[locale.to_sym] = I18n.t(key, **)
21
21
  end
22
22
  end
23
23
  end
@@ -4,7 +4,7 @@ module Decidim
4
4
  module TwitterSearchHelper
5
5
  # Builds the URL for Twitter's hashtag search.
6
6
  #
7
- # @param hashtag [String] The hasthag to search
7
+ # @param hashtag [String] The hashtag to search
8
8
  #
9
9
  # @return [String]
10
10
  def twitter_hashtag_url(hashtag)
@@ -14,7 +14,6 @@ module Decidim
14
14
  #
15
15
  # Returns a String with the menu tab.
16
16
  def user_profile_tab(text, link, options = {})
17
- cls = %w(tabs-title)
18
17
  aria = {}
19
18
  if is_active_link?(link, (options[:aria_link_type] || :inclusive))
20
19
  cls << "is-active"
@@ -8,10 +8,10 @@ module Decidim
8
8
  user = Decidim::User.find_by(id: user_id)
9
9
  return if user.blank?
10
10
 
11
- should_notify = force || NotificationsDigestSendingDecider.must_notify?(user, time:)
11
+ should_notify = force || NotificationsDigestSendingDecider.must_notify?(user, time)
12
12
  return unless should_notify
13
13
 
14
- notification_ids = user.notifications.try(frequency, time:).pluck(:id)
14
+ notification_ids = user.notifications.try(frequency, time).pluck(:id)
15
15
  return if notification_ids.blank?
16
16
 
17
17
  NotificationsDigestMailer.digest_mail(user, notification_ids).deliver_later
@@ -6,6 +6,10 @@ module Decidim
6
6
  class ApplicationMailer < ActionMailer::Base
7
7
  include LocalisedMailer
8
8
  include MultitenantAssetHost
9
+ include Decidim::SanitizeHelper
10
+ include Decidim::OrganizationHelper
11
+ helper_method :organization_name, :decidim_escape_translated, :decidim_sanitize_translated, :translated_attribute, :decidim_sanitize, :decidim_sanitize_newsletter
12
+
9
13
  after_action :set_smtp
10
14
  after_action :set_from
11
15
 
@@ -44,11 +48,11 @@ module Decidim
44
48
  smtp_settings_from = organization.smtp_settings["from"]
45
49
  return smtp_settings_from if already_defined_name_in_mail?(smtp_settings_from)
46
50
 
47
- email_address_with_name(smtp_settings_from, organization.name)
51
+ email_address_with_name(smtp_settings_from, organization_name(organization))
48
52
  end
49
53
 
50
54
  def default_sender
51
- email_address_with_name(Decidim.config.mailer_sender, organization.name)
55
+ email_address_with_name(Decidim.config.mailer_sender, organization_name(organization))
52
56
  end
53
57
 
54
58
  def already_defined_name_in_mail?(mail_address)
@@ -11,7 +11,7 @@ module Decidim
11
11
  @justification = justification
12
12
  subject = I18n.t(
13
13
  "decidim.block_user_mailer.notify.subject",
14
- organization_name: @organization.name,
14
+ organization_name: organization_name(@organization),
15
15
  justification: @justification
16
16
  )
17
17
 
@@ -5,6 +5,8 @@ module Decidim
5
5
  # each role and use a localised version.
6
6
  class DecidimDeviseMailer < ::Devise::Mailer
7
7
  include LocalisedMailer
8
+ include Decidim::SanitizeHelper
9
+ helper_method :decidim_escape_translated, :decidim_sanitize_translated, :translated_attribute
8
10
 
9
11
  layout "decidim/mailer"
10
12
 
@@ -19,7 +21,11 @@ module Decidim
19
21
  @organization = user.organization
20
22
  @opts = opts
21
23
 
22
- opts[:subject] = I18n.t("devise.mailer.#{opts[:invitation_instructions]}.subject", organization: user.organization.name) if opts[:invitation_instructions]
24
+ if opts[:invitation_instructions]
25
+ opts[:subject] =
26
+ I18n.t("devise.mailer.#{opts[:invitation_instructions]}.subject",
27
+ organization: organization_name(user.organization))
28
+ end
23
29
  end
24
30
 
25
31
  devise_mail(user, opts[:invitation_instructions] || :invitation_instructions, opts)