decidim-core 0.28.1 → 0.29.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (678) 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 +5 -7
  5. data/app/cells/decidim/address_cell.rb +3 -5
  6. data/app/cells/decidim/amendable/amend_button_card_cell.rb +0 -2
  7. data/app/cells/decidim/amendable/amendments_cell.rb +0 -2
  8. data/app/cells/decidim/amendable/announcement_cell.rb +10 -14
  9. data/app/cells/decidim/amendable/emendation_actions_cell.rb +0 -2
  10. data/app/cells/decidim/amendable/promote_button_card_cell.rb +0 -2
  11. data/app/cells/decidim/amendable/wizard_step_form_cell.rb +6 -19
  12. data/app/cells/decidim/announcement/show.erb +3 -3
  13. data/app/cells/decidim/announcement_cell.rb +6 -2
  14. data/app/cells/decidim/attachments_file_tab/show.erb +3 -0
  15. data/app/cells/decidim/attachments_file_tab_cell.rb +11 -0
  16. data/app/cells/decidim/attachments_link_tab/show.erb +12 -0
  17. data/app/cells/decidim/attachments_link_tab_cell.rb +21 -0
  18. data/app/cells/decidim/author/flag.erb +2 -2
  19. data/app/cells/decidim/author/show.erb +5 -5
  20. data/app/cells/decidim/author_cell.rb +0 -2
  21. data/app/cells/decidim/authorization_modal_cell.rb +0 -3
  22. data/app/cells/decidim/badge_cell.rb +0 -4
  23. data/app/cells/decidim/badges_cell.rb +0 -2
  24. data/app/cells/decidim/button_cell.rb +0 -3
  25. data/app/cells/decidim/card/show.erb +1 -1
  26. data/app/cells/decidim/card_cell.rb +1 -5
  27. data/app/cells/decidim/card_g_cell.rb +2 -2
  28. data/app/cells/decidim/card_l/space.erb +1 -1
  29. data/app/cells/decidim/card_l_cell.rb +1 -3
  30. data/app/cells/decidim/card_metadata/show.erb +2 -2
  31. data/app/cells/decidim/card_metadata_cell.rb +1 -5
  32. data/app/cells/decidim/card_s_cell.rb +1 -4
  33. data/app/cells/decidim/coauthorships_cell.rb +0 -2
  34. data/app/cells/decidim/comments_button_cell.rb +0 -2
  35. data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +1 -1
  36. data/app/cells/decidim/content_blocks/footer_sub_hero_cell.rb +0 -3
  37. data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
  38. data/app/cells/decidim/content_blocks/hero_cell.rb +0 -1
  39. data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +0 -2
  40. data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
  41. data/app/cells/decidim/content_blocks/how_to_participate_cell.rb +0 -1
  42. data/app/cells/decidim/content_blocks/participatory_space_documents/content.erb +1 -1
  43. data/app/cells/decidim/content_blocks/participatory_space_documents_cell.rb +17 -1
  44. data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +0 -2
  45. data/app/cells/decidim/content_blocks/participatory_space_last_activity_cell.rb +1 -3
  46. data/app/cells/decidim/content_blocks/stats/show.erb +1 -1
  47. data/app/cells/decidim/content_blocks/sub_hero_cell.rb +0 -3
  48. data/app/cells/decidim/data_consent/category.erb +1 -1
  49. data/app/cells/decidim/date_range/show.erb +10 -10
  50. data/app/cells/decidim/date_range_cell.rb +0 -2
  51. data/app/cells/decidim/diff_cell.rb +0 -1
  52. data/app/cells/decidim/documents_panel/show.erb +4 -0
  53. data/app/cells/decidim/documents_panel_cell.rb +9 -1
  54. data/app/cells/decidim/endorsement_buttons_cell.rb +5 -13
  55. data/app/cells/decidim/flag_modal/flag_user.erb +3 -3
  56. data/app/cells/decidim/followers_cell.rb +0 -1
  57. data/app/cells/decidim/following_cell.rb +0 -1
  58. data/app/cells/decidim/footer_topics/show.erb +8 -0
  59. data/app/cells/decidim/footer_topics_cell.rb +39 -0
  60. data/app/cells/decidim/groups_cell.rb +0 -3
  61. data/app/cells/decidim/linked_resources_for_cell.rb +0 -3
  62. data/app/cells/decidim/members_cell.rb +0 -1
  63. data/app/cells/decidim/nav_links/show.erb +2 -2
  64. data/app/cells/decidim/navbar_admin_link_cell.rb +0 -2
  65. data/app/cells/decidim/newsletter_templates/base_cell.rb +0 -1
  66. data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +2 -2
  67. data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +2 -2
  68. data/app/cells/decidim/notification/moderated.erb +12 -0
  69. data/app/cells/decidim/notification/show.erb +5 -0
  70. data/app/cells/decidim/notification_actions/base_cell.rb +13 -0
  71. data/app/cells/decidim/notification_actions/buttons/show.erb +5 -0
  72. data/app/cells/decidim/notification_actions/buttons_cell.rb +41 -0
  73. data/app/cells/decidim/notification_cell.rb +14 -4
  74. data/app/cells/decidim/notifications_cell.rb +0 -1
  75. data/app/cells/decidim/pad_iframe/show.erb +2 -2
  76. data/app/cells/decidim/pad_iframe_cell.rb +0 -1
  77. data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +1 -2
  78. data/app/cells/decidim/photo_cell.rb +1 -5
  79. data/app/cells/decidim/photos_list_cell.rb +0 -2
  80. data/app/cells/decidim/profile/details.erb +1 -1
  81. data/app/cells/decidim/profile_cell.rb +0 -2
  82. data/app/cells/decidim/profile_sidebar/show.erb +20 -20
  83. data/app/cells/decidim/profile_sidebar_cell.rb +1 -10
  84. data/app/cells/decidim/progress_bar/show.erb +8 -6
  85. data/app/cells/decidim/progress_bar_cell.rb +2 -0
  86. data/app/cells/decidim/public_participation/show.erb +1 -1
  87. data/app/cells/decidim/report_button/flag_modal.erb +6 -2
  88. data/app/cells/decidim/resource_types_filter/show.erb +3 -3
  89. data/app/cells/decidim/resource_types_filter_cell.rb +0 -2
  90. data/app/cells/decidim/scopes_picker/show.erb +1 -1
  91. data/app/cells/decidim/scopes_picker_cell.rb +0 -1
  92. data/app/cells/decidim/search_results_cell.rb +1 -1
  93. data/app/cells/decidim/statistic/show.erb +2 -2
  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 +1 -1
  100. data/app/cells/decidim/translation_bar_cell.rb +0 -2
  101. data/app/cells/decidim/upload_modal/files.erb +1 -1
  102. data/app/cells/decidim/upload_modal/modal.erb +3 -4
  103. data/app/cells/decidim/upload_modal_cell.rb +1 -3
  104. data/app/cells/decidim/user_conversation/new.erb +1 -1
  105. data/app/cells/decidim/user_conversation/show.erb +1 -1
  106. data/app/cells/decidim/user_conversation_cell.rb +0 -1
  107. data/app/cells/decidim/user_conversations/show.erb +1 -1
  108. data/app/cells/decidim/user_conversations_cell.rb +0 -1
  109. data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -1
  110. data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -1
  111. data/app/cells/decidim/user_timeline/show.erb +1 -1
  112. data/app/cells/decidim/version_cell.rb +3 -5
  113. data/app/cells/decidim/versions_list_cell.rb +1 -3
  114. data/app/cells/decidim/versions_list_item_cell.rb +2 -4
  115. data/app/cells/decidim/wizard_step_form/wizard_aside.erb +2 -2
  116. data/app/cells/decidim/wizard_step_form/wizard_header.erb +2 -3
  117. data/app/cells/decidim/wizard_step_form_cell.rb +0 -8
  118. data/app/commands/decidim/amendable/create_draft.rb +4 -3
  119. data/app/commands/decidim/amendable/promote.rb +3 -2
  120. data/app/commands/decidim/amendable/publish_draft.rb +3 -2
  121. data/app/commands/decidim/amendable/update_draft.rb +4 -3
  122. data/app/commands/decidim/amendable/withdraw.rb +1 -1
  123. data/app/commands/decidim/create_follow.rb +4 -4
  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 -19
  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_controllers.rb +2 -0
  136. data/app/controllers/concerns/decidim/filter_resource.rb +1 -1
  137. data/app/controllers/concerns/decidim/force_authentication.rb +1 -1
  138. data/app/controllers/concerns/decidim/needs_rtl_direction.rb +23 -0
  139. data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -23
  140. data/app/controllers/concerns/decidim/payload_info.rb +2 -1
  141. data/app/controllers/concerns/decidim/registers_permissions.rb +4 -4
  142. data/app/controllers/concerns/decidim/use_organization_time_zone.rb +2 -2
  143. data/app/controllers/concerns/decidim/withdrawable.rb +1 -1
  144. data/app/controllers/decidim/account_controller.rb +2 -2
  145. data/app/controllers/{concerns/decidim → decidim}/amendments_controller.rb +3 -16
  146. data/app/controllers/decidim/application_controller.rb +1 -0
  147. data/app/controllers/decidim/components/base_controller.rb +1 -1
  148. data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
  149. data/app/controllers/decidim/devise/passwords_controller.rb +2 -2
  150. data/app/controllers/decidim/endorsements_controller.rb +1 -1
  151. data/app/controllers/decidim/favicon_controller.rb +1 -1
  152. data/app/controllers/decidim/follows_controller.rb +2 -2
  153. data/app/controllers/decidim/gamification/badges_controller.rb +2 -0
  154. data/app/controllers/decidim/group_invites_controller.rb +36 -9
  155. data/app/controllers/decidim/links_controller.rb +15 -2
  156. data/app/controllers/decidim/newsletters_opt_in_controller.rb +1 -1
  157. data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
  158. data/app/controllers/decidim/report_users_controller.rb +1 -1
  159. data/app/controllers/decidim/reports_controller.rb +1 -1
  160. data/app/controllers/decidim/user_interests_controller.rb +1 -1
  161. data/app/events/decidim/change_nickname_event.rb +0 -1
  162. data/app/events/decidim/invited_to_group_event.rb +29 -0
  163. data/app/events/decidim/welcome_notification_event.rb +2 -4
  164. data/app/forms/decidim/form.rb +4 -0
  165. data/app/forms/decidim/omniauth_registration_form.rb +1 -1
  166. data/app/forms/decidim/upload_validation_form.rb +1 -1
  167. data/app/helpers/concerns/decidim/flash_helper_extensions.rb +3 -3
  168. data/app/helpers/decidim/amendments_helper.rb +4 -14
  169. data/app/helpers/decidim/application_helper.rb +8 -0
  170. data/app/helpers/decidim/authorization_form_helper.rb +2 -2
  171. data/app/helpers/decidim/breadcrumb_helper.rb +1 -1
  172. data/app/helpers/decidim/cells_helper.rb +1 -1
  173. data/app/helpers/decidim/check_boxes_tree_helper.rb +2 -3
  174. data/app/helpers/decidim/datalist_select_helper.rb +1 -1
  175. data/app/helpers/decidim/decidim_form_helper.rb +3 -3
  176. data/app/helpers/decidim/filters_helper.rb +1 -1
  177. data/app/helpers/decidim/layout_helper.rb +1 -36
  178. data/app/helpers/decidim/localized_locales_helper.rb +1 -1
  179. data/app/helpers/decidim/menu_helper.rb +8 -0
  180. data/app/helpers/decidim/meta_tags_helper.rb +26 -23
  181. data/app/helpers/decidim/modal_helper.rb +1 -1
  182. data/app/helpers/decidim/orders_helper.rb +1 -1
  183. data/app/helpers/decidim/organization_helper.rb +55 -0
  184. data/app/helpers/decidim/paginate_helper.rb +1 -1
  185. data/app/helpers/decidim/resource_helper.rb +0 -7
  186. data/app/helpers/decidim/scopes_helper.rb +4 -2
  187. data/app/helpers/decidim/searches_helper.rb +1 -1
  188. data/app/helpers/decidim/short_link_helper.rb +2 -2
  189. data/app/helpers/decidim/translations_helper.rb +2 -2
  190. data/app/helpers/decidim/twitter_search_helper.rb +1 -1
  191. data/app/helpers/decidim/user_profile_helper.rb +0 -1
  192. data/app/jobs/decidim/email_notifications_digest_generator_job.rb +2 -2
  193. data/app/mailers/decidim/application_mailer.rb +44 -6
  194. data/app/mailers/decidim/block_user_mailer.rb +1 -1
  195. data/app/mailers/decidim/decidim_devise_mailer.rb +7 -1
  196. data/app/mailers/decidim/newsletter_mailer.rb +1 -4
  197. data/app/mailers/decidim/newsletters_opt_in_mailer.rb +2 -2
  198. data/app/mailers/decidim/notification_mailer.rb +0 -1
  199. data/app/mailers/decidim/notifications_digest_mailer.rb +0 -1
  200. data/app/mailers/decidim/reported_mailer.rb +6 -3
  201. data/app/mailers/decidim/user_report_mailer.rb +1 -1
  202. data/app/models/decidim/action_log.rb +1 -1
  203. data/app/models/decidim/area_type.rb +1 -1
  204. data/app/models/decidim/attachment.rb +26 -2
  205. data/app/models/decidim/authorization.rb +1 -1
  206. data/app/models/decidim/authorization_transfer.rb +1 -0
  207. data/app/models/decidim/component.rb +2 -2
  208. data/app/models/decidim/content_block.rb +1 -1
  209. data/app/models/decidim/messaging/message.rb +2 -2
  210. data/app/models/decidim/newsletter.rb +9 -9
  211. data/app/models/decidim/notification.rb +2 -2
  212. data/app/models/decidim/organization.rb +23 -2
  213. data/app/models/decidim/push_notification_message.rb +1 -1
  214. data/app/models/decidim/resource_link.rb +1 -1
  215. data/app/models/decidim/user.rb +2 -2
  216. data/app/models/decidim/user_group.rb +2 -2
  217. data/app/packs/src/decidim/a11y.js +60 -0
  218. data/app/packs/src/decidim/abide_form_validator_fixer.js +44 -0
  219. data/app/packs/src/decidim/attachments/file_or_link_tabs.js +55 -0
  220. data/app/packs/src/decidim/attachments/index.js +1 -0
  221. data/app/packs/src/decidim/back_to_list.js +1 -1
  222. data/app/packs/src/decidim/check_boxes_tree.js +1 -1
  223. data/app/packs/src/decidim/data_consent/consent_manager.js +1 -1
  224. data/app/packs/src/decidim/data_consent/consent_manager.test.js +6 -6
  225. data/app/packs/src/decidim/data_consent/index.js +1 -1
  226. data/app/packs/src/decidim/datepicker/datepicker_functions.js +243 -0
  227. data/app/packs/src/decidim/datepicker/datepicker_listeners.js +78 -0
  228. data/app/packs/src/decidim/datepicker/form_datepicker.js +91 -0
  229. data/app/packs/src/decidim/datepicker/generate_datepicker.js +148 -0
  230. data/app/packs/src/decidim/datepicker/generate_timepicker.js +298 -0
  231. data/app/packs/src/decidim/datepicker/test/date.test.js +118 -0
  232. data/app/packs/src/decidim/datepicker/test/time.test.js +227 -0
  233. data/app/packs/src/decidim/direct_uploads/upload_modal.js +2 -6
  234. data/app/packs/src/decidim/editor/extensions/indent/index.js +1 -1
  235. data/app/packs/src/decidim/editor/extensions/video_embed/index.js +4 -4
  236. data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +0 -15
  237. data/app/packs/src/decidim/editor/test/extensions/indent.test.js +1 -1
  238. data/app/packs/src/decidim/editor/test/fixtures/upload_templates.js +1 -1
  239. data/app/packs/src/decidim/editor/test/helpers.js +1 -14
  240. data/app/packs/src/decidim/editor/utilities/paste_transform.js +2 -2
  241. data/app/packs/src/decidim/external_domain_warning.js +2 -2
  242. data/app/packs/src/decidim/external_domain_warning.test.js +4 -4
  243. data/app/packs/src/decidim/form_filter.js +4 -4
  244. data/app/packs/src/decidim/impersonation.js +1 -1
  245. data/app/packs/src/decidim/index.js +40 -6
  246. data/app/packs/src/decidim/input_character_counter.js +1 -1
  247. data/app/packs/src/decidim/input_emoji.js +171 -72
  248. data/app/packs/src/decidim/input_hashtags.js +1 -1
  249. data/app/packs/src/decidim/input_mentions.js +1 -1
  250. data/app/packs/src/decidim/notifications_actions.js +40 -0
  251. data/app/packs/src/decidim/sticky_header.js +87 -0
  252. data/app/packs/src/decidim/sw/sw.js +8 -6
  253. data/app/packs/src/decidim/tooltips.js +1 -1
  254. data/app/packs/stylesheets/decidim/_accordion.scss +2 -2
  255. data/app/packs/stylesheets/decidim/_cards.scss +2 -2
  256. data/app/packs/stylesheets/decidim/_datepicker.scss +193 -0
  257. data/app/packs/stylesheets/decidim/_dropdown.scss +36 -0
  258. data/app/packs/stylesheets/decidim/_emoji.scss +36 -0
  259. data/app/packs/stylesheets/decidim/_filters.scss +4 -2
  260. data/app/packs/stylesheets/decidim/_flash.scss +2 -2
  261. data/app/packs/stylesheets/decidim/_footer.scss +1 -3
  262. data/app/packs/stylesheets/decidim/_forms.scss +9 -1
  263. data/app/packs/stylesheets/decidim/_header.scss +70 -50
  264. data/app/packs/stylesheets/decidim/_home.scss +1 -1
  265. data/app/packs/stylesheets/decidim/_layout.scss +16 -3
  266. data/app/packs/stylesheets/decidim/_modal.scss +1 -1
  267. data/app/packs/stylesheets/decidim/_modal_update.scss +2 -4
  268. data/app/packs/stylesheets/decidim/_notifications.scss +4 -0
  269. data/app/packs/stylesheets/decidim/_tabs_x.scss +5 -1
  270. data/app/packs/stylesheets/decidim/application.scss +4 -0
  271. data/app/packs/stylesheets/decidim/legacy/leaflet.scss +1 -1
  272. data/app/packs/stylesheets/decidim/vendor/_datepicker_light.scss +228 -0
  273. data/app/permissions/decidim/default_permissions.rb +2 -2
  274. data/app/presenters/decidim/admin_log/organization_presenter.rb +2 -2
  275. data/app/presenters/decidim/admin_log/static_page_presenter.rb +1 -1
  276. data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
  277. data/app/presenters/decidim/component_attachment_collection_presenter.rb +81 -0
  278. data/app/presenters/decidim/footer_menu_presenter.rb +1 -1
  279. data/app/presenters/decidim/home_stats_presenter.rb +1 -1
  280. data/app/presenters/decidim/log/resource_presenter.rb +7 -1
  281. data/app/presenters/decidim/organization_presenter.rb +1 -1
  282. data/app/queries/decidim/metric_measure.rb +1 -1
  283. data/app/queries/decidim/public_activities.rb +1 -1
  284. data/app/queries/decidim/user_groups/admin_memberships.rb +1 -1
  285. data/app/queries/decidim/user_groups/member_memberships.rb +1 -1
  286. data/app/services/decidim/action_logger.rb +3 -3
  287. data/app/services/decidim/log/diff_changeset_calculator.rb +3 -3
  288. data/app/services/decidim/notifications_digest_sending_decider.rb +1 -1
  289. data/app/uploaders/decidim/organization_favicon_uploader.rb +1 -1
  290. data/app/uploaders/decidim/record_image_uploader.rb +2 -2
  291. data/app/validators/organization_present_validator.rb +1 -1
  292. data/app/validators/passthru_validator.rb +1 -1
  293. data/app/validators/uploader_image_dimensions_validator.rb +2 -2
  294. data/app/views/decidim/account/show.html.erb +3 -3
  295. data/app/views/decidim/amendments/_wizard_header.html.erb +1 -2
  296. data/app/views/decidim/application/_collection.html.erb +3 -1
  297. data/app/views/decidim/application/_component_documents.html.erb +4 -0
  298. data/app/views/decidim/application/_document.html.erb +24 -10
  299. data/app/views/decidim/block_user_mailer/notify.html.erb +2 -2
  300. data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
  301. data/app/views/decidim/devise/omniauth_registrations/new.html.erb +1 -1
  302. data/app/views/decidim/devise/registrations/new.html.erb +1 -1
  303. data/app/views/decidim/devise/shared/_login_boxes.html.erb +1 -1
  304. data/app/views/decidim/doorkeeper/authorizations/new.html.erb +1 -1
  305. data/app/views/decidim/endorsements/_identity.html.erb +1 -1
  306. data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +2 -1
  307. data/app/views/decidim/gamification/badges/index.html.erb +34 -33
  308. data/app/views/decidim/links/_modal.html.erb +1 -1
  309. data/app/views/decidim/links/new.html.erb +3 -1
  310. data/app/views/decidim/manifests/show.json.erb +1 -1
  311. data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
  312. data/app/views/decidim/messaging/conversations/_error_modal.html.erb +5 -5
  313. data/app/views/decidim/messaging/conversations/create.js.erb +1 -1
  314. data/app/views/decidim/newsletter_mailer/newsletter.html.erb +1 -1
  315. data/app/views/decidim/newsletters/show.html.erb +1 -1
  316. data/app/views/decidim/newsletters_opt_in_mailer/notify.html.erb +2 -2
  317. data/app/views/decidim/notifications_settings/show.html.erb +6 -6
  318. data/app/views/decidim/pages/_tabbed.html.erb +2 -2
  319. data/app/views/decidim/pages/index.html.erb +1 -2
  320. data/app/views/decidim/reported_mailer/report.html.erb +4 -2
  321. data/app/views/decidim/scopes/picker.html.erb +5 -5
  322. data/app/views/decidim/searches/_filters.html.erb +2 -2
  323. data/app/views/decidim/searches/_resources_filter_block.html.erb +6 -6
  324. data/app/views/decidim/shared/_extended_navigation_bar.html.erb +8 -8
  325. data/app/views/decidim/shared/_filters.html.erb +2 -2
  326. data/app/views/decidim/shared/_login_modal.html.erb +1 -1
  327. data/app/views/decidim/shared/_orders.html.erb +2 -2
  328. data/app/views/decidim/shared/filters/_collection.html.erb +5 -3
  329. data/app/views/decidim/shared/filters/_dropdown_label.html.erb +21 -19
  330. data/app/views/decidim/user_interests/_areas.html.erb +2 -2
  331. data/app/views/decidim/user_report_mailer/notify.html.erb +2 -2
  332. data/app/views/decidim/user_update_mailer/notify.html.erb +1 -1
  333. data/app/views/decidim/widgets/_data_picker.html.erb +1 -1
  334. data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
  335. data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
  336. data/app/views/devise/mailer/invite_admin.html.erb +2 -2
  337. data/app/views/devise/mailer/invite_admin.text.erb +2 -2
  338. data/app/views/devise/mailer/invite_collaborator.html.erb +2 -2
  339. data/app/views/devise/mailer/invite_collaborator.text.erb +2 -2
  340. data/app/views/devise/mailer/invite_private_user.html.erb +2 -2
  341. data/app/views/devise/mailer/invite_private_user.text.erb +2 -2
  342. data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +1 -1
  343. data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +1 -1
  344. data/app/views/layouts/decidim/_application.html.erb +3 -6
  345. data/app/views/layouts/decidim/_data_consent_warning.html.erb +2 -2
  346. data/app/views/layouts/decidim/_decidim_javascript.html.erb +1 -1
  347. data/app/views/layouts/decidim/_head_extra.html.erb +2 -2
  348. data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
  349. data/app/views/layouts/decidim/_js_configuration.html.erb +7 -2
  350. data/app/views/layouts/decidim/_logo.html.erb +2 -2
  351. data/app/views/layouts/decidim/_logo_mobile.html.erb +11 -0
  352. data/app/views/layouts/decidim/_mailer_logo.html.erb +2 -2
  353. data/app/views/layouts/decidim/_meta_tags_config.html.erb +1 -1
  354. data/app/views/layouts/decidim/_wrapper.html.erb +16 -9
  355. data/app/views/layouts/decidim/footer/_main.html.erb +2 -3
  356. data/app/views/layouts/decidim/footer/_main_intro.html.erb +2 -2
  357. data/app/views/layouts/decidim/footer/_main_legal.html.erb +2 -3
  358. data/app/views/layouts/decidim/footer/_main_links.html.erb +13 -9
  359. data/app/views/layouts/decidim/footer/_main_social_media_links.html.erb +8 -8
  360. data/app/views/layouts/decidim/header/_main.html.erb +9 -22
  361. data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +7 -6
  362. data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +10 -3
  363. data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +24 -0
  364. data/app/views/layouts/decidim/header/_main_links_mobile_search.html.erb +0 -21
  365. data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +12 -0
  366. data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
  367. data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
  368. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +17 -0
  369. data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +1 -1
  370. data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
  371. data/app/views/layouts/decidim/header/_menu_form_search_mobile.html.erb +16 -0
  372. data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +25 -0
  373. data/app/views/layouts/decidim/mailer.html.erb +2 -2
  374. data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
  375. data/app/views/layouts/decidim/shared/_layout_item.html.erb +0 -14
  376. data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
  377. data/config/initializers/active_storage.rb +3 -0
  378. data/config/initializers/devise.rb +1 -1
  379. data/config/initializers/new_framework_defaults_7_0.rb +145 -0
  380. data/config/locales/ar.yml +3 -47
  381. data/config/locales/bg.yml +916 -41
  382. data/config/locales/ca.yml +67 -54
  383. data/config/locales/cs.yml +54 -56
  384. data/config/locales/de.yml +65 -52
  385. data/config/locales/el.yml +8 -30
  386. data/config/locales/en.yml +71 -58
  387. data/config/locales/es-MX.yml +73 -60
  388. data/config/locales/es-PY.yml +73 -60
  389. data/config/locales/es.yml +96 -83
  390. data/config/locales/eu.yml +71 -58
  391. data/config/locales/fi-plain.yml +69 -56
  392. data/config/locales/fi.yml +69 -56
  393. data/config/locales/fr-CA.yml +62 -55
  394. data/config/locales/fr.yml +57 -50
  395. data/config/locales/ga-IE.yml +7 -10
  396. data/config/locales/gl.yml +1 -18
  397. data/config/locales/hu.yml +37 -58
  398. data/config/locales/id-ID.yml +0 -14
  399. data/config/locales/is-IS.yml +0 -10
  400. data/config/locales/it.yml +7 -26
  401. data/config/locales/ja.yml +69 -56
  402. data/config/locales/kaa.yml +5 -0
  403. data/config/locales/lb.yml +7 -26
  404. data/config/locales/lt.yml +8 -50
  405. data/config/locales/lv.yml +8 -22
  406. data/config/locales/nl.yml +7 -25
  407. data/config/locales/no.yml +7 -26
  408. data/config/locales/pl.yml +99 -53
  409. data/config/locales/pt-BR.yml +4 -52
  410. data/config/locales/pt.yml +7 -26
  411. data/config/locales/ro-RO.yml +9 -28
  412. data/config/locales/ru.yml +8 -15
  413. data/config/locales/sk.yml +8 -22
  414. data/config/locales/sl.yml +8 -8
  415. data/config/locales/sv.yml +8 -34
  416. data/config/locales/tr-TR.yml +22 -28
  417. data/config/locales/uk.yml +10 -10
  418. data/config/locales/zh-CN.yml +0 -23
  419. data/config/locales/zh-TW.yml +8 -48
  420. data/config/routes.rb +0 -1
  421. data/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +1 -1
  422. data/db/migrate/20240110150230_rename_external_domain_whitelist_to_external_domain_allowlist.rb +7 -0
  423. data/db/migrate/20240326104215_remove_show_in_footer_in_static_pages.rb +7 -0
  424. data/db/migrate/20240401192628_change_name_on_decidim_organizations.rb +31 -0
  425. data/db/seeds/avatars/001.jpg +0 -0
  426. data/db/seeds/avatars/002.jpg +0 -0
  427. data/db/seeds/avatars/003.jpg +0 -0
  428. data/db/seeds/avatars/004.jpg +0 -0
  429. data/db/seeds/avatars/005.jpg +0 -0
  430. data/db/seeds/avatars/006.jpg +0 -0
  431. data/db/seeds/avatars/007.jpg +0 -0
  432. data/db/seeds/avatars/008.jpg +0 -0
  433. data/db/seeds/avatars/009.jpg +0 -0
  434. data/db/seeds/avatars/010.jpg +0 -0
  435. data/db/seeds/avatars/011.jpg +0 -0
  436. data/db/seeds/avatars/012.jpg +0 -0
  437. data/db/seeds/avatars/013.jpg +0 -0
  438. data/db/seeds/avatars/014.jpg +0 -0
  439. data/db/seeds/avatars/015.jpg +0 -0
  440. data/db/seeds/avatars/016.jpg +0 -0
  441. data/db/seeds/avatars/017.jpg +0 -0
  442. data/db/seeds/avatars/018.jpg +0 -0
  443. data/db/seeds/avatars/019.jpg +0 -0
  444. data/db/seeds/avatars/020.jpg +0 -0
  445. data/db/seeds/avatars/021.jpg +0 -0
  446. data/db/seeds/avatars/022.jpg +0 -0
  447. data/db/seeds/avatars/023.jpg +0 -0
  448. data/db/seeds/avatars/024.jpg +0 -0
  449. data/db/seeds/avatars/025.jpg +0 -0
  450. data/db/seeds/avatars/026.jpg +0 -0
  451. data/db/seeds/avatars/027.jpg +0 -0
  452. data/db/seeds/avatars/028.jpg +0 -0
  453. data/db/seeds/avatars/029.jpg +0 -0
  454. data/db/seeds/avatars/030.jpg +0 -0
  455. data/db/seeds/avatars/031.jpg +0 -0
  456. data/db/seeds/avatars/032.jpg +0 -0
  457. data/db/seeds/avatars/033.jpg +0 -0
  458. data/db/seeds/avatars/034.jpg +0 -0
  459. data/db/seeds/avatars/035.jpg +0 -0
  460. data/db/seeds/avatars/036.jpg +0 -0
  461. data/db/seeds/avatars/037.jpg +0 -0
  462. data/db/seeds/avatars/038.jpg +0 -0
  463. data/db/seeds/avatars/039.jpg +0 -0
  464. data/db/seeds/avatars/040.jpg +0 -0
  465. data/db/seeds/avatars/041.jpg +0 -0
  466. data/db/seeds/avatars/042.jpg +0 -0
  467. data/db/seeds/avatars/043.jpg +0 -0
  468. data/db/seeds/avatars/044.jpg +0 -0
  469. data/db/seeds/avatars/045.jpg +0 -0
  470. data/db/seeds/avatars/046.jpg +0 -0
  471. data/db/seeds/avatars/047.jpg +0 -0
  472. data/db/seeds/avatars/048.jpg +0 -0
  473. data/db/seeds/avatars/049.jpg +0 -0
  474. data/db/seeds/avatars/050.jpg +0 -0
  475. data/db/seeds/avatars/051.jpg +0 -0
  476. data/db/seeds/avatars/052.jpg +0 -0
  477. data/db/seeds/avatars/053.jpg +0 -0
  478. data/db/seeds/avatars/054.jpg +0 -0
  479. data/db/seeds/avatars/055.jpg +0 -0
  480. data/db/seeds/avatars/056.jpg +0 -0
  481. data/db/seeds/avatars/057.jpg +0 -0
  482. data/db/seeds/avatars/058.jpg +0 -0
  483. data/db/seeds/avatars/059.jpg +0 -0
  484. data/db/seeds/avatars/060.jpg +0 -0
  485. data/db/seeds/avatars/061.jpg +0 -0
  486. data/db/seeds/avatars/062.jpg +0 -0
  487. data/db/seeds/avatars/063.jpg +0 -0
  488. data/db/seeds/avatars/064.jpg +0 -0
  489. data/db/seeds/avatars/065.jpg +0 -0
  490. data/db/seeds/avatars/066.jpg +0 -0
  491. data/db/seeds/avatars/067.jpg +0 -0
  492. data/db/seeds/avatars/068.jpg +0 -0
  493. data/db/seeds/avatars/069.jpg +0 -0
  494. data/db/seeds/avatars/070.jpg +0 -0
  495. data/db/seeds/avatars/071.jpg +0 -0
  496. data/db/seeds/avatars/072.jpg +0 -0
  497. data/db/seeds/avatars/073.jpg +0 -0
  498. data/db/seeds/avatars/074.jpg +0 -0
  499. data/db/seeds/avatars/075.jpg +0 -0
  500. data/db/seeds/avatars/076.jpg +0 -0
  501. data/db/seeds/avatars/077.jpg +0 -0
  502. data/db/seeds/avatars/078.jpg +0 -0
  503. data/db/seeds/avatars/079.jpg +0 -0
  504. data/db/seeds/avatars/080.jpg +0 -0
  505. data/db/seeds/avatars/081.jpg +0 -0
  506. data/db/seeds/avatars/082.jpg +0 -0
  507. data/db/seeds/avatars/083.jpg +0 -0
  508. data/db/seeds/avatars/084.jpg +0 -0
  509. data/db/seeds/avatars/085.jpg +0 -0
  510. data/db/seeds/avatars/086.jpg +0 -0
  511. data/db/seeds/avatars/087.jpg +0 -0
  512. data/db/seeds/avatars/088.jpg +0 -0
  513. data/db/seeds/avatars/089.jpg +0 -0
  514. data/db/seeds/avatars/090.jpg +0 -0
  515. data/db/seeds/avatars/091.jpg +0 -0
  516. data/db/seeds/avatars/092.jpg +0 -0
  517. data/db/seeds/avatars/093.jpg +0 -0
  518. data/db/seeds/avatars/094.jpg +0 -0
  519. data/db/seeds/avatars/095.jpg +0 -0
  520. data/db/seeds/avatars/096.jpg +0 -0
  521. data/db/seeds/avatars/097.jpg +0 -0
  522. data/db/seeds/avatars/098.jpg +0 -0
  523. data/db/seeds/avatars/099.jpg +0 -0
  524. data/db/seeds/avatars/100.jpg +0 -0
  525. data/db/seeds/avatars/CREDITS.md +114 -0
  526. data/db/seeds/avatars/README.md +25 -0
  527. data/decidim-core.gemspec +6 -5
  528. data/lib/decidim/acts_as_author.rb +1 -1
  529. data/lib/decidim/admin_filter.rb +44 -0
  530. data/lib/decidim/admin_filters_registry.rb +55 -0
  531. data/lib/decidim/amendable.rb +1 -2
  532. data/lib/decidim/api/functions/component_finder_base.rb +1 -1
  533. data/lib/decidim/api/functions/needs_api_filter_and_order.rb +3 -3
  534. data/lib/decidim/api/functions/participatory_space_finder_base.rb +1 -1
  535. data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -1
  536. data/lib/decidim/api/input_filters/user_entity_input_filter.rb +3 -3
  537. data/lib/decidim/api/interfaces/author_interface.rb +1 -1
  538. data/lib/decidim/api/types/organization_type.rb +1 -1
  539. data/lib/decidim/api/types/user_group_type.rb +1 -1
  540. data/lib/decidim/api/types/user_type.rb +1 -1
  541. data/lib/decidim/asset_router/pipeline.rb +2 -2
  542. data/lib/decidim/assets/tailwind/instance.rb +1 -1
  543. data/lib/decidim/assets/tailwind/tailwind.config.js.erb +8 -3
  544. data/lib/decidim/attribute_object/model.rb +2 -2
  545. data/lib/decidim/attribute_object/type_resolver.rb +1 -3
  546. data/lib/decidim/attribute_object.rb +2 -2
  547. data/lib/decidim/attributes.rb +0 -4
  548. data/lib/decidim/authorable.rb +5 -0
  549. data/lib/decidim/command.rb +2 -2
  550. data/lib/decidim/commands/create_resource.rb +63 -0
  551. data/lib/decidim/commands/destroy_resource.rb +74 -0
  552. data/lib/decidim/commands/hook_error.rb +8 -0
  553. data/lib/decidim/commands/resource_handler.rb +85 -0
  554. data/lib/decidim/commands/update_resource.rb +64 -0
  555. data/lib/decidim/component_manifest.rb +3 -1
  556. data/lib/decidim/component_validator.rb +1 -1
  557. data/lib/decidim/content_blocks/has_related_components.rb +1 -1
  558. data/lib/decidim/content_parsers/resource_parser.rb +2 -2
  559. data/lib/decidim/content_processor.rb +1 -1
  560. data/lib/decidim/content_security_policy.rb +1 -1
  561. data/lib/decidim/core/engine.rb +12 -15
  562. data/lib/decidim/core/menu.rb +13 -3
  563. data/lib/decidim/core/seeds.rb +121 -148
  564. data/lib/decidim/core/test/factories.rb +24 -3
  565. data/lib/decidim/core/test/shared_examples/acts_as_author_examples.rb +1 -1
  566. data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +2 -2
  567. data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -3
  568. data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +4 -4
  569. data/lib/decidim/core/test/shared_examples/comments_examples.rb +157 -81
  570. data/lib/decidim/core/test/shared_examples/comments_reports_examples.rb +4 -4
  571. data/lib/decidim/core/test/shared_examples/digest_mail_examples.rb +1 -1
  572. data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +1 -1
  573. data/lib/decidim/core/test/shared_examples/editor_shared_examples.rb +7 -7
  574. data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +1 -1
  575. data/lib/decidim/core/test/shared_examples/follows_examples.rb +3 -3
  576. data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +4 -2
  577. data/lib/decidim/core/test/shared_examples/has_attachments.rb +3 -2
  578. data/lib/decidim/core/test/shared_examples/has_contextual_help.rb +4 -4
  579. data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
  580. data/lib/decidim/core/test/shared_examples/logo_email.rb +2 -2
  581. data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +9 -9
  582. data/lib/decidim/core/test/shared_examples/map_examples.rb +5 -5
  583. data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +2 -2
  584. data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +3 -3
  585. data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +3 -3
  586. data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +4 -4
  587. data/lib/decidim/core/test/shared_examples/reports_examples.rb +5 -5
  588. data/lib/decidim/core/test/shared_examples/rich_text_editor_examples.rb +10 -10
  589. data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +1 -1
  590. data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -8
  591. data/lib/decidim/core/test/shared_examples/share_link_examples.rb +2 -2
  592. data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -1
  593. data/lib/decidim/core/test/shared_examples/space_cell_changes_button_text_cta.rb +3 -3
  594. data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +11 -11
  595. data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
  596. data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -2
  597. data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
  598. data/lib/decidim/core/version.rb +1 -1
  599. data/lib/decidim/core.rb +30 -7
  600. data/lib/decidim/dependency_resolver.rb +3 -3
  601. data/lib/decidim/diffy_extension.rb +1 -1
  602. data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +2 -1
  603. data/lib/decidim/engine_router.rb +2 -2
  604. data/lib/decidim/events/base_event.rb +23 -0
  605. data/lib/decidim/events/simple_event.rb +1 -0
  606. data/lib/decidim/exporters/export_manifest.rb +1 -1
  607. data/lib/decidim/faker/localized.rb +3 -3
  608. data/lib/decidim/form_builder.rb +4 -4
  609. data/lib/decidim/hashtag.rb +1 -1
  610. data/lib/decidim/jsonb_attributes.rb +4 -4
  611. data/lib/decidim/manifest_messages.rb +2 -2
  612. data/lib/decidim/organization_settings.rb +15 -7
  613. data/lib/decidim/paddable.rb +1 -1
  614. data/lib/decidim/participable.rb +1 -1
  615. data/lib/decidim/participatory_space_manifest.rb +1 -1
  616. data/lib/decidim/resourceable.rb +1 -1
  617. data/lib/decidim/search_resource_fields_mapper.rb +2 -2
  618. data/lib/decidim/searchable.rb +3 -3
  619. data/lib/decidim/seeds.rb +62 -0
  620. data/lib/decidim/stats_registry.rb +2 -2
  621. data/lib/decidim/translatable_attributes.rb +3 -3
  622. data/lib/decidim/translatable_resource.rb +1 -1
  623. data/lib/decidim/view_hooks.rb +1 -1
  624. data/lib/decidim/view_model.rb +4 -0
  625. data/lib/decidim/webpacker/esbuild.config.js +14 -0
  626. data/lib/decidim/webpacker/shakapacker.yml +2 -2
  627. data/lib/decidim/webpacker/tsconfig.json +11 -0
  628. data/lib/decidim/webpacker/webpack/custom.js +13 -35
  629. data/lib/devise/models/decidim_newsletterable.rb +1 -1
  630. data/lib/tasks/decidim_download_your_data_tasks.rake +2 -2
  631. data/lib/tasks/decidim_locales_tasks.rake +1 -1
  632. data/lib/tasks/decidim_mailers_tasks.rake +2 -2
  633. data/lib/tasks/decidim_metrics_tasks.rake +6 -6
  634. data/lib/tasks/decidim_procfile.rake +9 -3
  635. data/lib/tasks/decidim_tasks.rake +5 -4
  636. data/lib/tasks/decidim_webpacker_tasks.rake +126 -117
  637. data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +80 -0
  638. data/lib/tasks/upgrade/decidim_content_blocks_tasks.rake +50 -0
  639. data/lib/tasks/upgrade/decidim_deduplicate_endorsements.rake +1 -1
  640. data/lib/tasks/upgrade/decidim_fix_categorization.rake +1 -1
  641. data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +1 -1
  642. data/lib/tasks/upgrade/decidim_fix_short_url_resolver.rake +1 -1
  643. data/lib/tasks/upgrade/decidim_moderation_tasks.rake +1 -1
  644. data/lib/tasks/upgrade/decidim_user_moderation.rake +1 -1
  645. metadata +208 -79
  646. data/app/cells/decidim/content_blocks/cta/show.erb +0 -12
  647. data/app/cells/decidim/content_blocks/cta_cell.rb +0 -31
  648. data/app/cells/decidim/footer_pages/pages.erb +0 -3
  649. data/app/cells/decidim/footer_pages/topics.erb +0 -12
  650. data/app/cells/decidim/footer_pages_cell.rb +0 -68
  651. data/app/packs/src/decidim/vendor/modernizr.js +0 -5
  652. data/app/queries/decidim/similar_emendations.rb +0 -56
  653. data/app/uploaders/decidim/cw/application_uploader.rb +0 -77
  654. data/app/uploaders/decidim/cw/attachment_uploader.rb +0 -56
  655. data/app/uploaders/decidim/cw/avatar_uploader.rb +0 -24
  656. data/app/uploaders/decidim/cw/banner_image_uploader.rb +0 -7
  657. data/app/uploaders/decidim/cw/download_your_data_uploader.rb +0 -15
  658. data/app/uploaders/decidim/cw/downloader.rb +0 -9
  659. data/app/uploaders/decidim/cw/hero_image_uploader.rb +0 -10
  660. data/app/uploaders/decidim/cw/homepage_image_uploader.rb +0 -14
  661. data/app/uploaders/decidim/cw/image_uploader.rb +0 -78
  662. data/app/uploaders/decidim/cw/newsletter_template_image_uploader.rb +0 -38
  663. data/app/uploaders/decidim/cw/oauth_application_logo_uploader.rb +0 -10
  664. data/app/uploaders/decidim/cw/official_image_footer_uploader.rb +0 -10
  665. data/app/uploaders/decidim/cw/official_image_header_uploader.rb +0 -10
  666. data/app/uploaders/decidim/cw/open_data_uploader.rb +0 -23
  667. data/app/uploaders/decidim/cw/organization_favicon_uploader.rb +0 -18
  668. data/app/uploaders/decidim/cw/organization_logo_uploader.rb +0 -10
  669. data/app/uploaders/decidim/cw/record_image_uploader.rb +0 -15
  670. data/app/uploaders/decidim/downloader.rb +0 -9
  671. data/app/views/decidim/amendments/compare_draft.html.erb +0 -18
  672. data/app/views/layouts/decidim/_edit_link.html.erb +0 -0
  673. data/app/views/layouts/decidim/header/_main_links_mobile.html.erb +0 -36
  674. data/config/initializers/carrierwave.rb +0 -15
  675. data/lib/decidim/carrier_wave_migrator_service.rb +0 -287
  676. data/lib/tasks/decidim_active_storage_migration_tasks.rake +0 -114
  677. data/lib/tasks/decidim_content_blocks_tasks.rake +0 -48
  678. /data/app/views/layouts/decidim/header/{_menu_breadcrumb_main_dropdown.html.erb → _menu_breadcrumb_main_dropdown_desktop.html.erb} +0 -0
@@ -16,8 +16,8 @@ shared_examples "comments" do
16
16
  it "shows the list of comments for the resource" do
17
17
  visit resource_path
18
18
 
19
- expect(page).to have_selector("#comments")
20
- expect(page).to have_selector(".comment", count: comments.length)
19
+ expect(page).to have_css("#comments")
20
+ expect(page).to have_css(".comment", count: comments.length)
21
21
 
22
22
  within "#comments" do
23
23
  comments.each do |comment|
@@ -33,12 +33,12 @@ shared_examples "comments" do
33
33
 
34
34
  visit resource_path
35
35
 
36
- expect(page).not_to have_content("Comments are disabled at this time")
36
+ expect(page).to have_no_content("Comments are disabled at this time")
37
37
 
38
38
  expect(page).to have_css(".comment", minimum: 1)
39
39
 
40
40
  within ".comment-order-by" do
41
- click_link "Best rated"
41
+ click_on "Best rated"
42
42
  end
43
43
 
44
44
  expect(page).to have_css(".comments > div:nth-child(2)", text: "Most Rated Comment")
@@ -50,11 +50,11 @@ shared_examples "comments" do
50
50
 
51
51
  it "displays the show replies link on comment with reply" do
52
52
  visit resource_path
53
- expect(page).not_to have_content("Comments are disabled at this time")
53
+ expect(page).to have_no_content("Comments are disabled at this time")
54
54
  expect(page).to have_css(".comment", minimum: 1)
55
55
 
56
56
  within("#accordion-#{single_comment.id}") do
57
- expect(page).to have_content "Hide replies"
57
+ expect(page).to have_content "Hide reply"
58
58
  end
59
59
  end
60
60
 
@@ -66,11 +66,11 @@ shared_examples "comments" do
66
66
 
67
67
  it "displays the show replies link on comment with reply" do
68
68
  visit resource_path
69
- expect(page).not_to have_content("Comments are disabled at this time")
69
+ expect(page).to have_no_content("Comments are disabled at this time")
70
70
  expect(page).to have_css(".comment", minimum: 1)
71
71
 
72
72
  within("#accordion-#{single_comment.id}") do
73
- expect(page).not_to have_content "Hide replies"
73
+ expect(page).to have_no_content "Hide reply"
74
74
  end
75
75
  end
76
76
  end
@@ -85,18 +85,18 @@ shared_examples "comments" do
85
85
  end
86
86
 
87
87
  it "shows only a deletion message for deleted comments" do
88
- expect(page).to have_selector("#comment_#{deleted_comment.id}")
88
+ expect(page).to have_css("#comment_#{deleted_comment.id}")
89
89
 
90
- expect(page).not_to have_content(deleted_comment.author.name)
91
- expect(page).not_to have_content(translated(deleted_comment.body))
90
+ expect(page).to have_no_content(deleted_comment.author.name)
91
+ expect(page).to have_no_content(translated(deleted_comment.body))
92
92
  within "#comment_#{deleted_comment.id}" do
93
93
  expect(page).to have_content("Comment deleted on")
94
- expect(page).not_to have_selector("comment__footer")
94
+ expect(page).to have_no_css(".comment__header")
95
95
  end
96
96
  end
97
97
 
98
98
  it "counts only not deleted comments" do
99
- expect(page).to have_selector("span.comments-count", text: "#{comments.length - 1} comments")
99
+ expect(page).to have_css("span.comments-count", text: "#{comments.length - 1} comments")
100
100
  end
101
101
 
102
102
  context "when deleted comment has replies, they are shown" do
@@ -106,7 +106,7 @@ shared_examples "comments" do
106
106
  visit resource_path
107
107
 
108
108
  within "#comment_#{deleted_comment.id}" do
109
- expect(page).to have_selector("#comment-#{deleted_comment.id}-replies")
109
+ expect(page).to have_css("#comment-#{deleted_comment.id}-replies")
110
110
  expect(page).to have_content(reply.author.name)
111
111
  expect(page).to have_content(reply.body.values.first)
112
112
  end
@@ -117,7 +117,8 @@ shared_examples "comments" do
117
117
  context "when not authenticated" do
118
118
  it "does not show form to add comments to user" do
119
119
  visit resource_path
120
- expect(page).not_to have_selector(".add-comment form")
120
+ expect(page).to have_no_css(".add-comment form")
121
+ expect(page).to have_css(".comment-thread")
121
122
  end
122
123
  end
123
124
 
@@ -128,33 +129,65 @@ shared_examples "comments" do
128
129
  end
129
130
 
130
131
  it "shows form to add comments to user" do
131
- expect(page).to have_selector(".add-comment form")
132
+ expect(page).to have_css(".add-comment form")
133
+ end
134
+
135
+ context "when user is not authorized to comment" do
136
+ let(:permissions) do
137
+ {
138
+ comment: {
139
+ authorization_handlers: {
140
+ "dummy_authorization_handler" => { "options" => {} }
141
+ }
142
+ }
143
+ }
144
+ end
145
+
146
+ before do
147
+ organization.available_authorizations = ["dummy_authorization_handler"]
148
+ organization.save!
149
+ commentable.create_resource_permission(permissions:)
150
+ allow(commentable).to receive(:user_allowed_to_comment?).with(user).and_return(false)
151
+ allow(commentable).to receive(:user_authorized_to_comment?).with(user).and_return(true)
152
+ end
153
+
154
+ it "shows a message indicating that comments are restricted" do
155
+ visit resource_path
156
+ expect(page).to have_no_content("Comments are disabled at this time")
157
+ expect(page).to have_content("You need to be verified to comment at this moment")
158
+ end
132
159
  end
133
160
 
134
161
  describe "when using emojis" do
135
162
  before do
136
163
  within_language_menu do
137
- click_link "Castellano"
164
+ click_on "Castellano"
138
165
  end
139
166
  end
140
167
  shared_examples_for "allowing to select emojis" do
141
168
  it "allows selecting emojis" do
142
169
  within_language_menu do
143
- click_link locale
170
+ click_on locale
144
171
  end
145
172
 
146
173
  within ".add-comment form" do
147
- expect(page).to have_selector(".emoji__container")
148
- expect(page).to have_selector(".emoji__trigger .emoji__button")
174
+ expect(page).to have_css(".emoji__container")
175
+ expect(page).to have_css(".emoji__trigger .emoji__button")
149
176
  find(".emoji__trigger .emoji__button").click
150
177
  end
151
178
 
152
- within ".picmo__popupContainer .picmo__picker .picmo__content" do
179
+ within ".emoji__decidim" do
153
180
  expect(page).to have_content(phrase)
154
- categories = page.all(".picmo__emojiCategory")
155
- within categories[1] do
156
- click_button "😀"
157
- end
181
+ # Since emoji-mart is a React component, we need to use JS to click on an emoji icon
182
+ # as the emoji picker is a shadow DOM element.
183
+ # The script below is trying to find the first emoji in the "Smileys & People" category and simulate
184
+ # a click from the user on it.
185
+ script = <<~JS
186
+ var emoji_picker = document.getElementsByTagName("em-emoji-picker")[0];
187
+ var category = emoji_picker.shadowRoot.querySelectorAll("div.category")[1]
188
+ category.querySelectorAll("button")[0].click();
189
+ JS
190
+ execute_script(script)
158
191
  end
159
192
 
160
193
  within ".add-comment form" do
@@ -165,14 +198,14 @@ shared_examples "comments" do
165
198
 
166
199
  context "when the locale is supported" do
167
200
  let(:locale) { "English" }
168
- let(:phrase) { "SMILEYS & EMOTION" }
201
+ let(:phrase) { I18n.t("emojis.categories.people") }
169
202
 
170
203
  it_behaves_like "allowing to select emojis"
171
204
  end
172
205
 
173
206
  context "when the locale is not supported" do
174
207
  let(:locale) { "Català" }
175
- let(:phrase) { "SOMRIURES I EMOCIONS" }
208
+ let(:phrase) { I18n.with_locale(:ca) { I18n.t("emojis.categories.people") } }
176
209
 
177
210
  it_behaves_like "allowing to select emojis"
178
211
  end
@@ -425,11 +458,11 @@ shared_examples "comments" do
425
458
  field.native.send_keys "toto"
426
459
  end
427
460
 
428
- expect(page).not_to have_selector(".picmo__picker.picmo__picker")
461
+ expect(page).to have_no_css(".emoji__decidim")
429
462
  within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
430
463
  find(".emoji__button").click
431
464
  end
432
- expect(page).to have_selector(".picmo__picker.picmo__picker")
465
+ expect(page).to have_css(".emoji__decidim")
433
466
  end
434
467
  end
435
468
 
@@ -444,7 +477,7 @@ shared_examples "comments" do
444
477
  field.native.send_keys("0123456789012345678901234567")
445
478
  find(".emoji__button").click
446
479
  end
447
- expect(page).not_to have_selector(".picmo__picker.picmo__picker")
480
+ expect(page).to have_no_css(".emoji-picker__picker.emoji-picker__picker")
448
481
  end
449
482
  end
450
483
  end
@@ -458,13 +491,13 @@ shared_examples "comments" do
458
491
  field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
459
492
  field.set " "
460
493
  field.native.send_keys content
461
- click_button "Publish comment"
494
+ click_on "Publish comment"
462
495
  end
463
496
  end
464
497
 
465
498
  it "shows comment to the user, updates the comments counter and clears the comment textarea" do
466
499
  expect(page).to have_comment_from(user, content, wait: 20)
467
- expect(page).to have_selector("span.comments-count", text: "#{commentable.comments.count} comments")
500
+ expect(page).to have_css("span.comments-count", text: "#{commentable.comments.count} comments")
468
501
  expect(page.find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}").value).to be_empty
469
502
  end
470
503
  end
@@ -477,7 +510,7 @@ shared_examples "comments" do
477
510
  field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
478
511
  field.set " "
479
512
  field.native.send_keys content
480
- click_button "Publish comment"
513
+ click_on "Publish comment"
481
514
  end
482
515
  end
483
516
 
@@ -520,7 +553,7 @@ shared_examples "comments" do
520
553
  it "displays the hide button" do
521
554
  visit current_path
522
555
  within "#comment_#{thread.id}" do
523
- expect(page).to have_content("Hide replies")
556
+ expect(page).to have_content("Hide reply")
524
557
  expect(page).to have_content(new_reply_body)
525
558
  end
526
559
  end
@@ -528,9 +561,9 @@ shared_examples "comments" do
528
561
  it "displays the show button" do
529
562
  visit current_path
530
563
  within "#comment_#{thread.id}" do
531
- click_button "Hide replies"
564
+ click_on "Hide reply"
532
565
  expect(page).to have_content("Show reply")
533
- expect(page).not_to have_content(new_reply_body)
566
+ expect(page).to have_no_content(new_reply_body)
534
567
  end
535
568
  end
536
569
 
@@ -540,9 +573,9 @@ shared_examples "comments" do
540
573
  it "displays the show button" do
541
574
  visit current_path
542
575
  within "#comment_#{thread.id}" do
543
- click_button "Hide replies"
576
+ click_on "Hide 3 replies"
544
577
  expect(page).to have_content("Show 3 replies")
545
- expect(page).not_to have_content(new_reply_body)
578
+ expect(page).to have_no_content(new_reply_body)
546
579
  end
547
580
  end
548
581
  end
@@ -591,7 +624,7 @@ shared_examples "comments" do
591
624
  field.set " "
592
625
  field.native.send_keys content
593
626
  select user_group.name, from: "Comment as"
594
- click_button "Publish comment"
627
+ click_on "Publish comment"
595
628
  end
596
629
 
597
630
  expect(page).to have_comment_from(user_group, content, wait: 20)
@@ -612,7 +645,7 @@ shared_examples "comments" do
612
645
  it "the context menu of the comment does not show a delete link" do
613
646
  within "#comment_#{comment.id}" do
614
647
  page.find("[id^='dropdown-trigger']").click
615
- expect(page).not_to have_link("Delete")
648
+ expect(page).to have_no_link("Delete")
616
649
  end
617
650
  end
618
651
  end
@@ -632,18 +665,18 @@ shared_examples "comments" do
632
665
 
633
666
  within "#comment_#{comment.id}" do
634
667
  page.find("[id^='dropdown-trigger']").click
635
- click_link "Delete"
668
+ click_on "Delete"
636
669
  end
637
670
 
638
671
  accept_confirm
639
672
 
640
- expect(page).to have_selector("#comment_#{comment.id}")
673
+ expect(page).to have_css("#comment_#{comment.id}")
641
674
  within "#comment_#{comment.id}" do
642
675
  expect(page).to have_content("Comment deleted on")
643
- expect(page).not_to have_content comment_author.name
644
- expect(page).not_to have_selector("comment__footer")
676
+ expect(page).to have_no_content comment_author.name
677
+ expect(page).to have_no_css(".comment__header")
645
678
  end
646
- expect(page).to have_selector("span.comments-count", text: "3 comments")
679
+ expect(page).to have_css("span.comments-count", text: "3 comments")
647
680
 
648
681
  expect(Decidim::Comments::Comment.not_deleted.count).to eq(3)
649
682
  end
@@ -665,7 +698,7 @@ shared_examples "comments" do
665
698
  within "#comment_#{comment.id}" do
666
699
  # Toolbar
667
700
  page.find("[id^='dropdown-trigger']").click
668
- expect(page).not_to have_button("Edit")
701
+ expect(page).to have_no_button("Edit")
669
702
  end
670
703
  end
671
704
  end
@@ -686,16 +719,16 @@ shared_examples "comments" do
686
719
  within "#comment_#{comment.id}" do
687
720
  # Toolbar
688
721
  page.find("[id^='dropdown-trigger']").click
689
- click_button "Edit"
722
+ click_on "Edit"
690
723
  end
691
724
  fill_in "edit_comment_#{comment.id}", with: " This comment has been fixed"
692
- click_button "Send"
725
+ click_on "Send"
693
726
  end
694
727
 
695
728
  it "the comment body changes" do
696
729
  within "#comment_#{comment.id}" do
697
730
  expect(page).to have_content("This comment has been fixed")
698
- expect(page).not_to have_content(comment_body)
731
+ expect(page).to have_no_content(comment_body)
699
732
  end
700
733
  end
701
734
 
@@ -717,20 +750,20 @@ shared_examples "comments" do
717
750
  visit resource_path
718
751
 
719
752
  within "#comments #comment_#{comment.id}" do
720
- click_button "Reply"
753
+ click_on "Reply"
721
754
  end
722
755
 
723
- expect(page).to have_selector("#comment_#{comment.id} .add-comment")
756
+ expect(page).to have_css("#comment_#{comment.id} .add-comment")
724
757
 
725
758
  within "form#new_comment_for_#{comment.commentable_type.demodulize}_#{comment.id}" do
726
759
  field = find("#add-comment-#{comment.commentable_type.demodulize}-#{comment.id}")
727
760
  field.set " "
728
761
  field.native.send_keys content
729
- click_button "Publish reply"
762
+ click_on "Publish reply"
730
763
  end
731
764
 
732
765
  expect(page).to have_reply_to(comment, content)
733
- expect(page).to have_selector("span.comments-count", text: "#{commentable.comments.count} comments")
766
+ expect(page).to have_css("span.comments-count", text: "#{commentable.comments.count} comments")
734
767
  expect(page).to have_reply_to(comment, "This is a reply")
735
768
  end
736
769
  end
@@ -745,7 +778,7 @@ shared_examples "comments" do
745
778
  visit current_path
746
779
 
747
780
  within "#comments #comment_#{parent.id}" do
748
- expect(page).to have_selector("#comment-#{parent.id}-replies")
781
+ expect(page).to have_css("#comment-#{parent.id}-replies")
749
782
  expect(page.find("#comment-#{parent.id}-replies").text).to be_blank
750
783
  end
751
784
  end
@@ -756,29 +789,29 @@ shared_examples "comments" do
756
789
  before do
757
790
  visit resource_path
758
791
 
759
- expect(page).to have_selector(".add-comment form")
792
+ expect(page).to have_css(".add-comment form")
760
793
  end
761
794
 
762
795
  it "works according to the setting in the commentable" do
763
796
  if commentable.comments_have_alignment?
764
- page.find(".opinion-toggle--ok").click
765
- expect(page.find(".opinion-toggle--ok")["aria-pressed"]).to eq("true")
766
- expect(page.find(".opinion-toggle--meh")["aria-pressed"]).to eq("false")
767
- expect(page.find(".opinion-toggle--ko")["aria-pressed"]).to eq("false")
768
- expect(page.find(".opinion-toggle .selected-state", visible: false)).to have_content("Your opinion about this topic is positive")
797
+ page.find("[data-toggle-ok=true]").click
798
+ expect(page.find("[data-toggle-ok=true]")["aria-pressed"]).to eq("true")
799
+ expect(page.find("[data-toggle-meh=true]")["aria-pressed"]).to eq("false")
800
+ expect(page.find("[data-toggle-ko=true]")["aria-pressed"]).to eq("false")
801
+ expect(page.find("div[data-opinion-toggle] .selected-state", visible: false)).to have_content("Your opinion about this topic is positive")
769
802
 
770
803
  within "form#new_comment_for_#{commentable.commentable_type.demodulize}_#{commentable.id}" do
771
804
  field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
772
805
  field.set " "
773
806
  field.native.send_keys "I am in favor about this!"
774
- click_button "Publish comment"
807
+ click_on "Publish comment"
775
808
  end
776
809
 
777
810
  within "#comments" do
778
- expect(page).to have_selector "span.success.label", text: "In favor", wait: 20
811
+ expect(page).to have_css "span.success.label", text: "In favor", wait: 20
779
812
  end
780
813
  else
781
- expect(page).not_to have_selector(".opinion-toggle--ok")
814
+ expect(page).to have_no_css("[data-toggle-ok=true]")
782
815
  end
783
816
  end
784
817
  end
@@ -793,11 +826,11 @@ shared_examples "comments" do
793
826
  it "works according to the setting in the commentable" do
794
827
  within "#comment_#{comments[0].id}" do
795
828
  if commentable.comments_have_votes?
796
- expect(page).to have_selector(".js-comment__votes--up", text: /0/)
829
+ expect(page).to have_css(".js-comment__votes--up", text: /0/)
797
830
  page.find(".js-comment__votes--up").click
798
- expect(page).to have_selector(".js-comment__votes--up", text: /1/)
831
+ expect(page).to have_css(".js-comment__votes--up", text: /1/)
799
832
  else
800
- expect(page).not_to have_selector(".js-comment__votes--up", text: /0/)
833
+ expect(page).to have_no_css(".js-comment__votes--up", text: /0/)
801
834
  end
802
835
  end
803
836
  end
@@ -809,10 +842,10 @@ shared_examples "comments" do
809
842
  skip "Commentable comments has no votes" unless commentable.comments_have_votes?
810
843
 
811
844
  visit current_path
812
- expect(page).to have_selector("#comment_#{comments[0].id} > .comment__footer > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /0/)
813
- page.find("#comment_#{comments[0].id} > .comment__footer > .comment__footer-grid .comment__votes .js-comment__votes--up").click
814
- expect(page).to have_selector("#comment_#{comments[0].id} > .comment__footer > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /1/)
815
- expect(page).to have_selector("#comment_#{comment_on_comment.id} > .comment__footer > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /0/)
845
+ expect(page).to have_css("#comment_#{comments[0].id} > [data-comment-footer] > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /0/)
846
+ page.find("#comment_#{comments[0].id} > [data-comment-footer] > .comment__footer-grid .comment__votes .js-comment__votes--up").click
847
+ expect(page).to have_css("#comment_#{comments[0].id} > [data-comment-footer] > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /1/)
848
+ expect(page).to have_css("#comment_#{comment_on_comment.id} > [data-comment-footer] > .comment__footer-grid .comment__votes .js-comment__votes--up", text: /0/)
816
849
  end
817
850
  end
818
851
  end
@@ -821,11 +854,11 @@ shared_examples "comments" do
821
854
  it "works according to the setting in the commentable" do
822
855
  within "#comment_#{comments[0].id}" do
823
856
  if commentable.comments_have_votes?
824
- expect(page).to have_selector(".js-comment__votes--down", text: /0/)
857
+ expect(page).to have_css(".js-comment__votes--down", text: /0/)
825
858
  page.find(".js-comment__votes--down").click
826
- expect(page).to have_selector(".js-comment__votes--down", text: /1/)
859
+ expect(page).to have_css(".js-comment__votes--down", text: /1/)
827
860
  else
828
- expect(page).not_to have_selector(".js-comment__votes--down", text: /0/)
861
+ expect(page).to have_no_css(".js-comment__votes--down", text: /0/)
829
862
  end
830
863
  end
831
864
  end
@@ -849,7 +882,7 @@ shared_examples "comments" do
849
882
 
850
883
  context "when text finish with a mention" do
851
884
  it "shows the tribute container" do
852
- expect(page).to have_selector(".tribute-container", text: mentioned_user.name, wait: 10)
885
+ expect(page).to have_css(".tribute-container", text: mentioned_user.name, wait: 10)
853
886
  end
854
887
  end
855
888
 
@@ -857,7 +890,7 @@ shared_examples "comments" do
857
890
  let(:content) { "A valid user mention: @#{mentioned_user.nickname}." }
858
891
 
859
892
  it "shows the tribute container" do
860
- expect(page).not_to have_selector(".tribute-container", text: mentioned_user.name)
893
+ expect(page).to have_no_css(".tribute-container", text: mentioned_user.name)
861
894
  end
862
895
  end
863
896
  end
@@ -867,7 +900,7 @@ shared_examples "comments" do
867
900
  let(:content) { "A unconfirmed user mention: @#{mentioned_user.nickname}" }
868
901
 
869
902
  it "do not show the tribute container" do
870
- expect(page).not_to have_selector(".tribute-container", text: mentioned_user.name)
903
+ expect(page).to have_no_css(".tribute-container", text: mentioned_user.name)
871
904
  end
872
905
  end
873
906
 
@@ -876,7 +909,7 @@ shared_examples "comments" do
876
909
  let(:content) { "A confirmed user group mention: @#{mentioned_group.nickname}" }
877
910
 
878
911
  it "shows the tribute container" do
879
- expect(page).to have_selector(".tribute-container", text: mentioned_group.nickname, wait: 10)
912
+ expect(page).to have_css(".tribute-container", text: mentioned_group.nickname, wait: 10)
880
913
  end
881
914
  end
882
915
  end
@@ -889,7 +922,7 @@ shared_examples "comments" do
889
922
  field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
890
923
  field.set " "
891
924
  field.native.send_keys content
892
- click_button "Publish comment"
925
+ click_on "Publish comment"
893
926
  end
894
927
  end
895
928
 
@@ -910,7 +943,7 @@ shared_examples "comments" do
910
943
 
911
944
  it "ignores the mention" do
912
945
  expect(page).to have_comment_from(user, "This text mentions a user outside current organization: @#{mentioned_user.nickname}", wait: 20)
913
- expect(page).not_to have_link "@#{mentioned_user.nickname}"
946
+ expect(page).to have_no_link "@#{mentioned_user.nickname}"
914
947
  end
915
948
  end
916
949
 
@@ -919,7 +952,7 @@ shared_examples "comments" do
919
952
 
920
953
  it "ignores the mention" do
921
954
  expect(page).to have_comment_from(user, "This text mentions a @nonexistent user", wait: 20)
922
- expect(page).not_to have_link "@nonexistent"
955
+ expect(page).to have_no_link "@nonexistent"
923
956
  end
924
957
  end
925
958
  end
@@ -934,7 +967,7 @@ shared_examples "comments" do
934
967
  field = find("#add-comment-#{commentable.commentable_type.demodulize}-#{commentable.id}")
935
968
  field.set " "
936
969
  field.native.send_keys content
937
- click_button "Publish comment"
970
+ click_on "Publish comment"
938
971
  end
939
972
  end
940
973
 
@@ -969,3 +1002,46 @@ shared_examples "comments" do
969
1002
  end
970
1003
  end
971
1004
  end
1005
+
1006
+ shared_examples "comments blocked" do
1007
+ context "when not authenticated" do
1008
+ context "when comments are blocked" do
1009
+ let(:active_step_id) { component.participatory_space.active_step.id }
1010
+
1011
+ before do
1012
+ component.update!(step_settings: { active_step_id => { comments_blocked: true } })
1013
+ end
1014
+
1015
+ it "shows a message indicating that comments are disabled" do
1016
+ visit resource_path
1017
+ expect(page).to have_content("Comments are disabled at this time")
1018
+ expect(page).to have_no_content("You need to be verified to comment at this moment")
1019
+ end
1020
+ end
1021
+ end
1022
+
1023
+ context "when authenticated" do
1024
+ let!(:organization) { create(:organization) }
1025
+ let!(:user) { create(:user, :confirmed, organization:) }
1026
+ let!(:comments) { create_list(:comment, 3, commentable:) }
1027
+
1028
+ before do
1029
+ login_as user, scope: :user
1030
+ visit resource_path
1031
+ end
1032
+
1033
+ context "when comments are blocked" do
1034
+ let(:active_step_id) { component.participatory_space.active_step.id }
1035
+
1036
+ before do
1037
+ component.update!(step_settings: { active_step_id => { comments_blocked: true } })
1038
+ end
1039
+
1040
+ it "shows a message indicating that comments are disabled" do
1041
+ visit resource_path
1042
+ expect(page).to have_content("Comments are disabled at this time")
1043
+ expect(page).to have_no_content("You need to be verified to comment at this moment")
1044
+ end
1045
+ end
1046
+ end
1047
+ end
@@ -7,7 +7,7 @@ shared_examples "comments_reports" do
7
7
 
8
8
  # Open toolbar
9
9
  page.find("[id^='dropdown-trigger']").click
10
- click_button "Report"
10
+ click_on "Report"
11
11
 
12
12
  expect(page).to have_css("#loginModal", visible: :visible)
13
13
  end
@@ -24,12 +24,12 @@ shared_examples "comments_reports" do
24
24
 
25
25
  # Open toolbar
26
26
  page.find("[id^='dropdown-trigger']").click
27
- click_button "Report"
27
+ click_on "Report"
28
28
 
29
29
  expect(page).to have_css(".flag-modal", visible: :visible)
30
30
 
31
31
  within ".flag-modal" do
32
- click_button "Report"
32
+ click_on "Report"
33
33
  end
34
34
 
35
35
  expect(page).to have_content "report has been created"
@@ -47,7 +47,7 @@ shared_examples "comments_reports" do
47
47
 
48
48
  # Open toolbar
49
49
  page.find("[id^='dropdown-trigger']").click
50
- click_button "Report"
50
+ click_on "Report"
51
51
 
52
52
  expect(page).to have_css(".flag-modal", visible: :visible)
53
53
 
@@ -15,7 +15,7 @@ shared_context "when sends the notification digest" do
15
15
  end
16
16
 
17
17
  shared_examples_for "notification digest mail" do
18
- context "when a notificable event takes place" do
18
+ context "when a notifiable event takes place" do
19
19
  let!(:organization) { create(:organization) }
20
20
  let!(:participatory_space) { create(:participatory_process, organization:) }
21
21
 
@@ -27,7 +27,7 @@ shared_examples "editable content for admins" do
27
27
  let(:user) { create(:user, :confirmed, organization:) }
28
28
 
29
29
  it "does not have a link to edit the content at the admin" do
30
- expect(page).not_to have_css(header_selector)
30
+ expect(page).to have_no_css(header_selector)
31
31
  end
32
32
  end
33
33
  end
@@ -18,25 +18,25 @@ shared_examples_for "has embedded video in description" do |description_attribut
18
18
 
19
19
  context "when cookies are rejected" do
20
20
  before do
21
- click_link "Cookie settings"
22
- click_button "Accept only essential"
21
+ click_on "Cookie settings"
22
+ click_on "Accept only essential"
23
23
  end
24
24
 
25
25
  it "disables iframe" do
26
26
  expect(page).to have_content(cookie_warning)
27
- expect(page).not_to have_selector("iframe")
27
+ expect(page).to have_no_css("iframe")
28
28
  end
29
29
  end
30
30
 
31
31
  context "when cookies are accepted" do
32
32
  before do
33
- click_link "Cookie settings"
34
- click_button "Accept all"
33
+ click_on "Cookie settings"
34
+ click_on "Accept all"
35
35
  end
36
36
 
37
37
  it "shows iframe" do
38
- expect(page).not_to have_content(cookie_warning)
39
- expect(page).to have_selector("iframe", count:)
38
+ expect(page).to have_no_content(cookie_warning)
39
+ expect(page).to have_css("iframe", count:)
40
40
  end
41
41
  end
42
42
  end
@@ -5,7 +5,7 @@ shared_examples "fingerprint" do
5
5
 
6
6
  it "shows a fingerprint" do
7
7
  visit(resource_locator(fingerprintable).path)
8
- click_button("Check fingerprint")
8
+ click_on("Check fingerprint")
9
9
 
10
10
  within ".fingerprint-modal" do
11
11
  expect(page).to(have_content(fingerprintable.fingerprint.value))