decidim-core 0.29.3 → 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/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_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/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/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/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 +27 -13
- 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/user_activity/show.erb +1 -1
- 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 +7 -6
- data/app/commands/decidim/create_user_group.rb +6 -2
- data/app/commands/decidim/destroy_ephemeral_user.rb +47 -0
- 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/headers/browser_feature_permissions.rb +50 -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/decidim/application_controller.rb +10 -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 +1 -1
- 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 +14 -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 +0 -9
- 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/layout_helper.rb +6 -0
- 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/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/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/reported_mailer.rb +0 -1
- 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/src/decidim/check_boxes_tree.js +0 -1
- data/app/packs/src/decidim/clipboard.js +18 -9
- data/app/packs/src/decidim/confirm.js +79 -59
- data/app/packs/src/decidim/datepicker/datepicker_functions.js +3 -3
- data/app/packs/src/decidim/decidim_application.js +1 -0
- data/app/packs/src/decidim/form_remote.js +1 -1
- data/app/packs/src/decidim/geocoding/reverse_geocoding.js +60 -0
- data/app/packs/src/decidim/impersonation.js +1 -1
- data/app/packs/src/decidim/index.js +13 -5
- 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/session_timeouter.js +1 -1
- 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/utilities/dom.js +148 -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/_buttons.scss +19 -0
- 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/_forms.scss +2 -2
- data/app/packs/stylesheets/decidim/_header.scss +2 -6
- data/app/packs/stylesheets/decidim/_layout.scss +32 -2
- data/app/packs/stylesheets/decidim/_login.scss +53 -6
- data/app/packs/stylesheets/decidim/_modal.scss +42 -0
- data/app/packs/stylesheets/decidim/_modal_tos_refuse.scss +4 -0
- 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/permissions.rb +8 -2
- 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/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/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/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/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 +1 -17
- 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 +38 -40
- 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/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/layouts/decidim/_application.html.erb +0 -1
- data/app/views/layouts/decidim/_js_configuration.html.erb +1 -0
- data/app/views/layouts/decidim/_logo.html.erb +1 -1
- 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_legal.html.erb +1 -1
- data/app/views/layouts/decidim/footer/_main_links.html.erb +1 -1
- 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/_menu_breadcrumb_items.html.erb +2 -0
- data/app/views/layouts/decidim/shared/_layout_item.html.erb +1 -1
- data/config/assets.rb +2 -1
- data/config/locales/ar.yml +29 -74
- data/config/locales/bg.yml +27 -74
- data/config/locales/bs-BA.yml +0 -2
- data/config/locales/ca.yml +369 -90
- data/config/locales/cs.yml +370 -84
- data/config/locales/de.yml +348 -72
- data/config/locales/el.yml +16 -58
- data/config/locales/en.yml +349 -70
- data/config/locales/eo.yml +0 -4
- data/config/locales/es-MX.yml +362 -86
- data/config/locales/es-PY.yml +367 -91
- data/config/locales/es.yml +369 -90
- data/config/locales/eu.yml +422 -140
- data/config/locales/fi-plain.yml +360 -76
- data/config/locales/fi.yml +364 -77
- data/config/locales/fr-CA.yml +172 -83
- data/config/locales/fr.yml +172 -80
- data/config/locales/ga-IE.yml +4 -25
- data/config/locales/gl.yml +15 -58
- data/config/locales/hu.yml +24 -62
- data/config/locales/id-ID.yml +16 -57
- data/config/locales/is-IS.yml +0 -25
- data/config/locales/it.yml +31 -94
- data/config/locales/ja.yml +226 -97
- data/config/locales/lb.yml +23 -76
- data/config/locales/lt.yml +18 -64
- data/config/locales/lv.yml +16 -58
- data/config/locales/nl.yml +18 -75
- data/config/locales/no.yml +18 -70
- data/config/locales/pl.yml +24 -72
- data/config/locales/pt-BR.yml +35 -63
- data/config/locales/pt.yml +18 -70
- data/config/locales/ro-RO.yml +109 -188
- data/config/locales/ru.yml +8 -43
- data/config/locales/sk.yml +19 -70
- data/config/locales/sl.yml +0 -4
- data/config/locales/sr-CS.yml +0 -2
- data/config/locales/sv.yml +127 -79
- data/config/locales/tr-TR.yml +24 -74
- data/config/locales/uk.yml +1 -29
- data/config/locales/zh-CN.yml +16 -68
- data/config/locales/zh-TW.yml +17 -62
- data/config/routes.rb +4 -10
- data/db/migrate/20181025082245_add_timestamps_to_components.rb +2 -0
- 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 +2 -1
- 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 +105 -2
- data/lib/decidim/core/test/shared_examples/admin_resource_gallery_examples.rb +85 -0
- 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 -129
- 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 +1 -1
- 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 +202 -110
- 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 -46
- 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/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/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 -2111
- 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
@@ -1,33 +1,14 @@
|
|
1
|
-
// This script implements the sticky header
|
2
|
-
//
|
3
|
-
// The sticky
|
1
|
+
// This script implements the sticky header on mobile devices.
|
2
|
+
//
|
3
|
+
// The sticky header hides when participants scroll down and shows when they scroll up.
|
4
|
+
// Sticky headers allow users to quickly access the navigation, search, and utility-navigation
|
5
|
+
// elements without scrolling up to the top of the page. They increase the discoverability of the elements in the header.
|
6
|
+
//
|
4
7
|
|
5
8
|
import { screens } from "tailwindcss/defaultTheme"
|
6
9
|
|
7
10
|
let prevScroll = window.scrollY;
|
8
11
|
const stickyHeader = document.querySelector("[data-sticky-header]");
|
9
|
-
const footer = document.querySelector("footer");
|
10
|
-
const stickyButtons = document.querySelectorAll("[data-sticky-buttons]");
|
11
|
-
|
12
|
-
const isElementInViewport = (element) => {
|
13
|
-
const rect = element.getBoundingClientRect();
|
14
|
-
return rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight);
|
15
|
-
};
|
16
|
-
|
17
|
-
const adjustCtasButtons = () => {
|
18
|
-
if (!stickyButtons || !stickyButtons.length) {
|
19
|
-
return;
|
20
|
-
}
|
21
|
-
|
22
|
-
let visibleButtons = Array.from(stickyButtons).filter(isElementInViewport);
|
23
|
-
|
24
|
-
if (visibleButtons.length > 0) {
|
25
|
-
const marginBottom = Math.max(...visibleButtons.map((ctasButton) => ctasButton.offsetHeight));
|
26
|
-
footer.style.marginBottom = `${marginBottom}px`;
|
27
|
-
} else {
|
28
|
-
footer.style.marginBottom = 0;
|
29
|
-
}
|
30
|
-
};
|
31
12
|
|
32
13
|
// Fix the menu bar container margin top when there are multiple elements in the sticky header
|
33
14
|
// As there could be different heights and we cannot know beforehand, we need to adjust this in a dynamic way
|
@@ -76,12 +57,6 @@ if (stickyHeader) {
|
|
76
57
|
}
|
77
58
|
prevScroll = currentScroll;
|
78
59
|
}
|
79
|
-
|
80
|
-
adjustCtasButtons();
|
81
60
|
}
|
82
61
|
});
|
83
|
-
|
84
|
-
document.addEventListener("on:toggle", () => {
|
85
|
-
adjustCtasButtons();
|
86
|
-
});
|
87
62
|
};
|
@@ -2,6 +2,7 @@ import PasswordToggler from "src/decidim/password_toggler";
|
|
2
2
|
|
3
3
|
$(() => {
|
4
4
|
const $userRegistrationForm = $("#register-form");
|
5
|
+
const $userOmniauthRegistrationForm = $("#omniauth-register-form");
|
5
6
|
const $userGroupFields = $userRegistrationForm.find(".user-group-fields");
|
6
7
|
const userPassword = document.querySelector(".user-password");
|
7
8
|
const inputSelector = 'input[name="user[sign_up_as]"]';
|
@@ -19,9 +20,11 @@ $(() => {
|
|
19
20
|
|
20
21
|
const checkNewsletter = (check) => {
|
21
22
|
$userRegistrationForm.find(newsletterSelector).prop("checked", check);
|
23
|
+
$userOmniauthRegistrationForm.find(newsletterSelector).prop("checked", check);
|
22
24
|
$newsletterModal.data("continue", true);
|
23
25
|
window.Decidim.currentDialogs["sign-up-newsletter-modal"].close()
|
24
26
|
$userRegistrationForm.submit();
|
27
|
+
$userOmniauthRegistrationForm.submit();
|
25
28
|
}
|
26
29
|
|
27
30
|
setGroupFieldsVisibility($userRegistrationForm.find(`${inputSelector}:checked`).val());
|
@@ -42,6 +45,16 @@ $(() => {
|
|
42
45
|
}
|
43
46
|
});
|
44
47
|
|
48
|
+
$userOmniauthRegistrationForm.on("submit", (event) => {
|
49
|
+
const newsletterChecked = $userOmniauthRegistrationForm.find(newsletterSelector);
|
50
|
+
if (!$newsletterModal.data("continue")) {
|
51
|
+
if (!newsletterChecked.prop("checked")) {
|
52
|
+
event.preventDefault();
|
53
|
+
window.Decidim.currentDialogs["sign-up-newsletter-modal"].open()
|
54
|
+
}
|
55
|
+
}
|
56
|
+
});
|
57
|
+
|
45
58
|
$newsletterModal.find("[data-check]").on("click", (event) => {
|
46
59
|
checkNewsletter($(event.target).data("check"));
|
47
60
|
});
|
@@ -0,0 +1,148 @@
|
|
1
|
+
import confirmAction from "src/decidim/confirm"
|
2
|
+
import { getMessages } from "src/decidim/i18n"
|
3
|
+
|
4
|
+
const { Rails } = window;
|
5
|
+
|
6
|
+
const createUnloadPreventer = () => {
|
7
|
+
const preventUnloadConditions = [];
|
8
|
+
|
9
|
+
const confirmMessage = getMessages("confirmUnload") || "Are you sure you want to leave this page?";
|
10
|
+
|
11
|
+
const canUnload = (event) => !preventUnloadConditions.some((condition) => condition(event));
|
12
|
+
|
13
|
+
// TLDR:
|
14
|
+
// The beforeunload event does not work during tests due to the deprecation of
|
15
|
+
// the unload event and ChromeDriver automatically accepting these dialogs.
|
16
|
+
// ---
|
17
|
+
//
|
18
|
+
// Even when there are custom listeners on links and forms, the beforeunload
|
19
|
+
// event is to ensure that the user does not accidentally reload the page or
|
20
|
+
// close the browser or the tab. Note that this does not work during the tests
|
21
|
+
// with ChromeDriver due to the deprecation of the unload event and
|
22
|
+
// ChromeDriver automatically accepting these dialogs. For the time being,
|
23
|
+
// this should work when a real user interacts with the browser along with the
|
24
|
+
// "Permissions-Policy" header set by the backend. For more information about
|
25
|
+
// the header, see Decidim::Headers::BrowserFeaturePermissions).
|
26
|
+
const unloadListener = (event) => {
|
27
|
+
if (canUnload(event)) {
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
|
31
|
+
// According to:
|
32
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
33
|
+
//
|
34
|
+
// > [...] best practice is to trigger the dialog by invoking
|
35
|
+
// > preventDefault() on the event object, while also setting returnValue to
|
36
|
+
// > support legacy cases.
|
37
|
+
event.preventDefault();
|
38
|
+
event.returnValue = true;
|
39
|
+
};
|
40
|
+
|
41
|
+
// The beforeunload event listener has to be registered AFTER a user
|
42
|
+
// interaction which is why it is wrapped around the next click event that
|
43
|
+
// happens after the first unload listener was registered. Otherwise it might
|
44
|
+
// not work due to the deprecation of the unload APIs in Chromium based
|
45
|
+
// browsers and possibly in the web standards in the future.
|
46
|
+
//
|
47
|
+
// According to:
|
48
|
+
// https://developer.chrome.com/docs/web-platform/page-lifecycle-api#the_beforeunload_event
|
49
|
+
//
|
50
|
+
// > Never add a beforeunload listener unconditionally or use it as an
|
51
|
+
// > end-of-session signal. Only add it when a user has unsaved work, and
|
52
|
+
// > remove it as soon as that work has been saved.
|
53
|
+
const registerBeforeUnload = () => {
|
54
|
+
window.removeEventListener("click", registerBeforeUnload);
|
55
|
+
window.addEventListener("beforeunload", unloadListener);
|
56
|
+
};
|
57
|
+
|
58
|
+
const disableBeforeUnload = () => {
|
59
|
+
window.removeEventListener("click", registerBeforeUnload);
|
60
|
+
window.removeEventListener("beforeunload", unloadListener);
|
61
|
+
};
|
62
|
+
|
63
|
+
const linkClickListener = (ev) => {
|
64
|
+
const link = ev.target?.closest("a");
|
65
|
+
if (!link) {
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
|
69
|
+
if (canUnload(ev)) {
|
70
|
+
disableBeforeUnload();
|
71
|
+
document.removeEventListener("click", linkClickListener);
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
|
75
|
+
window.exitUrl = link.href;
|
76
|
+
|
77
|
+
ev.preventDefault();
|
78
|
+
ev.stopPropagation();
|
79
|
+
|
80
|
+
confirmAction(confirmMessage, link).then((answer) => {
|
81
|
+
if (!answer) {
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
|
85
|
+
disableBeforeUnload();
|
86
|
+
document.removeEventListener("click", linkClickListener);
|
87
|
+
link.click();
|
88
|
+
});
|
89
|
+
};
|
90
|
+
|
91
|
+
const formSubmitListener = (ev) => {
|
92
|
+
const source = ev.target?.closest("form");
|
93
|
+
if (!source) {
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
97
|
+
if (canUnload(ev)) {
|
98
|
+
disableBeforeUnload();
|
99
|
+
document.removeEventListener("submit", formSubmitListener);
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
const button = source.closest(Rails.formSubmitSelector);
|
104
|
+
if (!button) {
|
105
|
+
return;
|
106
|
+
}
|
107
|
+
|
108
|
+
ev.preventDefault();
|
109
|
+
ev.stopImmediatePropagation();
|
110
|
+
ev.stopPropagation();
|
111
|
+
|
112
|
+
confirmAction(confirmMessage, button).then((answer) => {
|
113
|
+
if (!answer) {
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
|
117
|
+
disableBeforeUnload();
|
118
|
+
document.removeEventListener("submit", formSubmitListener);
|
119
|
+
source.submit();
|
120
|
+
});
|
121
|
+
};
|
122
|
+
|
123
|
+
const registerPreventUnloadListeners = () => {
|
124
|
+
window.addEventListener("click", registerBeforeUnload);
|
125
|
+
document.addEventListener("click", linkClickListener);
|
126
|
+
document.addEventListener("submit", formSubmitListener);
|
127
|
+
};
|
128
|
+
|
129
|
+
return {
|
130
|
+
addPreventCondition: (condition) => {
|
131
|
+
if (typeof condition !== "function") {
|
132
|
+
return;
|
133
|
+
}
|
134
|
+
|
135
|
+
if (preventUnloadConditions.length < 1) {
|
136
|
+
// The unload listeners are global, so only the first call to this
|
137
|
+
// function should result to registering these listeners.
|
138
|
+
registerPreventUnloadListeners();
|
139
|
+
}
|
140
|
+
|
141
|
+
preventUnloadConditions.push(condition);
|
142
|
+
}
|
143
|
+
};
|
144
|
+
};
|
145
|
+
|
146
|
+
const unloadPreventer = createUnloadPreventer();
|
147
|
+
|
148
|
+
export const preventUnload = (condition) => unloadPreventer.addPreventCondition(condition);
|
@@ -0,0 +1,212 @@
|
|
1
|
+
/* eslint-disable */
|
2
|
+
|
3
|
+
// 🍂class TileLayer.HERE
|
4
|
+
// Tile layer for HERE maps tiles.
|
5
|
+
L.TileLayer.HERE = L.TileLayer.extend({
|
6
|
+
|
7
|
+
options: {
|
8
|
+
subdomains: '1234',
|
9
|
+
minZoom: 2,
|
10
|
+
maxZoom: 18,
|
11
|
+
|
12
|
+
// 🍂option scheme: String = 'normal.day'
|
13
|
+
// The "map scheme", as documented in the HERE API.
|
14
|
+
scheme: 'normal.day',
|
15
|
+
|
16
|
+
// 🍂option resource: String = 'maptile'
|
17
|
+
// The "map resource", as documented in the HERE API.
|
18
|
+
resource: 'maptile',
|
19
|
+
|
20
|
+
// 🍂option mapId: String = 'newest'
|
21
|
+
// Version of the map tiles to be used, or a hash of an unique map
|
22
|
+
mapId: 'newest',
|
23
|
+
|
24
|
+
// 🍂option format: String = 'png8'
|
25
|
+
// Image format to be used (`png8`, `png`, or `jpg`)
|
26
|
+
format: 'png8',
|
27
|
+
|
28
|
+
// 🍂option appId: String = ''
|
29
|
+
// Required option. The `app_id` provided as part of the HERE credentials
|
30
|
+
appId: '',
|
31
|
+
|
32
|
+
// 🍂option appCode: String = ''
|
33
|
+
// Required option. The `app_code` provided as part of the HERE credentials
|
34
|
+
appCode: '',
|
35
|
+
|
36
|
+
// 🍂option useCIT: boolean = false
|
37
|
+
// Whether to use the CIT when loading the here-maptiles
|
38
|
+
useCIT: false,
|
39
|
+
|
40
|
+
// 🍂option useHTTPS: boolean = true
|
41
|
+
// Whether to use HTTPS when loading the here-maptiles
|
42
|
+
useHTTPS: true,
|
43
|
+
|
44
|
+
// 🍂option language: String = ''
|
45
|
+
// The language of the descriptions on the maps that are loaded
|
46
|
+
language: '',
|
47
|
+
|
48
|
+
// 🍂option language: String = ''
|
49
|
+
// The second language of the descriptions on the maps that are loaded
|
50
|
+
language2: '',
|
51
|
+
},
|
52
|
+
|
53
|
+
|
54
|
+
initialize: function initialize(options) {
|
55
|
+
options = L.setOptions(this, options);
|
56
|
+
|
57
|
+
// Decide if this scheme uses the aerial servers or the basemap servers
|
58
|
+
var schemeStart = options.scheme.split('.')[0];
|
59
|
+
options.tileResolution = 256;
|
60
|
+
|
61
|
+
// {Base URL}{Path}/{resource (tile type)}/{map id}/{scheme}/{zoom}/{column}/{row}/{size}/{format}
|
62
|
+
// ?apiKey={YOUR_API_KEY}
|
63
|
+
// &{param}={value}
|
64
|
+
|
65
|
+
var params = [
|
66
|
+
'apiKey=' + encodeURIComponent(options.apiKey)
|
67
|
+
];
|
68
|
+
// Fallback to old app_id,app_code if no apiKey passed
|
69
|
+
if(!options.apiKey) {
|
70
|
+
params = [
|
71
|
+
'app_id=' + encodeURIComponent(options.appId),
|
72
|
+
'app_code=' + encodeURIComponent(options.appCode),
|
73
|
+
];
|
74
|
+
}
|
75
|
+
if(options.language) {
|
76
|
+
params.push('lg=' + encodeURIComponent(options.language));
|
77
|
+
}
|
78
|
+
if(options.language2) {
|
79
|
+
params.push('lg2=' + encodeURIComponent(options.language2));
|
80
|
+
}
|
81
|
+
var urlQuery = '?' + params.join('&');
|
82
|
+
|
83
|
+
var path = '/maptile/2.1/{resource}/{mapId}/{scheme}/{z}/{x}/{y}/{tileResolution}/{format}' + urlQuery;
|
84
|
+
var attributionPath = '/maptile/2.1/copyright/{mapId}?apiKey={apiKey}';
|
85
|
+
|
86
|
+
var baseUrl = 'maps.ls.hereapi.com';
|
87
|
+
|
88
|
+
// Old style with apiId/apiCode for compatibility
|
89
|
+
if(!options.apiKey) {
|
90
|
+
// make sure the CIT-url can be used
|
91
|
+
baseUrl = 'maps' + (options.useCIT ? '.cit' : '') + '.api.here.com';
|
92
|
+
attributionPath = '/maptile/2.1/copyright/{mapId}?app_id={appId}&app_code={appCode}';
|
93
|
+
}
|
94
|
+
|
95
|
+
var tileServer = 'base.' + baseUrl;
|
96
|
+
if (schemeStart == 'satellite' || schemeStart == 'terrain' || schemeStart == 'hybrid') {
|
97
|
+
tileServer = 'aerial.' + baseUrl;
|
98
|
+
}
|
99
|
+
if (options.scheme.indexOf('.traffic.') !== -1) {
|
100
|
+
tileServer = 'traffic' + baseUrl;
|
101
|
+
}
|
102
|
+
|
103
|
+
var protocol = 'http' + (options.useHTTPS ? 's' : '');
|
104
|
+
var tileUrl = protocol + '://{s}.' + tileServer + path;
|
105
|
+
|
106
|
+
this._attributionUrl = L.Util.template(protocol + '://1.' + tileServer + attributionPath, this.options);
|
107
|
+
|
108
|
+
L.TileLayer.prototype.initialize.call(this, tileUrl, options);
|
109
|
+
|
110
|
+
this._attributionText = '';
|
111
|
+
|
112
|
+
},
|
113
|
+
|
114
|
+
onAdd: function onAdd(map) {
|
115
|
+
L.TileLayer.prototype.onAdd.call(this, map);
|
116
|
+
|
117
|
+
if (!this._attributionBBoxes) {
|
118
|
+
this._fetchAttributionBBoxes();
|
119
|
+
}
|
120
|
+
},
|
121
|
+
|
122
|
+
onRemove: function onRemove(map) {
|
123
|
+
//
|
124
|
+
// Remove the attribution text, and clear the cached text so it will be recalculated
|
125
|
+
// if/when we are shown again.
|
126
|
+
//
|
127
|
+
this._map.attributionControl.removeAttribution(this._attributionText);
|
128
|
+
this._attributionText = '';
|
129
|
+
|
130
|
+
this._map.off('moveend zoomend resetview', this._findCopyrightBBox, this);
|
131
|
+
|
132
|
+
//
|
133
|
+
// Call the prototype last, once we have tidied up our own changes
|
134
|
+
//
|
135
|
+
L.TileLayer.prototype.onRemove.call(this, map);
|
136
|
+
},
|
137
|
+
|
138
|
+
_fetchAttributionBBoxes: function _onMapMove() {
|
139
|
+
var xmlhttp = new XMLHttpRequest();
|
140
|
+
xmlhttp.onreadystatechange = L.bind(function(){
|
141
|
+
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
|
142
|
+
this._parseAttributionBBoxes(JSON.parse(xmlhttp.responseText));
|
143
|
+
}
|
144
|
+
}, this);
|
145
|
+
xmlhttp.open("GET", this._attributionUrl, true);
|
146
|
+
xmlhttp.send();
|
147
|
+
},
|
148
|
+
|
149
|
+
_parseAttributionBBoxes: function _parseAttributionBBoxes(json) {
|
150
|
+
if (!this._map) { return; }
|
151
|
+
var providers = json[this.options.scheme.split('.')[0]] || json.normal;
|
152
|
+
for (var i=0; i<providers.length; i++) {
|
153
|
+
if (providers[i].boxes) {
|
154
|
+
for (var j=0; j<providers[i].boxes.length; j++) {
|
155
|
+
var box = providers[i].boxes[j];
|
156
|
+
providers[i].boxes[j] = L.latLngBounds( [ [box[0], box[1]], [box[2], box[3]] ]);
|
157
|
+
}
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
this._map.on('moveend zoomend resetview', this._findCopyrightBBox, this);
|
162
|
+
|
163
|
+
this._attributionProviders = providers;
|
164
|
+
|
165
|
+
this._findCopyrightBBox();
|
166
|
+
},
|
167
|
+
|
168
|
+
_findCopyrightBBox: function _findCopyrightBBox() {
|
169
|
+
if (!this._map) { return; }
|
170
|
+
var providers = this._attributionProviders;
|
171
|
+
var visibleProviders = [];
|
172
|
+
var zoom = this._map.getZoom();
|
173
|
+
var visibleBounds = this._map.getBounds();
|
174
|
+
|
175
|
+
for (var i=0; i<providers.length; i++) {
|
176
|
+
if (providers[i].minLevel <= zoom && providers[i].maxLevel >= zoom) {
|
177
|
+
|
178
|
+
if (!providers[i].boxes) {
|
179
|
+
// No boxes = attribution always visible
|
180
|
+
visibleProviders.push(providers[i]);
|
181
|
+
} else {
|
182
|
+
for (var j=0; j<providers[i].boxes.length; j++) {
|
183
|
+
var box = providers[i].boxes[j];
|
184
|
+
if (visibleBounds.intersects(box)) {
|
185
|
+
visibleProviders.push(providers[i]);
|
186
|
+
break;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
}
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
var attributions = ['<a href="https://legal.here.com/en-gb/terms" target="_blank" rel="noopener noreferrer">HERE maps</a>'];
|
194
|
+
for (var i=0; i<visibleProviders.length; i++) {
|
195
|
+
var provider = visibleProviders[i];
|
196
|
+
attributions.push('<abbr title="' + provider.alt + '">' + provider.label + '</abbr>');
|
197
|
+
}
|
198
|
+
|
199
|
+
var attributionText = '© ' + attributions.join(', ') + '. ';
|
200
|
+
|
201
|
+
if (attributionText !== this._attributionText) {
|
202
|
+
this._map.attributionControl.removeAttribution(this._attributionText);
|
203
|
+
this._map.attributionControl.addAttribution(this._attributionText = attributionText);
|
204
|
+
}
|
205
|
+
},
|
206
|
+
|
207
|
+
});
|
208
|
+
|
209
|
+
|
210
|
+
L.tileLayer.here = function(opts){
|
211
|
+
return new L.TileLayer.HERE(opts);
|
212
|
+
}
|
@@ -11,3 +11,33 @@
|
|
11
11
|
[id*="comment"][class="comment-reply"][aria-hidden="false"] {
|
12
12
|
display: block;
|
13
13
|
}
|
14
|
+
|
15
|
+
.card-accordion {
|
16
|
+
@apply border-b border-gray-3 mt-6;
|
17
|
+
|
18
|
+
&-title {
|
19
|
+
@apply text-primary font-semibold text-xl inline-block;
|
20
|
+
}
|
21
|
+
|
22
|
+
&-divider-button {
|
23
|
+
@apply flex items-center justify-between items-end w-full;
|
24
|
+
|
25
|
+
svg {
|
26
|
+
@apply inline-block w-6 h-6 fill-primary;
|
27
|
+
}
|
28
|
+
|
29
|
+
&[aria-expanded="true"] {
|
30
|
+
svg {
|
31
|
+
@apply rotate-180 transition-transform;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
&-section {
|
37
|
+
@apply pb-8;
|
38
|
+
|
39
|
+
ul {
|
40
|
+
@apply mb-0;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
@@ -98,3 +98,22 @@
|
|
98
98
|
@apply rounded-full bg-secondary text-white inline-grid place-items-center h-[18px] w-[18px] ml-2 text-xs;
|
99
99
|
}
|
100
100
|
}
|
101
|
+
|
102
|
+
.layout-main__buttons {
|
103
|
+
.button {
|
104
|
+
&__sm {
|
105
|
+
@apply text-2xl [&:not([class*="button\\_\\_text"])]:px-1.5 [&:not([class*="button\\_\\_text"])]:py-1.5 gap-1.5
|
106
|
+
lg:text-sm lg:[&:not([class*="button\\_\\_text"])]:px-4;
|
107
|
+
|
108
|
+
span {
|
109
|
+
@apply hidden lg:flex;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
&__transparent {
|
114
|
+
&-secondary {
|
115
|
+
@apply p-0 border-0 lg:border lg:border-secondary;
|
116
|
+
}
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
@@ -2,44 +2,50 @@
|
|
2
2
|
@apply space-y-3 opacity-0 -translate-y-full invisible transition-all absolute;
|
3
3
|
|
4
4
|
&__text {
|
5
|
-
@apply text-
|
5
|
+
@apply text-md text-gray-2 ml-4 leading-normal;
|
6
|
+
|
7
|
+
a {
|
8
|
+
@apply text-md;
|
9
|
+
}
|
6
10
|
}
|
7
11
|
|
8
12
|
&__grid {
|
9
13
|
@apply flex flex-wrap gap-y-3;
|
10
14
|
}
|
11
15
|
|
12
|
-
&__avatar
|
13
|
-
&__counter {
|
16
|
+
&__avatar {
|
14
17
|
@apply rounded-full overflow-hidden border border-white inline-grid w-6 h-6;
|
15
18
|
}
|
16
19
|
|
17
|
-
&__counter {
|
18
|
-
@apply bg-background place-items-center text-secondary text-xs font-semibold transition;
|
19
|
-
}
|
20
|
-
|
21
20
|
&__button {
|
22
21
|
@apply block ml-auto text-right text-xs text-secondary cursor-pointer;
|
23
22
|
}
|
24
23
|
|
25
|
-
&
|
26
|
-
@apply flex justify-start -space-x-4;
|
27
|
-
}
|
28
|
-
|
29
|
-
&__trigger:hover &__counter,
|
30
|
-
&__trigger[aria-expanded="true"] &__counter {
|
31
|
-
@apply text-white bg-secondary border-secondary;
|
32
|
-
}
|
33
|
-
|
34
|
-
&__trigger[data-target*="dropdown"] {
|
35
|
-
@apply p-0 w-auto;
|
24
|
+
&__container {
|
25
|
+
@apply w-full flex justify-start -space-x-4 p-0 gap-2;
|
36
26
|
|
37
27
|
> span {
|
38
28
|
@apply inline-grid;
|
39
29
|
}
|
40
30
|
}
|
41
31
|
|
42
|
-
&
|
43
|
-
|
32
|
+
&__modal {
|
33
|
+
.list-item__author {
|
34
|
+
@apply flex w-full justify-between;
|
35
|
+
|
36
|
+
.author__avatar-container {
|
37
|
+
@apply w-8 h-8;
|
38
|
+
}
|
39
|
+
|
40
|
+
.button {
|
41
|
+
@apply [&>svg]:hidden;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
.list-item__author + .list-item__author {
|
46
|
+
--vertical-spacing: 1rem;
|
47
|
+
|
48
|
+
@apply mt-[var(--vertical-spacing)];
|
49
|
+
}
|
44
50
|
}
|
45
51
|
}
|
@@ -79,10 +79,10 @@
|
|
79
79
|
}
|
80
80
|
|
81
81
|
.form__wrapper {
|
82
|
-
@apply flex flex-col
|
82
|
+
@apply flex flex-col pt-10 pb-4 gap-10 last:pb-0;
|
83
83
|
|
84
84
|
&-block {
|
85
|
-
@apply py-10 last:pb-0 border-
|
85
|
+
@apply py-10 last:pb-0 border-background flex flex-col gap-4 [&_p]:text-gray-2;
|
86
86
|
}
|
87
87
|
|
88
88
|
&-checkbox-label {
|
@@ -167,7 +167,7 @@ header {
|
|
167
167
|
}
|
168
168
|
|
169
169
|
&__item {
|
170
|
-
@apply
|
170
|
+
@apply relative;
|
171
171
|
}
|
172
172
|
|
173
173
|
&__search {
|
@@ -434,12 +434,8 @@ header {
|
|
434
434
|
@apply h4 md:h3;
|
435
435
|
}
|
436
436
|
|
437
|
-
nav {
|
438
|
-
@apply w-full md:w-1/4;
|
439
|
-
}
|
440
|
-
|
441
437
|
&__menu {
|
442
|
-
@apply w-full bg-primary px-4 md:px-8 pt-0 pb-3 md:py-3 divide-y divide-gray-3 text-white;
|
438
|
+
@apply w-full md:w-1/4 bg-primary px-4 md:px-8 pt-0 pb-3 md:py-3 divide-y divide-gray-3 text-white;
|
443
439
|
|
444
440
|
> * {
|
445
441
|
@apply py-3 md:py-3.5;
|