decidim-core 0.29.5 → 0.30.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/cells/decidim/activity/show.erb +6 -6
- data/app/cells/decidim/address/show.erb +3 -3
- data/app/cells/decidim/amendable/amend_button_card/show.erb +6 -4
- data/app/cells/decidim/amendable/amend_button_card_cell.rb +8 -0
- data/app/cells/decidim/amendable/amendments/show.erb +1 -1
- data/app/cells/decidim/amendable/promote_button_card/show.erb +2 -0
- data/app/cells/decidim/author/flag.erb +6 -0
- data/app/cells/decidim/author/flag_user.erb +14 -0
- data/app/cells/decidim/author/show.erb +4 -2
- data/app/cells/decidim/author_cell.rb +1 -1
- data/app/cells/decidim/card_l/extra_data.erb +1 -0
- data/app/cells/decidim/card_metadata_cell.rb +9 -16
- data/app/cells/decidim/comments_button_cell.rb +14 -2
- data/app/cells/decidim/content_blocks/highlighted_elements_cell.rb +2 -0
- data/app/cells/decidim/content_blocks/highlighted_elements_with_cell_for_list_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/participatory_space_extra_data/extra_data.erb +2 -2
- data/app/cells/decidim/content_blocks/participatory_space_main_data/title.erb +2 -11
- data/app/cells/decidim/endorsement_block/show.erb +0 -1
- data/app/cells/decidim/endorsement_block_cell.rb +6 -0
- data/app/cells/decidim/endorsement_buttons/button_content.erb +1 -1
- data/app/cells/decidim/endorsement_buttons/select_identity_button.erb +1 -1
- data/app/cells/decidim/endorsement_buttons/show.erb +7 -7
- data/app/cells/decidim/endorsement_buttons/verification_modal.erb +4 -2
- data/app/cells/decidim/endorsers_list/empty.erb +3 -0
- data/app/cells/decidim/endorsers_list/full.erb +17 -5
- data/app/cells/decidim/endorsers_list/show.erb +19 -10
- data/app/cells/decidim/endorsers_list_cell.rb +19 -6
- data/app/cells/decidim/flag_modal/flag_user.erb +34 -0
- data/app/cells/decidim/flag_modal/show.erb +52 -0
- data/app/cells/decidim/flag_modal_cell.rb +56 -0
- data/app/cells/decidim/follow_button/show.erb +1 -2
- data/app/cells/decidim/follow_button_cell.rb +5 -0
- data/app/cells/decidim/footer_topics/show.erb +2 -2
- data/app/cells/decidim/group_admins/show.erb +1 -3
- data/app/cells/decidim/group_members/show.erb +2 -6
- data/app/cells/decidim/images_panel/show.erb +2 -5
- data/app/cells/decidim/map/show.erb +3 -0
- data/app/cells/decidim/map/template.erb +14 -0
- data/app/cells/decidim/map_cell.rb +39 -0
- data/app/cells/decidim/notification_actions/buttons_cell.rb +1 -1
- data/app/cells/decidim/onboarding_action_message/show.erb +15 -0
- data/app/cells/decidim/onboarding_action_message_cell.rb +81 -0
- data/app/cells/decidim/participatory_space_dropdown_metadata/metadata.erb +4 -4
- data/app/cells/decidim/participatory_space_dropdown_metadata/show.erb +3 -5
- data/app/cells/decidim/participatory_space_private_user/show.erb +23 -0
- data/app/cells/decidim/participatory_space_private_user_cell.rb +21 -0
- data/app/cells/decidim/profile_actions/show.erb +1 -1
- data/app/cells/decidim/profile_sidebar/show.erb +167 -0
- data/app/cells/decidim/profile_sidebar_cell.rb +68 -0
- data/app/cells/decidim/progress_bar/show.erb +2 -2
- data/app/cells/decidim/report_button/already_reported_modal.erb +2 -2
- data/app/cells/decidim/report_button/flag_modal.erb +36 -24
- data/app/cells/decidim/report_button_cell.rb +9 -2
- data/app/cells/decidim/resource_history/show.erb +20 -0
- data/app/cells/decidim/resource_history_cell.rb +66 -0
- data/app/cells/decidim/resource_types_filter/show.erb +1 -1
- data/app/cells/decidim/resource_types_filter_cell.rb +6 -6
- data/app/cells/decidim/share_button_cell.rb +0 -4
- data/app/cells/decidim/share_widget/modal.erb +26 -0
- data/app/cells/decidim/share_widget/show.erb +2 -0
- data/app/cells/decidim/share_widget_cell.rb +20 -0
- data/app/cells/decidim/tags/show.erb +7 -4
- data/app/cells/decidim/tags_cell.rb +11 -72
- data/app/cells/decidim/upload_modal/files.erb +4 -4
- data/app/cells/decidim/upload_modal_cell.rb +3 -5
- data/app/cells/decidim/user_activity/show.erb +1 -1
- data/app/commands/decidim/amendable/accept.rb +1 -2
- data/app/commands/decidim/amendable/create_draft.rb +2 -2
- data/app/commands/decidim/create_ephemeral_user.rb +52 -0
- data/app/commands/decidim/create_omniauth_registration.rb +21 -17
- data/app/commands/decidim/create_report.rb +8 -11
- data/app/commands/decidim/create_user_group.rb +6 -2
- data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
- data/app/commands/decidim/invite_user.rb +1 -1
- data/app/commands/decidim/search.rb +0 -14
- data/app/commands/decidim/update_account.rb +11 -3
- data/app/commands/decidim/update_notifications_settings.rb +1 -0
- data/app/commands/decidim/update_resources_taxonomies.rb +67 -0
- data/app/commands/decidim/update_user_group.rb +7 -1
- data/app/constraints/decidim/current_component.rb +1 -1
- data/app/controllers/concerns/decidim/ajax_permission_handler.rb +21 -0
- data/app/controllers/concerns/decidim/devise_authentication_methods.rb +3 -6
- data/app/controllers/concerns/decidim/devise_controllers.rb +2 -0
- data/app/controllers/concerns/decidim/disable_redirection_to_external_host.rb +1 -1
- data/app/controllers/concerns/decidim/ephemeral_session_checker.rb +87 -0
- data/app/controllers/concerns/decidim/filter_resource.rb +4 -2
- data/app/controllers/concerns/decidim/has_members_page.rb +25 -0
- data/app/controllers/concerns/decidim/locale_switcher.rb +2 -2
- data/app/controllers/concerns/decidim/needs_password_change.rb +0 -1
- data/app/controllers/concerns/decidim/needs_permission.rb +2 -1
- data/app/controllers/concerns/decidim/needs_tos_accepted.rb +4 -5
- data/app/controllers/concerns/decidim/onboarding_action_methods.rb +52 -0
- data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -4
- data/app/controllers/decidim/amendments_controller.rb +3 -3
- data/app/controllers/decidim/application_controller.rb +9 -0
- data/app/controllers/decidim/authorization_modals_controller.rb +8 -2
- data/app/controllers/decidim/components/base_controller.rb +3 -7
- data/app/controllers/decidim/devise/confirmations_controller.rb +4 -0
- data/app/controllers/decidim/devise/omniauth_registrations_controller.rb +8 -1
- data/app/controllers/decidim/devise/registrations_controller.rb +1 -1
- data/app/controllers/decidim/devise/sessions_controller.rb +2 -0
- data/app/controllers/decidim/download_your_data_controller.rb +33 -2
- data/app/controllers/decidim/editor_images_controller.rb +1 -11
- data/app/controllers/decidim/follows_controller.rb +1 -1
- data/app/controllers/decidim/geolocation_controller.rb +19 -0
- data/app/controllers/decidim/homepage_controller.rb +0 -1
- data/app/controllers/decidim/open_data_controller.rb +33 -8
- data/app/controllers/decidim/profiles_controller.rb +2 -2
- data/app/controllers/decidim/reports_controller.rb +2 -7
- data/app/controllers/decidim/user_activities_controller.rb +1 -1
- data/app/controllers/decidim/user_conversations_controller.rb +1 -11
- data/app/events/decidim/soft_delete_resource_event.rb +15 -0
- data/app/forms/decidim/account_form.rb +2 -5
- data/app/forms/decidim/amendable/form.rb +4 -2
- data/app/forms/decidim/ephemeral_user_form.rb +22 -0
- data/app/forms/decidim/notifications_settings_form.rb +1 -0
- data/app/forms/decidim/omniauth_registration_form.rb +15 -2
- data/app/forms/decidim/registration_form.rb +1 -1
- data/app/helpers/concerns/decidim/flash_helper_extensions.rb +17 -2
- data/app/helpers/decidim/action_authorization_helper.rb +75 -14
- data/app/helpers/decidim/amendments_helper.rb +1 -11
- data/app/helpers/decidim/application_helper.rb +6 -2
- data/app/helpers/decidim/breadcrumb_helper.rb +6 -0
- data/app/helpers/decidim/cache_helper.rb +1 -1
- data/app/helpers/decidim/check_boxes_tree_helper.rb +25 -53
- data/app/helpers/decidim/decidim_form_helper.rb +0 -44
- data/app/helpers/decidim/endorsable_helper.rb +0 -10
- data/app/helpers/decidim/filters_helper.rb +0 -25
- data/app/helpers/decidim/layout_helper.rb +6 -6
- data/app/helpers/decidim/menu_helper.rb +2 -2
- data/app/helpers/decidim/messaging/conversation_helper.rb +2 -3
- data/app/helpers/decidim/meta_tags_helper.rb +32 -23
- data/app/helpers/decidim/modal_helper.rb +23 -0
- data/app/helpers/decidim/omniauth_helper.rb +5 -5
- data/app/helpers/decidim/onboarding_action_helper.rb +13 -0
- data/app/helpers/decidim/orders_helper.rb +1 -2
- data/app/helpers/decidim/paginate_helper.rb +1 -1
- data/app/helpers/decidim/participatory_space_helpers.rb +1 -1
- data/app/helpers/decidim/passwords_helper.rb +2 -2
- data/app/helpers/decidim/taxonomies_helper.rb +40 -0
- data/app/helpers/decidim/tooltip_helper.rb +1 -4
- data/app/jobs/decidim/download_your_data_export_job.rb +2 -19
- data/app/jobs/decidim/event_publisher_job.rb +18 -9
- data/app/jobs/decidim/export_job.rb +5 -1
- data/app/jobs/decidim/export_participatory_space_job.rb +4 -1
- data/app/jobs/decidim/open_data_job.rb +4 -4
- data/app/mailers/decidim/export_mailer.rb +7 -12
- data/app/mailers/decidim/notifications_digest_mailer.rb +1 -7
- data/app/mailers/decidim/reported_mailer.rb +2 -18
- data/app/models/decidim/action_log.rb +20 -1
- data/app/models/decidim/category.rb +4 -0
- data/app/models/decidim/component.rb +25 -3
- data/app/models/decidim/metric.rb +2 -1
- data/app/models/decidim/moderation.rb +16 -0
- data/app/models/decidim/newsletter.rb +12 -8
- data/app/models/decidim/organization.rb +7 -3
- data/app/models/decidim/participatory_space_private_user.rb +20 -0
- data/app/models/decidim/private_export.rb +24 -0
- data/app/models/decidim/push_notification_message.rb +1 -1
- data/app/models/decidim/report.rb +1 -1
- data/app/models/decidim/scope.rb +4 -0
- data/app/models/decidim/share_token.rb +36 -10
- data/app/models/decidim/taxonomization.rb +23 -0
- data/app/models/decidim/taxonomy.rb +139 -0
- data/app/models/decidim/taxonomy_filter.rb +130 -0
- data/app/models/decidim/taxonomy_filter_item.rb +33 -0
- data/app/models/decidim/user.rb +13 -23
- data/app/models/decidim/user_base_entity.rb +12 -4
- data/app/models/decidim/user_moderation.rb +9 -0
- data/app/models/decidim/user_report.rb +4 -0
- data/app/packs/entrypoints/decidim_core.js +1 -0
- data/app/packs/entrypoints/decidim_geocoding.js +2 -0
- data/app/packs/images/decidim/brands/facebook.svg +10 -0
- data/app/packs/images/decidim/brands/google.svg +7 -1
- data/app/packs/images/decidim/brands/twitter-x.svg +3 -0
- data/app/packs/images/decidim/default-avatar.svg +1 -1
- data/app/packs/src/decidim/callout.js +8 -13
- data/app/packs/src/decidim/check_boxes_tree.js +0 -1
- data/app/packs/src/decidim/clipboard.js +18 -9
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +0 -2
- data/app/packs/src/decidim/datepicker/generate_timepicker.js +0 -2
- data/app/packs/src/decidim/decidim_application.js +1 -0
- data/app/packs/src/decidim/direct_uploads/upload_field.js +4 -3
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +9 -8
- data/app/packs/src/decidim/editor/common/suggestion.js +1 -11
- data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
- data/app/packs/src/decidim/index.js +9 -5
- data/app/packs/src/decidim/input_character_counter.js +1 -1
- data/app/packs/src/decidim/map/provider/here.js +1 -1
- data/app/packs/src/decidim/onboarding_pending_action.js +24 -0
- data/app/packs/src/decidim/sticky_footer.js +29 -0
- data/app/packs/src/decidim/sticky_header.js +6 -31
- data/app/packs/src/decidim/user_registrations.js +13 -0
- data/app/packs/src/decidim/vendor/leaflet-tilelayer-here.js +212 -0
- data/app/packs/stylesheets/decidim/_accordion.scss +30 -0
- data/app/packs/stylesheets/decidim/_activity.scss +4 -4
- data/app/packs/stylesheets/decidim/_buttons.scss +19 -0
- data/app/packs/stylesheets/decidim/_cards.scss +0 -4
- data/app/packs/stylesheets/decidim/_content_blocks.scss +0 -4
- data/app/packs/stylesheets/decidim/_dropdown.scss +1 -1
- data/app/packs/stylesheets/decidim/_endorsers_list.scss +26 -20
- data/app/packs/stylesheets/decidim/_filters.scss +1 -1
- data/app/packs/stylesheets/decidim/_forms.scss +2 -2
- data/app/packs/stylesheets/decidim/_header.scss +39 -70
- data/app/packs/stylesheets/decidim/_layout.scss +34 -4
- data/app/packs/stylesheets/decidim/_login.scss +53 -6
- data/app/packs/stylesheets/decidim/_modal.scss +47 -1
- data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
- data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
- data/app/packs/stylesheets/decidim/_participatory_spaces.scss +46 -0
- data/app/packs/stylesheets/decidim/_profile.scss +1 -1
- data/app/packs/stylesheets/decidim/_success_image.scss +64 -0
- data/app/packs/stylesheets/decidim/_tribute.scss +36 -0
- data/app/packs/stylesheets/decidim/application.scss +1 -1
- data/app/packs/stylesheets/decidim/geocoding_addons.scss +5 -0
- data/app/packs/stylesheets/decidim/map.scss +7 -10
- data/app/packs/stylesheets/decidim/resource_history.scss +31 -0
- data/app/permissions/decidim/default_permissions.rb +0 -2
- data/app/permissions/decidim/permissions.rb +9 -15
- data/app/presenters/decidim/admin_log/base_user_presenter.rb +67 -0
- data/app/presenters/decidim/admin_log/component_presenter.rb +32 -3
- data/app/presenters/decidim/admin_log/moderation_presenter.rb +30 -3
- data/app/presenters/decidim/admin_log/share_token_presenter.rb +39 -0
- data/app/presenters/decidim/admin_log/taxonomy_filter_presenter.rb +57 -0
- data/app/presenters/decidim/admin_log/taxonomy_presenter.rb +48 -0
- data/app/presenters/decidim/admin_log/user_group_presenter.rb +6 -6
- data/app/presenters/decidim/admin_log/user_presenter.rb +4 -18
- data/app/presenters/decidim/log/user_presenter.rb +0 -1
- data/app/presenters/decidim/log/value_types/date_presenter.rb +1 -0
- data/app/presenters/decidim/log/value_types/taxonomy_presenter.rb +29 -0
- data/app/presenters/decidim/notification_to_mailer_presenter.rb +3 -7
- data/app/presenters/decidim/participatory_space_private_user_presenter.rb +50 -0
- data/app/presenters/decidim/taxonomy_filter_presenter.rb +19 -0
- data/app/presenters/decidim/taxonomy_presenter.rb +14 -0
- data/app/presenters/decidim/user_presenter.rb +1 -1
- data/app/queries/decidim/last_activity.rb +0 -25
- data/app/queries/decidim/metrics/blocked_users_metric_manage.rb +2 -2
- data/app/queries/decidim/metrics/users_metric_manage.rb +2 -2
- data/app/queries/decidim/public_activities.rb +1 -12
- data/app/queries/decidim/stats_users_count.rb +2 -2
- data/app/resolvers/decidim/meta_image_url_resolver.rb +128 -0
- data/app/serializers/decidim/exporters/open_data_blocked_user_serializer.rb +25 -0
- data/app/serializers/decidim/exporters/open_data_metric_serializer.rb +22 -0
- data/app/serializers/decidim/exporters/open_data_moderation_serializer.rb +30 -0
- data/app/serializers/decidim/exporters/open_data_taxonomy_serializer.rb +30 -0
- data/app/serializers/decidim/exporters/open_data_user_group_serializer.rb +38 -0
- data/app/serializers/decidim/exporters/open_data_user_serializer.rb +39 -0
- data/app/serializers/decidim/exporters/participatory_space_serializer.rb +104 -0
- data/app/serializers/decidim/exporters/serializer.rb +25 -0
- data/app/serializers/decidim/schema_org_breadcrumb_list_serializer.rb +52 -0
- data/app/services/decidim/action_authorizer.rb +32 -3
- data/app/services/decidim/base_diff_renderer.rb +1 -3
- data/app/services/decidim/download_your_data_exporter.rb +58 -24
- data/app/services/decidim/onboarding_manager.rb +272 -0
- data/app/services/decidim/open_data_exporter.rb +139 -13
- data/app/services/decidim/static_map_generator.rb +1 -1
- data/app/services/decidim/traceability.rb +13 -0
- data/app/uploaders/decidim/application_uploader.rb +1 -1
- data/app/validators/etiquette_validator.rb +9 -2
- data/app/validators/passthru_validator.rb +1 -1
- data/app/validators/translated_etiquette_validator.rb +32 -0
- data/app/views/decidim/account/_password_fields.html.erb +2 -2
- data/app/views/decidim/application/_accordion_section.html.erb +14 -0
- data/app/views/decidim/application/_collection.html.erb +30 -18
- data/app/views/decidim/devise/omniauth_registrations/new.html.erb +5 -1
- data/app/views/decidim/devise/omniauth_registrations/new_tos_fields.html.erb +29 -0
- data/app/views/decidim/devise/registrations/new.html.erb +10 -22
- data/app/views/decidim/devise/sessions/new.html.erb +24 -29
- data/app/views/decidim/devise/shared/_omniauth_buttons.html.erb +2 -4
- data/app/views/decidim/devise/shared/_tos_fields.html.erb +16 -0
- data/app/views/decidim/download_your_data/_export.html.erb +15 -0
- data/app/views/decidim/download_your_data/show.html.erb +51 -5
- data/app/views/decidim/endorsements/update_buttons_and_counters.js.erb +16 -19
- data/app/views/decidim/errors/internal_server_error.html.erb +1 -1
- data/app/views/decidim/errors/not_found.html.erb +1 -1
- data/app/views/decidim/export_mailer/download_your_data_export.html.erb +2 -2
- data/app/views/decidim/export_mailer/export.html.erb +5 -1
- data/app/views/decidim/last_activities/index.html.erb +1 -1
- data/app/views/decidim/messaging/conversations/_reply_form.html.erb +2 -1
- data/app/views/decidim/messaging/conversations/_start.html.erb +1 -1
- data/app/views/decidim/newsletters/unsubscribe.html.erb +4 -16
- data/app/views/decidim/notifications_settings/show.html.erb +22 -0
- data/app/views/decidim/open_data/_how_to_open_accordion_section.html.erb +15 -0
- data/app/views/decidim/open_data/index.html.erb +108 -0
- data/app/views/decidim/pages/show.html.erb +2 -1
- data/app/views/decidim/participatory_space_private_users/_participatory_space_private_user.html.erb +1 -0
- data/app/views/decidim/reported_mailer/hide.html.erb +9 -0
- data/app/views/decidim/reported_mailer/report.html.erb +1 -1
- data/app/views/decidim/searches/_count.html.erb +1 -1
- data/app/views/decidim/searches/_filters.html.erb +39 -76
- data/app/views/decidim/shared/_component_announcement.html.erb +1 -1
- data/app/views/decidim/shared/_confirm_modal.html.erb +5 -3
- data/app/views/decidim/shared/_filters.html.erb +4 -6
- data/app/views/decidim/shared/_login_modal.html.erb +26 -20
- data/app/views/decidim/shared/_orders.html.erb +2 -2
- data/app/views/decidim/shared/_resource_actions.html.erb +21 -0
- data/app/views/decidim/shared/_results_per_page.html.erb +1 -1
- data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -2
- data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
- data/app/views/decidim/shared/filters/_dropdown_label.html.erb +7 -4
- data/app/views/kaminari/decidim/_page.html.erb +1 -1
- data/app/views/kaminari/decidim/_paginator.html.erb +1 -1
- data/app/views/layouts/decidim/_application.html.erb +0 -1
- data/app/views/layouts/decidim/_logo.html.erb +2 -2
- data/app/views/layouts/decidim/_logo_mobile.html.erb +1 -1
- data/app/views/layouts/decidim/_meta_tags_config.html.erb +6 -11
- data/app/views/layouts/decidim/_schema_org_breadcrumb_list.html.erb +3 -0
- data/app/views/layouts/decidim/_wrapper.html.erb +15 -9
- data/app/views/layouts/decidim/footer/_main.html.erb +1 -1
- data/app/views/layouts/decidim/footer/_main_intro.html.erb +1 -1
- data/app/views/layouts/decidim/footer/_main_legal.html.erb +1 -1
- data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
- data/app/views/layouts/decidim/footer/_mini.html.erb +2 -2
- data/app/views/layouts/decidim/header/_close_ephemeral_session.html.erb +25 -0
- data/app/views/layouts/decidim/header/_main.html.erb +14 -10
- data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +0 -6
- data/app/views/layouts/decidim/header/_main_links_dropdown.html.erb +0 -2
- data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +1 -1
- data/app/views/layouts/decidim/header/_menu_breadcrumb_items.html.erb +2 -0
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_desktop.html.erb +11 -5
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +5 -5
- data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +1 -1
- data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
- data/config/assets.rb +2 -1
- data/config/locales/ar.yml +38 -74
- data/config/locales/bg-BG.yml +2 -2
- data/config/locales/bg.yml +38 -74
- data/config/locales/bs-BA.yml +0 -2
- data/config/locales/ca.yml +374 -130
- data/config/locales/cs.yml +379 -116
- data/config/locales/de.yml +370 -132
- data/config/locales/el.yml +26 -58
- data/config/locales/en.yml +354 -110
- data/config/locales/eo.yml +0 -4
- data/config/locales/es-MX.yml +368 -127
- data/config/locales/es-PY.yml +373 -132
- data/config/locales/es.yml +374 -130
- data/config/locales/eu.yml +461 -215
- data/config/locales/fi-plain.yml +367 -130
- data/config/locales/fi.yml +372 -132
- data/config/locales/fr-CA.yml +180 -125
- data/config/locales/fr-LU.yml +3 -3
- data/config/locales/fr.yml +180 -122
- data/config/locales/ga-IE.yml +4 -25
- data/config/locales/gl.yml +23 -58
- data/config/locales/hu.yml +35 -62
- data/config/locales/id-ID.yml +24 -57
- data/config/locales/is-IS.yml +6 -25
- data/config/locales/it.yml +39 -218
- data/config/locales/ja.yml +235 -140
- data/config/locales/lb-LU.yml +2 -2
- data/config/locales/lb.yml +31 -76
- data/config/locales/lt.yml +29 -64
- data/config/locales/lv.yml +24 -58
- data/config/locales/nl.yml +26 -75
- data/config/locales/no.yml +26 -70
- data/config/locales/pl.yml +35 -72
- data/config/locales/pt-BR.yml +44 -63
- data/config/locales/pt.yml +26 -70
- data/config/locales/ro-RO.yml +118 -183
- data/config/locales/ru.yml +16 -43
- data/config/locales/sk-SK.yml +3 -3
- data/config/locales/sk.yml +27 -72
- data/config/locales/sl.yml +0 -4
- data/config/locales/sr-CS.yml +0 -2
- data/config/locales/sv.yml +141 -133
- data/config/locales/tr-TR.yml +32 -75
- data/config/locales/uk.yml +8 -29
- data/config/locales/zh-CN.yml +24 -68
- data/config/locales/zh-TW.yml +28 -62
- data/config/routes.rb +4 -10
- data/db/migrate/20171212103803_create_unique_nicknames.rb +1 -1
- data/db/migrate/20180221101934_fix_nickname_index.rb +1 -1
- data/db/migrate/20180706104107_add_nickname_to_managed_users.rb +1 -1
- data/db/migrate/20181001124950_move_users_groups_to_users_table.rb +1 -1
- data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
- data/db/migrate/20190412131728_fix_user_names.rb +1 -1
- data/db/migrate/20240628111905_add_visible_to_components.rb +7 -0
- data/db/migrate/20240704115429_create_decidim_taxonomies.rb +23 -0
- data/db/migrate/20240717093514_add_registered_only_to_decidim_share_tokens.rb +7 -0
- data/db/migrate/20240722215500_change_object_changes_on_versions.rb +39 -0
- data/db/migrate/20240806065417_create_decidim_taxonomy_filters.rb +23 -0
- data/db/migrate/20240822161348_add_deleted_at_to_decidim_components.rb +8 -0
- data/db/migrate/20240906162524_add_part_of_to_taxonomies.rb +26 -0
- data/db/migrate/20241001135825_add_role_to_participatory_space_private_users.rb +7 -0
- data/db/migrate/20241001140408_add_published_to_participatory_space_private_users.rb +7 -0
- data/db/migrate/20241022002600_create_private_exports.rb +18 -0
- data/db/migrate/20241028114430_add_component_counter_to_taxonomy_filters.rb +7 -0
- data/db/migrate/20241111104357_add_names_and_space_boolean_to_taxonomy_filters.rb +9 -0
- data/db/migrate/20241127093708_add_taxonomy_to_metrics.rb +7 -0
- data/db/migrate/20241204121445_add_participatory_space_manifests_from_taxonomy_filters.rb +9 -0
- data/decidim-core.gemspec +14 -17
- data/lib/decidim/action_authorization.rb +3 -2
- data/lib/decidim/amendable.rb +1 -1
- data/lib/decidim/api/input_filters/category_input_filter.rb +5 -3
- data/lib/decidim/api/input_filters/component_input_filter.rb +33 -20
- data/lib/decidim/api/input_filters/user_entity_input_filter.rb +53 -44
- data/lib/decidim/api/input_sorts/component_input_sort.rb +15 -13
- data/lib/decidim/api/input_sorts/user_entity_input_sort.rb +4 -4
- data/lib/decidim/api/interfaces/author_interface.rb +3 -2
- data/lib/decidim/api/interfaces/coauthorable_interface.rb +5 -5
- data/lib/decidim/api/interfaces/endorsable_interface.rb +2 -2
- data/lib/decidim/api/interfaces/participatory_space_interface.rb +5 -10
- data/lib/decidim/api/interfaces/taxonomizable_interface.rb +13 -0
- data/lib/decidim/api/types/amendment_type.rb +5 -7
- data/lib/decidim/api/types/area_api_type.rb +3 -3
- data/lib/decidim/api/types/attachment_type.rb +3 -3
- data/lib/decidim/api/types/category_type.rb +2 -2
- data/lib/decidim/api/types/decidim_type.rb +5 -1
- data/lib/decidim/api/types/fingerprint_type.rb +1 -1
- data/lib/decidim/api/types/localized_string_type.rb +1 -1
- data/lib/decidim/api/types/metric_history_type.rb +2 -0
- data/lib/decidim/api/types/metric_type.rb +1 -1
- data/lib/decidim/api/types/organization_type.rb +5 -0
- data/lib/decidim/api/types/participatory_space_link_type.rb +2 -2
- data/lib/decidim/api/types/participatory_space_manifest_type.rb +1 -1
- data/lib/decidim/api/types/quantifiable_translated_field_type.rb +1 -1
- data/lib/decidim/api/types/scope_api_type.rb +2 -3
- data/lib/decidim/api/types/session_type.rb +1 -2
- data/lib/decidim/api/types/taxonomy_type.rb +15 -0
- data/lib/decidim/api/types/trace_version_type.rb +2 -2
- data/lib/decidim/api/types/translated_field_type.rb +3 -5
- data/lib/decidim/api/types/user_group_type.rb +7 -20
- data/lib/decidim/api/types/user_type.rb +7 -20
- data/lib/decidim/asset_router/storage.rb +6 -11
- data/lib/decidim/assets/tailwind/tailwind.config.js.erb +3 -3
- data/lib/decidim/attachment_attributes.rb +1 -1
- data/lib/decidim/attribute_encryptor.rb +1 -1
- data/lib/decidim/attribute_object/nested_validator.rb +1 -1
- data/lib/decidim/attributes/integer_with_units.rb +27 -0
- data/lib/decidim/attributes/time_with_zone.rb +1 -5
- data/lib/decidim/attributes.rb +2 -0
- data/lib/decidim/authorization_form_builder.rb +0 -7
- data/lib/decidim/coauthorable.rb +1 -1
- data/lib/decidim/command.rb +3 -3
- data/lib/decidim/commands/destroy_resource.rb +5 -1
- data/lib/decidim/commands/resource_handler.rb +2 -2
- data/lib/decidim/commands/restore_resource.rb +45 -0
- data/lib/decidim/commands/soft_delete_resource.rb +63 -0
- data/lib/decidim/component_manifest.rb +7 -0
- data/lib/decidim/content_parsers/blob_parser.rb +8 -10
- data/lib/decidim/content_parsers/user_parser.rb +1 -1
- data/lib/decidim/core/api.rb +2 -0
- data/lib/decidim/core/engine.rb +21 -7
- data/lib/decidim/core/menu.rb +0 -5
- data/lib/decidim/core/seeds.rb +42 -2
- data/lib/decidim/core/test/factories.rb +107 -4
- data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
- data/lib/decidim/core/test/shared_examples/announcements_examples.rb +0 -4
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +393 -38
- data/lib/decidim/core/test/shared_examples/components_controller_hide_shared_examples.rb +11 -0
- data/lib/decidim/core/test/shared_examples/components_controller_reorder_shared_examples.rb +21 -0
- data/lib/decidim/core/test/shared_examples/download_open_data_shared_context.rb +36 -0
- data/lib/decidim/core/test/shared_examples/download_open_data_shared_examples.rb +45 -0
- data/lib/decidim/core/test/shared_examples/download_your_data_shared_examples.rb +17 -0
- data/lib/decidim/core/test/shared_examples/etiquette_validator_examples.rb +25 -0
- data/lib/decidim/core/test/shared_examples/follows_examples.rb +43 -0
- data/lib/decidim/core/test/shared_examples/has_taxonomies.rb +94 -0
- data/lib/decidim/core/test/shared_examples/manage_share_tokens_examples.rb +237 -0
- data/lib/decidim/core/test/shared_examples/map_examples.rb +2 -0
- data/lib/decidim/core/test/shared_examples/open_data_exporter_examples.rb +102 -0
- data/lib/decidim/core/test/shared_examples/participatory_space_members_page_examples.rb +46 -0
- data/lib/decidim/core/test/shared_examples/participatory_space_search_examples.rb +98 -0
- data/lib/decidim/core/test/shared_examples/permissions.rb +7 -7
- data/lib/decidim/core/test/shared_examples/preview_with_share_token_examples.rb +94 -0
- data/lib/decidim/core/test/shared_examples/reports_examples.rb +15 -53
- data/lib/decidim/core/test/shared_examples/resource_endorsed_event_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/resource_search_examples.rb +75 -69
- data/lib/decidim/core/test/shared_examples/searchable_resources_shared_context.rb +1 -1
- data/lib/decidim/core/test/shared_examples/simple_event.rb +33 -19
- data/lib/decidim/core/test/shared_examples/social_share_examples.rb +7 -14
- data/lib/decidim/core/test/shared_examples/softdeleteable_components_examples.rb +173 -0
- data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +54 -8
- data/lib/decidim/core/test/shared_examples/taxonomizable_interface_examples.rb +20 -0
- data/lib/decidim/core/test/shared_examples/taxonomizable_resource_examples.rb +37 -0
- data/lib/decidim/core/test/shared_examples/taxonomy_settings.rb +49 -0
- data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +0 -26
- data/lib/decidim/core/test/shared_examples/versions_controller_examples.rb +2 -28
- data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
- data/lib/decidim/core/test.rb +9 -5
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +58 -0
- data/lib/decidim/download_your_data_serializers/download_your_data_identity_serializer.rb +0 -4
- data/lib/decidim/download_your_data_serializers/download_your_data_participatory_space_private_user_serializer.rb +3 -1
- data/lib/decidim/download_your_data_serializers/download_your_data_report_serializer.rb +2 -1
- data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +6 -7
- data/lib/decidim/download_your_data_serializers.rb +19 -0
- data/lib/decidim/exporters/csv.rb +6 -0
- data/lib/decidim/exporters/export_manifest.rb +14 -0
- data/lib/decidim/exporters/pdf.rb +26 -22
- data/lib/decidim/filter_form_builder.rb +12 -15
- data/lib/decidim/form_builder.rb +6 -143
- data/lib/decidim/has_category.rb +5 -1
- data/lib/decidim/has_private_users.rb +4 -0
- data/lib/decidim/has_taxonomy_settings.rb +47 -0
- data/lib/decidim/has_upload_validations.rb +1 -1
- data/lib/decidim/legacy_form_builder.rb +118 -0
- data/lib/decidim/maintenance/import_models/application_record.rb +93 -0
- data/lib/decidim/maintenance/import_models/area.rb +82 -0
- data/lib/decidim/maintenance/import_models/area_type.rb +12 -0
- data/lib/decidim/maintenance/import_models/assembly_type.rb +49 -0
- data/lib/decidim/maintenance/import_models/categorization.rb +14 -0
- data/lib/decidim/maintenance/import_models/category.rb +107 -0
- data/lib/decidim/maintenance/import_models/participatory_process_type.rb +21 -0
- data/lib/decidim/maintenance/import_models/scope.rb +163 -0
- data/lib/decidim/maintenance/import_models.rb +19 -0
- data/lib/decidim/maintenance/taxonomy_importer.rb +132 -0
- data/lib/decidim/maintenance/taxonomy_plan.rb +78 -0
- data/lib/decidim/maintenance.rb +12 -0
- data/lib/decidim/map/autocomplete.rb +52 -8
- data/lib/decidim/map/dynamic_map.rb +1 -1
- data/lib/decidim/map/provider/dynamic_map/here.rb +40 -1
- data/lib/decidim/map/provider/geocoding/here.rb +9 -3
- data/lib/decidim/map/provider/static_map/here.rb +0 -34
- data/lib/decidim/map.rb +3 -6
- data/lib/decidim/moderation_tools.rb +16 -19
- data/lib/decidim/newsletter_encryptor.rb +1 -1
- data/lib/decidim/nicknamizable.rb +9 -6
- data/lib/decidim/paddable.rb +1 -1
- data/lib/decidim/participable.rb +10 -10
- data/lib/decidim/participatory_space_user.rb +10 -0
- data/lib/decidim/private_download_helper.rb +15 -0
- data/lib/decidim/record_encryptor.rb +51 -46
- data/lib/decidim/reportable.rb +2 -6
- data/lib/decidim/resourceable.rb +16 -0
- data/lib/decidim/seeds.rb +18 -20
- data/lib/decidim/settings_manifest.rb +34 -1
- data/lib/decidim/soft_deletable.rb +17 -0
- data/lib/decidim/taxonomizable.rb +72 -0
- data/lib/decidim/translatable_attributes.rb +1 -5
- data/lib/decidim/view_model.rb +0 -1
- data/lib/tasks/decidim_download_your_data_tasks.rake +2 -4
- data/lib/tasks/decidim_procfile.rake +6 -0
- data/lib/tasks/decidim_tasks.rake +1 -0
- data/lib/tasks/decidim_taxonomies.rake +155 -0
- data/lib/tasks/upgrade/{decidim_fix_categorization.rake → clean.rake} +25 -18
- data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +1 -1
- data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +20 -23
- data/lib/tasks/upgrade/migrations.rake +91 -0
- metadata +201 -113
- data/app/cells/decidim/amendable/amenders_list/show.erb +0 -0
- data/app/cells/decidim/content_blocks/base/content.erb +0 -0
- data/app/cells/decidim/endorsers_list/full_endorsers_list.erb +0 -3
- data/app/cells/decidim/endorsers_list_button/content.erb +0 -1
- data/app/cells/decidim/endorsers_list_button_cell.rb +0 -15
- data/app/cells/decidim/report_user_button/already_reported_modal.erb +0 -11
- data/app/cells/decidim/report_user_button/flag_modal.erb +0 -47
- data/app/cells/decidim/report_user_button/show.erb +0 -2
- data/app/cells/decidim/report_user_button_cell.rb +0 -59
- data/app/cells/decidim/scopes_picker/scope_picker_prompt.erb +0 -3
- data/app/cells/decidim/scopes_picker/scope_picker_values.erb +0 -5
- data/app/cells/decidim/scopes_picker/show.erb +0 -14
- data/app/cells/decidim/scopes_picker_cell.rb +0 -92
- data/app/commands/decidim/update_user_interests.rb +0 -41
- data/app/controllers/decidim/scopes_controller.rb +0 -84
- data/app/controllers/decidim/user_interests_controller.rb +0 -30
- data/app/forms/decidim/user_interest_scope_form.rb +0 -25
- data/app/forms/decidim/user_interests_form.rb +0 -17
- data/app/helpers/decidim/categories_helper.rb +0 -26
- data/app/helpers/decidim/scopes_helper.rb +0 -105
- data/app/jobs/decidim/hide_child_resources_job.rb +0 -24
- data/app/packs/images/decidim/vendor/leaflet/layers-2x.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/layers.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-icon-2x.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-icon.png +0 -0
- data/app/packs/images/decidim/vendor/leaflet/marker-shadow.png +0 -0
- data/app/packs/src/decidim/dropdown_menu.js +0 -18
- data/app/packs/stylesheets/decidim/_hashtags.scss +0 -5
- data/app/packs/stylesheets/decidim/legacy/MarkerCluster.Default.scss +0 -67
- data/app/packs/stylesheets/decidim/legacy/MarkerCluster.scss +0 -18
- data/app/packs/stylesheets/decidim/legacy/leaflet.scss +0 -705
- data/app/validators/scope_belongs_to_component_validator.rb +0 -16
- data/app/views/decidim/account/_user_groups.html.erb +0 -0
- data/app/views/decidim/reported_mailer/hidden_automatically.html.erb +0 -25
- data/app/views/decidim/reported_mailer/hidden_manually.html.erb +0 -25
- data/app/views/decidim/scopes/_scopes_picker_input.html.erb +0 -19
- data/app/views/decidim/scopes/picker.html.erb +0 -53
- data/app/views/decidim/shared/_comments.html.erb +0 -0
- data/app/views/decidim/shared/_share_modal.html.erb +0 -26
- data/app/views/decidim/shared/_tags.html.erb +0 -1
- data/app/views/decidim/user_interests/_areas.html.erb +0 -14
- data/app/views/decidim/user_interests/_scopes.html.erb +0 -22
- data/app/views/decidim/user_interests/show.html.erb +0 -22
- data/config/initializers/foundation_rails_helper.rb +0 -4
- data/config/locales/ca-IT.yml +0 -2146
- data/lib/decidim/core/test/shared_examples/has_category.rb +0 -38
- data/lib/decidim/core/test/shared_examples/has_scope.rb +0 -11
- data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +0 -83
- data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +0 -49
- data/lib/decidim/core/test/shared_examples/scope_helper_examples.rb +0 -93
- data/lib/decidim/seven_zip_wrapper.rb +0 -29
- data/lib/tasks/upgrade/clean_hidden_resources.rake +0 -33
@@ -57,26 +57,35 @@ module Decidim
|
|
57
57
|
url = arguments[0]
|
58
58
|
html_options = arguments[1]
|
59
59
|
else
|
60
|
-
body =
|
60
|
+
body = arguments[0]
|
61
61
|
url = arguments[1]
|
62
62
|
html_options = arguments[2]
|
63
63
|
end
|
64
64
|
|
65
|
-
html_options
|
65
|
+
html_options = (html_options || {}).with_indifferent_access
|
66
66
|
resource = html_options.delete(:resource)
|
67
67
|
permissions_holder = html_options.delete(:permissions_holder)
|
68
|
+
authorization_status = get_authorization_status(action, resource, permissions_holder)
|
69
|
+
redirect_path = valid_redirect(url, tag:, method: html_options[:method])
|
70
|
+
onboarding_options = onboarding_data_attributes(authorization_status, action, resource, permissions_holder, redirect_path)
|
68
71
|
|
69
|
-
if
|
70
|
-
html_options = clean_authorized_to_data_open(html_options)
|
71
|
-
|
72
|
+
if sign_in_required?(authorization_status)
|
73
|
+
html_options = clean_authorized_to_data_open(html_options.merge(onboarding_options))
|
72
74
|
html_options["data-dialog-open"] = "loginModal"
|
73
|
-
url = "#"
|
74
|
-
elsif action && !action_authorized_to(action, resource:, permissions_holder:).ok?
|
75
|
-
html_options = clean_authorized_to_data_open(html_options)
|
76
75
|
|
77
|
-
html_options["data-dialog-open"] = "authorizationModal"
|
78
|
-
html_options["data-dialog-remote-url"] = modal_path(action, resource)
|
79
76
|
url = "#"
|
77
|
+
elsif authorization_status&.ok? == false
|
78
|
+
html_options = clean_authorized_to_data_open(html_options.merge(onboarding_options))
|
79
|
+
if pending_steps?(authorization_status)
|
80
|
+
tag = "link"
|
81
|
+
html_options["method"] = "post"
|
82
|
+
html_options.delete(:remote)
|
83
|
+
url = decidim_verifications.renew_onboarding_data_authorizations_path
|
84
|
+
else
|
85
|
+
html_options["data-dialog-open"] = "authorizationModal"
|
86
|
+
html_options["data-dialog-remote-url"] = modal_path(action, resource, html_options)
|
87
|
+
url = "#"
|
88
|
+
end
|
80
89
|
end
|
81
90
|
|
82
91
|
html_options["onclick"] = "event.preventDefault();" if url == ""
|
@@ -84,25 +93,33 @@ module Decidim
|
|
84
93
|
if block
|
85
94
|
send("#{tag}_to", url, html_options, &body)
|
86
95
|
else
|
87
|
-
send("#{tag}_to", body, url, html_options)
|
96
|
+
send("#{tag}_to", content_tag(:span, body), url, html_options)
|
88
97
|
end
|
89
98
|
end
|
90
99
|
# rubocop: enable Metrics/PerceivedComplexity
|
91
100
|
|
92
|
-
def modal_path(action, resource)
|
101
|
+
def modal_path(action, resource, opts = {})
|
102
|
+
if (default_path = opts.delete(:authorizations_modal_path)).present?
|
103
|
+
return default_path
|
104
|
+
end
|
105
|
+
|
93
106
|
resource_params = if resource
|
94
107
|
{ resource_name: resource.resource_manifest.name, resource_id: resource.id }
|
95
108
|
else
|
96
109
|
{}
|
97
110
|
end
|
98
|
-
|
99
|
-
|
111
|
+
|
112
|
+
component = try(:current_component)
|
113
|
+
if component.present?
|
114
|
+
decidim.authorization_modal_path(authorization_action: action, component_id: component&.id, **resource_params)
|
100
115
|
else
|
101
116
|
decidim.free_resource_authorization_modal_path(authorization_action: action, **resource_params)
|
102
117
|
end
|
103
118
|
end
|
104
119
|
|
105
120
|
def clean_authorized_to_data_open(html_options)
|
121
|
+
return {} if html_options.blank?
|
122
|
+
|
106
123
|
html_options.delete(:"data-dialog-open")
|
107
124
|
html_options.delete(:"data-dialog-remote-url")
|
108
125
|
|
@@ -115,9 +132,53 @@ module Decidim
|
|
115
132
|
html_options[key].delete("open_url")
|
116
133
|
html_options[key].delete(:"open-url")
|
117
134
|
html_options[key].delete("open-url")
|
135
|
+
html_options[key].delete(:"dialog-open")
|
136
|
+
html_options[key].delete(:"dialog-remote-url")
|
118
137
|
end
|
119
138
|
|
120
139
|
html_options
|
121
140
|
end
|
141
|
+
|
142
|
+
def get_authorization_status(action, resource, permissions_holder)
|
143
|
+
return if action.blank?
|
144
|
+
|
145
|
+
permissions_holder ||= resource.blank? ? try(:current_component) : nil
|
146
|
+
return if permissions_holder.blank? && resource.try(:component).blank?
|
147
|
+
|
148
|
+
action_authorized_to(action, resource:, permissions_holder:)
|
149
|
+
end
|
150
|
+
|
151
|
+
def pending_steps?(authorization_status)
|
152
|
+
authorization_status.pending_authorizations_count.positive? && authorization_status.global_code != :unauthorized
|
153
|
+
end
|
154
|
+
|
155
|
+
def onboarding_data_attributes(authorization_status, action, resource, permissions_holder, redirect_path = nil)
|
156
|
+
return {} if action.blank?
|
157
|
+
return {} unless pending_steps?(authorization_status)
|
158
|
+
|
159
|
+
permissions_holder ||= try(:current_component) if resource.blank?
|
160
|
+
return {} if [resource, permissions_holder].all?(&:blank?)
|
161
|
+
|
162
|
+
{
|
163
|
+
"data-onboarding-model" => resource&.to_gid,
|
164
|
+
"data-onboarding-permissions-holder" => permissions_holder&.to_gid,
|
165
|
+
"data-onboarding-action" => action,
|
166
|
+
"data-onboarding-redirect-path" => redirect_path
|
167
|
+
}.compact
|
168
|
+
end
|
169
|
+
|
170
|
+
def valid_redirect(path, opts = {})
|
171
|
+
return if opts[:tag]&.to_sym == :button
|
172
|
+
return if path == "#"
|
173
|
+
return if opts[:method].present? && opts[:method].to_s != "get"
|
174
|
+
|
175
|
+
path
|
176
|
+
end
|
177
|
+
|
178
|
+
def sign_in_required?(authorization_status)
|
179
|
+
return if current_user.present?
|
180
|
+
|
181
|
+
!authorization_status&.ephemeral?
|
182
|
+
end
|
122
183
|
end
|
123
184
|
end
|
@@ -16,15 +16,6 @@ module Decidim
|
|
16
16
|
cell("decidim/amendable/announcement", emendation)
|
17
17
|
end
|
18
18
|
|
19
|
-
# Returns Html action button card to AMEND an amendable resource
|
20
|
-
def amend_button_for(amendable)
|
21
|
-
return unless amendments_enabled? && amendable.amendable?
|
22
|
-
return unless current_component.current_settings.amendment_creation_enabled
|
23
|
-
return unless can_participate_in_private_space?
|
24
|
-
|
25
|
-
cell("decidim/amendable/amend_button_card", amendable)
|
26
|
-
end
|
27
|
-
|
28
19
|
# Checks if the user can participate in a participatory space
|
29
20
|
# based on its settings related with Decidim::HasPrivateUsers.
|
30
21
|
def can_participate_in_private_space?
|
@@ -70,9 +61,8 @@ module Decidim
|
|
70
61
|
# Checks if the user can accept and reject the emendation
|
71
62
|
def allowed_to_accept_and_reject?(emendation)
|
72
63
|
return unless emendation.amendment.evaluating?
|
73
|
-
return current_user.admin? if emendation.amendable.respond_to?(:official?) && emendation.amendable.official?
|
74
64
|
|
75
|
-
emendation.amendable.created_by?(current_user)
|
65
|
+
emendation.amendable.created_by?(current_user) || current_user.admin?
|
76
66
|
end
|
77
67
|
|
78
68
|
# Checks if the user can promote the emendation
|
@@ -4,11 +4,15 @@ module Decidim
|
|
4
4
|
# Main module to add application-wide helpers.
|
5
5
|
module ApplicationHelper
|
6
6
|
include Decidim::OmniauthHelper
|
7
|
-
include Decidim::
|
7
|
+
include Decidim::DecidimFormHelper
|
8
8
|
include Decidim::ContextualHelpHelper
|
9
9
|
include Decidim::AmendmentsHelper
|
10
10
|
include Decidim::CacheHelper
|
11
11
|
|
12
|
+
def layout_item_classes
|
13
|
+
"layout-item"
|
14
|
+
end
|
15
|
+
|
12
16
|
# Truncates a given text respecting its HTML tags.
|
13
17
|
#
|
14
18
|
# text - The String text to be truncated.
|
@@ -99,7 +103,7 @@ module Decidim
|
|
99
103
|
# Renders the cell contents.
|
100
104
|
def cell(name, model, options = {}, &)
|
101
105
|
options = { context: { view_context: self, current_user: } }.deep_merge(options)
|
102
|
-
super
|
106
|
+
super
|
103
107
|
end
|
104
108
|
|
105
109
|
def prevent_timeout_seconds
|
@@ -56,5 +56,11 @@ module Decidim
|
|
56
56
|
active: active_item.active?
|
57
57
|
}
|
58
58
|
end
|
59
|
+
|
60
|
+
def render_schema_org_breadcrumb_list(breadcrumb_items)
|
61
|
+
exporter_options = { breadcrumb_items:, base_url: request.base_url, organization_name: current_organization_name }
|
62
|
+
exported_breadcrumb_list = Decidim::Exporters::JSON.new([exporter_options], Decidim::SchemaOrgBreadcrumbListSerializer).export.read
|
63
|
+
JSON.pretty_generate(JSON.parse(exported_breadcrumb_list).first)
|
64
|
+
end
|
59
65
|
end
|
60
66
|
end
|
@@ -9,6 +9,7 @@ module Decidim
|
|
9
9
|
# used in filters that uses checkboxes trees
|
10
10
|
def check_boxes_tree_options(value, label, **options)
|
11
11
|
parent_id = options.delete(:parent_id) || ""
|
12
|
+
object = options.delete(:object)
|
12
13
|
checkbox_options = {
|
13
14
|
value:,
|
14
15
|
label:,
|
@@ -16,10 +17,16 @@ module Decidim
|
|
16
17
|
include_hidden: false,
|
17
18
|
label_options: {
|
18
19
|
"data-children-checkbox": parent_id,
|
19
|
-
value
|
20
|
+
value:,
|
21
|
+
for: "#{options[:namespace]}_#{options[:id]}"
|
20
22
|
}
|
21
23
|
}
|
22
24
|
options.merge!(checkbox_options)
|
25
|
+
# as taxonomies work with a nested array of values, we need to manually check if the value is checked
|
26
|
+
matches = options[:id]&.match(/^with_any_taxonomies_([0-9]+)__taxonomy-([0-9_]+)/)
|
27
|
+
if matches.present? && object.respond_to?(:with_any_taxonomies) && object.with_any_taxonomies&.dig(matches[1]).is_a?(Array)
|
28
|
+
options[:checked] = object.with_any_taxonomies[matches[1]].include?(value.to_s)
|
29
|
+
end
|
23
30
|
|
24
31
|
if options.delete(:is_root_check_box) == true
|
25
32
|
options[:label_options].merge!("data-global-checkbox": "")
|
@@ -37,10 +44,14 @@ module Decidim
|
|
37
44
|
end
|
38
45
|
|
39
46
|
# struct for leafs of checkboxes trees
|
40
|
-
TreePoint = Struct.new(:value, :label) do
|
47
|
+
TreePoint = Struct.new(:value, :label, :root) do
|
41
48
|
def tree_node?
|
42
49
|
is_a?(TreeNode)
|
43
50
|
end
|
51
|
+
|
52
|
+
def root?
|
53
|
+
root.present? || value.blank?
|
54
|
+
end
|
44
55
|
end
|
45
56
|
|
46
57
|
# Overwrite this method in your component helper to define
|
@@ -49,52 +60,29 @@ module Decidim
|
|
49
60
|
raise StandardError, "Not implemented"
|
50
61
|
end
|
51
62
|
|
52
|
-
def
|
53
|
-
|
54
|
-
[category.weight, decidim_escape_translated(category.name)]
|
55
|
-
end
|
56
|
-
|
57
|
-
categories_values = sorted_main_categories.flat_map do |category|
|
58
|
-
sorted_descendant_categories = category.descendants.includes(:subcategories).sort_by do |subcategory|
|
59
|
-
[subcategory.weight, decidim_escape_translated(subcategory.name)]
|
60
|
-
end
|
61
|
-
|
62
|
-
subcategories = sorted_descendant_categories.flat_map do |subcategory|
|
63
|
-
TreePoint.new(subcategory.id.to_s, decidim_escape_translated(subcategory.name))
|
64
|
-
end
|
65
|
-
|
66
|
-
TreeNode.new(
|
67
|
-
TreePoint.new(category.id.to_s, decidim_escape_translated(category.name)),
|
68
|
-
subcategories
|
69
|
-
)
|
70
|
-
end
|
71
|
-
|
63
|
+
def filter_taxonomy_values_for(taxonomy_filter)
|
64
|
+
taxonomies = filter_taxonomy_values_children(taxonomy_filter.taxonomies)
|
72
65
|
TreeNode.new(
|
73
|
-
TreePoint.new(
|
74
|
-
|
66
|
+
TreePoint.new(taxonomy_filter.root_taxonomy_id, t("decidim.core.application_helper.filter_taxonomy_values.all"), true),
|
67
|
+
taxonomies
|
75
68
|
)
|
76
69
|
end
|
77
70
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
71
|
+
def filter_taxonomy_values_children(children)
|
72
|
+
children.map do |id, hash|
|
73
|
+
TreeNode.new(
|
74
|
+
TreePoint.new(id, decidim_escape_translated(hash[:taxonomy].name).html_safe),
|
75
|
+
filter_taxonomy_values_children(hash[:children])
|
76
|
+
)
|
83
77
|
end
|
84
78
|
end
|
85
79
|
|
86
|
-
|
87
|
-
return filter_scopes_values_from_parent(current_component.scope) if current_component.scope.present?
|
88
|
-
|
89
|
-
main_scopes = current_participatory_space.scopes.top_level
|
90
|
-
.includes(:scope_type, :children)
|
91
|
-
filter_scopes_values_from(main_scopes, current_participatory_space)
|
92
|
-
end
|
93
|
-
|
80
|
+
# pending initiatives removal
|
94
81
|
def filter_global_scopes_values
|
95
82
|
filter_scopes_values_from(current_organization.scopes.top_level)
|
96
83
|
end
|
97
84
|
|
85
|
+
# pending initiatives removal
|
98
86
|
def filter_areas_values
|
99
87
|
areas_or_types = areas_for_select(current_organization)
|
100
88
|
|
@@ -135,22 +123,6 @@ module Decidim
|
|
135
123
|
|
136
124
|
private
|
137
125
|
|
138
|
-
def filter_scopes_values_from_parent(scope)
|
139
|
-
scopes_values = []
|
140
|
-
scope.children.each do |child|
|
141
|
-
unless child.children
|
142
|
-
scopes_values << TreePoint.new(child.id.to_s, translated_attribute(child.name, current_participatory_space.organization))
|
143
|
-
next
|
144
|
-
end
|
145
|
-
scopes_values << TreeNode.new(
|
146
|
-
TreePoint.new(child.id.to_s, translated_attribute(child.name, current_participatory_space.organization)),
|
147
|
-
scope_children_to_tree(child, current_participatory_space)
|
148
|
-
)
|
149
|
-
end
|
150
|
-
|
151
|
-
filter_tree_from(scopes_values)
|
152
|
-
end
|
153
|
-
|
154
126
|
def filter_scopes_values_from(scopes, participatory_space = nil)
|
155
127
|
scopes_values = scopes.compact.flat_map do |scope|
|
156
128
|
TreeNode.new(
|
@@ -62,35 +62,6 @@ module Decidim
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
# A custom helper to include a scope picker field without requiring a form
|
66
|
-
# object
|
67
|
-
#
|
68
|
-
# name - The input name
|
69
|
-
# value - The input value as a scope id
|
70
|
-
# options - The set of options to send to the field
|
71
|
-
# :id - The id to generate for the element (optional)
|
72
|
-
#
|
73
|
-
# Returns a scopes picker tag to be included in an html template.
|
74
|
-
def scopes_picker_field_tag(name, value, id: nil)
|
75
|
-
picker_options = {
|
76
|
-
id: id || sanitize_to_id(name),
|
77
|
-
class: "picker-single",
|
78
|
-
name:
|
79
|
-
}
|
80
|
-
|
81
|
-
prompt_params = yield(nil)
|
82
|
-
selected_scopes = value ? Decidim::Scope.where(id: value) : []
|
83
|
-
scopes = selected_scopes.map { |scope| [scope, yield(scope)] }
|
84
|
-
|
85
|
-
template = ""
|
86
|
-
template += render("decidim/scopes/scopes_picker_input",
|
87
|
-
picker_options:,
|
88
|
-
prompt_params:,
|
89
|
-
scopes:,
|
90
|
-
values_on_top: true)
|
91
|
-
template.html_safe
|
92
|
-
end
|
93
|
-
|
94
65
|
# A custom helper to include a translated field without requiring a form object.
|
95
66
|
#
|
96
67
|
# type - The type of the translated input field.
|
@@ -220,20 +191,5 @@ module Decidim
|
|
220
191
|
|
221
192
|
organization.area_types
|
222
193
|
end
|
223
|
-
|
224
|
-
def ordered_scopes_descendants(root = nil)
|
225
|
-
root = try(:current_participatory_space)&.scope if root == false
|
226
|
-
if root.present?
|
227
|
-
root.descendants
|
228
|
-
else
|
229
|
-
current_organization.scopes
|
230
|
-
end.sort { |a, b| a.part_of.reverse <=> b.part_of.reverse }
|
231
|
-
end
|
232
|
-
|
233
|
-
def ordered_scopes_descendants_for_select(root = nil)
|
234
|
-
ordered_scopes_descendants(root).map do |scope|
|
235
|
-
[" #{" " * 4 * (scope.part_of.count - 1)} #{translated_attribute(scope.name)}".html_safe, scope&.id]
|
236
|
-
end
|
237
|
-
end
|
238
194
|
end
|
239
195
|
end
|
@@ -3,16 +3,6 @@
|
|
3
3
|
module Decidim
|
4
4
|
# A Helper for views with Endorsable resources.
|
5
5
|
module EndorsableHelper
|
6
|
-
# Invokes the decidim/endorsement_buttons cell.
|
7
|
-
def endorsement_buttons_cell(resource)
|
8
|
-
cell("decidim/endorsement_block", resource)
|
9
|
-
end
|
10
|
-
|
11
|
-
# Invokes the decidim/endorsers_list cell.
|
12
|
-
def endorsers_list_cell(resource)
|
13
|
-
cell("decidim/endorsers_list", resource)
|
14
|
-
end
|
15
|
-
|
16
6
|
#
|
17
7
|
# Public: Checks if the given resource has been endorsed by all identities of the user.
|
18
8
|
#
|
@@ -32,31 +32,6 @@ module Decidim
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def filter_search_label(label, id)
|
36
|
-
I18n.t("decidim.searches.filters.resource", label:, collection: filter_for_resource(id))
|
37
|
-
end
|
38
|
-
|
39
|
-
def filter_for_resource(skip_to_id)
|
40
|
-
case skip_to_id
|
41
|
-
when "proposals"
|
42
|
-
I18n.t("decidim/proposals/proposal.other", scope: "activerecord.models")
|
43
|
-
when "meetings"
|
44
|
-
I18n.t("decidim/meetings/meeting.other", scope: "activerecord.models")
|
45
|
-
when "debates"
|
46
|
-
I18n.t("decidim/debates/debate.other", scope: "activerecord.models")
|
47
|
-
when "sortitions"
|
48
|
-
I18n.t("decidim/sortitions/sortition.other", scope: "activerecord.models")
|
49
|
-
when "surveys"
|
50
|
-
I18n.t("decidim/surveys/survey.other", scope: "activerecord.models")
|
51
|
-
when "projects"
|
52
|
-
I18n.t("decidim/budgets/project.other", scope: "activerecord.models")
|
53
|
-
when "initiatives"
|
54
|
-
I18n.t("decidim/initiative.other", scope: "activerecord.models")
|
55
|
-
else
|
56
|
-
""
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
35
|
private
|
61
36
|
|
62
37
|
# Creates a unique namespace for a filter form to prevent duplicate IDs in
|
@@ -60,12 +60,6 @@ module Decidim
|
|
60
60
|
html_properties = options.with_indifferent_access.transform_keys(&:dasherize).slice("width", "height", "aria-label", "role", "aria-hidden", "class", "style")
|
61
61
|
html_properties = default_html_properties.merge(html_properties)
|
62
62
|
|
63
|
-
if name == "wechat-line"
|
64
|
-
html_properties = html_properties.merge({ "aria-label" => I18n.t("decidim.author.comments.other") }).except("aria-hidden")
|
65
|
-
elsif name == "heart-line"
|
66
|
-
html_properties = html_properties.merge({ "aria-label" => I18n.t("decidim.author.endorsements.other") }).except("aria-hidden")
|
67
|
-
end
|
68
|
-
|
69
63
|
href = Decidim.cors_enabled ? "" : asset_pack_path("media/images/remixicon.symbol.svg")
|
70
64
|
|
71
65
|
content_tag :svg, html_properties do
|
@@ -160,6 +154,12 @@ module Decidim
|
|
160
154
|
"#{request.base_url}#{"?#{params.to_query}" unless params.empty?}"
|
161
155
|
end
|
162
156
|
|
157
|
+
def root_url
|
158
|
+
return onboarding_manager.root_path if current_user&.ephemeral?
|
159
|
+
|
160
|
+
decidim.root_url(host: current_organization.host)
|
161
|
+
end
|
162
|
+
|
163
163
|
private
|
164
164
|
|
165
165
|
def each_decidim_engine
|
@@ -39,7 +39,7 @@ module Decidim
|
|
39
39
|
@breadcrumb_root_menu ||= ::Decidim::BreadcrumbRootMenuPresenter.new(
|
40
40
|
:menu,
|
41
41
|
self,
|
42
|
-
container_options: { class: "menu-
|
42
|
+
container_options: { class: "menu-bar__main-dropdown__menu" }
|
43
43
|
)
|
44
44
|
end
|
45
45
|
|
@@ -47,7 +47,7 @@ module Decidim
|
|
47
47
|
@mobile_breadcrumb_root_menu ||= ::Decidim::BreadcrumbRootMenuPresenter.new(
|
48
48
|
:mobile_menu,
|
49
49
|
self,
|
50
|
-
container_options: { class: "menu-bar__main-
|
50
|
+
container_options: { class: "menu-bar__main-dropdown__menu" }
|
51
51
|
)
|
52
52
|
end
|
53
53
|
|
@@ -29,10 +29,9 @@ module Decidim
|
|
29
29
|
# Generates a visualization of users for listing conversations threads
|
30
30
|
#
|
31
31
|
def username_list(users, shorten: false)
|
32
|
-
content_tags = []
|
33
32
|
first_users = shorten ? users.first(3) : users
|
34
|
-
first_users.
|
35
|
-
|
33
|
+
content_tags = first_users.map do |u|
|
34
|
+
u.deleted? ? t("decidim.profile.deleted") : u.name
|
36
35
|
end
|
37
36
|
|
38
37
|
return content_tags.join(", ") unless shorten
|
@@ -8,6 +8,7 @@ module Decidim
|
|
8
8
|
# the other methods to see how they work.
|
9
9
|
#
|
10
10
|
# @param [Hash] tags - A Hash containing the meta tag name as keys and its content as values.
|
11
|
+
# @param [Object, nil] resource - The resource object that may contain the image.
|
11
12
|
#
|
12
13
|
# @return [nil]
|
13
14
|
def add_decidim_meta_tags(tags)
|
@@ -15,33 +16,31 @@ module Decidim
|
|
15
16
|
add_decidim_meta_description(tags[:description])
|
16
17
|
add_decidim_meta_url(tags[:url])
|
17
18
|
add_decidim_meta_twitter_handler(tags[:twitter_handler])
|
18
|
-
|
19
|
+
image_url = tags[:image_url].presence || resolve_meta_image_url(tags[:resource])
|
20
|
+
add_decidim_meta_image_url(add_base_url_to(image_url)) if image_url.present?
|
19
21
|
end
|
20
22
|
|
21
|
-
#
|
23
|
+
# Adds base URL to the given path if it does not include a host.
|
22
24
|
#
|
23
|
-
# @
|
25
|
+
# @param [String] path - A String containing the path (e.g. "/proposals/1").
|
24
26
|
#
|
25
|
-
# @return [String] -
|
27
|
+
# @return [String] - A String with the base URL and path, or the original path if it already includes a host.
|
26
28
|
def add_base_url_to(path)
|
27
|
-
return path if path.blank?
|
28
|
-
return path if URI.parse(path).host.present?
|
29
|
+
return path if path.blank? || URI.parse(path).host.present?
|
29
30
|
|
30
31
|
"#{resolve_base_url}#{path}"
|
31
32
|
end
|
32
33
|
|
33
|
-
#
|
34
|
+
# Resolves the base URL (example: https://www.decidim.org) without URL parameters.
|
34
35
|
#
|
35
|
-
# @return [String] -
|
36
|
+
# @return [String] - A String of the base URL.
|
36
37
|
def resolve_base_url
|
37
38
|
return request.base_url if respond_to?(:request) && request&.base_url.present?
|
38
39
|
|
39
40
|
uri = URI.parse(decidim.root_url(host: current_organization.host))
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
"#{uri.scheme}://#{uri.host}:#{uri.port}"
|
44
|
-
end
|
41
|
+
port = uri.port.present? && [80, 443].exclude?(uri.port) ? ":#{uri.port}" : ""
|
42
|
+
|
43
|
+
"#{uri.scheme}://#{uri.host}#{port}"
|
45
44
|
end
|
46
45
|
|
47
46
|
# Accumulates the given `title` so that they can be chained. Since Rails views
|
@@ -60,22 +59,20 @@ module Decidim
|
|
60
59
|
# @return [Array<String>]
|
61
60
|
def add_decidim_page_title(title)
|
62
61
|
@decidim_page_title ||= []
|
63
|
-
|
64
|
-
|
65
|
-
@decidim_page_title << title
|
62
|
+
@decidim_page_title << title if title.present?
|
63
|
+
@decidim_page_title
|
66
64
|
end
|
67
65
|
|
68
66
|
# Renders the title for a page. Use the `add_decidim_page_title` method to
|
69
67
|
# accumulate elements for the title. Basically, it joins the elements of the title
|
70
68
|
# array with `" - "`.
|
71
69
|
#
|
72
|
-
# @return [String]
|
70
|
+
# @return [String] - The concatenated title.
|
73
71
|
def decidim_page_title
|
74
72
|
(@decidim_page_title || []).join(" - ")
|
75
73
|
end
|
76
74
|
|
77
|
-
attr_reader :decidim_meta_description, :decidim_meta_url, :decidim_meta_image_url,
|
78
|
-
:decidim_meta_twitter_handler
|
75
|
+
attr_reader :decidim_meta_description, :decidim_meta_url, :decidim_meta_image_url, :decidim_meta_twitter_handler
|
79
76
|
|
80
77
|
# Sets the meta description for the current page. We want to keep the most specific
|
81
78
|
# one, so you cannot replace the description if it is set by a view that has already
|
@@ -83,7 +80,7 @@ module Decidim
|
|
83
80
|
# is the last one to be rendered. You can put there a basic content and override it
|
84
81
|
# in other layers.
|
85
82
|
#
|
86
|
-
# @param [String] description - The String to be set as description
|
83
|
+
# @param [String] description - The String to be set as description.
|
87
84
|
#
|
88
85
|
# @return [nil]
|
89
86
|
def add_decidim_meta_description(description)
|
@@ -96,7 +93,7 @@ module Decidim
|
|
96
93
|
# is the last one to be rendered. You can put there a basic content and override it
|
97
94
|
# in other layers.
|
98
95
|
#
|
99
|
-
# @param [String] twitter_handler - The String to be set as Twitter handler
|
96
|
+
# @param [String] twitter_handler - The String to be set as Twitter handler.
|
100
97
|
#
|
101
98
|
# @return [nil]
|
102
99
|
def add_decidim_meta_twitter_handler(twitter_handler)
|
@@ -109,7 +106,7 @@ module Decidim
|
|
109
106
|
# is the last one to be rendered. You can put there a basic content and override it
|
110
107
|
# in other layers.
|
111
108
|
#
|
112
|
-
# @param [String] url - The String to be set as URL
|
109
|
+
# @param [String] url - The String to be set as URL.
|
113
110
|
#
|
114
111
|
# @return [nil]
|
115
112
|
def add_decidim_meta_url(url)
|
@@ -122,11 +119,23 @@ module Decidim
|
|
122
119
|
# is the last one to be rendered. You can put there a basic content and override it
|
123
120
|
# in other layers.
|
124
121
|
#
|
125
|
-
# @param [String] image_url - The String to be set as image URL
|
122
|
+
# @param [String] image_url - The String to be set as image URL.
|
126
123
|
#
|
127
124
|
# @return [nil]
|
128
125
|
def add_decidim_meta_image_url(image_url)
|
129
126
|
@decidim_meta_image_url ||= image_url
|
130
127
|
end
|
128
|
+
|
129
|
+
# Resolves the image URL to be used for meta tags.
|
130
|
+
# This method creates a new instance of MetaImageUrlResolver,
|
131
|
+
# which handles the logic for determining the most appropriate image URL.
|
132
|
+
#
|
133
|
+
# @param [Object, nil] resource - The resource object that may contain the image.
|
134
|
+
#
|
135
|
+
# @return [String, nil] - The resolved image URL, or nil if no appropriate image URL is found.
|
136
|
+
def resolve_meta_image_url(resource)
|
137
|
+
url = MetaImageUrlResolver.new(resource, current_organization).resolve
|
138
|
+
add_base_url_to(url) if url.present?
|
139
|
+
end
|
131
140
|
end
|
132
141
|
end
|
@@ -34,5 +34,28 @@ module Decidim
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
def decidim_drawer(opts = {}, &)
|
39
|
+
opts[:closable] = true unless opts.has_key?(:closable)
|
40
|
+
|
41
|
+
button = if opts[:closable] == false
|
42
|
+
""
|
43
|
+
else
|
44
|
+
content_tag(
|
45
|
+
:button,
|
46
|
+
"×".html_safe,
|
47
|
+
type: :button,
|
48
|
+
data: { dialog_close: opts[:id] || "", dialog_closable: "" },
|
49
|
+
"aria-label": t("close_modal", scope: "decidim.shared.confirm_modal")
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
content = opts[:remote].nil? ? button + capture(&).html_safe : button + icon("loader-3-line")
|
54
|
+
content_tag(:div, id: opts[:id], data: { dialog: opts[:id] || "", drawer: true }.merge(opts[:data] || {})) do
|
55
|
+
content_tag(:div, id: "#{opts[:id]}-content", class: opts[:class]) do
|
56
|
+
content
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
37
60
|
end
|
38
61
|
end
|