decidim-core 0.28.5 → 0.29.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/cells/decidim/activities_cell.rb +0 -1
- data/app/cells/decidim/activity_cell.rb +7 -6
- data/app/cells/decidim/address/online.erb +2 -2
- data/app/cells/decidim/address_cell.rb +3 -9
- data/app/cells/decidim/amendable/amend_button_card_cell.rb +0 -2
- data/app/cells/decidim/amendable/amendments_cell.rb +0 -2
- data/app/cells/decidim/amendable/announcement_cell.rb +10 -14
- data/app/cells/decidim/amendable/emendation_actions_cell.rb +0 -2
- data/app/cells/decidim/amendable/promote_button_card_cell.rb +0 -2
- data/app/cells/decidim/amendable/wizard_step_form_cell.rb +6 -19
- data/app/cells/decidim/announcement/show.erb +1 -1
- data/app/cells/decidim/announcement_cell.rb +6 -2
- data/app/cells/decidim/attachments_file_tab/show.erb +3 -0
- data/app/cells/decidim/attachments_file_tab_cell.rb +11 -0
- data/app/cells/decidim/attachments_link_tab/show.erb +12 -0
- data/app/cells/decidim/attachments_link_tab_cell.rb +21 -0
- data/app/cells/decidim/author/flag.erb +2 -2
- data/app/cells/decidim/author/show.erb +4 -5
- data/app/cells/decidim/author_cell.rb +0 -28
- data/app/cells/decidim/authorization_modal_cell.rb +0 -3
- data/app/cells/decidim/badge_cell.rb +0 -4
- data/app/cells/decidim/badges_cell.rb +0 -2
- data/app/cells/decidim/button_cell.rb +0 -3
- data/app/cells/decidim/card_cell.rb +1 -5
- data/app/cells/decidim/card_g/show.erb +1 -1
- data/app/cells/decidim/card_g_cell.rb +4 -7
- data/app/cells/decidim/card_l/image.erb +2 -2
- data/app/cells/decidim/card_l/space.erb +1 -1
- data/app/cells/decidim/card_l_cell.rb +3 -8
- data/app/cells/decidim/card_metadata_cell.rb +1 -5
- data/app/cells/decidim/card_s/show.erb +3 -5
- data/app/cells/decidim/card_s_cell.rb +1 -4
- data/app/cells/decidim/coauthorships_cell.rb +0 -2
- data/app/cells/decidim/comments_button_cell.rb +0 -2
- data/app/cells/decidim/content_blocks/footer_sub_hero/show.erb +1 -1
- data/app/cells/decidim/content_blocks/footer_sub_hero_cell.rb +0 -3
- data/app/cells/decidim/content_blocks/hero/show.erb +1 -1
- data/app/cells/decidim/content_blocks/hero_cell.rb +1 -2
- data/app/cells/decidim/content_blocks/highlighted_content_banner/show.erb +1 -1
- data/app/cells/decidim/content_blocks/highlighted_content_banner_cell.rb +0 -2
- data/app/cells/decidim/content_blocks/how_to_participate/show.erb +1 -1
- data/app/cells/decidim/content_blocks/how_to_participate_cell.rb +0 -1
- data/app/cells/decidim/content_blocks/participatory_space_documents/content.erb +1 -1
- data/app/cells/decidim/content_blocks/participatory_space_documents_cell.rb +17 -1
- data/app/cells/decidim/content_blocks/participatory_space_hero_cell.rb +2 -4
- data/app/cells/decidim/content_blocks/participatory_space_last_activity_cell.rb +1 -3
- data/app/cells/decidim/content_blocks/stats/show.erb +1 -1
- data/app/cells/decidim/content_blocks/stats_cell.rb +1 -1
- data/app/cells/decidim/content_blocks/sub_hero_cell.rb +0 -3
- data/app/cells/decidim/date_range/show.erb +10 -10
- data/app/cells/decidim/date_range_cell.rb +0 -2
- data/app/cells/decidim/diff_cell.rb +0 -5
- data/app/cells/decidim/documents_panel/show.erb +4 -0
- data/app/cells/decidim/documents_panel_cell.rb +9 -1
- data/app/cells/decidim/endorsement_buttons_cell.rb +6 -14
- data/app/cells/decidim/flag_modal/flag_user.erb +3 -3
- data/app/cells/decidim/followers_cell.rb +0 -1
- data/app/cells/decidim/following_cell.rb +0 -1
- data/app/cells/decidim/footer_topics/show.erb +8 -0
- data/app/cells/decidim/footer_topics_cell.rb +39 -0
- data/app/cells/decidim/groups_cell.rb +0 -3
- data/app/cells/decidim/linked_resources_for_cell.rb +0 -3
- data/app/cells/decidim/members_cell.rb +0 -1
- data/app/cells/decidim/nav_links/show.erb +3 -3
- data/app/cells/decidim/navbar_admin_link_cell.rb +0 -2
- data/app/cells/decidim/newsletter_templates/base_cell.rb +0 -1
- data/app/cells/decidim/newsletter_templates/basic_only_text/show.erb +2 -2
- data/app/cells/decidim/newsletter_templates/image_text_cta/show.erb +2 -2
- data/app/cells/decidim/newsletter_templates/image_text_cta_cell.rb +1 -1
- data/app/cells/decidim/notification/show.erb +5 -0
- data/app/cells/decidim/notification_actions/base_cell.rb +13 -0
- data/app/cells/decidim/notification_actions/buttons/show.erb +5 -0
- data/app/cells/decidim/notification_actions/buttons_cell.rb +41 -0
- data/app/cells/decidim/notification_cell.rb +9 -3
- data/app/cells/decidim/notifications_cell.rb +0 -1
- data/app/cells/decidim/pad_iframe/show.erb +2 -2
- data/app/cells/decidim/pad_iframe_cell.rb +0 -1
- data/app/cells/decidim/participatory_space_dropdown_metadata_cell.rb +1 -2
- data/app/cells/decidim/photo_cell.rb +1 -5
- data/app/cells/decidim/photos_list_cell.rb +0 -2
- data/app/cells/decidim/profile_cell.rb +0 -2
- data/app/cells/decidim/profile_sidebar/show.erb +20 -20
- data/app/cells/decidim/profile_sidebar_cell.rb +1 -10
- data/app/cells/decidim/progress_bar/show.erb +8 -6
- data/app/cells/decidim/public_participation/show.erb +1 -1
- data/app/cells/decidim/report_button/flag_modal.erb +1 -1
- data/app/cells/decidim/resource_types_filter/show.erb +12 -11
- data/app/cells/decidim/resource_types_filter_cell.rb +0 -2
- data/app/cells/decidim/scopes_picker/show.erb +1 -1
- data/app/cells/decidim/scopes_picker_cell.rb +0 -1
- data/app/cells/decidim/search_results_cell.rb +1 -1
- data/app/cells/decidim/statistic_cell.rb +0 -2
- data/app/cells/decidim/tab_panels/show.erb +1 -1
- data/app/cells/decidim/tab_panels_cell.rb +12 -2
- data/app/cells/decidim/tags_cell.rb +0 -2
- data/app/cells/decidim/tos_page_cell.rb +0 -3
- data/app/cells/decidim/translation_bar/show.erb +2 -2
- data/app/cells/decidim/translation_bar_cell.rb +1 -3
- data/app/cells/decidim/upload_modal/files.erb +1 -1
- data/app/cells/decidim/upload_modal_cell.rb +1 -3
- data/app/cells/decidim/user_conversation/new.erb +1 -1
- data/app/cells/decidim/user_conversation/show.erb +1 -1
- data/app/cells/decidim/user_conversation_cell.rb +0 -1
- data/app/cells/decidim/user_conversations/show.erb +1 -1
- data/app/cells/decidim/user_conversations_cell.rb +0 -1
- data/app/cells/decidim/user_group_pending_invitations_list_cell.rb +0 -1
- data/app/cells/decidim/user_group_pending_requests_list_cell.rb +0 -1
- data/app/cells/decidim/user_timeline/show.erb +1 -1
- data/app/cells/decidim/version_cell.rb +3 -5
- data/app/cells/decidim/versions_list_cell.rb +1 -3
- data/app/cells/decidim/versions_list_item_cell.rb +2 -4
- data/app/cells/decidim/wizard_step_form/wizard_aside.erb +2 -2
- data/app/cells/decidim/wizard_step_form/wizard_header.erb +2 -3
- data/app/cells/decidim/wizard_step_form_cell.rb +0 -8
- data/app/commands/decidim/amendable/create_draft.rb +4 -4
- data/app/commands/decidim/amendable/promote.rb +3 -2
- data/app/commands/decidim/amendable/publish_draft.rb +3 -2
- data/app/commands/decidim/amendable/update_draft.rb +4 -3
- data/app/commands/decidim/amendable/withdraw.rb +1 -1
- data/app/commands/decidim/create_follow.rb +4 -4
- data/app/commands/decidim/create_omniauth_registration.rb +4 -10
- data/app/commands/decidim/create_report.rb +3 -3
- data/app/commands/decidim/create_user_report.rb +5 -5
- data/app/commands/decidim/delete_follow.rb +4 -4
- data/app/commands/decidim/demote_membership.rb +2 -2
- data/app/commands/decidim/destroy_account.rb +21 -22
- data/app/commands/decidim/endorse_resource.rb +1 -1
- data/app/commands/decidim/invite_user_to_group.rb +5 -4
- data/app/commands/decidim/update_account.rb +24 -22
- data/app/commands/decidim/update_notifications_settings.rb +13 -11
- data/app/commands/decidim/update_password.rb +7 -7
- data/app/commands/decidim/update_user_interests.rb +9 -7
- data/app/controllers/concerns/decidim/devise_authentication_methods.rb +1 -1
- data/app/controllers/concerns/decidim/devise_controllers.rb +2 -1
- data/app/controllers/concerns/decidim/filter_resource.rb +1 -1
- data/app/controllers/concerns/decidim/needs_rtl_direction.rb +23 -0
- data/app/controllers/concerns/decidim/paginable.rb +1 -1
- data/app/controllers/concerns/decidim/participatory_space_context.rb +1 -23
- data/app/controllers/concerns/decidim/payload_info.rb +2 -1
- data/app/controllers/concerns/decidim/registers_permissions.rb +4 -4
- data/app/controllers/concerns/decidim/use_organization_time_zone.rb +1 -1
- data/app/controllers/concerns/decidim/withdrawable.rb +1 -1
- data/app/controllers/decidim/account_controller.rb +2 -2
- data/app/controllers/{concerns/decidim → decidim}/amendments_controller.rb +3 -16
- data/app/controllers/decidim/application_controller.rb +1 -1
- data/app/controllers/decidim/components/base_controller.rb +1 -1
- data/app/controllers/decidim/devise/invitations_controller.rb +1 -1
- data/app/controllers/decidim/devise/passwords_controller.rb +2 -2
- data/app/controllers/decidim/doorkeeper/credentials_controller.rb +1 -1
- data/app/controllers/decidim/endorsements_controller.rb +1 -1
- data/app/controllers/decidim/favicon_controller.rb +1 -1
- data/app/controllers/decidim/follows_controller.rb +2 -2
- data/app/controllers/decidim/group_invites_controller.rb +36 -9
- data/app/controllers/decidim/links_controller.rb +1 -1
- data/app/controllers/decidim/newsletters_opt_in_controller.rb +1 -1
- data/app/controllers/decidim/notifications_settings_controller.rb +1 -1
- data/app/controllers/decidim/profiles_controller.rb +0 -4
- data/app/controllers/decidim/report_users_controller.rb +1 -1
- data/app/controllers/decidim/reports_controller.rb +1 -1
- data/app/controllers/decidim/user_interests_controller.rb +1 -1
- data/app/events/decidim/change_nickname_event.rb +0 -1
- data/app/events/decidim/invited_to_group_event.rb +29 -0
- data/app/events/decidim/welcome_notification_event.rb +2 -4
- data/app/forms/decidim/form.rb +4 -0
- data/app/forms/decidim/omniauth_registration_form.rb +1 -1
- data/app/forms/decidim/upload_validation_form.rb +2 -2
- data/app/helpers/concerns/decidim/flash_helper_extensions.rb +1 -1
- data/app/helpers/decidim/amendments_helper.rb +4 -14
- data/app/helpers/decidim/application_helper.rb +8 -0
- data/app/helpers/decidim/authorization_form_helper.rb +2 -2
- data/app/helpers/decidim/breadcrumb_helper.rb +1 -1
- data/app/helpers/decidim/cells_helper.rb +1 -1
- data/app/helpers/decidim/check_boxes_tree_helper.rb +1 -1
- data/app/helpers/decidim/cta_button_helper.rb +1 -1
- data/app/helpers/decidim/datalist_select_helper.rb +1 -1
- data/app/helpers/decidim/decidim_form_helper.rb +3 -3
- data/app/helpers/decidim/filters_helper.rb +1 -1
- data/app/helpers/decidim/layout_helper.rb +1 -64
- data/app/helpers/decidim/localized_locales_helper.rb +1 -1
- data/app/helpers/decidim/map_helper.rb +1 -6
- data/app/helpers/decidim/menu_helper.rb +9 -1
- data/app/helpers/decidim/meta_tags_helper.rb +26 -23
- data/app/helpers/decidim/modal_helper.rb +1 -1
- data/app/helpers/decidim/orders_helper.rb +1 -1
- data/app/helpers/decidim/organization_helper.rb +55 -0
- data/app/helpers/decidim/paginate_helper.rb +5 -3
- data/app/helpers/decidim/resource_helper.rb +0 -7
- data/app/helpers/decidim/sanitize_helper.rb +2 -11
- data/app/helpers/decidim/scopes_helper.rb +3 -4
- data/app/helpers/decidim/searches_helper.rb +1 -1
- data/app/helpers/decidim/short_link_helper.rb +2 -2
- data/app/helpers/decidim/translations_helper.rb +2 -2
- data/app/helpers/decidim/twitter_search_helper.rb +1 -1
- data/app/helpers/decidim/user_profile_helper.rb +0 -1
- data/app/jobs/decidim/email_notifications_digest_generator_job.rb +2 -2
- data/app/mailers/decidim/application_mailer.rb +6 -2
- data/app/mailers/decidim/block_user_mailer.rb +1 -1
- data/app/mailers/decidim/decidim_devise_mailer.rb +7 -1
- data/app/mailers/decidim/newsletter_mailer.rb +1 -4
- data/app/mailers/decidim/newsletters_opt_in_mailer.rb +2 -2
- data/app/mailers/decidim/notification_mailer.rb +0 -1
- data/app/mailers/decidim/notifications_digest_mailer.rb +0 -1
- data/app/mailers/decidim/reported_mailer.rb +6 -3
- data/app/mailers/decidim/user_report_mailer.rb +1 -1
- data/app/models/decidim/action_log.rb +2 -12
- data/app/models/decidim/area_type.rb +1 -1
- data/app/models/decidim/attachment.rb +28 -4
- data/app/models/decidim/authorization.rb +1 -1
- data/app/models/decidim/authorization_transfer.rb +1 -0
- data/app/models/decidim/component.rb +3 -6
- data/app/models/decidim/content_block.rb +3 -3
- data/app/models/decidim/messaging/message.rb +2 -2
- data/app/models/decidim/newsletter.rb +9 -9
- data/app/models/decidim/notification.rb +2 -2
- data/app/models/decidim/organization.rb +23 -2
- data/app/models/decidim/push_notification_message.rb +1 -1
- data/app/models/decidim/resource_link.rb +1 -1
- data/app/models/decidim/user.rb +14 -14
- data/app/models/decidim/user_group.rb +2 -2
- data/app/packs/src/decidim/a11y.js +61 -11
- data/app/packs/src/decidim/append_redirect_url_to_modals.js +14 -24
- data/app/packs/src/decidim/attachments/file_or_link_tabs.js +55 -0
- data/app/packs/src/decidim/attachments/index.js +1 -0
- data/app/packs/src/decidim/back_to_list.js +1 -1
- data/app/packs/src/decidim/check_boxes_tree.js +1 -1
- data/app/packs/src/decidim/data_consent/consent_manager.js +1 -1
- data/app/packs/src/decidim/data_consent/consent_manager.test.js +6 -6
- data/app/packs/src/decidim/data_consent/index.js +1 -1
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +243 -0
- data/app/packs/src/decidim/datepicker/datepicker_listeners.js +78 -0
- data/app/packs/src/decidim/datepicker/form_datepicker.js +91 -0
- data/app/packs/src/decidim/datepicker/generate_datepicker.js +148 -0
- data/app/packs/src/decidim/datepicker/generate_timepicker.js +298 -0
- data/app/packs/src/decidim/datepicker/test/date.test.js +118 -0
- data/app/packs/src/decidim/datepicker/test/time.test.js +227 -0
- data/app/packs/src/decidim/direct_uploads/upload_field.js +8 -21
- data/app/packs/src/decidim/direct_uploads/upload_modal.js +0 -3
- data/app/packs/src/decidim/editor/extensions/indent/index.js +1 -1
- data/app/packs/src/decidim/editor/extensions/video_embed/index.js +4 -4
- data/app/packs/src/decidim/editor/test/extensions/decidim_kit.test.js +0 -15
- data/app/packs/src/decidim/editor/test/extensions/indent.test.js +1 -1
- data/app/packs/src/decidim/editor/test/fixtures/upload_templates.js +1 -1
- data/app/packs/src/decidim/editor/test/helpers.js +1 -14
- data/app/packs/src/decidim/editor/utilities/paste_transform.js +2 -2
- data/app/packs/src/decidim/external_domain_warning.js +2 -2
- data/app/packs/src/decidim/external_domain_warning.test.js +4 -4
- data/app/packs/src/decidim/form_filter.js +4 -4
- data/app/packs/src/decidim/impersonation.js +1 -1
- data/app/packs/src/decidim/index.js +11 -8
- data/app/packs/src/decidim/input_character_counter.js +2 -2
- data/app/packs/src/decidim/input_emoji.js +171 -72
- data/app/packs/src/decidim/input_hashtags.js +1 -1
- data/app/packs/src/decidim/input_mentions.js +1 -1
- data/app/packs/src/decidim/notifications_actions.js +40 -0
- data/app/packs/src/decidim/sticky_header.js +87 -0
- data/app/packs/src/decidim/sw/sw.js +8 -6
- data/app/packs/src/decidim/toggle.js +1 -1
- data/app/packs/src/decidim/tooltips.js +23 -43
- data/app/packs/stylesheets/decidim/_buttons.scss +1 -1
- data/app/packs/stylesheets/decidim/_datepicker.scss +193 -0
- data/app/packs/stylesheets/decidim/_dropdown.scss +45 -9
- data/app/packs/stylesheets/decidim/_emoji.scss +36 -0
- data/app/packs/stylesheets/decidim/_filters.scss +4 -2
- data/app/packs/stylesheets/decidim/_flash.scss +2 -2
- data/app/packs/stylesheets/decidim/_footer.scss +1 -3
- data/app/packs/stylesheets/decidim/_forms.scss +13 -5
- data/app/packs/stylesheets/decidim/_header.scss +70 -50
- data/app/packs/stylesheets/decidim/_home.scss +1 -1
- data/app/packs/stylesheets/decidim/_layout.scss +13 -0
- data/app/packs/stylesheets/decidim/_modal.scss +1 -1
- data/app/packs/stylesheets/decidim/_modal_update.scss +1 -5
- data/app/packs/stylesheets/decidim/_notifications.scss +4 -0
- data/app/packs/stylesheets/decidim/_profile.scss +1 -1
- data/app/packs/stylesheets/decidim/_progress-bar.scss +1 -1
- data/app/packs/stylesheets/decidim/_tabs_x.scss +5 -1
- data/app/packs/stylesheets/decidim/_tooltip.scss +10 -10
- data/app/packs/stylesheets/decidim/application.scss +4 -0
- data/app/packs/stylesheets/decidim/editor.scss +1 -1
- data/app/packs/stylesheets/decidim/legacy/conference-diploma.scss +1 -2
- data/app/packs/stylesheets/decidim/legacy/leaflet.scss +1 -1
- data/app/packs/stylesheets/decidim/vendor/_datepicker_light.scss +228 -0
- data/app/permissions/decidim/default_permissions.rb +2 -2
- data/app/presenters/decidim/admin_log/organization_presenter.rb +1 -1
- data/app/presenters/decidim/admin_log/static_page_presenter.rb +1 -1
- data/app/presenters/decidim/attachment_presenter.rb +1 -1
- data/app/presenters/decidim/authorization_transfer_presenter.rb +1 -1
- data/app/presenters/decidim/component_attachment_collection_presenter.rb +81 -0
- data/app/presenters/decidim/footer_menu_presenter.rb +1 -1
- data/app/presenters/decidim/home_stats_presenter.rb +1 -1
- data/app/presenters/decidim/menu_item_presenter.rb +1 -1
- data/app/presenters/decidim/organization_presenter.rb +1 -1
- data/app/queries/decidim/last_activity.rb +5 -16
- data/app/queries/decidim/metric_measure.rb +1 -1
- data/app/queries/decidim/public_activities.rb +1 -1
- data/app/queries/decidim/user_groups/admin_memberships.rb +1 -1
- data/app/queries/decidim/user_groups/member_memberships.rb +1 -1
- data/app/services/decidim/action_logger.rb +3 -3
- data/app/services/decidim/base_diff_renderer.rb +2 -26
- data/app/services/decidim/download_your_data_exporter.rb +25 -36
- data/app/services/decidim/email_notification_generator.rb +5 -14
- data/app/services/decidim/log/diff_changeset_calculator.rb +2 -2
- data/app/services/decidim/notifications_digest_sending_decider.rb +1 -1
- data/app/services/decidim/open_data_exporter.rb +7 -8
- data/app/services/decidim/zip_stream/writer.rb +39 -0
- data/app/uploaders/decidim/organization_favicon_uploader.rb +1 -1
- data/app/uploaders/decidim/record_image_uploader.rb +2 -2
- data/app/validators/organization_present_validator.rb +1 -1
- data/app/validators/passthru_validator.rb +1 -1
- data/app/validators/uploader_image_dimensions_validator.rb +2 -2
- data/app/views/decidim/account/show.html.erb +1 -1
- data/app/views/decidim/amendments/_wizard_header.html.erb +1 -2
- data/app/views/decidim/application/_collection.html.erb +3 -1
- data/app/views/decidim/application/_component_documents.html.erb +4 -0
- data/app/views/decidim/application/_document.html.erb +23 -9
- data/app/views/decidim/block_user_mailer/notify.html.erb +2 -2
- data/app/views/decidim/devise/invitations/edit.html.erb +2 -2
- data/app/views/decidim/devise/omniauth_registrations/new.html.erb +2 -2
- data/app/views/decidim/devise/registrations/new.html.erb +1 -1
- data/app/views/decidim/devise/shared/_login_boxes.html.erb +1 -1
- data/app/views/decidim/doorkeeper/authorizations/new.html.erb +1 -1
- data/app/views/decidim/endorsements/_identity.html.erb +1 -1
- data/app/views/decidim/gamification/badges/index.html.erb +1 -1
- data/app/views/decidim/manifests/show.json.erb +4 -4
- data/app/views/decidim/messaging/conversations/_add_conversation_users.html.erb +2 -2
- data/app/views/decidim/messaging/conversations/_error_modal.html.erb +5 -5
- data/app/views/decidim/newsletter_mailer/newsletter.html.erb +1 -1
- data/app/views/decidim/newsletters/show.html.erb +1 -1
- data/app/views/decidim/newsletters_opt_in_mailer/notify.html.erb +2 -2
- data/app/views/decidim/offline/show.html.erb +1 -1
- data/app/views/decidim/pages/_tabbed.html.erb +5 -5
- data/app/views/decidim/pages/index.html.erb +1 -2
- data/app/views/decidim/reported_mailer/report.html.erb +4 -2
- data/app/views/decidim/scopes/picker.html.erb +5 -5
- data/app/views/decidim/searches/_resources_filter_block.html.erb +6 -6
- data/app/views/decidim/shared/_extended_navigation_bar.html.erb +8 -8
- data/app/views/decidim/shared/_filters.html.erb +5 -5
- data/app/views/decidim/shared/_login_modal.html.erb +1 -1
- data/app/views/decidim/shared/_orders.html.erb +2 -3
- data/app/views/decidim/shared/filters/_check_boxes_tree.html.erb +1 -1
- data/app/views/decidim/shared/filters/_collection.html.erb +1 -1
- data/app/views/decidim/user_interests/_areas.html.erb +2 -2
- data/app/views/decidim/user_report_mailer/notify.html.erb +2 -2
- data/app/views/decidim/user_update_mailer/notify.html.erb +1 -1
- data/app/views/decidim/widgets/_data_picker.html.erb +1 -1
- data/app/views/devise/mailer/invitation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/invitation_instructions.text.erb +1 -1
- data/app/views/devise/mailer/invite_admin.html.erb +2 -2
- data/app/views/devise/mailer/invite_admin.text.erb +2 -2
- data/app/views/devise/mailer/invite_collaborator.html.erb +2 -2
- data/app/views/devise/mailer/invite_collaborator.text.erb +2 -2
- data/app/views/devise/mailer/invite_private_user.html.erb +2 -2
- data/app/views/devise/mailer/invite_private_user.text.erb +2 -2
- data/app/views/devise/mailer/organization_admin_invitation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/organization_admin_invitation_instructions.text.erb +1 -1
- data/app/views/layouts/decidim/_application.html.erb +3 -6
- data/app/views/layouts/decidim/_data_consent_warning.html.erb +2 -2
- data/app/views/layouts/decidim/_decidim_javascript.html.erb +1 -1
- data/app/views/layouts/decidim/_head.html.erb +1 -1
- data/app/views/layouts/decidim/_head_extra.html.erb +2 -2
- data/app/views/layouts/decidim/_impersonation_warning.html.erb +1 -1
- data/app/views/layouts/decidim/_js_configuration.html.erb +7 -2
- data/app/views/layouts/decidim/_logo.html.erb +2 -2
- data/app/views/layouts/decidim/_logo_mobile.html.erb +11 -0
- data/app/views/layouts/decidim/_mailer_logo.html.erb +2 -2
- data/app/views/layouts/decidim/_meta_tags_config.html.erb +1 -1
- data/app/views/layouts/decidim/_wrapper.html.erb +16 -9
- data/app/views/layouts/decidim/footer/_main.html.erb +2 -3
- data/app/views/layouts/decidim/footer/_main_intro.html.erb +2 -2
- data/app/views/layouts/decidim/footer/_main_legal.html.erb +2 -3
- data/app/views/layouts/decidim/footer/_main_links.html.erb +13 -11
- data/app/views/layouts/decidim/footer/_main_social_media_links.html.erb +8 -8
- data/app/views/layouts/decidim/header/_main.html.erb +9 -22
- data/app/views/layouts/decidim/header/_main_links_desktop.html.erb +4 -5
- data/app/views/layouts/decidim/header/_main_links_mobile_account.html.erb +11 -4
- data/app/views/layouts/decidim/header/_main_links_mobile_item_account.html.erb +24 -0
- data/app/views/layouts/decidim/header/_main_links_mobile_search.html.erb +0 -21
- data/app/views/layouts/decidim/header/_main_menu_mobile.html.erb +12 -0
- data/app/views/layouts/decidim/header/_menu_breadcrumb_desktop.html.erb +1 -1
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_mobile.html.erb +17 -0
- data/app/views/layouts/decidim/header/_menu_breadcrumb_main_dropdown_top_left.html.erb +1 -1
- data/app/views/layouts/decidim/header/_menu_breadcrumb_mobile_tablet.html.erb +1 -1
- data/app/views/layouts/decidim/header/_menu_form_search_mobile.html.erb +16 -0
- data/app/views/layouts/decidim/header/_mobile_language_choose.html.erb +25 -0
- data/app/views/layouts/decidim/mailer.html.erb +2 -2
- data/app/views/layouts/decidim/shared/_layout_center.html.erb +1 -1
- data/app/views/layouts/decidim/shared/_layout_item.html.erb +0 -14
- data/app/views/layouts/decidim/shared/_layout_user_profile.html.erb +2 -2
- data/config/initializers/active_storage.rb +3 -0
- data/config/initializers/devise.rb +1 -1
- data/config/initializers/new_framework_defaults_7_0.rb +145 -0
- data/config/locales/ar.yml +3 -54
- data/config/locales/bg.yml +56 -57
- data/config/locales/ca.yml +78 -71
- data/config/locales/cs.yml +54 -63
- data/config/locales/de.yml +77 -70
- data/config/locales/el.yml +1 -32
- data/config/locales/en.yml +69 -62
- data/config/locales/es-MX.yml +69 -62
- data/config/locales/es-PY.yml +69 -62
- data/config/locales/es.yml +74 -67
- data/config/locales/eu.yml +251 -257
- data/config/locales/fi-plain.yml +70 -63
- data/config/locales/fi.yml +128 -121
- data/config/locales/fr-CA.yml +62 -61
- data/config/locales/fr.yml +56 -55
- data/config/locales/ga-IE.yml +0 -16
- data/config/locales/gl.yml +1 -22
- data/config/locales/hu.yml +38 -57
- data/config/locales/id-ID.yml +0 -18
- data/config/locales/is-IS.yml +1 -17
- data/config/locales/it.yml +0 -65
- data/config/locales/ja.yml +83 -74
- data/config/locales/lb.yml +0 -30
- data/config/locales/lt.yml +2 -49
- data/config/locales/lv.yml +0 -25
- data/config/locales/nl.yml +1 -30
- data/config/locales/no.yml +0 -30
- data/config/locales/pl.yml +69 -57
- data/config/locales/pt-BR.yml +5 -250
- data/config/locales/pt.yml +0 -36
- data/config/locales/ro-RO.yml +180 -329
- data/config/locales/ru.yml +0 -19
- data/config/locales/sk.yml +1 -26
- data/config/locales/sl.yml +0 -8
- data/config/locales/sv.yml +164 -605
- data/config/locales/tr-TR.yml +5 -33
- data/config/locales/uk.yml +1 -14
- data/config/locales/zh-CN.yml +0 -27
- data/config/locales/zh-TW.yml +1 -51
- data/config/routes.rb +0 -2
- data/db/migrate/20170128112958_change_user_groups_verified_to_timestamp.rb +1 -1
- data/db/migrate/20181025082245_add_timestamps_to_components.rb +1 -5
- data/db/migrate/20240110150230_rename_external_domain_whitelist_to_external_domain_allowlist.rb +7 -0
- data/db/migrate/20240326104215_remove_show_in_footer_in_static_pages.rb +7 -0
- data/db/migrate/20240401192628_change_name_on_decidim_organizations.rb +31 -0
- data/db/seeds/avatars/001.jpg +0 -0
- data/db/seeds/avatars/002.jpg +0 -0
- data/db/seeds/avatars/003.jpg +0 -0
- data/db/seeds/avatars/004.jpg +0 -0
- data/db/seeds/avatars/005.jpg +0 -0
- data/db/seeds/avatars/006.jpg +0 -0
- data/db/seeds/avatars/007.jpg +0 -0
- data/db/seeds/avatars/008.jpg +0 -0
- data/db/seeds/avatars/009.jpg +0 -0
- data/db/seeds/avatars/010.jpg +0 -0
- data/db/seeds/avatars/011.jpg +0 -0
- data/db/seeds/avatars/012.jpg +0 -0
- data/db/seeds/avatars/013.jpg +0 -0
- data/db/seeds/avatars/014.jpg +0 -0
- data/db/seeds/avatars/015.jpg +0 -0
- data/db/seeds/avatars/016.jpg +0 -0
- data/db/seeds/avatars/017.jpg +0 -0
- data/db/seeds/avatars/018.jpg +0 -0
- data/db/seeds/avatars/019.jpg +0 -0
- data/db/seeds/avatars/020.jpg +0 -0
- data/db/seeds/avatars/021.jpg +0 -0
- data/db/seeds/avatars/022.jpg +0 -0
- data/db/seeds/avatars/023.jpg +0 -0
- data/db/seeds/avatars/024.jpg +0 -0
- data/db/seeds/avatars/025.jpg +0 -0
- data/db/seeds/avatars/026.jpg +0 -0
- data/db/seeds/avatars/027.jpg +0 -0
- data/db/seeds/avatars/028.jpg +0 -0
- data/db/seeds/avatars/029.jpg +0 -0
- data/db/seeds/avatars/030.jpg +0 -0
- data/db/seeds/avatars/031.jpg +0 -0
- data/db/seeds/avatars/032.jpg +0 -0
- data/db/seeds/avatars/033.jpg +0 -0
- data/db/seeds/avatars/034.jpg +0 -0
- data/db/seeds/avatars/035.jpg +0 -0
- data/db/seeds/avatars/036.jpg +0 -0
- data/db/seeds/avatars/037.jpg +0 -0
- data/db/seeds/avatars/038.jpg +0 -0
- data/db/seeds/avatars/039.jpg +0 -0
- data/db/seeds/avatars/040.jpg +0 -0
- data/db/seeds/avatars/041.jpg +0 -0
- data/db/seeds/avatars/042.jpg +0 -0
- data/db/seeds/avatars/043.jpg +0 -0
- data/db/seeds/avatars/044.jpg +0 -0
- data/db/seeds/avatars/045.jpg +0 -0
- data/db/seeds/avatars/046.jpg +0 -0
- data/db/seeds/avatars/047.jpg +0 -0
- data/db/seeds/avatars/048.jpg +0 -0
- data/db/seeds/avatars/049.jpg +0 -0
- data/db/seeds/avatars/050.jpg +0 -0
- data/db/seeds/avatars/051.jpg +0 -0
- data/db/seeds/avatars/052.jpg +0 -0
- data/db/seeds/avatars/053.jpg +0 -0
- data/db/seeds/avatars/054.jpg +0 -0
- data/db/seeds/avatars/055.jpg +0 -0
- data/db/seeds/avatars/056.jpg +0 -0
- data/db/seeds/avatars/057.jpg +0 -0
- data/db/seeds/avatars/058.jpg +0 -0
- data/db/seeds/avatars/059.jpg +0 -0
- data/db/seeds/avatars/060.jpg +0 -0
- data/db/seeds/avatars/061.jpg +0 -0
- data/db/seeds/avatars/062.jpg +0 -0
- data/db/seeds/avatars/063.jpg +0 -0
- data/db/seeds/avatars/064.jpg +0 -0
- data/db/seeds/avatars/065.jpg +0 -0
- data/db/seeds/avatars/066.jpg +0 -0
- data/db/seeds/avatars/067.jpg +0 -0
- data/db/seeds/avatars/068.jpg +0 -0
- data/db/seeds/avatars/069.jpg +0 -0
- data/db/seeds/avatars/070.jpg +0 -0
- data/db/seeds/avatars/071.jpg +0 -0
- data/db/seeds/avatars/072.jpg +0 -0
- data/db/seeds/avatars/073.jpg +0 -0
- data/db/seeds/avatars/074.jpg +0 -0
- data/db/seeds/avatars/075.jpg +0 -0
- data/db/seeds/avatars/076.jpg +0 -0
- data/db/seeds/avatars/077.jpg +0 -0
- data/db/seeds/avatars/078.jpg +0 -0
- data/db/seeds/avatars/079.jpg +0 -0
- data/db/seeds/avatars/080.jpg +0 -0
- data/db/seeds/avatars/081.jpg +0 -0
- data/db/seeds/avatars/082.jpg +0 -0
- data/db/seeds/avatars/083.jpg +0 -0
- data/db/seeds/avatars/084.jpg +0 -0
- data/db/seeds/avatars/085.jpg +0 -0
- data/db/seeds/avatars/086.jpg +0 -0
- data/db/seeds/avatars/087.jpg +0 -0
- data/db/seeds/avatars/088.jpg +0 -0
- data/db/seeds/avatars/089.jpg +0 -0
- data/db/seeds/avatars/090.jpg +0 -0
- data/db/seeds/avatars/091.jpg +0 -0
- data/db/seeds/avatars/092.jpg +0 -0
- data/db/seeds/avatars/093.jpg +0 -0
- data/db/seeds/avatars/094.jpg +0 -0
- data/db/seeds/avatars/095.jpg +0 -0
- data/db/seeds/avatars/096.jpg +0 -0
- data/db/seeds/avatars/097.jpg +0 -0
- data/db/seeds/avatars/098.jpg +0 -0
- data/db/seeds/avatars/099.jpg +0 -0
- data/db/seeds/avatars/100.jpg +0 -0
- data/db/seeds/avatars/CREDITS.md +114 -0
- data/db/seeds/avatars/README.md +25 -0
- data/decidim-core.gemspec +8 -9
- data/lib/decidim/acts_as_author.rb +1 -1
- data/lib/decidim/admin_filter.rb +44 -0
- data/lib/decidim/admin_filters_registry.rb +55 -0
- data/lib/decidim/amendable.rb +1 -2
- data/lib/decidim/api/functions/component_finder_base.rb +1 -1
- data/lib/decidim/api/functions/component_list.rb +1 -1
- data/lib/decidim/api/functions/needs_api_filter_and_order.rb +3 -3
- data/lib/decidim/api/functions/participatory_space_finder_base.rb +2 -12
- data/lib/decidim/api/functions/participatory_space_list_base.rb +1 -1
- data/lib/decidim/api/input_filters/user_entity_input_filter.rb +3 -3
- data/lib/decidim/api/interfaces/author_interface.rb +1 -1
- data/lib/decidim/api/interfaces/participatory_space_interface.rb +1 -1
- data/lib/decidim/api/types/component_type.rb +0 -7
- data/lib/decidim/api/types/organization_type.rb +1 -1
- data/lib/decidim/api/types/user_group_type.rb +1 -5
- data/lib/decidim/api/types/user_type.rb +1 -5
- data/lib/decidim/asset_router/pipeline.rb +2 -2
- data/lib/decidim/asset_router/storage.rb +11 -214
- data/lib/decidim/assets/tailwind/instance.rb +1 -1
- data/lib/decidim/assets/tailwind/tailwind.config.js.erb +8 -3
- data/lib/decidim/attribute_object/model.rb +2 -2
- data/lib/decidim/attribute_object/type_resolver.rb +1 -3
- data/lib/decidim/attribute_object.rb +2 -2
- data/lib/decidim/attributes/time_with_zone.rb +1 -11
- data/lib/decidim/attributes.rb +0 -6
- data/lib/decidim/authorable.rb +5 -0
- data/lib/decidim/command.rb +2 -2
- data/lib/decidim/commands/create_resource.rb +63 -0
- data/lib/decidim/commands/destroy_resource.rb +74 -0
- data/lib/decidim/commands/hook_error.rb +8 -0
- data/lib/decidim/commands/resource_handler.rb +85 -0
- data/lib/decidim/commands/update_resource.rb +64 -0
- data/lib/decidim/component_manifest.rb +3 -1
- data/lib/decidim/component_validator.rb +1 -1
- data/lib/decidim/content_blocks/has_related_components.rb +1 -1
- data/lib/decidim/content_parsers/resource_parser.rb +2 -2
- data/lib/decidim/content_parsers.rb +0 -1
- data/lib/decidim/content_processor.rb +1 -1
- data/lib/decidim/content_renderers.rb +0 -1
- data/lib/decidim/content_security_policy.rb +1 -1
- data/lib/decidim/core/engine.rb +13 -58
- data/lib/decidim/core/menu.rb +13 -3
- data/lib/decidim/core/seeds.rb +120 -147
- data/lib/decidim/core/test/factories.rb +24 -31
- data/lib/decidim/core/test/shared_examples/acts_as_author_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/amendable/withdraw_amendment_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/announcements_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/assembly_announcements_examples.rb +4 -4
- data/lib/decidim/core/test/shared_examples/attachable_interface_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/authorable_interface_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/comments_examples.rb +90 -107
- data/lib/decidim/core/test/shared_examples/comments_reports_examples.rb +4 -4
- data/lib/decidim/core/test/shared_examples/digest_mail_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/edit_link_shared_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/editor_shared_examples.rb +7 -7
- data/lib/decidim/core/test/shared_examples/fingerprint_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/follows_examples.rb +6 -11
- data/lib/decidim/core/test/shared_examples/has_attachment_collections.rb +4 -2
- data/lib/decidim/core/test/shared_examples/has_attachments.rb +3 -2
- data/lib/decidim/core/test/shared_examples/has_contextual_help.rb +4 -4
- data/lib/decidim/core/test/shared_examples/has_reference.rb +1 -1
- data/lib/decidim/core/test/shared_examples/logo_email.rb +1 -1
- data/lib/decidim/core/test/shared_examples/manage_component_share_tokens.rb +9 -9
- data/lib/decidim/core/test/shared_examples/map_examples.rb +5 -5
- data/lib/decidim/core/test/shared_examples/paginated_resource_examples.rb +7 -7
- data/lib/decidim/core/test/shared_examples/participatory_space_dropdown_metadata_cell_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/preview_component_with_share_token_examples.rb +3 -3
- data/lib/decidim/core/test/shared_examples/process_announcements_examples.rb +4 -4
- data/lib/decidim/core/test/shared_examples/reports_examples.rb +5 -5
- data/lib/decidim/core/test/shared_examples/rich_text_editor_examples.rb +10 -10
- data/lib/decidim/core/test/shared_examples/searchable_participatory_space_examples.rb +1 -1
- data/lib/decidim/core/test/shared_examples/searchable_results_examples.rb +8 -8
- data/lib/decidim/core/test/shared_examples/share_link_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/simple_event.rb +1 -1
- data/lib/decidim/core/test/shared_examples/space_cell_changes_button_text_cta.rb +3 -3
- data/lib/decidim/core/test/shared_examples/system_endorse_resource_examples.rb +15 -113
- data/lib/decidim/core/test/shared_examples/translated_event_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/uncommentable_component_examples.rb +2 -2
- data/lib/decidim/core/test/shared_examples/with_endorsable_permissions_examples.rb +1 -1
- data/lib/decidim/core/version.rb +1 -1
- data/lib/decidim/core.rb +24 -17
- data/lib/decidim/dependency_resolver.rb +3 -3
- data/lib/decidim/diffy_extension.rb +1 -19
- data/lib/decidim/download_your_data_serializers/download_your_data_user_serializer.rb +2 -1
- data/lib/decidim/engine_router.rb +2 -2
- data/lib/decidim/events/base_event.rb +19 -0
- data/lib/decidim/events/simple_event.rb +1 -0
- data/lib/decidim/exporters/export_manifest.rb +1 -1
- data/lib/decidim/faker/localized.rb +3 -3
- data/lib/decidim/form_builder.rb +5 -5
- data/lib/decidim/hashtag.rb +1 -1
- data/lib/decidim/jsonb_attributes.rb +4 -4
- data/lib/decidim/manifest_messages.rb +2 -2
- data/lib/decidim/map/autocomplete.rb +0 -1
- data/lib/decidim/organization_settings.rb +5 -8
- data/lib/decidim/paddable.rb +1 -1
- data/lib/decidim/participable.rb +1 -1
- data/lib/decidim/participatory_space_manifest.rb +1 -1
- data/lib/decidim/participatory_space_user.rb +0 -4
- data/lib/decidim/query_extensions.rb +26 -0
- data/lib/decidim/resourceable.rb +1 -1
- data/lib/decidim/search_resource_fields_mapper.rb +2 -2
- data/lib/decidim/searchable.rb +3 -3
- data/lib/decidim/seeds.rb +62 -0
- data/lib/decidim/settings_manifest.rb +0 -2
- data/lib/decidim/stats_registry.rb +2 -2
- data/lib/decidim/translatable_attributes.rb +4 -9
- data/lib/decidim/translatable_resource.rb +1 -1
- data/lib/decidim/view_hooks.rb +1 -1
- data/lib/decidim/view_model.rb +5 -1
- data/lib/decidim/webpacker/esbuild.config.js +14 -0
- data/lib/decidim/webpacker/shakapacker.yml +2 -2
- data/lib/decidim/webpacker/tsconfig.json +11 -0
- data/lib/decidim/webpacker/webpack/custom.js +13 -35
- data/lib/devise/models/decidim_newsletterable.rb +1 -1
- data/lib/tasks/decidim_download_your_data_tasks.rake +2 -2
- data/lib/tasks/decidim_locales_tasks.rake +1 -1
- data/lib/tasks/decidim_mailers_tasks.rake +2 -2
- data/lib/tasks/decidim_metrics_tasks.rake +6 -6
- data/lib/tasks/decidim_procfile.rake +9 -3
- data/lib/tasks/decidim_tasks.rake +5 -4
- data/lib/tasks/decidim_webpacker_tasks.rake +126 -117
- data/lib/tasks/upgrade/decidim_active_storage_migration_tasks.rake +80 -0
- data/lib/tasks/upgrade/decidim_content_blocks_tasks.rake +50 -0
- data/lib/tasks/upgrade/decidim_deduplicate_endorsements.rake +1 -1
- data/lib/tasks/upgrade/decidim_fix_categorization.rake +6 -132
- data/lib/tasks/upgrade/decidim_fix_nickname_uniqueness.rake +1 -1
- data/lib/tasks/upgrade/decidim_fix_short_url_resolver.rake +1 -1
- data/lib/tasks/upgrade/decidim_moderation_tasks.rake +1 -1
- data/lib/tasks/upgrade/decidim_user_moderation.rake +1 -1
- metadata +219 -101
- data/app/cells/decidim/content_blocks/cta/show.erb +0 -12
- data/app/cells/decidim/content_blocks/cta_cell.rb +0 -31
- data/app/cells/decidim/footer_pages/pages.erb +0 -3
- data/app/cells/decidim/footer_pages/topics.erb +0 -12
- data/app/cells/decidim/footer_pages_cell.rb +0 -68
- data/app/controllers/concerns/decidim/direct_upload.rb +0 -82
- data/app/helpers/concerns/decidim/user_role_checker.rb +0 -46
- data/app/packs/src/decidim/remote_tooltips.js +0 -38
- data/app/packs/src/decidim/vendor/modernizr.js +0 -5
- data/app/queries/decidim/similar_emendations.rb +0 -56
- data/app/uploaders/decidim/cw/application_uploader.rb +0 -77
- data/app/uploaders/decidim/cw/attachment_uploader.rb +0 -56
- data/app/uploaders/decidim/cw/avatar_uploader.rb +0 -24
- data/app/uploaders/decidim/cw/banner_image_uploader.rb +0 -7
- data/app/uploaders/decidim/cw/download_your_data_uploader.rb +0 -15
- data/app/uploaders/decidim/cw/downloader.rb +0 -9
- data/app/uploaders/decidim/cw/hero_image_uploader.rb +0 -10
- data/app/uploaders/decidim/cw/homepage_image_uploader.rb +0 -14
- data/app/uploaders/decidim/cw/image_uploader.rb +0 -78
- data/app/uploaders/decidim/cw/newsletter_template_image_uploader.rb +0 -38
- data/app/uploaders/decidim/cw/oauth_application_logo_uploader.rb +0 -10
- data/app/uploaders/decidim/cw/official_image_footer_uploader.rb +0 -10
- data/app/uploaders/decidim/cw/official_image_header_uploader.rb +0 -10
- data/app/uploaders/decidim/cw/open_data_uploader.rb +0 -23
- data/app/uploaders/decidim/cw/organization_favicon_uploader.rb +0 -18
- data/app/uploaders/decidim/cw/organization_logo_uploader.rb +0 -10
- data/app/uploaders/decidim/cw/record_image_uploader.rb +0 -15
- data/app/uploaders/decidim/downloader.rb +0 -9
- data/app/views/decidim/amendments/compare_draft.html.erb +0 -18
- data/app/views/layouts/decidim/_edit_link.html.erb +0 -0
- data/app/views/layouts/decidim/header/_main_links_mobile.html.erb +0 -36
- data/config/initializers/carrierwave.rb +0 -15
- data/config/locales/bn-BD.yml +0 -1
- data/config/locales/bs-BA.yml +0 -98
- data/lib/decidim/attributes/rich_text.rb +0 -38
- data/lib/decidim/carrier_wave_migrator_service.rb +0 -287
- data/lib/decidim/content_parsers/blob_parser.rb +0 -93
- data/lib/decidim/content_renderers/blob_renderer.rb +0 -90
- data/lib/decidim/seven_zip_wrapper.rb +0 -29
- data/lib/tasks/decidim_active_storage_migration_tasks.rake +0 -114
- data/lib/tasks/decidim_content_blocks_tasks.rake +0 -48
- data/lib/tasks/upgrade/decidim_attachments.rake +0 -14
- /data/app/views/layouts/decidim/header/{_menu_breadcrumb_main_dropdown.html.erb → _menu_breadcrumb_main_dropdown_desktop.html.erb} +0 -0
@@ -0,0 +1,227 @@
|
|
1
|
+
import {
|
2
|
+
setHour,
|
3
|
+
setMinute,
|
4
|
+
formatInputTime,
|
5
|
+
changeHourDisplay,
|
6
|
+
changeMinuteDisplay,
|
7
|
+
hourDisplay,
|
8
|
+
minuteDisplay,
|
9
|
+
formatTime
|
10
|
+
} from "src/decidim/datepicker/datepicker_functions"
|
11
|
+
|
12
|
+
describe("setHour", () => {
|
13
|
+
it("returns the hour in correct 24-hour format", () => {
|
14
|
+
const result = setHour("15:30", 24);
|
15
|
+
expect(result).toBe(15);
|
16
|
+
});
|
17
|
+
|
18
|
+
it("returns the hour in correct 12-hour format when hour is more than 12", () => {
|
19
|
+
const result = setHour("18:45", 12);
|
20
|
+
expect(result).toBe(6);
|
21
|
+
});
|
22
|
+
|
23
|
+
it("returns 12 for 12-hour format when hour is 0", () => {
|
24
|
+
const result = setHour("00:30", 12);
|
25
|
+
expect(result).toBe(12);
|
26
|
+
});
|
27
|
+
|
28
|
+
it("returns the hour in correct 12-hour format when hour is less than or equal to 12", () => {
|
29
|
+
const result = setHour("09:15", 12);
|
30
|
+
expect(result).toBe(9);
|
31
|
+
});
|
32
|
+
});
|
33
|
+
|
34
|
+
describe("setMinute", () => {
|
35
|
+
it("returns the correct value", () => {
|
36
|
+
const result = setMinute("12:45");
|
37
|
+
expect(result).toBe(45);
|
38
|
+
});
|
39
|
+
|
40
|
+
it("returns the correct minute value when 0", () => {
|
41
|
+
const result = setMinute("08:00");
|
42
|
+
expect(result).toBe(0);
|
43
|
+
});
|
44
|
+
|
45
|
+
it("returns the correct single-digit value", () => {
|
46
|
+
const result = setMinute("09:05");
|
47
|
+
expect(result).toBe(5);
|
48
|
+
});
|
49
|
+
});
|
50
|
+
|
51
|
+
describe("formatInputTime", () => {
|
52
|
+
const setupDOM = () => {
|
53
|
+
document.body.innerHTML = `
|
54
|
+
<input type="radio" id="period_am_exampleInput" name="period">
|
55
|
+
<input type="radio" id="period_pm_exampleInput" name="period">
|
56
|
+
`;
|
57
|
+
};
|
58
|
+
|
59
|
+
describe("24-hour format", () => {
|
60
|
+
it("returns the value in correct format", () => {
|
61
|
+
setupDOM();
|
62
|
+
const time = "15:30";
|
63
|
+
const format = 24;
|
64
|
+
const input = { id: "exampleInput" };
|
65
|
+
|
66
|
+
const result = formatInputTime(time, format, input);
|
67
|
+
|
68
|
+
expect(result).toBe("15:30");
|
69
|
+
});
|
70
|
+
})
|
71
|
+
|
72
|
+
describe("12-hour format", () => {
|
73
|
+
it("returns the value in correct format and checks the PM radio-button", () => {
|
74
|
+
setupDOM();
|
75
|
+
const time = "12:45";
|
76
|
+
const format = 12;
|
77
|
+
const input = { id: "exampleInput" };
|
78
|
+
|
79
|
+
const result = formatInputTime(time, format, input);
|
80
|
+
|
81
|
+
expect(result).toBe("12:45");
|
82
|
+
expect(document.getElementById("period_pm_exampleInput").checked).toBeTruthy();
|
83
|
+
expect(document.getElementById("period_am_exampleInput").checked).toBeFalsy();
|
84
|
+
});
|
85
|
+
|
86
|
+
it("returns the value in correct format", () => {
|
87
|
+
setupDOM();
|
88
|
+
const time = "00:25";
|
89
|
+
const format = 12;
|
90
|
+
const input = { id: "exampleInput" };
|
91
|
+
|
92
|
+
const result = formatInputTime(time, format, input);
|
93
|
+
|
94
|
+
expect(result).toBe("12:25");
|
95
|
+
// We are not expecting a radio button to be selected here since in a real environment the selected button is not
|
96
|
+
// handled by this method for values < 12
|
97
|
+
});
|
98
|
+
})
|
99
|
+
});
|
100
|
+
|
101
|
+
|
102
|
+
describe("changeHourDisplay", () => {
|
103
|
+
describe("24-hour format", () => {
|
104
|
+
it("should increase the hour", () => {
|
105
|
+
expect(changeHourDisplay("increase", 10, 24)).toEqual(11);
|
106
|
+
});
|
107
|
+
|
108
|
+
it("should change hour from 23 -> 0", () => {
|
109
|
+
expect(changeHourDisplay("increase", 23, 24)).toEqual(0);
|
110
|
+
});
|
111
|
+
|
112
|
+
it("should decrease the hour", () => {
|
113
|
+
expect(changeHourDisplay("decrease", 10, 24)).toEqual(9);
|
114
|
+
});
|
115
|
+
|
116
|
+
it("should change the hour from 0 -> 23", () => {
|
117
|
+
expect(changeHourDisplay("decrease", 0, 24)).toEqual(23);
|
118
|
+
});
|
119
|
+
});
|
120
|
+
|
121
|
+
describe("12-hour format", () => {
|
122
|
+
it("should increase the hour", () => {
|
123
|
+
expect(changeHourDisplay("increase", 10, 12)).toEqual(11);
|
124
|
+
});
|
125
|
+
|
126
|
+
it("should change hour from 12 -> 1", () => {
|
127
|
+
expect(changeHourDisplay("increase", 12, 12)).toEqual(1);
|
128
|
+
});
|
129
|
+
|
130
|
+
it("should decrease the hour", () => {
|
131
|
+
expect(changeHourDisplay("decrease", 10, 12)).toEqual(9);
|
132
|
+
});
|
133
|
+
|
134
|
+
it("should change the hour from 1 -> 12", () => {
|
135
|
+
expect(changeHourDisplay("decrease", 1, 12)).toEqual(12);
|
136
|
+
});
|
137
|
+
});
|
138
|
+
|
139
|
+
it("should return null when invalid parameter", () => {
|
140
|
+
expect(changeHourDisplay("invalid", 10, 12)).toBeNull();
|
141
|
+
});
|
142
|
+
});
|
143
|
+
|
144
|
+
describe("changeMinuteDisplay", () => {
|
145
|
+
describe("increase", () => {
|
146
|
+
it("should increase the minute", () => {
|
147
|
+
expect(changeMinuteDisplay("increase", 10)).toEqual(11);
|
148
|
+
});
|
149
|
+
|
150
|
+
it("should change the minute from 59 -> 0", () => {
|
151
|
+
expect(changeMinuteDisplay("increase", 59)).toEqual(0);
|
152
|
+
});
|
153
|
+
});
|
154
|
+
|
155
|
+
describe("decrease", () => {
|
156
|
+
it("should decrease the minute", () => {
|
157
|
+
expect(changeMinuteDisplay("decrease", 10)).toEqual(9);
|
158
|
+
});
|
159
|
+
|
160
|
+
it("should change the minute from 0 -> 59", () => {
|
161
|
+
expect(changeMinuteDisplay("decrease", 0)).toEqual(59);
|
162
|
+
});
|
163
|
+
});
|
164
|
+
|
165
|
+
it("should handle invalid input by returning null", () => {
|
166
|
+
expect(changeMinuteDisplay("invalid", 10)).toBeNull();
|
167
|
+
});
|
168
|
+
});
|
169
|
+
|
170
|
+
describe("hourDisplay", () => {
|
171
|
+
it("should add a prefix zero for single-digit hours", () => {
|
172
|
+
expect(hourDisplay(5)).toEqual("05");
|
173
|
+
expect(hourDisplay(9)).toEqual("09");
|
174
|
+
});
|
175
|
+
|
176
|
+
it("should not add a prefix zero for double-digit hours", () => {
|
177
|
+
expect(hourDisplay(10)).toEqual(10);
|
178
|
+
expect(hourDisplay(15)).toEqual(15);
|
179
|
+
});
|
180
|
+
});
|
181
|
+
|
182
|
+
describe("minuteDisplay", () => {
|
183
|
+
it("should add a prefix zero for single-digit minutes", () => {
|
184
|
+
expect(minuteDisplay(5)).toEqual("05");
|
185
|
+
expect(minuteDisplay(9)).toEqual("09");
|
186
|
+
});
|
187
|
+
|
188
|
+
it("should not add a prefix zero for double-digit minutes", () => {
|
189
|
+
expect(minuteDisplay(10)).toEqual(10);
|
190
|
+
expect(minuteDisplay(15)).toEqual(15);
|
191
|
+
});
|
192
|
+
});
|
193
|
+
|
194
|
+
|
195
|
+
describe("formatTime", () => {
|
196
|
+
const id = "exampleInput";
|
197
|
+
|
198
|
+
it("should convert 12-hour time to 24-hour time for AM", () => {
|
199
|
+
document.body.innerHTML = `
|
200
|
+
<input type="radio" id="period_am_exampleInput" checked> AM
|
201
|
+
<input type="radio" id="period_pm_exampleInput"> PM
|
202
|
+
`;
|
203
|
+
|
204
|
+
expect(formatTime("09:30", 12, id)).toEqual("09:30");
|
205
|
+
expect(formatTime("12:45", 12, id)).toEqual("00:45");
|
206
|
+
});
|
207
|
+
|
208
|
+
it("should convert 12-hour time to 24-hour time for PM", () => {
|
209
|
+
document.body.innerHTML = `
|
210
|
+
<input type="radio" id="period_am_exampleInput"> AM
|
211
|
+
<input type="radio" id="period_pm_exampleInput" checked> PM
|
212
|
+
`;
|
213
|
+
|
214
|
+
expect(formatTime("03:15", 12, id)).toEqual("15:15");
|
215
|
+
expect(formatTime("11:30", 12, id)).toEqual("23:30");
|
216
|
+
});
|
217
|
+
|
218
|
+
it("should return the original time for 24-hour format", () => {
|
219
|
+
document.body.innerHTML = `
|
220
|
+
<input type="radio" id="period_am_exampleInput"> AM
|
221
|
+
<input type="radio" id="period_pm_exampleInput"> PM
|
222
|
+
`;
|
223
|
+
|
224
|
+
expect(formatTime("15:45", 24, id)).toEqual("15:45");
|
225
|
+
expect(formatTime("08:20", 24, id)).toEqual("08:20");
|
226
|
+
});
|
227
|
+
});
|
@@ -21,7 +21,6 @@ const updateActiveUploads = (modal) => {
|
|
21
21
|
const files = document.querySelector(`[data-active-uploads=${modal.modal.id}]`)
|
22
22
|
const previousId = Array.from(files.querySelectorAll("[type=hidden][id]"))
|
23
23
|
const isMultiple = modal.options.multiple
|
24
|
-
const isTitled = modal.options.titled
|
25
24
|
|
26
25
|
// fastest way to clean children nodes
|
27
26
|
files.textContent = ""
|
@@ -35,26 +34,16 @@ const updateActiveUploads = (modal) => {
|
|
35
34
|
let hidden = ""
|
36
35
|
if (file.hiddenField) {
|
37
36
|
// if there is hiddenField, this file is new
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
} else if (isTitled) {
|
42
|
-
fileField = `${modal.options.resourceName}[${modal.options.addAttribute}][file]`
|
43
|
-
} else {
|
44
|
-
fileField = `${modal.options.resourceName}[${modal.options.addAttribute}]`;
|
45
|
-
}
|
37
|
+
const fileField = isMultiple
|
38
|
+
? `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][file]`
|
39
|
+
: `${modal.options.resourceName}[${modal.options.addAttribute}]`
|
46
40
|
|
47
41
|
hidden = `<input type="hidden" name="${fileField}" value="${file.hiddenField}" />`
|
48
42
|
} else {
|
49
43
|
// otherwise, we keep the attachmentId
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
} else if (isTitled) {
|
54
|
-
fileField = `${modal.options.resourceName}[${modal.options.addAttribute}][id]`;
|
55
|
-
} else {
|
56
|
-
fileField = `${modal.options.resourceName}[${modal.options.addAttribute}]`;
|
57
|
-
}
|
44
|
+
const fileField = isMultiple
|
45
|
+
? `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][id]`
|
46
|
+
: `${modal.options.resourceName}[${modal.options.addAttribute}]`
|
58
47
|
|
59
48
|
// convert all node attributes to string
|
60
49
|
const attributes = Array.from(previousId.find(({ id }) => id === file.attachmentId).attributes).reduce((acc, { name, value }) => `${acc} ${name}="${value}"`, "")
|
@@ -62,12 +51,10 @@ const updateActiveUploads = (modal) => {
|
|
62
51
|
hidden += `<input type="hidden" name="${fileField}" value="${file.attachmentId}" />`
|
63
52
|
}
|
64
53
|
|
65
|
-
if (
|
54
|
+
if (modal.options.titled) {
|
66
55
|
const titleValue = modal.modal.querySelectorAll('input[type="text"]')[ix].value
|
67
56
|
// NOTE - Renaming the attachment is not supported when multiple uploader is disabled
|
68
|
-
const titleField =
|
69
|
-
? `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][title]`
|
70
|
-
: `${modal.options.resourceName}[${modal.options.addAttribute}][title]`
|
57
|
+
const titleField = `${modal.options.resourceName}[${modal.options.addAttribute}][${ix}][title]`
|
71
58
|
hidden += `<input type="hidden" name="${titleField}" value="${escapeQuotes(titleValue)}" />`
|
72
59
|
|
73
60
|
title = titleValue
|
@@ -77,9 +77,6 @@ export default class UploadModal {
|
|
77
77
|
uploader.upload.create((error, blob) => {
|
78
78
|
if (error) {
|
79
79
|
uploader.errors = [error]
|
80
|
-
this.uploadItems.replaceChild(this.createUploadItem(file, [error], { value: 100 }), item);
|
81
|
-
this.updateDropZone();
|
82
|
-
|
83
80
|
} else {
|
84
81
|
// attach the file hash to submit the form, when the file has been uploaded
|
85
82
|
file.hiddenField = blob.signed_id
|
@@ -13,7 +13,7 @@ const allowedNodeTypes = ["heading", "paragraph"];
|
|
13
13
|
const allowedNodeActive = (editor) => allowedNodeTypes.some((type) => editor.isActive(type));
|
14
14
|
|
15
15
|
/**
|
16
|
-
* Finds the closest allowed type node from the given position.
|
16
|
+
* Finds the closest allowed type node from the given position. Traverses the
|
17
17
|
* document depth upwards to search through all the node parents.
|
18
18
|
*
|
19
19
|
* @param {Object} position The position where to look for
|
@@ -9,7 +9,7 @@ const YOUTUBE_REGEX_GLOBAL = /^(https?:\/\/)?(www\.|music\.)?(youtube\.com|youtu
|
|
9
9
|
const VIMEO_REGEX = /^(https?:\/\/)?(www\.|player\.)?(vimeo\.com)(.+)?$/;
|
10
10
|
const VIMEO_REGEX_GLOBAL = /^(https?:\/\/)?(www\.|player\.)?(vimeo\.com)(.+)?$/g;
|
11
11
|
|
12
|
-
const
|
12
|
+
const isValidYouTubeUrl = (url) => {
|
13
13
|
return url.match(YOUTUBE_REGEX);
|
14
14
|
}
|
15
15
|
|
@@ -17,7 +17,7 @@ const isValidVimeoUrl = (url) => {
|
|
17
17
|
return url.match(VIMEO_REGEX);
|
18
18
|
};
|
19
19
|
|
20
|
-
const
|
20
|
+
const getEmbedUrlFromYouTubeUrl = (options) => {
|
21
21
|
const embedUrl = "https://www.youtube-nocookie.com/embed/";
|
22
22
|
|
23
23
|
const { url } = options;
|
@@ -74,8 +74,8 @@ const getEmbedUrlFromVimeoUrl = (options) => {
|
|
74
74
|
const getEmbedUrlFromVideoUrl = (options) => {
|
75
75
|
const { url } = options;
|
76
76
|
|
77
|
-
if (
|
78
|
-
return
|
77
|
+
if (isValidYouTubeUrl(url)) {
|
78
|
+
return getEmbedUrlFromYouTubeUrl(options);
|
79
79
|
} else if (isValidVimeoUrl(url)) {
|
80
80
|
return getEmbedUrlFromVimeoUrl(options);
|
81
81
|
}
|
@@ -1,24 +1,9 @@
|
|
1
|
-
/* global jest */
|
2
|
-
|
3
1
|
import { Editor } from "@tiptap/core";
|
4
2
|
|
5
3
|
import DecidimKit from "src/decidim/editor/extensions/decidim_kit";
|
6
4
|
|
7
5
|
import { createEditorContainer } from "src/decidim/editor/test/helpers";
|
8
6
|
|
9
|
-
// Mock picmo as it is distributed as an ES6 module that is not fully compatible
|
10
|
-
// with Jest without configuration changes.
|
11
|
-
jest.mock("@picmo/popup-picker",
|
12
|
-
() => ({
|
13
|
-
createPopup: () => {
|
14
|
-
return {
|
15
|
-
addEventListener: () => {},
|
16
|
-
closeButton: {}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
})
|
20
|
-
);
|
21
|
-
|
22
7
|
describe("DecidimKit", () => {
|
23
8
|
const createEditor = (config = {}) => {
|
24
9
|
const editorElement = document.querySelector(".editor .editor-input");
|
@@ -141,7 +141,7 @@ describe("Indent", () => {
|
|
141
141
|
expect(editor.getHTML()).toEqual("<p>Hello, world!</p>");
|
142
142
|
});
|
143
143
|
|
144
|
-
it("does not
|
144
|
+
it("does not outdent the content if the selection is not at the beginning of the line", async () => {
|
145
145
|
await updateContent(editorElement, '<p class="editor-indent-2">Hello, world!</p>');
|
146
146
|
|
147
147
|
editorElement.focus();
|
@@ -9,7 +9,7 @@ const dropzoneLocales = {
|
|
9
9
|
uploaded: "Uploaded",
|
10
10
|
validating: "Validating...",
|
11
11
|
"title_required": "Title is required!",
|
12
|
-
"file_size_too_large": "File size is too large!
|
12
|
+
"file_size_too_large": "File size is too large! Maximum file size: 10MB",
|
13
13
|
"validation_error": "Validation error!"
|
14
14
|
};
|
15
15
|
|
@@ -34,26 +34,13 @@ window.DragEvent = class DragEvent extends Event {};
|
|
34
34
|
|
35
35
|
const defaultEditorConfig = {
|
36
36
|
contentTypes: {
|
37
|
-
image: ["image/jpeg", "image/png"]
|
37
|
+
image: ["image/jpeg", "image/png", "image/webp"]
|
38
38
|
},
|
39
39
|
uploadImagesPath: "/editor_images",
|
40
40
|
dragAndDropHelpText: "Add images by dragging & dropping or pasting them.",
|
41
41
|
uploadDialogSelector: "#upload_dialog"
|
42
42
|
};
|
43
43
|
|
44
|
-
// Mock picmo as it is distributed as an ES6 module that is not fully compatible
|
45
|
-
// with Jest without configuration changes.
|
46
|
-
jest.mock("@picmo/popup-picker",
|
47
|
-
() => ({
|
48
|
-
createPopup: () => {
|
49
|
-
return {
|
50
|
-
addEventListener: () => {},
|
51
|
-
closeButton: {}
|
52
|
-
}
|
53
|
-
}
|
54
|
-
})
|
55
|
-
);
|
56
|
-
|
57
44
|
// Mock the SVG icons import because jest tests are not running through webpack
|
58
45
|
jest.mock("images/decidim/remixicon.symbol.svg", () => "test/url.svg");
|
59
46
|
|
@@ -40,7 +40,7 @@ const getMsoListStyle = (type, level, styleDefs) => {
|
|
40
40
|
return Object.assign(typeStyle, levelStyle);
|
41
41
|
};
|
42
42
|
|
43
|
-
const
|
43
|
+
const convertMsoListStyleToHtml = (listStyle) => {
|
44
44
|
let tag = "ol",
|
45
45
|
type = null;
|
46
46
|
switch (listStyle["mso-level-number-format"]) {
|
@@ -108,7 +108,7 @@ export const transformMsDesktop = (html) => {
|
|
108
108
|
elements.forEach((paragraph) => {
|
109
109
|
const { type: msoType, level } = detectMsoList(paragraph);
|
110
110
|
const listStyle = getMsoListStyle(msoType, level, listStyles);
|
111
|
-
const { tag, type } =
|
111
|
+
const { tag, type } = convertMsoListStyleToHtml(listStyle);
|
112
112
|
|
113
113
|
const li = document.createElement("li");
|
114
114
|
const pa = document.createElement("p");
|
@@ -28,8 +28,8 @@ export default function updateExternalDomainLinks(element) {
|
|
28
28
|
}
|
29
29
|
|
30
30
|
const domain = parts[3].replace(/^www\./, "")
|
31
|
-
const
|
32
|
-
if (
|
31
|
+
const allowlist = window.Decidim.config.get("external_domain_allowlist") || []
|
32
|
+
if (allowlist.includes(domain)) {
|
33
33
|
return;
|
34
34
|
}
|
35
35
|
|
@@ -4,7 +4,7 @@ describe("ExternalDomainLink", () => {
|
|
4
4
|
const content = `
|
5
5
|
<div id="links">
|
6
6
|
<a href="https://github.com/" target="_blank">This is an external link</a>
|
7
|
-
<a href="https://example.com/" target="_blank">This is an external link from a
|
7
|
+
<a href="https://example.com/" target="_blank">This is an external link from a domain in the allowlist</a>
|
8
8
|
<div class="editor-container">
|
9
9
|
<a href="https://example.org/" target="_blank">This is an external link within an editor</a>
|
10
10
|
</div>
|
@@ -12,7 +12,7 @@ describe("ExternalDomainLink", () => {
|
|
12
12
|
</div>
|
13
13
|
`;
|
14
14
|
const config = {
|
15
|
-
"
|
15
|
+
"external_domain_allowlist": ["example.com"]
|
16
16
|
};
|
17
17
|
window.Decidim = {
|
18
18
|
config: {
|
@@ -33,11 +33,11 @@ describe("ExternalDomainLink", () => {
|
|
33
33
|
);
|
34
34
|
});
|
35
35
|
|
36
|
-
it("does not update the link to the external link URL when its
|
36
|
+
it("does not update the link to the external link URL when its in the allow list", () => {
|
37
37
|
const $link = $("#links a")[1];
|
38
38
|
|
39
39
|
expect($link.outerHTML).toEqual(
|
40
|
-
'<a href="https://example.com/" target="_blank">This is an external link from a
|
40
|
+
'<a href="https://example.com/" target="_blank">This is an external link from a domain in the allowlist</a>'
|
41
41
|
);
|
42
42
|
});
|
43
43
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
/* eslint max-lines: ["error", {"max": 350, "skipBlankLines": true}] */
|
3
3
|
|
4
4
|
/**
|
5
|
-
* A plain
|
5
|
+
* A plain JavaScript component that handles the form filter.
|
6
6
|
* @class
|
7
7
|
* @augments Component
|
8
8
|
*/
|
@@ -24,9 +24,9 @@ export default class FormFilterComponent {
|
|
24
24
|
this._onPopState = this._onPopState.bind(this);
|
25
25
|
|
26
26
|
if (window.Decidim.PopStateHandler) {
|
27
|
-
this.
|
27
|
+
this.popStateSubmitter = false;
|
28
28
|
} else {
|
29
|
-
this.
|
29
|
+
this.popStateSubmitter = true;
|
30
30
|
window.Decidim.PopStateHandler = this.id;
|
31
31
|
}
|
32
32
|
}
|
@@ -239,7 +239,7 @@ export default class FormFilterComponent {
|
|
239
239
|
}
|
240
240
|
|
241
241
|
// Only one instance should submit the form on browser history navigation
|
242
|
-
if (this.
|
242
|
+
if (this.popStateSubmitter) {
|
243
243
|
Rails.fire(this.$form[0], "submit");
|
244
244
|
}
|
245
245
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import dayjs from "dayjs"
|
2
2
|
|
3
3
|
$(() => {
|
4
|
-
const $impersonationWarning = $("
|
4
|
+
const $impersonationWarning = $("[data-impersonation-warning]");
|
5
5
|
if ($impersonationWarning.length) {
|
6
6
|
const endsAt = dayjs($impersonationWarning.data("session-ends-at"));
|
7
7
|
const exitInterval = setInterval(() => {
|
@@ -17,9 +17,6 @@ import Rails from "@rails/ujs"
|
|
17
17
|
import svg4everybody from "svg4everybody"
|
18
18
|
import morphdom from "morphdom"
|
19
19
|
|
20
|
-
// vendor customizated scripts (bad practice: these ones should be removed eventually)
|
21
|
-
import "src/decidim/vendor/modernizr"
|
22
|
-
|
23
20
|
/**
|
24
21
|
* Local dependencies
|
25
22
|
*/
|
@@ -52,8 +49,11 @@ import "src/decidim/direct_uploads/upload_field"
|
|
52
49
|
import "src/decidim/data_consent"
|
53
50
|
import "src/decidim/abide_form_validator_fixer"
|
54
51
|
import "src/decidim/sw"
|
52
|
+
import "src/decidim/sticky_header"
|
53
|
+
import "src/decidim/attachments"
|
55
54
|
|
56
55
|
// local deps that require initialization
|
56
|
+
import formDatePicker from "src/decidim/datepicker/form_datepicker"
|
57
57
|
import Configuration from "src/decidim/configuration"
|
58
58
|
import ExternalLink from "src/decidim/external_link"
|
59
59
|
import updateExternalDomainLinks from "src/decidim/external_domain_warning"
|
@@ -65,21 +65,22 @@ import addInputEmoji, { EmojiButton } from "src/decidim/input_emoji"
|
|
65
65
|
import FocusGuard from "src/decidim/focus_guard"
|
66
66
|
import backToListLink from "src/decidim/back_to_list"
|
67
67
|
import markAsReadNotifications from "src/decidim/notifications"
|
68
|
+
import handleNotificationActions from "src/decidim/notifications_actions"
|
68
69
|
import RemoteModal from "src/decidim/remote_modal"
|
69
70
|
import selectActiveIdentity from "src/decidim/identity_selector_dialog"
|
70
71
|
import createTooltip from "src/decidim/tooltips"
|
71
|
-
import fetchRemoteTooltip from "src/decidim/remote_tooltips"
|
72
72
|
import createToggle from "src/decidim/toggle"
|
73
73
|
import {
|
74
74
|
createAccordion,
|
75
75
|
createDialog,
|
76
76
|
createDropdown,
|
77
|
+
announceForScreenReader,
|
77
78
|
Dialogs
|
78
79
|
} from "src/decidim/a11y"
|
79
80
|
import changeReportFormBehavior from "src/decidim/change_report_form_behavior"
|
80
81
|
|
81
82
|
// bad practice: window namespace should avoid be populated as much as possible
|
82
|
-
// rails-translations could be
|
83
|
+
// rails-translations could be referenced through a single Decidim.I18n object
|
83
84
|
window.Decidim = window.Decidim || {
|
84
85
|
config: new Configuration(),
|
85
86
|
ExternalLink,
|
@@ -87,7 +88,8 @@ window.Decidim = window.Decidim || {
|
|
87
88
|
FormValidator,
|
88
89
|
addInputEmoji,
|
89
90
|
EmojiButton,
|
90
|
-
Dialogs
|
91
|
+
Dialogs,
|
92
|
+
announceForScreenReader
|
91
93
|
};
|
92
94
|
|
93
95
|
window.morphdom = morphdom
|
@@ -137,6 +139,8 @@ const initializer = (element = document) => {
|
|
137
139
|
|
138
140
|
svg4everybody();
|
139
141
|
|
142
|
+
element.querySelectorAll('input[type="datetime-local"],input[type="date"]').forEach((elem) => formDatePicker(elem))
|
143
|
+
|
140
144
|
element.querySelectorAll(".editor-container").forEach((container) => window.createEditor(container));
|
141
145
|
|
142
146
|
// initialize character counter
|
@@ -169,6 +173,7 @@ const initializer = (element = document) => {
|
|
169
173
|
backToListLink(element.querySelectorAll(".js-back-to-list"));
|
170
174
|
|
171
175
|
markAsReadNotifications(element)
|
176
|
+
handleNotificationActions(element)
|
172
177
|
|
173
178
|
scrollToLastChild(element)
|
174
179
|
|
@@ -190,8 +195,6 @@ const initializer = (element = document) => {
|
|
190
195
|
// Initialize data-toggles
|
191
196
|
element.querySelectorAll("[data-toggle]").forEach((elem) => createToggle(elem))
|
192
197
|
|
193
|
-
element.querySelectorAll("[data-remote-tooltip]").forEach((elem) => fetchRemoteTooltip(elem))
|
194
|
-
|
195
198
|
element.querySelectorAll(".new_report").forEach((elem) => changeReportFormBehavior(elem))
|
196
199
|
}
|
197
200
|
|
@@ -74,7 +74,7 @@ export default class InputCharacterCounter {
|
|
74
74
|
|
75
75
|
// If input is a hidden for WYSIWYG editor add it at the end
|
76
76
|
if (this.$input.parent().is(".editor")) {
|
77
|
-
this.$input.parent().
|
77
|
+
this.$input.parent().after(this.$target);
|
78
78
|
} else {
|
79
79
|
const wrapper = document.createElement("span")
|
80
80
|
wrapper.className = "input-character-counter"
|
@@ -232,7 +232,7 @@ export default class InputCharacterCounter {
|
|
232
232
|
} else if (this.maxCharacters - srLength === this.announceThreshold) {
|
233
233
|
return this.announcedAt || currentLength;
|
234
234
|
// The third branch checks that when deleting characters, we should
|
235
|
-
// announce the next threshold to get accurate
|
235
|
+
// announce the next threshold to get accurate announcement. E.g. when we
|
236
236
|
// have 750 characters left and the user deletes 100 characters at once,
|
237
237
|
// we should announce "700 characters left" after that deletion.
|
238
238
|
} else if (srLength < currentLength) {
|