From a6674aaa3b5e52ec7cfe062105c6f8a9db926ceb Mon Sep 17 00:00:00 2001 From: Brian Canini <canini.16@osu.edu> Date: Wed, 10 Feb 2021 11:51:04 -0500 Subject: [PATCH] Updating drupal/webform (5.22.0 => 5.24.0) --- composer.json | 2 +- composer.lock | 16 +- vendor/composer/installed.json | 16 +- web/modules/webform/composer.libraries.json | 4 +- .../install/webform.webform.contact.yml | 3 +- .../schema/webform.entity.webform.schema.yml | 3 + .../schema/webform.plugin.variants.schema.yml | 2 +- .../webform/css/webform.element.flexbox.css | 20 +- web/modules/webform/css/webform.form.css | 9 + web/modules/webform/css/webform.help.css | 5 - .../webform/css/webform.theme.claro.css | 14 +- .../images/addons/drip_webform_handler.png | 132 +++++++++ web/modules/webform/images/addons/lwm.svg | 1 + .../addons/mailchimp_webform_handler.svg | 1 + .../webform/images/addons/marketo_ma.png | 29 ++ .../images/addons/sharpspring_webforms.png | 72 +++++ .../addons/vipps_recurring_payments.png | 237 +++++++++++++++ .../images/addons/webform_paragraphs.png | 32 ++ .../webform/includes/webform.install.inc | 6 +- .../includes/webform.install.requirements.inc | 10 +- .../includes/webform.install.update.inc | 6 + .../includes/webform.theme.template.inc | 38 ++- .../webform/includes/webform.translation.inc | 2 +- web/modules/webform/js/webform.admin.js | 4 +- web/modules/webform/js/webform.ajax.js | 78 +---- web/modules/webform/js/webform.behaviors.js | 41 +++ web/modules/webform/js/webform.dialog.js | 2 +- .../webform/js/webform.element.ajax.js | 2 +- .../webform/js/webform.element.checkboxes.js | 4 +- .../webform/js/webform.element.codemirror.js | 2 +- .../webform/js/webform.element.composite.js | 2 +- .../webform/js/webform.element.computed.js | 2 +- .../webform/js/webform.element.details.js | 2 +- .../js/webform.element.details.save.js | 8 +- .../js/webform.element.details.toggle.js | 8 +- .../js/webform.element.location.places.js | 2 +- .../webform/js/webform.element.multiple.js | 2 +- .../webform/js/webform.element.other.js | 4 +- .../webform/js/webform.element.signature.js | 4 +- .../webform/js/webform.element.states.js | 6 +- .../webform/js/webform.element.tableselect.js | 2 +- .../webform/js/webform.element.telephone.js | 24 +- .../js/webform.element.terms_of_service.js | 2 +- .../webform/js/webform.element.time.js | 5 + web/modules/webform/js/webform.filter.js | 4 +- .../webform/js/webform.form.auto_focus.js | 2 +- .../webform/js/webform.form.submit_back.js | 2 +- .../webform/js/webform.form.submit_once.js | 4 +- .../webform/js/webform.form.unsaved.js | 7 +- .../webform/js/webform.jquery.ui.dialog.js | 2 +- web/modules/webform/js/webform.scroll.js | 92 ++++++ web/modules/webform/js/webform.states.js | 5 +- .../webform/js/webform.wizard.pages.js | 8 +- .../webform_access/js/webform_access.admin.js | 2 +- .../Block/WebformAccessGroupEntityBlock.php | 21 +- .../webform_access/webform_access.info.yml | 6 +- .../src/Element/WebformAttachmentUrl.php | 7 +- .../WebformElement/WebformAttachmentBase.php | 3 +- ...webform.webform.test_attachment_access.yml | 1 + .../webform.webform.test_attachment_email.yml | 5 +- ...bform.webform.test_attachment_sanitize.yml | 1 + ...webform.webform.test_attachment_states.yml | 3 +- .../webform.webform.test_attachment_token.yml | 1 + .../webform.webform.test_attachment_twig.yml | 1 + .../webform.webform.test_attachment_url.yml | 1 + .../webform_attachment_test.info.yml | 6 +- .../webform_attachment.info.yml | 6 +- .../webform_bootstrap_test_module.info.yml | 6 +- .../webform_bootstrap_test_theme.info.yml | 6 +- .../webform_bootstrap.info.yml | 6 +- .../modules/webform_cards/js/webform_cards.js | 110 ++++--- .../src/Form/WebformCardsConvertForm.php | 3 +- .../webform.webform.test_cards_access.yml | 1 + .../webform.webform.test_cards_ajax.yml | 1 + ...ebform.webform.test_cards_auto_forward.yml | 1 + ...m.webform.test_cards_auto_forward_hide.yml | 1 + .../webform.webform.test_cards_draft.yml | 1 + .../webform.webform.test_cards_javascript.yml | 18 +- .../webform.webform.test_cards_long_100.yml | 1 + .../webform.webform.test_cards_progress.yml | 1 + ...orm.webform.test_cards_progress_custom.yml | 1 + ...form.webform.test_cards_progress_links.yml | 1 + .../webform.webform.test_cards_states.yml | 1 + .../webform.webform.test_cards_titles.yml | 1 + .../webform.webform.test_cards_toggle.yml | 1 + ...m.webform.test_cards_validation_errors.yml | 1 + .../webform_cards_test.info.yml | 6 +- .../webform_cards/webform_cards.info.yml | 11 +- .../webform_cards/webform_cards.libraries.yml | 1 + .../webform_cards/webform_cards.module | 52 +++- .../css/webform_clientside_validation.ife.css | 5 +- ...orm.webform.test_clientside_validation.yml | 1 + ...ebform_clientside_validation_test.info.yml | 6 +- .../webform_clientside_validation.info.yml | 6 +- .../webform.webform.demo_application.yml | 1 + ...rm.webform.demo_application_evaluation.yml | 1 + ...bform_demo_application_evaluation.info.yml | 6 +- ...ebform.webform.demo_event_registration.yml | 3 +- .../webform_demo_event_registration.info.yml | 6 +- .../webform_demo_event_registration.install | 16 + .../webform.webform.webform_group_contact.yml | 3 +- .../webform_demo_group.info.yml | 6 +- .../webform.webform.demo_region_contact.yml | 3 +- .../webform_demo_region_contact.info.yml | 6 +- .../webform_devel/webform_devel.info.yml | 6 +- .../webform_editorial.info.yml | 6 +- .../webform.webform.test_entity_print.yml | 1 + ...bform.webform.test_entity_print_custom.yml | 1 + .../webform_entity_print_test.info.yml | 6 +- .../webform_entity_print.info.yml | 6 +- .../webform_entity_print.module | 3 + ...m.webform.test_entity_print_attachment.yml | 3 +- ...form_entity_print_attachment_test.info.yml | 6 +- .../webform_entity_print_attachment.info.yml | 6 +- ...form.webform.webform_example_composite.yml | 1 + .../webform_example_composite.info.yml | 6 +- ...rm.webform.webform_example_custom_form.yml | 1 + .../webform_example_custom_form.info.yml | 6 +- ...ebform.webform.webform_example_element.yml | 1 + .../webform_example_element.info.yml | 6 +- ...ebform_example_element_properties.info.yml | 6 +- ...ebform.webform.webform_example_handler.yml | 3 +- .../webform_example_handler.info.yml | 6 +- .../webform.webform.example_remote_post.yml | 13 +- .../webform_example_remote_post.info.yml | 6 +- ...ebform.webform_example_variant_ab_test.yml | 7 +- ...bform.webform_example_variant_segments.yml | 1 + .../webform_example_variant.info.yml | 6 +- ...form.webform.example_computed_elements.yml | 1 + ...webform.example_computed_elements_ajax.yml | 7 +- ...webform.webform.example_element_states.yml | 1 + ...webform.webform.example_flexbox_layout.yml | 1 + .../webform.webform.example_input_masks.yml | 1 + .../webform.webform.example_style_guide.yml | 3 +- .../webform.webform.example_wizard.yml | 1 + .../webform.webform.example_cards.yml | 1 + .../webform_examples.info.yml | 6 +- ...webform.example_accessibility_advanced.yml | 1 + ...rm.webform.example_accessibility_basic.yml | 1 + ...bform.example_accessibility_containers.yml | 1 + ...m.webform.example_accessibility_labels.yml | 1 + ...m.webform.example_accessibility_wizard.yml | 1 + .../webform_examples_accessibility.info.yml | 6 +- ...bform.webform.test_element_group_roles.yml | 3 +- ...form.webform.test_group_element_access.yml | 3 +- .../webform_group_test.info.yml | 6 +- .../webform_group/webform_group.info.yml | 11 +- .../js/webform_icheck.element.js | 4 +- .../webform.webform.test_element_icheck.yml | 1 + ...orm.webform.test_element_icheck_styles.yml | 1 + .../webform_icheck_test.info.yml | 6 +- .../webform_icheck/webform_icheck.info.yml | 6 +- .../webform_icheck/webform_icheck.module | 2 +- .../js/webform_image_select.element.js | 6 +- .../WebformElement/WebformImageSelect.php | 18 +- ...form.webform.test_element_image_select.yml | 1 + .../webform.webform.test_element_images.yml | 3 +- ...lect.webform_image_select_images.bears.yml | 26 +- .../webform_image_select_test.info.yml | 6 +- .../WebformImageSelectElementTest.php | 9 +- .../WebformImageSelectImagesTest.php | 10 +- .../webform_image_select.info.yml | 6 +- .../webform.webform.test_element_buttons.yml | 3 +- .../webform_jqueryui_buttons_test.info.yml | 6 +- .../webform_jqueryui_buttons.info.yml | 6 +- ...m.webform.test_element_loc_geocomplete.yml | 3 +- ...webform_location_geocomplete_test.info.yml | 6 +- .../webform_location_geocomplete.info.yml | 6 +- .../webform_location_geocomplete.module | 2 +- ...m.webform.webform_node_test_multiple_a.yml | 1 + ...m.webform.webform_node_test_multiple_b.yml | 1 + .../webform_node_test_multiple.info.yml | 6 +- ....webform.webform_node_test_translation.yml | 1 + .../webform_node_test_translation.info.yml | 6 +- .../tests/src/Functional/WebformNodeTest.php | 4 +- .../webform_node/webform_node.info.yml | 6 +- ...webform.webform.example_options_custom.yml | 1 + .../js/webform_options_custom.element.js | 12 +- .../src/Element/WebformOptionsCustom.php | 8 +- ...ebform.test_element_options_custom_ent.yml | 3 +- ...ebform_options_custom_entity_test.info.yml | 6 +- ...bform.test_element_options_custom_html.yml | 3 +- ...bform.test_element_options_custom_imap.yml | 3 +- ...ebform.test_element_options_custom_svg.yml | 3 +- ...bform.test_element_options_custom_twig.yml | 3 +- .../webform_options_custom_test.info.yml | 6 +- .../webform_options_custom.info.yml | 8 +- .../OptionsLimitWebformHandler.php | 18 +- ...orm.webform.test_handler_boolean_limit.yml | 3 +- ...orm.webform.test_handler_options_limit.yml | 5 + ...webform.test_handler_options_limit_ent.yml | 3 +- ...ebform.test_handler_options_limit_user.yml | 3 +- .../webform_options_limit_test.info.yml | 6 +- .../Functional/WebformOptionsLimitTest.php | 8 + .../webform_options_limit.info.yml | 6 +- .../ScheduleEmailWebformHandler.php | 4 + .../src/WebformScheduledEmailManager.php | 2 + ...m.webform.test_handler_scheduled_email.yml | 3 +- .../webform_scheduled_email_test.info.yml | 6 +- ...bform.test_handler_scheduled_translate.yml | 3 +- ..._scheduled_email_test_translation.info.yml | 6 +- .../webform_scheduled_email.info.yml | 6 +- .../webform_share/js/webform_share.admin.js | 6 +- .../src/Controller/WebformShareController.php | 13 +- .../webform_share/webform_share.info.yml | 11 +- .../webform_shortcuts/js/webform_shortcuts.js | 14 +- .../webform_shortcuts.info.yml | 6 +- ....webform.test_submission_export_import.yml | 1 + .../webform_submission_export_import_test.js | 4 +- ...orm_submission_export_import_test.info.yml | 6 +- .../webform_submission_export_import.info.yml | 8 +- .../webform_submission_log.info.yml | 6 +- .../webform.webform.template_contact.yml | 3 +- ...m.webform.template_employee_evaluation.yml | 1 + .../webform.webform.template_feedback.yml | 3 +- .../webform.webform.template_issue.yml | 1 + ...bform.webform.template_job_application.yml | 3 +- ...rm.webform.template_job_seeker_profile.yml | 5 +- ...m.webform.template_medical_appointment.yml | 3 +- .../webform.webform.template_registration.yml | 3 +- ...rm.webform.template_session_evaluation.yml | 3 +- .../webform.webform.template_subscribe.yml | 3 +- .../webform.webform.template_user_profile.yml | 3 +- .../webform_templates.info.yml | 6 +- .../webform.webform.test_element_toggles.yml | 3 +- .../webform_toggles_test.info.yml | 6 +- .../webform_toggles/webform_toggles.info.yml | 6 +- .../modules/webform_ui/js/webform_ui.js | 8 +- .../src/WebformUiEntityElementsForm.php | 3 +- .../src/Functional/WebformUiElementTest.php | 4 +- .../modules/webform_ui/webform_ui.info.yml | 6 +- .../text/example_accessibility_advanced.txt | 12 +- .../text/example_accessibility_basic.txt | 14 +- .../text/example_accessibility_containers.txt | 14 +- .../text/example_accessibility_labels.txt | 14 +- .../text/example_accessibility_wizard.txt | 7 +- .../src/Access/WebformAccountAccess.php | 7 +- .../src/Commands/WebformCliService.php | 14 +- .../WebformSanitizeSubmissionsCommands.php | 4 +- .../WebformPluginElementController.php | 2 +- .../WebformPluginExporterController.php | 42 ++- .../WebformPluginHandlerController.php | 64 +++- .../WebformPluginVariantController.php | 57 +++- web/modules/webform/src/Element/Webform.php | 13 + .../src/Element/WebformCompositeBase.php | 5 +- .../src/Element/WebformComputedBase.php | 12 +- .../src/Element/WebformComputedTwig.php | 10 + .../src/Element/WebformElementComposite.php | 4 +- .../src/Element/WebformEntityTrait.php | 3 +- .../webform/src/Element/WebformHeight.php | 27 +- .../webform/src/Element/WebformHtmlEditor.php | 7 + .../webform/src/Element/WebformLikert.php | 18 +- .../webform/src/Element/WebformMapping.php | 11 +- .../webform/src/Element/WebformMultiple.php | 6 + .../webform/src/Element/WebformOptions.php | 4 +- .../webform/src/Element/WebformOtherBase.php | 4 +- .../src/Element/WebformTermCheckboxes.php | 6 + .../src/Element/WebformTermReferenceTrait.php | 10 + .../webform/src/Element/WebformTermSelect.php | 1 + web/modules/webform/src/Entity/Webform.php | 170 ++++++++--- .../webform/src/Entity/WebformSubmission.php | 6 + .../WebformEntitySettingsFormForm.php | 2 +- .../WebformEntitySettingsGeneralForm.php | 24 +- .../WebformEntitySettingsSubmissionsForm.php | 69 +++-- .../webform/src/Form/WebformAjaxFormTrait.php | 15 +- .../src/Form/WebformSubmissionDeleteForm.php | 16 +- .../Form/WebformSubmissionsDeleteFormBase.php | 2 +- .../webform/src/Plugin/Block/WebformBlock.php | 28 +- .../WebformSubmissionDevelGenerate.php | 2 +- .../WebformSubmissionDevelGenerateTrait.php | 22 +- .../WebformEntityReferenceFormatterBase.php | 23 +- .../WebformEntityReferenceLinkFormatter.php | 2 +- .../WebformEntityReferenceSelectWidget.php | 2 +- .../WebformEntityReferenceWidgetTrait.php | 12 +- .../src/Plugin/WebformElement/Checkboxes.php | 2 +- .../src/Plugin/WebformElement/DateBase.php | 2 +- .../src/Plugin/WebformElement/NumericBase.php | 6 + .../src/Plugin/WebformElement/OptionsBase.php | 11 +- .../src/Plugin/WebformElement/Table.php | 6 +- .../src/Plugin/WebformElement/Telephone.php | 3 + .../src/Plugin/WebformElement/TextBase.php | 8 +- .../Plugin/WebformElement/TextBaseTrait.php | 2 +- .../src/Plugin/WebformElement/TextFormat.php | 6 +- .../Plugin/WebformElement/VerticalTabs.php | 154 ++++++++++ .../src/Plugin/WebformElement/View.php | 6 +- .../WebformElement/WebformCompositeBase.php | 6 +- .../WebformElement/WebformComputedBase.php | 3 +- .../Plugin/WebformElement/WebformElement.php | 1 + .../Plugin/WebformElement/WebformLikert.php | 9 +- .../WebformElement/WebformManagedFileBase.php | 117 +++++--- .../Plugin/WebformElement/WebformMapping.php | 6 +- .../Plugin/WebformElement/WebformTableRow.php | 4 +- .../WebformElement/WebformTermCheckboxes.php | 1 + .../WebformTermReferenceTrait.php | 5 + .../WebformElement/WebformTermSelect.php | 1 + .../src/Plugin/WebformElement/WebformTime.php | 2 +- .../Plugin/WebformElement/WebformVariant.php | 2 +- .../webform/src/Plugin/WebformElementBase.php | 30 +- .../DelimitedWebformExporter.php | 11 +- .../WebformHandler/EmailWebformHandler.php | 44 ++- .../RemotePostWebformHandler.php | 25 +- .../webform/src/Plugin/WebformHandlerBase.php | 10 + .../src/Plugin/WebformHandlerInterface.php | 20 ++ .../WebformVariant/OverrideWebformVariant.php | 6 +- .../webform/src/Twig/WebformTwigExtension.php | 3 +- .../src/Utility/WebformDialogHelper.php | 2 +- .../src/Utility/WebformElementHelper.php | 40 ++- .../src/Utility/WebformOptionsHelper.php | 30 +- .../webform/src/WebformAddonsManager.php | 130 ++++++++- .../webform/src/WebformEmailProvider.php | 2 +- .../webform/src/WebformEntityAddForm.php | 71 ++++- .../src/WebformEntityConditionsManager.php | 12 +- .../src/WebformEntityReferenceManager.php | 110 ++++++- .../webform/src/WebformHelpManager.php | 2 +- .../webform/src/WebformLibrariesManager.php | 30 +- .../WebformSubmissionAccessControlHandler.php | 7 +- .../WebformSubmissionConditionsValidator.php | 15 +- .../webform/src/WebformSubmissionForm.php | 22 +- .../webform/src/WebformSubmissionGenerate.php | 4 +- .../webform/src/WebformSubmissionStorage.php | 37 ++- .../webform-submission-information.html.twig | 3 + .../install/webform.webform.test_ajax.yml | 1 + ....webform.test_ajax_confirmation_inline.yml | 1 + ...webform.test_ajax_confirmation_message.yml | 1 + ...m.webform.test_ajax_confirmation_modal.yml | 1 + ...rm.webform.test_ajax_confirmation_page.yml | 1 + ...orm.webform.test_ajax_confirmation_url.yml | 1 + ...webform.test_ajax_confirmation_url_msg.yml | 1 + .../webform.webform.test_composite.yml | 3 +- .../webform.webform.test_composite_custom.yml | 3 +- ...orm.webform.test_composite_custom_file.yml | 3 +- .../webform.webform.test_composite_format.yml | 3 +- ...webform.test_composite_format_multiple.yml | 3 +- ...bform.webform.test_confirmation_inline.yml | 1 + ...form.webform.test_confirmation_message.yml | 1 + ...ebform.webform.test_confirmation_modal.yml | 1 + ...webform.webform.test_confirmation_none.yml | 1 + ...webform.webform.test_confirmation_page.yml | 1 + ....webform.test_confirmation_page_custom.yml | 1 + .../webform.webform.test_confirmation_url.yml | 1 + ....webform.test_confirmation_url_message.yml | 1 + .../install/webform.webform.test_element.yml | 1 + .../webform.webform.test_element_access.yml | 1 + .../webform.webform.test_element_actions.yml | 1 + ...m.webform.test_element_actions_buttons.yml | 1 + .../webform.webform.test_element_address.yml | 3 +- ...form.webform.test_element_allowed_tags.yml | 1 + ...ebform.webform.test_element_attributes.yml | 5 +- ...form.webform.test_element_autocomplete.yml | 1 + .../webform.webform.test_element_captcha.yml | 3 +- .../webform.webform.test_element_checkbox.yml | 3 +- ...rm.webform.test_element_checkbox_value.yml | 3 +- ...ebform.webform.test_element_checkboxes.yml | 3 +- ...bform.test_element_checkboxes_all_none.yml | 5 +- ...ebform.webform.test_element_codemirror.yml | 7 +- ...webform.webform.test_element_composite.yml | 3 +- ...webform.test_element_composite_wrapper.yml | 3 +- ...orm.webform.test_element_computed_ajax.yml | 9 +- ...rm.webform.test_element_computed_debug.yml | 1 + ...rm.webform.test_element_computed_token.yml | 11 +- ...orm.webform.test_element_computed_twig.yml | 1 + ...webform.webform.test_element_container.yml | 1 + .../webform.webform.test_element_counter.yml | 5 +- .../webform.webform.test_element_date.yml | 3 +- .../webform.webform.test_element_datelist.yml | 3 +- .../webform.webform.test_element_datetime.yml | 5 +- ...bform.test_element_description_tooltip.yml | 21 +- .../webform.webform.test_element_details.yml | 1 + .../webform.webform.test_element_disabled.yml | 1 + ...orm.webform.test_element_email_confirm.yml | 3 +- ...rm.webform.test_element_email_multiple.yml | 3 +- ...bform.test_element_entity_autocomplete.yml | 3 +- ....webform.test_element_entity_reference.yml | 3 +- ....webform.test_element_excluded_columns.yml | 3 +- ...webform.test_element_excluded_elements.yml | 3 +- .../webform.webform.test_element_fieldset.yml | 1 + .../webform.webform.test_element_flexbox.yml | 55 ++-- ...form.webform.test_element_flexbox_flex.yml | 1 + .../webform.webform.test_element_format.yml | 55 ++-- ...orm.webform.test_element_format_custom.yml | 1 + ...m.webform.test_element_format_multiple.yml | 127 ++++---- ...form.webform.test_element_format_token.yml | 19 +- .../webform.webform.test_element_height.yml | 3 +- .../webform.webform.test_element_help.yml | 1 + ...form.webform.test_element_help_display.yml | 75 ++--- ...m.webform.test_element_horizontal_rule.yml | 3 +- ...bform.webform.test_element_html_editor.yml | 3 +- ...bform.webform.test_element_html_escape.yml | 39 +-- ...bform.webform.test_element_html_markup.yml | 39 +-- ...ebform.test_element_ignored_properties.yml | 1 + ...ebform.webform.test_element_image_file.yml | 3 +- ...webform.test_element_image_file_attach.yml | 3 +- ....webform.test_element_image_resolution.yml | 3 +- ...ebform.webform.test_element_input_mask.yml | 3 +- .../webform.webform.test_element_invalid.yml | 1 + .../webform.webform.test_element_likert.yml | 2 + ...ebform.webform.test_element_loc_places.yml | 3 +- ...form.webform.test_element_managed_file.yml | 1 + ....webform.test_element_managed_file_dis.yml | 1 + ...webform.test_element_managed_file_help.yml | 3 +- ...ebform.test_element_managed_file_limit.yml | 1 + ...webform.test_element_managed_file_name.yml | 3 +- ...webform.test_element_managed_file_prev.yml | 1 + .../webform.webform.test_element_mapping.yml | 3 +- .../webform.webform.test_element_markup.yml | 1 + ...ebform.webform.test_element_media_file.yml | 1 + .../webform.webform.test_element_message.yml | 1 + .../webform.webform.test_element_more.yml | 1 + .../webform.webform.test_element_multiple.yml | 3 +- ...orm.webform.test_element_multiple_date.yml | 3 +- ...webform.test_element_multiple_property.yml | 3 +- ...orm.webform.test_element_multiple_text.yml | 3 +- .../webform.webform.test_element_options.yml | 3 +- .../webform.webform.test_element_other.yml | 9 + ...bform.webform.test_element_prepopulate.yml | 1 + .../webform.webform.test_element_private.yml | 1 + .../webform.webform.test_element_radios.yml | 3 +- .../webform.webform.test_element_range.yml | 3 +- .../webform.webform.test_element_rating.yml | 3 +- .../webform.webform.test_element_readonly.yml | 3 +- .../webform.webform.test_element_same.yml | 3 +- .../webform.webform.test_element_scale.yml | 3 +- .../webform.webform.test_element_section.yml | 1 + .../webform.webform.test_element_select.yml | 5 +- ...webform.webform.test_element_signature.yml | 3 +- .../webform.webform.test_element_states.yml | 3 +- ....webform.test_element_submission_views.yml | 3 +- ...ebform.test_element_submission_views_r.yml | 3 +- ...m.webform.test_element_submitted_value.yml | 3 +- .../webform.webform.test_element_table.yml | 3 +- ...webform.test_element_table_select_sort.yml | 3 +- ...webform.webform.test_element_telephone.yml | 3 +- ...rm.webform.test_element_term_reference.yml | 27 +- ....webform.test_element_terms_of_service.yml | 1 + ...bform.webform.test_element_text_format.yml | 1 + .../webform.webform.test_element_time.yml | 3 +- ...orm.webform.test_element_title_display.yml | 55 ++-- ...bform.webform.test_element_users_roles.yml | 3 +- ...ebform.test_element_validate_minlength.yml | 1 + ...webform.test_element_validate_multiple.yml | 3 +- ....webform.test_element_validate_pattern.yml | 3 +- ...webform.test_element_validate_required.yml | 1 + ...m.webform.test_element_validate_unique.yml | 1 + ...orm.webform.test_element_vertical_tabs.yml | 274 ++++++++++++++++++ .../webform.webform.test_element_view.yml | 3 +- .../webform.webform.test_example_elements.yml | 39 +-- ...ebform.test_example_elements_composite.yml | 1 + ...webform.test_exporter_entity_reference.yml | 1 + .../webform.webform.test_exporter_options.yml | 1 + ...ebform.webform.test_form_access_denied.yml | 1 + .../install/webform.webform.test_form_api.yml | 1 + .../webform.webform.test_form_archived.yml | 1 + .../webform.webform.test_form_assets.yml | 1 + .../webform.webform.test_form_autofill.yml | 1 + .../webform.webform.test_form_autofocus.yml | 1 + .../webform.webform.test_form_closed.yml | 1 + ...webform.webform.test_form_confidential.yml | 1 + ...bform.webform.test_form_details_toggle.yml | 1 + ...webform.test_form_disable_autocomplete.yml | 1 + ...webform.webform.test_form_disable_back.yml | 1 + ...ebform.test_form_disable_inline_errors.yml | 1 + ...form.webform.test_form_draft_anonymous.yml | 1 + ....webform.test_form_draft_authenticated.yml | 1 + ...bform.webform.test_form_draft_multiple.yml | 1 + ...ebform.webform.test_form_inline_errors.yml | 1 + .../webform.webform.test_form_limit.yml | 1 + ...m.webform.test_form_limit_total_unique.yml | 1 + ...rm.webform.test_form_limit_user_unique.yml | 1 + .../webform.webform.test_form_limit_wait.yml | 1 + .../webform.webform.test_form_long_100.yml | 1 + .../webform.webform.test_form_long_200.yml | 1 + .../webform.webform.test_form_long_300.yml | 1 + .../webform.webform.test_form_novalidate.yml | 1 + .../webform.webform.test_form_opening.yml | 1 + .../webform.webform.test_form_prepopulate.yml | 1 + .../webform.webform.test_form_preview.yml | 1 + .../webform.webform.test_form_properties.yml | 1 + .../webform.webform.test_form_remote_addr.yml | 1 + .../webform.webform.test_form_required.yml | 1 + .../webform.webform.test_form_reset.yml | 1 + ...orm.webform.test_form_results_disabled.yml | 1 + .../webform.webform.test_form_submit_back.yml | 1 + .../webform.webform.test_form_submit_once.yml | 1 + .../webform.webform.test_form_submit_text.yml | 1 + .../webform.webform.test_form_template.yml | 1 + .../webform.webform.test_form_unsaved.yml | 1 + ...bform.webform.test_form_unsaved_wizard.yml | 1 + .../webform.webform.test_form_validate.yml | 1 + ...ebform.webform.test_form_wizard_access.yml | 1 + ...form.webform.test_form_wizard_advanced.yml | 1 + ...webform.webform.test_form_wizard_basic.yml | 1 + ...m.webform.test_form_wizard_conditional.yml | 1 + ...ebform.webform.test_form_wizard_custom.yml | 1 + ...webform.webform.test_form_wizard_links.yml | 1 + ...form.webform.test_form_wizard_long_100.yml | 1 + ...form.webform.test_form_wizard_long_200.yml | 1 + ...form.webform.test_form_wizard_long_300.yml | 1 + ...form.webform.test_form_wizard_validate.yml | 3 +- ...webform.test_form_wizard_validate_comp.yml | 3 +- .../webform.webform.test_handler_action.yml | 5 +- .../webform.webform.test_handler_email.yml | 3 +- ...rm.webform.test_handler_email_advanced.yml | 5 +- ...orm.webform.test_handler_email_mapping.yml | 3 +- ...bform.webform.test_handler_email_roles.yml | 3 +- ...form.webform.test_handler_email_states.yml | 3 +- ...ebform.webform.test_handler_email_twig.yml | 5 +- .../webform.webform.test_handler_settings.yml | 3 +- ...ebform.webform.test_libraries_optional.yml | 1 + .../webform.webform.test_rendering.yml | 3 +- ...bform.webform.test_states_autocomplete.yml | 1 + ...rm.webform.test_states_client_disabled.yml | 21 +- ...m.webform.test_states_client_invisible.yml | 21 +- ...rm.webform.test_states_client_required.yml | 3 +- ...orm.webform.test_states_client_visible.yml | 21 +- .../webform.webform.test_states_crosspage.yml | 1 + .../webform.webform.test_states_disabled.yml | 3 +- ...bform.webform.test_states_server_clear.yml | 3 +- ...ebform.webform.test_states_server_comp.yml | 1 + ....webform.test_states_server_containers.yml | 1 + ...form.webform.test_states_server_custom.yml | 1 + ...ebform.webform.test_states_server_file.yml | 209 +++++++++++++ ...form.webform.test_states_server_hidden.yml | 3 +- ...form.webform.test_states_server_likert.yml | 1 + ...rm.webform.test_states_server_multiple.yml | 1 + ...form.webform.test_states_server_nested.yml | 1 + ...orm.webform.test_states_server_preview.yml | 1 + ...rm.webform.test_states_server_required.yml | 1 + ...ebform.webform.test_states_server_save.yml | 3 +- ...form.webform.test_states_server_wizard.yml | 3 +- .../webform.webform.test_states_to_text.yml | 7 +- .../webform.webform.test_states_triggers.yml | 1 + .../webform.webform.test_submission_label.yml | 1 + .../webform.webform.test_submission_log.yml | 1 + .../webform.webform.test_submission_views.yml | 1 + .../install/webform.webform.test_token.yml | 9 +- ...webform.webform.test_token_operations.yml} | 17 +- ...rm.webform.test_token_submission_value.yml | 1 + .../install/webform.webform.test_variant.yml | 3 +- .../webform.webform.test_variant_multiple.yml | 13 +- .../webform.webform.test_variant_override.yml | 7 +- ...webform.webform.test_variant_randomize.yml | 7 +- .../webform_test/webform_test.info.yml | 6 +- .../webform_test_ajax.info.yml | 6 +- .../webform_test_alter_hooks.info.yml | 6 +- .../webform_test_block_context.info.yml | 6 +- .../webform_test_block_custom.info.yml | 6 +- ...bform_test_block_submission_limit.info.yml | 6 +- .../webform_test_config_performance.info.yml | 6 +- ....webform.test_element_comp_file_plugin.yml | 3 +- ....webform.test_element_composite_plugin.yml | 3 +- .../webform.webform.test_element_plugin.yml | 1 + .../webform_test_element.info.yml | 6 +- .../webform_test_element_input_masks.info.yml | 6 +- ....view.webform_test_entity_reference_vs.yml | 0 ...bform.test_element_entity_reference_vs.yml | 35 +-- ...bform_test_entity_reference_views.info.yml | 6 +- .../webform_test_exporter.info.yml | 6 +- ...ebform.webform.test_handler_conditions.yml | 3 +- .../webform.webform.test_handler_test.yml | 3 +- .../WebformHandler/TestPurgeHandler.php | 40 +++ .../webform_test_handler.info.yml | 6 +- .../webform_test_handler.module | 20 ++ ...webform_test_handler_invoke_alter.info.yml | 6 +- ...ebform.webform.test_handler_remote_get.yml | 21 +- ...bform.webform.test_handler_remote_post.yml | 21 +- ....webform.test_handler_remote_post_cast.yml | 7 +- ....webform.test_handler_remote_post_file.yml | 5 +- ...ebform.webform.test_handler_remote_put.yml | 21 +- .../webform_test_handler_remote_post.info.yml | 6 +- .../webform_test_markup.info.yml | 6 +- .../webform_test_message_custom.info.yml | 6 +- .../install/webform.webform.test_options.yml | 1 + .../webform_test_options.info.yml | 6 +- .../webform_test_paragraphs.info.yml | 6 +- .../webform_test_rest.info.yml | 6 +- .../webform_test_states.info.yml | 6 +- .../webform.webform.test_submissions.yml | 1 + .../webform_test_submissions.info.yml | 6 +- ...webform_test_third_party_settings.info.yml | 6 +- .../es/webform.webform.test_translation.yml | 8 +- .../webform.webform.test_translation.yml | 24 +- .../webform_test_translation.info.yml | 6 +- ...webform_test_translation_lingotek.info.yml | 6 +- .../webform_test_validate.info.yml | 6 +- .../webform_test_variant.info.yml | 6 +- .../webform_test_views.info.yml | 6 +- .../webform_test_wizard_custom.info.yml | 6 +- .../WebformCompositeCustomFileTest.php | 27 +- .../WebformElementFormatCustomTest.php | 8 +- .../Element/WebformElementFormatTest.php | 5 + .../Element/WebformElementLikertTest.php | 11 +- .../Element/WebformElementManagedFileTest.php | 8 +- .../Element/WebformElementOtherTest.php | 31 ++ .../WebformElementPluginDefinitionsTest.php | 24 +- .../WebformElementPluginPropertiesTest.php | 41 ++- .../WebformElementTermReferenceTest.php | 36 ++- .../Element/WebformElementTextFormatTest.php | 2 +- .../WebformElementVerticalTabsTest.php | 34 +++ .../Settings/WebformSettingsAutofillTest.php | 3 +- .../WebformSettingsLimitUniqueTest.php | 6 + .../States/WebformStatesManagerTest.php | 2 +- .../States/WebformStatesServerTest.php | 21 +- .../Variant/WebformVariantElementTest.php | 4 +- .../WebformEntityTranslationTest.php | 79 ++++- .../WebformSubmissionTokenOperationsTest.php | 135 +++++++++ .../WebformSubmissionTokenUpdateTest.php | 108 ------- ...WebformElementCheckboxesJavaScriptTest.php | 9 + .../WebformWizardBasicJavaScriptTest.php | 26 +- .../Kernel/WebformSubmissionPurgeApiTest.php | 75 +++++ .../Unit/Plugin/Block/WebformBlockTest.php | 7 +- .../webform_test_bartik.info.yml | 6 +- web/modules/webform/webform.api.php | 20 ++ web/modules/webform/webform.info.yml | 6 +- web/modules/webform/webform.libraries.yml | 26 +- web/modules/webform/webform.module | 54 +++- web/modules/webform/webform.services.yml | 2 +- web/modules/webform/webform.tokens.inc | 35 ++- 617 files changed, 4867 insertions(+), 1719 deletions(-) create mode 100644 web/modules/webform/images/addons/drip_webform_handler.png create mode 100644 web/modules/webform/images/addons/lwm.svg create mode 100644 web/modules/webform/images/addons/mailchimp_webform_handler.svg create mode 100644 web/modules/webform/images/addons/marketo_ma.png create mode 100644 web/modules/webform/images/addons/sharpspring_webforms.png create mode 100644 web/modules/webform/images/addons/vipps_recurring_payments.png create mode 100644 web/modules/webform/images/addons/webform_paragraphs.png create mode 100644 web/modules/webform/js/webform.behaviors.js create mode 100644 web/modules/webform/js/webform.scroll.js create mode 100644 web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php create mode 100644 web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml create mode 100644 web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml rename web/modules/webform/tests/modules/webform_test/config/install/{webform.webform.test_token_view_update.yml => webform.webform.test_token_operations.yml} (92%) rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/config/install/views.view.webform_test_entity_reference_vs.yml (100%) rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/config/install/webform.webform.test_element_entity_reference_vs.yml (97%) rename web/modules/webform/tests/modules/{webform_test_entity_reference => webform_test_entity_reference_views}/webform_test_entity_reference_views.info.yml (73%) create mode 100644 web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php create mode 100644 web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php create mode 100644 web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php delete mode 100644 web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php create mode 100644 web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php diff --git a/composer.json b/composer.json index 0810c2ba0e..2951f098cc 100644 --- a/composer.json +++ b/composer.json @@ -187,7 +187,7 @@ "drupal/views_fieldsets": "3.3", "drupal/views_infinite_scroll": "1.7", "drupal/views_slideshow": "4.4", - "drupal/webform": "5.22", + "drupal/webform": "5.24", "drupal/webform_views": "5.0-alpha2", "drush-ops/behat-drush-endpoint": "0.0.5", "drush/drush": "9.7.2", diff --git a/composer.lock b/composer.lock index 856262ef93..cbbf052e93 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "160f61336a2e30181b8e05fcfa8f2f6a", + "content-hash": "2a64549d50fa07eb94057cf9e7a56c55", "packages": [ { "name": "alchemy/zippy", @@ -8719,17 +8719,17 @@ }, { "name": "drupal/webform", - "version": "5.22.0", + "version": "5.24.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.22" + "reference": "8.x-5.24" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.22.zip", - "reference": "8.x-5.22", - "shasum": "807308bb8c57c3c66c7a839effc558ab2a76c1f5" + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", + "reference": "8.x-5.24", + "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" }, "require": { "drupal/core": "^8.8" @@ -8770,8 +8770,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-5.22", - "datestamp": "1601919522", + "version": "8.x-5.24", + "datestamp": "1612453175", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 368e9081e2..68516d3ec4 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -8992,18 +8992,18 @@ }, { "name": "drupal/webform", - "version": "5.22.0", - "version_normalized": "5.22.0.0", + "version": "5.24.0", + "version_normalized": "5.24.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/webform.git", - "reference": "8.x-5.22" + "reference": "8.x-5.24" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.22.zip", - "reference": "8.x-5.22", - "shasum": "807308bb8c57c3c66c7a839effc558ab2a76c1f5" + "url": "https://ftp.drupal.org/files/projects/webform-8.x-5.24.zip", + "reference": "8.x-5.24", + "shasum": "d7e2d856e840bf7b7ff0b06f80be1f492fe65b7b" }, "require": { "drupal/core": "^8.8" @@ -9044,8 +9044,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-5.22", - "datestamp": "1601919522", + "version": "8.x-5.24", + "datestamp": "1612453175", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" diff --git a/web/modules/webform/composer.libraries.json b/web/modules/webform/composer.libraries.json index e7fb406dc4..10c2e3c741 100644 --- a/web/modules/webform/composer.libraries.json +++ b/web/modules/webform/composer.libraries.json @@ -184,13 +184,13 @@ "type": "package", "package": { "name": "codemirror/codemirror", - "version": "5.57.0", + "version": "5.53.2", "type": "drupal-library", "extra": { "installer-name": "codemirror" }, "dist": { - "url": "https://github.com/components/codemirror/archive/5.57.0.zip", + "url": "https://github.com/components/codemirror/archive/5.53.2.zip", "type": "zip" }, "require": { diff --git a/web/modules/webform/config/install/webform.webform.contact.yml b/web/modules/webform/config/install/webform.webform.contact.yml index 7f1fb2dc20..884cdf8c79 100644 --- a/web/modules/webform/config/install/webform.webform.contact.yml +++ b/web/modules/webform/config/install/webform.webform.contact.yml @@ -40,7 +40,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/config/schema/webform.entity.webform.schema.yml b/web/modules/webform/config/schema/webform.entity.webform.schema.yml index 20d3cc2bf3..58c40309ff 100644 --- a/web/modules/webform/config/schema/webform.entity.webform.schema.yml +++ b/web/modules/webform/config/schema/webform.entity.webform.schema.yml @@ -485,6 +485,9 @@ token_update: type: boolean label: 'Allow updating a submission using token' + token_delete: + type: boolean + label: 'Allow deleting a submission using token' serial_disabled: type: boolean label: 'Next submission number disabled' diff --git a/web/modules/webform/config/schema/webform.plugin.variants.schema.yml b/web/modules/webform/config/schema/webform.plugin.variants.schema.yml index 0901e20ff0..ebfb21f088 100644 --- a/web/modules/webform/config/schema/webform.plugin.variants.schema.yml +++ b/web/modules/webform/config/schema/webform.plugin.variants.schema.yml @@ -10,4 +10,4 @@ webform.variant.override: mapping: debug: label: Debug - type: string + type: boolean diff --git a/web/modules/webform/css/webform.element.flexbox.css b/web/modules/webform/css/webform.element.flexbox.css index 74dee04dfe..aee62020ff 100644 --- a/web/modules/webform/css/webform.element.flexbox.css +++ b/web/modules/webform/css/webform.element.flexbox.css @@ -53,39 +53,41 @@ margin: 0; } - .webform-flex--container > .form-item > input, + .webform-flex--container > .form-item > input:not([type="checkbox"]), .webform-flex--container > .form-item > select { width: 100%; } - .container-inline .webform-flex--container > .form-item > input, - .container-inline .webform-flex--container > .form-item > select { + .container-inline .webform-flex--container > .form-item > input:not([type="checkbox"]), + .container-inline .webform-flex--container > .form-item > select, + .webform-flex--container > .form-item.webform-element--title-inline > input:not([type="checkbox"]), + .webform-flex--container > .form-item.webform-element--title-inline > select { width: inherit; } - .webform-flex--container > .webform-has-field-prefix > input, - .webform-flex--container > .webform-has-field-suffix > input, + .webform-flex--container > .webform-has-field-prefix > input:not([type="checkbox"]), + .webform-flex--container > .webform-has-field-suffix > input:not([type="checkbox"]), .webform-flex--container > .webform-has-field-prefix > select, .webform-flex--container > .webform-has-field-suffix > select { width: 85%; } - .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > input, + .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > input:not([type="checkbox"]), .webform-flex--container > .webform-has-field-prefix.webform-flex.webform-has-field-suffix > select { width: 70%; } - .webform-flex--container > .webform-element-help-container--element > input, + .webform-flex--container > .webform-element-help-container--element > input:not([type="checkbox"]), .webform-flex--container > .webform-element-help-container--element > select { width: 85%; } - .webform-flex--container > .webform-has-field-prefix.webform-element-help-container--element > input, + .webform-flex--container > .webform-has-field-prefix.webform-element-help-container--element > input:not([type="checkbox"]), .webform-flex--container > .webform-has-field-suffix.webform-element-help-container--element > select { width: 70%; } - .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > input, + .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > input:not([type="checkbox"]), .webform-flex--container > .webform-has-field-prefix.webform-has-field-suffix.webform-element-help-container--element > select { width: 50%; } diff --git a/web/modules/webform/css/webform.form.css b/web/modules/webform/css/webform.form.css index fe4c1621f7..6594a928f3 100644 --- a/web/modules/webform/css/webform.form.css +++ b/web/modules/webform/css/webform.form.css @@ -101,6 +101,15 @@ html.js .js-webform-visually-hidden[style*="display: none"] { display: inline; } +/** + * Clientside validation errors. + + * @see webform_clientside_validation.ife.css + */ +.webform-submission-form strong.error.form-item--error-message { + display: block; +} + /** * Readonly inputs. (@see .form-disabled) * @see https://www.wufoo.com/html5/attributes/21-readonly.html diff --git a/web/modules/webform/css/webform.help.css b/web/modules/webform/css/webform.help.css index 73cd8cd015..0fff44c2cf 100644 --- a/web/modules/webform/css/webform.help.css +++ b/web/modules/webform/css/webform.help.css @@ -16,11 +16,6 @@ /** * Help page. */ -.webform-help h4 { - text-transform: uppercase; - font-size: 1em; -} - .webform-help .button.button--primary { width: 100%; max-width: 600px; diff --git a/web/modules/webform/css/webform.theme.claro.css b/web/modules/webform/css/webform.theme.claro.css index 9605fad438..7ed39c6bcd 100644 --- a/web/modules/webform/css/webform.theme.claro.css +++ b/web/modules/webform/css/webform.theme.claro.css @@ -24,13 +24,6 @@ /* Fields */ /***************************************************************************** */ -/** - * Capitalize fieldset to match details. - */ -.fieldset__label { - text-transform: capitalize; -} - /***************************************************************************** */ /* Messages */ /***************************************************************************** */ @@ -235,6 +228,13 @@ div.webform-form-filter input.webform-form-filter-text { color: #003cc5; } +/** + * Remove right margin so three inline elements are supported. + */ +.form--inline.webform-ui-element-form-inline--input .form-item { + margin-right: 0; +} + /** * Make tooltip a little bigger. */ diff --git a/web/modules/webform/images/addons/drip_webform_handler.png b/web/modules/webform/images/addons/drip_webform_handler.png new file mode 100644 index 0000000000..c8e094db0e --- /dev/null +++ b/web/modules/webform/images/addons/drip_webform_handler.png @@ -0,0 +1,132 @@ +�PNG + +��� IHDR������������m���� pHYs�������+�� �IDATx�ܽ�eGu'�9O_�z[��Z����x���/d��/b<���� �B�L! !!�!DX� �&C��$��G2��ð�:��8��,�a^[���z��w��j����?�N�SU�u�Ds����{�ש����%��[ �K�Y�[�Yu�ɗ����W�2���z�T�iK�+�+����S��o]�n_��p��Z�ùV�\���ڥ���Z� ��j�G���B�!3���t���x�m����V~���;�祙sܯ�=��쉼g|z�spoM�U6�ᅹ<~.�9W4S��\�``�]ܹ����W����CD�Š�^ +����k�c���Sƫ��DZ~[ڮ����ۄ�8$Я������T�l1y��O�u��]�v1���X�(���nj�_�w��K�,�Lj Lbz��w�'��ݭ��O �+c� +?Jy*۬B�l깾�,/@���ݎV���>���@��Ym���\V^�ۊoM��~躵��&X?���R]��Z�驰�t�Z;��c���)2�A.$��a)94]�|G\J0�hj��]�N��uzY�W�槪��W���CL�a�+4�G������/'�7�U�6��u�d�h��[�]#-��6�uݭu�Z�����" ٺ��u�Uvnn�Q���'�{�8��{y�����z8jhQVV[-�"�yF�Ug�s��y�V�s�����tOX�1���y�b�Q(7��'�63#���3���v<�˪˫{a#yƪW�Z�?�r��X��z���{`�:�>��?`0>��h�\�����U���5��tI6��WMvi����̩�U�Z��-a�_=�um=�ȉvQ���>���d��� ��(�:�a族�������n�r2]BMh��=��y��ú/����8xm��U\-F��G +������jp$��J�@ ��ND��#��JƏl�UAx}-�=4>�ܷ��NV����r�&�������Ĕ�@�����>�*�%�(�����ʫVZ��j +�30�d�z-ܼ��Ɠ��etd�X�Z��U#@Kq���sn�r�Vu�:n���]�mY ���kL���,�9V�G�V�Xm^9�bke��<�^2j֨��1?3C:j�k3�!����Ӓ�&�B����eJ|� +�Zp-=7����\����G�C�R�" ˹e> +���js�Т���\�m�[i���ȈP^��b4�(B���W2 +,Y�$�K [J�F�D[��\4~���n� pdbJG�|� "�� Ik�<���X/]3c��Җ&t��/Ҫ�� +����k˲�t�r<=��Bѩ/B���/-xjRVo!xr����rW���4��%o�ݒ�l��W��ř����:@�qTna�b�H +�*bz�(3Z�ў�.s(�k9Of��o�6JsXz�T�GC&Z�Y�����}�������~�y�~aC !3�PQW2��|� X��A�P�J�E���/��YƋ���¬y`5&/ ��y���:�e�b�pA_�@4���y8z5Aoч� s���7/]�km�U9{�@�sK]Y�~�_2��H�(\ǰ2!���C�����sk�Fȷ����h�ӳU@-��\+��.�U��ֽ~���_,ۯz�p�O���=#�h�H�0�����4���W�nK��D-��y��Њ�*c�/�Z�����f��6kx�X��I���l�w3(���4i�ij�HQ1�hMߗ��E�Yt���L�8{�-����{U13�:�p�@ɼH�!#>2���W�q�����g�ͥ����FO�͡�(�%h5jm�uu�-��=Ӗ�� ,M�][�d�~�?p����`9�p��|��3_ᴯH+,Ϻ.�,�5�K��y +�6��ثK����l�z�Z�i�:O;MF2�Hg��/7��-�Skv�8Z�Iک͑�U͏:�UF�۳�5��[��b����L�iL�s2_Lq㏔z���t�d��G����������O��[�,|���p�ڨ�A�8���i��0�Ҳ�����y�k Y;���r}C��^�0Q|<�|;�wD���js��S��J�.�$�t=f-��g�7l���gY��"�,'+���Z�kiPux��{�oV��� ;�t�B���؆�ݾ��{�O:ݢ;o.�q�����_��<:�iV�^^�l"� t>�\L���!��pX3 i��&>��7�LӔ���7 �Ӭo�����p��Q��&[q��z�&=|�%�)����+ �3�0���~)����G���xR���.C8IlDCӟ���R�ϒp��zR�{4����+/�y`�=��[�^>+�_�/1P�[3 4��{�laK��nn�*L�&gJ�b�9}������W��^�7OIY�,k�4s�����0yg1 �QN̛��o�oF�s�l�͒�%<j�|gK�-��p��--��Y��V��}�ݬ6���Y0.�V� �� &��o�aJb�����W�%�����\w���39.5��#�gDh�))�����z<����gPy�V�Z~���� P���Ē��l�7z +2�{���0ʕ��bX�JP� }_2�[p��z"n2H�0b� +-��<5OTp,�Ʊen-~r�R*_J/���-��� ]�zV�5������\ae54��\�W����3��3�P�<�VZ�Q؈� �b>��W0��6�MXH��_ȚeaYG�wV�u�5,h�6�vu�+�ջk!^���h�Gݏ���Z�~I8�'!��5�,��[�Y[����E�X�<�&˷*q�s�Y�[��߁�:�1�u�X~X���y�<Xy��h)SjW:-�T�W�:o%�ZpѴ�J+^�fy�Ӱ,3�#��lQ(g��ج6�1�6_��e'�A�٭X@��$ )�F����6��y���j)��%��������]��Z�5~%��ĻS�z=��KP�m�KRZ@rJI���L�Vx9<���P���ǃs��$j�5X +Л���(����&��(�\��r|] <3�������К7-�G��p�3o����;��[d���E�Y��*Y��G�ٶPN�/�l�U�����x�!=�d���4.�xt������株����y�",,��T�o>d:��V��;�ؼ���%�߂WK�-�^����30Ϣ�̐�� �6�qT�KO���Ay�`�Ci�o�yɫ�Gm�!���v���k��k _���)�c�Ʌ��-j㧥�PVף�j��!5@�y��h�S|V����^��&�,�ԫgۯ��|�nc!7�XG�H�N +y<O����%'�I����֯������ �5�"$�X����.�f�o�G{�_-��N�K�1s�(( Z+o&H��w����ϤgҼX�خ�]S&�^�U֣���g ݺ�2�;���ki�����,㙈�����ص(�s���ZƵf�X��گR;���gV=��]2ޓv�Nzޜ��4]��<��~�k��7�7����|�(�}�pb=H_�.Dx���X����n_/�xZ-N=n��_�#�Yǭ��*/����q�1.��%�nY��7[�-�%�*�+D�$=yJm4~T�Rxp1,�zz.%�H�f���7MK�1�=k���[K�~=\���zy/�L�)��:���i�(G�����6K���@N�-u�*�ژ�{��Z=�ֶ�u�6��Ւn��j�DPs�����f� `�@�AI��\ǘ<����!@(3��m*������7� `���xy����)+O!��T�e�XxxTk���� �Y�1`�i��?���d�P���x�p����\yeju���K�����J�<A����>��_�� '��3N����I���5��< ψ�pn�+ ����2%~����ڶU��ܗ�rK]�ү ���m)4����F�@����3�`�� ��&C��NI��E +��֦�SBcY *��L� ]a�[#�"���ڰ���o�=ג���<�T������z^�BkV������u�OBa��i��:�����[�����Ro�"Z�2&J��4�[w��v0~���F��Z����>?����_��kyݢ�Z�������g�jX���ҟ��iY�ڽ�P���V5��)�γv5�? r����!���?K�$vF��k�n���������5&ԔL��Sl5E�|�]cF�s�u���v$��WW����yj�����w�ߐa�����'k�u����xn����ђG��r��|�p��j����tw���?�- �Ɠ:ED�@8�g��~ 3?s�^�%���c-i-O���[�cm0�Q����g�J<�y�-��H#{��V-�bEd��U�O����Jim~���~�H��~�#�X�|����LV���%���~տ�[w��U@���(�D�*Y��:u>/t���%ͻ�h�=x孶���e�����y��2� C_�n�[�ke����=��E{ޓ�R�Ն3Mk�qd��%=��9.����[w������W�>j�<�\//�����·f<Z�iI��h��ֵe�x��4ݾ� K>z�^��Mz�b92ЙTC:��� ������o��d7Ӹ�+�;����Y> ��Ǘ�����݉~��*�e�a-\�3���1��Z���o^�<�<��`AI�1j1<���Qb�Z��1xK�a�B'��=������F0�j2ґ��[L�Pj��f�� h�ע��Z���{���V?Z��dI�m���u��G������L��VS +V���`�CMYY�[x��[�Y��4���$T��C���"Z9����q�⯀��L�x�����t-�@[��f�N~���&�����66$���~Y},5��"��ƿ.�]��������y���|�ҫ1���YZ�%�aovF�E��P���y�]�kk��x�ӭzJ�%��Fs�~�v=!����|n �|5>�)d�tk�j�x�XJM���{��_��VO�d�{`�+O-]�&�2��`��/ +8f~>��`O�"Z��J�F��������۶[wg��.1})��%����7lp������np�F�7�lI�qk�P�_�z��6o5�xX���9�O��p��a`�{� �IH[�U��o�&�p�+9K�������+�/��C�:_�P,��w�=�Z�Vz Z����%9)�K�x�P�7�W�xzuh�uY��ZyݫW�0W)�:���Dw�dU�<�~�?�@��q�:�4�t��B�荨�~��o]��Ozmv�nx��� �nI)c�2��tr�����ߺYm.S}���Hk�B>�(#Y�'�u۲LIɵz����cӈ2Ҽz����4Ѣ> @N���T��z�!P�C���)V�R+�w��^�|ɠ��/�kI/�����L�s�-�qOI���K��^��rkM��CY�eue��fs���p�\K��f$�m>ҟ���僺 �gw�[cxi�d�Í��K�Ԕ��ø�G�Uo}J�.�L��υ��̜:k�k�s� +����2\��QI� �G(k����%:,��S s ��~�-��%/C��m��Dk}�0���`�r=�ce�T%�гZ,Ki�pѻ\ L����b�0�i��܆u�����n�G|��/��ݐ�lfr�N);�fw 3�k<���b��yCy������3}����q���<:;[��k -mٸ�ݷ�4yZI\��^F�� ՈgK�ju費�� Ԣ��wM?WeJ�x};[�����e^���ɗs9/O���Izl���=K��U�`�M�^*�����<�D��d���wU42m�\/�0�=���t�W�ĥ2�[8�@�_ID����j3'\h �9�H��.�X�Jyu�%AU��JQΖQ�F1h���%��nFZKvU�o�d�g۷��]��s��ɝ�B>W��e\���ٔ?[��Qy�M<�j����������=`�H���L�8���__�T8��b�^�p3�G��p�2���_q����\9�-�_����Z���t����ʶ�ւ�L� ���˧��dd^�88 А<�Y�B���F�n���u���b�/��k�)�yE�s�.=��L���tD�oH��.��v���Э��ю�C�ޭ�u��_���m�7&���,�2�����@VK�Y��j�� k����V����ki��{ W��5(֟�,��T$�gߊ�����y���S ?����s��kP���1��d��w��a�� m��0�o�I&^��0َkU�%��%+V�e��n���B��5�����7���o� �����%*�)u��ۯ���Ķx/�ڊe{Z=,��S���l�G�)����0p���х��8���֊�� �>I�G< +�!�N8)�lQ�%��$�i�ɏ�Z4.Ö�gg!����G�_%����*ۚn���/��ZV�^+Bp6�!�����V]�̉i�o�7���p3�8]���p���^H�M��-�ǘ� "z�#�~� � ��~@?�r���P2ν�Z�[�����Y�2��31x�@_���ss=Ãq=��x��;���!T�����H���� �v�i��$��֩���o�?']�EDY��2<��~1�$���1���&�X�z�\���#�f��U�����0�v��ëu�㯦�mP�\��ܤQ4Ѝ7^�і��W}@�7�&�`�2^U�qe��5x?4N�G�>�f�96Gƌ�J�?MDO��q��O�E�B(#)�'�W��d�����F><�i��Ƴ�tM���>IS ��cL|,��1��z�_������<ڭ�SVG��Ϭ1���,/����%XkD��Ҽ6u~��kV�.W���Z~n~�9f�2�����_��X�p �� ��p1�r�5�� R�B��ӯ0�� +8�`|��_�n=*�Ncѯ���9�0~TƤ����pO�?����s�ְ���>]�Q��egc*f=I�+w&� F�,�ċ�o1�//�qd�C�n\��O�2F���O%���Ja>��� �ܭ;�x `�[��/�iw�$9�ָ�<�w��w���a|5�*�8��%"��F�_�!��_�r��|� +�10�KD���&Ѓ����X�l�o3��(u�ֳp�b�{V��V�R<�T�2ky�[�j�B�s�*�����e�Ԕ��d��n����R?�|�%a� h�I��ݬ��i� M^��4o�C�q�ӫ<���~�G �k�Z������W�=��%|��DD��T��"��OC멧�i�'!��tQ�����+#ґ�GfK� O�f��d�`��K��H�o��-*��ky9m�ږs����a�{`y�zޒ�Aq���7��$���/f�K�������}���|�)�$���xB�OL��(����g�w6�ͧ��n��}^�<}ʕ�#DYӘ���G#幢s��.�^�[��[�x�h�{��̚\��<�+��`1��^�̯p��f�����? ��;W�pNB(�[J<�p=�K�:��pW����7E����-&���]���o%Xo7V����q@:&-aI���?�?�W��O2z�2T7͵�s��e8�X���|Ze�D#d�HGqD��� �X���������W�qabp9�J^s���M6�Aѓ��b?�3L2`��� �|&���U�G����ǚ������ʼ�Z �<\벺����$~�O)Ī����FK��VO��Ii�=/v����R�~��"��*�kBI�"�>��S_g�B�R%S�(��QWv���p=��%�;�U�^�w�g��1�s�Љ��+ߑ�8�P���2%?�9��S}CQ~�5���U*�ln�P���_OH^xG:�7뤠d��L��w +��{�����у��_{nV��{u��a=1ֆ:}���ج6�����hj>?t �T���O�&$���\ch��VbX0-@x��o�W��X��N�,�=��-���[Ӥֽ$H-���Z�Km�t#>��B^B�|^�w����������-����a���������1l�1]C��Q�H�'�W�W�(��><+���k�0�a�p�I�� ��1�|�fsu��� �IDAT�h�2��M&��L�������?%*{%�e�1e�;&k��$sD��8^�B�v%Q���W�QP0��1�6��'�}����x$�E��ۚ+����`����_���Z}�@�a�H�����M�Ԋn,�e��L-G�<SX~TZ�K��t���_lV�_�W��эPm�L-��5�RoM�71~#�<�R�W�V^>+��{-F��]+��؆<E�n\c�,���'�V�"���U�%c��r���Py�w̤����(da��_����~�[�y��]g�Wf�������-�c^2#mK��Ĝ(k[*�E�mZi�M�Z��}��ʱf�٠i� +E��K sj�q��)�G�� ?�C:�%�W�!f~����"S�b^��@��4n#B�#�o��5f7�6���1��@���js�81�U�²�=���ג�J�<# Z)y�T��V%�-�B�ڋ��xϭ6t9w/���ay�թ�;96�~��W�o2��Ƌ�iO6c +�18Z}6�4���g:���ý\��U +j% t8���3��?��߄-�:�����cܼd��5��1Q���Lz���ܴeP\�/�מ�>�%���x��*>�YW&�Er�hT%�֗�ƶ�����(ɵD�$!���J���1���&��_FQ���R� �7��@���E��I|�sͳR�g��)_��P^���%�r��� �o�q�f�9������f~O�ƠK�O���5K���Z�H����RVZAXJ�j7�yh�_���_�`��p��������p A�4azaR!��j�ARghGXyI�:��S!��!Ì� ��e��\��`�Y��F)��^�AA����4ͣ�ƭ~ǰ(&�B�i��Ww�@�a����`"�E^v��ehH�����5���,�h���Z�d�y�АP���dG'��%�E��ط~�_0��W�qV�� �7ҹ����4\l�@�[I'"�Zw��s�G�{ � +�����.N[���W�y��9aKM�Vy��Pcm}J�� +V�[+E/�����8j��[�N��Y�5T+��o��?�����Wk�ݴxU��2��Ѣ7�.��ےB<�+�2����V5����<_�,���}H�7�$$%v�����Y4f"��6�ƃ�����t<eI~��1��Zk�a��7��:Ę%�1��V�4�I_�%[� ��kF�y��_Ⱦ��R�M��t#�*L<��/�����&�Y<�bLD�3��8�:�:���X�g��t/oy���� |��_�Ym�F�8.<�'�䖐��iX�RC�ͬ�ъsny��|���[�H�7\{�z,k +�Զ.S����a�� �'��o�/����9҃�L�m��4�0F�Rֿ�/�Gԗ�c��Y�1���O2�&�Y$�� iy�z�z��JBR��}�~�����5�L6V�^��B�b��_�(C�W�i�6�a����\'��y��<c�e��h���̨���ݨ�ҭ�\�i�$���'���:��Y�&}'m&�k��&�#�&K�ƑEOFY�oI�$ (�r�<�'�-�~/O���ՙ�oy�'���k�MK���%��j�f%k�<Q�E�ϵB� +����SK9�(���_�G���~��$Sʰ[e�ɝz�p�By�Şl�ɼa�갇f��!�`َ�� t3�ZPr2�C�z[�a�&ֻ-��WR�E�E���'���4��R�q����n�u�8v�n�d��E�N�F#Li�S�^���� �;II�>��ax!c���up��iQ�C�%�c�Q���o���q���E=b�Pέ� �>����C�&�H�)�_�w�J�O�p9� M�� �=ܬ6�N���"� +���x�k�\Ԗr%��o�K��tϋ��Z�N�n��Y0������p;������.�E���Z�����{^�Iꔖ�j?[ԗ�*K@�U����]�~�_��W&��8��ʭ�^���Ԍ6$V�!����{�5��v�Jf�al+QXA�y�ɺ�|����?s)��c?(U�2l�s��o�a��_zn)�<���B����6���1l&��$�� ��)3�K���P��7i�&�,���B>�I3�-n{�^K����W �y�^�q/+�ķ��\LDOg�-�l��?��'�dk�=K�$�lV���������������B��G�)��y��/b��}�f�����!�X���Pe�|K]^���f�9J��1��٩�:&��|Y6(:�� �ݱ~��Q��+ߑ��%�r �#i(������A�������2H�S}�n���E�� �\(��]a��v���;�D�Y/��yN� +�ꝯ:��6���*�Z�6�?1�;�����oI�c%7J�������:����2�P�«�ߴ�!��h+*u9Nɚ���7x�e9�<ؠ�}���M�X�M �_�oTRA/��0���_�W0��z���i����x����ݺ�g'̷��?��W��^谜,���W�G0s�i�EY���U9�73�yDt>��&;C��7������uw�f뽥̭�,������js�@g���`� ��KBA���0� ��>*�SDt4|���#�K�3xV�1�|&>�1�f�"̣_<�} +L��x7�?�c�ѿP��D�^~�����X��(R�� +1F��^�s'�g�K5%疼�~�9=�{����ZB��|�Q�%���ۓ +ܠ�9�6%��h0�+~��� �d)l� +-_e,H�=������01���x�� �����1�ƅDt ����(��@�i�~'�h/Y:�-����&Nm�7oZ_�����y�>�S����_f�; <(=�{ c�Mz�f�y���Q�<,6��E�n'�5��$� +&?�L�QݸYm^�\/O���u�l��U��̯e���K��l�1^��6���i8=^�+n �֬�V�����[��A2~$>a]%I�0��E�62������� <�÷�N��gԧR��;ɀ=b:��w \ƕ��IDW8jyPکe�1���de��MB_f�P.a,�-�y��0N"�8���<�3 <fyӖG� ~i>H���/e�Xz!M +_=f�Gi�'�<3���4F!��v'R+�P��T�%�<4��S��s&���d�����-ݍ!�t��N)YU��@�t��.�l0�1�2�����-�S�CL}��G�c��������_��6*:f�k�]C��{��z1�%!�YJ,���#����C +��~�����\�X��70���C�/o�7?�<�|�ꋺ�c���,�� ���� ���g�2��W�F�)mر�`Jco�fJ�Y^��-��JJ�h�-X +O���2�g"�{@�4�/8���x�"���q,�`��������������"�F�lY�J�95�H�aU�f�5[�k9�2nL�x�kG��~����A���� +����dkmR�k���fc�tR>ַ������ +Yұ^#"%?�!l�d��g*y˚��w�g�KӖ.�G�7o|�@�d�� ��L�ɇ��}r������=����?��/��P���We@��LN��������3w�3t�CXk�g �i�%��r*O����e�[m���0�� +�j3�[�w�gj]΅�;}:ZQ$֡bp��-�_L�/�(���DX�w��\Ɨi�(cdDVL,p��M�}��=� ��@d���j�Ѻ<@��x#���F�V���!r,���m�%�v���Ŏ}�����"��}�� %�G�{�r���x���\���O�Ky�y��<_@��0~���Ӆtq�W�Ә�p$�%�$amAoQ�I�����}�b� tB��S9o��@����%&��@J]�02�f�+?���υ����p�@�y���@X8;���:Î��2�tK�P7�:�!@���0�e�k�xը��u.}�����-Y_ +��]x#���)�_u�Rρ|^�B��U�>���5�l.��o�Ϻ���@����Dw�{K�����vd��Pt�oEf���v�^���ݗ�<�@���0���"<�44�ؗ)M�4��qP��$�M^KK����TNzA�8?����H�aU����p�[�:K�K���?�%�8 �ړ|���[�!���,���d�&B���4]�Ȁ��P.�;F����D��\/O4�]m������;,��m���w�M���[���Ei��~� �����iQ���c����BD���g��H�[B�SNޠ`�ga���{�A��IIxA-P��9�3��iX/���Ym~ �/�BAӽ L너�.�%��F��BR�4�M6�b����~0.�qr n@��!�0(��_y-��JLD��[w���ݣ�&�&�l�ɹ�m��Э���3�9�!���jRO-y�d���%[3h�ߺ7!��̉n{44���Q���%��`o�&���%�M���/�\E�xx�3��m����<�N����0g�oZ����ٖ�����e��YFq��J}�xL]K K?\���#1�#��p:����&���o�����]�n���V_��I�����h�L��c����r���b�k���\��M�(^\��/-d�KT�*4K�k ��Za���{������t�ȷ��Q���~�/v�nm����Z��`�տ�]����u�9���aN�>�����L�3���@���O�+�D���< +犇���/O�Z�\���E�j�XmnكԃJ@�bË��!`֛���\ ~��oR�?QΘ�' �N�p�^\/Kr���[��!�7O~d�x�� #^�a�.��zބ� ��*�-�x�fsY y�?���W%�$\Fi�'n��;v��c�%��`�Yc���\�~�e�76x{�R��&�ܞ�����qae�p�|OkT��B�ס��F��D�U3� ��ɢ�OZNch7�1�&��6��n�}Έ��BO%�����ZW��\��r�|��op33?:t���[����@�R�X�>I�x[��T�տl��K>Wu��7�ړk�5�ZR����/�G�&�Nϛ��Y8ԞO�1��|#ef�f�m�9��oJ:��_�����2�/���#�; �<����#�/Ow��~�@ߏ}_��g�"��d�0>GA�E�%����&F�r$A��(1�:�%��=���U�� +�c�L���c��ЮX�������a1ё�#�p�D +�N�����uM�[ގ5W�\B��)�o$Х�P�� +���N��f���q�^���q��R=fDA�9Go���Fր���`R�<\ �5��ɓ�'03\-H�B��X����ZHТ9�����O��@���x$0}�E��FP; �C�w��CR�I�K䏲KГ������z�g°Ԋ�4�[�����2���=r��qw�QOz�r�E��I�����|��k��AZ���1(F`YI���fk�,-nf�������-�����1V���Ȣɰ2����e�=b� �-�K��U ��2MGk{8�w7<�7Dt�r�|��C-Ԥ-ɚ��S� ����ݝ~)�LhR�hakE%���F"�z�| +��I5<���b+Јc\Bb)kaUZ�!h)憾jeK�ll㹢���S.�� kc�Zl�o6^<�ܛ�xuZ႒�P���(�O0�K���=j��Px#N]s�2�����0���**���T����o�C��ܯz��$"ci���f�I�1�%k_�� ���dw��4�Bm�O,ϓWf�� d���o�F��u��!��ʾ���Y�{tû[ZF�yK�/)3n�����0X��&�;2(Q���#�[�uvk�(��ԧ�Uz���z�=f~!��V��`�5�����1��B����R�D�F��'E�&"�>���(W�/�#���p�t��5�zO�'�F�l��of�8ބ��$~bdbX�3������������)��c��͚эn�=�5 |_�[�8�q�s%��2���5��)u����D�ݐ��(~a'L�3k����<�3�!4I���I�p������Um��t2�je�8L��V��� }�Bq%O� +���K���#O-�PҞ�2<�����7v�����5)��qy|y?����'Z)���̀�F����+�Y�)�c:�2��&�x�e�u�[��2�*�EО�T���)�i�=V�y�ғ�mHe�(I8fL���0�kd���FU ��:3`�r� �y����H�n�z��A~� +�[UR+�N�U_r�W�}���b�w=�A�9�*4�>Q�ó�1(�;M���,�fr-�q�,Š`Cܟ�e��R�[i�OQ.F��`L&�U�K)��p�r�|���\Cm���|�E�M���V��;�p �� ��4�����CU8D[�RcHY�%JZ�kF�Zz����^��d�N��< +@9 �[!J���Ư ��6�VoI�2�7�cE���>��Ɲ��F��e.K��:�1�ؗ�����C�KFL�l�T&I�8�ڿ��K�k�&��[�w0�p����D�J�1�w��zkO��Zi�HYx���¸ ��.��Y����BL�ז�)'��q&�c<���P�_o,�k+��|������HD��[��((����[w�Ï���l +wv�n���#�/�� +!�k5V2T �R��#ne������z�h�6��k�JyZ�h:O"H���'�<�m��t�js��~�N���G��gR�Mw�^��a��\��k�|7�}��L_�N�X;N�M͟܅*�0�_ |���+����(�3��a-�����Ֆ@��xB��ی0v�V���B �Rףp?V����!�8� n�c��Zc��3y�["z;!*�V�c����ˢ��JK�z��H��!�������~���� �,��\/Ox�s*^iP0���i�8�.�� +�վ%!f�J�T�M��,K|�L�{k�w����I�#�ak�,�K&r��<�Bï�E�ixD����M�":v��vǻ��iK���Z�X�t��m�}��N�pKp��<��v2V��&}���6���:�X���p��3�6V�#14i[��h��?�����I;��?$��D�X�ભ����(��E��~�����r�w0��SNN��`G\����ҺO5��& +�v����Fy�K�Z����Я������=�噵%��@_��S�2�5o�6���q|��������aʈ�T���>%�m���1�9�~��) �d�(&�_{��SI�˴��&��-�k +HL{bFe���0\�R���9.[�2!�F�x�9��a~?��B���X4��{F�5ֿ?�,��[w�Ĩ�����0ց߄Ǿ"�3BV����v���~��>�dr�#�Pw> ���nݝFN̺m����HD�' + 9s�������_wb���)�o"�Ѱ2bhC� �$�>��7���J��[Mh�yD��!�|f�V[��W�(����r���i7҅���Y���d�Z¸T_�Y5m��2�x�oy�<� �>�4�xZA��� =6ی�Єk�/Q©SL�!&k�[�ãOyX�b�! +GŤV�"�܂A�sM�'��9��8�zEx2���XQB� �� �)yK��G�ZA{t����_7�r����� Y�ϔ��;m�+��ś�fOwă�����������N��S��$�K|��VKx��0��m���@�p"Z@B،L~����?խ�;��k2�A���z�3�[A���tJ�� �b�0(ӷ.�Ko����,"���JD3ڳt,ދ�����@ �p��?X�[�&^ ���uZ�.���׆�9�gDt��à ���p1�K�ʈ�x��) ��L�eV\�zUA*?�G�6=��x��AKz�����u��6}�ם�i���P��o2$�E���%Ɨ�����{�8�і�G�-��<oI��5n`��`e���� �IDATD��z]2�\K�����ꠌV�6�ͷA��@�c��� ��|7���Ǘ�bknK�y�_�o�?��~�E��:����; <l(6�v��b�b�W�U'3?��� ���>>2��."�_�&���VҞ�oգq5��xr�O�02�� +�ȽwQ`�Va�+����Y�ޘh���gZPo1n�W�g�� \��&�Qn˧����g�N��g/=�f��d�S�K�-��F��������e���h͒S1O��a�����x���?~�isM�N�v�)l���`�����7�<:)�Z»f���5:�����u�{}�_pP�'9v�yS�1�b�Op���w�@D=��0�[�~���'����O0o"�:��-c�Qy}C=O�cJ����:�īd9%e|���-��l�M ްV�? �v���۶�{���;��]�s���8�+�^�j]%Y㒡Y_����W��q��(��W���ZyN{��4�$������}g��^n� +*�E���ˌ�o:4��� +=�iye���߬��d��7ޜz��ʧR^�@w�{�����<i�E��X2� ����w,�A#�5���!�u�E�ya�Z���:���"f��e9����Wj�j_3�1.� �^�p饧"��=��p��3`�u���yJu�ڕ�[+y>z���@�$[��F2���~�0��!'�����)��\���y�g�'�vF(��sȯ�ky1ǫ��j5!{�e���#� �����O�(. +hs��X/����8�t������U�7 WP����bѪ���V�eϰ�>��#H�7�~|EF��>���~���,��,�m �7x���'��Z;�W3|M�[��{��b�����]e���*��B7�8�62�G�%�S+S�o1M)����D,�L�����n`d���PoT��X��eѹE��2w�����ΕGߠ��қ�V��ݚS�w�(*�>��}6T黍z�`캴�UUr��Z���|��� |C��$�J�,�����=o'��uy=wY��<���G�:ymL�>#v�^`��<���MdU�:�U�5(�vZ�T��=�b�p�VL��#hKJ���<�W=����j�A�e����~���G��v�Y�%z��Ky���V'���@w0(z#$�%�!�x�<(�4L:5��K�y���"P2�J���+��Y`i�R+)>�m4֤���Ԋ�@x�pr�0�8�����'�u[��@��{��Ԓ�sxS���o^��~w�!����&�X�xk�{1�0�ђ��&ٺ�@+ +��-���<+A�/���[�^~�`t�OA��h�nc;Z�Wh�]��$��aޝ㝞;o�<�<��'�JLe�m���L���4�%,�4ٖzXo �4Kơ�wq���ec���K%<[��AגO�[c]�V��O7����KfH0̟8VMxZ�gc���(�[.Ef����W�Z������}��L�a������/���gd<f�����9}�����kII��5`�`yJ�b"��J�T�|�/7o�,�,|�g%bH�>��.�/+K�1��#�&x����(��RR��X�2V-���-����6���`��@賝���7�O���J�K��������\��lx>g�V�'�=���l�{|���Ç���ra]0������\dc.�M�G��(:a���G����5E���<+��C,}ˏ�_�=la���`L��sG�_Kh/ԽVz��o�o�J�ȫ_�[���Y�[ +���0�s���d&���?�m��,������<�+��U9�-�����,)3��!Ѓ��$�+�k����/��l�u���>�����%mRj�0_{U�Q�o��� +Zp�q&d��6 �1-��V> ۃ�X�uP�o���p��SL�}��ͻ��\�m�-��FK����=��U����d�[x���=/��9_2��%���5˱�O�Uí��J�YJ�U1j�\#�5�'c��"�ݢ0>�|�n�}������R^%�u���g��u�3?�7(�����L�(,v�}�v�o�1��x)8م�vZ�p=V�_O���u}%c3�3١(�$q��]��s2�����P������]�y����o��ah��K��}s���z�d@D�����HYeF%ľ������%�[�>���iA9���u�@SY��Ҷ;�Z�֔�n/������m^�m"�/�-�4Bp�g�w�3n5Z��Rۥ�^~=�M�����w�ċ�拼C�Z���W�N2 �Qm��A�����u:�]ypW�(�UK[)�OV�v��!B��P�1���.�FY��p +긪R{3���U���ڳ��|�����2k�<�Ĺ�:(�keA�W+kY�V�-�V-��<�5T�L�I��z�K���=|c]>*���Q6#Đ���|����9�s�\�5GYF`^��6�u�;���F���4��*�F��m�j�'�O8Q�����G��jP�v��VC5@�W���=��2��&|��Q�s�{2��P����X��\�ζͦv�h�Q�o��F������p��8�����Y�5��W �R�AC��0x�~ gؒ{��'J�@Gc��Y�P�h��Vy����N,����<���:���R�F+��8�KDXX�8l���2�Z�kl�@��H�N�ɣ06P�1"[��h�����r�db���9�^�8���0q��J���OD�Vڳ~��ܚ��N+_k�1>ƣ ��q��o��)�:��h�9.��|Z\�9ޣ��i<Eo����Q*/a���l7X�>,zN�-�֟��i:iJ�r*M,��$p,EV�t�'@"d �.Z�8�][�o�m��#���♗iKQxs[�"x}�ʴ�n����#�r�Ș�d�v�[�z�q�Q�o��O��?�%��p��K�["V��KZd�v�^n��r��$��^����W��5��s0��ӳ��Y)�b�G�i��2�5()K݆��#�E�����Ȓ���;c,?֭�]�C��Fr�+�q}(nK�q֤�,�3�O�ၝ�z +,%>����{���E+�'l��<�_��%kb�!����X��K �|��S��p�37g5���ן�"B�q��Rs_��������h;�d��~I7��i�h��[ �����?G���q�0ȱ����x��0>����芸EY���A`n�w�$���^[ڒؽ�o��j��Â���YHf�4�d��P�|�G���<O�#���r�F��0"~��Q���J�-�1�Ym�o��Ǜ�9a3IK�[��? ���*ԛl������z����w&�jmª��E�îP+��N-O�<S*J�H�9F>-��@_���A��YJxHѓڸ��O-O��Ν��t^k|�_�)�)�&�-^+���� e�-QR�5����I�t)����Q�ֽ�Z��S��`Uȝl�R#$��&�G8ϭ���E'�J�VA��LŠ-����wȳk��ܷx�%6yn� �{�d�CZ��1W����ޞ0�2��\��K�e ��d��|���<�G���7��1��#�bu�Y��� +^V�v,�xi�n����%����4`��d0{uyr��v$u%���T�7�9<^����}2�8�ވ�{��5����ɩյ����%/Ί1G�:�,�0�B$�B�¨{a�K|�����wn !-����: ��{��֢�,#bn�5ݚ7�o�T�I�2q�{��_�1+��jM�w�`��H����/K�cl�J��U������F���_/iЍ����x��V��9��n�+�L��{�V2JP�k���g�q��p�ƕ�&ޛ�o~�Z湃Q��.0�I�!���d���M�5op�+-�mſ,w��KQo&�x*r��22�1���hT�c{���i +���2w*��<P��lK�BzIIcƯ���f����%H�\*�nJL��|y8�����;ϋ��6 +�h�JCs�q������/��9�����^_&m��0�A��Ət�J��5��|˝|���d^�#hk��&5���Ϛ��3Z���_H�t��[�'�? ���/M +g{�QGD�b�ޕe ��fA�,�P^������|�@��c��CZpaBĶ��Ө��IZ�6����ɕn���!�K1���j)XKIy8��y-���{M��Z<H)ܓ�1�����O�$cLG.�^A�} O��}�w����B`�җ�%�s��J/�-���p���]���:�ߩ�\���P�K�66r<�-��gT�tY�����G/�9/ ��u���y +���,�-K�,��Pj�D�C<�F�<������AO)֬]�4�-���Vt���p$١��r�� ��b�'f��zBD��SJ��`R��ⷂc���s�Y�����U��|^��TF�#�\t@�48U(�I%b�3zS�<#���� /ApF��t@E}�T�7WX���@�(�����E��ן�J�O�Xm�u��-�+��`���yϋBH>�z���.��s�<�ֶe�,���7y����1/�-���^G]���=O1fu��ѩRة��ze�/ݫSN���d�@8�$p�H�F�Y��=��P�Wa�&�3dz�&ԦP�N�d&E���=j�m�z��e��)�c�s��ih��9�[��R �{%G<Ev���I��{���p��H���d���$��дW㖹��-��u�����t|�3}z�HK�q��䆒.��d!~�_�Y���XhJ|楷𫆒ܔ�Kt����������2�7�K��?�`�C:S��N~��@��;�Z+/M?kI�xy��V]/�4=A[0.��50i���19�ñX�-��qN��?4 � �8���0�p��F�VH�=�%oN���Xu���<�&���p}Q�^wb>� 2�s�V���q-�=���Y��t-��Gx��R}hțխ�LX�<�o0F}e�&kt8R���/! +�C�@�!۲��toͭ��u���[V=%z���1x�E�����i}���ǘY���Ĩ��*rqo���_�%"(�e���2%��x&��~��?)��V��Z`�IL�bia�-�w g'RB�o�P"#��n�g��߬6��0%E��{嬴з�uY�T3�2o����PP� fV9)�L�]m�,��c2%x���=!n�P��/�dx���^�e <O�ҥ=F�ڗ�QֶGw���Q�����.B<�<ޔמ�+��v=�͞��>ݾ'_��8��(_�8��{������A�s�Q�s�!�\��#�5�)�VE�ZƲ8t9K�z���p�.�a��z�j�0�����p�g��x�2�<%��@������hz�_�������L�I��[۱�Tf�����b�=S\Z��p�%�o����q�v�)O$�����Vn�^ɸ�8yy-#�ֲBU%c�zn�����q���Bx��?=z�xh��y�Z��=���Ih���y��]z���))9��2�%\��q���� {mm0t��N���E����+�x�.�Ϭ�Bi��g�� ��I��!�"0.M�d�)V�m �{��â5�,�Bg��A�K��$����;��`0�k%[b 9��y+�+Կ�cAKT�R�W��82^���f�2}q��¶`F*(���6e�{�%�qјW�{s���yٖ��z�z�������yu�Ң�ĺ����=S��ݱ���L�>'�5���zF^|ޯ���1���u�WY�1L��|`�|"|�,qib�Dc��<g���ծ-�a)��R_[PS�Czx�_��)Ğ��hyv�����z��h��o��m&~����d�\6^��%N��X��PγE�%(ͩ��J��z�}{m�/�3����G�Ϝ�غxh��azG�ƺ�Tj��o�?��7�i�w�!ʠh����kp��Y���4W���%!�g�������-_�|�����c6_N]��5�L~��m�emm�/ s�ve�2i 춛N���u�g��ȣ��k�����Ҕl ��տe�C�^��-�s�Ɉ�v��A�k\$Xx��Ǘ[��l?�������*�?�:�=9�ʱ���gV?[���E[�^z�6��h���D-b��)�b��|5f. ���K�,t��-ſ��ѼW3,-&�^1���U���Ѥ��* �d��2�E������'�a��\z��~��ݸ�L���S>��&�I�-��}͘��%Y^��Mw���c2>Oh��71�?$�#��0�#�g�C!����E�^E��Uú��g���ڦ���}ND�� +H7�,νS�6� L��!.۷�ϐ��^hK�� +B8�@L�������k�SM������7'h�ڨQ2����)�EL��ɫa��O���%n��1N�N�,�56�X�B�qԸ���n�V'��V��cH8�6�ح8� gC{I���IH~Sg�&p#������Go.-#S���Q��<Yނ�@�8h;��˩<`}u�{|z������;2�8Z*2�:H������-�:j 5ov�J�M�kY�}�E��U�� ���:�xd���(|�I[X�=I(�����p2���م���RZ��� tm���T5N�p�i��� �Xֳ��?o,-�$<�@��k:�:Y�RaJg�bI���+�~����5@������|���6<���,�`�� ����»Ԭ�,�8H��}�]��@W����U�0���g�B��'��YI�ex;��r�7�'ˡ�z���Dv�4Gٙ�J�)2�Kb:���]�����?���/6C�)�� +�G��%�k�J�'�t�W������ޤc旅����-M����n�� &�B/yD�������ƌ�1���c�t���/IV�¯45�Y��J嬼;I���0n�<tZ�i*��G�=B�Sj|�!��QR�`�@���� +��C���Y`t���ޙ>gR�� +`:](�/���-�hG֥�I`�/�M�rf��(`���]�XK�n��js3_'�I � �+��M�ݝ��n+;�M0��A�/ $L$*'�<�7�w�xB�%\� Fͽ��%�C�V�����<`d!,)wJ�|j<��F��()���N�7�% ��{S��/��>즴��B���\0�5���2����k�L�Ehl��c1�ir�`��-�W�[��T��������t/��:������ʸ7C�?"����L��0?��b^�\�\^�E!zen�t���ٔ�h��*��� ��ˆ`��p�n1yyR\�F&���yz� +A�I�(���i���R +�|k��&�-�/b�HMY�:�{�Gt��o���8�;b���m�3�2�Z_ա�����+�\WiW������B�^$���H��'�"�3Vͣ���s�ᓘ��y]^T��,��S AZ���y�Ղ_����6�?���aB��_�����G��rRԝ�ɇÚ���{��o�o�9c_*[�F����u��%�k�s34��� >�38k���xw +�OH�Ks�Y"9�mH��1H�&�je8��5�����z�4O)x�:�V(j +��R,'�Sݺ;���" ,�M�?@���$�$qV��r����7��� +o EJ���eK�u�R�r�Rf~y�$��\ʼ�<�1�a�K����%C.iC�[� +8�")�<i���x|RU��-]6�'�����������WZ��ƥ�n�oW _&�������Y���?:�%�J�W�ҼY�L�'Ы��x��܋Fq��*fc�lw|X�Z��`�u�2&��\P��?y�f�<��7�ٚGBk>]�&��d�7���z 0)!���ד��������Z��My=��E�c��<�T1���ߌ�d��5�n0�o���+s�zƀ�f�����7��`�'�6AV��OE+=�Ǭ�� -���Y{&�뎸/�,�����e���v���9���ڍ")��C���7��s�# �ŗŅ�&�M��;�p�����Y���\��ϝ��<m���@��/����է?��17 �O���$�GA�3�~ ��V|*�}�@�W��ʀ����Of�� �IDAT<!�U���b����V�ʯ�H�7��1b�({�j���X���?�|�=k�ˣ��u�;0�'��k0ʓ�p��K�sz����U����5���YkK?��A������x��`jo���x����ycV��Ԗz�'�J^[�?���K��j$Tp��)��S"��$�-(A{���'5��<X2)}����f�B�d�P,�_�}��&�KYt��=���G�7����w �$߸����������� +��K�_��[w[���E<���^1���m������z����n�U�|��o�6.�㢬 ����`�?FL�\/[�0�Z��W����&�5�\�<�o����D�2�F��L��<���1ii�3f>�VP<�`�q\J��>2H�Í<#�,)/���%K�P)\�<��1,)�R�JӅ�k�ݚ�#�eI�%��$�\z����y�dW6?���K9⒎v(fH���uz��n�Y4WSz�~�h��~��K���E�"��kP����n�E�3d ���>C�R�������K����n����]�륗�J��eml7��=~�i?�d`0�<���>2_�q�����i�������{9��̮�[�U�2������^��-巔�`�o%e�iշ��j�GD�p�V�m�{[V��Y7/���˽S2!:!�y7��B��R��E�h�E���j�%��GU +�@�@[�*h�bK)�)�q0H��dz��ɄL&��d��������q�>w�������A�7��s�^{���^���sN�ȧ��Q��LU�R4��������i)2�0s��X/_*�96�͖�q^�첤��-&���S���2kR{bwf�k��՜�{�7y�(�1�;~���)�B�}[Z��H&M@>��� ����&��=��zFp��������z�����`O�A���ǤT!2�/�-0��q�4v�5�2XvP�ȕ���H��a��0��`?�K�qy/|��5��x +����~�ӡ���{��)w��t=�g�B��Aػ0�K�~ �S{Q�(� &ë_5�OT���������R��Oˌe���z3L��?io������q�� �HS�xB�Cy�I��g�1�̫L�xL���7���j3Z+��r�L.�{U���4�(e���-ªZb�tpPuD����S��2���g�d�9I=���;���1+3ۉ_bk��:�d�ݯxO8�w�DU���C� G3�j�'�uEc��]��W|3.K��R)�F�F�̸�Ⴙ}���)R��Z�$e�'Pa�]&ZN��ʌ�k¹ޭ�1��9�p +�q�-�/���4�Ѹ� �}�������ΎPE�,*���^慊6K�����+[�r���걗{��h��/� ��Ne�T`PN ���1�S�ъܳU��e���K�4�d������͗���"��kܭ��}3�ik��m�Dg��u4�dcn���� �dz�Վ'�0D^�?�~������f����������ff�SD�|��a�[`�53{���p�^���Ct�x�<���w��2L-��9�rg�4���a���=��w'��TE����G ��0{c�S:D�2*HY88���R�5.oђ���?���c���vjK�����Qc����Rp� ~��k���E (��fD�Y�-yż�:����/J�U0��L3�����>�����LK�(��,��T?R��v��wc929U�f#YZ'�0��ַ�~Dy�H��w�;�����p�<�o�ev�7���%c� +�d�v��`0���h�:;�G�-�"��e�[_a���lv���x;����5G�1��3�S���~��t�ݟ�}�7��*V:;O����p���1��l�g���/�w�'jȮry��t����6O;��6)x�����r�ڸ����~��{���C��gQ����p�r�%����Ï�����::N)�����1?-��E�<O�(r�S���}[J�����iƛ�F�+QO�1Kbk�s�����f�Vڏ�¸Muʵ��7�|������Ck��u�7��6��p���ӣd�wP_g�6��t�� 3��"�7+�w�$ֆK��)��{���rЯ�!y=��V��V�q�w�x;k���/�Ζ��A�Z)�ಙ +P��%O�a��x]��� j)� ��N��F�}�W6��$�f�=^-�=�a�k�����2�[�3��i��z���U�lq2d�wz��.K�WbZJU3H��A�Ѫv3{�,��q����O��,�"G8����t��E�g���:��$~9{�`������'��}}�W�%Rk!�u��&� ��0�{��[�{Ռ���o����=m�����!)���U3�)��փ�����"��&�? �����W��_��t"�����qi�I +d��/"= ����^oI��Ȳ}����z�~n<$�lU�& +[1��?EIu=�3��a;��1hYaNO�I���Y?��³��s{���Ϙ��������G�7�#��fKK6� E_�kk�6s�'Gu3��Xv^4�����9��iw�%�Zv��)�m4�:?}M�!�\Ēd����\�d8���M��V4���y�2y�\�cx���n��o���0{� @�w*�ci��w��CI_VL�,�w������Jd#�1���tZ(,q9�[������� �A��;���=��������'|��_F������1���n���' +��;��[�@�0�������<-��Oɒkࢻ�+���a;�r|�����[93v�L;;��f +��o��å�v�6���6���N0��.�8�����8�0��_d@鑕, �����0���EG�͊g�{x�����)�Uz�Ue�;_���R�p�>S]m +�.��^���ÿ�å�����W������a���/����W��\�߅\g��0���9�D�*Z�W��}�� �ql�f����5:�e�>�|�<�r�rt���\������Åa;� +�?��]v���)B���(�V%������P4C��sSF?� ���|s����`��C <ˮ�y������)��������7�����SfZ[�O�o��������`o�������B��x�ME�q�(��T0��Q�i�����6�ى��&=�����|�m��y+��[ծ +lz�1��v%<�-�z��&����W�7����>�4�[B[̟9a�����o�q�����g�YS���1��q������?j����~�����,K6F��١��y��lv�k ��p�C<x��o8�o�?��w�ٽ4�45%��*�������j������ �Y8���֊�=g��O}�����[`�Y��k�U�w�-8��q9u�h?�S0�7����J�-�ʙ������q��6W��Û����mL7��Y����zB|� ����Uf�J���?���f|{K6.3Z�Z������������C0�(������~^����)�=�r}Rƥ}c9���ϢCv0&�3�yР�0�,�Wy +�#�/V�I�*��=Pތ��;sWtv��і���*��o����;���v��/��=�=~`+�2�e��~5>'{'�6���q;��*��1�1���{�`�_�֏������{3��f��2\���?2��GՌ.�ϖPƺ��}���⸄� �i�������R���v/��*�?�K�Xj�G�u�U�X���\�!s{��l���e�(u�����Fs}���/�����l����iV�T�����(����� +�{��͟�a;|�_��ӛ�͕Fߔ���nY���-0�1*��Rw�i2r�r��g�ؑ�S��6���B�rQ�;, �S�7���%_���l�sYa���lV�x���d885n��ijr��iu&�ԙǂ���&6��C��m�Gu_�8D\#9���qw�q3۹��������O;|��6�,ȩ��py����y����o��E�AxLb�X�hp���o\����5�c����ֻa;�����IT��q�e6(���|�e�����w����4سc�R�2+nq�m{���7���in3a�P�ģ�1?�G�gӾ���J�s`nh2�Y�B�J@`ef��_�3{8B��s'!������:��~����C����6ؓ�������M�P=;���q|��E����_�%0���q/bjZ2AW�`��;��Y��Dʉ�,�)���oXl�]y.���BT�f2%on�[���-Ǵ�q)�٪D+`����;��Գ�d� �gy�+��+@�Vח��N����\]�(���q�Oߦۚ���5�?jn������p�6�Sp|$�����p\2�[������]*�U��������;�~t�f����sų��r�Ka�����L�����3�ː�/1 Tt �l�q�?K�}8�G<6\v�38�bfW#C�8.=�nf���@�������T����q����ct�'��q�[A0��ZQn��@��8'���v�-����p!�o��gPy�fK�BR��.��R�o/���ß5�s��g��M����pl:kIY��a�g����ߎ�7��S�g�������jL���ڦ>�"~��1s0��s~k��UW�r{j9S���s����Z6f���r�,���3�DGT������I�U�Ɂ�������q��� �ݕ�?���at����B�������q +^�v���G��@��^3{�x$ �x���P{����>3{�D���ut"��2�)9*'h�K~�&ҋ�]q��+#=���R�jC683r��o�O�<������]ϠZ�8�,Ԫߪ�2SZ�����������O��f@���4sc��{#p_�&��s�`'#\~|%Z,Qۼ�ʆ|��G2naU�1�o�c#d�|��m�u[�����O�����qh9�o�C�ʲ�T�ڏk�2���O���e�`K*�]�lg}��;N�2y���0����3�Q +��M�8����c�`>㋫ic�~�L������a���Z7��Mu�j�~�����dz υ���fr�����V����~��Bo�A��\�i�8E'�5��.×:�4F��I� +���8������ �G�Z���)sY>,�ˌ���E�-�ӊ���9�<gno5���p=���"�H �5/ME1?Y{���-� R�R�r6w\*����cp���j��N���'���C�x�U�y��yT:��S�nqv'���Y��;o�ɟZqP�-y���*�%�� ��ŵ�g�8]W&�$��؎M�c�qv�6��v��o��>V���X�Ex�w�୴I���NxqZ٪t���Ce��~���y��~�}㫸b���jc�$�����n�����ϫ�ǎ�A� +�י�L0�3�Ku�̬�WB���#��s�,�v�?���n���C�GJq�G���`�l�r<�V��p-* ��4�r:JH��g%�'8�i��|�i��XU���=���@�f�D�TT���X��O�弎c/WI���x<�ƙe��<v!��ڔ�:Mc���{p��h�~�>%�� ����W����|�FC~����v|�^qnQ���Um1-��U�&��� з�>�q��y�mMxHv���-W��>�o�mQRk��p�4�`�[?��W����@�̏�e������8�UF���S���ŹV����OIV�͖N#����f�[����!=#�ڟ�`#�n�>N����2�I�����\x�Q��������b���j�7*�@S5vd�&����@ ��#���7g�sK����F�1��3�V�&f��Lf���a�MK>Kj-a�<�d���Zuz:��[�����{5� ����Ԋ�r��r�=WjY0�A�ƶ�7 �[��,���o�}�>5�ʡ͂�����6Rˋ�K��o4g��;�'���i�-���,��{�]�mv��Gb�b��U�z�lC��b'#,���pZ��$LYS�� ���&��B��}�~p�[?�����[`Z���R�;uc~o���n}�����*d!�WqD��p��)`�q/j��<jD��T2q�~��?����w���e��ݱo�7�Ϣԓ���z�!��:U���'���� ==��\K�?�8�-�0��k�ͨ���-��)�,IWA� +�d1�Q�ਗ�o��Zl>��\�I֭(��g�4[�|�<�IBU.t0n:gQ��gs��|l�AIK�DcY�C�W��U��n}����W�xc�^6v�?��_�O�?����M��y�����#�Z��k��UVc��0�o����K�#cZ�fpK�(U��ܜm���~��?v��RF'%��������:���('�tT�bfu��(Ҍ�Nc�v0�4�Wl�6�1c"��։�"{��� +<^:c����Nh����uB����)ޛj`YЧ��3�p���Q�7٢h�p�U��s.QN3��4[�"_9�@�z�>����M���1p�Cqq�e�������.�a}Sg%�q�J�,�T8�>=��o5ط�w�Gţ�<s��-9;�������n��n�Y7���mfWJ���#���m��ɵf��O��X��፰e������N�_��{�z�~ 0=�@)i+�P�-���"j�s���z�>. ������J<tQ~��cLcX�q�8D���w5ޔ�#�M��q/uF�x�����M�R�\��l0l��?��o��pǏu��U�T�>!E�&ᜍu�˩ׯ%�3������p�T��K��(�6�m����J7(�j#6W`L� ���n�s��a�uw���1�3�g�d9�U�+�P��uJ��F}+ub�"�Q��X�}u�]7�Ox���"��哺���3��Td�-{Uu��<k��v�w��g��eK5 �I�Dg7V��O�Q�[7�K;^',���u�����s��:���3��r@�|��Uh7;Т��n6������m���������W5f��S*�IXF3�8����|̏�� $.Ӡ�]��y��?jf�0��xw(�XE�D/�G�Lw�*?Tr ҃��p=�/�}��֖-`ܠ:��Ԙ��gu�پ@���TNNN�ݢ�0Տ3>Dh����Ȭ��ns����_,����uj׃̐��.O�|+'W�&^��8;���N��;�M�z��b�I%Jv��yEE���ѭw����~���a�bŴ�����QX��3�K9NL�RX����#�BKu���E3{���zs��l��)�Z34NK�\�o�c�ܲ������Q��w�k��$�k@`�]T�Jɢ>�zV;�?9�h �x ).��|�Wr�G{����k��t���*��,?���GD�к��*F���U\�b�ħr]�C���C01_�G����6p{j6�Ѭ�b����|Z��t���m�3H���D;͞*_Q9W�?]�wkl�6��� +O@ej+�c�[Է�Npb�'�|0�Q)}����T:?��#8�Q�[7���lv��� +r�l*����(�Qf/ٛ� Q���/�?������ ��e@��/)F�QH��nY +G�����V����>�LJ�� ?�5�=sJ�e�b>�丹�Vʌ�����#����/�����훋c����I����������3.���/9��hl�Q�(�ۛ�͓�ϒoj��������(�d���XQ�gε��W�)'�Y]�13**�e)�f��ux|�.T��4 ���N�!V���ƬN��� �rq�㕧�۲)S�z�~v���2�Q'_��q�;���QV���JY��6�ۣ���z���|�`2n�����<!ɟ��Wu��s�n99��6g����{���p��̾8��d�� ^�A0�$,G��y-�E��W�|G#��q)R���`� ��J6�R����+��EC����ʟ����`���;A��c��IDAT`��:hyl�R10[���r���'�P���Nm?��������+ħ�� +��T��ɹ�rn٬{��M�ቺRls����V}W���,�l�nj�������i�����e�+��et��j|8 ���tؓ�B[ >��}p���_g�0���f�A�b`?�[�vݑo��>O�z�Rgrp>ǧ��Cp<�>[L�Y�@�)٨����� `k���Y��F��a;|��������b�HO�R�T����0e��������/�#�����g-Z���9�[�\h�e������2é�H�A�������n7ث�=f�2��9��E������7�e���KB��!�߿�m�a�E������xǗ=�f�4�;�X�)�=���q��G�x�C�W!O�@�w�O1 :�����(8nO����"l̟�����@Xҍ�f��넕pZF>6Q`ٌqz�w��6cgi�By�/�/��kf���A������ +�8���O(;ur�GJ��A����0��Б�طr�,.S2��5�@�1��7�V�v��/�N����������=e�M/�������嚧������O9�Q�W6�M��ygU�S�f�ā�`�j�q�ԋ���v���{��{`�s���c� O�1@���fE1= ������)3�-:�s�79�b<S�U���@$� ��kao�'[)����"�(9,����4шi6yX����1�Õ�V_z���]����u/�=Ѳ|�������ٴ7����a�<� �/`�/PLm�m�d�g��wnv���>���T>k�<s{1��_ +Ëvk�f�B�K�`_���3{�3t���kiZlqWZ�.�g���8f����v���6����;���B��n��b�1M�O��_��q�P�W8>?�υ��3G�EqKgh�U��E�_nK�3 =�?ñ��W������f�w�8����������%�S���l�K����?kf_�x6��s�i ��[�s&=��* =-��@F;��Hی��#W���w���_��ef���z�j�qr��l�;�gkvp�~Eg,���C�7�q3w�z�_��/��GRos���|�z��u��`O�����9s�� ��g�\ �e��%���3\U�� +K���a��1e��El�;����o�^X��������ѱ=���g�l����a�b;*o�c�9����ߣ��ث<Y���`e�����Q��o���8~���f�����O���=��ǥ���(���:�k+��C����~Ǽ,Xj��g���4�1���R�{8Z��9��>�d2<n�~+�Tu9��q��T�3"�����n�s���4+�3�3|��cy�jA�z������l�Ѷ�G_�l6�V�ݔ��@15��{�9M@;����k�J���EX���J�� +܊�=��3z[2���f�Ë������g�s%���2åx�x�2 �2-MLW�%�[ƫ�3Q�����Ѫۓ7��7晑Wv+�/N-1� +�7;�%�\�w5_���yl�a2]��m����lo��ߖe��'�1ev�������>`�&(�ebV��V���ב�!nS��m�>*�E��@� �� �2jl�o�K���c��,��1`:��6c�d4+e���SL���ax̸N�1)���Y��\���������T�f}�)�E� +&�cg�r +�~c�WM�%�ٳ��iߍ�\�#�2��x+���Ķ=���UY����g��Dnz�wV���,e�D�XG -P�-EcO!��B��Z4�`2GV�3�AW�C�X��q֮�� -U���T|��S~3�b���>��S���2���_O�{��,��z�k=��pl̸ U� +���N1_O>2�c�)�����k������1�%�֒햾e���.�ƭe#��Oۓg�c�� (�Q��:��V���S׀fR�@p>�%cX�_�%��iiE*J�TRJ�9ܖ���o2�V��8�P}�c��e��䞯[r�Zc�Y�-kS�J-��er�$�h� ����c�h�(:2�te��L#vf��IH>�Z�\"���=ղ]JW��~���Vp�����.�Y� ��vʐ�D������@��#�+e�~�B�����Hg�(q�2�٢���d��e���d�dc�œ�~Nl8��0+k)[ϰ2-\�e�K��-Y��Z2�u!`ZJ�V�����t�U����#oZc2]�ǙxN��|�j���Ǟ���ҡ��G�,/s6X��tl2ߐ�Μ�AU� �*&)����g8{)S�J ^�أY�ۢ��?���^��(�Y���?��u�˂ nT����WNv�9\�dz?�瀕��~��9����l�z�{��h<O�P�S���(�qex9)Y��>=>yz�pz����Pԏ;��e&[�V(�g3-}Q���lW66�v�G֞«�T�Uu����0����(0�lp2�pd�˄!s�=�E|]��3fYj :�Ҷyܳrn#���F�ȷ�H(�`�l���l��d5��x��nկF���$���d�gu�'LCG�|�u�d���&E/��C��u��8C� �ޤ���j��ܶ��V`���u#�A�z��,O,���˖U4���8^g��1P9��U'�f:�V�-y�����A�6��K�W��[b({νU'S�Ż��τ��T�Jf�[p-ܾ���zre�a�}������4�~Dz9�x��3�%N�S��]Y~�@2\��& ������D����������9&�撀`��)<=}T�=(/[ΌK������z|�2��Ŭ�����Rc<m�x@��?ӽ�����B��K8���2ER�����^K���WxZ�A�i)��h�߷�rV-9���\{�E9YEW�W�Y_����kOѽ�'�3�]���/Q��ݦe��х�Ƕ�X�l��_GXn���8)�X�O�ɬ�[��-U� #k9��@���T�, �7�����%EKfX��VxZ<]��Y�nL�QV����:s��=�ׂil�V� �j��(.���)�aħp����\�*\�H��e}��e8�of�^㛶���s�J"Lxi����J�[�Q��>�Sm��,�_e�ؠ,5��e%(��y���[�O�3Z[�*�e�K�HO��C+��^���]��`2�~�N\�li}�g)/T}�^%0V�d�]��'_��V���P)��9����Q3<Y� +o&�/&+˜t����HI�9�i/.8���]v�O^&KKmV��Y[ +^���+ڗ��ò�O��±�c2C��*JU��R�L��clZ� �2?Zȍ��!ɜ��(�go��h�*Y�����x��*e]b�6��^t˴)��n������,k#��L�[����t����X�۩%���e��O:�I⬌?7ó=�����*YS2ݒ�lrӓCUg�cZ:.Lc������[B���(ؔ��B�r���%ƞ����IF�%Ϊ7�\�y� ���j+3Ȋ�H/+���~vª��Mn�am�v�Y�?�V�o���e�*��p4f�ϭ���\�/��E{66L�^p�ў9��L���2S��o�=9�����w��r�Km�%�-[�tܔ����ff|�ls�Ƭ�(�̡�|��1�~���1;��k�C��������<�PR��%�m):#�-'�9V�Z +�WT�Khl�)�˿,�7��)Uk\�'�����g���@�`V_9����}St��+~��,����}������4�//E4K3̖-����vZ2ߺ��-�o��S�O��^e:��UK"���$� +�2�L7������&Ӗ)E�<�q�2G�)Q���*�et�vf�Tݥm0O2�i9�^�ӒAƗ�6��j��y��<}c�����͒�Y�#3v���䲥[�s��.�*o�Ǵ*� +G+P��;~&':��,\�2��������+�����*��D�U^��I���q���Qigp�B恕!S���,{c�L��"|Vq��g�zFS <��d���S���L)�R����j?�3��)�{����QA����u6SD%���mK[}�9 5J�f�fγu�����<՞��%-yUz��*V}k���LI|"g��U���(�o��zvU�m�L%���S�hSe�s�Wٚ�͜��1%D��8�%u3|lϹ.�F�4��M�����v�g�֖���i���1gCޓ���3C�m��eα���[��[�L�J�+����Z4d�G����ׇX�ig�{��tdF7�{���̰-���j?�ߩ^|�2��5\@�Yfm%�� ��~��0'%s��d|zAK־¹Dߔ.g0����w��-I�`0�LX���.QP%�\�� +�hT���d���!�K��%N�����G�����)LV?�[8[N#�5µ����p3lo�2��L�[}h�o�`.5ll+Z�s�WC���%��L�]��E˓33��T{�Z�ѻ�;ԃS>���4�hٜ�1_�BF���!�"��#�|�R�*ESl����\9�V���oUR�eaPmd0��-c�`��w���g7�e��Wm����W��+�z�V�S:��ݘZ2��frͰ�-Pmf圷$�����p�����J�@��'��O���k�Kї��%6Kѧ�i�dև���� Fd*��� +�R#�gV���ן_f�� em�א+C�Ѥ`��^ttx��3�L�jK�TtEg�c��c9���u�2��V�]���B��2�z�!뷢qI� +&��%F�n����%��j��<N�gp�{)��R/����R���#�OO29f�~��S8Zz��o����L(�x�<k�C��/pq�>�Lu��˜�j�Sft���V����c�sH�0Ζ���gZ�]N� +v�\w�����~��+^+�8X���t"����2n�q�>�62����V�V�|���g;�������ε����e:A�a�6�GƏ�ߓ�S��s<�^��A*^0���0\,�� +c|j�OmSf\�u���Ck z���g�@u��kE \�1Q���=%T�-��I��|R�*<�\)�RG�����\�0*���r�M)A�j� "Ӛ9G�� +�ء2M�PN6v摢G�T����\�[%01�>G� +���L�[J�0e�m����c�@x|�by2$���P�����c8�����x3���.U�D��\)?2#���2���?cL�s�����v�1���Vģx�$r*y-� 6+�yh�-ñ�d�Nv�J� �#�V��9�x�F�a2^��Ėndx���6Z�F�ٶ��42<j�[�H�/��,ѿ���&�X�^ye���+���H�-G�`�1�~E'*�/��`,<V^Ѯh���� (�֊�8�M g�q[*_E(Y��s-g㩄%��7�\� g<Q�r��2�\�.��iVu��<.��*���'W=YUc�k�3��yYy��q��^��_��l�QR�)�d�T��풯d?�MշVp��W��<8�+>��\�I{s��(��o��<�J�2�����������OKT����`������+s��L�Z�ӭ�=��^��R����._g��y����y-����_�3%T���]�2�����n7�m9�^�2�+���eFf���9n��S���pR��ў�Yڞ�̀�lC�����7_�,�����fm>{�r6^�id:��y��Kl��IJN#~%C�<v��1U��IY�3��[e�AP�T��N����:��n�V��y���1n7�X�u�(B�DXv��k��Qj�A爏 x���p;}����������Ur��-c� +d2}�ZEK�C���ϰ�1䥽l�*�Nϲ��$��p�������ϔ�E�,PV�JY�<�k5�K� +U�3��$���e )o {�<Y�VlF[+ja��Wδ�dJ�9�p?2#�hc�-`=C�pY��F�d�f4�d0�E|�Y_[��2�=pg����_5�硧'��W�l�ߙ}��#õ$((y��m��r�=8��L8�7����7���a�؞�kKl��W��� �˔��=�.���s{-�t�7+�V�%<1e����L�ڔ�p�U}f\�2�jK��rfT=(X�[�� �U��1©�����F��7P����{&_-����%����R2�ɧ +, �9O�O�i��l|Z�P�m�x��L�~��d�5n���O�8N3-�����������`S��������&�b���,e:�ps�t_:�I%E��,/���2��z)m�W�-F�~������j��ޘ���ź-������=�-����#_���.��e��1VF�EK�et�ҽ�u9O䞁=o�Z�rY�S����<�L�A�ٗ�ǃ)<�Í��E� ���j�V�.�%�o��:���c���x�_����IEND�B`� \ No newline at end of file diff --git a/web/modules/webform/images/addons/lwm.svg b/web/modules/webform/images/addons/lwm.svg new file mode 100644 index 0000000000..ef3f80d277 --- /dev/null +++ b/web/modules/webform/images/addons/lwm.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M60.432 46.635c0-.102-.025-.203-.025-.305 0-.076-.025-.127-.025-.178a2.61 2.61 0 0 0-.102-.432 2.45 2.45 0 0 0-.457-.787c-.203-.228-.432-.406-.66-.532-.254-.128-.508-.203-.71-.254-.076 0-.127-.025-.178-.025.28-1.218-.076-2.156-.305-2.587l.05-.05.786-.863.05-.05c.178-.254.28-.508.355-.736.05-.203.102-.38.102-.558v-.483c-.025-.38-.076-.862-.33-1.395-.127-.254-.304-.533-.532-.787a3.13 3.13 0 0 0-.837-.66c-.025-.025-.05-.025-.076-.05a12.36 12.36 0 0 0-2.132-2.359l-.965-.76-.634-.457c-.305-.228-.532-.356-.634-.406l-.533-.355c-.076-.076-.127-.102-.153-.127 0 0 0-.025-.025-.076-.025-.076-.025-.178-.025-.355l.025-1.142.228-3.4.025-1.345c-.025-.685-.127-1.294-.254-1.852-.025-.127-.076-.254-.102-.38-.025-.102-.05-.153-.076-.203a1.8 1.8 0 0 0-.102-.254c-.025-.05-.025-.102-.076-.153-.05-.127-.102-.254-.178-.38l-.025-.025-.026-.076-.025-.05c-.127-.228-.28-.432-.432-.61-.076-.355-.203-.862-.43-1.446-.203-.508-.457-1.065-.837-1.624-.127-.203-.28-.38-.432-.558l.05-.05c.076-.076 1.852-1.953 3.272-4.388 2.613-4.54 1.75-7.306.558-8.828l-.025-.05-.026-.05c-1.14-1.27-2.714-2.03-4.617-2.283-3.984-.508-8.5 1.472-9.69 2.03l-2.182-2.385c-.203-.203-.406-.406-.634-.558l-.734-.425C35.2.287 34.632.135 34.023.058 32.83-.094 31.46.058 30 .44c-2.207.558-4.668 1.675-7.256 3.22s-5.276 3.552-7.89 5.936C11.65 12.488 9 15.558 7.083 18.5c-.965 1.446-1.75 2.866-2.334 4.236-.583 1.345-.965 2.64-1.117 3.806-.102.863-.102 1.675.076 2.4.076.33.178.635.33.94.178.38.406.735.685 1.04l2.258 2.36.254.254-.025.025-.076.152c-.05.076-.076.153-.127.203l-.076.153c-.025.076-.076.152-.102.228l-.076.153c-.025.076-.076.153-.102.228-.025.05-.05.102-.05.153l-.076.228c-.026.05-.026.102-.05.153-.025.076-.05.152-.076.254 0 .025-.025.05-.025.076s-.025.05-.025.076c-.026.076-.05.177-.076.254 0 .05-.025.102-.025.152 0 .025-.025.076-.025.102 0 .05-.025.102-.025.152s-.025.102-.025.153c-.026.102-.026.203-.05.33 0 .025 0 .05-.025.102v.026c0 .076-.025.152-.025.203 0 .102-.025.228-.025.33v1.27c0 .05 0 .102.025.153 0 .05 0 .127.025.203v.076c0 .05.025.127.025.178s.025.102.025.177c0 .025 0 .05.026.076 0 .025.025.076.025.102v.05c0 .05.025.102.05.203 0 .025 0 .025.025.05.025.05.025.102.025.127l.025.05c0 .025 0 .025.026.05l.025.05v.076c0 .025 0 .025.025.05l.025.05c0 .05.025.076.025.127.025.05.025.102.05.203v-.025.025c0 .025 0 .025.026.05.025.076.05.127.05.152.025.05.05.102.076.203l.025.025c.025.05.025.102.05.127l.025.05c0 .025.025.05.025.076s.025.076.05.102l.025.05c.025.025.025.076.05.102s.025.05.025.076c.025.05.05.102.076.178l.025.025c.025.025.025.05.05.076s.025.076.05.102a.42.42 0 0 1 .076.153l.025.025c.025.026.025.05.05.076.025.05.05.076.05.102.025.026.05.076.076.127v.025c.025.026.025.05.05.076a.37.37 0 0 0 .076.102c.025.025.05.076.102.153.025.025.05.05.05.076.025.05.05.076.076.1s.05.076.076.127c.025.025.05.076.076.102.025.05.05.076.102.102l.102.102c.05.05.076.102.127.152l.05.05.076.076.204.203.076.076.025.026c.05.05.127.1.177.177l.025.025c.025.025.05.025.076.076.076.076.152.127.228.203l.05.025.025.025.05.025c.076.05.127.102.203.153l.025.025c.025.025.05.025.05.025l.05.05c.05.05.102.076.153.127l.05.026.076.076c.05.025.127.076.177.102.026.025.05.05.102.05l.05.025.025.025h.025c.102.05.178.102.254.152l.05.025.304.153h.025l.046.014.152.076c.025 0 .05.025.076.025.026.025.05.025.102.05h.025c.05.025.102.05.153.05h.025c.05.025.102.05.178.076h.025l.05.025c.025 0 .05.025.076.025h.025a2.98 2.98 0 0 0 .254.076h.026c.127.05.254.076.38.102h.025c.102.026.228.05.33.076h.102c.102.026.203.05.305.05h.102c.076 0 .127.025.203.025 0 .026.025.05.025.076.177.482.355.965.558 1.42 2.994 8.295 11.29 14.74 20.75 15.93 9.463 1.167 19.584-5.124 23.694-13.623.177-.33.33-.634.482-.964.406-.432.735-.863.94-1.32.33-.28.406-.838.38-1.32M7.894 43.337" fill="#664f44"/><path d="M52.34 5.132a5 5 0 0 0-1.573-1.167c-.102-.05-.203-.076-.33-.1-.05-.026-.102-.076-.152-.102-.508-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.662 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482-.558-.228-.254-.203-.228-.076-.1-1.85-2.132-.153-.178-.203-.228h-.025l-.533.127-.61.127c-.33-.153-.736-.254-1.193-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.07 7.077-1.192 1.065-2.283 2.182-3.298 3.272-.99 1.065-1.878 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.862 2.385-.99 3.374-.102.7-.076 1.344.05 1.852.05.177.102.305.153.457.127.305.28.558.482.787l2.055 2.156.228.228.025-.025a.79.79 0 0 1 .203-.203l.102-.102c.05-.076.127-.126.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.026.076-.076.127-.102.05-.05.126-.102.177-.152.025-.026.076-.05.102-.076h.026c.076-.05.127-.102.203-.153.05-.025.076-.05.127-.102.076-.05.127-.102.203-.153.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.025.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.076-.025.127-.076.203-.102.026-.025.076-.025.102-.05.05-.025.102-.05.178-.076l.152-.076.05-.025.38-.153c.05-.025.076-.025.127-.05s.076-.025.127-.05l.05-.025c.026 0 .05-.025.076-.025.052-.024.103-.024.18-.05h.05c.076-.025.127-.025.203-.05.05-.025.127-.025.178-.05.076-.025.152-.025.228-.05.026 0 .05-.025.102-.025.025 0 .076 0 .102-.025.076-.026.153-.026.228-.026s.127-.025.203-.025c.05 0 .102-.025.153-.025h.203c.254 0 .558 0 .863.025h.05a8.16 8.16 0 0 1 1.015.153c.076.025.178.025.254.05.025-.025.025-.076.05-.102.203-.33.38-.685.583-1.015 1.142-1.902 2.36-3.577 3.602-5.048.432-.508.863-.965 1.294-1.42 1.8-1.877 3.602-3.323 5.226-4.44.356-.254.735-.482 1.066-.7.482-.305.94-.558 1.37-.812a13.01 13.01 0 0 1 1.015-.532c.532-.28 1.015-.508 1.446-.685l.38-.152c.177-.076.355-.152.507-.203-.127-.025-.28-.025-.406-.025h-.508c-.127 0-.28 0-.406.025l-.812.076c-.102.025-.177.025-.28.05.685-.355 1.37-.61 2.004-.812a13.22 13.22 0 0 1 1.269-.305c.558-.102 1.09-.177 1.573-.203.33-.025.635-.025.913-.025s.558.025.787.025a8.23 8.23 0 0 1 1.344.177c-.127-.177-.28-.304-.43-.43-.305-.23-.634-.38-.94-.508-.127-.05-.228-.076-.33-.127-.076-.025-.152-.05-.203-.05.153-.025.28-.05.406-.05.152-.025.28-.025.432-.05 1.192-.102 2.257 0 3.044.127.94.177 1.523.406 1.523.406-.127-.254-.33-.482-.558-.685-.153-.127-.33-.254-.482-.355a9.36 9.36 0 0 1 .913.254c.76.228 1.395.508 1.902.736l.458.228c.05.025.076.05.102.05.457.254.7.432.7.432a1.92 1.92 0 0 0-.432-.761c-.05-.05-.102-.127-.152-.177h.025c.026 0 .05.025.102.025.025 0 .076.025.127.05a9.4 9.4 0 0 1 .862.38c.025 0 .025.025.05.025l.152.076c.127.076.254.127.38.228l.38.228c.076.05.127.076.203.127.127.102.28.203.406.33.153.127.28.254.406.38l.076.076c.102.102.203.203.28.305.178.203.33.432.482.66.177.28.305.61.432.94 0 .025 0 .05.025.05.076-.076.228-.228.406-.432 1.465-1.723 5.88-7.304 3.216-10.703" fill="#132134"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177v-.203a8.28 8.28 0 0 1-.076-.355c0-.025-.025-.076-.025-.102v-.025c0-.05-.026-.076-.026-.127-.025-.102-.05-.203-.102-.305 0-.025-.025-.076-.025-.102l-.076-.228c-.025-.05-.025-.102-.05-.127-.025-.076-.05-.153-.102-.228l-.076-.153c-.025-.076-.076-.153-.102-.228l-.076-.153c-.05-.076-.076-.152-.127-.228l-.076-.153a2.13 2.13 0 0 1-.152-.254c-.025-.05-.05-.076-.076-.127-.025-.026-.05-.076-.076-.102-.076-.076-.127-.153-.203-.228l-.05-.025c-.102-.102-.178-.203-.28-.28l-.025-.025c-.05-.026-.1-.076-.126-.102h-.026c-.05-.026-.076-.05-.127-.076l-.025-.025c-.05-.025-.127-.076-.228-.127-.025-.025-.076-.025-.127-.05-.228-.076-.507-.177-.862-.28-.025 0-.05 0-.076-.025-.28-.076-.61-.153-.965-.203-.127-.026-.228-.026-.355-.05-.05 0-.102 0-.178-.025h-.076c-.28-.026-.532-.05-.812-.05h-.025c-.355 0-.7.025-1.04.102.076-.127.305-.28.508-.406.28-.152.532-.254.532-.254a2.72 2.72 0 0 0-.457.051c-.05 0-.102.025-.153.025-.025 0-.076 0-.1.026h-.025c-.026 0-.05 0-.076.025-.787.178-1.547.457-1.98.635l-.153.076h-.025c-.05 0-.076 0-.127.025.305-.583.76-.887 1.117-1.04.05-.025.127-.05.178-.076.025 0 .025 0 .05-.025.05-.025.102-.025.127-.05.076-.025.127-.025.127-.025h-.406a6.04 6.04 0 0 0-2.309.761c-.457.254-.863.533-1.218.812-.102.025-.177.05-.28.05-.965.203-2.054.457-3.196.812-.432.127-.863.28-1.294.432l-1.015.38-.736.304c-1.75.787-3.5 1.827-4.946 3.222l-.152.153-.38.38-.153.152c-.05.076-.127.153-.177.203a10.3 10.3 0 0 0-.787.989 8.92 8.92 0 0 0-.508.812l-.025.025c-.33.583-.634 1.192-.862 1.877-.127.33-.228.685-.33 1.04-.025.102-.05.178-.076.28l-.025.05a9.7 9.7 0 0 0-.223 1.195c0 .076-.025.153-.025.254-.025.203-.05.406-.05.634-.025.203-.025.38-.025.583v.787a6.22 6.22 0 0 0 .025.685v.025c0 .23.026.457.05.71 0 .102.025.203.025.305v.076c0 .05 0 .102.025.177.025.254.076.533.102.812 0 .076.026.153.026.228.05.228.076.482.127.71 0 0-.05-.305-.025-.76 0-.102.025-.228.025-.33.026-.254.076-.558.178-.837l.076-.228c0-.025.025-.05.05-.102.05-.127.127-.28.203-.406.025.102.025.203.05.28v1.344c.025.863.102 1.903.28 2.79 0 0 .025-1.598.305-1.8 0 0 .482 2.994.913 4.11.05.152.127.254.178.33v-.305l-.05-1.648v-.178c.33.685.7 1.37 1.142 2.106.127.203.228.406.355.61-.812.7-1.573 1.75-2.132 2.968-.076.203-.177.406-.254.61-.05.127-.076.228-.127.355 0 .025-.026.076-.026.102-.025.076-.05.178-.076.254 0 .05-.025.076-.025.127-.025.076-.05.177-.076.254 0 .05-.025.076-.025.127l-.076.38c-.025.127-.05.254-.05.38 0 .05 0 .076-.025.127 0 .102-.025.178-.025.28 0 .05 0 .102-.025.153 0 .102-.025.177-.025.28v.888a1.57 1.57 0 0 0 .025.33v.076c0 .127.025.254.05.406 0 .05 0 .076.025.127 0 .102.025.178.05.28 0 .05.025.102.025.152.025.076.025.178.05.254 0 .05.025.102.025.153.025.076.05.152.05.254.025.05.025.102.05.178s.05.178.076.254c.026.05.026.102.05.153.025.076.05.177.076.254.025.05.025.102.05.153.025.102.076.203.102.28.025.05.025.076.05.127l.38.837c.025.05.05.076.076.127l.153.305c.025.05.05.102.102.152.05.076.102.178.152.254.026.05.076.102.102.153.05.076.102.177.177.254.05.05.076.102.127.178l.177.254c.05.05.076.102.127.177.076.076.127.178.203.254.05.05.076.102.127.153.076.102.153.177.254.28l.127.127c.127.127.254.28.38.406 0 0-.076-.102-.178-.305-.025-.025-.05-.076-.05-.127l-.076-.153c-.025-.05-.05-.102-.076-.178a4.26 4.26 0 0 1-.355-1.827l.228.305c.076.178.203.406.33.66a1.14 1.14 0 0 1 .127.254c.203.356.406.76.66 1.142.305.482.61.94.94 1.37 0 0-.38-.812-.508-1.345-.025-.152-.05-.28-.025-.355.025.025.05.076.102.102.025.026.05.076.102.102a4.88 4.88 0 0 0 .228.304l.05.05c.05.05.076.127.127.178.05.076.102.153.177.228.533.685 1.27 1.598 1.776 2.08.178.153.33.28.432.33l-.736-1.32c1.675 1.37 8.626 3.12 15.45 1.167a17.87 17.87 0 0 0 2.461-.887c.482-.203.964-.457 1.446-.71l.076-.05a20.28 20.28 0 0 0 .99-.583c.254-.152.507-.33.735-.482a18.87 18.87 0 0 0 1.218-.913c.026-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279c.05-.076.076-.127.127-.203a1.02 1.02 0 0 0 .127-.228c.076-.127.153-.28.228-.406l.076-.153.153-.305.073-.155.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.025.05-.05.05-.076.152-.482.254-.86.254-1.217m-40.818-4.92c0-.025 0-.05-.025-.102-.076-.43-.153-.887-.177-1.344v-.102c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05.432-.787c.025-.025.025-.076.05-.102v-.025l.026-.05c.05-.076.102-.178.152-.254.076-.127.127-.254.203-.355.127-.228.228-.432.305-.533.025-.076.05-.102.076-.127-.025 0-.153-.102-.355-.228-.254-.153-.61-.355-1.04-.558-.153-.076-.28-.127-.432-.203-.178-.076-.38-.152-.583-.228-.05-.025-.102-.025-.153-.05l-.507-.153-.356-.076c-.102-.026-.203-.026-.304-.05-.05 0-.102 0-.153-.026-.05 0-.1 0-.152-.025-.127 0-.28-.025-.406-.025h-.203c-.305 0-.583.025-.862.076h-.047a7.45 7.45 0 0 0-1.472.38c-.152.05-.305.127-.482.203-.05.025-.076.05-.127.05l-.153.076c-.457.228-.888.533-1.294.863h-.024c-.355.28-.66.61-.94.94l-.228.305c-.102.127-.177.254-.254.38a6.81 6.81 0 0 0-.431.735c-.05.102-.102.178-.127.28 0 .025-.025.025-.025.05-.254.61-.457 1.243-.533 1.928-.025.126-.025.254-.05.406v.05c0 .102-.025.203-.025.33v.457c0 .102 0 .203.025.305v.127c0 .076.025.152.025.228v.025c0 .05 0 .076.025.127 0 .076.026.153.026.203s.025.102.025.152c.025.076.025.127.05.203 0 .05.025.102.05.152v.025l.025.05v.05l.025.05c.026.05.026.102.05.152s.025.127.05.178.05.102.05.177l.026.05c.025.05.025.076.05.127s.05.102.076.177l.076.153c.025.025.025.05.05.076s.025.05.05.076l.076.152c.025.05.05.127.102.178a.54.54 0 0 0 .076.127c.025.05.076.127.102.177s.05.076.076.127.076.127.127.177c.025.05.05.076.076.102.05.05.076.127.127.177.025.025.05.076.076.102.05.05.102.127.152.178a.33.33 0 0 1 .076.102c.05.05.102.127.152.178l.076.076c.05.05.102.127.177.178l.076.076.178.178c.025.025.05.05.076.05.05.05.127.102.203.177.026.025.05.025.076.05.076.05.127.102.203.153.026.025.05.025.05.05l.228.152.05.026.228.152.05.026c.076.05.178.1.254.152l.05.025c.076.05.177.102.254.127l.05.025c.102.05.178.076.28.127l.025.025c.102.05.203.076.28.127h.026c.1.025.203.076.304.102h.025c.05.025.102.025.152.05s.102.025.178.05h.025l.33.076c.102.025.228.05.33.05.355.05.7.076 1.065.102h.254c.127 0 .228 0 .355-.025.153-.025.33-.025.508-.05l.43-.076c.228-.05.457-.102.66-.178.66-.177 1.218-.432 1.573-.7 0 0-.228-1.016-.406-2.03-.052-.053-.078-.155-.103-.256" fill="#90694c"/><path d="M34.38 4.194l-.076-1.015.508-1.117.203-.05c-.33-.152-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.573-6.672 3.983-10.072 7.078-1.192 1.065-2.283 2.182-3.298 3.272-1 1.065-1.877 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.863 2.385-1 3.374-.102.7-.076 1.345.05 1.852.05.177.102.305.152.457a2.72 2.72 0 0 0 .482.787l2.055 2.157.228.228.025-.025c.05-.076.127-.153.203-.203l.025-.026.076-.076c.05-.076.127-.127.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.025.076-.076.127-.102.05-.05.127-.102.178-.153.025-.025.076-.05.102-.076h.025c.076-.05.127-.102.203-.152.05-.025.076-.05.127-.102.076-.05.127-.102.203-.152.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.026.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.482-1.344 1.218-2.842 2.182-4.364 1.167-1.877 2.664-3.856 4.44-5.835 1.116-1.243 2.334-2.487 3.653-3.68a53.88 53.88 0 0 1 5.175-4.161 45.08 45.08 0 0 1 3.424-2.182c.102-.05.203-.127.33-.178a15.63 15.63 0 0 1 .887-.482 24.67 24.67 0 0 1 1.877-.888l-.305-.355-.05-.05-.38-.432L30.04 5.05l.025-1.827-.025-.025 1.497-.457 2.843 1.45" fill="#2f83c1"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177l-.203-.203a1.02 1.02 0 0 0-.228-.127c-.025-.025-.05-.025-.076-.025l-.152-.076c-.025 0-.05-.026-.076-.026-.05-.025-.102-.025-.127-.05-.025 0-.05-.025-.102-.025s-.076-.025-.127-.025h-.558c-.025 0-.05 0-.076.025-.025 0-.05 0-.076.025-.05 0-.1.025-.177.05h-.05c-.153.05-.28.102-.432.153l-.05.025c-.05.025-.102.05-.178.076l-.076.025-.152.076-.076.05-.153.076-.076.05c-.05.025-.102.076-.153.102l-.05.025c-.05.05-.127.076-.178.127l-.025.025c-.076.05-.127.102-.203.127-.127.076-.254.177-.38.254-.102.076-.203.152-.33.228l-.05.025c-.102.076-.228.153-.33.203l-.05.025c-.102.076-.228.127-.33.203l-.05.025c-.102.076-.23.127-.356.178l-.05.025c-.127.05-.228.102-.355.152l-.05.025c-.127.05-.254.076-.38.127h-.02l-.406.076c-.23.025-.483.05-.71.05-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025L39.68 23.4c-.153-.025-.28-.076-.43-.102l-.71-.153c-.05 0-.102-.025-.127-.025s-.076-.025-.102-.025c-.05 0-.102-.026-.153-.026s-.102-.025-.153-.025h-.05c-.05 0-.102-.025-.127-.025-.102-.025-.203-.05-.33-.05-.025 0-.076 0-.102-.025-.076 0-.153-.025-.228-.025-.05 0-.076 0-.127-.025-.076 0-.127-.025-.203-.025H35.67c-.127 0-.228.025-.355.025h-.102c-.076 0-.153.025-.228.025h-.025c-.05 0-.076.025-.127.025-.076.025-.152.025-.228.05-.05 0-.102.025-.127.025-.076.025-.152.05-.228.05-.05 0-.076.026-.127.05-.076.025-.178.05-.254.076-.05.025-.076.025-.102.05a5.01 5.01 0 0 0-.355.152c-.965.558-1.8 1.32-2.435 2.182a9.43 9.43 0 0 0-.609.913c-.203.33-.356.685-.507 1.04-.05.102-.076.203-.127.305-.05.177-.127.355-.178.533 0 .025 0 .05-.025.05l-.153.634c-.05.228-.076.43-.102.66-.026.127-.026.228-.026.355-.025.33-.025.635 0 .965v.076c0 .076 0 .153.026.254a6.22 6.22 0 0 0 .102.685.74.74 0 0 1 .051.254c.025.076.025.153.05.228.152.583.38 1.117.66 1.572 1.04 1.802 2.765 2.892 4.034 3.476.482.203.99.406 1.522.583l-.05.05c-.102.025-.203.05-.33.076-.177.05-.406.127-.634.203-.254.076-.558.203-.863.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254-.178.153-.33.304-.482.482l-.127.127c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.153.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.025-.076v-.025c0-.025.025-.05.025-.102v-.025c0-.026.025-.076.025-.127s.025-.076.05-.127v-.03c.025-.05.025-.102.05-.152v-.025c.026-.05.026-.102.05-.153V44.2c.026-.05.05-.102.076-.178l.025-.025c.025-.05.05-.127.102-.177.05-.102.102-.178.153-.28.025-.025.05-.076.076-.102l.025-.025.153-.228c.05-.05.1-.127.152-.177l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.1.177-.177 0 0-1.09 2.487-.61 4.44v-.38c0-.05 0-.102.025-.153 0-.05 0-.102.026-.153v-.025c0-.05.025-.127.025-.178v-.05c.025-.076.025-.127.05-.203v-.025c.025-.076.05-.153.05-.203 0-.026.025-.05.025-.076l.026-.05c.025-.05.05-.127.076-.178.025-.076.076-.152.127-.228 0-.026.025-.05.025-.05l.152-.228s-.05.61-.05 1.345c0 .127 0 .228.025.355 0 .076 0 .152.025.228a10.02 10.02 0 0 1 .406-2.207c-.203.685-.355 1.42-.406 2.207-.025.507-.025 1.015.026 1.547.076.887.305 1.85.684 2.84 0 0-.355-1.142.153-2.283l.153.305c.05.33.102.812.203 1.344.102.888.508 3.552 2.334 5.403 0 0-.685-.887-.583-2.03.076.152.152.28.203.406.305.583.913 1.65 1.598 2.4 0 0-.532-1.04-.406-1.27 0 0 1.776 2.207 2.334 2.4l-.735-1.217-.025-.026c2.562 1.878 6.113 2.562 10.477 1.345.76-.203 1.522-.482 2.334-.812.482-.203.964-.457 1.446-.71l.076-.05c.33-.177.66-.38 1-.583.254-.153.507-.33.735-.483a18.87 18.87 0 0 0 1.218-.913c.025-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.026-.025a3.2 3.2 0 0 0 .254-.355l.025-.025c.026-.05.05-.076.076-.127l.356-.508c.025-.05.05-.076.076-.126.05-.102.102-.178.178-.28.05-.076.076-.127.127-.203s.102-.152.127-.228c.076-.127.153-.28.228-.406l.076-.152.23-.457.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.026.05-.05.05-.076a1.87 1.87 0 0 0 .327-1.06m-41.02-6.47c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05c-.025-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.735-.28h-.05c-.178-.05-.33-.076-.508-.102-.102 0-.203-.026-.305-.026h-.25c-.127 0-.254.026-.38.026-.05 0-.076 0-.127.025-.05 0-.127.026-.178.026-.025 0-.05 0-.076.025-.05 0-.076.025-.127.025-.076.025-.178.05-.254.076-.025 0-.076.026-.102.026-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.152.102-.05.026-.102.076-.153.102-.025.025-.076.05-.102.076-.076.076-.178.152-.254.228l-.127.127c-.076.076-.127.153-.203.228l-.025.025c-.026.05-.076.076-.102.127l-.076.076c-.127.178-.254.38-.356.583-.025.025-.025.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127-.026.102-.076.203-.102.33v.102c-.025.076-.025.152-.05.228 0 .05 0 .076-.025.127 0 .05 0 .076-.025.127v.102c0 .127-.025.254 0 .38 0 .102 0 .203.025.304v.05c0 .05.025.102.025.153.025.203.076.38.127.583a7.31 7.31 0 0 0 .153.406c.1.254.228.482.38.7.305.457.7.863 1.192 1.167a3.4 3.4 0 0 0 .862.406 3.49 3.49 0 0 0 .913.203c.076 0 .153.025.203.025h.33c.102 0 .203-.025.305-.025.05 0 .127 0 .178-.025l.432-.076h.025c.05-.025.102-.025.177-.05a3.01 3.01 0 0 0 .508-.203l.025-.025c.05-.025.102-.05.127-.05-.076-.43-.152-.887-.177-1.344.128-.056.128-.08.128-.106" fill="#fce9cd"/><path d="M35.013 4.498l.076.05z" fill="#4d9ed7"/><path d="M57.363 45.772c0-.025 0-.05-.025-.05-.026-.05-.026-.076-.026-.102-.127-.406-.28-.7-.43-.94-.178-.28-.33-.432-.33-.432l.076-.305a1.96 1.96 0 0 0 .05-.38c.102-.913-.127-1.624-.33-2.03a1.29 1.29 0 0 0-.076-.177l-.432.304c-2.74 1.852-5.8 3.045-9.132 3.552-2.283.355-4.693.38-7.205.076l.05.025s-1.522.203-1.928 1.65l.025.025-.127.965c.05 1.32.634 2.13 1.32 2.56.7.28 1.573.482 2.537.61 1.65.203 3.577.153 5.505-.152 2.588-.356 6.24-1.725 8.854-3.5.583-.406 1.142-.837 1.598-1.27l.05-.05c0-.177-.025-.28-.025-.38" fill="#fff"/><path d="M52.416 33.24c-1.395-.863-1.598-1.142-1.472-3.45l.228-3.425.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.153-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.178a3.51 3.51 0 0 0-.71-.787l-.05-.05-.05-.024h-.025c-.05-.026-.076-.05-.127-.076s-.102-.05-.127-.076c-.406-.254-.887-.406-1.37-.482-.28-.05-.558-.05-.837-.05-.127 0-.28.026-.406.026a9.05 9.05 0 0 0-1.091.228l-.38.254-.33.228-.05.025a2.26 2.26 0 0 1-.33.203l-.05.025c-.102.076-.23.127-.33.203l-.05.025c-.102.076-.228.127-.355.178l-.05.025-.355.153-.05.025c-.127.05-.254.076-.38.127h-.025l-.406.076-.7.05c-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025l-1.014-.228c-.153-.025-.28-.076-.432-.102l-.7-.153c-.05 0-.102-.025-.127-.025a4.17 4.17 0 0 0-.583.05h-.05a8.51 8.51 0 0 0-1.725.406c-.025 0-.05.025-.102.025-.102.026-.178.076-.28.102l-.355.153c-.837.355-1.624.863-2.385 1.497-.305.254-.583.532-.862.812-.406.432-.76.887-1.1 1.37-.025.026-.025.05-.05.076a6.5 6.5 0 0 0-.458.786l-.152.28v.025c-.153.33-.28.635-.38.965 0 .025 0 .05-.025.05-.026.05-.026.102-.05.153-.05.152-.102.304-.127.457-.05.152-.076.305-.102.482 0 .025-.025.076-.025.102-.025.102-.025.203-.05.28l-.1 1.065v.254a5.83 5.83 0 0 0 .66 1.573c1.04 1.802 2.765 2.892 4.033 3.476l1.522.583.025.025.025-.025c.076-.05.127-.102.203-.153.025-.025.05-.025.076-.05l.228-.152c.025-.026.05-.026.076-.05l.228-.152c.025-.025.05-.025.076-.05l.254-.152c.025-.025.05-.025.076-.05l.254-.153c.025-.025.05-.025.076-.05l.254-.153c.025-.026.076-.026.102-.05l.254-.152c.025-.026.076-.05.102-.05.076-.05.178-.102.28-.152.05-.025.076-.05.127-.05.102-.05.177-.102.28-.127.05-.025.076-.05.127-.05l.28-.127.152-.076.28-.127c.05-.025.102-.05.178-.076.1-.025.177-.076.28-.102.05-.025.127-.05.177-.076.102-.025.178-.076.28-.102l.203-.076c.102-.025.178-.076.28-.102l.228-.076c.076-.025.177-.05.254-.102l.508-.152.28-.076.254-.076c.102-.025.203-.05.33-.102.05-.025.102-.025.152-.05.406-1.04 1.65-3.628 3.755-3.907l.635-.05h.152c-.025-.153-.05-.305-.05-.482-.076-1.117.28-2.055.76-2.08.38-.025.685.533.736.7.152.33.254.76.28 1.243a4.41 4.41 0 0 1-.102 1.192c.05.05.076.102.127.127.482.6.558 1.42.532 2.03.178-.025.38-.025.583-.05.05 0 .102 0 .152-.025h.102l.735-.05 1.7-.102-.53-.278m5.302 15.627a15.67 15.67 0 0 1-2.84 2.004l-1.42.685c-1.04.457-2.03.76-2.917 1-1.954.483-3.298.483-3.298.483 1.065.583 2.4.583 3.323.507.635-.05 1.066-.178 1.066-.178-.025.38-.076.735-.127 1.1a5.47 5.47 0 0 1-.305 1.015v.025c-.153.38-.355.7-.558 1.015-.025.025-.05.076-.076.102l.076-.05 1-.583.735-.482 1.218-.913c.025-.025.05-.05.076-.05l1.1-1.04a15.43 15.43 0 0 0 1.218-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279l.127-.203c.05-.076.102-.153.127-.228l.228-.406.33-.66c.05-.127.127-.254.177-.38-.102.028-.152.078-.228.154M34.58 38.644c-.254.076-.558.203-.862.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254a4.35 4.35 0 0 0-.482.482l-.128.128c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.152.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.026-.076v-.026c0-.025.025-.05.025-.102v-.027c0-.025.025-.076.025-.127s.026-.076.05-.127v-.025c.025-.05.025-.102.05-.153v-.025c.025-.05.025-.102.05-.152v-.025c.025-.05.05-.102.076-.177l.025-.026c.026-.05.05-.127.102-.178l.152-.28c.026-.025.05-.076.076-.102l.025-.026.152-.228c.05-.05.102-.127.153-.178l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.102.178-.177 0 0-1.1 2.486-.6 4.44v-.38c0-.05 0-.102.025-.152 0-.05 0-.102.025-.153v-.025c0-.05.025-.127.025-.177v-.05c.025-.076.025-.127.05-.203v-.024a.75.75 0 0 0 .05-.203c0-.025.025-.05.025-.076l.025-.05c.025-.05.05-.127.076-.178.026-.076.076-.152.127-.228 0-.026.025-.05.025-.05L30.32 45l-.05 1.344c0 .127 0 .228.025.355 0 .076 0 .153.025.228.05-.786.203-1.522.406-2.207l.178-.557c0-.026.025-.05.025-.076l.203-.507c.025-.026.025-.05.05-.102l.228-.482c.025-.025.025-.05.025-.076l.532-.913c.026-.026.026-.05.05-.076l.228-.33c.025-.025.025-.05.05-.076s.025-.05.05-.076l.28-.38c.026-.025.026-.05.05-.05l.305-.356.38-.43c.102-.102.177-.203.28-.28l.102-.102.6-.583c.558-.508 1.015-.837 1.167-.94l-.33.076c-.154.08-.357.155-.6.23m14.615-5.494s0-.05-.025-.153c-.102-.356-.457-1.218-1.852-1.1-1.472.153-1.98 1.345-2.106 1.75-.025.076-.025.127-.025.127l.05.025c.177-.153.532-.153.862.076.153.102.254.203.355.33.127.203.153.406.076.558l-.076.076s.05.025.153.05c.406.127 1.548.355 2.156-.43.026-.05.05-.076.076-.127-.127-.05-.178-.228-.178-.457 0-.102.025-.203.05-.33.076-.303.303-.48.48-.405m-7.332 10.858l-2.435.457c.025 0 .076 0 .102.026 1.1.127 2.816.304 4.896.177 3.806-.228 8.803-1.42 13.343-5.53V39.1c.026-.355-.025-.965-.457-1.446-.076-.076-.152-.152-.254-.228-.025 0-.025-.025-.05-.025-.127-.076-.228-.127-.33-.203l-.228-.152v-.025a8.11 8.11 0 0 1-.965 1.142c-.127.127-.254.254-.406.38-1.243 1.117-2.867 2.08-4.617 2.842-2.9 1.268-6.138 2.106-8.598 2.613m-24.05-6.62c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.026.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.026.076-.076.152-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153a1.97 1.97 0 0 0-.051.228v.025-.025c0-.076 0-.127.025-.203 0-.127.026-.28.026-.406 0-.102.025-.228.05-.33 0-.025 0-.076.025-.102 0-.05.025-.102.025-.152s.025-.102.025-.153v-.076c0-.05.025-.127.025-.177v-.178c0-.025 0-.05.025-.076a.88.88 0 0 0 .05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.126.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.178-.583v-.025c.05-.153.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.304 0-.026.025-.076.076-.178.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.026-.05c-.026-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.736-.28h-.05a3.51 3.51 0 0 0-.508-.102c-.102 0-.203-.025-.305-.025H16c-.127 0-.254.025-.38.025-.05 0-.076 0-.127.025-.05 0-.127.025-.177.025-.025 0-.05 0-.076.025-.05 0-.076.026-.127.026-.076.025-.178.05-.254.076-.025 0-.076.025-.102.025-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.153.102-.05.025-.102.076-.152.102-.025.026-.076.05-.102.076-.076.076-.177.153-.254.228l-.127.127c-.076.076-.127.152-.203.228l-.025.025c-.025.05-.076.076-.102.126l-.076.076a4.36 4.36 0 0 0-.355.583c-.026.025-.026.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127 0 .025.025.05.025.076.025.102.05.177.076.28v.05c.025.076.076.177.1.254.102.254.203.482.33.685.025.025.025.05.05.076v.025l.025.025a2.52 2.52 0 0 0 .228.38c.127.177.228.305.305.406l.05.05c0 .025.025.025.025.025l.05.05c0-.05-.025-.102-.025-.127a4.16 4.16 0 0 1-.102-.964v-.05c0-.203 0-.406.025-.583l.076.228c.025.102.076.203.102.305v.05a5.26 5.26 0 0 0 .507 1.066 4.81 4.81 0 0 0 .508.735c.026.025.05.05.05.076l.05.05c-.076-.355-.127-.685-.127-1.015v-.33c0-.152 0-.28.025-.406a5.05 5.05 0 0 0 .203.66v.025a7.4 7.4 0 0 0 .837 1.598l.025.025c.05.05.076.102.102.152.026.025.05.05.05.076l.075.075v-.05c0-.05-.025-.102-.025-.153l-.076-.508c0-.102-.026-.228-.026-.33v-.56c0-.127.026-.28.026-.406.025.076.05.178.076.254.025.05.05.127.076.178v.025l.025.025c.025.076.05.153.076.203.05.127.102.254.178.355.076.153.127.28.203.38.05.076.076.127.102.178.05.076.102.153.127.203.05.05.076.102.102.153l.025.025c.025.05.076.076.102.127.026.025.05.05.05.076.05.05.076.102.102.102l.025.025V41l.076-.634V40.3a5.27 5.27 0 0 1 .127-.7c0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.533l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.026-.076.026-.102s0-.05.025-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.127s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.026-.076.026-.102v-.076l.128.08M48.56 47.98l.913-.33c.482-.203.735-.355.735-.406-.025-.05-.305-.025-.812.102-.254.05-.558.102-.94.203a4.18 4.18 0 0 1-.583.102c-.203.026-.432.076-.66.102-.458.076-.965.127-1.522.177l-.837.076c-.28.025-.583.025-.888.05-1.217.025-2.562-.025-3.932-.28a8.62 8.62 0 0 1-2.384-.838l-.025-.025c.406-1.446 1.928-1.65 1.928-1.65l-.05-.025h-.076a15.13 15.13 0 0 1-.583-.076c-.127-.025-.228-.025-.305-.05-.076 0-.153-.025-.178-.025-.913-.05-1.42.7-1.572 1.04l-.076.152a3.14 3.14 0 0 0-.254 1.015c-.05.685.127 1.42.66 2.055.355.432.965.812 1.75 1.117-.685-.432-1.294-1.27-1.32-2.562.787.33 1.674.533 2.36.66 1.446.28 2.866.305 4.1.228l.913-.076a12.04 12.04 0 0 1 .863-.102l1.523-.28c.228-.05.457-.102.66-.178a3.25 3.25 0 0 0 .583-.179" fill="#f2d2ac"/><path d="M47.367 31.033c.76.025 1.27.254 1.624.61.076-.33.127-.735.102-1.192-.025-.482-.127-.913-.28-1.243-.05-.203-.356-.736-.736-.71-.482.025-.837.965-.76 2.08 0 .152.025.305.05.457m1.27 2.866c0 .203.076.38.178.457.177.102.406-.102.507-.432 0-.025.025-.05.025-.076.076-.305 0-.61-.177-.685-.178-.102-.406.102-.508.43 0 .102-.025.204-.025.305m-3.45.558a1.19 1.19 0 0 0 .355.355c.33.203.685.228.887.05l.076-.076c.076-.152.05-.355-.076-.558-.076-.127-.203-.254-.355-.33-.33-.203-.685-.228-.863-.076-.025.025-.05.05-.076.102-.076.126-.05.33.052.532M57.794 39.1c-.026 0-.026 0 0 0m-.406 7.028a12.08 12.08 0 0 1-1.624 1.293c-2.613 1.776-6.265 3.172-8.854 3.502-1.953.305-3.856.355-5.505.152-.965-.127-1.802-.33-2.537-.61-.786-.305-1.395-.685-1.75-1.117-.533-.635-.685-1.395-.66-2.054.025-.356.102-.71.254-1.016l.076-.152c.178-.33.66-1.117 1.572-1.04a.58.58 0 0 1 .178.025c.076 0 .203.026.305.05l.583.076h.076c2.51.305 4.92.28 7.205-.076 3.323-.508 6.393-1.7 9.132-3.552l.432-.305 1.497-2.232c-4.54 4.135-9.54 5.328-13.343 5.556a24.93 24.93 0 0 1-4.896-.178c-.05 0-.076 0-.102-.025-.33-.05-.583-.076-.787-.102-.102 0-.177-.025-.228-.025a2.15 2.15 0 0 0-.812.102c-.507.152-.964.507-1.294.964-.406.558-.66 1.32-.66 2.08 0 .634.153 1.294.482 1.902.025.025.025.05.05.076.05.076.076.127.127.203s.127.178.203.254c.787.99 2.51 1.7 4.795 2.004 1.547.203 3.35.178 5.302-.102 5.784-1.04 8.524-2.917 9.792-4.21.102-.102.177-.178.254-.28.457-.533.66-.94.736-1.09v-.025c.025-.05.025-.076.025-.076l-.025.027" fill="#664f44"/><path d="M38.995 26.087c-.178-.102-.38-.178-.583-.228l-.406-.076c-.05 0-.102 0-.152-.025-.685-.05-1.27.05-1.27.05-.127.025-.254.05-.355.102a4.03 4.03 0 0 0-2.004 1.32c-.355.457-.61.94-.735 1.42-.026.05-.026.076-.026.127-.025.127-.076.254-.102.355-.076.406-.127.76-.127 1.066l.025.66c.153-.355.33-.66.508-.964.432-.736.888-1.345 1.37-1.827.913-.94 1.85-1.446 2.56-1.7.762-.255 1.295-.28 1.295-.28m10.984-1.295l-.025-.05c-.102-.127-.228-.254-.38-.355-.355-.228-.837-.355-1.497-.228 0 0-.787.177-1.243.7 0 0 1.37-.583 2.84.457.127.102.28.203.406.33s.28.254.406.432c0 0-.05-.635-.432-1.193-.025-.05-.05-.075-.076-.1" fill="#e9b784"/><path d="M39.173 34.89l1.725-.457c.102-.482.127-1.065.05-1.7-.178-1.472-.837-2.613-1.497-2.537s-1.04 1.345-.862 2.816c.1.762.303 1.42.583 1.878" fill="#664f44"/><path d="M36.154 1.733l-1.37.305.28 2.487-3.628-1.853-1.497.458.025.025 4.414 5.023.102-.05.406-.254c.05-.025.102-.05.153-.102l.61-.356L33.77 5.26 36.8 6.73l.28-.152-.28-2.157 1.37 1.598h.025c.127-.05.228-.127.355-.178l.05-.025.05-.026c.025 0 .05-.025.05-.025l.152-.076s.025 0 .025-.025l.482-.228-3.198-3.704" fill="#ffd250"/><path d="M34.8 2.113v-.076.076m0-.076l.203-.05c-.33-.153-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.072 7.077-1.192 1.065-2.283 2.182-3.298 3.272l4.1 5.073c1.117-1.218 2.308-2.435 3.628-3.628 1.75-1.598 3.526-3.02 5.276-4.236 1.7-1.193 3.4-2.207 4.997-3.02l-.7-3.246.026-1.827-.026-.025 1.497-.458 2.917 1.497-.076-1.015.507-1.115" fill="#4d9ed7"/><path d="M34.8 2.037l-.508 1.117.076 1.04.7.355zM33.77 5.26l3.044 1.497-1.167.66zm3.044-.838l.28 2.157 1.09-.558z" fill="#132134"/><path d="M48.28 3.635h.56c.507 0 .99.076 1.446.178.025 0 .05 0 .076.025h.025l.05.026h.05c-.05-.026-.102-.076-.153-.102-.507-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.66 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482.23s-.026 0-.026.025l-.152.076c-.026 0-.05.026-.05.026h-.102l-.026.025a2.34 2.34 0 0 0-.355.178h-.025c-.025.025-.05.025-.076.05h-.025c-.026 0-.05.025-.05.025l-.532.28c-.127.076-.254.127-.38.203h-.025l-.28.152c-.305.153-.583.33-.888.508-.025.025-.05.025-.102.05-.025.025-.05.025-.076.05s-.05.025-.076.05l-.025.025-.61.356c-.05.025-.102.05-.153.102l-.406.254-.102.05-1.142.76-1.852 1.32c-.076.05-.152.126-.228.177-1.598 1.192-3.12 2.487-4.59 3.806l-4.44 4.338-1.928 2.004-1.624 1.878s.102-.076.28-.254l-.406.482c2.334-2.486 4.896-5.023 7.662-7.407a74.38 74.38 0 0 1 5.226-4.135c.786-.558 1.598-1.117 2.41-1.65.254-.177.532-.33.787-.507.127-.076.254-.153.406-.228a1.02 1.02 0 0 1 .228-.127c.153-.076.28-.178.432-.254.127-.076.28-.153.406-.254.076-.05.153-.076.228-.127l.532-.305c.102-.05.203-.127.305-.178l1.015-.532c.025-.025.05-.025.076-.05l.153-.076c.076-.025.127-.076.203-.102.025-.025.05-.025.076-.05l.152-.076s.025 0 .025-.025h.025a6.45 6.45 0 0 1 .431-.203c.026 0 .05-.025.076-.05l.153-.076c.178-.076.33-.152.508-.228.05-.025.102-.05.127-.076.025 0 .05-.025.076-.025.05-.025.102-.05.152-.05.203-.076.38-.178.583-.254.178-.076.33-.153.508-.228a37.24 37.24 0 0 1 2.689-1.015c1.575-.435 2.97-.713 4.187-.764" fill="#fff"/></svg> \ No newline at end of file diff --git a/web/modules/webform/images/addons/mailchimp_webform_handler.svg b/web/modules/webform/images/addons/mailchimp_webform_handler.svg new file mode 100644 index 0000000000..ef3f80d277 --- /dev/null +++ b/web/modules/webform/images/addons/mailchimp_webform_handler.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64"><path d="M60.432 46.635c0-.102-.025-.203-.025-.305 0-.076-.025-.127-.025-.178a2.61 2.61 0 0 0-.102-.432 2.45 2.45 0 0 0-.457-.787c-.203-.228-.432-.406-.66-.532-.254-.128-.508-.203-.71-.254-.076 0-.127-.025-.178-.025.28-1.218-.076-2.156-.305-2.587l.05-.05.786-.863.05-.05c.178-.254.28-.508.355-.736.05-.203.102-.38.102-.558v-.483c-.025-.38-.076-.862-.33-1.395-.127-.254-.304-.533-.532-.787a3.13 3.13 0 0 0-.837-.66c-.025-.025-.05-.025-.076-.05a12.36 12.36 0 0 0-2.132-2.359l-.965-.76-.634-.457c-.305-.228-.532-.356-.634-.406l-.533-.355c-.076-.076-.127-.102-.153-.127 0 0 0-.025-.025-.076-.025-.076-.025-.178-.025-.355l.025-1.142.228-3.4.025-1.345c-.025-.685-.127-1.294-.254-1.852-.025-.127-.076-.254-.102-.38-.025-.102-.05-.153-.076-.203a1.8 1.8 0 0 0-.102-.254c-.025-.05-.025-.102-.076-.153-.05-.127-.102-.254-.178-.38l-.025-.025-.026-.076-.025-.05c-.127-.228-.28-.432-.432-.61-.076-.355-.203-.862-.43-1.446-.203-.508-.457-1.065-.837-1.624-.127-.203-.28-.38-.432-.558l.05-.05c.076-.076 1.852-1.953 3.272-4.388 2.613-4.54 1.75-7.306.558-8.828l-.025-.05-.026-.05c-1.14-1.27-2.714-2.03-4.617-2.283-3.984-.508-8.5 1.472-9.69 2.03l-2.182-2.385c-.203-.203-.406-.406-.634-.558l-.734-.425C35.2.287 34.632.135 34.023.058 32.83-.094 31.46.058 30 .44c-2.207.558-4.668 1.675-7.256 3.22s-5.276 3.552-7.89 5.936C11.65 12.488 9 15.558 7.083 18.5c-.965 1.446-1.75 2.866-2.334 4.236-.583 1.345-.965 2.64-1.117 3.806-.102.863-.102 1.675.076 2.4.076.33.178.635.33.94.178.38.406.735.685 1.04l2.258 2.36.254.254-.025.025-.076.152c-.05.076-.076.153-.127.203l-.076.153c-.025.076-.076.152-.102.228l-.076.153c-.025.076-.076.153-.102.228-.025.05-.05.102-.05.153l-.076.228c-.026.05-.026.102-.05.153-.025.076-.05.152-.076.254 0 .025-.025.05-.025.076s-.025.05-.025.076c-.026.076-.05.177-.076.254 0 .05-.025.102-.025.152 0 .025-.025.076-.025.102 0 .05-.025.102-.025.152s-.025.102-.025.153c-.026.102-.026.203-.05.33 0 .025 0 .05-.025.102v.026c0 .076-.025.152-.025.203 0 .102-.025.228-.025.33v1.27c0 .05 0 .102.025.153 0 .05 0 .127.025.203v.076c0 .05.025.127.025.178s.025.102.025.177c0 .025 0 .05.026.076 0 .025.025.076.025.102v.05c0 .05.025.102.05.203 0 .025 0 .025.025.05.025.05.025.102.025.127l.025.05c0 .025 0 .025.026.05l.025.05v.076c0 .025 0 .025.025.05l.025.05c0 .05.025.076.025.127.025.05.025.102.05.203v-.025.025c0 .025 0 .025.026.05.025.076.05.127.05.152.025.05.05.102.076.203l.025.025c.025.05.025.102.05.127l.025.05c0 .025.025.05.025.076s.025.076.05.102l.025.05c.025.025.025.076.05.102s.025.05.025.076c.025.05.05.102.076.178l.025.025c.025.025.025.05.05.076s.025.076.05.102a.42.42 0 0 1 .076.153l.025.025c.025.026.025.05.05.076.025.05.05.076.05.102.025.026.05.076.076.127v.025c.025.026.025.05.05.076a.37.37 0 0 0 .076.102c.025.025.05.076.102.153.025.025.05.05.05.076.025.05.05.076.076.1s.05.076.076.127c.025.025.05.076.076.102.025.05.05.076.102.102l.102.102c.05.05.076.102.127.152l.05.05.076.076.204.203.076.076.025.026c.05.05.127.1.177.177l.025.025c.025.025.05.025.076.076.076.076.152.127.228.203l.05.025.025.025.05.025c.076.05.127.102.203.153l.025.025c.025.025.05.025.05.025l.05.05c.05.05.102.076.153.127l.05.026.076.076c.05.025.127.076.177.102.026.025.05.05.102.05l.05.025.025.025h.025c.102.05.178.102.254.152l.05.025.304.153h.025l.046.014.152.076c.025 0 .05.025.076.025.026.025.05.025.102.05h.025c.05.025.102.05.153.05h.025c.05.025.102.05.178.076h.025l.05.025c.025 0 .05.025.076.025h.025a2.98 2.98 0 0 0 .254.076h.026c.127.05.254.076.38.102h.025c.102.026.228.05.33.076h.102c.102.026.203.05.305.05h.102c.076 0 .127.025.203.025 0 .026.025.05.025.076.177.482.355.965.558 1.42 2.994 8.295 11.29 14.74 20.75 15.93 9.463 1.167 19.584-5.124 23.694-13.623.177-.33.33-.634.482-.964.406-.432.735-.863.94-1.32.33-.28.406-.838.38-1.32M7.894 43.337" fill="#664f44"/><path d="M52.34 5.132a5 5 0 0 0-1.573-1.167c-.102-.05-.203-.076-.33-.1-.05-.026-.102-.076-.152-.102-.508-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.662 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482-.558-.228-.254-.203-.228-.076-.1-1.85-2.132-.153-.178-.203-.228h-.025l-.533.127-.61.127c-.33-.153-.736-.254-1.193-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.07 7.077-1.192 1.065-2.283 2.182-3.298 3.272-.99 1.065-1.878 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.862 2.385-.99 3.374-.102.7-.076 1.344.05 1.852.05.177.102.305.153.457.127.305.28.558.482.787l2.055 2.156.228.228.025-.025a.79.79 0 0 1 .203-.203l.102-.102c.05-.076.127-.126.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.026.076-.076.127-.102.05-.05.126-.102.177-.152.025-.026.076-.05.102-.076h.026c.076-.05.127-.102.203-.153.05-.025.076-.05.127-.102.076-.05.127-.102.203-.153.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.025.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.076-.025.127-.076.203-.102.026-.025.076-.025.102-.05.05-.025.102-.05.178-.076l.152-.076.05-.025.38-.153c.05-.025.076-.025.127-.05s.076-.025.127-.05l.05-.025c.026 0 .05-.025.076-.025.052-.024.103-.024.18-.05h.05c.076-.025.127-.025.203-.05.05-.025.127-.025.178-.05.076-.025.152-.025.228-.05.026 0 .05-.025.102-.025.025 0 .076 0 .102-.025.076-.026.153-.026.228-.026s.127-.025.203-.025c.05 0 .102-.025.153-.025h.203c.254 0 .558 0 .863.025h.05a8.16 8.16 0 0 1 1.015.153c.076.025.178.025.254.05.025-.025.025-.076.05-.102.203-.33.38-.685.583-1.015 1.142-1.902 2.36-3.577 3.602-5.048.432-.508.863-.965 1.294-1.42 1.8-1.877 3.602-3.323 5.226-4.44.356-.254.735-.482 1.066-.7.482-.305.94-.558 1.37-.812a13.01 13.01 0 0 1 1.015-.532c.532-.28 1.015-.508 1.446-.685l.38-.152c.177-.076.355-.152.507-.203-.127-.025-.28-.025-.406-.025h-.508c-.127 0-.28 0-.406.025l-.812.076c-.102.025-.177.025-.28.05.685-.355 1.37-.61 2.004-.812a13.22 13.22 0 0 1 1.269-.305c.558-.102 1.09-.177 1.573-.203.33-.025.635-.025.913-.025s.558.025.787.025a8.23 8.23 0 0 1 1.344.177c-.127-.177-.28-.304-.43-.43-.305-.23-.634-.38-.94-.508-.127-.05-.228-.076-.33-.127-.076-.025-.152-.05-.203-.05.153-.025.28-.05.406-.05.152-.025.28-.025.432-.05 1.192-.102 2.257 0 3.044.127.94.177 1.523.406 1.523.406-.127-.254-.33-.482-.558-.685-.153-.127-.33-.254-.482-.355a9.36 9.36 0 0 1 .913.254c.76.228 1.395.508 1.902.736l.458.228c.05.025.076.05.102.05.457.254.7.432.7.432a1.92 1.92 0 0 0-.432-.761c-.05-.05-.102-.127-.152-.177h.025c.026 0 .05.025.102.025.025 0 .076.025.127.05a9.4 9.4 0 0 1 .862.38c.025 0 .025.025.05.025l.152.076c.127.076.254.127.38.228l.38.228c.076.05.127.076.203.127.127.102.28.203.406.33.153.127.28.254.406.38l.076.076c.102.102.203.203.28.305.178.203.33.432.482.66.177.28.305.61.432.94 0 .025 0 .05.025.05.076-.076.228-.228.406-.432 1.465-1.723 5.88-7.304 3.216-10.703" fill="#132134"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177v-.203a8.28 8.28 0 0 1-.076-.355c0-.025-.025-.076-.025-.102v-.025c0-.05-.026-.076-.026-.127-.025-.102-.05-.203-.102-.305 0-.025-.025-.076-.025-.102l-.076-.228c-.025-.05-.025-.102-.05-.127-.025-.076-.05-.153-.102-.228l-.076-.153c-.025-.076-.076-.153-.102-.228l-.076-.153c-.05-.076-.076-.152-.127-.228l-.076-.153a2.13 2.13 0 0 1-.152-.254c-.025-.05-.05-.076-.076-.127-.025-.026-.05-.076-.076-.102-.076-.076-.127-.153-.203-.228l-.05-.025c-.102-.102-.178-.203-.28-.28l-.025-.025c-.05-.026-.1-.076-.126-.102h-.026c-.05-.026-.076-.05-.127-.076l-.025-.025c-.05-.025-.127-.076-.228-.127-.025-.025-.076-.025-.127-.05-.228-.076-.507-.177-.862-.28-.025 0-.05 0-.076-.025-.28-.076-.61-.153-.965-.203-.127-.026-.228-.026-.355-.05-.05 0-.102 0-.178-.025h-.076c-.28-.026-.532-.05-.812-.05h-.025c-.355 0-.7.025-1.04.102.076-.127.305-.28.508-.406.28-.152.532-.254.532-.254a2.72 2.72 0 0 0-.457.051c-.05 0-.102.025-.153.025-.025 0-.076 0-.1.026h-.025c-.026 0-.05 0-.076.025-.787.178-1.547.457-1.98.635l-.153.076h-.025c-.05 0-.076 0-.127.025.305-.583.76-.887 1.117-1.04.05-.025.127-.05.178-.076.025 0 .025 0 .05-.025.05-.025.102-.025.127-.05.076-.025.127-.025.127-.025h-.406a6.04 6.04 0 0 0-2.309.761c-.457.254-.863.533-1.218.812-.102.025-.177.05-.28.05-.965.203-2.054.457-3.196.812-.432.127-.863.28-1.294.432l-1.015.38-.736.304c-1.75.787-3.5 1.827-4.946 3.222l-.152.153-.38.38-.153.152c-.05.076-.127.153-.177.203a10.3 10.3 0 0 0-.787.989 8.92 8.92 0 0 0-.508.812l-.025.025c-.33.583-.634 1.192-.862 1.877-.127.33-.228.685-.33 1.04-.025.102-.05.178-.076.28l-.025.05a9.7 9.7 0 0 0-.223 1.195c0 .076-.025.153-.025.254-.025.203-.05.406-.05.634-.025.203-.025.38-.025.583v.787a6.22 6.22 0 0 0 .025.685v.025c0 .23.026.457.05.71 0 .102.025.203.025.305v.076c0 .05 0 .102.025.177.025.254.076.533.102.812 0 .076.026.153.026.228.05.228.076.482.127.71 0 0-.05-.305-.025-.76 0-.102.025-.228.025-.33.026-.254.076-.558.178-.837l.076-.228c0-.025.025-.05.05-.102.05-.127.127-.28.203-.406.025.102.025.203.05.28v1.344c.025.863.102 1.903.28 2.79 0 0 .025-1.598.305-1.8 0 0 .482 2.994.913 4.11.05.152.127.254.178.33v-.305l-.05-1.648v-.178c.33.685.7 1.37 1.142 2.106.127.203.228.406.355.61-.812.7-1.573 1.75-2.132 2.968-.076.203-.177.406-.254.61-.05.127-.076.228-.127.355 0 .025-.026.076-.026.102-.025.076-.05.178-.076.254 0 .05-.025.076-.025.127-.025.076-.05.177-.076.254 0 .05-.025.076-.025.127l-.076.38c-.025.127-.05.254-.05.38 0 .05 0 .076-.025.127 0 .102-.025.178-.025.28 0 .05 0 .102-.025.153 0 .102-.025.177-.025.28v.888a1.57 1.57 0 0 0 .025.33v.076c0 .127.025.254.05.406 0 .05 0 .076.025.127 0 .102.025.178.05.28 0 .05.025.102.025.152.025.076.025.178.05.254 0 .05.025.102.025.153.025.076.05.152.05.254.025.05.025.102.05.178s.05.178.076.254c.026.05.026.102.05.153.025.076.05.177.076.254.025.05.025.102.05.153.025.102.076.203.102.28.025.05.025.076.05.127l.38.837c.025.05.05.076.076.127l.153.305c.025.05.05.102.102.152.05.076.102.178.152.254.026.05.076.102.102.153.05.076.102.177.177.254.05.05.076.102.127.178l.177.254c.05.05.076.102.127.177.076.076.127.178.203.254.05.05.076.102.127.153.076.102.153.177.254.28l.127.127c.127.127.254.28.38.406 0 0-.076-.102-.178-.305-.025-.025-.05-.076-.05-.127l-.076-.153c-.025-.05-.05-.102-.076-.178a4.26 4.26 0 0 1-.355-1.827l.228.305c.076.178.203.406.33.66a1.14 1.14 0 0 1 .127.254c.203.356.406.76.66 1.142.305.482.61.94.94 1.37 0 0-.38-.812-.508-1.345-.025-.152-.05-.28-.025-.355.025.025.05.076.102.102.025.026.05.076.102.102a4.88 4.88 0 0 0 .228.304l.05.05c.05.05.076.127.127.178.05.076.102.153.177.228.533.685 1.27 1.598 1.776 2.08.178.153.33.28.432.33l-.736-1.32c1.675 1.37 8.626 3.12 15.45 1.167a17.87 17.87 0 0 0 2.461-.887c.482-.203.964-.457 1.446-.71l.076-.05a20.28 20.28 0 0 0 .99-.583c.254-.152.507-.33.735-.482a18.87 18.87 0 0 0 1.218-.913c.026-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279c.05-.076.076-.127.127-.203a1.02 1.02 0 0 0 .127-.228c.076-.127.153-.28.228-.406l.076-.153.153-.305.073-.155.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.025.05-.05.05-.076.152-.482.254-.86.254-1.217m-40.818-4.92c0-.025 0-.05-.025-.102-.076-.43-.153-.887-.177-1.344v-.102c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05.432-.787c.025-.025.025-.076.05-.102v-.025l.026-.05c.05-.076.102-.178.152-.254.076-.127.127-.254.203-.355.127-.228.228-.432.305-.533.025-.076.05-.102.076-.127-.025 0-.153-.102-.355-.228-.254-.153-.61-.355-1.04-.558-.153-.076-.28-.127-.432-.203-.178-.076-.38-.152-.583-.228-.05-.025-.102-.025-.153-.05l-.507-.153-.356-.076c-.102-.026-.203-.026-.304-.05-.05 0-.102 0-.153-.026-.05 0-.1 0-.152-.025-.127 0-.28-.025-.406-.025h-.203c-.305 0-.583.025-.862.076h-.047a7.45 7.45 0 0 0-1.472.38c-.152.05-.305.127-.482.203-.05.025-.076.05-.127.05l-.153.076c-.457.228-.888.533-1.294.863h-.024c-.355.28-.66.61-.94.94l-.228.305c-.102.127-.177.254-.254.38a6.81 6.81 0 0 0-.431.735c-.05.102-.102.178-.127.28 0 .025-.025.025-.025.05-.254.61-.457 1.243-.533 1.928-.025.126-.025.254-.05.406v.05c0 .102-.025.203-.025.33v.457c0 .102 0 .203.025.305v.127c0 .076.025.152.025.228v.025c0 .05 0 .076.025.127 0 .076.026.153.026.203s.025.102.025.152c.025.076.025.127.05.203 0 .05.025.102.05.152v.025l.025.05v.05l.025.05c.026.05.026.102.05.152s.025.127.05.178.05.102.05.177l.026.05c.025.05.025.076.05.127s.05.102.076.177l.076.153c.025.025.025.05.05.076s.025.05.05.076l.076.152c.025.05.05.127.102.178a.54.54 0 0 0 .076.127c.025.05.076.127.102.177s.05.076.076.127.076.127.127.177c.025.05.05.076.076.102.05.05.076.127.127.177.025.025.05.076.076.102.05.05.102.127.152.178a.33.33 0 0 1 .076.102c.05.05.102.127.152.178l.076.076c.05.05.102.127.177.178l.076.076.178.178c.025.025.05.05.076.05.05.05.127.102.203.177.026.025.05.025.076.05.076.05.127.102.203.153.026.025.05.025.05.05l.228.152.05.026.228.152.05.026c.076.05.178.1.254.152l.05.025c.076.05.177.102.254.127l.05.025c.102.05.178.076.28.127l.025.025c.102.05.203.076.28.127h.026c.1.025.203.076.304.102h.025c.05.025.102.025.152.05s.102.025.178.05h.025l.33.076c.102.025.228.05.33.05.355.05.7.076 1.065.102h.254c.127 0 .228 0 .355-.025.153-.025.33-.025.508-.05l.43-.076c.228-.05.457-.102.66-.178.66-.177 1.218-.432 1.573-.7 0 0-.228-1.016-.406-2.03-.052-.053-.078-.155-.103-.256" fill="#90694c"/><path d="M34.38 4.194l-.076-1.015.508-1.117.203-.05c-.33-.152-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.573-6.672 3.983-10.072 7.078-1.192 1.065-2.283 2.182-3.298 3.272-1 1.065-1.877 2.157-2.69 3.197-1.65 2.156-2.892 4.236-3.704 6.113-.532 1.243-.863 2.385-1 3.374-.102.7-.076 1.345.05 1.852.05.177.102.305.152.457a2.72 2.72 0 0 0 .482.787l2.055 2.157.228.228.025-.025c.05-.076.127-.153.203-.203l.025-.026.076-.076c.05-.076.127-.127.177-.203.05-.05.076-.076.127-.102s.076-.076.127-.102l.05-.05c.05-.025.076-.076.127-.102.05-.05.127-.102.178-.153.025-.025.076-.05.102-.076h.025c.076-.05.127-.102.203-.152.05-.025.076-.05.127-.102.076-.05.127-.102.203-.152.05-.025.076-.05.127-.076.076-.05.152-.102.228-.127.05-.026.076-.05.127-.076.076-.05.153-.076.228-.127.05-.025.076-.05.127-.076l.05-.025c.482-1.344 1.218-2.842 2.182-4.364 1.167-1.877 2.664-3.856 4.44-5.835 1.116-1.243 2.334-2.487 3.653-3.68a53.88 53.88 0 0 1 5.175-4.161 45.08 45.08 0 0 1 3.424-2.182c.102-.05.203-.127.33-.178a15.63 15.63 0 0 1 .887-.482 24.67 24.67 0 0 1 1.877-.888l-.305-.355-.05-.05-.38-.432L30.04 5.05l.025-1.827-.025-.025 1.497-.457 2.843 1.45" fill="#2f83c1"/><path d="M58.9 46.812s.05-.38-.153-.735c0-.025-.025-.05-.025-.05l-.102-.102c-.05-.05-.102-.102-.177-.153a.54.54 0 0 0-.127-.076 1.71 1.71 0 0 0-.432-.127c-.127-.025-.254-.025-.406-.025h-.203v.05c0 .025.025.05.025.102 0 .025 0 .05.026.05.025.076.05.203.076.305 0 0 0 .025-.025.076v.025c-.076.178-.28.583-.736 1.09-.076.102-.152.177-.254.28-1.27 1.32-4.01 3.17-9.792 4.212-1.954.28-3.78.305-5.302.102-2.283-.28-3.983-1.015-4.795-2.004-.076-.076-.127-.177-.203-.254-.05-.076-.076-.127-.127-.203-.025-.025-.025-.05-.05-.076a4 4 0 0 1-.482-1.903c0-.786.254-1.522.66-2.08.33-.457.76-.812 1.294-.964.254-.076.533-.127.812-.102a.88.88 0 0 1 .228.025c.177.026.457.05.787.102.025 0 .076 0 .102.025 1.09.127 2.816.305 4.896.177 3.806-.228 8.803-1.42 13.343-5.53v-.026c.025-.355-.025-.964-.457-1.446-.076-.076-.153-.153-.254-.228-.05-.05-.127-.076-.177-.127-.076-.025-.127-.076-.178-.102l-.228-.153v-.025a.52.52 0 0 0-.102-.153c-1.168-1.776-2.79-2.816-3.45-3.298-.305-.228-.508-.33-.508-.33-1.395-.863-1.598-1.142-1.472-3.45l.228-3.424c0-.203.025-.38.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.152-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.177-.025-.076-.05-.153-.05-.228 0-.025-.025-.05-.025-.076s-.025-.05-.025-.076v-.025l-.025-.076c-.025-.05-.05-.102-.05-.152V22.9l-.025-.05-.025-.05c-.05-.102-.076-.203-.127-.28l-.026-.076c-.05-.076-.102-.178-.153-.254l-.05-.05c-.05-.05-.076-.102-.127-.152l-.05-.076c-.05-.076-.102-.127-.153-.177l-.203-.203a1.02 1.02 0 0 0-.228-.127c-.025-.025-.05-.025-.076-.025l-.152-.076c-.025 0-.05-.026-.076-.026-.05-.025-.102-.025-.127-.05-.025 0-.05-.025-.102-.025s-.076-.025-.127-.025h-.558c-.025 0-.05 0-.076.025-.025 0-.05 0-.076.025-.05 0-.1.025-.177.05h-.05c-.153.05-.28.102-.432.153l-.05.025c-.05.025-.102.05-.178.076l-.076.025-.152.076-.076.05-.153.076-.076.05c-.05.025-.102.076-.153.102l-.05.025c-.05.05-.127.076-.178.127l-.025.025c-.076.05-.127.102-.203.127-.127.076-.254.177-.38.254-.102.076-.203.152-.33.228l-.05.025c-.102.076-.228.153-.33.203l-.05.025c-.102.076-.228.127-.33.203l-.05.025c-.102.076-.23.127-.356.178l-.05.025c-.127.05-.228.102-.355.152l-.05.025c-.127.05-.254.076-.38.127h-.02l-.406.076c-.23.025-.483.05-.71.05-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025L39.68 23.4c-.153-.025-.28-.076-.43-.102l-.71-.153c-.05 0-.102-.025-.127-.025s-.076-.025-.102-.025c-.05 0-.102-.026-.153-.026s-.102-.025-.153-.025h-.05c-.05 0-.102-.025-.127-.025-.102-.025-.203-.05-.33-.05-.025 0-.076 0-.102-.025-.076 0-.153-.025-.228-.025-.05 0-.076 0-.127-.025-.076 0-.127-.025-.203-.025H35.67c-.127 0-.228.025-.355.025h-.102c-.076 0-.153.025-.228.025h-.025c-.05 0-.076.025-.127.025-.076.025-.152.025-.228.05-.05 0-.102.025-.127.025-.076.025-.152.05-.228.05-.05 0-.076.026-.127.05-.076.025-.178.05-.254.076-.05.025-.076.025-.102.05a5.01 5.01 0 0 0-.355.152c-.965.558-1.8 1.32-2.435 2.182a9.43 9.43 0 0 0-.609.913c-.203.33-.356.685-.507 1.04-.05.102-.076.203-.127.305-.05.177-.127.355-.178.533 0 .025 0 .05-.025.05l-.153.634c-.05.228-.076.43-.102.66-.026.127-.026.228-.026.355-.025.33-.025.635 0 .965v.076c0 .076 0 .153.026.254a6.22 6.22 0 0 0 .102.685.74.74 0 0 1 .051.254c.025.076.025.153.05.228.152.583.38 1.117.66 1.572 1.04 1.802 2.765 2.892 4.034 3.476.482.203.99.406 1.522.583l-.05.05c-.102.025-.203.05-.33.076-.177.05-.406.127-.634.203-.254.076-.558.203-.863.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254-.178.153-.33.304-.482.482l-.127.127c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.153.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.025-.076v-.025c0-.025.025-.05.025-.102v-.025c0-.026.025-.076.025-.127s.025-.076.05-.127v-.03c.025-.05.025-.102.05-.152v-.025c.026-.05.026-.102.05-.153V44.2c.026-.05.05-.102.076-.178l.025-.025c.025-.05.05-.127.102-.177.05-.102.102-.178.153-.28.025-.025.05-.076.076-.102l.025-.025.153-.228c.05-.05.1-.127.152-.177l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.1.177-.177 0 0-1.09 2.487-.61 4.44v-.38c0-.05 0-.102.025-.153 0-.05 0-.102.026-.153v-.025c0-.05.025-.127.025-.178v-.05c.025-.076.025-.127.05-.203v-.025c.025-.076.05-.153.05-.203 0-.026.025-.05.025-.076l.026-.05c.025-.05.05-.127.076-.178.025-.076.076-.152.127-.228 0-.026.025-.05.025-.05l.152-.228s-.05.61-.05 1.345c0 .127 0 .228.025.355 0 .076 0 .152.025.228a10.02 10.02 0 0 1 .406-2.207c-.203.685-.355 1.42-.406 2.207-.025.507-.025 1.015.026 1.547.076.887.305 1.85.684 2.84 0 0-.355-1.142.153-2.283l.153.305c.05.33.102.812.203 1.344.102.888.508 3.552 2.334 5.403 0 0-.685-.887-.583-2.03.076.152.152.28.203.406.305.583.913 1.65 1.598 2.4 0 0-.532-1.04-.406-1.27 0 0 1.776 2.207 2.334 2.4l-.735-1.217-.025-.026c2.562 1.878 6.113 2.562 10.477 1.345.76-.203 1.522-.482 2.334-.812.482-.203.964-.457 1.446-.71l.076-.05c.33-.177.66-.38 1-.583.254-.153.507-.33.735-.483a18.87 18.87 0 0 0 1.218-.913c.025-.025.05-.05.076-.05.38-.33.76-.685 1.09-1.04a15.43 15.43 0 0 0 1.217-1.446l.026-.025a3.2 3.2 0 0 0 .254-.355l.025-.025c.026-.05.05-.076.076-.127l.356-.508c.025-.05.05-.076.076-.126.05-.102.102-.178.178-.28.05-.076.076-.127.127-.203s.102-.152.127-.228c.076-.127.153-.28.228-.406l.076-.152.23-.457.025-.05c.05-.127.127-.254.178-.38v-.025c.228-.203.38-.406.532-.583.025-.026.05-.05.05-.076a1.87 1.87 0 0 0 .327-1.06m-41.02-6.47c-.076.025-.153.127-.254.254-.025.05-.076.102-.102.177-.228.432-.432 1.04-.432 1.04a4.97 4.97 0 0 0 .05-.609v-.076l.076-.635v-.076c.025-.254.076-.482.127-.7 0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.532l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.025-.076.025-.102s0-.05.026-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.126s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.025-.076.025-.102v-.076l-.05.05c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.025.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.025.076-.076.153-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153-.025.102-.05.203-.05.228v.025-.025c0-.076 0-.127.025-.203 0-.127.025-.28.025-.406 0-.102.026-.228.05-.33 0-.026 0-.076.025-.102 0-.05.025-.102.025-.153s.025-.102.025-.152v-.076c0-.05.025-.127.025-.177v-.177c0-.026 0-.05.025-.076.025-.076.05-.177.05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.127.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.177-.583v-.026c.05-.152.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.305 0-.025.025-.076.076-.177.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.025-.05c-.025-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.735-.28h-.05c-.178-.05-.33-.076-.508-.102-.102 0-.203-.026-.305-.026h-.25c-.127 0-.254.026-.38.026-.05 0-.076 0-.127.025-.05 0-.127.026-.178.026-.025 0-.05 0-.076.025-.05 0-.076.025-.127.025-.076.025-.178.05-.254.076-.025 0-.076.026-.102.026-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.152.102-.05.026-.102.076-.153.102-.025.025-.076.05-.102.076-.076.076-.178.152-.254.228l-.127.127c-.076.076-.127.153-.203.228l-.025.025c-.026.05-.076.076-.102.127l-.076.076c-.127.178-.254.38-.356.583-.025.025-.025.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127-.026.102-.076.203-.102.33v.102c-.025.076-.025.152-.05.228 0 .05 0 .076-.025.127 0 .05 0 .076-.025.127v.102c0 .127-.025.254 0 .38 0 .102 0 .203.025.304v.05c0 .05.025.102.025.153.025.203.076.38.127.583a7.31 7.31 0 0 0 .153.406c.1.254.228.482.38.7.305.457.7.863 1.192 1.167a3.4 3.4 0 0 0 .862.406 3.49 3.49 0 0 0 .913.203c.076 0 .153.025.203.025h.33c.102 0 .203-.025.305-.025.05 0 .127 0 .178-.025l.432-.076h.025c.05-.025.102-.025.177-.05a3.01 3.01 0 0 0 .508-.203l.025-.025c.05-.025.102-.05.127-.05-.076-.43-.152-.887-.177-1.344.128-.056.128-.08.128-.106" fill="#fce9cd"/><path d="M35.013 4.498l.076.05z" fill="#4d9ed7"/><path d="M57.363 45.772c0-.025 0-.05-.025-.05-.026-.05-.026-.076-.026-.102-.127-.406-.28-.7-.43-.94-.178-.28-.33-.432-.33-.432l.076-.305a1.96 1.96 0 0 0 .05-.38c.102-.913-.127-1.624-.33-2.03a1.29 1.29 0 0 0-.076-.177l-.432.304c-2.74 1.852-5.8 3.045-9.132 3.552-2.283.355-4.693.38-7.205.076l.05.025s-1.522.203-1.928 1.65l.025.025-.127.965c.05 1.32.634 2.13 1.32 2.56.7.28 1.573.482 2.537.61 1.65.203 3.577.153 5.505-.152 2.588-.356 6.24-1.725 8.854-3.5.583-.406 1.142-.837 1.598-1.27l.05-.05c0-.177-.025-.28-.025-.38" fill="#fff"/><path d="M52.416 33.24c-1.395-.863-1.598-1.142-1.472-3.45l.228-3.425.025-.558v-.735c0-.127-.025-.254-.025-.355 0-.05 0-.102-.025-.153-.025-.127-.025-.254-.05-.38 0-.05-.026-.127-.026-.177 0-.076-.025-.127-.05-.203-.025-.05-.025-.127-.05-.178a3.51 3.51 0 0 0-.71-.787l-.05-.05-.05-.024h-.025c-.05-.026-.076-.05-.127-.076s-.102-.05-.127-.076c-.406-.254-.887-.406-1.37-.482-.28-.05-.558-.05-.837-.05-.127 0-.28.026-.406.026a9.05 9.05 0 0 0-1.091.228l-.38.254-.33.228-.05.025a2.26 2.26 0 0 1-.33.203l-.05.025c-.102.076-.23.127-.33.203l-.05.025c-.102.076-.228.127-.355.178l-.05.025-.355.153-.05.025c-.127.05-.254.076-.38.127h-.025l-.406.076-.7.05c-.38 0-.76-.025-1.167-.076l-.38-.076c-.05 0-.102-.025-.127-.025l-1.014-.228c-.153-.025-.28-.076-.432-.102l-.7-.153c-.05 0-.102-.025-.127-.025a4.17 4.17 0 0 0-.583.05h-.05a8.51 8.51 0 0 0-1.725.406c-.025 0-.05.025-.102.025-.102.026-.178.076-.28.102l-.355.153c-.837.355-1.624.863-2.385 1.497-.305.254-.583.532-.862.812-.406.432-.76.887-1.1 1.37-.025.026-.025.05-.05.076a6.5 6.5 0 0 0-.458.786l-.152.28v.025c-.153.33-.28.635-.38.965 0 .025 0 .05-.025.05-.026.05-.026.102-.05.153-.05.152-.102.304-.127.457-.05.152-.076.305-.102.482 0 .025-.025.076-.025.102-.025.102-.025.203-.05.28l-.1 1.065v.254a5.83 5.83 0 0 0 .66 1.573c1.04 1.802 2.765 2.892 4.033 3.476l1.522.583.025.025.025-.025c.076-.05.127-.102.203-.153.025-.025.05-.025.076-.05l.228-.152c.025-.026.05-.026.076-.05l.228-.152c.025-.025.05-.025.076-.05l.254-.152c.025-.025.05-.025.076-.05l.254-.153c.025-.025.05-.025.076-.05l.254-.153c.025-.026.076-.026.102-.05l.254-.152c.025-.026.076-.05.102-.05.076-.05.178-.102.28-.152.05-.025.076-.05.127-.05.102-.05.177-.102.28-.127.05-.025.076-.05.127-.05l.28-.127.152-.076.28-.127c.05-.025.102-.05.178-.076.1-.025.177-.076.28-.102.05-.025.127-.05.177-.076.102-.025.178-.076.28-.102l.203-.076c.102-.025.178-.076.28-.102l.228-.076c.076-.025.177-.05.254-.102l.508-.152.28-.076.254-.076c.102-.025.203-.05.33-.102.05-.025.102-.025.152-.05.406-1.04 1.65-3.628 3.755-3.907l.635-.05h.152c-.025-.153-.05-.305-.05-.482-.076-1.117.28-2.055.76-2.08.38-.025.685.533.736.7.152.33.254.76.28 1.243a4.41 4.41 0 0 1-.102 1.192c.05.05.076.102.127.127.482.6.558 1.42.532 2.03.178-.025.38-.025.583-.05.05 0 .102 0 .152-.025h.102l.735-.05 1.7-.102-.53-.278m5.302 15.627a15.67 15.67 0 0 1-2.84 2.004l-1.42.685c-1.04.457-2.03.76-2.917 1-1.954.483-3.298.483-3.298.483 1.065.583 2.4.583 3.323.507.635-.05 1.066-.178 1.066-.178-.025.38-.076.735-.127 1.1a5.47 5.47 0 0 1-.305 1.015v.025c-.153.38-.355.7-.558 1.015-.025.025-.05.076-.076.102l.076-.05 1-.583.735-.482 1.218-.913c.025-.025.05-.05.076-.05l1.1-1.04a15.43 15.43 0 0 0 1.218-1.446l.025-.026c.102-.127.178-.228.254-.355l.025-.025c.025-.05.05-.076.076-.127l.355-.508c.025-.05.05-.076.076-.127a1.72 1.72 0 0 1 .178-.279l.127-.203c.05-.076.102-.153.127-.228l.228-.406.33-.66c.05-.127.127-.254.177-.38-.102.028-.152.078-.228.154M34.58 38.644c-.254.076-.558.203-.862.33-.812.33-1.725.812-2.537 1.472-.102.076-.203.177-.305.254a4.35 4.35 0 0 0-.482.482l-.128.128c-.05.076-.127.127-.178.203l-.076.076c-.076.102-.152.203-.203.305-.076.102-.127.203-.203.305-.482.837-.76 1.852-.685 3.07v-.05c0-.025 0-.05.026-.076v-.026c0-.025.025-.05.025-.102v-.027c0-.025.025-.076.025-.127s.026-.076.05-.127v-.025c.025-.05.025-.102.05-.153v-.025c.025-.05.025-.102.05-.152v-.025c.025-.05.05-.102.076-.177l.025-.026c.026-.05.05-.127.102-.178l.152-.28c.026-.025.05-.076.076-.102l.025-.026.152-.228c.05-.05.102-.127.153-.178l.05-.05c.05-.05.076-.102.127-.127l.05-.05c.05-.05.127-.102.178-.177 0 0-1.1 2.486-.6 4.44v-.38c0-.05 0-.102.025-.152 0-.05 0-.102.025-.153v-.025c0-.05.025-.127.025-.177v-.05c.025-.076.025-.127.05-.203v-.024a.75.75 0 0 0 .05-.203c0-.025.025-.05.025-.076l.025-.05c.025-.05.05-.127.076-.178.026-.076.076-.152.127-.228 0-.026.025-.05.025-.05L30.32 45l-.05 1.344c0 .127 0 .228.025.355 0 .076 0 .153.025.228.05-.786.203-1.522.406-2.207l.178-.557c0-.026.025-.05.025-.076l.203-.507c.025-.026.025-.05.05-.102l.228-.482c.025-.025.025-.05.025-.076l.532-.913c.026-.026.026-.05.05-.076l.228-.33c.025-.025.025-.05.05-.076s.025-.05.05-.076l.28-.38c.026-.025.026-.05.05-.05l.305-.356.38-.43c.102-.102.177-.203.28-.28l.102-.102.6-.583c.558-.508 1.015-.837 1.167-.94l-.33.076c-.154.08-.357.155-.6.23m14.615-5.494s0-.05-.025-.153c-.102-.356-.457-1.218-1.852-1.1-1.472.153-1.98 1.345-2.106 1.75-.025.076-.025.127-.025.127l.05.025c.177-.153.532-.153.862.076.153.102.254.203.355.33.127.203.153.406.076.558l-.076.076s.05.025.153.05c.406.127 1.548.355 2.156-.43.026-.05.05-.076.076-.127-.127-.05-.178-.228-.178-.457 0-.102.025-.203.05-.33.076-.303.303-.48.48-.405m-7.332 10.858l-2.435.457c.025 0 .076 0 .102.026 1.1.127 2.816.304 4.896.177 3.806-.228 8.803-1.42 13.343-5.53V39.1c.026-.355-.025-.965-.457-1.446-.076-.076-.152-.152-.254-.228-.025 0-.025-.025-.05-.025-.127-.076-.228-.127-.33-.203l-.228-.152v-.025a8.11 8.11 0 0 1-.965 1.142c-.127.127-.254.254-.406.38-1.243 1.117-2.867 2.08-4.617 2.842-2.9 1.268-6.138 2.106-8.598 2.613m-24.05-6.62c-.05.025-.076.076-.127.102l-.05.05c-.05.05-.102.102-.127.153l-.026.025-.152.228-.025.025c0 .025-.025.025-.025.05l-.076.153v.05c-.026.076-.076.152-.102.228a7.94 7.94 0 0 0-.203.583c-.025.05-.025.127-.05.153a1.97 1.97 0 0 0-.051.228v.025-.025c0-.076 0-.127.025-.203 0-.127.026-.28.026-.406 0-.102.025-.228.05-.33 0-.025 0-.076.025-.102 0-.05.025-.102.025-.152s.025-.102.025-.153v-.076c0-.05.025-.127.025-.177v-.178c0-.025 0-.05.025-.076a.88.88 0 0 0 .05-.254v-.025c.025-.05.025-.127.05-.178v-.025c.025-.126.076-.254.102-.38v-.05c0-.025 0-.05.025-.076.05-.203.127-.406.178-.583v-.025c.05-.153.127-.33.177-.482v-.025c.025-.076.05-.127.076-.203.05-.102.076-.203.127-.304 0-.026.025-.076.076-.178.025-.025.025-.076.05-.102.025-.05.05-.102.076-.177l.026-.05c-.026-.025-.076-.025-.102-.05h-.025l-.05-.025c-.228-.102-.482-.203-.736-.28h-.05a3.51 3.51 0 0 0-.508-.102c-.102 0-.203-.025-.305-.025H16c-.127 0-.254.025-.38.025-.05 0-.076 0-.127.025-.05 0-.127.025-.177.025-.025 0-.05 0-.076.025-.05 0-.076.026-.127.026-.076.025-.178.05-.254.076-.025 0-.076.025-.102.025-.102.05-.228.076-.33.127-.05.025-.076.05-.127.05l-.203.102c-.05.025-.102.05-.153.102-.05.025-.102.05-.153.102-.05.025-.102.076-.152.102-.025.026-.076.05-.102.076-.076.076-.177.153-.254.228l-.127.127c-.076.076-.127.152-.203.228l-.025.025c-.025.05-.076.076-.102.126l-.076.076a4.36 4.36 0 0 0-.355.583c-.026.025-.026.05-.05.076-.05.102-.076.203-.127.305-.025.05-.025.076-.05.127 0 .025.025.05.025.076.025.102.05.177.076.28v.05c.025.076.076.177.1.254.102.254.203.482.33.685.025.025.025.05.05.076v.025l.025.025a2.52 2.52 0 0 0 .228.38c.127.177.228.305.305.406l.05.05c0 .025.025.025.025.025l.05.05c0-.05-.025-.102-.025-.127a4.16 4.16 0 0 1-.102-.964v-.05c0-.203 0-.406.025-.583l.076.228c.025.102.076.203.102.305v.05a5.26 5.26 0 0 0 .507 1.066 4.81 4.81 0 0 0 .508.735c.026.025.05.05.05.076l.05.05c-.076-.355-.127-.685-.127-1.015v-.33c0-.152 0-.28.025-.406a5.05 5.05 0 0 0 .203.66v.025a7.4 7.4 0 0 0 .837 1.598l.025.025c.05.05.076.102.102.152.026.025.05.05.05.076l.075.075v-.05c0-.05-.025-.102-.025-.153l-.076-.508c0-.102-.026-.228-.026-.33v-.56c0-.127.026-.28.026-.406.025.076.05.178.076.254.025.05.05.127.076.178v.025l.025.025c.025.076.05.153.076.203.05.127.102.254.178.355.076.153.127.28.203.38.05.076.076.127.102.178.05.076.102.153.127.203.05.05.076.102.102.153l.025.025c.025.05.076.076.102.127.026.025.05.05.05.076.05.05.076.102.102.102l.025.025V41l.076-.634V40.3a5.27 5.27 0 0 1 .127-.7c0-.025 0-.05.025-.102v-.025c0-.025 0-.05.025-.076 0-.05.025-.076.025-.127.025-.177.076-.355.102-.533l.076-.43v-.05c0-.025 0-.05.025-.05v-.05c0-.025.026-.076.026-.102s0-.05.025-.076c0-.05.025-.102.025-.127s.025-.076.025-.102c0-.05.025-.102.025-.127s0-.05.025-.076c0-.025 0-.05.025-.05 0-.05.026-.076.026-.102v-.076l.128.08M48.56 47.98l.913-.33c.482-.203.735-.355.735-.406-.025-.05-.305-.025-.812.102-.254.05-.558.102-.94.203a4.18 4.18 0 0 1-.583.102c-.203.026-.432.076-.66.102-.458.076-.965.127-1.522.177l-.837.076c-.28.025-.583.025-.888.05-1.217.025-2.562-.025-3.932-.28a8.62 8.62 0 0 1-2.384-.838l-.025-.025c.406-1.446 1.928-1.65 1.928-1.65l-.05-.025h-.076a15.13 15.13 0 0 1-.583-.076c-.127-.025-.228-.025-.305-.05-.076 0-.153-.025-.178-.025-.913-.05-1.42.7-1.572 1.04l-.076.152a3.14 3.14 0 0 0-.254 1.015c-.05.685.127 1.42.66 2.055.355.432.965.812 1.75 1.117-.685-.432-1.294-1.27-1.32-2.562.787.33 1.674.533 2.36.66 1.446.28 2.866.305 4.1.228l.913-.076a12.04 12.04 0 0 1 .863-.102l1.523-.28c.228-.05.457-.102.66-.178a3.25 3.25 0 0 0 .583-.179" fill="#f2d2ac"/><path d="M47.367 31.033c.76.025 1.27.254 1.624.61.076-.33.127-.735.102-1.192-.025-.482-.127-.913-.28-1.243-.05-.203-.356-.736-.736-.71-.482.025-.837.965-.76 2.08 0 .152.025.305.05.457m1.27 2.866c0 .203.076.38.178.457.177.102.406-.102.507-.432 0-.025.025-.05.025-.076.076-.305 0-.61-.177-.685-.178-.102-.406.102-.508.43 0 .102-.025.204-.025.305m-3.45.558a1.19 1.19 0 0 0 .355.355c.33.203.685.228.887.05l.076-.076c.076-.152.05-.355-.076-.558-.076-.127-.203-.254-.355-.33-.33-.203-.685-.228-.863-.076-.025.025-.05.05-.076.102-.076.126-.05.33.052.532M57.794 39.1c-.026 0-.026 0 0 0m-.406 7.028a12.08 12.08 0 0 1-1.624 1.293c-2.613 1.776-6.265 3.172-8.854 3.502-1.953.305-3.856.355-5.505.152-.965-.127-1.802-.33-2.537-.61-.786-.305-1.395-.685-1.75-1.117-.533-.635-.685-1.395-.66-2.054.025-.356.102-.71.254-1.016l.076-.152c.178-.33.66-1.117 1.572-1.04a.58.58 0 0 1 .178.025c.076 0 .203.026.305.05l.583.076h.076c2.51.305 4.92.28 7.205-.076 3.323-.508 6.393-1.7 9.132-3.552l.432-.305 1.497-2.232c-4.54 4.135-9.54 5.328-13.343 5.556a24.93 24.93 0 0 1-4.896-.178c-.05 0-.076 0-.102-.025-.33-.05-.583-.076-.787-.102-.102 0-.177-.025-.228-.025a2.15 2.15 0 0 0-.812.102c-.507.152-.964.507-1.294.964-.406.558-.66 1.32-.66 2.08 0 .634.153 1.294.482 1.902.025.025.025.05.05.076.05.076.076.127.127.203s.127.178.203.254c.787.99 2.51 1.7 4.795 2.004 1.547.203 3.35.178 5.302-.102 5.784-1.04 8.524-2.917 9.792-4.21.102-.102.177-.178.254-.28.457-.533.66-.94.736-1.09v-.025c.025-.05.025-.076.025-.076l-.025.027" fill="#664f44"/><path d="M38.995 26.087c-.178-.102-.38-.178-.583-.228l-.406-.076c-.05 0-.102 0-.152-.025-.685-.05-1.27.05-1.27.05-.127.025-.254.05-.355.102a4.03 4.03 0 0 0-2.004 1.32c-.355.457-.61.94-.735 1.42-.026.05-.026.076-.026.127-.025.127-.076.254-.102.355-.076.406-.127.76-.127 1.066l.025.66c.153-.355.33-.66.508-.964.432-.736.888-1.345 1.37-1.827.913-.94 1.85-1.446 2.56-1.7.762-.255 1.295-.28 1.295-.28m10.984-1.295l-.025-.05c-.102-.127-.228-.254-.38-.355-.355-.228-.837-.355-1.497-.228 0 0-.787.177-1.243.7 0 0 1.37-.583 2.84.457.127.102.28.203.406.33s.28.254.406.432c0 0-.05-.635-.432-1.193-.025-.05-.05-.075-.076-.1" fill="#e9b784"/><path d="M39.173 34.89l1.725-.457c.102-.482.127-1.065.05-1.7-.178-1.472-.837-2.613-1.497-2.537s-1.04 1.345-.862 2.816c.1.762.303 1.42.583 1.878" fill="#664f44"/><path d="M36.154 1.733l-1.37.305.28 2.487-3.628-1.853-1.497.458.025.025 4.414 5.023.102-.05.406-.254c.05-.025.102-.05.153-.102l.61-.356L33.77 5.26 36.8 6.73l.28-.152-.28-2.157 1.37 1.598h.025c.127-.05.228-.127.355-.178l.05-.025.05-.026c.025 0 .05-.025.05-.025l.152-.076s.025 0 .025-.025l.482-.228-3.198-3.704" fill="#ffd250"/><path d="M34.8 2.113v-.076.076m0-.076l.203-.05c-.33-.153-.736-.254-1.192-.33-.913-.127-2.08 0-3.4.33s-2.816.913-4.39 1.7c-3.17 1.572-6.672 3.983-10.072 7.077-1.192 1.065-2.283 2.182-3.298 3.272l4.1 5.073c1.117-1.218 2.308-2.435 3.628-3.628 1.75-1.598 3.526-3.02 5.276-4.236 1.7-1.193 3.4-2.207 4.997-3.02l-.7-3.246.026-1.827-.026-.025 1.497-.458 2.917 1.497-.076-1.015.507-1.115" fill="#4d9ed7"/><path d="M34.8 2.037l-.508 1.117.076 1.04.7.355zM33.77 5.26l3.044 1.497-1.167.66zm3.044-.838l.28 2.157 1.09-.558z" fill="#132134"/><path d="M48.28 3.635h.56c.507 0 .99.076 1.446.178.025 0 .05 0 .076.025h.025l.05.026h.05c-.05-.026-.102-.076-.153-.102-.507-.203-1.04-.33-1.598-.406-2.74-.356-5.886.66-7.66 1.37-.102.05-.203.076-.305.127l-.457.203-.787.355c-.05.025-.076.025-.127.05l-.482.23s-.026 0-.026.025l-.152.076c-.026 0-.05.026-.05.026h-.102l-.026.025a2.34 2.34 0 0 0-.355.178h-.025c-.025.025-.05.025-.076.05h-.025c-.026 0-.05.025-.05.025l-.532.28c-.127.076-.254.127-.38.203h-.025l-.28.152c-.305.153-.583.33-.888.508-.025.025-.05.025-.102.05-.025.025-.05.025-.076.05s-.05.025-.076.05l-.025.025-.61.356c-.05.025-.102.05-.153.102l-.406.254-.102.05-1.142.76-1.852 1.32c-.076.05-.152.126-.228.177-1.598 1.192-3.12 2.487-4.59 3.806l-4.44 4.338-1.928 2.004-1.624 1.878s.102-.076.28-.254l-.406.482c2.334-2.486 4.896-5.023 7.662-7.407a74.38 74.38 0 0 1 5.226-4.135c.786-.558 1.598-1.117 2.41-1.65.254-.177.532-.33.787-.507.127-.076.254-.153.406-.228a1.02 1.02 0 0 1 .228-.127c.153-.076.28-.178.432-.254.127-.076.28-.153.406-.254.076-.05.153-.076.228-.127l.532-.305c.102-.05.203-.127.305-.178l1.015-.532c.025-.025.05-.025.076-.05l.153-.076c.076-.025.127-.076.203-.102.025-.025.05-.025.076-.05l.152-.076s.025 0 .025-.025h.025a6.45 6.45 0 0 1 .431-.203c.026 0 .05-.025.076-.05l.153-.076c.178-.076.33-.152.508-.228.05-.025.102-.05.127-.076.025 0 .05-.025.076-.025.05-.025.102-.05.152-.05.203-.076.38-.178.583-.254.178-.076.33-.153.508-.228a37.24 37.24 0 0 1 2.689-1.015c1.575-.435 2.97-.713 4.187-.764" fill="#fff"/></svg> \ No newline at end of file diff --git a/web/modules/webform/images/addons/marketo_ma.png b/web/modules/webform/images/addons/marketo_ma.png new file mode 100644 index 0000000000..8f4ee50206 --- /dev/null +++ b/web/modules/webform/images/addons/marketo_ma.png @@ -0,0 +1,29 @@ +�PNG + +��� IHDR���������R-����`PLTE������tsq�y����wi���足�XOs���0&PXXV�����C:`f^�POM���cb`��~!E���V>���ؠ�����������������������!�IDATx^��I��ðe��͟ea�#q�xRL�@��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��A��!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!�!���"|��SN����Ϯ�Fa-,�*JAa0K����\MK2HӼw�_�5�Ok�J8-�3%����%���+��ϫ�%��RP��C)(a��0,G��J����JA ��zP¿J���h �����}o_�| �}(#��q&K�:��N��y���?v����%�J��e\ϔ0�~a�[����`�S[�D S�R0�x�&J�:��F߉�8����k��m�`�i�XDY�W����eɚ���%vk㜧R������Ȼ�od�`���$w�՚TSkfلy��1`���Y,�m�X�ĭk���ѣ����%ĪD\�C�C[B�V�ᭈK�L�I�oE\B�g4#�q Q�+;0�;���рރ��@.N(F�&��ZB��BF�v�$���l�w��A���k5#AK��g4}q�_BTb/#���"4�����}%{0���1B���:LQ.!����`�GhԻS�Ke?"��?��#4N1.!��� #���_�a�zl:B.!�r��п�vN�%t��b�����#�BY,#���|����tyV|���I�%t~�;#�o���I����,c,���/r+F�_�`#��x1r ^�N���n��|(J.�wr�I3B��*�?/����9Ȼ%��pw��F�]��#���(��j����p����p��n/r+F�]��#Lp���=��p �7Ӄ���#<���./�ǖKh���=jF�B�����~��S�%4�\���}�z��>?�����ps���F�ی�#��|�,�%�/������6��3L�%���B�u��/��&"].��%��*���Vd��7)l#�t��E�KxM6�k\ӣu�y�_~�!��������%��O㐚���D+��o�]�� ��U�&+�q�jE����M��̜�@Ua{:�=�3&�-��|/!D�?-mzmQ���6p�X��4b�,�Yk���� ���V���YZ9����d��iAx����#�"�}I5�ur1�+4ž=����98��n���sxg�U������@X��+��`q��f����2���a�d�K���!�_�wB'��L�|�9<,��\FoỘ~i&�B��Rא��� �ļ$��C����P��Z�e�J��g�& �X�6^���[��%C�;(���Ą�D�gB9�co +�i X_n�Z��c]� �7�q�&:��J��7�`@bB9��T���T3�7@�s�t�a�sg�e�I�����5�j���I�K��x5n%�0A�3��]%z't$&\4�b:��fB���_�3R!����&<�P�`���ش܄� �����0���c�i�X1Ä�� gCb08�G�L�\n���o�<̈́�S{�:4���7ل�Ąr�8�G�fJM� 0��J3a��6*� B�O4���6�ă�'�]3O�� #�kR�L��)M}4�m�o�$�$&�3���������ִ<̈́�î�^�jجo��j��P��`��� �bkQ�L���U彡� +!8� '��&|�<�������J4-N3af�T:8���£܄$&3�d�U~�G��Ma3af����!��Ԅ +D&3�@�%1=$2�5��6��J,�N��B�ZO)7�c��ح�"���){���p�:Q(L3a�.�nW��j}7mS��ұ�&� �:�F-���v 0a�eQ&���0G)����\B��D�������`��kڜ�z�g�k��<(�:�yñ��e��fl&�!��[_� ��!4�l%e ��`B2�S�ِ0��i��c�'�_����-����"���\PL< +��9m��XZeׄƩ��6��I�p�2L-��h��CH��w~͠2�sA� ���̒AB�L'��g� m�(~�1җ��S�BGߣ2��1Ei&�����<�L3�=��g�P/Ԓ�G֢K�Q��%��g�Q�f��d����!��]�O�Mhfz�Q�ؗ�p�;"�:����`!�Ei&̿���D٣B�cI�K;� ��|Kf0�D'��e�A�q'�W}� +� �S�fOk���Tꏄ�)&�� +�Y��ޘ�W� tD�YQ�f�<������c��I}�A6���M����Y��7V�5���C>���h�"�����3��N� |J�%���fΩ�/� t$�w�5O� �(�0� S���W�`2��YS���L��e_��Q�.N~ٝBUnB��D+�R�^\[�I8��]�����d�pP����Bp�+7�\��+ȾzT��I��u� �f��G����ᘀ�̄O�C�f�>�9JN�5 �Cb�3̈́�]� +�ax�M�7�Y��LQ��/�h,�E>��N6J*���-[�'���RF�C�e���>�H!�����^�fBIiY�C��f�7�Y��<do}+|�J���1��$�/1�L�/M��2�0Eg�1L��?Q>��2�G�IL#!4�߇X���fBn��� +��?uB>|>�C-U�I�Q�BE��h��0EV��1Q�HlB��!����r7H���G{d���W�֢BB1� �B��T�S�O�K�B��4�_���n����� �>8����!쫬v�*.m&�>�V�p:/�Ą�Bf��P=Z�?���~�טf��.�2w"'�HM�x������*�C62���CA� ���B+�Pי\�A^� y�S���#7��B�[+ ႉ�4�"?̈́���Mṁ�r>/�� �M����O3!u���:�� &�B�e�L3!!̈́�M�6�!$zPn��!�����6��T=�A��>Ą�}�����f�<'�@�)��8�`�\��!TrU�=.KE� ?�^�Jb���xvC�1�Ҍ���'�!��3�C�1���u}��x�>>�Gjڝ�Y���vT����A�gEc#�cU7|��}&��U�$�w�G��B>�`�VOh&�țe�Ok�~�37��#�NW-}�~±�)�̈́�7U�]��1����0&�� +`I +N�������yi&$V\6G%��GL&�d�Q�l��Q�G[���!D����^ELg�˄��=f&���aL�U[�BU�V���(��&āx�f_�}����&�_w���l@m���[9�m����&,�?�0)BT-��LH�2Vk�>|��3a~2��&Y=���1s��(~0�goȆZt�p� s�3�����C�8�2�v*���ܷ kA��Q��F���t���!+{9��u>a�e� ԝ�h&$,SRX ~��0!�Ȗ��l�>��^Q����8\�I�wA�0{=;rx��&L��=��_]�6���]prU����� D�A���0?8��+֙���h����7KǮ�4�fB9���b���{M��,���� �-@B�]ݸesVͯ��L(�p�BO��ӄ���8%�1ai�m��cu;u��:�<��4�#�j�V�n��p�2u�.3�1��<�U�_9"����� �H��7w����Y��+��Y\v�q�����j�F/�n��A�L8P��y�[MH�Hv%�x���l V�pU���l�IDO�5��t&�<� C����B"���Y���qSH�3n�:Mw�kqR�KZY?���fj�}�̈́�QC7&�%n7a������v�+����f!M:�/O���=R*��i{l��J��?�f¼I������߄8�a�قr����qx��,��7Ci�E���{1�̈́HŸ�=��L<�o6a�̈��N��`B�ԉ�wC�O'�|� р$�����̅�bB�Ԉ·B�� `3����o�S��Q��J\у<:�B��:� l&<>ބ���dy!���S���P�ہ�0!l&D���L��->:�� !*)���8�x� a3�x�b�?̈́��V�� D˃P�B}���ӎ�H!l&�H��6!�;<]71�>�%�x)����0<� ������0��|{�� dj6q�fT�k!̩��P�aIg��i�t\93��0��n�Oz�>'fF�B��fB� �A�7��v�ï���19�k>�z�G���6���� qI˻�M\� + @(S6'2̈́!��нՄ�t@��8h ����;���+~2��7&ݓ~�ׄ�D����!n�*@x.����#�C�f�f�?��u ��&��PJˏOS*A�r���!D�����0�����̜����t?Ԅ,u�k�U�C��H������Hp�/�v�!Dax�$*`D��0����[��0�Y�5-h����#L��$�q/�>I3T�+S��0|������,5���3��`�i0 ���b��Xp���C�Y_�_u +g,u�Vb�uZqH������x(��"���F��gܕ�(������Ѱ����y=�T�d�P`.aR��0�/]>B� +v�_Y���&�p�nD��*���� #�)c���:H���C��:H�� m��A"F�2�F� #�=L�I��ص��Fa( +ö��B������[NL[���و��mX��~��KxY���9H��_c^�쟃D,a��n���k�$��X7sP)b ��%<~��w��%�q$"�p���X�ˌw��3���x��n���{��`�[�<؋X�;��؉X����yj:c�1�=X��\rw�`�� �k&}%���o��#` �� R��xe%�l+?Xh��(e�dB>WIZU%��X��̲�ȧ�M�����wY��F6mD6A6VM ���C��Q��m�T.��Kڨ��c�Om0]_UM�}p,���(&��6'o4���NE ��lB���&�K�����U�T��vkׂ�$� +eX�ˌ��Ь�r�V�$O��K���ڰ�w�U��H��m@:���%���ڰ�5 +��4U�T��v[���K���Gh�.(,����He�-&y����q�t�J��/{g��,˄a DC�d0����ew��� �ҧ��7r�v����5<.H*LZ�0��'��A�i�7ބ!k=�i���_�e x/��9����)�ƪuk4P�h�j����(!S�7���F{��"����"=*%U�����g��(���M1� ,F*�KZ2M�9&eȈ���%��c.�1Ny�ʼ����"�����g��2��,}m�B�(a�SQ<��D�8Nͯ#��|�N�7�:�^k� +�ڒz*r��k��VP奄Tw�����A���r�WJ7�����S�2����J���j�5��P��f4�*q��G��0������8m�=�#k�B��FAR�1[��J�n)vS�E�DF�@(,w7�K�����7�t��ݟ}@@b�?愭1��r���U8oh��1}�VR�O�Lᥑ�� az!b�I�� �Ptk�fڲ�:�*������e������~���c��z %5(�Z���yC'� ���V�Ŭ� !qg�HB �^���n�BD2v�P��͝�p���FV6-���5X +}s��T%'3��Y�v,�]l��b�y�v��P��:�z�n5"�����d3������Z;���QI���S�+Z9�Z�ov��1(����l;�.�l�B'b�Jg���s����0�� T����o91��B����~t�╺V����S#_r����%%�H�q���k�{�zW}��#A>]b<�q{-��%��*�g��"�W�B4����!ⶲaz�F,���0(]�1R)���(���5'[�_���4I�0�/���n' +3PR�_�[.閮���� +�[BxGP7͊��c-*)��[<�'xQRj��� +zs�c1��,*�m#r�e�Z���� +��LU ��H4zCi�@R� +5f�s���Œ���@X,)���3E�,Y�Z�w��~���#Fj� ����X��J.����L�+�ҏ�\��ì���$ݨp7��h>)��hX�!�d.Q�S;�A�V�D��uz�1B3G�ԁ������8�0� u[�3��_�ԡg� ᑆ���U�<����Ȥ'�!�;�A91����H���[��"F��!��M�#��� \.>������12#�p�!�CGM<�C]�-�ǃ���* �X4!�xyG Ж{�>q�D�jU�!�o��3&d�J����(H��A���k�⬡�Bd���V�ld�B }�}]��M��fª�D!��3~�1!U_8v�*���C��xCx��30`!� ^����@d�!|�A�ĝ�}�(�~A�#�(�_�!�@Dք�6s�T_��P7���(J�����nE�%�5�����pI�-{�H������R3e�B�L�-�6=G)SJ*��a�?m�Hd +�n��N�� U�C����;q����B�8�h�]?-�&:C��Hq�� ƳA$(���}C8^�d����"1<c �o�H0aG/���F��┅�E�1"T�0��oom��!L= ����������t+�~0iZ�uc�PG�_�a�~΄D��Z�a��~Cxm+��!t}��k���� ����p�\\�f>kB��/V�� !����^�@�K��p\�K�pyDŽ!\u�mܠ�Ie�ϛ��И�z�X��r,�x@�g�!���z�m�0�.ehM��Q3V�/Nf��oM�_��~�2^3bB���K�oi�TEx����؉9�����V`� ���P���BIQ�tv/����g�����0�85�B�.���Xʸp���<�=!V�n�_n��@"��s�?}ĄXIF��!���o��G[{���f"�)�6�$�����efL��0*�z�! +�2!Mj��� �&��'� �&1��u��`�[�ekp�P��6!�W�XRo�O/��>dBn {�b���l�2(FR�@��v\��4|7�$��� ��}��:��Es5I�8��3�s���x(E2�U�� ��!�Kjµ���)B����$[�qPe��ݓR"�S�J�Z���&,�\�j�qbh��V�o7�8����!D�b0#�+Q�q�z9EЁ ��ȤXοD�jv�q2��IJd�߇_H�n�5�6FR����tϨ�aķ��[/Ȅ�W���o�ϣ�����Q�E��?dB|���GQ���$�!,�p��!�-�Φd�55��N� +��tM(�&�x�h|e����(�]I�ǧL������fȄ���U�����I @�̌&��%����#0҅&\U���a��~��PE^��S��9F� ��2!���w�y`S/�2́�� a"!p��0�K����u�*���D��/�z*(�S �U_t;EG�D�a4��`���h�Z�y)��s��*�]2�΅z+� +6��o�]l�#��m}Sm��IC���(��F�27�����8�.N�^�6| >4�Pg����E���*%��1���^�����&|4�|{C�L��D�Dyb���Z� FRBU��b�j@y�S�©�F+W�8b�lY��ew��o�j�H�6��C�27��M�k�� ��[lV�r�H�u�!��!Kp���Y�oBl2p�Y��Q\s��w��0<��xtۮU��a2G� ɐ�4<�����lk�� �a@���� m=��+�*�MH}o7��ڪRR��Jj�YB8��*%��L|w���>A�]r�]�0�ZU��TL�m��~��va>��uǹ�Q�)���T����~f�~u��J�ݻ���ɟ곾��?�݂�R&)��n���(���{w�8��e��JIFa.�������R�b��L�a'��dw1}U�i�lfEt���v��k�0 �V���-,Z{�cV��24���dws�!��=��F�p���V�,ᖳ�����E!B��y�!X�<�X�,a���F�` �d�*D�0w��!X�\�\����~!B����N!B����T'B���������>O���"����g[���}�n��F"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D""""""""""""""""""""""""""""""""_4j��\r�����IEND�B`� \ No newline at end of file diff --git a/web/modules/webform/images/addons/sharpspring_webforms.png b/web/modules/webform/images/addons/sharpspring_webforms.png new file mode 100644 index 0000000000..7ce7b79a56 --- /dev/null +++ b/web/modules/webform/images/addons/sharpspring_webforms.png @@ -0,0 +1,72 @@ +�PNG + +��� IHDR��b������������ pHYs������~��� �IDATx��}p[�y�R�,Q��aɲl��,�i�uRbBNpi��N�:�vK��d���r�m�iWp���;�1��L�LZ��m&i�c�i���6g'�&1��N�X P;�d[6aY�E}p���RWp?��{Ͻx~3���Ź��}�����,.."�T*Ǣ�2���J��P �B!��#=ab�ʱ8�ԙ�o?4п*����c�B!�?�������@��FO��#�B!��FoX|�G����K~ +�P��r��x#c�����>�.M!�B���,�g�~�ܺ�k~���o��צBx/�ٴcr�R��[B!�B!�Q���ӿ1���<�a���i�m�a�������kV�o��zI!�B���۰j�g��D�|��D�b�q��]ۆ�?ퟫT��ڄB!�ȋ��:J���е���� ��G:������ȝ[���M�o��J�B!�B$DڈX�r,��3���M�~���""��$���%�1<46W��ؽ !�B��+��G�G����\�����8�<���6��+[��<�7!�B!b�|�;����s�~[�/��XR����;^o���b�B!�P�5ED�~p���G�Y7��gƃz�b�)��D����w�n��<�8!�B!bW�'O~���o�O��_�.�?:��V���k�0�{�� 1F�!�B�[�&��W���?𥍫"+y+�!�a1���oK���%y�!�B!b����3G��_�-p�6�~�*��Q1B!�B$��s�*�cѓo�4پ�����h������v��_}�M�VbB!�"�F�*�c�g^?�qU�"�5��_J�f�ucs�J��G!�BH +�O�xy��� l��IQn�c�����|�B!�t��M��n\�e5��3BLTK\�൙�J%�&$�B!����,��m���P|_�aB!��]Bl���:�l��_��M-�M�-I!�BH����(#1��Ԇ���:kr���s�J�MI!�BH10%��B�6އQ1B!�B�D���ԭ�������� �7RB!�B!f&"��b��;��OI��F����T�lRB!�BB,İ�bYH$�J�O�%E���IaG!�B �KZJq��(����v\���Mx�1�)F!�BH��X\�%��W�^s�} !�B!���#�&�;�t�}l��V���ù����J�B!�b#� Y��Zn���8�uvX3��*��`"1�a:FLcJ*!�B��v����:��a�qϛn�?!�B!$$B,61����=b-���1�~� +1B!�B�A�W��U���$�!��2z +�:>&Ŗ����D��?���(���\TU�|B��N�Ŀ����ք��P���Ze�B(�:K�n��q������bw�����J%3�HLөP2�"�K�# ޯ&��dBB`'��Nf[��:1��=��뺽0MaF���b-��{cw���o����ЕB,�()�Pd`��۪�1fp2���1��M ��� +[9���D���xZQf�U�-0ÀB!���ڨ�&F��0x������ŏ��}�"�w٩h�d�ѲI:��meFت�?�q����L���$m��$��_��( ����荲}o��IJ��E:��}s�J|0��v��C[a��Rb#�I�B[ٔ���riEI2e��П��2RF�<> E�O�����IMPl`K��е��F��߽��<���WOL+JN��.+xN��Vf%���0OFZdڢ?�K�h��$5qH��D��y���)7ݱƣ�LAK? �S�m��K�\�K_%+�D�^1l���(�B$����R/�a�� �Ɗ����v�`���s#!�t���<�V�TQUKl5*!&a�D$CR +���h":5r�Ϟ�����I*�"��սfp��F���L�rIg�" �L� �L��Tx�Y�Xa3S0�Ĩ&!n�7)��6����i�u��ǒ�>~���x%�"s�Jj0��r(¦��;��"��2D�Klv��P��@�&�V��]�Ѣ�9)����4.b�P�J�*!�a��-�x��k7�`�B!�����rn�;+��������w �D��n+���B+ʑ�,'Y�w�B!�؎(K��j���D��Oܜ~�� +6�~]�au�Tx6�#+� #��/�r6Dؾ��z��XD��B$f�hE�k��M7���e����d��o}�ađ0th�X�Y��T�� + �0�^BH0me�1f��r�������"mPu�ߔ�\�k\-_/�A�1c���n=��u�U*�"��qYE!�H����U��!J.=������BLF'<h%������u�ޟ���0BH�#� +3K�~�"��яk6�:� +(!���/~pW�o�ܴS��,UD�ǒ��b6� +�GF!�����U5�&"!"��5h�: �C���?�Կ�hW`�K$�ds���Px��]��Z��O��q��z�9!�Ȉ���L�B��� +��Z��3-7΅Z� ��..��n��V����w ɷG�&�=���m�X�?��b�*��`"(�$���X�]B!"� S�PHB*��!��ck��*"���/���7N��s;$��RM0���,���'����\V*d��lQUKꄐnG��hVU�N*!��)�n�^�tbåk�}�wmL$%���9�9@;�yp��-�\S2��8CǂB,I�<6��,B�Y�-\�w�Ŷ�x��zi +u�����n���LԲb���*H�bm�KlB�Y���,� �ۖ���\;,���i�/h8�gӎ�]Wl�R���j�͘y�B��u +1B�S��&F3ׯ_�$~m��T��$��R1q�������OH�NAJO��<V�'�[����B�b^����/v�}eb�DbH��HТaw]?�E¶J��eބ" M+�r!��,�N/�ܳm�%;nyY�aK8?t��)I�E�C�B!��Xlb4��o����2,�j_@dm�j���O�~��DB!�B��(��U�+�}C�k������[����E$m��\�L$�P�B�B�$�(Q7r���&sV��OHw���u�W�Gw�>��H��{f$��U �! ���{VJ�7�F��G`)�!�:�)a�¦$a�� +@��S*�j5�_5(6?H�F���F�QZQ�`��w��w ���Ģ��b�����صq ��:�H�0�!f��A��� �58�!�.�s�����Uo�&�eT[u`Ž� +8��[D�-���� �c�5B,�(�f�U5���fE�ig{ư��xZQf }�����I\Y�|����E��X�������\��KBl�"n_y�����7�T�E���Y�/ 61�H4,,"f��6�:�IC?I-{Jy������f���ڱ�U�v�x����]�?R �2`���-`����N��s�};�P?�(�;��[�f�wS�&�Ą�7y�i�ѷ�\�7�0{\��)��0F�Ҋ�1؋fQ穢�f97q3�� 2fpe�u>�m��v��q7,���iE��y���va�,[p�O��8�*&�$� oZ�+y 0ѰV�_�,&���Dҙ�R#VBd���(�b�$_Ytv�)`/���]&��j�Yd�ɽiF8�vګ "0Gz�G9`�'��j&ĸp������՜> �V��v"w�����A��6�Y- �EQU.�U��G� �p���?$� +aY�G{�o\��y}&c2���X�C�>E!����0�A��rF6�9V�B�� ����XF����w���m�;�V��Om�5�$zl�Y�E�^\(�tݺS�/��W�����Eh/m���h'?������O)gq����d�����f\��Iho�کj�Ϲ%0��\P���.�O�y���'�vǠ^�>�i��<��k��#�w����[��=W�H��(V�jfFF� �̨EӊR�0'&�N:��� +gBC�V��#����ա��L'%0iZQ�.�;�[8?V�{�>������G��dg��r�����4�_��p�&b��0?�o��2iE�8�Ȉx"�(� �L[~�#fdD����.��}�Xێ�T�%}h[�Y�� {��̀e0Z��n���)Ö��J7�����W�V��A��}���pVd�'Y1��rH�آ6A'b{ھ���n��A��'y@��q R��fcR���3�t�_Ɂ��8,��n��EU�1���V<����sH,�yF�����#0 +���l�1e�Fᫌ�|)�-�3_���&�ׯZ�k�(�%%��PG��eUf��6'�δ�hK+J*({��$�B�^�]|d�N����6��|�cE��Ny��JW���I�P��xV,�؉�MA��n����%���T=��V�2�V�M_6,:��s#�V����Z����ӊ�Y�f�8OÿE.=C#YT՜�m4��)�f�u �B\u���Hoԅ�^8��=3���v�XQU������XwM�����N~f�;����:|s�������U�� \dQU�E~�٤5�V�87�75j)a���i�g%5�Nӽt���>)'�^p��d�A��Fݮc��E��Z,ƔB$��\�ch�̼x�$�I1��6y�>i!�"bA&E��H�u��ʲ����}AҊ1a�Z�ƅ�x@�P���*٘C���&G�����1�q ���Ÿ�d�q�8���"-��Pem|氉kJ�\��-&ϱL�e�G�0:LT��@ +1C[�rp���ZuP�J�C��5o�X�~}^����Vӊ2cb��|�O�����O���<�S?��U}% {��z�߲�WE{��ª�}<e���@+~P�p+A�Hh�0H@��d�/Z�y�I+J��K��a5�oJ.ܫ��y�K��N��Ў�*AQ +Q7�w�VvD��*���g@�P�}<H}�adzF,�����`sQmX�sʶ�M�Z ���A��x�2�xnX��8(ZTU}�2s���\8aSh��0^�ß����CiE){��Wh��]��(����/��y?KU7h����7i�$4J�r��[�X�Žvu/����EZ�ivY����S�V�aSЪ�ͻ�w� �� :�V��DUi�lFh�F���-D�Y[ul�H��%��7i��s�o���07FJ���6"������k���m���i�ϟK$���y`)�:�Vb�R��r�t�q�76T��@�\��VT�BQU�� +��,�xU�C8,5�S����q�ѮIX�c�/C+��1l2��.�jJ���ff @�+����EU�@K�b�-[%9�^Z�w3u�������M{��=._R�FfLf�&ڰEX#;5ܤ�����>UTՔM{���E�숰)�I�#�b��ü��^�U�{m<'�B����7��ܐD�t��'�a��E)He�]p2�R���a��=��� +X�x��O�K@�˕d�ĥl8W��K�S�<���!g�u{��."�{l�*��M�~<h�*�IT���&d�'�����t�q3ib3|/F$�|����Y�N�.�+����S�l��}/��k6��%��B, +�ׯ_l�DӐ�([/����;����'��0}R +��fm:z�֮�3f�Q��B�v��ݕ�1��+��tQUs~s���� +��9T^N~���x�ߊ�Gޖ��C-�{�"�zE���K�3�&M'_+� +��<������d6C��8ob���+;�h���-D?��˶ǯ�I1��1��.Ē��ֹ��<ptw��d���W~�և���l؈_���؉@M��������ܜ�N�p���}�ظO]q��>Z9M��S!hƛ9T>�uS#�[��X�F�b�����!rfv.�����8)Xg��a'i�g�3�=� �H���Se�彊��������{?����RO��1{^ ���s�����Ѱ�����O�����\:��(S6���>��$:��gox*�+����j�I�j̧�b��l��F�t]8�������n�'����%�ӊR�9B�u����D�fަ��p��L�X���m*ˢ���x�˷�"�(m�� +�(�"KQ�(uĖ�����T���߁s������4?6 ����-!�#�'-��h�����h4)g�Z���� +\W1�NSƥ{����Pe$-�ktX838�������c�.�SU!\>�YZ�#�9�d�1�J���$����|�mD����(���X܉@�B��{N��'Nulb4i�O���}�J���l@5�(�� +�嫔%�r�����d��قE[xms3�z5o2�U��z>���TWǁ�)����9��VAV�Oi�6�[�ռ���Յ'fBv6�k}M��JĽ2�sSܛ�ӑr1Ц�Z�mZ�h�x�M&i)9���$�$7��{6��"�0�7��q��M��.p0d0��^��v�d<m��zI�4� �۫���-��� �:��5�a]���B�M�0e1�H�U��r1k���w;��Ny�5�t>iϝvܑ��k�Kkp����&FS���w���%� �yge,dF#l��29�0_�尿�J��ɀ��r�V��ۑ�6쥾Pp$�(մ��B�UP�1%��=+�p������0��T��O�e�2 �a�Wg�<X�Cv�J!v����o�k��e.[���h���I��?~����۶��:�U*�H!��`��}#� �`��`t��� �.:j�j2�U��=�V�6`u�C{9��1@K�~��*ȇ�Z3�R#���cN���I_�Zd���ޡ��A�ύK2�-y�l��;Jlb4`xm�j<��.��@�f��8I> `Z�T)�0�-��`X9�)tB��:��^1�hX!`�m�e=�U�g{mu�Y���-փ s �#>du�$̾�-rK�5#H{ m/@��#������禂����厳["liC�C��[_�? ʤ5)��ZdF#h��&i�i�U��O� +��:T�Z�c�L�{mo��Z(�j;�ж8 � b����a �_����, +"a��"��-!��g�"�p���K��R9��E�_:�7οx������#\�7w�,�B��d� +H|m% ��-Z��rИ ��)��{��EȂ$���mT]�Z����8'; k�X��������6迼v���x��r�k\lb4 QQ�ӷ��k!9��+i �Zu0tA6)�2������n)�x8�v�#h5F}� �夈��Ak{Ȍ�LƳ�N�3�{m��h���%�>/�Z���b������Ezb����Q�'+~��Ӟ1}�Lnމ�杛hK�#�F���^h{Ȳ~͚�S��E;�����)���a� ���:b�m�6���U���(�&���w;מ��:f@�:]3l�_,Ԏ[����8�y�&����'&��a�s���:�����Pt�����@��J�,��H��K��d7�V"1 +x��Y�8�C�ɮ�"H���F<Ђ�D���~c��������Ӽ���m�>�G Ͱ�{�}��Zv��oZ�J��f:�8}�$N_|�U�c,��w=�-:���U��(�n8����(KtYY��f_���A_��j�}eZD�L�Y�L{Y +�X���j�U���W�1RQoy{�����:���ֹ�:g*�2��l}�D���*ۥ��(�A8��(ٔ��F��A��T�a�%�<�3���#hu�)��e���Y8/�$��s�aR�I�pH��%���y`�9�?5�����A�疒W�%v́�M�f 6��a��^A�;�p!�+Ro�������Ǥ�@�Q�x�р|�R�������5�ٹ�b +h�R�x�o`#��ֱ�}�pÚ����^~�;7_j����wI�mM"b��zزs#R�p� ���l�āFA #�H�άPJ+J*�=�7�Dqy!(�́� ��+��1��+Ł�{��j�����b�ا`���I��(7�[*f�<�� ���=�/��<��wD����K��B*��;IDAT5~�-k?(���O�NZy�����������.�13�$���!�4�`XL�L���JDW�� BT�l���K�I�zh�^R��ߒpc&��a_����/\P�ʉ���e$���"?1���%�b�)}���������[�qC�9�EU�A+�ag/İ_i7�#�+�V�lZQ�ӊ2��ǡ�B��l�19�>p���Vaю����}��,��Hv��������}�;�?V߸R����Ϯ���_���0��sМ��(D9��杸���-3�Ĺ( �b'5c\�j�Ğ����CBtE�2�%�V�/�Ł�)�b,/�Q 2��U��l.�'t��@/�$C���z��Ͽ�{E��;��������T�_lV�~9�����%g���'���kv�X����Z|�ӊ�O+J���`!��eh�=+{A�u�!��B��Ͻ���vܳ��~�=���Wɽ��r�)�Ou�E�U���'���0��bަ�@۸N�`Ѵ���AK9�^IBܳ�YXG�F�E@H�w��_b�k���_ܱ;"���_�k{v����K���tRDX�*�LI$m�1+�b�)7҉��jG��|�Yh�?���#� `w@J&� {Y�9Gsነp�Ջ�}����쟼{�����q���K��%�"bto�D�A1&��#O�C[&� +0����^^v�����H'�Ҋ�ZᛦN�8���#��%��H��`M�j������[��p����Gw[����h�̄�w?��$�6���h���]�%��;a�Т\�U5^T�lQUa��l/'�E��Ȳ�!a�o��f��I���D�L6��R������ow����=&���,�7��%²���Z�iRf!��\<*�,�k." �St��u�&",�����v��w��0��~���E�;dC����)�j���9�0��nt�E�YT,"Q'�m�U��"�+��;�Zy��������X��tڹ(�|����;,!¬xL��jD!v��rP�5�i�$HԺ�/_!����E�HEi��v��U�[lb��``�z�*f�|��=aIX��֡U7̳ňdu������+��&"a��a��"=q��SX�t�����,�!�ޜ~��ꉋX�/ +1oEq�B��:�a�Ǻa�O����B�iՄ�-� +A���aW 1Q���}a�}l8�)�������m�0nj'~�Q+�� �|��%Xo�Y���!�a�00�/�Bz��'�b!�����g��m��3l�ܜ���#;�@wD��c�{����*��H�!�[6�T,���sg���[D~�kx?�ն���~�u��;}�,���\$�<���yJ�cLG$��v!fc1����85�Ҷ�(u�8o&Ĥ�'�b��%.��xaŗtg�����[6l��u~���o��78̈��"��O��:$_�"b�j�HB(�IЩ�٧M_�?&C�J��D�h�H.�_}�g��l��w�p[�D��N����>p��Y?s��H�y�S�H(g��E�&�� �i,�AZ���"EU������P�^�� +2^�N�][����8y��p���*�Q0��'~��|�?|�o,����ذj=�"V��&"�%6i���X1�H��M�>��B,�*A�H�+�����Z~�S�K"lGd;~�geu��t���D":�Hd����˟����/r|0㟓2K'�H�UTc�MD{�q6"���� 1;61|BLP��bۉ��:׃g��Xa�z�-����D"3�H��Jlk�W��ݺQ֛��ڷ�>�����v�I �&v�������`TC�ʦW���'e�;N!�H I)�W��+�k]��T��[6�OS�`� +���:����k0��b%N +}�ޓ{���d_�Yo~��/>��m<�����9����L�-�X����>Ʈq�Y���B�^TU +1"%bo�a����o���<ā�~��ް��ً���1���툰Yh��Ӄ�D��G\u.ѯ��o.�z�g_�1��9�/>��ȇw���D(Ĥ%6�oȴ�N!ֽ�-寧�f��E���Y +xp +��,��lؾ�Uj����"ۍ��:׃s��{��5�=���Q���D"9�H�슰��h +�*\�lǦU�-����}�������o�y$@j0s��l��W�"M����gg�,-1�y��t"bk��7ƴ�>���8��E~����^��� +���������ʹ�O�u���gvi'�s����{��2�������˗��ϣ���%7����%��u�ъ�8Z��Aq�����J +m>N!֝�JΆ�g{� 0 �q� +���$QA�8w�)�q�����ʅ��Ǔ�_|����W����_�r�x����qzb�q�#ƿ��_�����e��Ͼ^=����W�폿�W��_��v��&4�ވ����H1"��L��mB�lnf�����-��gK��P�V��#iE �Be����,�㜿t�{�Km�ϙG��E�h�ޘm���2pI����7�}[n��nj;~�$��/ ���h�X�+����:��Ut��ݙ�V���<x� +��l�f���%6 b\[ٺB� +��b��P�����a��/>j����q�/Ѱ����[�$�=�L$ʵG��� � �_�qqձ�K�j��4t��j����'*A�bY��Й�v�]��ڄ�V���< ���y &����V��1*o�d��E/�"��k�2p���:;зj���|IL�}�\{���}��?����}b%�����pĈ�X���ZWun��>g:gÙ�uY���`�SP�BQڨ��6�)F�H@���GҊ +;�H�%C�^M��S=Ͽ��e[8�^���d��⡝��H|��Vj�>9)�Й�/-?[�J{�1�"gG w��Y}��t��7���B���`:��J�~�a/��&�I�����OY$2�w�1!Ʀ���S?�^������m�2r��n'7��� �y'nX�9&��� j���ѱ�?�^9�����B�a�d�<�j��ae�|1�b2���T��} v"5t�ް�����biEI��� V²#s�2�#'���9&ӊ2�63�Z 9e�R�c��P�����'N��z�M��b�ܰ�&�O�L�E�;���G�����vq��iVL�c�to���%�N���C_�l�֧��WT���#�N:Ӳop��,B��Y\D����}슰�<�sL߀���v��!!�<�iE�����jI��7D�ϟ��}�ϯ�������N�x�U�w��F�s�����Ã�D��k�>Y��=�}�g�*}ZCZQ +2�2+5f�W-�Z��y�d dz��B�}F���(��&��rZ���:y���EUY��%��LIT�h��B^�OՆ�*��6���B��ao�toZQ�b��=Sb,v$��e��HM��)��ݿ��3'�b���xy�M Xlb��Y/�uۿ=p�*|x�$a�>�'Ҋ2-ۉ���:Ǣ[�z�g"���9�q��C^�u~<i��#iE�t۩N+J\��>n��{\(H�}� !"���c�ғd[�6�r�D����6Ļ��DH��v�O�tZQ�n�s� ����dС��~�+8�r�T�ᄡ�S��,*�mx��ց�xߖ[�$��3��D)���8��sk��0qZ9\�EU�����o�1��ʚp�51�ua[K�U��Ww�;m?�t�VP;.�����21'2 +|d[y�ı�x�f��x<�(U7����,�o���R��S�&��$� �KU,��;0�B�\��ݖUS튱'k��W^�F�ǟ�'OK+4�,� �����������U��:ˉ�W�^�u�)��i�*�(���X9VzJS|p� x��{����~�YA��Ri�fsڸd%/S ���Vօ��J�wb���T�b`��~�V���v +��H�"��@[`�)�y'�.b��|=���i�M_�o�H�+�c)Xo<nH�'ߛ�������O����w���~�8�;��]G�&���hà � &aL�Y�qh�Mg���vk2�n�S`%�8a�NZ�)fя 5�N�@ֆ1�gp��>/�[� �m�A ��2��Yyq��b�%eӁ6 +��"LJ�9v�� �'��J��Sb,el:5�RQ����E�)��S0���Cc�qZy�`QU��H�F��E�i�cX��O+��͋9�8Ϧ��3�:�&16������_( �i�O��A��^�7\��Q;pt��gv�)� '���s�|��E:�a�"u(�`�>-}dVL�%��Vk��)�ϰ͗�@��n3���)|�������eJ�i��$)�άM�x�����k��I�B�_�z�ឺ��Њ��%8�����%��AHT�ݜ���SЪ&��q�&���3����5�N���w�P�j�������B� ƒ���V��%C�ڣO"61:c�A�����m��ޕ}����GMR��w�^)qv0���.�y�P}Ud�aR��X���+%I��I�����rZQ��~�x=�Z78���LR8�N |������kr�|�]^�ɋ[)�<��/���4���nb���e�������3B�W9�I���U�I���a<օ�n{�OG%��3��T�塭¥�a��q���;Ֆ��[=��yi~!~ѫ����)k���9�{�<`���F�<�s��E�i�Q����8�Y��&�k_*���9^�F�K��ڤ�y���>O����,@[(�D���`3kB�MK�w� +�v��p�#��x�ۖ�p<N ��BH h�jb3AVM$���P*����T"1�k �P{�ɂ0<s|�:�����v���F�������m2���VJ4�RQU��6o�$��:���$)��c���?%��$.D�c��Yh�ϸ�v���墪���F�����X�H��Uo�S�p� NF�U�j�]��5a����$mY��O��,�^�V�^Xq�c�q7Eq���g�>��5~�G����o�h�D���M7�C[)��^�`�����`3:�&NVӚ����ę���@^T8̸`C� +O�2����4�������J1���ZnV������J���K���tg�ǡ�$�&a3E䭅��ұ>(�\pU�-4ɀ|�{���"�ǩ�D�܅�PdqїR���b�hm�SB�����S+�fgO�a^Y�8d� �&�C;2�˩�%Y�h�X�����ҵ�B��I�����4�X��}�z��}lW�<�Z��^����g�.�)����%IǤ^�U/�� ��Qr�=��¼G%��Y\\���b�8��}�Eܾ����tv�L�s�vD������ >�H0����)Äةh�^M��<)�N +�G��`��>b�@:���Ҋb6�=&R;iK�f�^"��{& �K�-hՄsS��,�#��7q�z\��Fc�̹��P�Q%�swQUK}�]sމ��K+��E��ܙ��V"�>����l����)®�P�Xv���j41�[����T��5}����1՝�F���w��0IW�ԖT��{N7p*��}��eB�-���RQ{��jlb� ��-�p�m1fG�}b�=��.��L$&��9T�lb���)C�t�8 �Ҿ=�\���&y8�xR:և�_m����f/���JS�u`#���!��i��$�B!�t�AЌ���� �ڣO�^Q:և��+�f��Tu��پ��9t&��0�Y!s�D��*�>!�B!�7y�*�b,�΅z�� +����/XE�N���S����+��qk���m��5�e�ه��H!�B��L[J���dq���=}Zt���_�ٸf� +v�t�i +�U��}�G�]S !�B ����k�>Y�vBvK,\DO��^|��K?Ͽ��H��lǧo��FgX%�B!���U4=��xNY���%�pL�Yۿp�8Vɽ/lO7�L!�B��dL��`q���(ܑ��*��a���l�z_���D���N!�BH ��t`��ce�/�q���#��L$r��B!��AZQ���B#Ą+��;x�#���^�e�� !�B� +3}����� 1!� +n�1]� E(�!�B!�E:�2� +����/hc�3�ܼ_���E!�B!�r�"�b1�B>7"{�0��}X�/}uD�0B!�B$C� 3��MUu>�BL��2�$��V���؝�����~��j�nVG$�B!DZ�a �7�c_P��^�>61Z��_ۿz��gM_��5vmKbϭ� ���fB!�B�%�(�����"�bAV��oſ�m���Sg�?s/�_�[��"�i'������1��� |�:��`�B!�H/��ͤ +�D�B!�t~+��I�����]7Go�����M��A�~�#�B!:J +���Z +��l��a�b:�����n�?y��ް��=�WG���)*�%סUQ�L$�r�B!���G��eF��}eQ�~���S�Y Ⱦ0߹��ԗ|Y���/�:��oX����+�\�}�uk}_����i�1B!�B�<)�1������L��%�Ҋ��0b�ԩ��NZ�__7��O�>��_0��o���O����⃛VE�+W���V�uP����?��D�ËB!�����m����MUՓ���yXG�t���}�~�����$��_=>W�D$����Ͻ�[�7���(���0/D��*S !�Bq,|��g�HZQ���:-�D +b@֦�� +�9����[m�(�QD#���3��B!���bW�Dp9Jh�?�YhU'E>���H������'/�#�B!��D��G�J�3��V�f�i�Yh�Do=��}&�B!��BQU��v�� "����U���jE���B!�B�c%�ɴ�d�ʈIriu��Њ��u�/�!���RG���l�Bߨ�y�N��D���1�.�&X�]�ӳ���;L!�B�Q�0���̵ۢ��b�B!�� �.W:����:���ӭ���#�B!�t�8�3�O/�˝J9����6�泶^�����IEND�B`� \ No newline at end of file diff --git a/web/modules/webform/images/addons/vipps_recurring_payments.png b/web/modules/webform/images/addons/vipps_recurring_payments.png new file mode 100644 index 0000000000..f32f8b9d5c --- /dev/null +++ b/web/modules/webform/images/addons/vipps_recurring_payments.png @@ -0,0 +1,237 @@ +�PNG + +��� IHDR����� +����2U��� pHYs������E����;�iTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="" + xmlns:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" + xmlns:tiff="http://ns.adobe.com/tiff/1.0/" + xmlns:exif="http://ns.adobe.com/exif/1.0/"> + <xmp:CreatorTool>Adobe Photoshop CC 2017 (Macintosh)</xmp:CreatorTool> + <xmp:CreateDate>2018-02-01T13:49:10+01:00</xmp:CreateDate> + <xmp:ModifyDate>2018-02-02T15:45:13+01:00</xmp:ModifyDate> + <xmp:MetadataDate>2018-02-02T15:45:13+01:00</xmp:MetadataDate> + <dc:format>image/png</dc:format> + <photoshop:ColorMode>3</photoshop:ColorMode> + <xmpMM:InstanceID>xmp.iid:5dd81576-c032-494c-83ee-7f534d335ee1</xmpMM:InstanceID> + <xmpMM:DocumentID>xmp.did:ea520862-9390-4b2c-a412-440ad584f54e</xmpMM:DocumentID> + <xmpMM:OriginalDocumentID>xmp.did:ea520862-9390-4b2c-a412-440ad584f54e</xmpMM:OriginalDocumentID> + <xmpMM:History> + <rdf:Seq> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>created</stEvt:action> + <stEvt:instanceID>xmp.iid:ea520862-9390-4b2c-a412-440ad584f54e</stEvt:instanceID> + <stEvt:when>2018-02-01T13:49:10+01:00</stEvt:when> + <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:d269c944-0cbb-475e-94d4-d2d2380e501e</stEvt:instanceID> + <stEvt:when>2018-02-02T15:06:42+01:00</stEvt:when> + <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + <rdf:li rdf:parseType="Resource"> + <stEvt:action>saved</stEvt:action> + <stEvt:instanceID>xmp.iid:5dd81576-c032-494c-83ee-7f534d335ee1</stEvt:instanceID> + <stEvt:when>2018-02-02T15:45:13+01:00</stEvt:when> + <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Macintosh)</stEvt:softwareAgent> + <stEvt:changed>/</stEvt:changed> + </rdf:li> + </rdf:Seq> + </xmpMM:History> + <tiff:Orientation>1</tiff:Orientation> + <tiff:XResolution>8454898/10000</tiff:XResolution> + <tiff:YResolution>8454898/10000</tiff:YResolution> + <tiff:ResolutionUnit>2</tiff:ResolutionUnit> + <exif:ColorSpace>65535</exif:ColorSpace> + <exif:PixelXDimension>1921</exif:PixelXDimension> + <exif:PixelYDimension>778</exif:PixelYDimension> + </rdf:Description> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?>�nw���� cHRM��z%��������������u0���`��:���o�_�F����IDATx���w�Ve����Ö!"��"�Ž���Y6lgf�l���˲��ms���L�{�8PAY��?Aϸ�s����~�dp_�������{54�Vs�������(�"�������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`�������Q������(E`��������(���h#]�'�-���]�ڭGҥkҩK���t��mJ��$MM�Ӓ�$S'%�OJ��V�:m�L��ӱӛװ�'��*�W]�%]{$��ޤCc��oL/�}��I���ӓ�'&S&ױ���k�>:4&=WHz�)��n=�W���z�n=�7f�&�̚��z#�1��Oycf��S�w�2g�|���M����BVX9Ye��ߠd�U�_WX9�b�k�-��55%^Jƿ����2&�\����g����t2$�?8���kX�U�>�����ߖ6����W_L^y�����tq�9ݜ��h�X��+)��~�%+(��+$ ��wϘZ<��������r2ql2��d�����Y3�@+jh>b�f1������-Ym�d� ��7L��\�X9S+f�J^|*y��d�C�S���0th, +C�a���\+�R�����8����s�&Oߗ<}��0�����!&C6J��X�x����v��ı���ɋ��s��ǒ�,V���������l�m���k�u�"J��9-y�䉻���(�YQʯs�d�͓��I��,Yk�=}��۔<�X����w&�R�6����Xz��2Yw��ޤ��X�s��G}<u_��=�K���Q������5�`�dӝ� �%�,�8�OI�9y��䁛����=�ACC2x�d�]� �K�٢h[6MME����n,VBY�2$�d�d��:��A�e�_y������o.�����-�"0���$��;�j���vI�.������;�N��O2��ԓƎ�C+��l�K���j^}1����Ϋ��;&��sz���}��$}�d��c�oJ(Ϟ%��P�����.�l�w��{�/Z��skh�[������k� +���Cѵ`��$[�,�[&���~ur�%ɸ��A}h�l�s2t�d�]�Ӌ���#�����s}2k�L���**�x�d�Zrx�Y3���ˡ���-Yi59�o�s�}#������Hv~�3x���U���6��~ �jϢ�3��/�Q��qA��1Kn����+Tw��OLn�W��ߕVMv9,���O��y��v�5VR��%km^<̱��Eg����E7��/O��>1��@���9,�I{�g�l:4&��5鵂,�w�ד��`i���1��\���3k�=v�U�w?<Yy��vi�y2��ɍ�XiS6"Ym����Ǔ�X�ﱡC���ɞGm��Kj�k�����5��<h_=�$;��vx����hi��;F\�L/��:���=�&S&*�-����K%�2Y�c��fN+�<@Y���sd����.��,��yJ��/'ם[R�L����U�{,�7Hˢ��ɾ�(�����s�L�[{�d�#��:v�GkYa��~��/�����䉻�T�"0�̙��rY�A� ;H�l��+�����b�(���K�\�<ZR��������K�+϶�&��y��G��?j_Ж֡1�����mɿ��<x�\h= �-�H��d���hK�������m-�����I��@�)���+/�*C�U�M^xBe����^rx����d��v|�e+��S������On�8���E�E`�u����dߏ�^�6خx=qwr�ϋ����46&;Z<4��<��Z�%��6yiTr�Yɭ��o0Pj��@����cw&�o#�����E�� +��}$y�19�P�&�_ܿ�+�m5v,��;\<`z�Y�DÒ�ܵhS|�g��=�����*��ߋ���y2�A��?��ߓ����j�5�L��ir�璋~��s�L�RR�4�|E���v��ʡs���j�U���@���{>_�M��Y��S�����aE!��?&�g���!v`�����y��Mv,^w\���Ʉ�d����X��z0h����$�H��~��=2JŦH���&����j�U�!ˡ�5vL��G�9=�� +9�P��N~rm�fQ�vt�V�~�m�aQV[/��yŊ4��2t����$�S�҆w���)%G���\o��4���ŵ��J��JCx��Y�M��aa� �z��d��r��mW$3����4`��p�%��ʣV��j���+JV"��k��#�LN�,YgKyԪ�]�C����?��{Ƀ�[a��_$'_P�_������O-��"0����`a��r�n�2x+���G����|�� +'�d��9;�(_��&;%?��h����PV�|���C-��ɃB���<�����C����'%�^�^_@}�����N��[o�w_2ֳƎ�V{�a~�>��~X�ԗA�$߹$y������Qo:uN;Η�TW��O}/9����Ֆ{-�w:ă�U7d��;�,V�w]Ne���w.-�w��P����q�f[Ou�-���Ϊ��ICC��'��^�xX�T=��a=��u�L�e�ˡ��w�{&��a���*���b��S.NV�PU���~>9���V$�uFx�;�N�M��[m��V]�J+�͚��r�����&'��|�Va�Icc������Ƀ����7�M� �G�l�}�+�\%�HN���'��ղ�z�����VT���~#��29�U�~��C�Po��~�ۮLfL���o���/�7�Ie5d���+�����k��*Z�z�����]����$��ʣ�v9,9��d�MdQU��-����b�`�:�,��bʊ����� ?O�Ծ}?�|�o���dQv]�'G�4�}�Jy��iQ0�`;YT��,����,ʦs��?L>u�B?�m�/ځ�d�E``��<�<u��j�}�[Vo����ɨ��@���99�'�_�j�jvx���T,��N�$�:/YaeYTɠ���\�3h��<����9�/I6�A@MS�و�e�V=z+K�ZA/伶��ֻ_��$ۿGU5h�仾T�NuhL>���3?L:v�Gu�sfr��Z���%����ݼ��z''����QY��{{*��~u2�u9��v�ˠ^l��V��53��r9�P����zQ�B�j�ޫ�Ru�Oɂ�ѹkQ�sܒ$}.9��������ɉL������!�跒�OJ��E`��͚��r��j���6�Ծ�����*�>E�Ԟu�JN�0Yq�,(4t(VT�S+*�}=�O���d�d��6ۥh%l��:��Ӑ|��'�kK +���v��$E``ц_ ����#�xG9ԺN��-v����Z��.�W��{��A�W�l5��O���&ko!�n�!�^�km&�Zס1����>)�ΰ�/�U����o"��'�g���n�m�P�)�y2y�^9�P[��?9�7EUx'�o�|��d��eAm�Z���=CY��}���-�|WYԪ���/���p�,X6�풜�{�`�f(�n��2x��w�ee���8����lPr�ϒƎ��� Z;9��bUԂ����V�,��]���kpn�%'����Z��*5Cxw��;�9M���M��Z��f�Jn�\�Ԏ�J>��b�WX\}��Uו����t���`�uhL>��d�ɢVt��d��eA���B�$@;�~��xWo�HnV@z+Mk�V����d�d9�P;�P +�,�ymU��D��VV�f�yjr�����:4&G��M7�g�m�/��8����ǝ��2BK��l��rr�E +����Z��n����̲��'��_�57�m��J�7�i����Y9�����?L��[����gXs���'o`�<�X2�!9̯S�d�=�Ps��^�<q��h�nU���0-�[��ij����tx�=�i98!��rh��l�9�6�O��h����q��ʊ�ڣ��Z;9�w�E�e�X�h =`MYк:uN��m��z��e�d���Жv<$9�(9ж��D�����9E``��zE2s��ɎI��r�% +�o�3;��R9�оz�+Vlv�%Z^�>�����8P�����?J��F�����lw�����$�:]�����l���6�,��Ӓۮ���;&[�%�Zѹ�V���d�d9�Ў?��%'�.�;@��>�����(CK{ߗ�m�����C�]�h=}WI��k�R�~:4&_��&@�^zD�,�e���cӝ��v�P+���(��,h}+I��]����a&���h}��/�*��,Z+�c�,���Խg�峒��e� E``Ɍ~8y�9�o��^}�P��+�yƎN�S�����l��h;ko�|�'Ū:XVC6J>�}9�v�.��xN�b��u���Z�Ɂ�0` ?_�6���F\ ��5tH����u�l���~A��,��Ǧ;-T��m�Wr��r`������SYж��Wt5被A��b�d�Oȁ�2t�d��hu�������d�9�o�A2ho����<sf'7]"��� ++'G��h ����$;"�NCCq [aeY�>��}���-����'O���C_M��D@�R�܌��mW�a~�l��YI�I+�7�sm��$9����/�ܞ{��O|7Y��,�>�l��h_[�|�Z�gA��@��7wL��� @�R����d0������C+跜�Z��N;�x8�[��ɗ���+ߺ[%�+j�!��`���}�m���m�Փ#�.��(Kgԃ���a~� ������=�<z��h���;%�JԎVN��YҡQ���=�N�j��~��$�%>�{%;Eԇ�O���h����~���Ɋ����~ӈ��f9��>�BPk6���h9��V���/jK�^�Yt7`��I��@����I��r�Z�"0��n�"�5S���i���9ɍ���`~!�`[9��i�F��_����v���@}�b�!m����,��S�;�����Hm{ZA���k�)���0���䨟&=��P���h��.rX����ԧ�):�����"�������<�o��2$yy�,ڊ��oy��%�<8�?8�Jҥ{ҥk�u�d��d�d��d����g�q�&^�@-�R�ӓ�k ԩ��0��ɔ��x'����F}��i�W�Of͐�"��e�Խɘ'�A��b���%��Zm�k�d�]�$��$�*XR ��%M��2Yw�ۋi����{�GnM�#y���y�|j�V{%����/Y���� +ɑ�&g#�w��?�89P�VZ5y�QɅ?��"��e7���ߒ�<���V6�-��EI2�B'X�oX<�3쀤�e��vO6ٱx%�ı�-�'7_�����j�G��<|[����l�O� �W�⭶�#����~2yQ������=��ew�e��7�0����UוC�|��s���)��b9��i�P|qv��i�%~�e +����Ɂ�M~xu����t ������y���u�Ū`��oH�B����99��r�Z�"0��OI����7t?���ݓ�v�C��{��,�( ɶ�'?�6��/��7oۿ�-������d���@{�z�b%@=�٧(��v� +�r�r�d#�[�Nh�ϗ���;@�M+�7��@�N�l�|��?O��־�e����~[��67����S�B +@=�f�d��0Ͼ����oݬ�����2��;yi���Z2d#9��^�7�$^J�Y�V��$�F�+qk�f�m�:*��h���C�>ɡ���_�Fҹ���l��(籽�{��,E`��X ��m��Ak� +�M#.L����7`�仗$�Y���v�v\�'}V2g��a�#��Q��A��������/���"0�rn�4�=K�l���VЅ�M� ��>�|�d�:��~��*9��ߧ��^�c�v�ԯ�?��[����=����8hisf'�^I�}$y����[�{�[��ȭ�����ɋO'�_M��d��V���A9�K���3urr�5ɰe�$}WI��4y�~Y�4����(>���O>~j���{���O�:6����-��Y���ɍ���?�:'G|#��g���@箎���ܜ�<:�P��3���ſ��R2}������.�\�;�x@���d����C��M��]r��|r��������"0вF\�<��RniZA/x��?�|���}��:'_�e���[�e>���'%w_�L]@��b�d�]��GVo�V/�gMY��}�����7mr��l�Zx~]��0��i�Ʀ�z[c�W�d�&W�#`�)-��;��W"�$�z�䯧ٳ�%m��V�I2ql���r�$��#�]����C�O��z�y�Z1�բ���g��1^,~o����IɌ��7sZq�v�Q�{����=�_ޭ8(�7�X3h���� ��&|:��g���װq�%^J&�M^{���M�\��ܜ�~�xu].��X<��c��իo��ߠ�5頵��V�J��|�+���*}��w@QDdў�;�����������^fNO��x�����Ŗ>��S?[����?�\wn2k�,�%�����d�ɇ�*�$Y�_��6ɣ�ˢ�l{��d�E.�$�z���,�x:$��QQXz�f�mm�������-��<�HQ Y�?cޯǾ�o2x�bO�(^]��������5k�/�aYL}-y�ׯQ$�-�5l�7�y����u�V��ڬ����eQ(�}\�X{����yaQׂ����pQ2~L�����臋�%�,���Wl��a���W�r�y���HC�k5�hQ=�$��%��II2���ߒCK��39��V���˻$^vLPm����|aҥ[��6������rQ� L�)�z��#ɽ�'�RM�6���hl, +���T���������_�[����g+u���9y� �÷�^��A�U�װMwJ6��綶6~Lr�^ɜ���w/)Z� /'��C���;�N���|�(����k��$`�)���3����L�L��3�MZK��E�Ԫ�oD���ȁj��=9��ro?�Ҩ�['o�0��@��<�x���$�_���8`�d�}�a�L�k���G����"p�x����{Y/j�n{��;�j�d�~�FÊn'�����\���w��W�X <���ɿ~���O�j�Аl�Gr���C&$�=���XL��l��)b�Z��6%+Ԟ���es�qn���XG��l�C���s��w�b�.j�r��}��C-{cF�2�O�N�����l���~_��<~W�e�÷&:�A�vuj5:��=�Us��(齢�VM����o���\uN�>����~g�Q�L���������j�݉�3dâ pӜr�s��V{������#�o(缿�L2���Iɺ[%;W{�WXtX8"�Zţ�%㞗��PX6�{&� �I��o�ն�v�.�Uc���l��9�e���Jr���/�X�G?\cx��w_I��Sr�ϋN3�����Cj˘�����|i�䂟$c���1Lx9����ݒ_[��u������s�]��3�s������Ͼ�)���I���l� �b8�bRZGss2i�o뽋=MXz[�nO�$����W!Ԃ���ȓ�5�O|7����Ò�<�h�y�.��O�M��1�>)���ɗwN�~z���m��?-��K����|m�d���7�LMM�m�N����/�a���sd�������/&'�?qA��=ql�5�߾[���<�?�:,��M����K�}S6?�X����d��\|U���kVk�+L������5sZr��cw+Z)ϙ]�1Κ�����q�'��h�J����d�~r�}Lx99��+�%w���PF�\��8�X�L���/١��s��^�u����'�S�_�ZE��Ū��}�h�_E[���Z,E`��L���}�����,-E�7&��(��s���/Ts�|&���1����\<�x�ɕg�Ҳ{cF��&'�Y�Y�bQ[k��� 9жf��\���Ľ�[�H��Vc��\�|��be��)���������~���՝�1O��ɯ:Ɵ�;9��܊�Cc���`�."�Z���o�r�<��VЅ�Ȁj���ʆ*��-�x'�KN�P���T��ɯ&��jrʡVԵ��O���m㉻�����ɬ����>Oس(���V^=�j�r�m���'����ɔ�����>X�B���/Zx��@�z��d�9$����,���t������r���9�����C�n}��\���ځE��F=�|�ɿ~��m�Dz��#��*Z٬���}(��<�L,Za�qTQ�b��r���Eদ��/$��9��j�+��G�������滙�])��yn2���o�A2XR=zk�$7\T|���Zw����V�{&��9�oʄ�G�(����ʹw2{Vr�ϊ��\6{},il���ŧ�o��ػ\+��s]���_YzknR�C�I����7����<u�c��L������������{�])����l�kw9,���� +���8��ʶ��d�!I����߇n��;�@;�#���g�d�=�@˻�ɷ־}Q�NN~��b��9�屴v�`��3p�����g�,�O$�9�Zc�d���*�X$E`��M��{���S�b[�6����[�W^���Сx �d�F�oPe��#��NJ{Lm��ə������ci��A�r��&?���{�Ly�k^��^��}��������&=��g<�V�|��X\�\������ܐ�p�yIh�ϓ�<�(��գw��09\������8鵂��Ҫ4*�yn�o'>Y��%u���O?�̘*�%�ᰤ�`9��fNK~��?�Œz��b���e��:vJv<�<��J���豤��Q��X�1x��@�x�������v�)�ű�^�a��������2��f�Ȁ�3;��1�Z��L�sx2i�,�DCC���r`ټ>)��ǒn��Қ86��d�4v�Pq-+��kUk�F\��ǒ��Fr�7�3�k$�o`ށw�����ȋ�O�n���V���S{���u�������^�Tˌ�ɏ>���_Y,��H��d�s�X;�t�,�Τq��G�t�lf�H~�����d�$���l�]9Ʋ�՚�ۯr�.���L:�v�9ޑ"0�vn�(��u_��š��Λ�e�C6���:uNV�PTì�E���d�Rƿ��zX2�IY,�^+$[�)���W�ӎH�<%���4'��I:C,��>P�{�*m���d�K�ݥu����@����e`�\��3��rH��f��rX���/��ԡ�z�Kz���[���(�Y3��3��W-m���{Q^Vٰ�^����H���^!x�m�{ҵ{}�a���5gO��]������j�u�~�z[�s`����5�$Eqs��(VK'ן/Xy�f��2���6%??� +��4eb�&㞗���d�d��r`�̚���EvZǼB��e�8:u)��g}�Wk�<���.�muƺ���X(E`�m=p�v6�l��މV����\�X��`a� ����S�o�C��oLH~�e-�ֱS��/XY�s�_��~X��us��o'�����v`}��V��|M�]VcG'�R��n�G��`�Q��� ��C���M�g%9,�V��M�$sf;�w?,L�Pb��m2\7�63~L�O'o̐Żv�xw��Ar��rh+s��3��<�,�͆������W��|�>�1���G5��w�d���7�6��@ۻᢢ\u ����aa���/��zh���\�LI=pCr�rhk�N~��bU�l�m=�ɢ�ryr�����f�(����,����;T�%���Z��rd2��j�u+K��S�ބ���o�CR��ZC��Ɇ�V;���L�=�X�$��]ӭ�(��c���K��r߈�3�( �tᝍy*����^�LH~�d�,Y,ʰ����w����/�xm �g%w]S��n����Fh#�rL���Y��~��z�����`�w�2�\��N~qt2u�,��e�N�.�E�b�v�f$g~A[���̃ɟ�i�-�%t��0l˩ʽ�*C����7��E`�}�C2q��d��d0���V{�S_��S��0�E?K�}T���9��Ʉ�d�N�ݲz-Iyw��a��3r�7^R�X���d�]��w�V��Zi5�kKy���*�lg� ,@hs��.�C�lg���o���jgp�%Z�����a}I͜&��;���(�Z1}Jr����Cc�Ɏr�Mߒ\�9Ԓ������������Z���Vt��g��ɨ�1֍ݣ�o��"���pq�ڠ�V�0�� �$ZA'�p��aS_���̘*����NRp�5Oܝ\�{9���v���Ӓ���ښ����Y���v�4v�C�[{s��'��87�6���|�Oh?���<x��d�e�h����ˣ0?E��{}�(����'��\rf���rX�Mw�7;o^�lsT���?��9,L�ɺ[ˡ֭2�~�o�EO�[�qv�����"0о�_ �ľ��V�I2���o�8�p^����Ǔk�,�Z5gvr�p\���Т�����r�e��2���[BWq��-�p����+��ÇoM��K2u�����@��x���d�~��a�:ɠ��1OU7�����69��j�x+��-�x�P�VҤUgM{��s�=?,���t碋���S\�jݬ��9�L��X��kع߫���Q�yv@2�B�kK��r��r��w��ɫ/%/>Utky���Qů�ށ"0о����%���,�= ���ꎿꭠo�,������j�����]e1������+�V�Ծ��H��?��G��`[T�=�Vg�z��m�W%Cu�Z��5��������=ϜV�yZ�d�Z�gh)/�J�ޢ���ܦ�s𘧊��K����3�|X&��@����=G% ��a��-k�?ߵ����O&kn"��=���_Ms�~"�z1}J�ϟ'G�*�� �(��͗�U�7q �/��(�b��SY�o���m����;����QCCr����}����=W[E�9��g�"������ysuo۟�Bh��$�ܚl�}�sXeH�e�臫7���V��w{��{��������r�~]wnq�G�qA�LJ��K(4vL�ټ��j���j,��������9Y�o�m�\�}N�Or�9���Z�Z�f�* +�c��_����s��m�V�Ԇ��SN�m��fx���=�#/r�â<z{�ϑr���;e@���Fr���Po�����Ǟ%���?T�j�6��ի�6�����gݭ���Ny���ԡ1����i*��e��J���o�H^zz�b諸x?�Ťy���v�Ԇ{�O&���^��9l�r�O�uc�g�d�-�;��_O��5���ۋvX;�"I�)������ˡ.�ׯK�{,��,�YwkT�mW&㞗C=�9-����'�b�Ak'�VH�L���;ql��lUt��o��e1�����_��j�QŊ�y��/+�5G� Ms�.֞iŁɚ�&O�_�1o�O�����2{����9-y��d�]e�<7�o������Au{�i.�A=�Y̳����ߐEU�F��ڿ%��j����Mr���V��$�z��ɨ�Kk�kK�߿>�X�����ˣ��*V�z��#��@�yar�g�]L���U*ݷ��=��>,�������)�@}��d�89ԳoLF?��XIҩs����wˢ*?�_|Z�l���?&�'�y�ݪ�������Ψ�c�峒SK&���]�__��Oz������+{_�$3��)����nO6خ�9l�r����_H�[A?u_���}Xw^�|���r���Èԯ��Ye�ǣ~*�y��D�*����`�?���t�&�$Y}��y��g%����T����?��ߒS��6d�k�7$/=S������?O�"��:���)ן/���%�lQ��V����a��~��6��&�K��X�>=qw��r(�ۯ��{~�T@a�1�o��`�����0�� ��:�z��Q��jɷ�O� ���z%��s�W|�|�~`�����rϵ�fL���S�qV���i�W9�aI���Ş�U��َ��u�ʠ,��$����Y}T���ѩ�2�T*� +�t�z��ߗG��$YeHr��ɐ�d�")�e���K��^I��r��ꭠo�<yc�c��ı�]A?y|r�"uj�����ʡLF^䡔y��t�V�Ԛ���/�C��<:y�69�SO�D]E��{���${!�ޑ"0P{�k �^+$�|o�ʷ�v��R����J�����,�P�n��h�Ny�>)��z9$E��V��c��Q.#/��<����ه���:uN�<%9���(�o�Ԟq�%��.�m�/���� +����s��Ҙ<>��W��&#.4�ԯ�.�A)��i�}�K�*�r���ɴ�rH��A���IfN7go��ɏ������w�`�(�i�/��՞Ic�r���j�����������*��M��_/~�z4~L�Խr(��nN&��C�V.�9���/�ٳ���-����A�mJF�o��{��c''�]�l��<�H�Ԫ��I��V���l�S9�6t�궂�9ݗ �����ߞX�����*y�sN����2(��E�o��kʠ����לr�ЭGҧ�����0g���zɱ�IN�8�l�b��*�O�6͞��t���W�qU��mW$o���ًO'>��c|����ߘk��]���v��2H�U�Ƞ��Ne���k��Poױ��4_�c�M������d�O$=z�����ڥen�§s�r����È�XV7\�\wn9�6���_���6y|��}r(�Q$^�C�^I�>r(�{�K�ynr��$+�^_?{��������̛�/�<�z��Sg��T�"0P�^� Ϯ�%��\�1Uy�TgSh+�nr��r���Iɏ>n[��7_�S^��Z~�3@K��y��d�+r(�;��$��Q?�u��b_z�L�ɶ�'_�ur��Q?I��!&��Sj��e�m�ZBW�l0���Mɯ�\��W3�&?�T� �;_�V�7� ��Ut,��o�A<y�}���v���lYt�l����?+ +§]�v|����0@�tP���O��o%�Ux�-vO�v/G��*���9=�� +�4��Y3��|&����j���G�(�@�kn.�����+��FҩK�s��Ut,�Gn�A45%�ޖl�W�sPgװ�G�F�oZf ���y�=_���@��c�s�yX�N)�m��͗%{��t�l�[rۿ�,U^|�U��i�ih-�f$g|.��w�]�������'�N�=g.)��/l��ߙ�cw$��T�VYݱP&Ms�'�CU<p�"p�AIc��دS&&ݒl���5�_�x ;���?&y����G���&�� +��)�o���.'�v*��q|�sZ[SSr�7��H>��⋬zp߈�7'$ӧ�Cʣ,-�Y<ݬ��j��2y��rtbb�aUס�(�}�~��W(��~����L�>�X%�ܣ�{=V<�:�I^�5B�}/>�<qw��V��`���=��N�[A?�x2�A�2��k��<y_���&����9{Vr�O����h�e���2��'�A��2(�5�Tɫ/&^N��R���J�U��ڢP�n���ҳO�Ѱ�5Ϭ��O�Y~����g͐@;P�È�]��)�r��K�w�^|�s��臒����d�O$�:���{��䯧&/=c�(���A�<�H�ƌ�K����|����7e0�~T͓�$�P��_����mW&;���[K:wM�ܤx��<�X!��cE���+ZJ�:��)���k��~�X [U�P�E�~��5#��r�0���o+mG\�|�+�6���{�l�$�^o~(�I��W5MME�l����� +��q�;�`������݊���z�y�����C2`��5�y6i�� +Ï�=�X���.I�-F��f$�\�����f�ᰤG�d���{��WK�lT�y���� e�����yLq��ɶ������O�<;��ʤi�9��O������_I��M6�U��E}���`Q@\}�W��\���f���{3��o����,�y�g(���ԏ�T��ؘ�/����{��T��ȋ��P+F?��u\r�O��>�lw`�Ҫ����1#�����&��*���'dP�klխ���`�S2��ϙ]l�TU��z���N>�3�pYt둬�u�iN������{�`1(��'���K��ݷ>��U�x̓�(�Z4��3�א����*V� �(i\���q�'Oޝ�;<y��d�LyS�{6���Ge��F�j�S������A'�W%���8�q\V��ss� ��o��^��k'�h�̃�xE`���8��E���&��K^_?��j��Vs��_���Z7��7W�u�Q��I���k����ѻtM:uM��MfN-�:�6%�\�����ŃJ�t}�֢�RM�_,���zT7�zl���Y \]�?^�"p�:] �Ԕ\���#�rWM�Պ��{/x?2����w���&Y��ԗۯ.n���RC�����Z?﹪��g�Ln��9uu��H��xKg��Ҭ��[�}c��\�1Pc��Ae�a�&9�5� ??��S������o`��v���gL-���Rtjzy���J� ��̚���jg��~��~�� +�����S���T˸��r���FU{���r��:�A��z��j��s���y����ü]��f�$�F���&g�H>vr���˾@P�ψ�=�u�L����Z�V�#/r�P=�� �*�l��߽�c��͙�����j�s2�^���p��C��~��=?�|���Y�'��~��NI�F����ԟ�K�y�����ڪ��~iT�n��F�ڪ^@Q.�5��YU5��iNůcu\njJ�~��ŷ\�d��''�����䈯%��'�T���4�⫁�ۿ>�gU[AW�����Q���W��t��A�J���a����a��G&��Xf��^1�����H���d�C�N]��=E`�>���d����E��ZV�Vгg%7_���^#�*SvԻ /ˠ�^���Le�������rXZkl�|��/oI?)鳒L���ԧ7f$�^Q���W��o��9/w^�L�����L�A�͞�L}�����ݞ��n�2���c�=�2��ytrٯ�,���>����b��k��;��@�qA��?���~��_�y� +�*�8NU���j�߾��m�xT�����e�h���'/<�x�e4v,��������,�n(�k��ɳ�Tw���I�Q��m��������'�vnP]V3��t[�1P�&����U�֥[9��4'�� ɜَiZNCC� �������� P����V�U������;=/pNP]�O*�t��^{E���k%p�Mr +��O.��hy��I~zmr�1I�n2j��%���zE2szu�_��o�_��b���K���T״�d@2eb��ߩ�c�u�z�zůaei=�U�$�⸦ut����'�M��S@MR���i�mWTw��I�_[頻��ﺦX�U5c�Hf�^��w�����w��n��2(����㒉ceA�Ya��س��~�� ��(�o��������l+���T�"0I2�q@����\:S&&�8�����-vK~xU�ˡ��j�"0P�F=X��RUCk��Z�V�c�M�ӹ@�)�(�t��p�����_ú�,�F=���ێoZ_��O}/9��I���;E`��� +s�U��6���R�V�#/,�L@�Y=E����إ�͜�4ϭ���;�.N���8mc�]��]�l8L@�R��˓Y3�;�ZY \�V�Ms�/q�6�$��)2�>U��ǂ� ]^���~�h�WL����c�e�}���%��65���7���_7�Ul}��ɔ �A��5S@��������=����'&�h�i �C��{V�*��)�1�ꎽO�d�-��=Z�����܊���l�VxU��Y����_H��۱N��b���~e�)E`�<��?�duǿ������ø�Gos���3s��:�����f�H~���{$h+��IN�g����ڌ"0P.�+�x�~I��v��+����vR��V��Ω��g���۹�%��}��>�<z�,h;��&�87�`;Y�mB(��/��~t�VH��>���&��V�MMɍ�8����?]�x ���aPצM��xg�H~�{Ӷ��H��ǢE4@k���(��S�;�����;�}�ޡ�U/�{�O&�w��<]��I��2�>5v�TѼ��7�S��Ϝ/�J!hu��@�T�%��{�ϗUl=�<���[u�Z���*�_��2�����_K.��,h;� +���,��(��ԽɋOWs���N6ھm��*��?&y�V����ao�e%0����C�5��conN.93�嗪�����K�J��\@�P�iD�W;�m��*��qa�<�y����$ih���Kw���2����ÒW_�m�s���?$ג����r���d��j�}�ݓNm�[�ZA�mJn�W��M�.2 �V�6�U�R�k����w�Qݱ7�1�I��c�7ޓ�s�,h=z''����#�E)�4urr�������.m�wU��}#�I�8��`a� P��4�OuԫN]����jQ�3\��ߴ��ϏN�~�Ҵ�~�/��t�$�Ÿ��k������؇���߶�{��ʭ���S2x���Q��I�U�\Y���d��E!��Q��Y1P�A�$�+�0�ܦj�Y�z$S_�CՏ�*�n_�47'��s���Q?I�/Z[%�F��Sd�E`����;y�d����%]�'3���߳���u�K�7:��5�V{&C6^�vzsf��{�'w_��yR���j�^2�����q�*W[ջX �pc�L�}H����F��z�8��N��Xf�A�6��j��K��ܚ�l��_�Z���0i�뼚�z[''���|d�&�l�d��u씬�I��/'?�2��U�n�'�����T}/X�'����2��ʷ���x'Ms�K�L�q`Q�����ӓ����,3E`��n���{�ݷu��m��V��s�.rN�3h���&��G��N-�o֠��O|7��M�{?�t�*k�zѻ�Hz�Pݱ��F���\AUW���~wc�JN�Pr�7�)�A���=��O�V��F(��'%w]Sͱo�k�>�<�bE��o(����Ǝ�a�'�_���M��=��N�l����+w�zй�}�Iz���اYAW��_QUק�ǯ���in.:ϝ�G��?$�gɄ�������L���~~5�ݱS����g�(Yi�j�9�|�����o�������O��s?NN�C��T���+ɠ��T�P<��7Y��ǀ�Kf����?JNڻ�Dg�(Z�!�$ג�����{��d��j�}�Z�ϭZ+�c���U�����J�ޢ}���vI~xU����i��LKhzWx%�"p�[^�1P�Yf�L��Kc���w_I��r���Jah ;[f��\@�(��ܜ����c�h��G��s�� +z�E�� +^s�b����R�����/� +�6�]EU��1�U�&�wԻV�A�U�<y��_V/>�����W�In�8i�#�ݺ[%;,`�(�pӥռ�nlL�ڻe�̪��n���pQuϝ��%'��t�Q;����&��Aҡ1�Ԙ�m��� ����(���5l5T���ũ,-�g�?|-�����O��&��NL�v�����j�2!���j�}X���Z+�nL&�\�c�[��ߵ�j�e�������j�J�ePe�+>��:���A�@����o�L/�qr��oOJF= �N��>+`�)�1��j�{��-ۖ�j����J<I�<%�V���a���3�5C�ڪ^���u�QlAB5��t�Z��O~�1�Zf���|ir�����\y���,��>n�z`�����GoK�=_�q7tH���2V�ZA�6>�x5ϗ�vI�O���a&���@�P���o�;q�c�q���_�\��Ę���~��c�O{O�(�]�nɁVKF����dDEWo�BE�aV+��%MM�;^:vJ>~j���}?��v�k@-Xa�{/9T�*C�=�)Vѕ���ePU+W�f%pۚ۔<xS�w��%��X�߿Vs��o�í��"0P-7]V͢�:[_�.���j��ܜ��h+�ߟ�P_��c''kn�PV]GU������Y��Ɏ�R��ɠ�W|�_�'p��۔<rk���&��W�Ӓ{�K����|:uI����ŦT���ɽ�Wo� ɶ�/۟��I�U��ك7&��X�c��19��:|����,���u�Z�.�z���^?Yy���Jr�2E�j�٧�+S���F���,I������5I�8*��6�7J�~zr�����Su��`�uP9��K�ޫz��or�9������U���t�������C_K��-�9h- �56J6�)�qQ�}��ޘ���L���C7%�ܖ̜&�*�����œW_r���\��X�W���X���&�=V����7Yc�d�u��Z'�V�P7�G��������B���oMƏI� �ָ��4����/S�VГ_���$��}���w;<�Dr�p�:hI��Iv�`��>I���ӥ[����k��Ro�wr�?�Qȴ���HU4��E�q�9ʢ���V:�ʢJ� * ++U5}J2�5�A��2!�dc2`͢ ��z��u�jut���>�\��b+3�EP��yn2����7�m�M��ݒ���� +�����9�;>:uI6ޱ����ӓ'��%��MvJ�\���-p���xH�z����O�\�e4x��g��7dQ%knZ��/̓�Ԯ�7O�ZU��f�aԷ�9�O�\���w��fAxު�U�Ce���ɺ[%��%`���j����}_�^���X�"p�ZA77'#/��y���I��?��+&�N��/���R_�H>pB�f�a���JF\����d�T��Ic�b�S�ʢJ�ݪ����c�L��T�j�٢��0�Jk��䉻���V����*kj)]Ovz�"0���j�<�h����j�%�H^zf��?Uk�ȭ�+/T�h�bO{�or����W������+��W�]k�����h����C������"p��80Y�_�3���cY���*7�/�b%p��b�oě���1���W ����j��}����̜.�)�5����d�~ɥ�Z���j����_�sb�����OM���~n��6�%���ھ��Ҫɷ�O~{�UWe������CUT}]b]٬�Qҹ[2k�,��k���*�F����?��-[��JV[�����ɬ=u�l���P�")����Ʉ����5�a-Y�J���LL���*C�5��z'��Q��#������Иzlr�g��=t�|�I�>�u�0'e���ű5�IU��j���d�뎃2��9Yw�䡛eQ�mS�̪���ӧm���z����<h���*kh)ݖ��[X$E`����&#.L���j�{�!ō�O��[�V�7]�̙]�s��-�6�.��ɕg������|���C���44$G��̞��p���w�z$C6JF= �*�h�j��~��=���a�e`%0Kc������o�^�N�k)�^2x�d����+�iy��V<P;� Y��T� %�S��~��\�E�u�� +�J�����㊽��}�5��o`rҟj��'O+:u<|�9�wm�\ת���y�qPFn'���x�j���ɤq�ZƜ��s���/-~��C��b����&�m��<DV-�K�d�m�o��PD�TڤW��o���x�ݶ�U'�Go��^n����eԱSr̙�+����^r�E���Cc��3��+��z��N2���O���H9� Y��ʮ�d��aК��&c�Mn�<9��� {%GK~}l�{�&�h���t3�ޙ"0���7�VM�l�����C��>������n*����'����$Ŗ�_�[m��k��?,ZDS���"��We��n2P@)���d���Pv[�!�\�h��'��;�� �QC�ӏH��c��,^��p� �ı�������Eu�|��Zrϵ΅��K~���r�y���Q�{,_��u����0g�L��z���=�ۛ"pym���q�=�F;�۔<vgr���cvL~�ɢ@<{�l�3ޚ�C���0�)yQ�ƽ;�^aU�V�7]R�[SuoL+�?��� .TQ��������S?����N]�]=��z�m�G�=��&��Ʋ�6�Ζ"e֫o��f�Y L-�۔<xc�*�K;&����>I.�f�-d�,�"0@��pQ�GI��]%Yg˅�oUk=�|�@��{��c��%�ү���7�ҭGr��>���}�80��毞m�}ң��j�e`p�u��8/�5l/�4�M^xʱ@m�21��ɗvJ�rj2e�L��;}�T�"0@�Lx�h]5�ڷJ���3yy�s I^y��쿚�F��cr�ɠu������k=��)�v9��������A�����j�A2�\2k��m�f&��=9n�䲳�gAkl,`���ya�Ƽ�>Eq୪� +z�U���ŧ�3�-�H��9�?1�l��}�+��l��T��h��.�>�j�{Le��I���P6+������}Tԏ�ӓ��H��o������e�,�"0�<��H^_�1�?t�߫R+詯%w]�؟�{�5�C�\߅1X������G�N*��7O��C��|����dPv �.���A�<}�ZK��Ń�zȢ���|�#��NKfϒGRly��@9�o�0OSS2��{��{�ZA�r���P��h�|�g�*C�=�4h����+�X6�YK�z���2(�����3I&�K&�$�*��p{ǖIcc��"p��{e��z�X<\�燓���|�oɯoK~{w���7�QkhnN��K��?�I�-�m:��`>#/L�sT��h�o�S��9ſWi��p��0{V�Ri��3��=��~����d��Jtl�J��Mҹ[9�ӧ2p�d̓�^�|hr�ϓ�oȢ������{dP�WK6�!y�FY��V{�U7k�v�Kb���k��k&�*�y�ދ�����9��<�`r�����)����*�w��S�߫/�7ݹ:c^�w���7�� ݿ�~��j큻�ZE�X���_&?�d���]CCr�O�/��d� ��Y���v�'7^"�z����6��!I����R�8B�,�9RI2��7����\k�W����\q�\[�ıE{���ګaWV�N�F\X�"pR|)���E�^+Td�/p�/���M>�ݢEZ�l�}�ѓ�?}�1@�{���滖o\��kn��>W.�=���}�;y�~������*�q�ɢ� ٸhiO��thLVZ��b�5�U��H:wmٿk����0eb�O$�^\ݕ�V��V� O&�Z��R[���[o����MN�ڱ�0S''�O�ܳzc������$�������n�!_,��VZ��ֻ��K6��J�zֵ{�������#r�����O'�|S�l�O�`�*��ر��4p�7[8\+Ye��c��y�r����c�3>�|�����Z��ʎ�m�ުiNr���A��Θ��H6ݥ(W�͗ۓpQ��k5��Ir�ג /'w]�8����n��3ʻ�}�>���"p=��#Eko�g��D����3�I�Ȣ \+���y�D�:u)V��+�Z�X��j�߽b���{�3��~>?�\|Fr�I���+��m�f�Ɂ�-��s�� +z䅎�Ey��b��A�To� ���4���b�h���&���X�WV +O���EΧ�Zw�vO����y�VTQc���$;M���/T�3��<�x�����Y4�-�z���X|���������iW�1������c��S�d�,�������/v6ھ:c�7��|��'����_%ǜYͱw�����Ò��q,Pw���/�:Yq`��I9|���ɡ������E +�,������s��1ԏAk[\Oװ9[eH�p�}{��~w�M��RSS�S�o�[��/�;ym�c���������U����`q���b���7�����|�/�)�� +A-��i�:[�����/���N6�9y�Yԋ^+$~F�L�R����:uI>&9�벨'��d����v~�̿_�U�L����퐍�8���cw&O�S��I���SX@���{�O�L�C�L=��j9,���䂟T;�VN����I�>��d�C�1Vm����k�m#owȗ�n=�0�#�%s��Xi;R�J�>l4,�l9�3kfQk���}�Yw�5?��d��&lW�p��?�q��<�zc��Ӽ���4�In�Ter�eɬrX\�\�����$'��x�jͰ��X��>ќ�����]�C=�V���0�ZYAG��И|��r�������0���Jf�@���/T'�U�$��9���}#�)�ѹ�y��"�:�TF\(�%���+��l� ���)����@��pX��Uk̯<o���'$=zˡ�54$G�ZQx���I�MvL��K�n�'��'��a5� ˋ��w͠m�mJZcy��(�K�Me�̃���aIM���C9��ir���� ���|��Ic�j�{���lz,�z�j�N�K��F�;:y����9��V]ղ��$�'����Y�L(�X���wu쵇n��x<�,H��\o5p)Xս�F^�<v�6�V!���w@r�9�ܛӃ<���ɺ[ɡ��|�rx�{��oZq`�/ɡV}씤kw9���1O�����j�MvL:uv����Pi�����k���H�̜���o9,�����o$�f�B!��ԣwr�9I��*x�����1PF �g~�Z�>y�v�s�52`A�}"Yk39ԚN��Mou�յ�~^]��.�l��c��M~5����Rx7sf'�\&�zv���3�,�=�\�s9$E!��s��=eA��\r���kUs��?�̜�8(����h]Sv�@��rx� /'��j�|�G�Bג~��#O��������=Z���;�1��=W��6�6����V��m��k��s��2�z['_��B0m�S���&knR���qPv{,�tg9Ԃ�WO>� 9,�=�R�V�|�r���~R<@ǂj�A�g��l��.����3V �����`1�<:y�N9ԣgI�{L-anS���%Msd��o����'ZO�N�1g+Ы��V��:>��j�;�%��%_�U�E{�6�Ԗ]?`�_-8��d�-�0w���dy���sfUt���>�b[�<�:cm�k��(,.�I�U�-k̓�%���<���|����)�����/��~vگVG����46ʢ�|��go7eB��r�]ΡӋ������N���ɝ����4kf��G��qD�F��3���u�T� ,�O��u�5����POfNOn�B-�߿S��_�Ւo��^_��7��/�W�d���"n/��l�����Z]û��=9���i��.:J�p����Y���P�Ւm�vL��*Fߘi��(,�ٳ��.�C=��d�49�����7'OmS�ݯh ��N�`�)���ynr�?�P5{~$��p9��-�H�����ʀųʐ�?/���m,�/9��������}���tT���l+��Vg�S&�o`���Kb�E2�'ZA������<i����%'�>��0Y��:wS��߽Ó /ɡ�>vr���rhkn�}�֔�����������d��#���=x�䄳��d�(7\\���۪7��O���q�V����8��N�O1��|�X/>�<q�����&��Ck����#��a�;���S�'8���\��ɉP��ߕgˠ�;&��&YsSY��U�-�'UZ!�4�fi�����/ȡ5u���d� d�(�<X|�Q�^}1�\����@����Tc��O2���(,�Ƞ��P���9��W�i�e�V~&9��y�e�k��kM�*�y�)y�9TY�n� (�y����|�OI�>�X������K���yߗ�=��Ck��)9�������X�Z=tK5��)�g[Xu�j��W�5�6���Kꎫ�jݬ�-�ˡ-L������.ɩ�aQVZ5���ɐ�d1�*��7�-V��r�N�yn��&���M�$_���<%��CrhI;�>cq͞��zE���Gn�������gZO������1�I��7�6���K�!�����P�n�2�1Um�k��ϓ��X3��%ɖ{Ȃ��Qr�E��Cd��u��ɳ�ȁB�>�����R���|aҧ�,G=����y�BpK�ҭhc�������a��G�(:/TM���~l+�ִᰤ�"%�*�Uޕ"0����pM� ����^2�)9,L�^ɱ�)�|���m�G�$���b~�_O��=9��y+���J�bݭ�o��hAϻ�2�(�@K8���G�aY|���F�d�؟��d;�i��'����er�g��e�A��ˣ�7�6���Kc̓�S�ɡ=�x2�A9��Y3�_}�h7�����N��$�>�|��b�St�O��������]\G��GKc��{�ۯ~�]^2g�h9��r��=�4�����d�Md���<�<z[���;���\��d���-�O�d�ݫ3ޱϚs�m��ֈ�eP��b�v��d���aQ6�6�����ʢ��|;����Ao����˳h��$��"9�Ρ���ߘ|�+ŵ�c'y,��9�u�ʁ���aɉg��x6�99�b{�.�����������\5tH��[Ĵ�>�4V�����}�R���e%�c�����О��o�M����|�[E1���70����j<�n���㫹K��C��/�2麜<�w��+L���,��^��d�r�ul�C��˒�֓ŢthL�br��u1XRS_Kn�����ıɨ*�9�w�3����ߖ�ʐd�#��Yj���x����Ҭ�-�ɡ��qU2}����e�ű�G��]��XU����w/OV�P���'^��o뽓�\�^_���{�*~e��� +:�O�A�)+�y�>+%_�[r�1��?,���I��g��]����� +��e��!����Ǝ����;�P�����20��3�3��̜.�w�ʐ�ԋ�����J;mX�}\���M���Xr�(����S��t�yJ���DK�{}�J��ܵ�#�س��}�1��%߿*YokY,����mg��Iss��o�:���s,/���N�ݪZc~�A�,�O����'�Qn�j'�/� /=S��c1��������d���Q&+�^�ֆu�F=���t9��:v*���ߓkV;� ���=��g����2�mm�g��U;�>��c��S�-�;�.Z+ף�c��n2���)����}���f���c*���!s,�"0��q�j�U����+���$�����v����}۞g���!��𢰿��X��'��̖�n���6��|�z{��]%9�E�~��Qɽ�ˁ��{��<>��;�;uN�l��k�-�p,,����_��F\h��e���bqm�{r��|��?�P�����'3�ɡ=͞��z�j�y?L�M���!��#ɏ�)��Y�U�HN<'��w�.��(�s�_9��,h9;�G���d忎v�Y�|��-��_�'h/��R�~���/������U�8!���i��qU����=���'S&��y?��mr�I�=�l���/����,�<:��c�X(E`�e�ƌ�f�vu�����r�Es��3�IƏ�Œ�R���HV[O���CQ�����&;�cq\tF��r�u�80��ϒ��3�d��k��O'?^�NZ�K��ۯ���S����$?�>����9_������}��������yKhn.d�wsf'�\f>�w���S���;}{ߗ�/����Du`��Z����k��k�����>W<0��Yw���˓O��#��4d��ԋ�V�e�����qUr���@ۜ�'�S�ޫ�����^19����7��z,o�[�U�Ԛ�}�#������]r�^�=����ޛ|��E�����t���� +x���+�ڼi���i�%�j�u9y$�$_�kr����k�Ehh>b-?QZ�w/)�h�m�4*9i9ԃ��.�3�tf�L��cr�9��)���&��r����^�?��rX2�d����1��ֺW_L��G�������S{C���.�%��[�I�;:9q�j��w�Uf5?��.Tם[�<�+,�a��,��<��o�'y����˿N��˼.̔�ŃK#�/VNWMcc��G�C�K:w����Ԕ|vK����qR���vx�$m��'�����{>_�`b�M��\���ڿ%3�ˣ=t�����=Gy +I�>)���E!�l��˜���#�[.O��̞U{�q�E�w��&+�n�Z�o�On�W�3P�/�*��ۮL&����ףwQ����d��<0����o��5���HN���.ʄ����)n�U��[��?�Xm��y���{��ΗNE`��u��W�jږ��N�������g��x����ג+�.Z�Y�6:vJv~r�QI�U䱤��$?�X�؝��"p��15y���EA��V7vL�ٲ�W|�]�A똛����*Uo�\���&O�S<�r߈�m<`����.�����h}s����-:����`m����K�n'/��8��%�n�d���9�V�v���;PhI�<�hJ۸��ɯ�*�;;%_�S��PY���ӊ}��s2i�<Z����J�~�䱴��䆋�;>E�rhnN^|�xX��{�я$�k��`����~ko���E�k�n�=�����[�\��װ'�N�y0y��b[��ֹ[����Z���:�e����o��O���r�m�����,�Q�N�?��n2젢�|�>��m��s���%S&�xG���-i�F�w/�C[9���cwȡ-�;9��d�!�h)Ms�ۮH�=7��<ZB���nL��D�g%y,��!9�G��"py�1#�d2��d�����^-V�>!��������ܹI�o^Cz�)^��&+*�����U��V�m-x���G��C�\V�s���/���5셢��듒���kYSS�ei��աc��x��W��E�~�������V��̜��G2��r���Cr��MK��n,tz���\���^}�d�=���&���`��07%?���E�(�4����G��VZ�����wʡ^M����S�){���4vLv8�x�~8�����WUco�����ɞIv~�=[���M.���_]�%knZ�(��M�߿'ʭ�CѦy���(���*o8)b����ߙ륱�&���/�G=�<u_���s��4�����ݒ��-���%�m]<0���*��J���� ��w��چ_оVXv�/�Z�ƹ��niC6J>���* +�7]R�5uμ�N��vs;Z|aeK��Pr� �=�6]wn�:��Sl Sv�/ +�konΗE�nŖL�o�4sz������<_t��J2���S��Y���v-� ��$�ҪEW���+}:���1sZr��r�ޕ"0@K���䈯7ش�9����o���/�NN�C�����u�b��]->��qu�2���e�_8��E�݁ɰ��dҒ^y!��FjӔ �?ϔP��r���Ņ?M��ws������n��E��iS��/��)~������%F��Eǯ�E`Z�M�s�.|� +��fLMn�2����h-�\[�aE9<ts����ϐEkZi������G-z�Y<U?��:94vL��&�j�d�}���96Z�듊��S&��M��a�=@]~&��������(�p�d's�ֺt+^}Ȣ�?_�bQh�����[5�dP6��;�b��oȢ-�2$9��k�����o.�\�b���o`�����;$����괎Y3��|:��,���؝�-����{���N��~z��a:H�w'/<!`��� �F=X�[]TK�θ�Go�C���E;�C��E[��;v`�w�=vG��}��{%��J�����6�kmV�y�o�yn+MMə�$��P�f�J��M{���%��X�q��Lr���FPeW�Q�bSh-��O�<E-m����+�K�,�:�Ӳh/�W+^�Z��������?���d2��������X>�f2h�7��Zm�bo+���R�ք@����Ŷ��hԃ��V��_��d���Vv,PMc�L�N�bSh-�^�|�EA���4'��9��?.����AYԂ�ݓ��)^�<�X5����W���W�I�$�_OfN[���CcQ��٧x�^1Y~���*�k�A�*�+ǩ�Nr��r�j׳�$W�A@}�3;����KOK{cFr���c�t<PM����`�(���S�;�Jv<D-��k�)�Pv��ɟON�tMv8X��w��Ζ���S��aSS��;���X���H�tK:u�o���/�k�&�v͞������@=��g�*�����d�uɖ{Ȃj�|q�,E`��4�E��4�BTEss���%:��W-���!�xQ^W�>��Wr�j��g(����{���$�y��f�0j�>��:.�i�;�K���Z���/�Z��1�÷ʡJ�6%�=�h�Ԧk�^�p�e�ݑ\�G9����ػ�0;��|�O� �"�����V��֊�ϊJŭ��Z��E� ���@,;"?I�MYY!$!��@B��aȾ�df��K.D��r�{����+��9�9��;ϻ�[���u�ϯ[������)ɽf[N ��F �Ao=,��C��T��V�h��Y�ӓ��4��+���:h^�};y�q9��{nN�I���N�0�U���}���� r�]]��k�Ъ�����Q +'�1��2��@����dY���4~���^�ONH�ʁ���˲� �VP���+�{o�ö�|G��]����N#��40�,~yi2�v9��i��Rr��֬H���dc�,���5ɕ���jJ`��0�jl�і�&�p������0�,fMJ��!�9�_���d�:Y�.s���r�FWߊ&�6Q��E��5�,J�S<�&W�"�o7�X��k�/���R�tm��gٓ2��\pt�h�6��+ʒ�P�Y�l�l3%0@1x���tˁg��'�E�xm@���2�B��fHY����d�J�k��䦋�@c��d�mr�R�̛!�й!��8�_�6S��;�tv�aKtw%c�ˁ�n܈d�������t�i��!r��ulH����ò��K���~@l��g%�N�k��ɵg�aklX���oQ�+O���+����e���[�%�mi6^��;�S�LV.�������o�e�as,��\z�87^��!�N�����LV-�c��伯Z�h[,]���9�ino�4�k����i�Pȋ�6{jr����d��sC�Os�5�`��u}r�O�@����dؙr`�,Y��返p��eme�+jl��Ӓ��}L�.9N@�Q����UTm�����Ɂ����ɉ�L�,�V�W$���g/:��U�%3'ʁ�3sbr���G�6!z��?kW%��l)�oK~�m9�\6v&g��%0@��IF�ݺY�7r�-�jYr�g��n�l��&'}B�Ƕ��X>�zj�,�{f��s�����tqY���Z��r[��,z��e`4�ooz��)����etϯ�;;\l�� e&��D�[j���;O͑�n����'��ʂ��6��\�v�,�}��<r��;]����w}��'#Ε���˓q���uJ`���jYr߭rx!S�&K��[�Ƌ�!_H֯�l�I#��>��h������m�r��ڒ�?�,wޢ�tv��������t'�L%��6�r�j�x�ց>�c�r}A����n�䄏�YB����_J:�ɂ�7eLr��r�w-kKN>2i��8}l��{���^.zϦ��d�_�� >D4���{��.Y�}B 0�߭�z>���L`� I�?<�|�,�7m�L��z2�̲g=��1Ò��H���G&m�dA�X�XYc�,�v� +�n�E����S�@�X4;9�s�}J 0 7~=f�>���I�Z��,�7�K��&K���^�k�NF^!�͒E +`�#���d�FY� �(��͗%?>�}!oY[r�Qe�8�>�(�F��97�=e���k���ӎJV.��m�=e���������ɝ?�[�m~r�'���L~�_�#�N��d���`���Y��l0����9�Se`.@S��K��#��릎K���}h���7K��J��[/ON��d�S�����$}#�p�,�2s�%'~܇���n-39�l�u�����-j�����~:Y�.�W���#������` Y��F �}oٓ�i��;��㴎u��s��\qr��u����*�"���Є���<hwݠf�\R +�id�h�NK��d�ò�,�[���H 0�����M��'SFɁ��ӝ�p~��n�9��;-��G�{o��aS<~�,xac�I���d�Y�X�!���އ�hv)�N�E�Z�Dr�'��o�}���kM�3%0�@��NF�7I2v��i̍�7�7�ye���m�,h,�]�E�&#�����'vfr�7����1���d����������qN���u���wr�w �oLYV#[�L@�S���(?{zJ0֮J��Z��/�)�+�$g|.��Ĥ�C4����OJF�#��~M)�n�@4�)c��}6Y�R<㖟$���r�A����)�`�`z�uu�W��u���`��hO&���L��<���k�m�1H�M4��G'��m�`���sˌO���xn�#\�\fNLN�D�d�,Z]���c�+O�3�Y͚���ro�t>�H.:��0w>�����Yk?�;~�5@cX�49�Kef����lX�\���ϗ���L�^���_͚je�ޒ|���GeA�Y4�`�3U��m~y ����^^V���r} [j��仟N�9�O ���<բ{�x�l�]7$������dAs�qO��p����Ќ�39ሤm�,Z���2K术����Y-oON>2��&Y��{nN��h2�aY�d���ÒG&˂-����G +���t��V4���k����g��䂣�ӏ�\9�k�����'��cҾ@4�Es�o�r��ǒ�|��5�X�������{<*��%�~+9�?�dQ��y�I�N.?�@%^����S�~�Ve��Q�ޚ�����sOc{讲���@c�<*9�ɨ����.kV$g~>q��v�zz�[/O���d�yP������ӎ*� +��̉�qNF�E����d��1��\�oZ4��fs�e�]���h˞L��Z�y�ݖ|�9t�K��Q +������Z���]}��%��A�z������ˣ&m��>�����j����aɴ ���`}r�)e���s��J�<Q����rҾP��7^�|������������(�;����\?�|�_�Ϳ%��o�]�-?I���}�Ƀ�0mBr܇,]�M��qX�A�`ٓ��M���tuɣ�͜X����'��ne�ݚ�����Cfje�f�-L���tn�а�@y`\�յ�?֕K�I#=�4�ɣ��L>pTrؿ'��.��C�+ON<"Z�ʥ��K���?���"�4��J~rB2�Y�zz���O�|���^%�f�zy2��d�0�/E����q�&��z�I �K+X�&����[.3�h +f4�c�m��:~D���sN��w$7^�|�o��?��/�/H�|19���0fX��A84��˓K�Uf�(�iu�f$�4��<�A3ݟ����&��V��\�ڒ�N��`2�vy�n���k�M~q��8�4����f��ָ�e)h*�zyrթ��ߛL�Q���jEr�ie�9�&�3�$��l��u�Ry4�����Jq2z��6��H�R��|t�<�#���O.�v�.����d�ʠ����Q�����\xL��]@S�4@�Y�D2el�w��gܛ���\S���y_M~yIr�W�C� [�sC�Y~���ڕ��s�u����#�+yϧ��ˤQ�w[)�>*x>f%'~2y��%�<:y�2i�f'C�L&�^�2�-1gj��N����'���2��lތd�Yɔ1���������x�Y�Tl��2 +���*��|]��ה�����6ǚ��'���l�����@�:�|P��C�����]~��w[��/&��L��r(O>��87��z���fOM~��d��}��<���Mc��r_��_4=?}�є����ɞ����V/O��sL�~�������(p�kS�{��ɒE�1������?}G�Q���eҟ�M({�θG�5֮L�����+��-���f�O���.,�c;�A�Z4;���2��=�J����%/�K���@r���;��@5�������܄�����e/,hs�'g9��������d�����:7����)��L�<xg��C�O|5�� ����=7'����_�-���"ןW���Aep�^�OK~qIr��IW�<�[+��L���/�����ɫ�"�F��S���d���TgPϑ�Ј��/2����ߗ<��ֵ����?����'��!�V�zyr�Uɭ�'��ɣ&/�/2�u��/&�F6Н����I>��Ɂo���-��&�-�o�By�����_Ӛ�}��e�F��A�a����a���-==e��/.)��@��2@��O�z�<���lE2vx�7k_ �ZJ`�Fv�%��U��91��=��$;�o��o�V�[�XrەɸkJ�B}���U��W�%��g�Cޓl7�kuk̝���:�pc�~�<j�n��m��'��C��O@��V<UV`3����d�v��ޞ������]v�I_��I�ߝ�Q�)�X/�z�4�ag��ʵ�5�s +�t�O�][�W�)y�?&o�@����EOO2eL2���������2sb9��7y��C֗�'��e����1C����X�D2����M����G$��3�����M���eϮ�2�q_�M(�;&�We9x�p�y�����a+�Ř ��(v���/>\J�W,�f����.3,i�/�Va&p��~�]���%��X���';����Ɇu��ے{~Y"vvȤ�� �<����_����2����'�5)�pCr�m��%2�y��c��?K�����.�{6߂Y�đ�=7'�ϔв������ז���J^��<]WW���R�>0���֢n�������L��-[p�k�=w������[���҈�K �|����ʬ79��d�\�kcY�a���[�eOz/S�}^������"9��f ��������)c�)���_����� m���F��������7�Y�����b�I�S7g ��v�1yퟗ"���O��UOw2{j2u\���d��@ ���c�הs�!�&�xmY��F���k긲����������kߖ��Ɂoh���==e��{�iw'�&�M�x%0�@��a��O�Q��z㻒�!��0gjYb��ʃB ��%�o��W��6�~KY>�Yg�u�/��#����G�OV��幔�u=���H���R����̠��q��$IfM.�#���yޯ���K|��^W��;���Ƿnu��C�f�IJ��U�w��a{��4�Ύd���np)&�����S� +�FWW��=e��I�'K�ZAۼr�^���~�+_��pٷ}��4^1�ve���23���cӒy�,Q�h��d�r$�:� ����הs�~�Jn�k����G��k��dތ��)�ج���pc��A�:e���{~�W&/e�����TOOh���r>X03��`�6�| �-��hF�]e��$W����G���*y�_�����6O-L��/Ǵ e�9���²�&��8��?.������a�����w��N��_��,����g~}��d�l�T��~M���6ᙿ�}��Ae�q�s����\�"Y�ij�cK%��$�3hzKOOy�/x�j-/ޫ�{��o��˓�^���e�k���s�|_]]e��m���Ǔ���e�Z�<17鰬3@oQ��`ќr���2���7�B��IzS��2z!�ۓ��}zO�_�!~��+�r�3'����K���%��$��%ɋ^��K��N/*����"�s����UIz����,Y�<Y�<Y��l8�wumL�?\��f���ܵ��n�W~���ɠ$���LI�ӮɆ����X�l�Hz���kE�z�ӿ./�Y���rI9^Ȏ�<}��G�Ӯ�f�]����v�]�~��f�n:�[��c��2� �~���MWW��q֤���'��:y՛K)�GZf|���d�̲�Ɍ{�-�uɒuɒ'd4�5��dE{9���Y$�&���]wW2wz9F^Y�n��˞����������ѳGt�`ú����3K���Cɼ�et:����TJ �Њ֮*3`g����m78y�~ɾ�Bx��ʞp{�W��ܠ��]]e���I��d�2�w�e��M˒���@�P�Ptw%m��q��gm�v�K^��o)�w�3y�K��p{�]�]v+�A��{���A[�}�t'�֔}�6�-�F�ZZ��\���lq�����+������$Q��9z�������f���vI�P����o�})��d��R<o�nuY���C������ ����� 뒬K֮��������D�������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������Td{���l��d���}�]�^��֭n��؆u����3��ȃz��������P�A������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E���������Q������TD ������P%0������@E������������ӔK�������IEND�B`� \ No newline at end of file diff --git a/web/modules/webform/images/addons/webform_paragraphs.png b/web/modules/webform/images/addons/webform_paragraphs.png new file mode 100644 index 0000000000..b193a75656 --- /dev/null +++ b/web/modules/webform/images/addons/webform_paragraphs.png @@ -0,0 +1,32 @@ +�PNG + +��� IHDR���������7����� pHYs�������+�� �IDATx����}�s��� ���6�0�NZDž@ Ihjܦ!�U���R[�C�Լ�TU��M�P�[�%�7��~�6��^����}��N_X�>��y�;3�a�ɺ��|ιgfΜ���s��O�DDi�Q�$��)%IB���E�wvD���}}���p�sE�D�\���,���� ~�*��D�e&���?�$IV���7����6ѱ�-�e��f�7V�o�cw������M�H�]�Ŭ˧a?�F�.����k�pCu�N��v�ľ�N��v��b��O����O#����`��-֕�~Pn� 1�-~f���%��+���ٙ�1q��f_E��f�g�?�nq.�H��|>p�����#���m� ����G +*_Ԩ�N��e�����|q�t���W�i^p��N�n��3D�_~$�s�XVX[7{��o.���}�[�+�nl�I[��d&��쌉�f��)ʕ��Ȭ�����P,+&�7ƺ)�l����|d�r^���E�>�(�W�Y�n�� +�pCv��J'�0d��6e�yq���������������!�h�@ϗ�C�t)�Q���.�"�:"����t��M���CT���0�A�����A�z�b�N5��ٺ��I4S�;\U�,;p�q��`�ΦA0���y�f`���eA�\�!��]�Å[�[�w��6�V/���H�m���+x^�o�T�.p���Å�[d�+�E�k�M��� +"K��U]p]���U��H(&�ȏ��p�V�֙��l�a�*�j�!��ظ���g���O��2��9��\�g�v�pCv}�`]� Q��gt�J�5@�w�&W��?�l�O.{,�%b��n.�/�On,��3!�aҙ�f)&��W6C��������-�U9p��슈�>�˓Y��f;��l%�}ry|����\�pCvu�bwW������V��ؓk��u�0I����d�.�ܺ�P]�]p� [�[G�ˑ�B�d��P�ˑ�j�e��n1.������l�3C�=�m�㚔�7C7#�[�+���\�!�u��G&�'���<���:B�]ӥ7�ź�>���i�� �UQ�gg:[�5�3���_����o6=�P�-�e"��.ܐ]��RW�?zg�D�E�y�Y��������5$�*1���n\�1�U~���՟ �>'�8.��UO<�Ġ;�Ź�t����U�3�� �$�T����#J�v�6.�tz��� B5K�[��Z��7&WE���W��Y�� �5,��ٸ����͐u⦣5�v��4\�U�,>�yU��gp٫h��n�g[6��g7�����"�-�p�wM^p�����۳D�� �U�`�.�]�j�g��e �ea+������5.\�� �q��]�?�+� F7uu}X:��*�4��?V-�d�و:E��H��ԏ�{�*re�p�wU�h;\����y����b3�Q"����y\��n��]_F�p�����r�TH�Ż�>���i�� �UQ�����ͦgj����+"�_��"T�#�d� ��p�}p���V�]>����e�t��8W�N�\�1��{&V���� B5K�[��Z��7&WE�.Bu9t3d���h ���z$ nU.�m^�.Bu9rYd�e�`n����.�\bv�ˑ��V\�Ń۟k +\�p�w��>�n����tnU�i1���+[f�[���E��� �5�#F���p�w}YÅ[�[w�ˡkR!�����Ƨ�7dWE�d�����a��l;�^v!T�9v_?�I����\Z�N�d�h�R�^�����0���nXY�dIS����ɢi� +�ӥ��Y9T��r���x��znn���b��n�>g3>�̍O+{/�ںld�/���:�P]f�p�VᲸ��\���N۱���>����1����æ�q媰��ڹ��y�pcuY�變d�7ʢ�!L�}>��->\o�p�pY|�i��6T�.�Z/�N��[�<�k�X/���n�n���������0�4����}�N@Yˢe.���(�3��S��c]Z��<}���ZÅ[�[g�& �_�̶�^]_��l�WT���*p��֙U��xL�t@�O�,OGW6e���+�r\�#JnȮ�:������P.�����P.���5n�n�.�ܺ�P]�\!t��>����eq}߹p�ˡ�¦C�k��.ܘ]�:����Ç� n.��3��\��������í�E�.�\���ŁP]���|��p�V��������� +\�E�u���&� +�W�����+�.Bu9r���Bu9r���Bu9rM�[�[D��7�� T�#WGE��3x�p�pY\�w.\��r誰��ڹ�u�7f���.Buy����zÅ[����L�,��<r��,|�p�v��#��@q T�g.��5\�U�u��<qA����n�n�A�.��ɱ�-Ǖ9�4p��ʨ��P]�\����P]�\����P]�\S��Q��� ��;����BG���.�*\������*l:D�v.{]��e���P]���:|��p�V��<�*�E�.�\��(:ܪ]������P�����k nn�A�.O\P->/���[�[g�ˡkr�p�qe�( \�!�2��"T�#��@� T�#��@��z�=?3] +b]�TZ��ٺ�r���,9��wUiM�!\�!�u��./���~�N�������T3L�\~��dV[���)u�]�D�$ 5 �?a�Wx���V���'�����_����$ u�]�;6m�DCCC�遟�iJ�.]���YJӔ��6u:Z^^�v�M�nwe`�u��D4���kJ���?����g=�P����g������>��t讻�~��x� Z�n]P�r��lnn��\�B�.]�.Ѕ��ŋt��%�t�]�z���Z-�k�Q�ۋ��\ln���'�%���=����:|�l!ui�Һu��������idd$������M�����i۶m��v���P�ۥ�7o���MOOә3g�>�'N��� S������]w�����߿?�D~�dӠ�6;j������.��������.pD�ۥ���~�:����t��Qz��w�ڵk���H�F���>#�В͊tˎ|�(�eK��<�1��ɒo�5k�W�Wi͚5BG���l��k�.Q�Ѡ��Z�f mܸ�~�a:�<���[t�� z��w�ƍ444�}t�z�����U��bE�A���b�2���%�<�ɳ@���ea��L��v��.���Ӻu�V�_�>W�H����M�Ѡ��1����i���t��:y�$9r��x� ZXXP��dm���]�N4cb_y_�YT�ӎ��u�|QG��͐��A��e1�P���}�:��.҆ ��_�:}�+_�O>��^x�:~�8]�|������ +�干�`�n����sQG%�)�/�U^щ�|Q���q�r��*|pU������t:�����t�w����0l]���(p�n�$�j�hÆ ������J��>��ZZZ�f���s4|�-�����;v����%�O��=��(�rX\\��� �����j)����+¤��]�&IBCCC�e�ڳg�s�=4;;K/^�>�(��;���e�*�j��:�>�+�g��*[r��u="�H��>��3ڶmmڴ����J:���g�S����܇�f�}xx���ڻw/ ѹs�hnnN9����O��nYY�d]E��]��Z��ٺ�r���ե{�� :s��Z-ںu+ ��ׇ}�kz����f?H���@۶m�+W�����ٜ�{T�,\{���ȅ���r@}I�[��GGGi˖-�i�&��;zf�U�e�Ν��O����[ZZ�Ç���_j��=��#�裏 +G��y�|�2���+t��y����Q���qڲe������0�Y��FFFVf뢎Htl*7{�����������\ϊ����k��V��]������l�s��M�����?\i��&���}��);8�[a�N�8A��_�UZy�4�f�I�ׯ�G}���fטm�oܸAG����{��9d��h4��lR�բ��Aڸq��3�M�6��w�M[�lY������Q��������u�Vz������hpp��~�k������"T���O$IB�f��4�N�������YVvv���,�k��.��}ff�N�>M�f����h�֭411A�w尿{���5� +�yX�v-8p�6o�L����irr��;�E6���b+9�ަAmv�qy}�|�� +C?����|�OD�6�v��\�B333��;�СC���;�]�v�7��M������ׯ�A���oxx�~�a��������{:v�u> >ܫv��|��Uh�,�I�D���Z�-��8�(CY.�,�.,,����izz��y��җ�D�?�8�ݻ�6l� =F�w��w�}��������^}��U�[��!״���"T�#���n2%��N�7_Y�5E���e*�U��L����իW�7ޠ'N���Eڿ?=��4<<��Ku�m�F�&&&��g����:z�h�/,};�������͐�h;�r��L\��E��*�mTnܸAo��&�8q�v��MO=�=���+���yh4�y�f��?�S�W_}����+� ���D�%@�D��D����u�r��*|pU�j�PwWU7�t2���i>�t�y���M�[�����<���[t��Yz�'����s����J˦M����.�����~���������kro��6�D� �Ǝ�x�Ϻe5��~�Z|(CUd�\��455E������7�|���D�l��}�Yڳgu:���D��.Mӕ:xW���'sE�l]]9Cq�}p��DuB6XS��c����2���Zj�t:t��1����O/��]�|Y��_�پ};����رC������:��;�,M�n��nS��}�������>ݒ[�\~�����n��Ե���U�n6�t���G?����.H���h4h�Ν�����466��Ʌr|v}�V�����N�+!`s=����'�D���X4���*�on6𘟟��_~������~�_����lƑ��}���w��\��t���kJ�����B��g=~IQ�?�kJh.(�2n$�>2������r�c�v�t��1����;�����v�9���?^zycw��VLbuW��� +'B����]4��ה�\�����6����{��~���㏥����q����M�7o^�Ł|���cw�~Xbv���v|����ߦ��˿�ӧO��l6��K��K�'�'��):��a�^�ې͊L^�˄2_����Ǎ~a�+K�ZnW9��]��cZN�2��&ɭ�|��G���>��S�|�nur�w羚}�k^[�)����*S~]�^���W���Tm\�Oׁ�pYD�"d�U�7�W��n��> ͋*C(n��?~��{�9���Z٧;g###�;��;ʥ�PWG�nC�Y�fL�LU�E(cV�)��������3�!k|ln\�2��&IB�N�~����?��?���<��Y�$�s�Nzꩧ��j�ʷ�������bq�DYC�W��Ó�P�=������q�r��*|pU��+����*�>ݬM����8oBr�N�7��F,�� �c�=F��{/��m/�-Wto��"T_�e�$Ihnn���y:u�vF��n����oQ�ݮdV����<s}��t�}�:!��(jy2�~���$��w�3g�����!�D�6�Mz衇���Wur���nA�.��l{=��g2���Jg�����*CHn����;�Б#G�y��lذ��qR����Wׇ�j�.Buy�����k���fu���b�HZ6[/�!�I����,����;}����sƟ�V�E�?�8���=�|;6�\Sbu��S�G7{���]����l���O?�C��͛7W��Vn��6n�H�<�H�� �%2[1��E�.O]����lP����G}��&IB�����C��������cw���A�''I:�<����+��l�̟����~����X�Ƈ�{�.Buy��� +͕�W-���w�.���1-�mbp��:�?~�Ν;'L�322B{��f�)�>_��הX]��r䲈��Ȁ�No��n����5>|��U�X�F�A���t���p\��Jv~��^ھ};u:��͵�#v�����1��g�'B���ܸ�e��M����6;vl%��<f�7o�L�v�Zi�|=6�\�^,.Bu9tU������P]~`fꚔ˔�e��m6�499I���t��~�/~�4::ꤼ!��{+v��@p�Z|(C�$IBt��q�r���6��h6��c�Z�vm%�|&����tߥ��� �`MEQ˓y��S��S�N��Ԕ��4 ���?O����y�]ސ�:�P]���>�z�]��d�/��O��Ƶ���U�ܫW��ٳgW��o�|֬YC<��*��cs��0P��E�.O��uwm���N�tT,I�f�E�!Fw~~��y�e@�����0�ڵK��xl.\Sbu��S�G7{���]��>�Ir�הgϞ����U����l6i����j��f6E�7��l�$V��<uA>\�c\��I���_�NSSS�}����Qڸq�Y��j�?v���(t|�$IB]�ӧO�###t��wS��)�d�����j��<��_X���ҫ��U��;m��e���Ӷ1�I����<MNN +���� 6�r�cpM��E�.G.�������&���M\Y�ç5�E�!F7I�v�t��5Z^^��':�CCC�~�z�v���WG�.Bu9r3LGcp�#� O���qm���h4��իt����}���h4h||�'&e�� ŵ����D#ά�V5�l${/�O���˗�}Uძ�U e�]U�ԍnu�t�M����(C�n�܊j���гOv~GGGihhHy�}96��ɽ��P] 8|�>�!���M�]��j����1�d����<s}��t�}�:!��(jy2�~������3������\�u��<s�}�%����>��>?ݒ��k3{+���6�te�!&ׇ�j�.Buy�����k���f5���b�HZ6[/�1�<8��\Sbu��S�G7{���]����8��\"��X]�����py�q}��7����]���d�0�mJ��0p��E�.��V������v�#�N�epY>��-C���� ����c��5%V���,��2�ӛ�[v7qEd�����E�!V7MSZ�v-�]�v�v���q����Y=��<���E�.Gn��hny�䉐5>67�mbte��������⢳�����bq�ˡ��U e�]U�ԍnu�t�M�_T.S�!F�������������n�K����h4J��1�&�VlnKց��De'�f��o�[Pd���ٞ +����ڢu�����@�>��]ZZ���ij4V� ������y�������D�N���ɼ��)C�n��+��)�.�X\\�vp��k�� T�gn�O��V7��g�|���[r4umfoe�!7Mo=�������/�tp��kׇ�j�.Buy�����k���fu���b�HZ6[/�����Z�nMLLHg'���y�&�;w��ͦ����5%V��<uAy�q#����l�����j�h���400�j�?��n�>��SZ^^F��d�$V��<uA>\�c\���/���j�V������"}�������r�.BuP2���Y�~==��=K�2nI��.:8C|�W�"T�����\Yz�r��}��2�,�rږ!67MSڵkmذA��O733C�����e�7הX]��r䲈�/Ȁ�No��n����5>|��U���4Mi``�v��Ew�y�t����N�C}����zl.]������0��-�<�<����Ƶ-C,n�ӡ�۷Ӟ={�QI�H'O����Y'� ѵ����"T�CW�ʺ�������鮛j��\��-Cnv�v��I[�n]�]�yff�>��c��/����&�Vl.Bu���Շ*f{*P'�IӔ��.mܸ�8����X���3g��?��������y�������D�N���ɼ��)C,n�բ}��ѽ��+u������ �IDAT��7oޤ7�|���y(�l�� T�g.;Je?�����,_����M]��[Ye�MӔ6l�@����5k�H]6�K�.ѱcnj�C��C�ժ]�����Qw�6?�� �4MGŢ��l�^Tbq��կҗ����ϲ��[?.9z�(]�tI�H×cs���P]���<ʸ����d�������t:�m�6ڿ?�������ܤiJ�.]�#G�h�����������"T��.ȇ�s��kN�ۥ����7����M�������'��\[�Z��E�.�J����~�~�~K�Kt�fff襗^���n`���]����~a�+K�ZnW9��]��cZN�2���m�������6������t:t��I:u�Ԫ? ���|sM��E�.G.�������&���M\Y�ç�yQe�%���888H������Dw��4���iz饗���櫫#v�����1��g�'B���ܸ�e�m6���Oҁhpp��-..��Ç��ɓ400Piycrmfx�����U����n�F��}���/*�)y����v顇�g�yf�o�T�,�w��Y:t�-//K#��>�\�{+6W�g�F�q�nY "�����#i���������������>]����@/��"�9s�����<s}��t�}�:!��(jy2�~����t���g�}�v�ر�Q��Y�ӡ��~�~�ӟ��|9���:�P]���>ݒ[�\~�����n��Ե���U�v�M��s}�{ߣ]�v�CDt��9���Z^^���>�\�U���)6ף�m~��AԈ���E#i�l��2��iJ�v�x���?�3z�G��lJg�9�z�*=���t��Ij6�^[H�)����.�]�e���zl�x���qmF�!��<ʸ���ʯ<�:�������{��g�}�v��)�s��9k���ӟ��>���>[h.�:�urW�gJ���Ǵ��F|����𡲡s+�����/%;�}�ߠ�|�;=��D����ҩS��������$�r�`Z��u,nK�d`s�bv��:�iz�?.���~��~�i���;{�y�v�t�� ��������fZ0>ܫv[�N�ҟi�U���hTK�p� �����v���<�(�/n�ӡ4MiϞ=��SO�#�<B�����w��9z����̙3Ɲ�O�!�N���L�Lh���}�'�*���~��1%�M;P���r��0}>�o\�D�~%966F��k�F�<�my%ڈ�<��ӕ+W�����?����rBr�FK�0?;d?����@]��g�xEi�͘�]Qg��M��2i@t�&+w�ep�f��FFFh���o}�|�����[u���i������?�3���k+���<�ಟE�@�n�ݠu�;���D�v�6��k���H�Y��t���1�צU�D��B��ݻ�k_�=��c�q�ƞ��4�W�^��{�:�ӹU}l����buW���Mí"o�Yev�T#��P�4�5(I�/����c��W��Z�~= J���n�&''�?�!>|���n�� �KϏL�ģ,y�9�k�p�uUim��eτ�t��.ʐ�͖ �4�u���]w�E�v�����t�������{�m�Y�=}�4=��s���S��\�;9>�3_ݺ�b+�jC?i����e�n�g;utei��:��鰊��e�!�����>��m�t:466F411A��+�B�v�� 6�w�!���yy���o��o���Eϲ����k��)6��:A&�M`��Wg�K$���B�.כ��ߞ���R�n���Q��$ 5����I����mݺ�6o�L��sm߾��m�F7n����U���c3�?�4���Yz����G?�}���j����"�[�\�Uv�buW��l�;µIW�(ĉig k�u���(2�>::J?�0mٲ�����) �t\w�u�[��֮]Kw�q������ت{die��ߟ"wjj������^y��v�ڪ����k��յ���+?2%��GT7�i�-c�������g��v�m��e�h4��j���:3�����ЩS��_��_������� +����@�PG�"T�%�$ 5�Ms]#�hh��6������Ћ/��2k�Z��:۪\��r�ͳ$�f�<���}����:6wnn��=J��� +?~���J�p1�u������~�.���]"���%����W^��^{��_�NI��<o3=�pѹBu9r������ ?T��}n�ۥ�ׯӅ襗^�����499ICCC+��D�a����e?���]����5IW�i$�,{o�?�ucV�{��5z����7ޠ��~�.^�H�v���� +9�p�wM���"TYev�T#�n]�Kt�#���433Co��?~�N�8A]�$�5����|������.�˞/��ۉ��n�ݦ�W���˗�O>�cǎ��ӧirr����i```����8�p���Bu9t�>۩�+K˿���M��O�����XZZ���)�x�"�={�N�>M~�!������<��mj6�488�*ϲ�/������\��r��,D�H\L��1]�7)�������<u:��7�9ID4??O���t��E������I����.�ŋ��ի+���r�!�l���]�U֖��"T���>�x����T�F���+W�Џ�c:w��?vn4433C7nܠ4Miaa������͛4??Osss�$��U6�MZI[�9���յ�����Cuc���2f�*onn�����N�:��U�t�]�v�Dt���?"Z�Hf�p�<�(�E�.�J�Y��O�ͦ�NT�O�mUn��)��.���iCDtne��U��9����.�M���D��!�W����� +��]� wuX,�#[�Wa�� s��&�[t���4T C��C�� ������JU#���g��uP=<��+Cס�ϙU���5�tǦ*w?e�W岟Ey��"T�'�I�rt�*_�{����C���[�pU��X�ߩ�4�*�vP��Uf��V���<�����#"�tX�n��ll�n��*-���'mѮn{e���4�-I��l�̡,ʚY��TN���{�2�͒cQ���2��˻��:��<��t�']�#�:�P\"������{6e�y�E۔.\�˾���X�U38[�pmҕ1�qbZ�e������`��E�.\Wז��6�D1͐@��*:?�˓G����ˇ1����<�(�m�;�Y +D���:�𩳭�E�.��<K�kF�l��,\��6�����g��f��y������n�SG�(\����r��e�:��W��Ca��ӈ�2u����kZ�~����e?���E�.O\�4p��<U�����3d������p�\�}����CV�MfZe"���pBu� �U��5�-��m��p����r�TN���{�2�͒cQ���2��˻��:����:�P\"������{6e�y�E۔.\�˾���X]��QaZ�e������`��E�.\Wז��"TQE�Gty��|�0#�[7��E��@�`���O�mU.Bu9��Y\3�Hg��Xe���A�.Gd?>P=e���3�-�3��&�\v{�:ZD��� T�#��-�ׁ?~�rt +�/�F����_^�r�S�pU.�Y�G�.Buy⚤�+G��7ݟ!�?To�e�W���E�.��l2�*Y�ǽ���n�*-���'mѮn{e��� T�Cפr�U������m����e�.\����E�.���ن��gD�|?س)����,ڦp��\�U֖��"T� +Ӻ,�d����m/�p�ڸ��46��@p�*:?�˓G����ˇ1����<�(�E�.�J��|�l�r��!6ϒ��QE:�%�*��.� Bu9"���({�p��my��ee0A�����"��.�����l����Õ��P�|�4��L]�;��2���r�Ϣ<bw���$ \9:O���������x�-\�*�t_�.Bu���Uf��V���<��܀P]p�pUi�e�<i�vu۫(\�u���&��:-�^��h��XT�.�p���N.Bu9ħ�6�H?#�����M�D~�g�6e�W粯��4V��@T��e�'�t�7�n{Qe���յ�����CT��]�<�um_>̈��� �qD�.BuP2Xu�>�Sg[��P]�y�*��.9VY�p�m��ُT�@�c�+��n��-+� 2�ݞ��Q�pA/����g��u���]���˧�e�����״���.\��~���P]��&i���y�|e�M�g��U��o��U���bu���2�̴�DV�q/������J�/k�I[���^E�;���5��p�i��:�eD�%Ǣ�wYe��wE�ur��!>u���D�Q?���l�$��<��)\�:�}�������´.�<Y'����tۋ*\�6��-��E�.��Ώ���ѯk;��aF�>n(�#�t�������:۪\��r�ͳ$�fT��vɱ�2��n�P]��~|�z�+\�gv[�ghYL����<u��2��zA�.G.?[��p��:6_>�(/S�������p�\��(��]����5IW��S�+{o�?Cv�:�~����5���P] 8d��d�U&�:�{�7 T� \UZ~Y3Oڢ]��*��n�A�.��I儫N˿��/#�,9U��*\��+z���P]� �%�ψ��.~�gS&���Y�M��չ쫬-��E�.�uY��:)� ��^T�µqumil.Bu��Ut~D�'�~]���3b��qCyQ��P]��V����V�"T�Cl�%�5��t�K�U�.\p��rD���3P�X��?���<C��`��e�穣E�.\�Bu9r��2��+Gס���iDy���w��5-w?e�W岟Ey��"T�'�I�rt�*_�{����C���[�pU��X]���!��&3�2��y���������˚y���WQ�p�Bu9tM*'\uZ��~�fɱ��]V���]�k�\��r�O�m(.�~F��w�=�2��<Ϣm����e_emi�.Bu��0��2O�I��o0��������kKcs�����#�<y����|�í���"]���d���|��ζ*��b�, �U��]r��p�� T�#������ +W��ݖ�ZVd.�=O-�p�^�ˑ�ϖ���?\9��͗O#���心/�i��)\�*��,�#v��<qM�����T��ޛ�ϐ�����2���rM���"TYe6�i�����^�� �7W��_�̓�hW���2��[w�ˡkR9����u�ˈ6K�E����.�^��"T�C|�lCq��3�~���ٔI��ymS�pu.�*kKcu�D�i]�y�NJ��U�pm\][��P] 8D���ɣ_�v��Ìn}�PG�"T�%�U�>u�U����gIpͨ"��c�e�������@��=V����<�в2� s��y�he��P]�\~��_�����u(l�|Q^�.�|yM��O��U��gQ����k�����W��t���Pu���.\�k�/V��@p�*��L�Ldu��n@�.�A�����f��E���U�.ܺ�P]]�� W����_F�Yr,�~�U�pyW�Z'���Sg�K����]�`ϦL"?ϳh�2���s�WY[��P] *L�̓uR:�L���2��k�����\���!����.O����/f�p���8�H���(�:�𩳭�E�.��<K�kF�l��,\��6�����g��f��y������n�SG�(\����r��e�:��W��Ca��ӈ�2u����kZ�~����e?���E�.O\�4p��<U�����3d������p�\�}����CV�MfZe"���pBu� �U��5�-��m��p����r�TN���{�2�͒cQ���2��˻��:����:�P\"������{6e�y�E۔.\�˾���X]��QaZ�e������`��E�.\Wז��"TQE�Gty��|�0#�[7��E��@�`���O�mU.Bu9��Y\3�Hg��Xe���A�.Gd?>P=e���3�-�3��&�\v{�:ZD��� T�#��-�ׁ?~�rt +�/�F����_^�r�S�pU.�Y�G�.Buy⚤�+G��7ݟ!�?To�e�W���E�.��l2�*Y�ǽ���n�*-���'mѮn{e��� T�Cפr�U������m����e�.\����E�.���ن��gD�|?س)����,ڦp��\�U֖��"T� +Ӻ,�d����m/�p�ڸ��46��@p�*:?�˓G����ˇ1����<�(�E�.�J��|�l�r��!6ϒ��QE:�%�*��.� Bu9"���({�p��my��ee0A�����"��.�����l����Õ��P�|�4��L]�;��2���r�Ϣ<bw���$ \9:O���������x�-\�*�t_�.Bu���Uf��V���<��܀P]p�pUi�e�<i�vu۫(\�u���&��:-�^��h��XT�.�p���N.Bu9ħ�6�H?#�����M�D~�g�6e�W粯��4V��@�iJ�����v�^�ۥ�ׯ+]Y��uR"����ƍ+�D^�������R�e���յ�����arr�fgg��ؑ���,�?��ݮt@��3Ij����g����6�˗/���45��������"]��A�h4�ܹst��!Z\\�zKKK���/�g�}F�f��2 ��o�MG��v�-�fff�'?� ���b8çζ*��b�,��n�$���H?�����_��7o��ݸq��9B����e�gh�n�Ѡ��E:x� ������u�]����_|�^�u�g�e�.ܺ�<��)��!y�d��^{ +"qtn����(��po��v�4::J���A�������nܸA?��O��^>S���$r��.mذ����o�c�=F�����vijj�^}�U����o�rie��&ٿZ�ɩ⢩J_]Q�-J�����Ej�Z4>>NI��իWiyy���U�������422Bccc�n��ʕ+�$ ��.�~\���yD�f��!`���D��=��u}c�C�G���3-�SSݐ67+nlP6�u �����P]pk���٭;���5��p�u��s�u�7tW�Z'���Sg[W������˾���X]���DV�E�.�X\][��P]���:Ä�,���e����5��ζ*��"���\p��ŭ �#�;�~;.ٯ]�g�3�<n����?��5�p�q�4��.ܐݺ��DY� ���~f��uy�Mո�t��2��[���� ��e?���E�.���Q�͖d������(��[;�t�.��ݺ�P]]�� �X�_:W]7�pCwE�ur��!>u�uqu���\���쫬-��E�.PKdu^T���յ����j��3L�p�r}}lP��P]��P|�l�r��!�A�-ϕn]�:�P]�H�0�Y��iL�9\�!�u����l�����-��Pu�p��ⲟEy��"T���(A�.���Q�P]pk�.5Å�[w�ˡkR9���K��n��N.Bu9ħζ.�.=?7t�}������j���\�����46��@-�u� nY��� �t���j�O�mU.Bu9D�#��2��['ٛ���d�� �5>�3�"�PHS�a{��.ܺ�u�A��109Y�'T�f������_�Y�-��� � ��E��?�����T��E)\�����pCt}X)q���_U�ܩ������-��[��K���� �͐�1�����SV.�C+���G�p���n2�� ����&��E�uu۳�>��ZlNp���f�Ey��j���eۙU��Á��KW�}�{�]P��h`n������C�+�IY��xإx�v��.��]���]������#�p�tM���\�����Sg[��P]�[�����ʀ�.n�@�.G�k�pݺD~�B��-ҭ������n���n�ne,�E�.�����`W/t����û/�b���IDATJ�����eaY�p�qui�\����{ f��@��}� nY.��&31�����f�nLn�Y�G�.Buy���� HD�pCwM���"T��R�h�h`n�j�.Bu�Z���\�e�&m{l.Bu�@ 𩳭�E�.��έɏV��we��[�N T�#صc�n]"�G�p��� ��r[~]g �\�փ7D7�2�"T��t�p�sE��:�� ��a�ą�P]]Ѳ�,O�Ÿ����.����=��P]�v�>��,��u��\�����b3p�7&7�,�#F��<pAu�$�� \�����cs�� +v)^�]40�7tW�?f��@-�q�.�2]��=6��������V�"T�CD���G+p�2��['����1\�.�ߣP�p�t�Bu9�-����[�k����B�v��l:n���"��p����R��E�.��hYX�'�b\]Z~�n�n����E�.P;|u [��v���L.Buy��j�8����}���P]��:t��.��]�����j�/�.��������P]����|n��I���P]��P|�l�r��!�sk���]p��ŭ��v��[���Q(\�E�u����_�Y�-��� � ��E���67��\���pCt}X)q�"T�CW�,,�n1�.-?��7t7Cv��"T���:��-�e;B�d&��<pA������>���E�.\P��h`n����\����]�m L�� �U��E�.PK|\>��Lפm��E�.���>u�U���ѹ5�� +����p��� ��r�vK��(.�"�:�P]�`˯����zp��PƢ]������n�v�B\�!�>���p�ˡ+Z�� �W�������!�bv���G�p���n2��P]��ZlNp���f�Ey��"T�.�݀D40�7t�tl.Bu�Z�.ŋ��&p�����"T�%>.��[�kҶ���?�w��A/����IEND�B`� \ No newline at end of file diff --git a/web/modules/webform/includes/webform.install.inc b/web/modules/webform/includes/webform.install.inc index c40f8ea053..cd154bcbb1 100644 --- a/web/modules/webform/includes/webform.install.inc +++ b/web/modules/webform/includes/webform.install.inc @@ -187,7 +187,7 @@ function _webform_update_webform_setting_settings(array $settings) { } /** - * Update webform handler settings to reflect changes in a handler's default configuration. + * Update webform handler settings to reflect changes in the handler's settings. * * @see \Drupal\webform\Plugin\WebformHandlerInterface */ @@ -325,6 +325,10 @@ function _webform_update_field_storage_definitions() { */ function _webform_update_webform_submission_storage_schema() { $manager = \Drupal::entityDefinitionUpdateManager(); + if (!$manager->getEntityType('webform_submission')) { + $type = \Drupal::entityTypeManager()->getDefinition('webform_submission'); + $manager->installEntityType($type); + } $manager->updateEntityType($manager->getEntityType('webform_submission')); } diff --git a/web/modules/webform/includes/webform.install.requirements.inc b/web/modules/webform/includes/webform.install.requirements.inc index ac9b2d706e..7b6d826727 100644 --- a/web/modules/webform/includes/webform.install.requirements.inc +++ b/web/modules/webform/includes/webform.install.requirements.inc @@ -123,14 +123,18 @@ function webform_requirements($phase) { if (\Drupal::moduleHandler()->moduleExists('webform_bootstrap')) { $requirements['webform_bootstrap'] = [ 'title' => t('Webform: Bootstrap integration'), - 'value' => t('Webform Bootstrap module installed.'), + 'value' => t('Webform Bootstrap sub-module installed.'), ]; } else { + $t_args = [ + ':install_href' => Url::fromRoute('system.modules_list')->toString(), + ':disable_href' => Url::fromRoute('webform.config.advanced')->toString(), + ]; $requirements['webform_bootstrap'] = [ 'title' => t('Webform: Bootstrap integration'), - 'value' => t('Webform Bootstrap Integration module not installed.'), - 'description' => t('The Webform Bootstrap module helps support Webform to Bootstrap integration. <a href=":href">Disable Webform Bootstrap Integration warning</a>', [':href' => Url::fromRoute('webform.config.advanced')->toString()]), + 'value' => t('Webform Bootstrap Integration sub-module not installed.'), + 'description' => t('The <a href=":install_href">Webform Bootstrap sub-module</a> helps support Webform to Bootstrap integration. <a href=":disable_href">Disable Webform Bootstrap Integration warning</a>', $t_args), 'severity' => REQUIREMENT_WARNING, ]; } diff --git a/web/modules/webform/includes/webform.install.update.inc b/web/modules/webform/includes/webform.install.update.inc index 3af2053617..d1bf53ab0c 100644 --- a/web/modules/webform/includes/webform.install.update.inc +++ b/web/modules/webform/includes/webform.install.update.inc @@ -3910,3 +3910,9 @@ function webform_update_8209() { } } +/** + * Issue #3158114: Delete own submission with secure token not working. + */ +function webform_update_8210() { + _webform_update_webform_settings(); +} diff --git a/web/modules/webform/includes/webform.theme.template.inc b/web/modules/webform/includes/webform.theme.template.inc index f3c0e17170..afee030df9 100644 --- a/web/modules/webform/includes/webform.theme.template.inc +++ b/web/modules/webform/includes/webform.theme.template.inc @@ -159,11 +159,13 @@ function template_preprocess_webform_confirmation(array &$variables) { // Get query string parameters. $query = \Drupal::request()->query->all(); - // Add Ajax trigger to back link. + // Add Ajax trigger to back link except for webform with unique limits which + // break the ajax callback. // @see \Drupal\webform\WebformSubmissionForm::getCustomForm // @see Drupal.behaviors.webformConfirmationBackAjax (js/webform.ajax.js) $is_ajax = (!empty($query['ajax_form'])) ? TRUE : FALSE; - if (!empty($is_ajax)) { + $is_limit_unique = ($webform && ($webform->getSetting('limit_total_unique') || $webform->getSetting('limit_user_unique'))); + if (!empty($is_ajax) && !$is_limit_unique) { $variables['back_attributes']->addClass('js-webform-confirmation-back-link-ajax'); } @@ -326,14 +328,12 @@ function template_preprocess_webform_submission_information(array &$variables) { $variables['uri'] = Link::fromTextAndUrl($source_url->setAbsolute(FALSE)->toString(), $source_url); } - if ($webform->getSetting('token_view')) { - $token_view_url = $webform_submission->getTokenUrl('view'); - $variables['token_view'] = Link::fromTextAndUrl($token_view_url->setAbsolute(FALSE)->toString(), $token_view_url); - } - - if ($webform->getSetting('token_update')) { - $token_update_url = $webform_submission->getTokenUrl('update'); - $variables['token_update'] = Link::fromTextAndUrl($token_update_url->setAbsolute(FALSE)->toString(), $token_update_url); + $token_operations = ['view', 'update', 'delete']; + foreach ($token_operations as $token_operation) { + if ($webform->getSetting('token_' . $token_operation)) { + $token_url = $webform_submission->getTokenUrl($token_operation); + $variables['token_' . $token_operation] = Link::fromTextAndUrl($token_url->setAbsolute(FALSE)->toString(), $token_url); + } } if (($source_entity = $webform_submission->getSourceEntity()) && $source_entity->hasLinkTemplate('canonical')) { @@ -360,9 +360,23 @@ function template_preprocess_webform_submission_information(array &$variables) { if ($webform_submission->access('delete')) { /** @var \Drupal\webform\WebformRequestInterface $request_handler */ $request_handler = \Drupal::service('webform.request'); - $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission') !== FALSE) ? 'webform.user.submission.delete' : 'webform_submission.delete_form'; - $url = $request_handler->getUrl($webform_submission, $source_entity, $base_route_name); + $current_url = Url::fromRoute('<current>')->toString(); + $source_entity_url = $webform_submission->getSourceUrl()->setAbsolute(FALSE)->toString(); + + $route_options = []; + if ($current_url === $source_entity_url) { + $base_route_name = 'webform.user.submission.delete'; + $route_options = ['query' => \Drupal::destination()->getAsArray()]; + } + elseif (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission') !== FALSE + || !$webform->access('submission_view_any')) { + $base_route_name = 'webform.user.submission.delete'; + } + else { + $base_route_name = 'webform_submission.delete_form'; + } + $url = $request_handler->getUrl($webform_submission, $source_entity, $base_route_name, $route_options); $variables['delete'] = [ '#type' => 'link', '#title' => t('Delete submission'), diff --git a/web/modules/webform/includes/webform.translation.inc b/web/modules/webform/includes/webform.translation.inc index 0c0913127d..73f080e4c6 100644 --- a/web/modules/webform/includes/webform.translation.inc +++ b/web/modules/webform/includes/webform.translation.inc @@ -133,7 +133,7 @@ function webform_form_config_translation_add_form_alter(&$form, FormStateInterfa */ function _webform_form_config_translation_add_form_alter_elements(array &$elements, array $element_alterations) { foreach ($elements as $key => &$element) { - if (Element::property($key) || !is_array($element)) { + if (WebformElementHelper::property($key) || !is_array($element)) { continue; } diff --git a/web/modules/webform/js/webform.admin.js b/web/modules/webform/js/webform.admin.js index a421d1d21a..343a1649f2 100644 --- a/web/modules/webform/js/webform.admin.js +++ b/web/modules/webform/js/webform.admin.js @@ -26,7 +26,7 @@ $(this).bind('autocompleteselect', function (event, ui) { if (ui.item) { $(this).val(ui.item.value); - this.form.submit(); + $(this.form).trigger('submit'); } }); }); @@ -42,7 +42,7 @@ attach: function (context) { // Only attach the click event handler to the entire table and determine // which row triggers the event. - $('.webform-results-table', context).once('webform-results-table').click(function (event) { + $('.webform-results-table', context).once('webform-results-table').on('click', function (event) { if (event.target.tagName === 'A' || event.target.tagName === 'BUTTON') { return true; } diff --git a/web/modules/webform/js/webform.ajax.js b/web/modules/webform/js/webform.ajax.js index 32cf3dd420..ad3ffd34bc 100644 --- a/web/modules/webform/js/webform.ajax.js +++ b/web/modules/webform/js/webform.ajax.js @@ -13,6 +13,10 @@ // floating toolbar. Drupal.webform.ajax.scrollTopOffset = Drupal.webform.ajax.scrollTopOffset || ($('#toolbar-administration').length ? 140 : 10); + // Set global scroll top offset. + // @todo Remove in Webform 6.x. + Drupal.webform.scrollTopOffset = Drupal.webform.ajax.scrollTopOffset; + /** * Provide Webform Ajax link behavior. * @@ -90,12 +94,12 @@ attach: function (context) { $('.js-webform-confirmation-back-link-ajax', context) .once('webform-confirmation-back-ajax') - .click(function (event) { + .on('click', function (event) { var $form = $(this).parents('form'); // Trigger the Ajax call back for the hidden submit button. // @see \Drupal\webform\WebformSubmissionForm::getCustomForm - $form.find('.js-webform-confirmation-back-submit-ajax').click(); + $form.find('.js-webform-confirmation-back-submit-ajax').trigger('click'); // Move the progress indicator from the submit button to after this link. // @todo Figure out a better way to set a progress indicator. @@ -152,7 +156,7 @@ var addSelector = (addElement === '_root_') ? '#webform-ui-add-element' : '[data-drupal-selector="edit-webform-ui-elements-' + addElement + '-add"]'; - $(addSelector).click(); + $(addSelector).trigger('click'); } // If not add element, then scroll to and highlight the updated table row. @@ -164,16 +168,14 @@ setTimeout(function () {$element.removeClass('color-success');}, 3000); // Focus first tabbable item for the updated elements and handlers. - $element.find(':tabbable:not(.tabledrag-handle)').eq(0).focus(); + $element.find(':tabbable:not(.tabledrag-handle)').eq(0).trigger('focus'); - // Scroll to elements that are not visible. - if (!isScrolledIntoView($element)) { - $('html, body').animate({scrollTop: $element.offset().top - Drupal.webform.ajax.scrollTopOffset}, 500); - } + // Scroll element into view. + Drupal.webformScrolledIntoView($element); } else { // Focus main content. - $('#main-content').focus(); + $('#main-content').trigger('focus'); } // Display main page's status message in a floating container. @@ -214,40 +216,15 @@ * @see Drupal.AjaxCommands.prototype.viewScrollTop */ Drupal.AjaxCommands.prototype.webformScrollTop = function (ajax, response) { - // Scroll to the top of the view. This will allow users - // to browse newly loaded content after e.g. clicking a pager - // link. - var offset = $(response.selector).offset(); - // We can't guarantee that the scrollable object should be - // the body, as the view could be embedded in something - // more complex such as a modal popup. Recurse up the DOM - // and scroll the first element that has a non-zero top. - var scrollTarget = response.selector; - while ($(scrollTarget).scrollTop() === 0 && $(scrollTarget).parent()) { - scrollTarget = $(scrollTarget).parent(); - } - - if (response.target === 'page' && $(scrollTarget).length && $(scrollTarget)[0].tagName === 'HTML') { - // Scroll to top when scroll target is the entire page. - // @see https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport - var rect = $(scrollTarget)[0].getBoundingClientRect(); - if (!(rect.top >= 0 && rect.left >= 0 && rect.bottom <= $(window).height() && rect.right <= $(window).width())) { - $(scrollTarget).animate({scrollTop: 0}, 500); - } - } - else { - // Only scroll upward. - if (offset.top - Drupal.webform.ajax.scrollTopOffset < $(scrollTarget).scrollTop()) { - $(scrollTarget).animate({scrollTop: (offset.top - Drupal.webform.ajax.scrollTopOffset)}, 500); - } - } + // Scroll top. + Drupal.webformScrollTop(response.selector, response.target); // Focus on the form wrapper content bookmark if // .js-webform-autofocus is not enabled. // @see \Drupal\webform\Form\WebformAjaxFormTrait::buildAjaxForm var $form = $(response.selector + '-content').find('form'); if (!$form.hasClass('js-webform-autofocus')) { - $(response.selector + '-content').focus(); + $(response.selector + '-content').trigger('focus'); } }; @@ -278,7 +255,7 @@ if (a.pathname === window.location.pathname && $('.webform-ajax-refresh').length) { updateKey = (response.url.match(/[?|&]update=([^&]+)($|&)/)) ? RegExp.$1 : null; addElement = (response.url.match(/[?|&]add_element=([^&]+)($|&)/)) ? RegExp.$1 : null; - $('.webform-ajax-refresh').click(); + $('.webform-ajax-refresh').trigger('click'); } else { // Clear unsaved information flag so that the current webform page @@ -357,29 +334,4 @@ } }; - /** ********************************************************************** **/ - // Helper functions. - /** ********************************************************************** **/ - - /** - * Determine if element is visible in the viewport. - * - * @param {Element} element - * An element. - * - * @return {boolean} - * TRUE if element is visible in the viewport. - * - * @see https://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling - */ - function isScrolledIntoView(element) { - var docViewTop = $(window).scrollTop(); - var docViewBottom = docViewTop + $(window).height(); - - var elemTop = $(element).offset().top; - var elemBottom = elemTop + $(element).height(); - - return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); - } - })(jQuery, Drupal, drupalSettings); diff --git a/web/modules/webform/js/webform.behaviors.js b/web/modules/webform/js/webform.behaviors.js new file mode 100644 index 0000000000..39c67ffa8a --- /dev/null +++ b/web/modules/webform/js/webform.behaviors.js @@ -0,0 +1,41 @@ +/** + * @file + * Webform behaviors. + */ + +(function ($, Drupal) { + + 'use strict'; + + // Trigger Drupal's attaching of behaviors after the page is + // completely loaded. + // @see https://stackoverflow.com/questions/37838430/detect-if-page-is-load-from-back-button + // @see https://stackoverflow.com/questions/20899274/how-to-refresh-page-on-back-button-click/20899422#20899422 + var isChrome = (/chrom(e|ium)/.test(window.navigator.userAgent.toLowerCase())); + if (isChrome) { + // Track back button in navigation. + // @see https://stackoverflow.com/questions/37838430/detect-if-page-is-load-from-back-button + var backButton = false; + if (window.performance) { + var navEntries = window.performance.getEntriesByType('navigation'); + if (navEntries.length > 0 && navEntries[0].type === 'back_forward') { + backButton = true; + } + else if (window.performance.navigation + && window.performance.navigation.type === window.performance.navigation.TYPE_BACK_FORWARD) { + backButton = true; + } + } + + // If the back button is pressed, delay Drupal's attaching of behaviors. + if (backButton) { + var attachBehaviors = Drupal.attachBehaviors; + Drupal.attachBehaviors = function (context, settings) { + setTimeout(function (context, settings) { + attachBehaviors(context, settings); + }, 300); + }; + } + } + +})(jQuery, Drupal); diff --git a/web/modules/webform/js/webform.dialog.js b/web/modules/webform/js/webform.dialog.js index c888e7a106..e5489f9e03 100644 --- a/web/modules/webform/js/webform.dialog.js +++ b/web/modules/webform/js/webform.dialog.js @@ -26,7 +26,7 @@ // Init the webform dialog behavior. Drupal.behaviors.webformDialog.attach($div); // Trigger the link. - $div.find('a').click(); + $div.find('a').trigger('click'); }; /** diff --git a/web/modules/webform/js/webform.element.ajax.js b/web/modules/webform/js/webform.element.ajax.js index 5bf4f4d381..eb364057b2 100644 --- a/web/modules/webform/js/webform.element.ajax.js +++ b/web/modules/webform/js/webform.element.ajax.js @@ -19,7 +19,7 @@ attach: function (context) { $('[data-webform-trigger-submit]').once('webform-trigger-submit').on('change', function () { var submit = $(this).attr('data-webform-trigger-submit'); - $(submit).mousedown(); + $(submit).trigger('mousedown'); }); } }; diff --git a/web/modules/webform/js/webform.element.checkboxes.js b/web/modules/webform/js/webform.element.checkboxes.js index d5a82520da..7a5e8ddf6a 100644 --- a/web/modules/webform/js/webform.element.checkboxes.js +++ b/web/modules/webform/js/webform.element.checkboxes.js @@ -41,7 +41,9 @@ // All of the above. if ($options_all.length) { $options_all.on('click', toggleCheckAllEventHandler); - toggleCheckAllEventHandler(); + if ($options_all.prop('checked')) { + toggleCheckAllEventHandler(); + } } // None of the above. diff --git a/web/modules/webform/js/webform.element.codemirror.js b/web/modules/webform/js/webform.element.codemirror.js index 95b98b0337..9539cfc8e5 100644 --- a/web/modules/webform/js/webform.element.codemirror.js +++ b/web/modules/webform/js/webform.element.codemirror.js @@ -59,7 +59,7 @@ $(textarea).hide().removeClass('visually-hidden'); // Tabindex + 2 accounts for the CodeMirror's iframe. - $tabbable.eq(tabindex + 2).focus(); + $tabbable.eq(tabindex + 2).trigger('focus'); } } diff --git a/web/modules/webform/js/webform.element.composite.js b/web/modules/webform/js/webform.element.composite.js index ac0184db1a..48cfa5909d 100644 --- a/web/modules/webform/js/webform.element.composite.js +++ b/web/modules/webform/js/webform.element.composite.js @@ -34,7 +34,7 @@ $element.attr({'required': 'required', 'aria-required': 'true'}); } } - }).change(); + }).trigger('change'); }); } }; diff --git a/web/modules/webform/js/webform.element.computed.js b/web/modules/webform/js/webform.element.computed.js index bf59d2d8c0..09234f42ba 100644 --- a/web/modules/webform/js/webform.element.computed.js +++ b/web/modules/webform/js/webform.element.computed.js @@ -136,7 +136,7 @@ $wrapper.addClass('webform-computed-loading'); // Trigger computation. - $element.find('.js-form-submit').mousedown(); + $element.find('.js-form-submit').trigger('mousedown'); } } } diff --git a/web/modules/webform/js/webform.element.details.js b/web/modules/webform/js/webform.element.details.js index 9b1b98cdd9..8906c27049 100644 --- a/web/modules/webform/js/webform.element.details.js +++ b/web/modules/webform/js/webform.element.details.js @@ -15,7 +15,7 @@ Drupal.behaviors.webformDetailsInvalid = { attach: function (context) { $('details :input', context).on('invalid', function () { - $(this).parents('details:not([open])').children('summary').click(); + $(this).parents('details:not([open])').children('summary').trigger('click'); // Synd details toggle label. if (Drupal.webform && Drupal.webform.detailsToggle) { diff --git a/web/modules/webform/js/webform.element.details.save.js b/web/modules/webform/js/webform.element.details.save.js index 6983b33da4..7d001f139b 100644 --- a/web/modules/webform/js/webform.element.details.save.js +++ b/web/modules/webform/js/webform.element.details.save.js @@ -33,10 +33,9 @@ } // Summary click event handler. - $('details > summary', context).once('webform-details-summary-save').click(function () { + $('details > summary', context).once('webform-details-summary-save').on('click', function () { var $details = $(this).parent(); - // @see https://css-tricks.com/snippets/jquery/make-an-jquery-hasattr/ if ($details[0].hasAttribute('data-webform-details-nosave')) { return; @@ -90,6 +89,11 @@ return ''; } + // Ignore details that are vertical tabs pane. + if ($details.hasClass('vertical-tabs__pane')) { + return ''; + } + // Any details element not included a webform must have define its own id. var webformId = $details.attr('data-webform-element-id'); if (webformId) { diff --git a/web/modules/webform/js/webform.element.details.toggle.js b/web/modules/webform/js/webform.element.details.toggle.js index 44b8599019..c0d21a283d 100644 --- a/web/modules/webform/js/webform.element.details.toggle.js +++ b/web/modules/webform/js/webform.element.details.toggle.js @@ -42,13 +42,15 @@ var $toggle = $(options.button) .attr('title', Drupal.t('Toggle details widget state.')) .on('click', function (e) { + // Get details that are not vertical tabs pane. + var $details = $form.find('details:not(.vertical-tabs__pane)'); var open; if (Drupal.webform.detailsToggle.isFormDetailsOpen($form)) { - $form.find('details').removeAttr('open'); + $details.removeAttr('open'); open = 0; } else { - $form.find('details').attr('open', 'open'); + $details.attr('open', 'open'); open = 1; } Drupal.webform.detailsToggle.setDetailsToggleLabel($form); @@ -56,7 +58,7 @@ // Set the saved states for all the details elements. // @see webform.element.details.save.js if (Drupal.webformDetailsSaveGetName) { - $form.find('details').each(function () { + $details.each(function () { // Note: Drupal.webformDetailsSaveGetName checks if localStorage // exists and is enabled. // @see webform.element.details.save.js diff --git a/web/modules/webform/js/webform.element.location.places.js b/web/modules/webform/js/webform.element.location.places.js index 6a2bcbd642..bbd0717464 100644 --- a/web/modules/webform/js/webform.element.location.places.js +++ b/web/modules/webform/js/webform.element.location.places.js @@ -43,7 +43,7 @@ var $input = $element.find('.webform-location-places'); // Prevent the 'Enter' key from submitting the form. - $input.keydown(function (event) { + $input.on('keydown', function (event) { if (event.keyCode === 13) { event.preventDefault(); } diff --git a/web/modules/webform/js/webform.element.multiple.js b/web/modules/webform/js/webform.element.multiple.js index 8923a201e3..a44347b35f 100644 --- a/web/modules/webform/js/webform.element.multiple.js +++ b/web/modules/webform/js/webform.element.multiple.js @@ -43,7 +43,7 @@ if (event.which === 13) { // Note: Mousedown is the default trigger for Ajax events. // @see Drupal.Ajax. - $submit.mousedown(); + $submit.trigger('mousedown'); } }); }); diff --git a/web/modules/webform/js/webform.element.other.js b/web/modules/webform/js/webform.element.other.js index 124aaab403..6e02d38da0 100644 --- a/web/modules/webform/js/webform.element.other.js +++ b/web/modules/webform/js/webform.element.other.js @@ -35,7 +35,7 @@ $element[showEffect](); // If not initializing, then focus the other element. if (effect !== false) { - $input.focus(); + $input.trigger('focus'); } // Require the input. $input.prop('required', true).attr('aria-required', 'true'); @@ -151,7 +151,7 @@ var $container = $(this).find('.js-webform-webform-buttons'); // Create set onchange handler. - $container.change(function () { + $container.on('change', function () { toggleOther(($(this).find(':radio:checked').val() === '_other_'), $input); }); diff --git a/web/modules/webform/js/webform.element.signature.js b/web/modules/webform/js/webform.element.signature.js index 4401e41a1b..f95364000c 100644 --- a/web/modules/webform/js/webform.element.signature.js +++ b/web/modules/webform/js/webform.element.signature.js @@ -58,13 +58,13 @@ } // Set resize handler. - $(window).resize(debounce(refresh, 10)); + $(window).on('resize', debounce(refresh, 10)); // Set reset handler. $button.on('click', function () { signaturePad.clear(); $input.val(''); - this.blur(); + this.trigger('blur'); return false; }); diff --git a/web/modules/webform/js/webform.element.states.js b/web/modules/webform/js/webform.element.states.js index 26325fe0c7..d3005870e4 100644 --- a/web/modules/webform/js/webform.element.states.js +++ b/web/modules/webform/js/webform.element.states.js @@ -26,7 +26,7 @@ }); // Initialize trigger and selector. - $trigger.on('change', function () {$selector.change();}); + $trigger.on('change', function () {$selector.trigger('change');}); $selector.on('change', function () { var selector = $selector.val(); @@ -47,7 +47,7 @@ } // Always disable browser auto completion. $value.attr('autocomplete', 'off'); - }).change(); + }).trigger('change'); }); // If the states:state is required or optional the required checkbox @@ -98,7 +98,7 @@ requiredChecked = null; } } - $input.change(); + $input.trigger('change'); } })(jQuery, Drupal, drupalSettings); diff --git a/web/modules/webform/js/webform.element.tableselect.js b/web/modules/webform/js/webform.element.tableselect.js index 45751a98cc..b0207ac68e 100644 --- a/web/modules/webform/js/webform.element.tableselect.js +++ b/web/modules/webform/js/webform.element.tableselect.js @@ -59,7 +59,7 @@ return true; } - $checkbox.click(); + $checkbox.trigger('click'); }); }; diff --git a/web/modules/webform/js/webform.element.telephone.js b/web/modules/webform/js/webform.element.telephone.js index ef7819f9c2..cf23d9ef5c 100644 --- a/web/modules/webform/js/webform.element.telephone.js +++ b/web/modules/webform/js/webform.element.telephone.js @@ -27,7 +27,7 @@ var $telephone = $(this); // Add error message container. - var $error = $('<div class="form-item--error-message">' + Drupal.t('Invalid phone number') + '</div>').hide(); + var $error = $('<strong class="error form-item--error-message">' + Drupal.t('Invalid phone number') + '</strong>').hide(); $telephone.closest('.js-form-item').append($error); var options = { @@ -54,17 +54,33 @@ $error.hide(); }; - $telephone.blur(function () { - reset(); + var validate = function () { if ($.trim($telephone.val())) { if (!$telephone.intlTelInput('isValidNumber')) { $telephone.addClass('error'); - $error.show(); + var message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': $telephone.attr('placeholder')}); + $error.html(message).show(); + return false; } } + return true; + }; + + $telephone.on('blur', function () { + reset(); + validate(); }); $telephone.on('keyup change', reset); + + // Check for a valid phone number on submit. + var $form = $(this.form); + $form.on('submit', function (event) { + if (!validate()) { + $telephone.focus(); + event.preventDefault(); + } + }); }); } }; diff --git a/web/modules/webform/js/webform.element.terms_of_service.js b/web/modules/webform/js/webform.element.terms_of_service.js index 55535c5813..eac191da3a 100644 --- a/web/modules/webform/js/webform.element.terms_of_service.js +++ b/web/modules/webform/js/webform.element.terms_of_service.js @@ -53,7 +53,7 @@ } // Set event handlers. - $a.click(openDetails) + $a.on('click', openDetails) .on('keydown', function (event) { // Space or Return. if (event.which === 32 || event.which === 13) { diff --git a/web/modules/webform/js/webform.element.time.js b/web/modules/webform/js/webform.element.time.js index 2ca0c7b51a..adced77ab9 100644 --- a/web/modules/webform/js/webform.element.time.js +++ b/web/modules/webform/js/webform.element.time.js @@ -57,6 +57,11 @@ options.step = 1; } + // Set step to 'any' to prevent clientside validation issues. + // @see \Drupal\clientside_validation\Plugin\CvValidator\Step + // @see https://www.drupal.org/project/clientside_validation/issues/2941434 + $input.attr('step', 'any'); + options = $.extend(options, Drupal.webform.timePicker.options); $input.timepicker(options); diff --git a/web/modules/webform/js/webform.filter.js b/web/modules/webform/js/webform.filter.js index b5b64b7591..faa52b9e83 100644 --- a/web/modules/webform/js/webform.filter.js +++ b/web/modules/webform/js/webform.filter.js @@ -60,7 +60,7 @@ // Make sure the filter input is always focused. if (focusInput === 'true') { - setTimeout(function () {$input.focus();}); + setTimeout(function () {$input.trigger('focus');}); } } @@ -73,7 +73,7 @@ */ function resetFilter(e) { $input.val('').keyup(); - $input.focus(); + $input.trigger('focus'); } /** diff --git a/web/modules/webform/js/webform.form.auto_focus.js b/web/modules/webform/js/webform.form.auto_focus.js index c1d089db73..03ea81b9b7 100644 --- a/web/modules/webform/js/webform.form.auto_focus.js +++ b/web/modules/webform/js/webform.form.auto_focus.js @@ -18,7 +18,7 @@ Drupal.behaviors.webformAutofocus = { attach: function (context) { $(context).find('.js-webform-autofocus :input:visible:enabled:first') - .focus(); + .trigger('focus'); } }; diff --git a/web/modules/webform/js/webform.form.submit_back.js b/web/modules/webform/js/webform.form.submit_back.js index 155cbf7794..dc60b8c006 100644 --- a/web/modules/webform/js/webform.form.submit_back.js +++ b/web/modules/webform/js/webform.form.submit_back.js @@ -13,7 +13,7 @@ window.onpopstate = function (event) { $('#edit-wizard-prev, #edit-preview-prev, .webform-button--previous') .slice(0, 1) - .click(); + .trigger('click'); }; } diff --git a/web/modules/webform/js/webform.form.submit_once.js b/web/modules/webform/js/webform.form.submit_once.js index ce535d4112..af865b4d80 100644 --- a/web/modules/webform/js/webform.form.submit_once.js +++ b/web/modules/webform/js/webform.form.submit_once.js @@ -32,14 +32,14 @@ // Track which submit button was clicked. // @see http://stackoverflow.com/questions/5721724/jquery-how-to-get-which-button-was-clicked-upon-form-submission - $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit').click(function () { + $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit').on('click', function () { $form.find('.js-webform-wizard-pages-links :submit, .form-actions :submit') .removeClass('js-webform-submit-clicked'); $(this) .addClass('js-webform-submit-clicked'); }); - $(this).submit(function () { + $(this).on('submit', function () { // Find clicked button var $clickedButton = $form.find('.js-webform-wizard-pages-links :submit.js-webform-submit-clicked, .form-actions :submit.js-webform-submit-clicked'); diff --git a/web/modules/webform/js/webform.form.unsaved.js b/web/modules/webform/js/webform.form.unsaved.js index 3b1c46aa02..bd0bf26d3f 100644 --- a/web/modules/webform/js/webform.form.unsaved.js +++ b/web/modules/webform/js/webform.form.unsaved.js @@ -105,9 +105,14 @@ * Date: 19th May 2014 */ $(function () { - if (!navigator.userAgent.toLowerCase().match(/iphone|ipad|ipod|opera/)) { + // @see https://stackoverflow.com/questions/58019463/how-to-detect-device-name-in-safari-on-ios-13-while-it-doesnt-show-the-correct + var isIOSorOpera = navigator.userAgent.toLowerCase().match(/iphone|ipad|ipod|opera/) + || navigator.platform.toLowerCase().match(/iphone|ipad|ipod/) + || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); + if (!isIOSorOpera) { return; } + $('a:not(.use-ajax)').bind('click', function (evt) { var a = $(evt.target).closest('a'); var href = a.attr('href'); diff --git a/web/modules/webform/js/webform.jquery.ui.dialog.js b/web/modules/webform/js/webform.jquery.ui.dialog.js index 479fc2be0f..993d8d27e0 100644 --- a/web/modules/webform/js/webform.jquery.ui.dialog.js +++ b/web/modules/webform/js/webform.jquery.ui.dialog.js @@ -42,7 +42,7 @@ // Move focus to close dialog button. hasFocus = $element.parent().find('.ui-dialog-titlebar-close'); } - hasFocus.eq(0).focus(); + hasFocus.eq(0).trigger('focus'); }); } }); diff --git a/web/modules/webform/js/webform.scroll.js b/web/modules/webform/js/webform.scroll.js new file mode 100644 index 0000000000..51b67dc85f --- /dev/null +++ b/web/modules/webform/js/webform.scroll.js @@ -0,0 +1,92 @@ +/** + * @file + * JavaScript behaviors for webform scroll top. + */ + +(function ($, Drupal) { + + 'use strict'; + + Drupal.webform = Drupal.webform || {}; + // Allow scrollTopOffset to be custom defined or based on whether there is a + // floating toolbar. + Drupal.webform.scrollTopOffset = Drupal.webform.scrollTopOffset || ($('#toolbar-administration').length ? 140 : 10); + + /** + * Scroll to top ajax command. + * + * @param {Element} element + * The element to scroll to. + * @param {string} target + * Scroll to target. (form or page) + */ + Drupal.webformScrollTop = function (element, target) { + if (!target) { + return; + } + + var $element = $(element); + + // Scroll to the top of the view. This will allow users + // to browse newly loaded content after e.g. clicking a pager + // link. + var offset = $element.offset(); + // We can't guarantee that the scrollable object should be + // the body, as the view could be embedded in something + // more complex such as a modal popup. Recurse up the DOM + // and scroll the first element that has a non-zero top. + var $scrollTarget = $element; + while ($scrollTarget.scrollTop() === 0 && $($scrollTarget).parent()) { + $scrollTarget = $scrollTarget.parent(); + } + + if (target === 'page' && $scrollTarget.length && $scrollTarget[0].tagName === 'HTML') { + // Scroll to top when scroll target is the entire page. + // @see https://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport + var rect = $($scrollTarget)[0].getBoundingClientRect(); + if (!(rect.top >= 0 && rect.left >= 0 && rect.bottom <= $(window).height() && rect.right <= $(window).width())) { + $scrollTarget.animate({scrollTop: 0}, 500); + } + } + else { + // Only scroll upward. + if (offset.top - Drupal.webform.scrollTopOffset < $scrollTarget.scrollTop()) { + $scrollTarget.animate({scrollTop: (offset.top - Drupal.webform.scrollTopOffset)}, 500); + } + } + }; + + /** + * Scroll element into view. + * + * @param {jQuery} $element + * An element. + */ + Drupal.webformScrolledIntoView = function ($element) { + if (!Drupal.webformIsScrolledIntoView($element)) { + $('html, body').animate({scrollTop: $element.offset().top - Drupal.webform.scrollTopOffset}, 500); + } + }; + + /** + * Determine if element is visible in the viewport. + * + * @param {Element} element + * An element. + * + * @return {boolean} + * TRUE if element is visible in the viewport. + * + * @see https://stackoverflow.com/questions/487073/check-if-element-is-visible-after-scrolling + */ + Drupal.webformIsScrolledIntoView = function (element) { + var docViewTop = $(window).scrollTop(); + var docViewBottom = docViewTop + $(window).height(); + + var elemTop = $(element).offset().top; + var elemBottom = elemTop + $(element).height(); + + return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); + }; + +})(jQuery, Drupal); diff --git a/web/modules/webform/js/webform.states.js b/web/modules/webform/js/webform.states.js index 7fcd8c7060..f34f284b94 100644 --- a/web/modules/webform/js/webform.states.js +++ b/web/modules/webform/js/webform.states.js @@ -212,7 +212,7 @@ $document.on('state:checked', function (e) { if (e.trigger) { - $(e.target).change(); + $(e.target).trigger('change'); } }); @@ -318,7 +318,7 @@ .once('webform-radios-required') .each(function () { var $element = $(this); - setTimeout(function () {radiosRequired($(this))}); + setTimeout(function () {radiosRequired($element);}); }); } }; @@ -530,6 +530,7 @@ * @param {element} $input * An input. * @param {boolean} required + * Is input required. */ function toggleRequired($input, required) { if (required) { diff --git a/web/modules/webform/js/webform.wizard.pages.js b/web/modules/webform/js/webform.wizard.pages.js index b19f20cd7c..5b4f52b61f 100644 --- a/web/modules/webform/js/webform.wizard.pages.js +++ b/web/modules/webform/js/webform.wizard.pages.js @@ -39,12 +39,12 @@ 'aria-label': title, 'tabindex': '0' }) - .click(function () { - $button.click(); + .on('click', function () { + $button.trigger('click'); }) - .keydown(function (event) { + .on('keydown', function (event) { if (event.which === 13) { - $button.click(); + $button.trigger('click'); } }); // Only allow the marker to be tabbable. diff --git a/web/modules/webform/modules/webform_access/js/webform_access.admin.js b/web/modules/webform/modules/webform_access/js/webform_access.admin.js index 026c651de7..9477dc8774 100644 --- a/web/modules/webform/modules/webform_access/js/webform_access.admin.js +++ b/web/modules/webform/modules/webform_access/js/webform_access.admin.js @@ -18,7 +18,7 @@ var $permissions = $(this); var $checkbox = $permissions.find('input[name="permissions[administer]"]'); - $checkbox.click(toggleAdminister); + $checkbox.on('click', toggleAdminister); if ($checkbox.prop('checked')) { toggleAdminister(); } diff --git a/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php b/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php index 2ec9c83f2a..2679ee1451 100644 --- a/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php +++ b/web/modules/webform/modules/webform_access/src/Plugin/Block/WebformAccessGroupEntityBlock.php @@ -4,6 +4,7 @@ use Drupal\Core\Block\BlockBase; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Session\AccountInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -33,6 +34,13 @@ class WebformAccessGroupEntityBlock extends BlockBase implements ContainerFactor */ protected $webformAccessGroupStorage; + /** + * The 'language_manager' service. + * + * @var \Drupal\Core\Language\LanguageManagerInterface + */ + protected $languageManager; + /** * Creates a WebformAccessGroupEntityBlock instance. * @@ -46,11 +54,14 @@ class WebformAccessGroupEntityBlock extends BlockBase implements ContainerFactor * The current user. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * The language manager. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->currentUser = $current_user; $this->webformAccessGroupStorage = $entity_type_manager->getStorage('webform_access_group'); + $this->languageManager = $language_manager; } /** @@ -62,7 +73,9 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_id, $plugin_definition, $container->get('current_user'), - $container->get('entity_type.manager') + $container->get('entity_type.manager'), + $container->get('language_manager') + ); } @@ -76,9 +89,13 @@ public function build() { return NULL; } + $langcode = $this->languageManager->getCurrentLanguage()->getId(); $items = []; foreach ($nodes as $node) { if ($node->access()) { + if ($node->hasTranslation($langcode)) { + $node = $node->getTranslation($langcode); + } $items[] = $node->toLink()->toRenderable(); } } diff --git a/web/modules/webform/modules/webform_access/webform_access.info.yml b/web/modules/webform/modules/webform_access/webform_access.info.yml index ef6e6ef9fa..348127145b 100644 --- a/web/modules/webform/modules/webform_access/webform_access.info.yml +++ b/web/modules/webform/modules/webform_access/webform_access.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php b/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php index 3ac0139758..2cdd89bb07 100644 --- a/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php +++ b/web/modules/webform/modules/webform_attachment/src/Element/WebformAttachmentUrl.php @@ -31,6 +31,8 @@ public static function getFileContent(array $element, WebformSubmissionInterface /** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */ $token_manager = \Drupal::service('webform.token_manager'); $url = $token_manager->replace($url, $webform_submission); + // Url can be a URI. + $url = file_create_url($url) ?: $url; // Prepend scheme and host to root relative path. if (strpos($url, '/') === 0) { $url = \Drupal::request()->getSchemeAndHttpHost() . $url; @@ -48,11 +50,10 @@ public static function getFileContent(array $element, WebformSubmissionInterface */ public static function getFileName(array $element, WebformSubmissionInterface $webform_submission) { if (!isset($element['#filename']) && !empty($element['#url'])) { - $filename = basename($element['#url']); /** @var \Drupal\webform\WebformTokenManagerInterface $token_manager */ $token_manager = \Drupal::service('webform.token_manager'); - $filename = $token_manager->replace($filename, $webform_submission); - return $filename; + $url = $token_manager->replace($element['#url'], $webform_submission); + return basename($url); } else { return parent::getFileName($element, $webform_submission); diff --git a/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php b/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php index 0e47a16ddf..eb325a81bf 100644 --- a/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php +++ b/web/modules/webform/modules/webform_attachment/src/Plugin/WebformElement/WebformAttachmentBase.php @@ -97,7 +97,8 @@ protected function formatTextItem(array $element, WebformSubmissionInterface $we default: case 'link'; case 'url'; - return $attachment_element::getFileUrl($element, $webform_submission)->toString(); + $fileUrl = $attachment_element::getFileUrl($element, $webform_submission); + return $fileUrl ? $fileUrl->toString() : ''; } } diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml index 89f04765c4..36f1ab0ff1 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml @@ -177,6 +177,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml index 204dcbab9f..796f8326ce 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml @@ -62,13 +62,13 @@ elements: | </SOURCE> </asx:values> </asx:abap> - + attachment_twig: '#type': webform_attachment_twig '#title': attachment_twig '#filename': 'attachment_twig-[current-date:html_date].xml' '#template': "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<asx:abap xmlns:asx=\"http://www.sap.com/abapxml\" version=\"1.0\">\n <asx:values>\n <VERSION>1.0</VERSION>\n <SENDER>{{ webform_id }}</SENDER>\n <WEBFORM_ID>{{ data.email }}</WEBFORM_ID>\n <SOURCE>\n {% for key, value in data %}\n <o2PARAVALU>\n <NAME>{{ (elements_flattened[key]['#xml_name']) ? elements_flattened[key]['#xml_name'] : key }}</NAME>\n <VALUE>{{ value }}</VALUE>\n </o2PARAVALU>\n {% endfor %} \n </SOURCE>\n </asx:values>\n</asx:abap>" - + css: '' javascript: '' settings: @@ -198,6 +198,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml index db0f67256f..0141d3de5c 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml @@ -157,6 +157,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml index 858742ed6a..2adb16ddc4 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml @@ -28,7 +28,7 @@ elements: | 'enabled': ':input[name="attach"]': checked: true - + css: '' javascript: '' settings: @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml index dfe8d5ec8c..eece68d887 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml @@ -165,6 +165,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml index 18874de25b..72773a73a1 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml @@ -167,6 +167,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml index f4020c2a89..24b564c7ae 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml @@ -168,6 +168,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml index a49b123868..62b4362fd4 100644 --- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml +++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_attachment' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml index 64cbc944f2..5014b9ba9a 100644 --- a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml +++ b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml index ca5de7c22f..bbdee0f3bd 100644 --- a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml +++ b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_bootstrap' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml index 78645a70a0..92cf244219 100644 --- a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml +++ b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml @@ -22,7 +22,7 @@ regions: libraries: - 'webform_bootstrap_test_theme/global-styling' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml index 6ccc6cb871..71130259ae 100644 --- a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml +++ b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_cards/js/webform_cards.js b/web/modules/webform/modules/webform_cards/js/webform_cards.js index 1b25de702f..50aee52ea8 100644 --- a/web/modules/webform/modules/webform_cards/js/webform_cards.js +++ b/web/modules/webform/modules/webform_cards/js/webform_cards.js @@ -42,7 +42,8 @@ toggleHideLabel: $form.data('toggle-hide-label'), toggleShowLabel: $form.data('toggle-show-label'), ajaxEffect: $form.data('ajax-effect'), - ajaxSpeed: $form.data('ajax-speed') + ajaxSpeed: $form.data('ajax-speed'), + ajaxScrollTop: $form.data('ajax-scroll-top') }; var currentPage = $form.data('current-page'); @@ -137,8 +138,8 @@ // If input and the cursor is not at the end of the input, do not // trigger navigation. // @see https://stackoverflow.com/questions/21177489/selectionstart-selectionend-on-input-type-number-no-longer-allowed-in-chrome - if (event.target.value !== undefined - && event.target.selectionStart !== undefined + if (typeof event.target.value !== 'undefined' + && typeof event.target.selectionStart !== 'undefined' && event.target.selectionStart !== null) { if (event.target.value.length !== event.target.selectionStart) { return; @@ -149,15 +150,21 @@ } } + // If input[type="radio"] ignore left/right keys which are used to + // navigate between radio buttons. + if (event.target.tagName === 'INPUT' && event.target.type === 'radio') { + return; + } + switch (event.which) { // Left key triggers the previous button. case 37: - setTimeout(function () {$previousButton.click();}, Drupal.webform.cards.autoForwardDelay); + setTimeout(function () {$previousButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay); break; // Right key triggers the next button. case 39: - setTimeout(function () {$nextButton.click();}, Drupal.webform.cards.autoForwardDelay); + setTimeout(function () {$nextButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay); break; } }); @@ -196,19 +203,35 @@ * @param {jQuery} $activeCard * An jQuery object containing the active card. * @param {boolean} initialize - * Are cards being initialize + * Are cards being initialize. + * If TRUE, no transition or scrolling effects will be triggered. */ function setActiveCard($activeCard, initialize) { if (!$activeCard.length) { return; } - // Unset the active card - $allCards.filter('.webform-card--active').removeClass('webform-card--active'); + // Track the previous active card. + var $prevCard = $allCards.filter('.webform-card--active'); + + // Unset the previous active card and set the active card. + $prevCard.removeClass('webform-card--active'); + $activeCard.addClass('webform-card--active'); + + // Trigger card change event. + $form.trigger('webform_cards:change', [$activeCard]); + + // Allow card change event to reset the active card, this allows for + // card change event handler to apply custom validation + // and conditional logic. + $activeCard = $allCards.filter('.webform-card--active'); + if ($activeCard.get(0) === $prevCard.get(0)) { + initialize = true; + } // Set the previous and next labels. - $previousButton.val($activeCard.data('prev-button-label') || $previousButton.data('default-label')); - $nextButton.val($activeCard.data('next-button-label') || $nextButton.data('default-label')); + setButtonLabel($previousButton, $activeCard.data('prev-button-label') || $previousButton.data('default-label')); + setButtonLabel($nextButton, $activeCard.data('next-button-label') || $nextButton.data('default-label')); // Show/hide the previous button. var hasPrevCard = !!$activeCard.prevAll('.webform-card:not([style*="display: none"])').length; @@ -220,9 +243,6 @@ $submitButton.toggle(!hasNextCard); $nextButton.toggle(hasNextCard); - // Activate the card. - $activeCard.addClass('webform-card--active'); - // Hide the next button when auto-forwarding. if (hideAutoForwardNextButton()) { $nextButton.hide(); @@ -230,7 +250,11 @@ // Show the active card. if (!initialize) { + // Show the active card. applyAjaxEffect($activeCard); + + // Scroll to the top of the page or form. + Drupal.webformScrollTop($activeCard, options.ajaxScrollTop); } // Focus the active card's first visible input. @@ -246,8 +270,6 @@ // Track progress. trackProgress(); - // Trigger card change event. - $form.trigger('webform_cards:change', [$activeCard]); } /** @@ -329,11 +351,11 @@ if ($links.attr('role') !== 'link') { $links .attr({'role': 'link', 'title': card.title, 'aria-label': card.title, 'tabindex': '0'}) - .click(function () { + .on('click', function () { var $card = $allCards.filter('[data-webform-key="' + $(this).data('webform-key') + '"]'); setActiveCard($card); }) - .keydown(function (event) { + .on('keydown', function (event) { if (event.which === 13) { var $card = $allCards.filter('[data-webform-key="' + $(this).data('webform-key') + '"]'); setActiveCard($card); @@ -351,9 +373,11 @@ // Set properties. var properties = getCardsProgressProperties(); for (var property in properties) { - var attribute = '[data-webform-progress-' + property + ']'; - var value = properties[property]; - $progress.find(attribute).html(value); + if (properties.hasOwnProperty(property)) { + var attribute = '[data-webform-progress-' + property + ']'; + var value = properties[property]; + $progress.find(attribute).html(value); + } } // Set <progress> tag [value] and [max] attributes. @@ -387,11 +411,11 @@ $('body').on('keydown', function (event) { switch (event.which) { case 37: // left. - setTimeout(function () {$previousButton.click();}, Drupal.webform.cards.autoForwardDelay); + setTimeout(function () {$previousButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay); break; case 39: // right - setTimeout(function () {$submitButton.click();}, Drupal.webform.cards.autoForwardDelay); + setTimeout(function () {$submitButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay); break; } }); @@ -414,15 +438,15 @@ $step .find('[data-webform-progress-link]') .attr({'role': 'link', 'title': title, 'aria-label': title, 'tabindex': '0'}) - .click(function () { + .on('click', function () { // Set current card. $currentCardInput.val(card); // Click button to return to the 'webform_start' page. - $button.click(); + $button.trigger('click'); }) - .keydown(function (event) { + .on('keydown', function (event) { if (event.which === 13) { - $(this).click(); + $(this).trigger('click'); } }); }); @@ -445,11 +469,11 @@ .attr('name', $cardButton.attr('name') + '-' + card) .attr('data-drupal-selector', $cardButton.attr('data-drupal-selector') + '-' + card) .attr('title', Drupal.t("Edit '@title'", {'@title': title}).toString()) - .click(function () { + .on('click', function () { // Set current card. $currentCardInput.val(card); // Click button to return to the 'webform_start' page. - $button.click(); + $button.trigger('click'); return false; }); $card.append($cardButton).show(); @@ -651,10 +675,10 @@ setActiveCard($nextCard); } else if ($previewButton.length) { - $previewButton.click(); + $previewButton.trigger('click'); } else { - $submitButton.click(); + $submitButton.trigger('click'); } } // Prevent the button's default behavior. @@ -705,7 +729,7 @@ return value; }); if (inputHasValue) { - setTimeout(function () {$nextButton.click();}, Drupal.webform.cards.autoForwardDelay); + setTimeout(function () {$nextButton.trigger('click');}, Drupal.webform.cards.autoForwardDelay); } } @@ -732,7 +756,8 @@ } var inputValues = []; - var name, type; + var name; + var type; $autoForwardInputs.each(function () { name = this.name; type = this.type; @@ -779,7 +804,7 @@ var $firstInput = $activeCard.find(':input:visible').first(); if (!inputHasValue($firstInput)) { - $firstInput.focus(); + $firstInput.trigger('focus'); } } @@ -789,7 +814,7 @@ * @param {jQuery} $input * An jQuery object containing an :input. * - * @return {{boolean}} + * @return {boolean} * TRUE if next button should be hidden */ function inputHasValue($input) { @@ -807,9 +832,24 @@ default: return $('[name="' + name + '"]').val() ? true : false; } - return false; } + /** + * Set button label value or HTML markup. + * + * @param {jQuery} $button + * A jQuery object containing a <button> or <input type="submit">. + * @param {string} label + * The button's label. + */ + function setButtonLabel($button, label) { + if ($button[0].tagName === 'BUTTON') { + $button.html(label); + } + else { + $button.val(label); + } + } }); } diff --git a/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php b/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php index cdcdc903cf..7bd587bb4b 100644 --- a/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php +++ b/web/modules/webform/modules/webform_cards/src/Form/WebformCardsConvertForm.php @@ -31,8 +31,7 @@ public function buildForm(array $form, FormStateInterface $form_state, WebformIn ]; $form['warning'] = [ '#type' => 'webform_message', - '#message_message' => '<strong>' . $this->t('Webform cards support is an experimental module/feature.') . '</strong><br/>' - . $this->t('Please make sure to test the converted webform on a staging server before using cards in production.'), + '#message_message' => $this->t('Please make sure to test the converted webform on a staging server before using cards in production.'), '#message_type' => 'warning', ]; $form['description'] = [ diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml index e5882c57af..d3b70e5383 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml @@ -187,6 +187,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml index 9df9758476..e83803a01a 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml index 7ecc59b1d2..82751afde4 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml @@ -222,6 +222,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml index c8710f8d4d..e8a0b1db67 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml @@ -197,6 +197,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml index 389b35722a..2b952720c5 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml index 1d55dfa60f..970957507e 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml @@ -5,8 +5,6 @@ dependencies: enforced: module: - webform_cards_test -_core: - default_config_hash: ahRBaC5cLszQYVnyTm6-FNHsoxJRBnXqznJTPThCO7k open: null close: null weight: 0 @@ -34,18 +32,19 @@ elements: | '#title': 'Element 2' '#default_value': '{element_2}' '#required': true + css: '' javascript: | (function ($, Drupal) { - + 'use strict'; - + Drupal.behaviors.webformCardsTestJavaScript = { attach: function (context) { var $forms = $(context).is('form.webform-submission-form') ? $(context) : $('form.webform-submission-form', context); - + $forms.once('webform-cards-test-javascript') .on('webform_cards:change', function (event, $activeCard) { console.log('webform_cards:change'); @@ -54,9 +53,9 @@ javascript: | }); } }; - + })(jQuery, Drupal); - + settings: ajax: false ajax_scroll_top: form @@ -128,6 +127,7 @@ settings: wizard_progress_states: true wizard_auto_forward: true wizard_auto_forward_hide_next_button: false + wizard_keyboard: true wizard_start_label: '' wizard_preview_link: false wizard_confirmation: true @@ -183,6 +183,8 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false + serial_disabled: false access: create: roles: @@ -232,3 +234,5 @@ access: permissions: { } handlers: { } variants: { } +_core: + default_config_hash: ahRBaC5cLszQYVnyTm6-FNHsoxJRBnXqznJTPThCO7k diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml index 4ef5fa6598..390ccaa46b 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml @@ -746,6 +746,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml index 7e62c551d9..cc0877bc6b 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml index 1abe08679e..978c1d81d3 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml @@ -249,6 +249,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml index 02ffabf547..dc84cdfa2b 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml index cd08c521bd..3f8270dc81 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml @@ -249,6 +249,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml index eec8a72053..59863b2f63 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml @@ -163,6 +163,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml index c4d45fa606..64ab2ab525 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml index 83545210e0..f5169403fa 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml @@ -168,6 +168,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml index 2ab111efd0..6e94cc4b2b 100644 --- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml +++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_cards' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_cards/webform_cards.info.yml b/web/modules/webform/modules/webform_cards/webform_cards.info.yml index 4cd771df83..6444b60e48 100644 --- a/web/modules/webform/modules/webform_cards/webform_cards.info.yml +++ b/web/modules/webform/modules/webform_cards/webform_cards.info.yml @@ -1,15 +1,14 @@ -name: 'Webform Cards [EXPERIMENTAL]' +name: 'Webform Cards' type: module description: 'Provides a ''Card'' container element for fast clientside multistep form pagination.' -experimental: true -package: 'Webform [EXPERIMENTAL]' +package: 'Webform' core_version_requirement: ^8.8 dependencies: - 'webform:webform' - 'webform:webform_clientside_validation' - 'drupal:inline_form_errors' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml b/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml index e3ecff9937..a96dee70b4 100644 --- a/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml +++ b/web/modules/webform/modules/webform_cards/webform_cards.libraries.yml @@ -9,6 +9,7 @@ webform_cards: - core/drupal - core/jquery.once - core/jquery.ui.effects.shake + - webform/webform.scroll webform_cards.admin: version: VERSION diff --git a/web/modules/webform/modules/webform_cards/webform_cards.module b/web/modules/webform/modules/webform_cards/webform_cards.module index 7a1dbbf6f5..f78d696474 100644 --- a/web/modules/webform/modules/webform_cards/webform_cards.module +++ b/web/modules/webform/modules/webform_cards/webform_cards.module @@ -18,6 +18,7 @@ use Drupal\webform\Element\WebformMessage; use Drupal\webform\Utility\WebformArrayHelper; use Drupal\webform\Utility\WebformDialogHelper; +use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\WebformInterface; use Drupal\webform\WebformSubmissionInterface; @@ -178,6 +179,8 @@ function webform_cards_webform_submission_form_alter(array &$form, FormStateInte 'ajax_effect', // Ajax speed. 'ajax_speed', + // Ajax scroll top. + 'ajax_scroll_top', ]; foreach ($setting_names as $setting_name) { if ($value = $webform->getSetting($setting_name, TRUE)) { @@ -322,7 +325,13 @@ function webform_cards_form_webform_admin_config_forms_form_alter(array &$form, '#title' => t('Default wizard/cards start label'), ], 'default_wizard_confirmation_label' => [ - '#title' => t('Default/cards wizard end label'), + '#title' => t('Default wizard/cards end label'), + ], + 'default_wizard_toggle_show_label' => [ + '#title' => t('Default wizard/cards show all elements label'), + ], + 'default_wizard_toggle_hide_label' => [ + '#title' => t('Default wizard/cards hide all elements label'), ], ], ]); @@ -348,6 +357,41 @@ function webform_cards_form_webform_admin_config_elements_form_alter(array &$for * Implements hook_form_FORM_ID_alter() for webform settings:form. * * @see \Drupal\webform\EntitySettings\WebformEntitySettingsFormForm + * @see /admin/structure/webform/manage/{webform}/settings + */ +function webform_cards_form_webform_settings_form_alter(array &$form, FormStateInterface $form_state) { + /** @var \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm $form_object */ + $form_object = $form_state->getFormObject(); + /** @var \Drupal\webform\WebformInterface $webform */ + $webform = $form_object->getEntity(); + /** @var \Drupal\webform_cards\WebformCardsManagerInterface $webform_cards_manager */ + $webform_cards_manager = \Drupal::service('webform_cards.manager'); + // Check if the webform has cards. + $has_cards = $webform_cards_manager->hasCards($webform); + if (!$has_cards) { + return; + } + + // Move hide/show from container to jus the progress type. + $form['ajax_settings']['ajax_container']['ajax_progress_type']['#states'] = $form['ajax_settings']['ajax_container']['#states']; + $form['ajax_settings']['ajax_container']['#states'] = NULL; + + // Display info message. + $form['ajax_settings']['ajax_container']['ajax_progress_type']['#weight'] = -10; + $form['ajax_settings']['ajax_container']['ajax_cards_message'] = [ + '#type' => 'webform_message', + '#message_type' => 'info', + '#message_close' => TRUE, + '#message_storage' => WebformMessage::STORAGE_SESSION, + '#message_message' => t('The below Ajax scroll, effect, and speed settings will also be applied to cards.'), + '#weight' => -9, + ]; +} + +/** + * Implements hook_form_FORM_ID_alter() for webform settings:form. + * + * @see \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm * @see /admin/structure/webform/manage/{webform}/settings/form */ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormStateInterface $form_state) { @@ -385,6 +429,10 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS ], 'wizard_track' => [ '#title' => t('Track wizard/cards progress in the URL by'), + '#options' => [ + 'name' => t("Page/card name (?page=contact)"), + 'index' => t("Page/card index (?page=2)"), + ], ], 'wizard_prev_button_label' => [ '#title' => t('Wizard/cards previous page button label'), @@ -426,7 +474,7 @@ function _webform_cards_form_alter_elements(array &$form, array $elements) { continue; } - if (Element::property($key)) { + if (WebformElementHelper::property($key)) { $form[$container_key][$key] = $element; } elseif (is_array($container)) { diff --git a/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css b/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css index 0d0ef9b75d..4d023c162c 100644 --- a/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css +++ b/web/modules/webform/modules/webform_clientside_validation/css/webform_clientside_validation.ife.css @@ -3,6 +3,7 @@ * Webform clientside validation styles. */ -.webform-submission-form strong.error.form-item--error-message { - display: block; +.form-item.js-form-type-tel + strong.error.form-item--error-message, +.form-item.js-form-type-tel + strong.error.form-item--error-message + strong.error.form-item--error-message { + margin-top: -1em; } diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml index 151f03ade2..da17edafbd 100644 --- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml +++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml @@ -312,6 +312,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml index 1749a41f24..7eec94a721 100644 --- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml +++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_clientside_validation' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml index a806997e3c..0134648170 100644 --- a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml +++ b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml @@ -8,7 +8,7 @@ dependencies: - 'clientside_validation:clientside_validation' - 'clientside_validation:clientside_validation_jquery' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml index 612ed4beba..b7d194a939 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml @@ -288,6 +288,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml index 13f645bc98..97fab95d62 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml @@ -169,6 +169,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml index 9b04f98b11..8ff6f48116 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml index 531e535515..5576b02dff 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml @@ -61,7 +61,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': Register - + css: '' javascript: '' settings: @@ -191,6 +191,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml index cc8517efb0..b5931ec676 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform_scheduled_email' - 'webform:webform_share' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install index 07c9b9959c..cf6a00c474 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install +++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install @@ -6,6 +6,8 @@ */ use Drupal\Core\Datetime\DrupalDateTime; +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; use Drupal\node\Entity\Node; use Drupal\webform\Utility\WebformDateHelper; use Drupal\webform\WebformInterface; @@ -49,4 +51,18 @@ function webform_demo_event_registration_uninstall() { $node->delete(); } } + + // Delete field configuration manually. + $field_names = ['field_webform_demo_event_date', 'field_webform_entity_limit_total']; + foreach ($field_names as $field_name) { + $field_config = FieldConfig::loadByName('node', 'webform_demo_event', $field_name); + if ($field_config) { + $field_config->delete(); + } + + $field_storage_config = FieldStorageConfig::loadByName('node', $field_name); + if ($field_storage_config) { + $field_storage_config->delete(); + } + } } diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml index 835cf54fb9..f168296fa8 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml @@ -87,7 +87,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -217,6 +217,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml index 49fa8ea2a6..22aebb940f 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml @@ -11,7 +11,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_group' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml index 115337785b..882a2820bb 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml @@ -40,7 +40,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml index 6bf37872f6..97c6075912 100644 --- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml +++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform_node' - 'webform:webform_access' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_devel/webform_devel.info.yml b/web/modules/webform/modules/webform_devel/webform_devel.info.yml index 6cb5928bd3..eb4113c5f5 100644 --- a/web/modules/webform/modules/webform_devel/webform_devel.info.yml +++ b/web/modules/webform/modules/webform_devel/webform_devel.info.yml @@ -7,7 +7,7 @@ dependencies: - 'devel:devel' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml b/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml index d5f6ecf95a..504a58ea95 100644 --- a/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml +++ b/web/modules/webform/modules/webform_editorial/webform_editorial.info.yml @@ -8,7 +8,7 @@ hidden: true dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml index d35752323f..b6742beaec 100644 --- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml +++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml index 43114bdbee..a76f2e0776 100644 --- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml +++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml @@ -163,6 +163,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml index 2510d4c905..f1fe5a63bc 100644 --- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml +++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml index bcf201bd1c..f32f5820ea 100644 --- a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml +++ b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'entity_print:entity_print' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_entity_print/webform_entity_print.module b/web/modules/webform/modules/webform_entity_print/webform_entity_print.module index e3669ab094..ea2d3532df 100644 --- a/web/modules/webform/modules/webform_entity_print/webform_entity_print.module +++ b/web/modules/webform/modules/webform_entity_print/webform_entity_print.module @@ -180,6 +180,9 @@ function webform_entity_print_preprocess_entity_print(array &$variables) { return; } + // Add webform submission to variables. + $variables['webform_submission'] = $webform_submission; + $webform = $webform_submission->getWebform(); $css = []; diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml index 696a83f6da..bb0cc4c344 100644 --- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml +++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml @@ -34,7 +34,7 @@ elements: | '#display_on': both '#view_mode': twig '#template': '{This is a custom template}' - + css: '' javascript: '' settings: @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml index 27e5126651..dc22833e3e 100644 --- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml +++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_entity_print_attachment' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml index 258a8bca02..b66d23fbbf 100644 --- a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml +++ b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_attachment' - 'webform:webform_entity_print' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml index 93e1b76e54..592465220a 100644 --- a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml +++ b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml index e45e78dbed..cba5ed4f07 100644 --- a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml +++ b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml index b163434390..03362bae9e 100644 --- a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml +++ b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml @@ -434,6 +434,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml index db7878c2ec..d0e335257c 100644 --- a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml +++ b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform' - 'webform:webform_devel' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml index 86a38519a5..259b08b508 100644 --- a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml +++ b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml index a15463670e..929dac80e5 100644 --- a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml +++ b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml index ce11d56081..862503cca6 100644 --- a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml +++ b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml index df34ed978a..7e941767f5 100644 --- a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml +++ b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml @@ -23,7 +23,7 @@ elements: | '#title': Value '#required': true '#description': 'Enter a value to displayed in a custom message.' - + css: '' javascript: '' settings: @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml index a5c76f1bc9..365b50790f 100644 --- a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml +++ b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml index 8d954c2c96..766b2b5c67 100644 --- a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml +++ b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml @@ -40,7 +40,7 @@ elements: | '#title': 'Confirmation number' '#type': value '#value': '[webform:handler:remote_post:completed:confirmation_number]' - + css: '' javascript: '' settings: @@ -144,7 +144,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -172,6 +172,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -254,22 +255,22 @@ handlers: confirmation_number: confirmation_number custom_data: | custom_all: true - + custom_options: '' cast: false debug: true completed_url: '[site:url]webform_example_remote_post/completed' completed_custom_data: | custom_completed: true - + updated_url: '[site:url]webform_example_remote_post/updated' updated_custom_data: | custom_updated: true - + deleted_url: '[site:url]webform_example_remote_post/deleted' deleted_custom_data: | custom_deleted: true - + draft_created_url: '' draft_created_custom_data: '' draft_updated_url: '' diff --git a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml index 4ef3218c4e..de8f193872 100644 --- a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml +++ b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml @@ -7,7 +7,7 @@ dependencies: - 'token:token' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml index 132a15db07..9e0f05d95e 100644 --- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml +++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml @@ -176,6 +176,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -318,9 +319,6 @@ variants: weight: 1 settings: settings: { } - override_settings: - definitions: - table: '' elements: | type: '#title_display': 'inline' @@ -352,9 +350,6 @@ variants: settings: settings: preview: 1 - override_settings: - definitions: - table: '' elements: '' handlers: email_confirmation: diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml index 6417b6ffb7..b7bd8c3ad3 100644 --- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml +++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml index 665b1cff9c..353a122429 100644 --- a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml +++ b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml index 5783576c73..74922b94a6 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml @@ -177,6 +177,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml index 45a012b6e1..9b8d2cb527 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml @@ -137,9 +137,7 @@ elements: | '#title': BMI '#ajax': true '#template': '{% if data.weight|length and data.height|length %}{{ (data.weight / (data.height * data.height) * 703)|number_format(2) }}{% endif %}' - - - + css: | .calculation { font-size: 2em; @@ -148,7 +146,7 @@ css: | width: 4em; text-align: right; } - + javascript: '' settings: ajax: false @@ -277,6 +275,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml index f1530c808c..ac5b1910d9 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml @@ -322,6 +322,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml index cdc3f92f57..e597d26d5b 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml @@ -248,6 +248,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml index 05a7dcf727..d72a9ebe04 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml @@ -216,6 +216,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml index bf3f1c5f3d..3ee4e243e8 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml @@ -647,7 +647,7 @@ elements: | '#type': address '#title': Address '#description': '@see <a href="https://www.drupal.org/project/address">https://www.drupal.org/project/address</a>' - + css: '' javascript: '' settings: @@ -777,6 +777,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml index 97408bcef3..4e3ae6b511 100644 --- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml +++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml @@ -187,6 +187,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml index 07bb31ef0c..b1552e6bf8 100644 --- a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml +++ b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml @@ -213,6 +213,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples/webform_examples.info.yml b/web/modules/webform/modules/webform_examples/webform_examples.info.yml index eaf2293a50..6403fdd195 100644 --- a/web/modules/webform/modules/webform_examples/webform_examples.info.yml +++ b/web/modules/webform/modules/webform_examples/webform_examples.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml index 9ea1f90140..60266343de 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml @@ -340,6 +340,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml index a0391df6b3..d9627d604a 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml @@ -256,6 +256,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml index bb198a271b..ad10bf30f8 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml @@ -181,6 +181,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml index d79a556f14..26a52ae345 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml @@ -311,6 +311,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml index f5a94e7b1f..2f4491aff4 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml @@ -186,6 +186,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml index 1591c2f6ca..d6c62d0c1f 100644 --- a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml +++ b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'drupal:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml index 3601733a37..1393c87b9a 100644 --- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml +++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml @@ -26,7 +26,7 @@ elements: | '#include_internal': false '#include_user_roles': true '#include_anonymous': true - + css: '' javascript: '' settings: @@ -156,6 +156,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml index c6318fc222..59bf0fc7ec 100644 --- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml +++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml @@ -44,7 +44,7 @@ elements: | '#access_create_roles': { } '#access_create_group_roles': - custom - + css: '' javascript: '' settings: @@ -174,6 +174,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml index 2911278cc2..5320bf7f18 100644 --- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml +++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_group' - 'group:group_test_config' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_group/webform_group.info.yml b/web/modules/webform/modules/webform_group/webform_group.info.yml index 5f71b3a363..2fbf03ba0e 100644 --- a/web/modules/webform/modules/webform_group/webform_group.info.yml +++ b/web/modules/webform/modules/webform_group/webform_group.info.yml @@ -1,8 +1,7 @@ -name: 'Webform Group [EXPERIMENTAL]' +name: 'Webform Group' type: module description: 'Provides Webform and Group integration.' -experimental: true -package: 'Webform [EXPERIMENTAL]' +package: 'Webform' core_version_requirement: ^8.8 dependencies: - 'webform:webform' @@ -10,7 +9,7 @@ dependencies: - 'group:group' - 'group:gnode' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js b/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js index 4ba85fade5..66a5c0563f 100644 --- a/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js +++ b/web/modules/webform/modules/webform_icheck/js/webform_icheck.element.js @@ -47,10 +47,10 @@ .iCheck(options) // @see https://github.com/fronteed/iCheck/issues/244 .on('ifChecked', function (e) { - $(e.target).attr('checked', 'checked').change(); + $(e.target).attr('checked', 'checked').trigger('change'); }) .on('ifUnchecked', function (e) { - $(e.target).removeAttr('checked').change(); + $(e.target).removeAttr('checked').trigger('change'); }); }); } diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml index ec9f3643c3..e0b4e427cd 100644 --- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml +++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml @@ -228,6 +228,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml index 943b5b68ee..faf6f3c04e 100644 --- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml +++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml @@ -962,6 +962,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml index b0bb977082..29e32560a6 100644 --- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml +++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_icheck' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml index 37b1dc0a24..f9db8d77af 100644 --- a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml +++ b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_icheck/webform_icheck.module b/web/modules/webform/modules/webform_icheck/webform_icheck.module index ee626e78de..0b1a8732e6 100644 --- a/web/modules/webform/modules/webform_icheck/webform_icheck.module +++ b/web/modules/webform/modules/webform_icheck/webform_icheck.module @@ -22,7 +22,7 @@ function webform_icheck_webform_libraries_info() { 'download_url' => Url::fromUri('https://github.com/fronteed/icheck/archive/1.0.2.zip'), 'version' => '1.0.2 ', 'optional' => FALSE, - 'deprecated' => t('The iCheck library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed before Webform 8.x-6.0.', [':href' => 'https://www.drupal.org/project/webform/issues/2931154']), + 'deprecated' => t('The iCheck library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed in Webform 7.0.', [':href' => 'https://www.drupal.org/project/webform/issues/2931154']), ]; return $libraries; } diff --git a/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js b/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js index 74d3e07591..7c95cd8812 100644 --- a/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js +++ b/web/modules/webform/modules/webform_image_select/js/webform_image_select.element.js @@ -89,7 +89,7 @@ .on('keydown', function (event) { if (event.which === 32) { // Space. - $(this).click(); + $(this).trigger('click'); event.preventDefault(); } else if (event.which === 37 || event.which === 38) { @@ -99,7 +99,7 @@ $prev = $prev.prev(); } while ($prev.length && $prev.is(':hidden')); - $prev.find('.thumbnail').focus(); + $prev.find('.thumbnail').trigger('focus'); event.preventDefault(); } else if (event.which === 39 || event.which === 40) { @@ -109,7 +109,7 @@ $next = $next.next(); } while ($next.length && $next.is(':hidden')); - $next.find('.thumbnail').focus(); + $next.find('.thumbnail').trigger('focus'); event.preventDefault(); } }) diff --git a/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php b/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php index d221017604..b3b65b19fc 100644 --- a/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php +++ b/web/modules/webform/modules/webform_image_select/src/Plugin/WebformElement/WebformImageSelect.php @@ -200,17 +200,17 @@ public function preview() { return parent::preview() + [ '#show_label' => TRUE, '#images' => [ - 'bear_1' => [ - 'text' => 'Bear 1', - 'src' => 'https://www.placebear.com/80/100', + 'dog_1' => [ + 'text' => 'Dog 1', + 'src' => 'https://www.placedog.net/80/100', ], - 'bear_2' => [ - 'text' => 'Bear 2', - 'src' => 'https://www.placebear.com/100/100', + 'dog_2' => [ + 'text' => 'Dog 2', + 'src' => 'https://www.placedog.net/100/100', ], - 'bear_3' => [ - 'text' => 'Bear 3', - 'src' => 'https://www.placebear.com/120/100', + 'dog_3' => [ + 'text' => 'Dog 3', + 'src' => 'https://www.placedog.net/120/100', ], ], ]; diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml index 9a6bb34f73..c868aad496 100644 --- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml +++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml @@ -294,6 +294,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml index a8856758d1..7029ef474c 100644 --- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml +++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml @@ -65,7 +65,7 @@ elements: | kitten_4: text: 'Cute Kitten 4' src: 'http://placekitten.com/270/200' - + css: '' javascript: '' settings: @@ -195,6 +195,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml index 5dec405ed6..81fbdbb3e6 100644 --- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml +++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform_image_select.webform_image_select_images.bears.yml @@ -5,18 +5,18 @@ dependencies: module: - webform_image_select_test id: bears -label: 'Cute Bears' +label: 'Cute Dogs' category: Animals images: | - bear_1: - text: 'Cute Bear 1' - src: 'http://placebear.com/220/200' - bear_2: - text: 'Cute Bear 2' - src: 'http://placebear.com/180/200' - bear_3: - text: 'Cute Bear 3' - src: 'http://placebear.com/130/200' - bear_4: - text: 'Cute Bear 4' - src: 'http://placebear.com/270/200' + dog_1: + text: 'Cute Dog 1' + src: 'http://placedog.net/220/200' + dog_2: + text: 'Cute Dog 2' + src: 'http://placedog.net/180/200' + dog_3: + text: 'Cute Dog 3' + src: 'http://placedog.net/130/200' + dog_4: + text: 'Cute Dog 4' + src: 'http://placedog.net/270/200' diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml index 9c8c2cf09f..741861c234 100644 --- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml +++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php index 00970e1fec..f6a58f071c 100644 --- a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php +++ b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectElementTest.php @@ -46,8 +46,13 @@ public function testImageSelect() { 'image_select_default' => 'kitten_1', ]; $this->postSubmission($webform, $edit, 'Preview'); - $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" />'); - + // @todo Remove once Drupal 9.1.x is only supported. + if (floatval(\Drupal::VERSION) >= 9.1) { + $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" loading="lazy" />'); + } + else { + $this->assertRaw('<figure style="display: inline-block; margin: 0 6px 6px 0; padding: 6px; border: 1px solid #ddd;width: 220px"><img src="http://placekitten.com/220/200" width="220" height="200" alt="Cute Kitten 1" title="Cute Kitten 1" />'); + } } } diff --git a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php index 67e743d2d5..467f456a75 100644 --- a/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php +++ b/web/modules/webform/modules/webform_image_select/tests/src/Functional/WebformImageSelectImagesTest.php @@ -57,16 +57,16 @@ public function testWebformImageSelectImages() { $dogs = Yaml::decode("dog_1: text: 'Cute Dog 1' - src: 'http://placedog.com/220/200' + src: 'http://placedog.net/220/200' dog_2: text: 'Cute Dog 2' - src: 'http://placedog.com/180/200' + src: 'http://placedog.net/180/200' dog_3: text: 'Cute Dog 3' - src: 'http://placedog.com/130/200' + src: 'http://placedog.net/130/200' dog_4: text: 'Cute Dog 4' - src: 'http://placedog.com/270/200'"); + src: 'http://placedog.net/270/200'"); // Check get element images for manually defined images. $element = ['#images' => $dogs]; @@ -115,7 +115,7 @@ public function testWebformImageSelectImages() { $element = ['#images' => 'animals']; $images = WebformImageSelectImages::getElementImages($element); $this->debug($images); - $this->assertEqual(array_keys($images), ['kitten_1', 'kitten_2', 'kitten_3', 'kitten_4', 'bear_1', 'bear_2', 'bear_3', 'bear_4']); + $this->assertEqual(array_keys($images), ['kitten_1', 'kitten_2', 'kitten_3', 'kitten_4', 'dog_1', 'dog_2', 'dog_3', 'dog_4']); } } diff --git a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml index 1c45af2567..0dbad34088 100644 --- a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml +++ b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml index bc4c85bfda..fbc57770b5 100644 --- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml +++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml @@ -48,7 +48,7 @@ elements: | '#other__option_label': Other '#other__placeholder': 'What is this other option' '#other__description': 'Other button description' - + css: '' javascript: '' settings: @@ -178,6 +178,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml index 465d45477b..1353391b7b 100644 --- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml +++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_jqueryui_buttons' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml index 54867ee755..7dbe5cbf94 100644 --- a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml +++ b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml index ea65cbda9f..55848bf13a 100644 --- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml +++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml @@ -95,7 +95,7 @@ elements: | '#title': 'Location with geolocation and hidden' '#geolocation': true '#hidden': true - + css: '' javascript: '' settings: @@ -225,6 +225,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml index 42da050f22..dc0d4c92f1 100644 --- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml +++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_location_geocomplete' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml index 4a079015ac..6cbd4e88cd 100644 --- a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml +++ b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module index bba95bd2e7..cf4422bc45 100644 --- a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module +++ b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.module @@ -23,7 +23,7 @@ function webform_location_geocomplete_webform_libraries_info() { 'version' => '1.7.0', 'elements' => ['webform_location_geocomplete'], 'optional' => FALSE, - 'deprecated' => t('The jQuery: Geocoding and Places Autocomplete Plugin library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed before Webform 8.x-6.0.', [':href' => 'https://www.drupal.org/node/2991275']), + 'deprecated' => t('The jQuery: Geocoding and Places Autocomplete Plugin library is not being maintained. It has been <a href=":href">deprecated</a> and will be removed in Webform 7.0.', [':href' => 'https://www.drupal.org/node/2991275']), ]; return $libraries; } diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml index fef29e7032..74133f1838 100644 --- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml +++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml index 45b280f87a..7689862d76 100644 --- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml +++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml index 508df80d5b..8e8b205ee0 100644 --- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml +++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml @@ -13,7 +13,7 @@ dependencies: - 'webform:webform' - 'webform:webform_node' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml index bbd0bb9fab..82ed2666f9 100644 --- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml +++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml index 879bcdf0a1..649770a4a1 100644 --- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml +++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'webform:webform_test_translation' - 'drupal:content_translation' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php index ff87dbd261..27e51de81f 100644 --- a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php +++ b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeTest.php @@ -83,13 +83,13 @@ public function testNode() { $webform->setStatus(WebformInterface::STATUS_CLOSED); $webform->save(); - // Check page closed message + // Check page closed message. $this->drupalGet('/node/' . $node->id()); $this->assertRaw('Sorry… This form is closed to new submissions.'); $this->drupalLogin($this->rootUser); - // Check webform closed warning + // Check webform closed warning. $this->drupalGet('/node/' . $node->id() . '/edit'); $this->assertRaw('The <em class="placeholder">Contact</em> webform is <a href="' . $base_path . 'admin/structure/webform/manage/contact/settings/form">closed</a>. The below status will be ignored.'); diff --git a/web/modules/webform/modules/webform_node/webform_node.info.yml b/web/modules/webform/modules/webform_node/webform_node.info.yml index 52fb750e6f..f458dc4885 100644 --- a/web/modules/webform/modules/webform_node/webform_node.info.yml +++ b/web/modules/webform/modules/webform_node/webform_node.info.yml @@ -11,7 +11,7 @@ dependencies: - 'drupal:user' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml index fd3d02defd..21b588f510 100644 --- a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml +++ b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js index abf55478c7..27aaa546c6 100644 --- a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js +++ b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js @@ -136,12 +136,12 @@ }); if (event.which === 37 || event.which === 38) { if ($prev) { - $prev.focus(); + $prev.trigger('focus'); } } else if (event.which === 39 || event.which === 40) { if ($next) { - $next.focus(); + $next.trigger('focus'); } } event.preventDefault(); @@ -253,10 +253,10 @@ .find('[data-option-value="' + value + '"]') .not('text') .first() - .focus(); + .trigger('focus'); } - $select.change(); + $select.trigger('change'); } /* ****************************************************************** */ @@ -378,8 +378,8 @@ var options = $.extend({ }, Drupal.webformOptionsCustom.panAndZoom.options); var panZoom = window.svgPanZoom($svg[0], options); - $(window).resize(function () { - panZoom.resize(); + $(window).on('resize', function () { + panZoom.trigger('resize'); panZoom.fit(); panZoom.center(); }); diff --git a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php index 8701c5b2e2..c6a7afaeb8 100644 --- a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php +++ b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php @@ -111,8 +111,8 @@ public static function processWebformOptionsCustom(&$element, FormStateInterface // @see webform_options_custom.element.js#initializeTemplateTooltip $descriptions = []; foreach ($element['#options'] as $option_value => $option_text) { - if (strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text, $option_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text); + if (WebformOptionsHelper::hasOptionDescription($option_text)) { + list($option_text, $option_description) = WebformOptionsHelper::splitOption($option_text); $element['#options'][$option_value] = $option_text; $descriptions[$option_value] = Xss::filterAdmin($option_description); } @@ -297,8 +297,8 @@ public static function setTemplateOptions(array &$element) { $options_by_text = []; foreach ($options as $option_value => $option_text) { $option_description = ''; - if (strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text, $option_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text); + if (WebformOptionsHelper::hasOptionDescription($option_text)) { + list($option_text, $option_description) = WebformOptionsHelper::splitOption($option_text); } $options_by_text[$option_text] = ['value' => $option_value, 'text' => $option_text, 'description' => $option_description]; } diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml index e70373c663..8d598e599e 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml @@ -28,7 +28,7 @@ elements: | '#selection_settings': target_bundles: page: page - + css: '' javascript: '' settings: @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml index 41c2b6adb0..0498e75101 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml @@ -8,7 +8,7 @@ dependencies: - 'webform:webform_options_limit' - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml index 7aba9c35ab..582f2e86d9 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml @@ -49,7 +49,7 @@ elements: | '#select2': true '#options': c: 'C -- This is the letter C. [element#options]' - + css: '' javascript: '' settings: @@ -179,6 +179,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml index 02815fda27..8eae2abfa2 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml @@ -19,7 +19,7 @@ elements: | webform_options_custom_image_map: '#type': 'webform_options_custom:test_image_map' '#title': webform_options_custom_image_map - + css: '' javascript: '' settings: @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml index 2e9bb08e08..0b25c91b2a 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml @@ -25,7 +25,7 @@ elements: | '#type': 'webform_options_custom:test_ballroom' '#title': webform_options_custom_url_ballroom '#required': true - + css: '' javascript: '' settings: @@ -155,6 +155,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml index 6bb58fca44..339797e266 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml @@ -23,7 +23,7 @@ elements: | '#options': 4: '4 -- Four' 5: '5 -- Five' - + css: '' javascript: '' settings: @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml index 2b3a76d230..3c76e7b7ab 100644 --- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml +++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_options_custom' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml index 5a2b648934..511427bc99 100644 --- a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml +++ b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml @@ -1,4 +1,4 @@ -name: 'Webform Custom Options [EXPERIMENTAL]' +name: 'Webform Custom Options' type: module description: 'Provides a webform element for converting HTML or SVG markup into a selectable single or multiple options input.' package: 'Webform' @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php index 7f59be2092..ac2dcaa5d5 100644 --- a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php +++ b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php @@ -262,17 +262,18 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta '#source' => $element_options, '#source__title' => $this->t('Options'), '#destination__type' => 'number', - '#destination__min' => 1, + '#destination__min' => 0, '#destination__title' => $this->t('Limit'), '#destination__description' => NULL, '#default_value' => $this->configuration['limits'], + '#filter' => FALSE, ]; } else { $form['element_settings']['options_container']['limit'] = [ '#type' => 'number', '#title' => $this->t('@title @type limit', $t_args), - '#min' => 1, + '#min' => 0, '#default_value' => $this->configuration['limit'], ]; } @@ -456,7 +457,12 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s $this->applyFormStateToConfiguration($form_state); foreach ($this->configuration['limits'] as $key => $value) { - $this->configuration['limits'][$key] = (int) $value; + if ($value === '') { + unset($this->configuration['limits'][$key]); + } + else { + $this->configuration['limits'][$key] = (int) $value; + } } if ($this->isOptionsElement()) { $this->configuration['limit'] = NULL; @@ -1233,9 +1239,9 @@ protected function getBooleanLimits() { */ protected function getLimitInformation($label, $limit, $total) { $total = $total ?: 0; - $remaining = ($limit) ? $limit - $total : NULL; + $remaining = ($limit) ? $limit - $total : 0; - if (empty($limit)) { + if (empty($limit) && $limit !== 0) { $status = WebformOptionsLimitHandlerInterface::LIMIT_STATUS_UNLIMITED; } elseif ($remaining <= 0) { @@ -1429,7 +1435,7 @@ protected function getOptionsLimitLabel($label, array $limit) { case WebformOptionsLimitHandlerInterface::MESSAGE_DISPLAY_DESCRIPTION: return $label - . (strpos($label, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE ? WebformOptionsHelper::DESCRIPTION_DELIMITER : '') + . (!WebformOptionsHelper::hasOptionDescription($label) ? WebformOptionsHelper::DESCRIPTION_DELIMITER : '') . $message; } } diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml index 0a97b937a5..b36f14ec6c 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml +++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml @@ -30,7 +30,7 @@ elements: | '#type': checkbox '#title': boolean_limit_remove '#default_value': true - + css: '' javascript: '' settings: @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml index a6a5bb470d..969964690c 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml +++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml @@ -26,6 +26,7 @@ elements: | - B - C '#options': + none: None A: A B: B C: C @@ -33,6 +34,7 @@ elements: | '#type': checkboxes '#title': options_limit_messages '#options': + none: None D: D E: E F: F @@ -242,6 +244,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -302,6 +305,7 @@ handlers: settings: element_key: options_limit_default limits: + none: 0 A: 1 B: 2 _default_: 3 @@ -327,6 +331,7 @@ handlers: settings: element_key: options_limit_messages limits: + none: 0 D: 1 E: 2 limit_reached_message: '@name is not available.' diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml index 2921fa8dde..1c2aded16a 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml +++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml @@ -27,7 +27,7 @@ elements: | '#selection_settings': target_bundles: page: page - + css: '' javascript: '' settings: @@ -157,6 +157,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml index db11287896..83cc1676b5 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml +++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml @@ -29,7 +29,7 @@ elements: | A: A B: B C: C - + css: '' javascript: '' settings: @@ -159,6 +159,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml index bd84b17d85..0dad085f8c 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml +++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_options_limit' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php index c62dcddd8e..23e9175810 100644 --- a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php +++ b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitTest.php @@ -29,10 +29,18 @@ public function testOptionsLimit() { $this->drupalGet('/webform/test_handler_options_limit'); + // Check that option None is not available. + $this->assertRaw('<input data-drupal-selector="edit-options-limit-default-none" disabled="disabled" type="checkbox" id="edit-options-limit-default-none" name="options_limit_default[none]" value="none" class="form-checkbox" />'); + $this->assertRaw('None [0 remaining]'); + // Check that option A is available. $this->assertRaw('<input data-drupal-selector="edit-options-limit-default-a" type="checkbox" id="edit-options-limit-default-a" name="options_limit_default[A]" value="A" checked="checked" class="form-checkbox" />'); $this->assertRaw('A [1 remaining]'); + // Check that option None is not available. + $this->assertRaw('<input data-drupal-selector="edit-options-limit-messages-none" aria-describedby="edit-options-limit-messages-none--description" disabled="disabled" type="checkbox" id="edit-options-limit-messages-none" name="options_limit_messages[none]" value="none" class="form-checkbox" />'); + $this->assertRaw('No options remaining / 0 limit / 0 total'); + // Check that option D is available. $this->assertRaw('<input data-drupal-selector="edit-options-limit-messages-d" aria-describedby="edit-options-limit-messages-d--description" type="checkbox" id="edit-options-limit-messages-d" name="options_limit_messages[D]" value="D" checked="checked" class="form-checkbox" />'); $this->assertRaw('1 option remaining / 1 limit / 0 total'); diff --git a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml index 78aca19341..e71242e035 100644 --- a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml +++ b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php b/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php index d0ddec96d1..f3e4e08a6b 100644 --- a/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php +++ b/web/modules/webform/modules/webform_scheduled_email/src/Plugin/WebformHandler/ScheduleEmailWebformHandler.php @@ -225,6 +225,10 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta '#title' => $this->t('Schedule emails for all existing submissions'), '#description' => $this->t('Check schedule emails after submissions have been processed.'), '#return_value' => TRUE, + // Must specify #parents because 'queue' is not a configuration setting. + // @see \Drupal\webform_scheduled_email\Plugin\WebformHandler\ScheduleEmailWebformHandler::defaultConfiguration + // @see \Drupal\webform\Plugin\WebformHandlerBase::setSettingsParentsRecursively + '#parents' => ['settings', 'queue'], ]; $form['scheduled']['queue_message'] = [ '#type' => 'webform_message', diff --git a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php index 598df32b00..3dab8adbaa 100644 --- a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php +++ b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php @@ -473,6 +473,7 @@ public function cron(EntityInterface $entity = NULL, $handler_id = NULL, $schedu WebformScheduledEmailManagerInterface::EMAIL_RESCHEDULED => $this->t('rescheduled'), WebformScheduledEmailManagerInterface::EMAIL_ALREADY_SCHEDULED => $this->t('already scheduled'), WebformScheduledEmailManagerInterface::EMAIL_UNSCHEDULED => $this->t('unscheduled'), + WebformScheduledEmailManagerInterface::EMAIL_IGNORED => $this->t('ignored'), WebformScheduledEmailManagerInterface::EMAIL_SENT => $this->t('sent'), WebformScheduledEmailManagerInterface::EMAIL_NOT_SENT => $this->t('not sent'), WebformScheduledEmailManagerInterface::EMAIL_SKIPPED => $this->t('skipped'), @@ -522,6 +523,7 @@ protected function cronSchedule(EntityInterface $entity = NULL, $handler_id = NU WebformScheduledEmailManagerInterface::EMAIL_RESCHEDULED => 0, WebformScheduledEmailManagerInterface::EMAIL_UNSCHEDULED => 0, WebformScheduledEmailManagerInterface::EMAIL_ALREADY_SCHEDULED => 0, + WebformScheduledEmailManagerInterface::EMAIL_IGNORED => 0, ]; if (empty($limit)) { diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml index 5601112e16..853ffb2fd4 100644 --- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml +++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml @@ -40,7 +40,7 @@ elements: | visible: ':input[name="send"]': value: other - + css: '' javascript: '' settings: @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml index 80451f29a2..f5e97a8b66 100644 --- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml +++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml index 7a6dfa563e..1c929362e0 100644 --- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml +++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml @@ -21,7 +21,7 @@ elements: | value: '#type': textfield '#title': value - + css: '' javascript: '' settings: @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml index a9f4d730d9..29a43f4346 100644 --- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml +++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml @@ -10,7 +10,7 @@ dependencies: - 'webform:webform' - 'webform:webform_scheduled_email' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml index 92ed5e5ecc..414438a891 100644 --- a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml +++ b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_share/js/webform_share.admin.js b/web/modules/webform/modules/webform_share/js/webform_share.admin.js index eaae5ec84e..4344da762a 100644 --- a/web/modules/webform/modules/webform_share/js/webform_share.admin.js +++ b/web/modules/webform/modules/webform_share/js/webform_share.admin.js @@ -21,11 +21,11 @@ var $message = $container.find('.webform-share-admin-copy-message'); // Copy code from textarea to the clipboard. // @see https://stackoverflow.com/questions/37658524/copying-text-of-textarea-in-clipboard-when-button-is-clicked - $button.click(function () { - $textarea.select(); + $button.on('click', function () { + $textarea.trigger('select'); document.execCommand('copy'); $message.show().delay(1500).fadeOut('slow'); - $button.focus(); + $button.trigger('focus'); Drupal.announce(Drupal.t('Code copied to clipboard…')); return false; }); diff --git a/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php b/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php index b7c5de8b15..d91a8e6396 100644 --- a/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php +++ b/web/modules/webform/modules/webform_share/src/Controller/WebformShareController.php @@ -137,8 +137,17 @@ public function script(Request $request, $library = NULL, $version = NULL) { ]; $iframe = $this->renderer->renderPlain($build); - $content = 'document.write(' . json_encode($iframe) . ');'; - return new CacheableResponse($content, 200, ['Content-Type' => 'text/javascript']); + $iframe_script = json_encode($iframe); + $iframe_script = str_replace('src=\\"\/\/', 'src=\\"' . $request->getScheme() . ':\/\/', $iframe_script); + $content = 'document.write(' . $iframe_script . ');'; + $response = new CacheableResponse($content, 200, ['Content-Type' => 'text/javascript']); + + $response->addCacheableDependency($webform); + if ($source_entity) { + $response->addCacheableDependency($source_entity); + } + + return $response; } /** diff --git a/web/modules/webform/modules/webform_share/webform_share.info.yml b/web/modules/webform/modules/webform_share/webform_share.info.yml index d839848e0c..b604fa4da0 100644 --- a/web/modules/webform/modules/webform_share/webform_share.info.yml +++ b/web/modules/webform/modules/webform_share/webform_share.info.yml @@ -1,13 +1,12 @@ -name: 'Webform Share [EXPERIMENTAL]' +name: 'Webform Share' type: module description: 'Allows webforms to be shared on other websites using an iframe.' -experimental: true -package: 'Webform [EXPERIMENTAL]' +package: 'Webform' core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js b/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js index cf261eba5d..5fc4d8bbc0 100644 --- a/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js +++ b/web/modules/webform/modules/webform_shortcuts/js/webform_shortcuts.js @@ -14,21 +14,21 @@ // Add element. if (shortcuts.addElement) { $(document).bind('keydown', shortcuts.addElement, function () { - $('#webform-ui-add-element').click(); + $('#webform-ui-add-element').trigger('click'); }); } // Add page. if (shortcuts.addPage) { $(document).bind('keydown', shortcuts.addPage, function () { - $('#webform-ui-add-page').focus().click(); + $('#webform-ui-add-page').trigger('focus').trigger('click'); }); } // Add layout. if (shortcuts.addLayout) { $(document).bind('keydown', shortcuts.addLayout, function () { - $('#webform-ui-add-layout').click(); + $('#webform-ui-add-layout').trigger('click'); }); } @@ -37,10 +37,10 @@ $(document).bind('keydown', shortcuts.saveElements, function () { var $dialogSubmit = $('form.webform-ui-element-form [data-drupal-selector="edit-submit"]'); if ($dialogSubmit.length) { - $dialogSubmit.click(); + $dialogSubmit.trigger('click'); } else { - $('form.webform-edit-form [data-drupal-selector="edit-submit"]').click(); + $('form.webform-edit-form [data-drupal-selector="edit-submit"]').trigger('click'); } }); } @@ -48,14 +48,14 @@ // Reset elements. if (shortcuts.resetElements) { $(document).bind('keydown', shortcuts.resetElements, function () { - $('form.webform-edit-form [data-drupal-selector="edit-reset"]').click(); + $('form.webform-edit-form [data-drupal-selector="edit-reset"]').trigger('click'); }); } // Toggle weight. if (shortcuts.toggleWeights) { $(document).bind('keydown', shortcuts.toggleWeights, function () { - $('.tabledrag-toggle-weight').eq(0).click(); + $('.tabledrag-toggle-weight').eq(0).trigger('click'); }); } diff --git a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml index 34445a8c76..4cf84fce96 100644 --- a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml +++ b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform' - 'webform:webform_ui' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml index c408f54d92..78783bfd1b 100644 --- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml +++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml @@ -206,6 +206,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js index aac955ab48..93a3532d7d 100644 --- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js +++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/js/webform_submission_export_import_test.js @@ -16,9 +16,9 @@ attach: function (context) { $('#edit-import-url--description a', context) .once('webform-export-import-test') - .click(function () { + .on('click', function () { $('#edit-import-url').val(this.href); - $('#webform-submission-export-import-upload-form').submit(); + $('#webform-submission-export-import-upload-form').trigger('submit'); return false; }); } diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml index 304b4d3eb5..e1a9f07ed6 100644 --- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml +++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml @@ -7,7 +7,7 @@ dependencies: - 'webform:webform_submission_export_import' - 'webform:webform_image_select' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml index f247f2b520..73d8b5e1e5 100644 --- a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml +++ b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml @@ -1,4 +1,4 @@ -name: 'Webform Submission Export/Import [EXPERIMENTAL]' +name: 'Webform Submission Export/Import' type: module description: 'Provides the ability to export and import submissions.' package: 'Webform' @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml index b3e9da6498..87d75166c5 100644 --- a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml +++ b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml index e5fe53221e..69e6d4faa4 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml @@ -36,7 +36,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send message' - + css: '' javascript: '' settings: @@ -166,6 +166,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml index 0a602b264b..a80ebb5daf 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml @@ -213,6 +213,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml index 2d7c6265ca..b14d9cb13d 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml @@ -41,7 +41,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Submit feedback' - + css: '' javascript: '' settings: @@ -171,6 +171,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml index 94348e35d2..2c635ef417 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml @@ -254,6 +254,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml index f49468deb4..d0db2582e9 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml @@ -84,7 +84,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': Apply - + css: '' javascript: '' settings: @@ -214,6 +214,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml index 86ecf18e7d..c67aa8085c 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml @@ -24,7 +24,7 @@ elements: | <li>Providing more information gives a better picture to employers</li> <li>Salary requirements, location preferences and skill level are all important factors in the hiring decision</li> </ul> - + information: '#title': 'Job Seeker Information' '#type': webform_section @@ -84,7 +84,7 @@ elements: | '#type': url '#title': Website '#description': 'Enter your existing profile/resume/portfolio link.' - + css: '' javascript: '' settings: @@ -214,6 +214,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml index 9f528b8c2d..f386052424 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml @@ -206,7 +206,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': 'Send Request' - + css: '' javascript: '' settings: @@ -336,6 +336,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml index 10cfeda9d1..b8339cace2 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml @@ -53,7 +53,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': Register - + css: '' javascript: '' settings: @@ -183,6 +183,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml index a1ff554169..84b8def3c5 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml @@ -45,7 +45,7 @@ elements: | '#type': textarea '#title': Comments '#description': 'What did you like most? What would you change? Advice for the speaker to make this session better?' - + css: '' javascript: '' settings: @@ -175,6 +175,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml index b9c74d479c..d379793862 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml @@ -32,7 +32,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': Subscribe - + css: '' javascript: '' settings: @@ -162,6 +162,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml index be799217f5..36467fbc9d 100644 --- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml +++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml @@ -126,7 +126,7 @@ elements: | '#type': webform_actions '#title': 'Submit button(s)' '#submit__label': Register - + css: '' javascript: '' settings: @@ -256,6 +256,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_templates/webform_templates.info.yml b/web/modules/webform/modules/webform_templates/webform_templates.info.yml index 28b24ce53d..9d907c6948 100644 --- a/web/modules/webform/modules/webform_templates/webform_templates.info.yml +++ b/web/modules/webform/modules/webform_templates/webform_templates.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml index b8a5934233..5ff62809d3 100644 --- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml +++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml @@ -50,7 +50,7 @@ elements: | one: One two: Two three: Three - + css: '' javascript: '' settings: @@ -180,6 +180,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml index 3db2169d70..fde10032a4 100644 --- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml +++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform_toggles' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml index bea80fd56c..d36927e481 100644 --- a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml +++ b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/modules/webform_ui/js/webform_ui.js b/web/modules/webform/modules/webform_ui/js/webform_ui.js index 210c10bd0c..7ac389b033 100644 --- a/web/modules/webform/modules/webform_ui/js/webform_ui.js +++ b/web/modules/webform/modules/webform_ui/js/webform_ui.js @@ -59,7 +59,7 @@ $row = $row[direction](); $cell = $row.find('td').eq(index).find(tagName); if ($cell.length) { - $cell.focus(); + $cell.trigger('focus'); break; } } @@ -81,12 +81,12 @@ if (direction === 'next' && this.tagName === 'A' && $(this).parent('.dropbutton-action').length) { - $cell.find('button').focus(); + $cell.find('button').trigger('focus'); event.preventDefault(); return; } else if (direction === 'prev' && this.tagName === 'BUTTON') { - $cell.find('a').focus(); + $cell.find('a').trigger('focus'); event.preventDefault(); return; } @@ -96,7 +96,7 @@ $cell = $cell[direction](); $focus = $cell.find('a:visible, input:visible, select:visible'); if ($focus.length) { - $focus.focus(); + $focus.trigger('focus'); event.preventDefault(); return; } diff --git a/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php b/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php index dcdd69b34f..5bed4d5bfb 100644 --- a/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php +++ b/web/modules/webform/modules/webform_ui/src/WebformUiEntityElementsForm.php @@ -18,6 +18,7 @@ use Drupal\webform\Plugin\WebformElement\WebformTable; use Drupal\webform\Utility\WebformDialogHelper; use Drupal\webform\Plugin\WebformElementManagerInterface; +use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\WebformEntityElementsValidatorInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -241,7 +242,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) { // Preserve the original elements root properties. $elements_original = Yaml::decode($webform->get('elements')) ?: []; foreach ($elements_original as $key => $value) { - if (Element::property($key)) { + if (WebformElementHelper::property($key)) { $elements_updated[$key] = $value; } } diff --git a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php index b81ee4fa71..7933d3905f 100644 --- a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php +++ b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php @@ -227,7 +227,7 @@ public function testElements() { // Check change element type link. $this->assertRaw('Text field <a href="' . $base_path . 'admin/structure/webform/manage/contact/element/test/change" class="button button--small webform-ajax-link" data-dialog-type="modal" data-dialog-options="{"width":800,"dialogClass":"webform-ui-dialog"}" data-drupal-selector="edit-change-type" id="edit-change-type">Change</a>'); // Check text field has description. - $this->assertRaw(t('A short description of the element used as help for the user when he/she uses the webform.')); + $this->assertRaw(t('A short description of the element used as help for the user when they use the webform.')); // Check change element types. $this->drupalGet('/admin/structure/webform/manage/contact/element/test/change'); @@ -243,7 +243,7 @@ public function testElements() { // Check change element type. $this->drupalGet('/admin/structure/webform/manage/contact/element/test/edit', ['query' => ['type' => 'hidden']]); // Check hidden has no description. - $this->assertNoRaw(t('A short description of the element used as help for the user when he/she uses the webform.')); + $this->assertNoRaw(t('A short description of the element used as help for the user when they use the webform.')); $this->assertRaw('Hidden <a href="' . $base_path . 'admin/structure/webform/manage/contact/element/test/edit" class="button button--small webform-ajax-link" data-dialog-type="dialog" data-dialog-renderer="off_canvas" data-dialog-options="{"width":600,"dialogClass":"ui-dialog-off-canvas webform-off-canvas"}" data-drupal-selector="edit-cancel" id="edit-cancel">Cancel</a>'); $this->assertRaw('(Changing from <em class="placeholder">Text field</em>)'); diff --git a/web/modules/webform/modules/webform_ui/webform_ui.info.yml b/web/modules/webform/modules/webform_ui/webform_ui.info.yml index 3497327e4e..7acb38f7ba 100644 --- a/web/modules/webform/modules/webform_ui/webform_ui.info.yml +++ b/web/modules/webform/modules/webform_ui/webform_ui.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt index 271d5044fc..704c785698 100644 --- a/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt +++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_advanced.txt @@ -85,15 +85,5 @@ Results for URL: http://localhost/wf/webform/example_accessibility_advanced ├── #edit-webform-tableselect-sort > tbody > tr:nth-child(3) > td:nth-child(2) └── <td>Three</td> - • Error: Duplicate id attribute value "edit-actions" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-actions - └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div> - - • Error: Duplicate id attribute value "edit-submit" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-submit - └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search"> - -18 Errors +16 Errors diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt index 296af482ed..d7603d0f9e 100644 --- a/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt +++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_basic.txt @@ -3,17 +3,5 @@ Welcome to Pa11y > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_basic -Results for URL: http://localhost/wf/webform/example_accessibility_basic - - • Error: Duplicate id attribute value "edit-actions" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-actions - └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div> - - • Error: Duplicate id attribute value "edit-submit" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-submit - └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search"> - -2 Errors +No issues found! diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt index 6a6ee8ee2d..9473edfd12 100644 --- a/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt +++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_containers.txt @@ -3,17 +3,5 @@ Welcome to Pa11y > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_containers -Results for URL: http://localhost/wf/webform/example_accessibility_containers - - • Error: Duplicate id attribute value "edit-actions" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-actions - └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div> - - • Error: Duplicate id attribute value "edit-submit" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-submit - └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search"> - -2 Errors +No issues found! diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt index fc75ffc778..1e235c5e07 100644 --- a/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt +++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_labels.txt @@ -3,17 +3,5 @@ Welcome to Pa11y > Running Pa11y on URL http://localhost/wf/webform/example_accessibility_labels -Results for URL: http://localhost/wf/webform/example_accessibility_labels - - • Error: Duplicate id attribute value "edit-actions" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-actions - └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div> - - • Error: Duplicate id attribute value "edit-submit" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-submit - └── <input class="search-form__submit button js-form-submit form-submit" data-drupal-selector="edit-submit" type="submit" id="edit-submit" value="Search"> - -2 Errors +No issues found! diff --git a/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt b/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt index 569329732e..8bcaefe8e4 100644 --- a/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt +++ b/web/modules/webform/reports/accessiblity/text/example_accessibility_wizard.txt @@ -50,10 +50,5 @@ Results for URL: http://localhost/wf/webform/example_accessibility_wizard ├── #webform-submission-example-accessibility-wizard-add-form > div:nth-child(7) > ul > li:nth-child(5) > span:nth-child(2) > span └── <span class="progress-title" data-webform-progress-link=""> <span class="visua...</span> - • Error: Duplicate id attribute value "edit-actions" found on the web page. - ├── WCAG2AA.Principle4.Guideline4_1.4_1_1.F77 - ├── #edit-actions - └── <div data-drupal-selector="edit-actions" class="form-actions js-form-wrapper form-wrapper" id="edit-actions"><input class="search-form__subm...</div> - -10 Errors +9 Errors diff --git a/web/modules/webform/src/Access/WebformAccountAccess.php b/web/modules/webform/src/Access/WebformAccountAccess.php index 3461026853..7be10a1856 100644 --- a/web/modules/webform/src/Access/WebformAccountAccess.php +++ b/web/modules/webform/src/Access/WebformAccountAccess.php @@ -4,6 +4,7 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Session\AccountInterface; +use Drupal\user\UserInterface; /** * Defines the custom access control handler for the user accounts. @@ -69,13 +70,15 @@ public static function checkSubmissionAccess(AccountInterface $account) { * * @param \Drupal\Core\Session\AccountInterface $account * Run access checks for this account. + * @param \Drupal\user\UserInterface $user + * The access checked routes' associated user account. * * @return \Drupal\Core\Access\AccessResultInterface * The access result. */ - public static function checkUserSubmissionsAccess(AccountInterface $account) { + public static function checkUserSubmissionsAccess(AccountInterface $account, UserInterface $user) { $condition = ($account->hasPermission('administer webform') || $account->hasPermission('administer webform submission') || $account->hasPermission('view any webform submission')) - || ($account->hasPermission('access webform submission user') && \Drupal::currentUser()->id() === $account->id()); + || ($account->hasPermission('access webform submission user') && $account->id() === $user->id()); return AccessResult::allowedIf($condition)->cachePerPermissions(); } diff --git a/web/modules/webform/src/Commands/WebformCliService.php b/web/modules/webform/src/Commands/WebformCliService.php index bb2d06adc7..1f4323addb 100644 --- a/web/modules/webform/src/Commands/WebformCliService.php +++ b/web/modules/webform/src/Commands/WebformCliService.php @@ -7,6 +7,7 @@ use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Mail\MailFormatHelper; use Drupal\Core\Serialization\Yaml; +use Drupal\Core\Site\Settings; use Drupal\webform\Controller\WebformResultsExportController; use Drupal\webform\Entity\Webform; use Drupal\webform\Entity\WebformSubmission; @@ -547,7 +548,8 @@ public function drush_webform_tidy_validate($target = NULL) { $target = $target ?: 'webform'; - if (!isset($config_directories[$target]) + if (empty(Settings::get('config_' . $target . '_directory', FALSE)) + && !(isset($config_directories) && isset($config_directories[$target])) && !(\Drupal::moduleHandler()->moduleExists($target) && file_exists(drupal_get_path('module', $target) . '/config')) && !file_exists(realpath($target))) { $t_args = ['@target' => $target]; @@ -564,7 +566,15 @@ public function drush_webform_tidy($target = NULL) { $target = $target ?: 'webform'; $prefix = $this->drush_get_option('prefix', 'webform'); - if (isset($config_directories[$target])) { + // [Drupal 8.8+] The sync directory is defined in $settings + // and not $config_directories. + // @see https://www.drupal.org/node/3018145 + $config_directory = Settings::get('config_' . $target . '_directory'); + if ($config_directory) { + $file_directory_path = DRUPAL_ROOT . '/' . $config_directory; + $dependencies = $this->drush_get_option('dependencies'); + } + elseif (isset($config_directories) && isset($config_directories[$target])) { $file_directory_path = DRUPAL_ROOT . '/' . $config_directories[$target]; $dependencies = $this->drush_get_option('dependencies'); } diff --git a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php index 505ff8e70d..5a6792ca3e 100644 --- a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php +++ b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php @@ -60,7 +60,7 @@ public function __construct(Connection $database, ModuleHandlerInterface $module * * @hook post-command sql-sanitize * - * @inheritdoc + * {@inheritdoc} */ public function sanitize($result, CommandData $command_data) { $options = $command_data->options(); @@ -85,7 +85,7 @@ public function options($options = ['sanitize-webform-submissions' => NULL]) {} /** * @hook on-event sql-sanitize-confirms * - * @inheritdoc + * {@inheritdoc} */ public function messages(&$messages, InputInterface $input) { $options = $input->getOptions(); diff --git a/web/modules/webform/src/Controller/WebformPluginElementController.php b/web/modules/webform/src/Controller/WebformPluginElementController.php index 58730b4455..96667dc42d 100644 --- a/web/modules/webform/src/Controller/WebformPluginElementController.php +++ b/web/modules/webform/src/Controller/WebformPluginElementController.php @@ -282,6 +282,7 @@ public function index() { $build = []; + // Filter. $build['filter'] = [ '#type' => 'search', '#title' => $this->t('Filter'), @@ -381,7 +382,6 @@ public function index() { ]; $build['#attached']['library'][] = 'webform/webform.admin'; - $build['#attached']['library'][] = 'webform/webform.form'; return $build; } diff --git a/web/modules/webform/src/Controller/WebformPluginExporterController.php b/web/modules/webform/src/Controller/WebformPluginExporterController.php index f6920a1122..63aaba36dd 100644 --- a/web/modules/webform/src/Controller/WebformPluginExporterController.php +++ b/web/modules/webform/src/Controller/WebformPluginExporterController.php @@ -50,15 +50,14 @@ public function index() { $rows = []; foreach ($definitions as $plugin_id => $definition) { - $rows[$plugin_id] = [ - 'data' => [ - $plugin_id, - $definition['label'], - $definition['description'], - (isset($excluded_exporters[$plugin_id])) ? $this->t('Yes') : $this->t('No'), - $definition['provider'], - ], - ]; + $row = []; + $row[] = $plugin_id; + $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']]; + $row[] = $definition['description']; + $row[] = (isset($excluded_exporters[$plugin_id])) ? $this->t('Yes') : $this->t('No'); + $row[] = $definition['provider']; + + $rows[$plugin_id] = ['data' => $row]; if (isset($excluded_exporters[$plugin_id])) { $rows[$plugin_id]['class'] = ['color-warning']; } @@ -67,6 +66,24 @@ public function index() { $build = []; + // Filter. + $build['filter'] = [ + '#type' => 'search', + '#title' => $this->t('Filter'), + '#title_display' => 'invisible', + '#size' => 30, + '#placeholder' => $this->t('Filter by exporter label'), + '#attributes' => [ + 'class' => ['webform-form-filter-text'], + 'data-element' => '.webform-exporter-plugin-table', + 'data-summary' => '.webform-exporter-plugin-summary', + 'data-item-singlular' => $this->t('exporter'), + 'data-item-plural' => $this->t('exporters'), + 'title' => $this->t('Enter a part of the exporter label to filter by.'), + 'autofocus' => 'autofocus', + ], + ]; + // Settings. $build['settings'] = [ '#type' => 'link', @@ -78,7 +95,7 @@ public function index() { // Display info. $build['info'] = [ '#markup' => $this->t('@total exporters', ['@total' => count($rows)]), - '#prefix' => '<p>', + '#prefix' => '<p class="webform-exporter-plugin-summary">', '#suffix' => '</p>', ]; @@ -94,8 +111,13 @@ public function index() { ], '#rows' => $rows, '#sticky' => TRUE, + '#attributes' => [ + 'class' => ['webform-exporter-plugin-table'], + ], ]; + $build['#attached']['library'][] = 'webform/webform.admin'; + return $build; } diff --git a/web/modules/webform/src/Controller/WebformPluginHandlerController.php b/web/modules/webform/src/Controller/WebformPluginHandlerController.php index 538513d8c4..903719cebe 100644 --- a/web/modules/webform/src/Controller/WebformPluginHandlerController.php +++ b/web/modules/webform/src/Controller/WebformPluginHandlerController.php @@ -6,6 +6,7 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Url; +use Drupal\webform\Entity\Webform; use Drupal\webform\Utility\WebformDialogHelper; use Drupal\webform\Plugin\WebformHandlerInterface; use Drupal\webform\WebformInterface; @@ -49,25 +50,34 @@ public static function create(ContainerInterface $container) { public function index() { $excluded_handlers = $this->config('webform.settings')->get('handler.excluded_handlers'); + $used_by = []; + /** @var \Drupal\webform\WebformInterface[] $webforms */ + $webforms = Webform::loadMultiple(); + foreach ($webforms as $webform) { + $handlers = $webform->getHandlers(); + foreach ($handlers as $handler) { + $used_by[$handler->getPluginId()][$webform->id()] = $webform->toLink()->toRenderable(); + } + } + $definitions = $this->pluginManager->getDefinitions(); $definitions = $this->pluginManager->getSortedDefinitions($definitions); $rows = []; foreach ($definitions as $plugin_id => $definition) { - $rows[$plugin_id] = [ - 'data' => [ - $plugin_id, - $definition['label'], - $definition['description'], - $definition['category'], - (isset($excluded_handlers[$plugin_id])) ? $this->t('Yes') : $this->t('No'), - ($definition['cardinality'] === -1) ? $this->t('Unlimited') : $definition['cardinality'], - $definition['conditions'] ? $this->t('Yes') : $this->t('No'), - $definition['submission'] ? $this->t('Required') : $this->t('Optional'), - $definition['results'] ? $this->t('Processed') : $this->t('Ignored'), - $definition['provider'], - ], - ]; + $row = []; + $row[] = $plugin_id; + $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']]; + $row[] = $definition['description']; + $row[] = $definition['category']; + $row[] = (isset($excluded_handlers[$plugin_id])) ? $this->t('Yes') : $this->t('No'); + $row[] = ($definition['cardinality'] === -1) ? $this->t('Unlimited') : $definition['cardinality']; + $row[] = $definition['conditions'] ? $this->t('Yes') : $this->t('No'); + $row[] = $definition['submission'] ? $this->t('Required') : $this->t('Optional'); + $row[] = $definition['results'] ? $this->t('Processed') : $this->t('Ignored'); + $row[] = (isset($used_by[$plugin_id])) ? ['data' => ['#theme' => 'item_list', '#items' => $used_by[$plugin_id]]] : ''; + $row[] = $definition['provider']; + $rows[$plugin_id] = ['data' => $row]; if (isset($excluded_handlers[$plugin_id])) { $rows[$plugin_id]['class'] = ['color-warning']; } @@ -76,6 +86,24 @@ public function index() { $build = []; + // Filter. + $build['filter'] = [ + '#type' => 'search', + '#title' => $this->t('Filter'), + '#title_display' => 'invisible', + '#size' => 30, + '#placeholder' => $this->t('Filter by handler label'), + '#attributes' => [ + 'class' => ['webform-form-filter-text'], + 'data-element' => '.webform-handler-plugin-table', + 'data-summary' => '.webform-handler-plugin-summary', + 'data-item-singlular' => $this->t('handler'), + 'data-item-plural' => $this->t('handlers'), + 'title' => $this->t('Enter a part of the handler label to filter by.'), + 'autofocus' => 'autofocus', + ], + ]; + // Settings. $build['settings'] = [ '#type' => 'link', @@ -87,7 +115,7 @@ public function index() { // Display info. $build['info'] = [ '#markup' => $this->t('@total handlers', ['@total' => count($rows)]), - '#prefix' => '<p>', + '#prefix' => '<p class="webform-handler-plugin-summary">', '#suffix' => '</p>', ]; @@ -104,12 +132,18 @@ public function index() { $this->t('Conditional'), $this->t('Database'), $this->t('Results'), + $this->t('Used by'), $this->t('Provided by'), ], '#rows' => $rows, '#sticky' => TRUE, + '#attributes' => [ + 'class' => ['webform-handler-plugin-table'], + ], ]; + $build['#attached']['library'][] = 'webform/webform.admin'; + return $build; } diff --git a/web/modules/webform/src/Controller/WebformPluginVariantController.php b/web/modules/webform/src/Controller/WebformPluginVariantController.php index 197f743bf7..81d49d7931 100644 --- a/web/modules/webform/src/Controller/WebformPluginVariantController.php +++ b/web/modules/webform/src/Controller/WebformPluginVariantController.php @@ -6,6 +6,7 @@ use Drupal\Core\Controller\ControllerBase; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Url; +use Drupal\webform\Entity\Webform; use Drupal\webform\Utility\WebformDialogHelper; use Drupal\webform\WebformInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -48,21 +49,31 @@ public static function create(ContainerInterface $container) { public function index() { $excluded_variants = $this->config('webform.settings')->get('variant.excluded_variants'); + $used_by = []; + /** @var \Drupal\webform\WebformInterface[] $webforms */ + $webforms = Webform::loadMultiple(); + foreach ($webforms as $webform) { + $variants = $webform->getVariants(); + foreach ($variants as $variant) { + $used_by[$variant->getPluginId()][$webform->id()] = $webform->toLink()->toRenderable(); + } + } + $definitions = $this->pluginManager->getDefinitions(); $definitions = $this->pluginManager->getSortedDefinitions($definitions); $rows = []; foreach ($definitions as $plugin_id => $definition) { - $rows[$plugin_id] = [ - 'data' => [ - $plugin_id, - $definition['label'], - $definition['description'], - $definition['category'], - (isset($excluded_variants[$plugin_id])) ? $this->t('Yes') : $this->t('No'), - $definition['provider'], - ], - ]; + $row = []; + $row[] = $plugin_id; + $row[] = ['data' => ['#markup' => $definition['label'], '#prefix' => '<span class="webform-form-filter-text-source">', '#suffix' => '</span>']]; + $row[] = $definition['description']; + $row[] = $definition['category']; + $row[] = (isset($excluded_variants[$plugin_id])) ? $this->t('Yes') : $this->t('No'); + $row[] = (isset($used_by[$plugin_id])) ? ['data' => ['#theme' => 'item_list', '#items' => $used_by[$plugin_id]]] : ''; + $row[] = $definition['provider']; + + $rows[$plugin_id] = ['data' => $row]; if (isset($excluded_variants[$plugin_id])) { $rows[$plugin_id]['class'] = ['color-warning']; } @@ -71,6 +82,24 @@ public function index() { $build = []; + // Filter. + $build['filter'] = [ + '#type' => 'search', + '#title' => $this->t('Filter'), + '#title_display' => 'invisible', + '#size' => 30, + '#placeholder' => $this->t('Filter by variant label'), + '#attributes' => [ + 'class' => ['webform-form-filter-text'], + 'data-element' => '.webform-variant-plugin-table', + 'data-summary' => '.webform-variant-plugin-summary', + 'data-item-singlular' => $this->t('variant'), + 'data-item-plural' => $this->t('variants'), + 'title' => $this->t('Enter a part of the variant label to filter by.'), + 'autofocus' => 'autofocus', + ], + ]; + // Settings. $build['settings'] = [ '#type' => 'link', @@ -82,7 +111,7 @@ public function index() { // Display info. $build['info'] = [ '#markup' => $this->t('@total variants', ['@total' => count($rows)]), - '#prefix' => '<p>', + '#prefix' => '<p class="webform-variant-plugin-summary">', '#suffix' => '</p>', ]; @@ -95,12 +124,18 @@ public function index() { $this->t('Description'), $this->t('Category'), $this->t('Excluded'), + $this->t('Used by'), $this->t('Provided by'), ], '#rows' => $rows, '#sticky' => TRUE, + '#attributes' => [ + 'class' => ['webform-variant-plugin-table'], + ], ]; + $build['#attached']['library'][] = 'webform/webform.admin'; + return $build; } diff --git a/web/modules/webform/src/Element/Webform.php b/web/modules/webform/src/Element/Webform.php index 0aac543d46..01c09f00b5 100644 --- a/web/modules/webform/src/Element/Webform.php +++ b/web/modules/webform/src/Element/Webform.php @@ -98,6 +98,19 @@ public static function preRenderWebformElement($element) { } } + // Allow anonymous drafts to be restored. + // @see \Drupal\webform\WebformSubmissionForm::buildForm + if (\Drupal::currentUser()->isAnonymous() + && $webform->getSetting('draft') === WebformInterface::DRAFT_ALL) { + $element['#cache']['max-age'] = 0; + // @todo Remove once bubbling of element's max-age to page cache is fixed. + // @see https://www.drupal.org/project/webform/issues/3015760 + // @see https://www.drupal.org/project/drupal/issues/2352009 + if (\Drupal::moduleHandler()->moduleExists('page_cache')) { + \Drupal::service(('page_cache_kill_switch'))->trigger(); + } + } + return $element; } diff --git a/web/modules/webform/src/Element/WebformCompositeBase.php b/web/modules/webform/src/Element/WebformCompositeBase.php index 7994394164..cfbce98548 100644 --- a/web/modules/webform/src/Element/WebformCompositeBase.php +++ b/web/modules/webform/src/Element/WebformCompositeBase.php @@ -117,6 +117,9 @@ public static function processWebformCompositeElementsRecursive(&$element, array $composite_required_states = WebformElementHelper::getRequiredFromVisibleStates($element); foreach ($composite_elements as $composite_key => &$composite_element) { + // Make sure the composite key is a string. + $composite_key = (string) $composite_key; + if (!Element::child($composite_key) || !is_array($composite_element)) { continue; } @@ -225,7 +228,7 @@ protected static function initializeCompositeElementsRecursive(array &$element, $element_manager = \Drupal::service('plugin.manager.webform.element'); foreach ($composite_elements as $composite_key => &$composite_element) { - if (Element::property($composite_key)) { + if (WebformElementHelper::property($composite_key)) { continue; } diff --git a/web/modules/webform/src/Element/WebformComputedBase.php b/web/modules/webform/src/Element/WebformComputedBase.php index 310345eb5c..9fceb360f2 100644 --- a/web/modules/webform/src/Element/WebformComputedBase.php +++ b/web/modules/webform/src/Element/WebformComputedBase.php @@ -275,19 +275,11 @@ public static function ajaxWebformComputedCallback(array $form, FormStateInterfa 'data-webform-announce' => t('@title is @value', $t_args), ]; $element['#prefix'] = '<div' . new Attribute($attributes) . '>'; - $element['#suffix'] = '</div>'; - // Remove flexbox wrapper because it already been render outside this - // computed element's ajax wrapper. - // @see \Drupal\webform\Plugin\WebformElementBase::prepareWrapper + // Disable states and flexbox wrapper. // @see \Drupal\webform\Plugin\WebformElementBase::preRenderFixFlexboxWrapper - $preRenderFixFlexWrapper = ['Drupal\webform\Plugin\WebformElement\WebformComputedTwig', 'preRenderFixFlexboxWrapper']; - foreach ($element['#pre_render'] as $index => $pre_render) { - if (is_array($pre_render) && $pre_render === $preRenderFixFlexWrapper) { - unset($element['#pre_render'][$index]); - } - } + $element['#webform_wrapper'] = FALSE; return $element; } diff --git a/web/modules/webform/src/Element/WebformComputedTwig.php b/web/modules/webform/src/Element/WebformComputedTwig.php index 11c9598ee2..125bf9a6f7 100644 --- a/web/modules/webform/src/Element/WebformComputedTwig.php +++ b/web/modules/webform/src/Element/WebformComputedTwig.php @@ -39,6 +39,16 @@ public function getInfo() { * {@inheritdoc} */ public static function computeValue(array $element, WebformSubmissionInterface $webform_submission) { + /** @var \Drupal\webform\WebformThemeManagerInterface $theme_manager */ + $theme_manager = \Drupal::service('webform.theme_manager'); + // Do not compute value via Twig if there is no active theme, + // except for CLI. + // Rendering a Twig template before the theme is activated can cause + // unexpected behaviors. + if (!$theme_manager->hasActiveTheme() && PHP_SAPI !== 'cli') { + return ''; + } + $whitespace = (!empty($element['#whitespace'])) ? $element['#whitespace'] : ''; $template = ($whitespace === static::WHITESPACE_SPACELESS) ? '{% spaceless %}' . $element['#template'] . '{% endspaceless %}' : $element['#template']; diff --git a/web/modules/webform/src/Element/WebformElementComposite.php b/web/modules/webform/src/Element/WebformElementComposite.php index c21bfea633..c626bcc632 100644 --- a/web/modules/webform/src/Element/WebformElementComposite.php +++ b/web/modules/webform/src/Element/WebformElementComposite.php @@ -210,7 +210,7 @@ public static function processWebformElementComposite(&$element, FormStateInterf '#title' => t('Labels'), '#help' => '<b>' . t('Title') . ':</b> ' . t('This is used as a descriptive label when displaying this webform element.') . '<hr/><b>' . t('Placeholder') . ':</b> ' . t('The placeholder will be shown in the element until the user starts entering a value.') . - '<hr/><b>' . t('Description') . ':</b> ' . t('A short description of the element used as help for the user when he/she uses the webform.') . + '<hr/><b>' . t('Description') . ':</b> ' . t('A short description of the element used as help for the user when they use the webform.') . '<hr/><b>' . t('Help text') . ':</b> ' . t('A tooltip displayed after the title.'), 'title' => [ '#type' => 'textfield', @@ -235,7 +235,7 @@ public static function processWebformElementComposite(&$element, FormStateInterf 'description' => [ '#type' => 'textarea', '#title' => t('Description'), - '#description' => t('A short description of the element used as help for the user when he/she uses the webform.'), + '#description' => t('A short description of the element used as help for the user when they use the webform.'), '#description_display' => 'invisible', '#title_display' => 'invisible', '#placeholder' => t('Enter description…'), diff --git a/web/modules/webform/src/Element/WebformEntityTrait.php b/web/modules/webform/src/Element/WebformEntityTrait.php index b2a99ef9d9..4decb37d20 100644 --- a/web/modules/webform/src/Element/WebformEntityTrait.php +++ b/web/modules/webform/src/Element/WebformEntityTrait.php @@ -71,7 +71,8 @@ public static function setOptions(array &$element, array $settings = []) { // If the selection handler is not using views, then translate // the entity reference's options. - if ($element['#selection_handler'] !== 'views') { + if (!\Drupal::moduleHandler()->moduleExists('views') + || !($handler instanceof \Drupal\views\Plugin\EntityReferenceSelection\ViewsSelection)) { $options = static::translateOptions($options, $element); } diff --git a/web/modules/webform/src/Element/WebformHeight.php b/web/modules/webform/src/Element/WebformHeight.php index 92fc7429be..9811fe2550 100644 --- a/web/modules/webform/src/Element/WebformHeight.php +++ b/web/modules/webform/src/Element/WebformHeight.php @@ -158,13 +158,13 @@ public static function processWebformHeight(&$element, FormStateInterface $form_ switch ($element['#height_type']) { case 'select': $element['container']['feet'] += $select_element_defaults + [ - '#field_suffix' => $feet_plural, - '#options' => $feet_options, - ]; + '#field_suffix' => $feet_plural, + '#options' => $feet_options, + ]; $element['container']['inches'] += $select_element_defaults + [ - '#field_suffix' => $inches_plural, - '#options' => $inches_options, - ]; + '#field_suffix' => $inches_plural, + '#options' => $inches_options, + ]; break; case 'select_suffix': @@ -175,11 +175,11 @@ public static function processWebformHeight(&$element, FormStateInterface $form_ $inches_options[$option_value] .= ' ' . ($option_value === 1 ? $inches_singular : $inches_plural); } $element['container']['feet'] += $select_element_defaults + [ - '#options' => $feet_options, - ]; + '#options' => $feet_options, + ]; $element['container']['inches'] += $select_element_defaults + [ - '#options' => $inches_options, - ]; + '#options' => $inches_options, + ]; break; default: @@ -219,7 +219,10 @@ public static function processWebformHeight(&$element, FormStateInterface $form_ // Add validate callback. $element += ['#element_validate' => []]; - array_unshift($element['#element_validate'], [get_called_class(), 'validateWebformHeight']); + array_unshift($element['#element_validate'], [ + get_called_class(), + 'validateWebformHeight', + ]); return $element; } @@ -230,7 +233,7 @@ public static function processWebformHeight(&$element, FormStateInterface $form_ public static function validateWebformHeight(&$element, FormStateInterface $form_state, &$complete_form) { $height_element =& $element['container']; - if ($height_element['feet']['#value'] === '' && $height_element['inches']['#value'] === '') { + if ($height_element['feet']['#value'] === '' && $height_element['inches']['#value'] === '') { $value = ''; } else { diff --git a/web/modules/webform/src/Element/WebformHtmlEditor.php b/web/modules/webform/src/Element/WebformHtmlEditor.php index 8708093087..f72ceb61e8 100644 --- a/web/modules/webform/src/Element/WebformHtmlEditor.php +++ b/web/modules/webform/src/Element/WebformHtmlEditor.php @@ -103,6 +103,13 @@ public static function processWebformHtmlEditor(array $element) { '#type' => 'text_format', '#format' => $format, '#allowed_formats' => [$format], + // Do not allow the text format value to be cleared when the text format + // is hidden via #states. We must use a wrapper <div> because + // The TextFormat element does not support #attributes. + // @see \Drupal\webform\Plugin\WebformElement\TextFormat::preRenderFixTextFormatStates + // @see \Drupal\filter\Element\TextFormat + '#prefix' => '<div data-webform-states-no-clear>', + '#suffix' => '</div>', ]; WebformElementHelper::fixStatesWrapper($element); return $element; diff --git a/web/modules/webform/src/Element/WebformLikert.php b/web/modules/webform/src/Element/WebformLikert.php index 8b44dd9a26..07bdb2703b 100644 --- a/web/modules/webform/src/Element/WebformLikert.php +++ b/web/modules/webform/src/Element/WebformLikert.php @@ -30,6 +30,7 @@ public function getInfo() { ], '#theme_wrappers' => ['form_element'], '#required' => FALSE, + '#required_error' => '', '#sticky' => TRUE, '#questions' => [], '#questions_description_display' => 'description', @@ -57,14 +58,14 @@ public static function processWebformLikert(&$element, FormStateInterface $form_ $answers = []; foreach ($element['#answers'] as $answer_key => $answer) { $answer = (string) $answer; - if (strpos($answer, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) { + if (!WebformOptionsHelper::hasOptionDescription($answer)) { $answer_description_property_name = NULL; $answer_title = $answer; $answer_description = ''; } else { $answer_description_property_name = ($element['#answers_description_display'] === 'help') ? 'help' : 'description'; - list($answer_title, $answer_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $answer); + list($answer_title, $answer_description) = WebformOptionsHelper::splitOption($answer); } $answers[$answer_key] = [ 'description_property_name' => $answer_description_property_name, @@ -115,14 +116,14 @@ public static function processWebformLikert(&$element, FormStateInterface $form_ $rows = []; foreach ($element['#questions'] as $question_key => $question) { $question = (string) $question; - if (strpos($question, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) { + if (!WebformOptionsHelper::hasOptionDescription($question)) { $question_description_property_name = NULL; $question_title = $question; $question_description = ''; } else { $question_description_property_name = ($element['#questions_description_display'] === 'help') ? '#help' : '#description'; - list($question_title, $question_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question); + list($question_title, $question_description) = WebformOptionsHelper::splitOption($question); } $value = (isset($element['#value'][$question_key])) ? $element['#value'][$question_key] : NULL; @@ -318,7 +319,14 @@ public static function setRequiredError(array &$element, FormStateInterface $for $value = $element['#value']; foreach ($element['#questions'] as $question_key => $question_title) { if (is_null($value[$question_key])) { - $form_state->setError($element['table'][$question_key]['likert_question'], t('@name field is required.', ['@name' => $question_title])); + $question_element =& $element['table'][$question_key]['likert_question']; + $t_args = ['@name' => $question_title]; + if (!empty($element['#required_error'])) { + $form_state->setError($question_element, new FormattableMarkup($element['#required_error'], $t_args)); + } + else { + $form_state->setError($question_element, t('@name field is required.', $t_args)); + } } } } diff --git a/web/modules/webform/src/Element/WebformMapping.php b/web/modules/webform/src/Element/WebformMapping.php index 39467b15e3..7e38ccbf4c 100644 --- a/web/modules/webform/src/Element/WebformMapping.php +++ b/web/modules/webform/src/Element/WebformMapping.php @@ -33,6 +33,7 @@ public function getInfo() { [$class, 'processAjaxForm'], ], '#theme_wrappers' => ['form_element'], + '#filter' => TRUE, '#required' => FALSE, '#source' => [], '#source__description_display' => 'description', @@ -58,14 +59,14 @@ public static function processWebformMapping(&$element, FormStateInterface $form $sources = []; foreach ($element['#source'] as $source_key => $source) { $source = (string) $source; - if (strpos($source, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) { + if (!WebformOptionsHelper::hasOptionDescription($source)) { $source_description_property_name = NULL; $source_title = $source; $source_description = ''; } else { $source_description_property_name = ($element['#source__description_display'] === 'help') ? 'help' : 'description'; - list($source_title, $source_description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source); + list($source_title, $source_description) = WebformOptionsHelper::splitOption($source); } $sources[$source_key] = [ 'description_property_name' => $source_description_property_name, @@ -186,7 +187,11 @@ public static function processWebformMapping(&$element, FormStateInterface $form */ public static function validateWebformMapping(&$element, FormStateInterface $form_state, &$complete_form) { $value = NestedArray::getValue($form_state->getValues(), $element['#parents']); - $value = array_filter($value); + + // Filter values. + if ($element['#filter']) { + $value = array_filter($value); + } // Note: Not validating REQUIRED_ALL because each destination element is // already required. diff --git a/web/modules/webform/src/Element/WebformMultiple.php b/web/modules/webform/src/Element/WebformMultiple.php index dc6923adbf..17da33669b 100644 --- a/web/modules/webform/src/Element/WebformMultiple.php +++ b/web/modules/webform/src/Element/WebformMultiple.php @@ -898,9 +898,15 @@ public static function ajaxCallback(array &$form, FormStateInterface $form_state $button = $form_state->getTriggeringElement(); $parent_length = (isset($button['#row_index'])) ? -4 : -2; $element = NestedArray::getValue($form, array_slice($button['#array_parents'], 0, $parent_length)); + // Make sure only the ajax prefix and suffix is used. $element['#prefix'] = $element['#ajax_prefix']; $element['#suffix'] = $element['#ajax_suffix']; + + // Disable states and flexbox wrapper. + // @see \Drupal\webform\Plugin\WebformElementBase::preRenderFixFlexboxWrapper + $element['#webform_wrapper'] = FALSE; + return $element; } diff --git a/web/modules/webform/src/Element/WebformOptions.php b/web/modules/webform/src/Element/WebformOptions.php index 6aa6bf46aa..73bc5ffce4 100644 --- a/web/modules/webform/src/Element/WebformOptions.php +++ b/web/modules/webform/src/Element/WebformOptions.php @@ -262,8 +262,8 @@ public static function convertValuesToOptions(array $values = NULL, $options_des public static function convertOptionsToValues(array $options = [], $options_description = FALSE) { $values = []; foreach ($options as $value => $text) { - if ($options_description && strpos($text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) { - list($text, $description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $text); + if ($options_description && WebformOptionsHelper::hasOptionDescription($text)) { + list($text, $description) = WebformOptionsHelper::splitOption($text); $values[$value] = ['text' => $text, 'description' => $description]; } else { diff --git a/web/modules/webform/src/Element/WebformOtherBase.php b/web/modules/webform/src/Element/WebformOtherBase.php index 4a3a083800..531b33b235 100644 --- a/web/modules/webform/src/Element/WebformOtherBase.php +++ b/web/modules/webform/src/Element/WebformOtherBase.php @@ -328,7 +328,7 @@ protected static function isMultiple(array $element) { protected static function convertDefaultValueToElementValue(array $element) { $type = str_replace('webform_', '', static::$type); - $default_value = isset($element['#default_value']) ? $element['#default_value'] : NULL; + $default_value = isset($element['#default_value']) && $element['#default_value'] !== '' ? $element['#default_value'] : NULL; if (static::isMultiple($element)) { // Handle edge case where $default_value is not an array. if (!is_array($default_value)) { @@ -347,7 +347,7 @@ protected static function convertDefaultValueToElementValue(array $element) { return [$type => $default_options, 'other' => NULL]; } else { - if (!empty($default_value) && !WebformOptionsHelper::hasOption($default_value, $element['#options'])) { + if ($default_value !== NULL && !WebformOptionsHelper::hasOption($default_value, $element['#options'])) { return [$type => static::OTHER_OPTION, 'other' => $default_value]; } diff --git a/web/modules/webform/src/Element/WebformTermCheckboxes.php b/web/modules/webform/src/Element/WebformTermCheckboxes.php index c4f040c71f..74eca58210 100644 --- a/web/modules/webform/src/Element/WebformTermCheckboxes.php +++ b/web/modules/webform/src/Element/WebformTermCheckboxes.php @@ -24,6 +24,7 @@ public function getInfo() { '#breadcrumb' => FALSE, '#breadcrumb_delimiter' => ' › ', '#scroll' => TRUE, + '#depth' => NULL, ] + parent::getInfo(); } @@ -80,6 +81,11 @@ protected static function getOptionsTree(array $element, $language) { continue; } + // Check depth. + if (!empty($element['#depth']) && $item->depth >= $element['#depth']) { + continue; + } + $options[$item->id()] = $item->getName(); } return $options; diff --git a/web/modules/webform/src/Element/WebformTermReferenceTrait.php b/web/modules/webform/src/Element/WebformTermReferenceTrait.php index ea80a2a3fb..cab5fad5b9 100644 --- a/web/modules/webform/src/Element/WebformTermReferenceTrait.php +++ b/web/modules/webform/src/Element/WebformTermReferenceTrait.php @@ -66,6 +66,11 @@ protected static function getOptionsBreadcrumb(array $element, $language) { continue; } + // Check depth. + if (!empty($element['#depth']) && $item->depth >= $element['#depth']) { + continue; + } + $breadcrumb[$item->depth] = $item->getName(); $breadcrumb = array_slice($breadcrumb, 0, $item->depth + 1); $options[$item->id()] = implode($element['#breadcrumb_delimiter'], $breadcrumb); @@ -100,6 +105,11 @@ protected static function getOptionsTree(array $element, $language) { continue; } + // Check depth. + if (!empty($element['#depth']) && $item->depth >= $element['#depth']) { + continue; + } + $options[$item->id()] = str_repeat($element['#tree_delimiter'], $item->depth) . $item->getName(); } return $options; diff --git a/web/modules/webform/src/Element/WebformTermSelect.php b/web/modules/webform/src/Element/WebformTermSelect.php index 8d5562b1dc..0747a36ee2 100644 --- a/web/modules/webform/src/Element/WebformTermSelect.php +++ b/web/modules/webform/src/Element/WebformTermSelect.php @@ -23,6 +23,7 @@ public function getInfo() { '#tree_delimiter' => '-', '#breadcrumb' => FALSE, '#breadcrumb_delimiter' => ' › ', + '#depth' => NULL, ] + parent::getInfo(); } diff --git a/web/modules/webform/src/Entity/Webform.php b/web/modules/webform/src/Entity/Webform.php index c45948c73c..e4094693d5 100644 --- a/web/modules/webform/src/Entity/Webform.php +++ b/web/modules/webform/src/Entity/Webform.php @@ -161,6 +161,15 @@ class Webform extends ConfigEntityBundleBase implements WebformInterface { */ protected $override = FALSE; + /** + * The webform translated elements state. + * + * When set to TRUE the webform can't not be saved. + * + * @var bool + */ + protected $elementsTranslated = FALSE; + /** * The webform status. * @@ -559,7 +568,7 @@ public function setOverride($override = TRUE) { * {@inheritdoc} */ public function isOverridden() { - return $this->override; + return $this->override || $this->elementsTranslated; } /** @@ -1151,6 +1160,7 @@ public static function getDefaultSettings() { 'results_customize' => FALSE, 'token_view' => FALSE, 'token_update' => FALSE, + 'token_delete' => FALSE, 'serial_disabled' => FALSE, ]; } @@ -1305,7 +1315,7 @@ public function getElementsVariant() { * An associative array of flattened form elements with each element's * operation access checked. */ - protected function checkElementsFlattenedAccess($operation = NULL, array $elements) { + protected function checkElementsFlattenedAccess($operation = NULL, array $elements = []) { if ($operation === NULL) { return $elements; } @@ -1406,13 +1416,15 @@ public function setElements(array $elements) { } /** - * Initialize parse webform elements. + * Initialize and parse webform elements. */ protected function initElements() { if (isset($this->elementsInitialized)) { return; } + // Reset everything excepts pages. + // @todo Figure out how we can call ::resetElements. // @see \Drupal\webform\Entity\Webform::resetElements $this->hasFlexboxLayout = FALSE; $this->hasContainer = FALSE; @@ -1434,28 +1446,11 @@ protected function initElements() { $this->elementsDefaultData = []; try { - $config_translation = \Drupal::moduleHandler()->moduleExists('config_translation'); - /** @var \Drupal\webform\WebformTranslationManagerInterface $translation_manager */ - $translation_manager = \Drupal::service('webform.translation_manager'); - /** @var \Drupal\Core\Language\LanguageManagerInterface $language_manager */ - $language_manager = \Drupal::service('language_manager'); - - // If current webform is translated, load the base (default) webform and - // apply the translation to the elements. - if ($config_translation - && ($this->langcode !== $language_manager->getCurrentLanguage()->getId())) { - // Always get the elements in the original language. - $elements = $translation_manager->getElements($this); - // For none admin routes get the element (label) translations. - if (!$translation_manager->isAdminRoute()) { - $this->elementsTranslations = $translation_manager->getElements($this, $language_manager->getCurrentLanguage()->getId()); - } - } - else { - $elements = WebformYaml::decode($this->elements); - } + // Init element translations. + $this->initElementsTranslation(); // Since YAML supports simple values. + $elements = WebformYaml::decode($this->elements); $elements = (is_array($elements)) ? $elements : []; $this->elementsDecoded = $elements; } @@ -1479,6 +1474,101 @@ protected function initElements() { $this->elementsInitialized = $elements; } + /** + * Initialize elements translation. + * + * @param bool $elements_translated + * Set elements translated flag so that translated elements can be alter + * by variants. This parameter is only used before applying variants. + * + * @see \Drupal\webform\Entity\Webform::applyVariants + */ + protected function initElementsTranslation($elements_translated = FALSE) { + // If config translation is not enabled then return. + if (!\Drupal::moduleHandler()->moduleExists('config_translation')) { + return; + } + + // If the webform elements have been translated, then we no longer want + // to get and apply element translations. + // This allows variants to alter translated elements. + // @see \Drupal\webform\Entity\Webform::applyVariants + if ($this->elementsTranslated) { + return; + } + + // Get the current langcode. + $current_langcode = \Drupal::languageManager()->getCurrentLanguage()->getId(); + + // If the current langcode is the same as this webform's langcode + // then return. + if ($this->langcode === $current_langcode) { + return; + } + + /** @var \Drupal\webform\WebformTranslationManagerInterface $translation_manager */ + $translation_manager = \Drupal::service('webform.translation_manager'); + + // For admin routes we need to get the original untranslated elements. + if ($translation_manager->isAdminRoute()) { + $this->elements = WebformYaml::encode($translation_manager->getElements($this)); + return; + } + + // Get the webform's decoded elements and translations. + $elements = Yaml::decode($this->elements); + $elementsTranslations = $translation_manager->getElements($this, $current_langcode); + + // If the elements are empty or they are equal to the translated elements + // then, we need to load the elements in the original language. + if (empty($elementsTranslations) || ($elementsTranslations === $elements)) { + $elements = $translation_manager->getElements($this); + $this->elements = WebformYaml::encode($elements); + } + + // Set the element's translations. + $this->elementsTranslations = $elementsTranslations; + + // Ensure that translated webform elements are set and can be altered + // by a variant. + if ($elements_translated && $this->elementsTranslations) { + // Init elements and reset them with the translations. + $this->initElementsTranslationsRecursive($elements); + $this->setElements($elements); + + // Clear the elements translations and stop the elements from + // being translated. + $this->elementsTranslations = []; + $this->elementsTranslated = TRUE; + } + } + + /** + * Init elements translations before variants are applied. + * + * This method applies translations to raw elements, while + * Webform::initElementsRecursive applies translations to elements before + * they are initialized. + * + * @param array $elements + * The webform elements. + * + * @see \Drupal\webform\Entity\Webform::initElementsRecursive + */ + protected function initElementsTranslationsRecursive(array &$elements) { + foreach ($elements as $key => &$element) { + if (!WebformElementHelper::isElement($element, $key)) { + continue; + } + + if (isset($this->elementsTranslations[$key])) { + WebformElementHelper::applyTranslation($element, $this->elementsTranslations[$key]); + } + + $this->initElementsTranslationsRecursive($element); + } + } + /** * Reset parsed and cached webform elements. */ @@ -1526,6 +1616,7 @@ protected function initElementsRecursive(array &$elements, $parent = '', $depth } // Apply translation to element. + // @see \Drupal\webform\Entity\Webform::initElementsTranslationsRecursive if (isset($this->elementsTranslations[$key])) { WebformElementHelper::applyTranslation($element, $this->elementsTranslations[$key]); } @@ -2285,12 +2376,12 @@ public function updatePaths() { // If 'Allow users to post submission from a dedicated URL' is disabled, // delete all existing paths. - if (empty($this->settings['page'])) { + if (empty($this->getSetting('page'))) { $this->deletePaths(); return; } - $page_submit_path = trim($this->settings['page_submit_path'], '/'); + $page_submit_path = trim($this->getSetting('page_submit_path'), '/'); $default_page_base_path = trim(\Drupal::config('webform.settings')->get('settings.default_page_base_path'), '/'); // Skip generating paths if submit path and base path are empty. @@ -2304,8 +2395,8 @@ public function updatePaths() { foreach ($path_suffixes as $path_suffix) { $path_source = '/webform/' . $this->id() . $path_suffix; $path_alias = $path_base_alias . $path_suffix; - if ($path_suffix === '/confirmation' && $this->settings['page_confirm_path']) { - $path_alias = '/' . trim($this->settings['page_confirm_path'], '/'); + if ($path_suffix === '/confirmation' && $this->getSetting('page_confirm_path')) { + $path_alias = '/' . trim($this->getSetting('page_confirm_path'), '/'); } $this->updatePath($path_source, $path_alias, $this->langcode); $this->updatePath($path_source, $path_alias, LanguageInterface::LANGCODE_NOT_SPECIFIED); @@ -2815,13 +2906,22 @@ public function applyVariants(WebformSubmissionInterface $webform_submission = N $variants += $this->getVariantsData($webform_submission); } + // Skip if there are no variants that need to be applied. + if (empty($variants)) { + return; + } + + // Ensure that translated webform elements are set and can be altered + // by a variant. + $this->initElementsTranslation(TRUE); + // Apply variants. $is_applied = FALSE; $variant_element_keys = $this->getElementsVariant(); - foreach ($variant_element_keys as $varient_element_key) { - if (!empty($variants[$varient_element_key])) { - $instance_id = $variants[$varient_element_key]; - if ($this->applyVariant($varient_element_key, $instance_id, $force)) { + foreach ($variant_element_keys as $variant_element_key) { + if (!empty($variants[$variant_element_key])) { + $instance_id = $variants[$variant_element_key]; + if ($this->applyVariant($variant_element_key, $instance_id, $force)) { $is_applied = TRUE; } } @@ -2889,7 +2989,7 @@ public function applyVariant($element_key, $instance_id, $force = FALSE) { } // Apply the variant. - $variant_plugin->applyVariant(); + return $variant_plugin->applyVariant(); } /****************************************************************************/ @@ -3077,7 +3177,8 @@ public function onDependencyRemoval(array $dependencies) { $plugin_definition = $handler->getPluginDefinition(); $provider = $plugin_definition['provider']; if (in_array($provider, $dependencies['module'])) { - $this->deleteWebformHandler($handler); + $handler->setWebform($this); + $this->getHandlers()->removeInstanceId($handler->getHandlerId()); $changed = TRUE; } } @@ -3089,7 +3190,8 @@ public function onDependencyRemoval(array $dependencies) { $plugin_definition = $variant->getPluginDefinition(); $provider = $plugin_definition['provider']; if (in_array($provider, $dependencies['module'])) { - $this->deleteWebformVariant($variant); + $variant->setWebform($this); + $this->getVariants()->removeInstanceId($variant->getVariantId()); $changed = TRUE; } } diff --git a/web/modules/webform/src/Entity/WebformSubmission.php b/web/modules/webform/src/Entity/WebformSubmission.php index 74b1395fec..1583279792 100644 --- a/web/modules/webform/src/Entity/WebformSubmission.php +++ b/web/modules/webform/src/Entity/WebformSubmission.php @@ -571,6 +571,12 @@ public function getTokenUrl($operation = 'update') { $url = $this->getSourceUrl(); break; + case 'delete': + /** @var \Drupal\webform\WebformRequestInterface $request_handler */ + $request_handler = \Drupal::service('webform.request'); + $url = $request_handler->getUrl($this, $this->getSourceEntity(), 'webform.user.submission.delete'); + break; + default: throw new \Exception("Token URL operation $operation is not supported"); } diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php index 3ebb1c74fb..8afd096b3c 100644 --- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php +++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php @@ -373,7 +373,7 @@ public function form(array $form, FormStateInterface $form_state) { '#access' => FALSE, '#states' => [ 'visible' => [ - ':input[name="wizard_auto_forward]' => ['checked' => TRUE], + ':input[name="wizard_auto_forward"]' => ['checked' => TRUE], ], ], ]; diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php index 12850b01b0..6b67fe76a7 100644 --- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php +++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsGeneralForm.php @@ -294,18 +294,6 @@ public function form(array $form, FormStateInterface $form_state) { ], ], ]; - $form['ajax_settings']['ajax_container']['ajax_scroll_top'] = [ - '#type' => 'select', - '#title' => $this->t('On Ajax load, scroll to the top of the…'), - '#description' => $this->t("Select where the page should be scrolled to when paging, saving of drafts, previews, submissions, and confirmations. Select 'None' to disable scrolling."), - '#options' => [ - '' => $this->t('None'), - 'form' => $this->t('Form'), - 'page' => $this->t('Page'), - ], - '#default_value' => $settings['ajax_scroll_top'], - '#attributes' => ['data-webform-states-no-clear' => TRUE], - ]; $form['ajax_settings']['ajax_container']['ajax_progress_type'] = [ '#type' => 'select', '#title' => $this->t('Ajax progress type'), @@ -318,6 +306,18 @@ public function form(array $form, FormStateInterface $form_state) { ], '#default_value' => $settings['ajax_progress_type'], ]; + $form['ajax_settings']['ajax_container']['ajax_scroll_top'] = [ + '#type' => 'select', + '#title' => $this->t('On Ajax load, scroll to the top of the…'), + '#description' => $this->t("Select where the page should be scrolled to when paging, saving of drafts, previews, submissions, and confirmations. Select 'None' to disable scrolling."), + '#options' => [ + '' => $this->t('None'), + 'form' => $this->t('Form'), + 'page' => $this->t('Page'), + ], + '#default_value' => $settings['ajax_scroll_top'], + '#attributes' => ['data-webform-states-no-clear' => TRUE], + ]; $form['ajax_settings']['ajax_container']['ajax_effect'] = [ '#type' => 'select', '#title' => $this->t('Ajax effect'), diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php index 6b041b0d29..5e3a5fdd9e 100644 --- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php +++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php @@ -120,7 +120,7 @@ public function form(array $form, FormStateInterface $form_state) { '#states' => [ 'visible' => [ ':input[name="serial_disabled"]' => ['checked' => FALSE], - ] + ], ], ]; $form['submission_settings']['serial_disabled'] = [ @@ -213,17 +213,6 @@ public function form(array $form, FormStateInterface $form_state) { 'title' => $this->t('Show the notification about previous submissions'), 'form_description' => $this->t('Show the previous submissions notification that appears when users have previously submitted this form.'), ], - 'token_view' => [ - 'title' => $this->t('Allow users to view a submission using a secure token'), - 'form_description' => $this->t("If checked users will be able to view a submission using the webform submission's URL appended with the submission's (secure) token.") . ' ' . - $this->t("The 'tokenized' URL to view a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:view-url] token."), - ], - 'token_update' => [ - 'title' => $this->t('Allow users to update a submission using a secure token'), - 'form_description' => $this->t("If checked users will be able to update a submission using the webform's URL appended with the submission's (secure) token.") . ' ' . - $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:update-url] token.") . ' ' . - $this->t('Only webforms that are open to new submissions can be updated using the secure token.'), - ], // Global behaviors. // @see \Drupal\webform\Form\WebformAdminSettingsForm 'submission_log' => [ @@ -238,19 +227,6 @@ public function form(array $form, FormStateInterface $form_state) { ], ]; $this->appendBehaviors($form['submission_behaviors'], $behavior_elements, $settings, $default_settings); - $form['submission_behaviors']['token_update_warning'] = [ - '#type' => 'webform_message', - '#message_type' => 'warning', - '#message_message' => $this->t("Submissions accessed using the (secure) token will by-pass all webform submission access rules."), - '#states' => [ - 'visible' => [ - [':input[name="token_view"]' => ['checked' => TRUE]], - 'or', - [':input[name="token_update"]' => ['checked' => TRUE]], - ], - ], - '#weight' => $form['submission_behaviors']['token_update']['#weight'] + 1, - ]; // User settings. $form['submission_user_settings'] = [ @@ -302,6 +278,49 @@ public function form(array $form, FormStateInterface $form_state) { '#default_value' => $columns_default_value, ]; + // Submission access. + $form['submission_access'] = [ + '#type' => 'details', + '#title' => $this->t('Submission access token settings'), + '#open' => TRUE, + ]; + $form['submission_access']['token_update_warning'] = [ + '#type' => 'webform_message', + '#message_type' => 'warning', + '#message_message' => $this->t("Submissions accessed using the (secure) token will by-pass all webform submission access rules."), + '#message_close' => TRUE, + '#message_storage' => WebformMessage::STORAGE_SESSION, + '#states' => [ + 'visible' => [ + [':input[name="token_view"]' => ['checked' => TRUE]], + 'or', + [':input[name="token_update"]' => ['checked' => TRUE]], + 'or', + [':input[name="token_delete"]' => ['checked' => TRUE]], + ], + ], + ]; + $behavior_elements = [ + 'token_view' => [ + 'title' => $this->t('Allow users to view a submission using a secure token'), + 'form_description' => $this->t("If checked users will be able to view a submission using the webform submission's URL appended with the submission's (secure) token.") . ' ' . + $this->t("The 'tokenized' URL to view a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:view-url] token."), + ], + 'token_update' => [ + 'title' => $this->t('Allow users to update a submission using a secure token'), + 'form_description' => $this->t("If checked users will be able to update a submission using the webform's URL appended with the submission's (secure) token.") . ' ' . + $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:update-url] token.") . ' ' . + $this->t('Only webforms that are open to new submissions can be updated using the secure token.'), + ], + 'token_delete' => [ + 'title' => $this->t('Allow users to delete a submission using a secure token'), + 'form_description' => $this->t("If checked users will be able to delete a submission using the webform's URL appended with the submission's (secure) token.") . ' ' . + $this->t("The 'tokenized' URL to update a submission will be available when viewing a submission's information and can be inserted into an email using the [webform_submission:delete-url] token.") . ' ' . + $this->t('Only webforms that are open to new submissions can be deleted using the secure token.'), + ], + ]; + $this->appendBehaviors($form['submission_access'], $behavior_elements, $settings, $default_settings); + // Access denied. $form['access_denied'] = [ '#type' => 'details', diff --git a/web/modules/webform/src/Form/WebformAjaxFormTrait.php b/web/modules/webform/src/Form/WebformAjaxFormTrait.php index f865fa129b..17ccc29749 100644 --- a/web/modules/webform/src/Form/WebformAjaxFormTrait.php +++ b/web/modules/webform/src/Form/WebformAjaxFormTrait.php @@ -408,12 +408,11 @@ protected function getFormStateRedirectUrl(FormStateInterface $form_state) { * @see \Drupal\webform\Form\WebformAjaxFormTrait::submitAjaxForm */ protected function announce($text, $priority = 'polite') { - $announcements = $this->getAnnouncements(); + $announcements =& drupal_static('webform_announcements', []); $announcements[] = [ 'text' => $text, 'priority' => $priority, ]; - $this->setAnnouncements($announcements); } /** @@ -423,8 +422,7 @@ protected function announce($text, $priority = 'polite') { * An associative array of announcements. */ protected function getAnnouncements() { - $session = $this->getRequest()->getSession(); - return $session->get('announcements') ?: []; + return drupal_static('webform_announcements', []); } /** @@ -434,18 +432,15 @@ protected function getAnnouncements() { * An associative array of announcements. */ protected function setAnnouncements(array $announcements) { - $session = $this->getRequest()->getSession(); - $session->set('announcements', $announcements); - $session->save(); + $this->resetAnnouncements(); + drupal_static('webform_announcements', $announcements); } /** * Reset announcements. */ protected function resetAnnouncements() { - $session = $this->getRequest()->getSession(); - $session->remove('announcements'); - $session->save(); + drupal_static_reset('webform_announcements'); } } diff --git a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php index 53b671536e..2048a0302c 100644 --- a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php +++ b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php @@ -5,6 +5,7 @@ use Drupal\Core\Entity\ContentEntityDeleteForm; use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Url; use Drupal\webform\WebformRequestInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -174,8 +175,19 @@ protected function getDeletionMessage() { * {@inheritdoc} */ public function getCancelUrl() { - $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission.delete') !== FALSE) ? 'webform.user.submissions' : 'webform.results_submissions'; - return $this->requestHandler->getUrl($this->webform, $this->sourceEntity, $base_route_name); + if ($this->webform->access('submission_view_own') || $this->webform->access('submission_view_any')) { + $base_route_name = (strpos(\Drupal::routeMatch()->getRouteName(), 'webform.user.submission.delete') !== FALSE) ? 'webform.user.submissions' : 'webform.results_submissions'; + return $this->requestHandler->getUrl($this->webform, $this->sourceEntity, $base_route_name); + } + elseif ($this->sourceEntity && $this->sourceEntity->hasLinkTemplate('canonical') && $this->sourceEntity->access('view')) { + return $this->sourceEntity->toUrl(); + } + elseif ($this->webform->access('view')) { + return $this->webform->toUrl(); + } + else { + return Url::fromRoute('<front>'); + } } /** diff --git a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php index b12f40ed55..7d345bc543 100644 --- a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php +++ b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php @@ -228,7 +228,7 @@ public function batchProcess(WebformInterface $webform = NULL, EntityInterface $ * @param array $operations * An array of function calls (not used in this function). */ - public function batchFinish($success = FALSE, array $results, array $operations) { + public function batchFinish($success = FALSE, array $results = [], array $operations = []) { if (!$success) { $this->messenger()->addStatus($this->t('Finished with an error.')); } diff --git a/web/modules/webform/src/Plugin/Block/WebformBlock.php b/web/modules/webform/src/Plugin/Block/WebformBlock.php index 69fcaa0525..9169f70ff1 100644 --- a/web/modules/webform/src/Plugin/Block/WebformBlock.php +++ b/web/modules/webform/src/Plugin/Block/WebformBlock.php @@ -8,6 +8,7 @@ use Drupal\Core\EventSubscriber\MainContentViewSubscriber; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; +use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Session\AccountInterface; use Drupal\webform\Utility\WebformYaml; use Drupal\webform\WebformInterface; @@ -47,6 +48,13 @@ class WebformBlock extends BlockBase implements ContainerFactoryPluginInterface */ protected $tokenManager; + /** + * The route match. + * + * @var \Drupal\Core\Routing\RouteMatchInterface + */ + protected $routeMatch; + /** * Creates a WebformBlock instance. * @@ -62,12 +70,15 @@ class WebformBlock extends BlockBase implements ContainerFactoryPluginInterface * The entity type manager. * @param \Drupal\webform\WebformTokenManagerInterface $token_manager * The webform token manager. + * @param \Drupal\Core\Routing\RouteMatchInterface $route_match + * The current route match. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, EntityTypeManagerInterface $entity_type_manager, WebformTokenManagerInterface $token_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, EntityTypeManagerInterface $entity_type_manager, WebformTokenManagerInterface $token_manager, RouteMatchInterface $route_match = NULL) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->requestStack = $request_stack; $this->entityTypeManager = $entity_type_manager; $this->tokenManager = $token_manager; + $this->routeMatch = $route_match ?: \Drupal::routeMatch(); } /** @@ -80,7 +91,8 @@ public static function create(ContainerInterface $container, array $configuratio $plugin_definition, $container->get('request_stack'), $container->get('entity_type.manager'), - $container->get('webform.token_manager') + $container->get('webform.token_manager'), + $container->get('current_route_match') ); } @@ -192,9 +204,19 @@ public function blockSubmit($form, FormStateInterface $form_state) { * {@inheritdoc} */ public function build() { + $webform = $this->getWebform(); + if (!$webform) { + if (strpos($this->routeMatch->getRouteName(), 'layout_builder.') === 0) { + return ['#markup' => $this->t('The webform (@webform) is broken or missing.', ['@webform' => $this->configuration['webform_id']])]; + } + else { + return NULL; + } + } + $build = [ '#type' => 'webform', - '#webform' => $this->getWebform(), + '#webform' => $webform, '#default_data' => WebformYaml::decode($this->configuration['default_data']), ]; diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php index 9ddb6112a6..1eb2c5b6c3 100644 --- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php +++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerate.php @@ -29,7 +29,7 @@ class WebformSubmissionDevelGenerate extends DevelGenerateBase implements Contai /** * {@inheritdoc} */ - public function validateDrushParams(array $args, array $options = []) { + public function validateDrushParams($args) { return $this->_validateDrushParams($args); } diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php index 978bada6e9..5ab2e04113 100644 --- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php +++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php @@ -12,6 +12,7 @@ use Drupal\webform\WebformSubmissionGenerateInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RequestStack; +use Drupal\Component\Datetime\TimeInterface; /** * Provides a WebformSubmissionDevelGenerate trait. @@ -83,6 +84,13 @@ trait WebformSubmissionDevelGenerateTrait { */ protected $messenger; + /** + * The time service. + * + * @var \Drupal\Component\Datetime\TimeInterface + */ + protected $time; + /** * Constructs a WebformSubmissionDevelGenerate object. * @@ -104,8 +112,10 @@ trait WebformSubmissionDevelGenerateTrait { * The webform submission generator. * @param \Drupal\webform\WebformEntityReferenceManagerInterface $webform_entity_reference_manager * The webform entity reference manager. + * @param \Drupal\Component\Datetime\TimeInterface $time + * The time service. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, Connection $database, EntityTypeManagerInterface $entity_type_manager, MessengerInterface $messenger, WebformSubmissionGenerateInterface $webform_submission_generate, WebformEntityReferenceManagerInterface $webform_entity_reference_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, RequestStack $request_stack, Connection $database, EntityTypeManagerInterface $entity_type_manager, MessengerInterface $messenger, WebformSubmissionGenerateInterface $webform_submission_generate, WebformEntityReferenceManagerInterface $webform_entity_reference_manager, TimeInterface $time) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->request = $request_stack->getCurrentRequest(); @@ -116,6 +126,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition $this->webformEntityReferenceManager = $webform_entity_reference_manager; $this->webformStorage = $entity_type_manager->getStorage('webform'); $this->webformSubmissionStorage = $entity_type_manager->getStorage('webform_submission'); + $this->time = $time; } /** @@ -131,7 +142,8 @@ public static function create(ContainerInterface $container, array $configuratio $container->get('entity_type.manager'), $container->get('messenger'), $container->get('webform_submission.generate'), - $container->get('webform.entity_reference_manager') + $container->get('webform.entity_reference_manager'), + $container->get('datetime.time') ); } @@ -281,11 +293,11 @@ protected function generateSubmissions(array $values) { } if (!empty($values['webform_ids'])) { $this->initializeGenerate($values); - $start = time(); + $start = $this->time->getRequestTime(); for ($i = 1; $i <= $values['num']; $i++) { $this->generateSubmission($values); if (function_exists('drush_log') && $i % drush_get_option('feedback', 1000) === 0) { - $now = time(); + $now = $this->time->getRequestTime(); $dt_args = [ '@feedback' => drush_get_option('feedback', 1000), '@rate' => (drush_get_option('feedback', 1000) * 60) / ($now - $start), @@ -331,7 +343,7 @@ protected function initializeGenerate(array &$values) { // Set created min and max. $values['created_min'] = strtotime('-1 month'); - $values['created_max'] = time(); + $values['created_max'] = $this->time->getRequestTime(); // Set entity type and id default value. $values += [ diff --git a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php index fbf6bd8600..c0354b5417 100644 --- a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php +++ b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceFormatterBase.php @@ -32,7 +32,14 @@ abstract class WebformEntityReferenceFormatterBase extends EntityReferenceFormat protected $configFactory; /** - * WebformEntityReferenceLinkFormatter constructor. + * The time service. + * + * @var \Drupal\Component\Datetime\TimeInterface + */ + protected $time; + + /** + * WebformEntityReferenceFormatterBase constructor. * * @param string $plugin_id * The plugin_id for the formatter. @@ -58,6 +65,12 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter $this->configFactory = $config_factory; $this->renderer = $renderer; + + // Make sure the time object is defined because the create method maybe + // overridden and we can't alter the constructor without breaking classes + // which extend the WebformEntityReferenceFormatterBase class. + // @todo Remove in Webform 6.x. + $this->time = \Drupal::service('datetime.time'); } /** @@ -125,8 +138,8 @@ protected function setCacheContext(array &$elements, WebformInterface $webform, foreach ($states as $state) { if ($item->status === WebformInterface::STATUS_SCHEDULED) { $item_state = $item->$state; - if ($item_state && strtotime($item_state) > time()) { - $item_seconds = strtotime($item_state) - time(); + if ($item_state && strtotime($item_state) > $this->time->getRequestTime()) { + $item_seconds = strtotime($item_state) - $this->time->getRequestTime(); if (!$max_age && $item_seconds > $max_age) { $max_age = $item_seconds; } @@ -134,8 +147,8 @@ protected function setCacheContext(array &$elements, WebformInterface $webform, } if ($webform->status() === WebformInterface::STATUS_SCHEDULED) { $webform_state = $webform->get($state); - if ($webform_state && strtotime($webform_state) > time()) { - $webform_seconds = strtotime($webform_state) - time(); + if ($webform_state && strtotime($webform_state) > $this->time->getRequestTime()) { + $webform_seconds = strtotime($webform_state) - $this->time->getRequestTime(); if (!$max_age && $webform_seconds > $max_age) { $max_age = $webform_seconds; } diff --git a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php index a4db034597..49bf240e80 100644 --- a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php +++ b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceLinkFormatter.php @@ -157,7 +157,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { $form['dialog'] = [ '#title' => $this->t('Dialog'), '#type' => 'select', - '#empty_option' => t('- Select dialog -'), + '#empty_option' => $this->t('- Select dialog -'), '#default_value' => $this->getSetting('dialog'), '#options' => $options, ]; diff --git a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php index 0e7ea5369f..022eca9811 100644 --- a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php +++ b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceSelectWidget.php @@ -55,7 +55,7 @@ public function getTargetIdElement(FieldItemListInterface $items, $delta, array // it as an option. if ($default_value && $webform = Webform::load($default_value)) { if ($webform->isArchived()) { - $options[(string) t('Archived')][$webform->id()] = $webform->label(); + $options[(string) $this->t('Archived')][$webform->id()] = $webform->label(); } } diff --git a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php index 9b862b8c99..00cefab3dc 100644 --- a/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php +++ b/web/modules/webform/src/Plugin/Field/FieldWidget/WebformEntityReferenceWidgetTrait.php @@ -51,15 +51,15 @@ public function settingsForm(array $form, FormStateInterface $form_state) { $element = parent::settingsForm($form, $form_state); $element['default_data'] = [ '#type' => 'checkbox', - '#title' => t('Enable default submission data (YAML)'), - '#description' => t('If checked, site builders will be able to define default submission data (YAML)'), + '#title' => $this->t('Enable default submission data (YAML)'), + '#description' => $this->t('If checked, site builders will be able to define default submission data (YAML)'), '#default_value' => $this->getSetting('default_data'), ]; if ($this->getSetting('webforms') !== NULL) { $element['webforms'] = [ '#type' => 'webform_entity_select', - '#title' => t('Select webform'), - '#description' => t('If left blank all webforms will be listed in the select menu.'), + '#title' => $this->t('Select webform'), + '#description' => $this->t('If left blank all webforms will be listed in the select menu.'), '#select2' => TRUE, '#multiple' => TRUE, '#target_type' => 'webform', @@ -76,7 +76,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { */ public function settingsSummary() { $summary = parent::settingsSummary(); - $summary[] = t('Default submission data: @default_data', ['@default_data' => $this->getSetting('default_data') ? $this->t('Yes') : $this->t('No')]); + $summary[] = $this->t('Default submission data: @default_data', ['@default_data' => $this->getSetting('default_data') ? $this->t('Yes') : $this->t('No')]); $webform_ids = $this->getSetting('webforms'); if ($webform_ids) { $webforms = Webform::loadMultiple($webform_ids); @@ -84,7 +84,7 @@ public function settingsSummary() { foreach ($webforms as $webform) { $webform_labels[] = $webform->label(); } - $summary[] = t('Webforms: @webforms', ['@webforms' => implode('; ', $webform_labels)]); + $summary[] = $this->t('Webforms: @webforms', ['@webforms' => implode('; ', $webform_labels)]); } return $summary; } diff --git a/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php b/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php index 96e0120a43..89489c3483 100644 --- a/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php +++ b/web/modules/webform/src/Plugin/WebformElement/Checkboxes.php @@ -137,7 +137,7 @@ protected function getElementSelectorInputsOptions(array $element) { $selectors = $element['#options']; foreach ($selectors as $index => $text) { // Remove description from text. - list($text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $text); + list($text) = WebformOptionsHelper::splitOption($text); // Append element type to text. $text .= ' [' . $this->t('Checkbox') . ']'; $selectors[$index] = $text; diff --git a/web/modules/webform/src/Plugin/WebformElement/DateBase.php b/web/modules/webform/src/Plugin/WebformElement/DateBase.php index 16dc75d28d..97e97143db 100644 --- a/web/modules/webform/src/Plugin/WebformElement/DateBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/DateBase.php @@ -666,7 +666,7 @@ protected static function datetimeRangeYears($string, $date = NULL) { protected static function formatDate($custom_format, $timestamp = NULL) { /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */ $date_formatter = \Drupal::service('date.formatter'); - return $date_formatter->format($timestamp ?: time(), 'custom', $custom_format); + return $date_formatter->format($timestamp ?: \Drupal::time()->getRequestTime(), 'custom', $custom_format); } } diff --git a/web/modules/webform/src/Plugin/WebformElement/NumericBase.php b/web/modules/webform/src/Plugin/WebformElement/NumericBase.php index f23f0da511..a098ab649e 100644 --- a/web/modules/webform/src/Plugin/WebformElement/NumericBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/NumericBase.php @@ -42,6 +42,12 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub */ public function getTestValues(array $element, WebformInterface $webform, array $options = []) { $element += ['#min' => 1, '#max' => 10]; + if (is_string($element['#min'])) { + $element['#min'] = $this->tokenManager->replace($element['#min'], $webform); + } + if (is_string($element['#max'])) { + $element['#max'] = $this->tokenManager->replace($element['#max'], $webform); + } return [ $element['#min'], floor((($element['#max'] - $element['#min']) / 2) + $element['#min']), diff --git a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php index adb7275846..3f8fc54bee 100644 --- a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php @@ -457,9 +457,10 @@ protected function formatHtmlItems(array &$element, WebformSubmissionInterface $ // Build list of checked and unchecked options. $build = []; $options_description = $this->hasProperty('options_description_display'); - foreach ($element['#options'] as $option_value => $option_text) { - if ($options_description && strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text); + $options = OptGroup::flattenOptions($element['#options']); + foreach ($options as $option_value => $option_text) { + if ($options_description && WebformOptionsHelper::hasOptionDescription($option_text)) { + list($option_text) = WebformOptionsHelper::splitOption($option_text); } $build[$option_value] = [ '#prefix' => isset($values[$option_value]) ? $checked : $unchecked, @@ -511,8 +512,8 @@ protected function formatTextItems(array &$element, WebformSubmissionInterface $ $list = []; $options_description = $this->hasProperty('options_description_display'); foreach ($element['#options'] as $option_value => $option_text) { - if ($options_description && strpos($option_text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $option_text); + if ($options_description && WebformOptionsHelper::hasOptionDescription($option_text)) { + list($option_text) = WebformOptionsHelper::splitOption($option_text); } $list[] = ((isset($values[$option_value])) ? $checked : $unchecked) . ' ' . $option_text; unset($values[$option_value]); diff --git a/web/modules/webform/src/Plugin/WebformElement/Table.php b/web/modules/webform/src/Plugin/WebformElement/Table.php index abdc468fb6..2b09e1e8be 100644 --- a/web/modules/webform/src/Plugin/WebformElement/Table.php +++ b/web/modules/webform/src/Plugin/WebformElement/Table.php @@ -3,8 +3,8 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element; use Drupal\webform\Plugin\WebformElementBase; +use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\WebformInterface; use Drupal\webform\WebformSubmissionInterface; @@ -106,13 +106,13 @@ protected function format($type, array &$element, WebformSubmissionInterface $we protected function formatHtmlItem(array $element, WebformSubmissionInterface $webform_submission, array $options = []) { $rows = []; foreach ($element as $row_key => $row_element) { - if (Element::property($row_key)) { + if (WebformElementHelper::property($row_key)) { continue; } $element[$row_key] = []; foreach ($row_element as $column_key => $column_element) { - if (Element::property($column_key)) { + if (WebformElementHelper::property($column_key)) { continue; } diff --git a/web/modules/webform/src/Plugin/WebformElement/Telephone.php b/web/modules/webform/src/Plugin/WebformElement/Telephone.php index 0111237467..aa992b9419 100644 --- a/web/modules/webform/src/Plugin/WebformElement/Telephone.php +++ b/web/modules/webform/src/Plugin/WebformElement/Telephone.php @@ -84,6 +84,9 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub $cdn = reset($intl_tel_input_library['cdn']); $utils_script = $cdn . 'build/js/utils.js'; } + else { + $utils_script = base_path() . 'libraries/jquery.intl-tel-input/build/js/utils.js'; + } $element['#attached']['drupalSettings']['webform']['intlTelInput']['utilsScript'] = $utils_script; } diff --git a/web/modules/webform/src/Plugin/WebformElement/TextBase.php b/web/modules/webform/src/Plugin/WebformElement/TextBase.php index 6de4c85efc..fedee8ed06 100644 --- a/web/modules/webform/src/Plugin/WebformElement/TextBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/TextBase.php @@ -178,7 +178,7 @@ public function form(array $form, FormStateInterface $form_state) { $form['validation']['pattern_error'] = [ '#type' => 'textfield', '#title' => $this->t('Pattern message'), - '#description' => $this->t('If set, this message will be used when a pattern is not matched, instead of the default "@message" message.', ['@message' => t('%name field is not in the right format.')]), + '#description' => $this->t('If set, this message will be used when a pattern is not matched, instead of the default "@message" message.', ['@message' => $this->t('%name field is not in the right format.')]), '#states' => [ 'visible' => [ ':input[name="properties[pattern][checkbox]"]' => ['checked' => TRUE], @@ -324,7 +324,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form $pcre_pattern = preg_replace('/\\\\u([a-fA-F0-9]{4})/', '\\x{\\1}', $properties['#pattern']); if (preg_match('{^(?:' . $pcre_pattern . ')$}u', NULL) === FALSE) { - $form_state->setErrorByName('pattern', t('Pattern %pattern is not a valid regular expression.', ['%pattern' => $properties['#pattern']])); + $form_state->setErrorByName('pattern', $this->t('Pattern %pattern is not a valid regular expression.', ['%pattern' => $properties['#pattern']])); } set_error_handler('_drupal_error_handler'); @@ -332,8 +332,8 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form // Validate #counter_maximum. if (!empty($properties['#counter_type']) && empty($properties['#counter_maximum']) && empty($properties['#counter_minimum'])) { - $form_state->setErrorByName('counter_minimum', t('Counter minimum or maximum is required.')); - $form_state->setErrorByName('counter_maximum', t('Counter minimum or maximum is required.')); + $form_state->setErrorByName('counter_minimum', $this->t('Counter minimum or maximum is required.')); + $form_state->setErrorByName('counter_maximum', $this->t('Counter minimum or maximum is required.')); } } diff --git a/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php b/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php index 3e8b093b61..e46f1bcdf7 100644 --- a/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php +++ b/web/modules/webform/src/Plugin/WebformElement/TextBaseTrait.php @@ -23,7 +23,7 @@ trait TextBaseTrait { */ public function buildCounterForm($name = '', $title = NULL) { if ($title === NULL) { - $title = t('Counter'); + $title = $this->t('Counter'); } $t_args = ['@title' => $title]; diff --git a/web/modules/webform/src/Plugin/WebformElement/TextFormat.php b/web/modules/webform/src/Plugin/WebformElement/TextFormat.php index 9d8ebe54b7..42d8be9468 100644 --- a/web/modules/webform/src/Plugin/WebformElement/TextFormat.php +++ b/web/modules/webform/src/Plugin/WebformElement/TextFormat.php @@ -186,11 +186,15 @@ public static function preRenderFixTextFormatStates(array $element) { $element['#suffix'] = $element['#suffix'] . '</div>'; } } + // Do not allow format value to be cleared when the text form is hidden + // via #states. + // @see \Drupal\webform\Element\WebformHtmlEditor::processWebformHtmlEditor + $element['format']['#attributes']['data-webform-states-no-clear'] = TRUE; return $element; } /** - * @inheritDoc + * {@inheritDoc} */ public static function trustedCallbacks() { return array_merge(parent::trustedCallbacks(), ['preRenderFixTextFormatStates']); diff --git a/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php b/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php new file mode 100644 index 0000000000..ccd6f59aeb --- /dev/null +++ b/web/modules/webform/src/Plugin/WebformElement/VerticalTabs.php @@ -0,0 +1,154 @@ +<?php + +namespace Drupal\webform\Plugin\WebformElement; + +use Drupal\Core\Form\FormStateInterface; +use Drupal\webform\Element\WebformMessage as WebformMessageElement; +use Drupal\webform\Plugin\WebformElementBase; +use Drupal\webform\WebformSubmissionInterface; + +/** + * Provides a hidden 'vertical_tabs' element. + * + * @WebformElement( + * id = "vertical_tabs", + * label = @Translation("Vertical tabs"), + * description = @Translation("Provides a vertical tabs element."), + * category = @Translation("Markup elements"), + * hidden = TRUE + * ) + */ +class VerticalTabs extends WebformElementBase { + + /** + * {@inheritdoc} + */ + protected function defineDefaultProperties() { + return [ + // Element settings. + 'title' => $this->t('Vertical Tabs'), + // Description/Help. + 'help' => '', + 'help_title' => '', + 'description' => '', + 'more' => '', + 'more_title' => '', + // Form display. + 'title_display' => 'invisible', + 'description_display' => '', + 'help_display' => '', + // Form validation. + 'required' => FALSE, + // Attributes. + 'wrapper_attributes' => [], + 'label_attributes' => [], + // Vertical tabs. + 'default_tab' => '', + ] + $this->defineDefaultBaseProperties(); + } + + /** + * {@inheritdoc} + */ + protected function defineDefaultBaseProperties() { + $properties = parent::defineDefaultBaseProperties(); + unset( + $properties['prepopulate'], + $properties['states_clear'] + ); + return $properties; + } + + /****************************************************************************/ + + /** + * {@inheritdoc} + */ + public function isInput(array $element) { + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function isContainer(array $element) { + return FALSE; + } + + /** + * {@inheritdoc} + */ + public function prepare(array &$element, WebformSubmissionInterface $webform_submission = NULL) { + parent::prepare($element, $webform_submission); + + $element += ['#title_display' => 'invisible']; + + return $element; + } + + /** + * {@inheritdoc} + */ + public function buildHtml(array $element, WebformSubmissionInterface $webform_submission, array $options = []) { + // Vertical tab are not rendered when a submission is viewed. + return []; + } + + /** + * {@inheritdoc} + */ + public function buildText(array $element, WebformSubmissionInterface $webform_submission, array $options = []) { + // Vertical tab are not rendered when a submission is viewed. + return []; + } + + /** + * {@inheritdoc} + */ + public function getRelatedTypes(array $element) { + return []; + } + + /** + * {@inheritdoc} + */ + public function getElementSelectorOptions(array $element) { + return []; + } + + /** + * {@inheritdoc} + */ + public function form(array $form, FormStateInterface $form_state) { + $form = parent::form($form, $form_state); + unset($form['element']['title']['#required']); + + $form['vertical_tabs'] = [ + '#type' => 'fieldset', + '#title' => $this->t('Vertical tabs settings'), + '#open' => TRUE, + ]; + $form['vertical_tabs']['vertical_tabs_message'] = [ + '#type' => 'webform_message', + '#message_type' => 'info', + '#access' => TRUE, + '#message_message' => $this->t("To add details and fieldsets this vertical tabs element, you must defined a custom <code>'#group': vertical_tab_key</code> property in the details or fieldset element with this vertical tabs' element key."), + '#message_close' => TRUE, + '#message_storage' => WebformMessageElement::STORAGE_SESSION, + ]; + $form['vertical_tabs']['default_tab'] = [ + '#type' => 'textfield', + '#title' => $this->t('Default tab'), + '#description' => $this->t('The default tab must be the [id] attributes of the details or fieldset element.'), + ]; + return $form; + } + + /** + * {@inheritdoc} + */ + public function preview() { + return []; + } + +} diff --git a/web/modules/webform/src/Plugin/WebformElement/View.php b/web/modules/webform/src/Plugin/WebformElement/View.php index d57d270d8d..be2634500e 100644 --- a/web/modules/webform/src/Plugin/WebformElement/View.php +++ b/web/modules/webform/src/Plugin/WebformElement/View.php @@ -143,14 +143,14 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form /** @var \Drupal\views\ViewEntityInterface $view */ $view = ViewEntity::load($properties['#name']); if (!$view) { - $form_state->setErrorByName('name', t('View %name does not exist.', ['%name' => $properties['#name']])); + $form_state->setErrorByName('name', $this->t('View %name does not exist.', ['%name' => $properties['#name']])); return; } // Check display id. $display = $view->getDisplay($properties['#display_id']); if (!$display) { - $form_state->setErrorByName('display_id', t('View display %display_id does not exist.', ['%display_id' => $properties['#display_id']])); + $form_state->setErrorByName('display_id', $this->t('View display %display_id does not exist.', ['%display_id' => $properties['#display_id']])); return; } @@ -168,7 +168,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form } foreach ($filters as $filter) { if (!empty($filter['exposed'])) { - $form_state->setErrorByName('display_id', t('View display %display_id has exposed filters which will break the webform.', ['%display_id' => $properties['#display_id']])); + $form_state->setErrorByName('display_id', $this->t('View display %display_id has exposed filters which will break the webform.', ['%display_id' => $properties['#display_id']])); break; } } diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php index 6dee9b7e36..6cc81fd815 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformCompositeBase.php @@ -945,7 +945,7 @@ protected function buildCompositeElementsTable(array $form, FormStateInterface $ '#help' => '<b>' . $this->t('Key') . ':</b> ' . $this->t('The machine-readable name.') . '<hr/><b>' . $this->t('Title') . ':</b> ' . $this->t('This is used as a descriptive label when displaying this webform element.') . '<hr/><b>' . $this->t('Placeholder') . ':</b> ' . $this->t('The placeholder will be shown in the element until the user starts entering a value.') . - '<hr/><b>' . $this->t('Description') . ':</b> ' . $this->t('A short description of the element used as help for the user when he/she uses the webform.') . + '<hr/><b>' . $this->t('Description') . ':</b> ' . $this->t('A short description of the element used as help for the user when they use the webform.') . '<hr/><b>' . $this->t('Help text') . ':</b> ' . $this->t('A tooltip displayed after the title.') . '<hr/><b>' . $this->t('Title display') . ':</b> ' . $this->t('A tooltip displayed after the title.'), '#help_title' => $this->t('Labels'), @@ -1033,7 +1033,7 @@ protected function buildCompositeElementsTable(array $form, FormStateInterface $ '#type' => 'textarea', '#title' => $this->t('@title help text', $t_args), '#title_display' => 'invisible', - '#description' => $this->t('A short description of the element used as help for the user when he/she uses the webform.'), + '#description' => $this->t('A short description of the element used as help for the user when they use the webform.'), '#description_display' => 'invisible', '#rows' => 2, '#placeholder' => $this->t('Enter help text…'), @@ -1249,7 +1249,7 @@ public function initializeCompositeElements(array &$element) { */ protected function initializeCompositeElementsRecursive(array &$element, array &$composite_elements) { foreach ($composite_elements as $composite_key => &$composite_element) { - if (Element::property($composite_key)) { + if (WebformElementHelper::property($composite_key)) { continue; } diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php index fa45fd43d7..4ffea5258f 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformComputedBase.php @@ -286,7 +286,8 @@ public function postSave(array &$element, WebformSubmissionInterface $webform_su * The type of markup, HTML or plain-text. */ protected function getMode(array $element) { - return WebformComputedBaseElement::getMode($element); + $class = $this->getFormElementClassDefinition(); + return $class::getMode($element); } /** diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformElement.php b/web/modules/webform/src/Plugin/WebformElement/WebformElement.php index 96ea617ae2..543142bf6a 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformElement.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformElement.php @@ -12,6 +12,7 @@ * id = "webform_element", * label = @Translation("Generic element"), * description = @Translation("Provides a generic form element."), + * hidden = TRUE, * ) */ class WebformElement extends WebformElementBase { diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php b/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php index 99d2942967..7e92529e62 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformLikert.php @@ -121,7 +121,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we 'width' => '40%', ]; foreach ($element['#answers'] as $answer_value => $answer_text) { - list($answer_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $answer_text); + list($answer_title) = WebformOptionsHelper::splitOption($answer_text); $header[$answer_value] = [ 'data' => $answer_title, 'align' => 'center', @@ -133,7 +133,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we $rows = []; foreach ($element['#questions'] as $question_key => $question_text) { - list($question_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question_text); + list($question_title) = WebformOptionsHelper::splitOption($question_text); $question_value = (isset($value[$question_key])) ? $value[$question_key] : NULL; $row = []; @@ -167,7 +167,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we case 'list': $items = []; foreach ($element['#questions'] as $question_key => $question_text) { - list($question_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $question_text); + list($question_title) = WebformOptionsHelper::splitOption($question_text); $answer_value = (isset($value[$question_key])) ? $value[$question_key] : NULL; $answer_text = ($answer_value !== NULL) ? WebformOptionsHelper::getOptionText($answer_value, $element['#answers'], TRUE) : $this->t('[blank]'); $items[$question_key] = [ @@ -406,6 +406,9 @@ public function getElementSelectorSourceValues(array $element) { */ public function form(array $form, FormStateInterface $form_state) { $form = parent::form($form, $form_state); + + $form['validation']['required_container']['required_error']['#description'] = $this->t('If set, this message will be used when a required likert question is empty, instead of the default "X field is required." message. To include the question title in the required message, please include the @name placeholder in the required message.'); + $form['likert'] = [ '#type' => 'fieldset', '#title' => $this->t('Likert settings'), diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php index 2e1e1e1849..99809ad2af 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php @@ -512,7 +512,7 @@ protected function getFile(array $element, $value, array $options) { return $value; } - return $this->entityTypeManager->getStorage('file')->load($value); + return $this->entityTypeManager->getStorage('file')->loadUnchanged($value); } /** @@ -532,7 +532,9 @@ protected function getFiles(array $element, $value, array $options = []) { if (empty($value)) { return []; } - return $this->entityTypeManager->getStorage('file')->loadMultiple((array) $value); + $fids = (array) $value; + $this->entityTypeManager->getStorage('file')->resetCache($fids); + return $this->entityTypeManager->getStorage('file')->loadMultiple($fids); } /** @@ -1270,6 +1272,7 @@ public function addFiles(array $element, WebformSubmissionInterface $webform_sub $file->setFileUri($destination_uri); $file->setFileName($this->fileSystem->basename($destination_uri)); $file->save(); + $this->entityTypeManager->getStorage('file')->resetCache([$file->id()]); } // Update file usage table. @@ -1353,6 +1356,50 @@ protected function getFileDestinationUri(array $element, FileInterface $file, We return $destination_folder . '/' . $destination_basename . '.' . $destination_extension; } + /** + * Check access for a file associated with a webform submission. + * + * @param \Drupal\file\FileInterface $file + * A file. + * @param \Drupal\Core\Session\AccountInterface|null $account + * A user account. + * + * @return bool|null + * Returns NULL if the file is not attached to a webform submission. + * Returns FALSE if the user can't access the file. + * Returns TRUE if the user can access the file. + */ + public static function accessFile(FileInterface $file, AccountInterface $account = NULL) { + if (empty($file)) { + return NULL; + } + + /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */ + $file_usage = \Drupal::service('file.usage'); + $usage = $file_usage->listUsage($file); + + // Check for webform submission usage. + if (!isset($usage['webform']) || !isset($usage['webform']['webform_submission'])) { + return NULL; + } + + // Check entity ids. + $entity_ids = array_keys($usage['webform']['webform_submission']); + if (empty($entity_ids)) { + return NULL; + } + + // Check the first webform submission since files are can only applied to + // one submission. + $entity_id = reset($entity_ids); + $webform_submission = WebformSubmission::load($entity_id); + if (!$webform_submission) { + return NULL; + } + + return $webform_submission->access('view', $account); + } + /** * Control access to webform submission private file downloads. * @@ -1377,56 +1424,30 @@ public static function accessFileDownload($uri) { /** @var \Drupal\file\FileInterface $file */ $file = reset($files); - if (empty($file)) { - return NULL; - } - /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */ - $file_usage = \Drupal::service('file.usage'); - $usage = $file_usage->listUsage($file); - foreach ($usage as $module => $entity_types) { - // Check for Webform module. - if ($module !== 'webform') { - continue; + $access = static::accessFile($file); + if ($access === TRUE) { + // Return file content headers. + $headers = file_get_content_headers($file); + + /** @var \Drupal\Core\File\FileSystemInterface $file_system */ + $file_system = \Drupal::service('file_system'); + $filename = $file_system->basename($uri); + // Force blacklisted files to be downloaded instead of opening in the browser. + if (in_array($headers['Content-Type'], static::$blacklistedMimeTypes)) { + $headers['Content-Disposition'] = 'attachment; filename="' . Unicode::mimeHeaderEncode($filename) . '"'; } - - foreach ($entity_types as $entity_type => $counts) { - $entity_ids = array_keys($counts); - - // Check for webform submission entity type. - if ($entity_type !== 'webform_submission' || empty($entity_ids)) { - continue; - } - - // Get webform submission. - $webform_submission = WebformSubmission::load(reset($entity_ids)); - if (!$webform_submission) { - continue; - } - - // Check webform submission view access. - if (!$webform_submission->access('view')) { - return -1; - } - - // Return file content headers. - $headers = file_get_content_headers($file); - - /** @var \Drupal\Core\File\FileSystemInterface $file_system */ - $file_system = \Drupal::service('file_system'); - $filename = $file_system->basename($uri); - // Force blacklisted files to be downloaded instead of opening in the browser. - if (in_array($headers['Content-Type'], static::$blacklistedMimeTypes)) { - $headers['Content-Disposition'] = 'attachment; filename="' . Unicode::mimeHeaderEncode($filename) . '"'; - } - else { - $headers['Content-Disposition'] = 'inline; filename="' . Unicode::mimeHeaderEncode($filename) . '"'; - } - - return $headers; + else { + $headers['Content-Disposition'] = 'inline; filename="' . Unicode::mimeHeaderEncode($filename) . '"'; } + return $headers; + } + elseif ($access === FALSE) { + return -1; + } + else { + return NULL; } - return NULL; } /** diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php b/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php index 0c242ee824..7d7bb47b6f 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformMapping.php @@ -142,7 +142,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we $rows = []; foreach ($element['#source'] as $source_key => $source_text) { - list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text); + list($source_title) = WebformOptionsHelper::splitOption($source_text); $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL; $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]'); $rows[$source_key] = [ @@ -165,7 +165,7 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we case 'list': $items = []; foreach ($element['#source'] as $source_key => $source_text) { - list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text); + list($source_title) = WebformOptionsHelper::splitOption($source_text); $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL; $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]'); $items[$source_key] = ['#markup' => "$source_title $arrow $destination_title"]; @@ -210,7 +210,7 @@ protected function formatTextItem(array $element, WebformSubmissionInterface $we case 'list': $list = []; foreach ($element['#source'] as $source_key => $source_text) { - list($source_title) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $source_text); + list($source_title) = WebformOptionsHelper::splitOption($source_text); $destination_value = (isset($value[$source_key])) ? $value[$source_key] : NULL; $destination_title = ($destination_value) ? WebformOptionsHelper::getOptionText($destination_value, $element['#destination']) : $this->t('[blank]'); $list[] = "$source_title $arrow $destination_title"; diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php index e2d4e61335..f307f25e6b 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php @@ -3,9 +3,9 @@ namespace Drupal\webform\Plugin\WebformElement; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element; use Drupal\webform\Plugin\WebformElementBase; use Drupal\webform\Element\WebformMessage as WebformMessageElement; +use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\WebformInterface; use Drupal\webform\WebformSubmissionInterface; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -101,7 +101,7 @@ public function buildHtml(array $element, WebformSubmissionInterface $webform_su case 'table': default: foreach ($element as $column_key => $column_element) { - if (Element::property($column_key)) { + if (WebformElementHelper::property($column_key)) { continue; } diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php index 6bbb7a4abb..1b053f989d 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermCheckboxes.php @@ -32,6 +32,7 @@ protected function defineDefaultProperties() { 'breadcrumb_delimiter' => ' › ', 'tree_delimiter' => ' ', 'scroll' => TRUE, + 'depth' => NULL, ] + parent::defineDefaultProperties(); unset( diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php index 7238e582a1..be047eaf87 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermReferenceTrait.php @@ -103,6 +103,11 @@ public function form(array $form, FormStateInterface $form_state) { ], ], ]; + $form['term_reference']['depth'] = [ + '#type' => 'number', + '#title' => $this->t('Limit term depth'), + '#field_suffix' => $this->t('level(s)'), + ]; $form['term_reference']['scroll'] = [ '#type' => 'checkbox', '#title' => $this->t('Allow terms to be scrollable'), diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php b/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php index 8a2f6c5afa..f1f50a7ed3 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformTermSelect.php @@ -31,6 +31,7 @@ protected function defineDefaultProperties() { 'breadcrumb' => FALSE, 'breadcrumb_delimiter' => ' › ', 'tree_delimiter' => '-', + 'depth' => NULL, ] + parent::defineDefaultProperties(); unset( $properties['options'], diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTime.php b/web/modules/webform/src/Plugin/WebformElement/WebformTime.php index f5d6076b8f..3e4dc75747 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformTime.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformTime.php @@ -156,7 +156,7 @@ public function form(array $form, FormStateInterface $form_state) { protected static function formatTime($custom_format, $timestamp = NULL) { /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */ $date_formatter = \Drupal::service('date.formatter'); - return $date_formatter->format($timestamp ?: time(), 'custom', $custom_format); + return $date_formatter->format($timestamp ?: \Drupal::time()->getRequestTime(), 'custom', $custom_format); } } diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php index 8575b89987..fc96553805 100644 --- a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php +++ b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php @@ -14,7 +14,7 @@ * * @WebformElement( * id = "webform_variant", - * label = @Translation("Variant [EXPERIMENTAL]"), + * label = @Translation("Variant"), * description = @Translation("Provides a form element for enabling and tracking webform variants."), * category = @Translation("Advanced elements"), * ) diff --git a/web/modules/webform/src/Plugin/WebformElementBase.php b/web/modules/webform/src/Plugin/WebformElementBase.php index 36bb9b954d..c42752b1db 100644 --- a/web/modules/webform/src/Plugin/WebformElementBase.php +++ b/web/modules/webform/src/Plugin/WebformElementBase.php @@ -1147,6 +1147,13 @@ protected function prepareWrapper(array &$element) { * An element with #states added to the #prefix and #suffix. */ public static function preRenderFixStatesWrapper(array $element) { + // Allow Ajax callbacks to disable states wrapper. + // @see \Drupal\webform\Element\WebformComputedBase::ajaxWebformComputedCallback + // @see \Drupal\webform\Element\WebformMultiple::ajaxCallback + if (isset($element['#webform_wrapper']) && $element['#webform_wrapper'] === FALSE) { + return $element; + } + WebformElementHelper::fixStatesWrapper($element); return $element; } @@ -1161,6 +1168,13 @@ public static function preRenderFixStatesWrapper(array $element) { * An element with flexbox wrapper added to the #prefix and #suffix. */ public static function preRenderFixFlexboxWrapper(array $element) { + // Allow Ajax callbacks to disable flexbox wrapper. + // @see \Drupal\webform\Element\WebformComputedBase::ajaxWebformComputedCallback + // @see \Drupal\webform\Element\WebformMultiple::ajaxCallback + if (isset($element['#webform_wrapper']) && $element['#webform_wrapper'] === FALSE) { + return $element; + } + $flex = (isset($element['#flex'])) ? $element['#flex'] : 1; $element += ['#prefix' => '', '#suffix' => '']; $element['#prefix'] = '<div class="webform-flex webform-flex--' . $flex . '"><div class="webform-flex--container">' . $element['#prefix']; @@ -1501,11 +1515,11 @@ protected function formatHtmlItems(array &$element, WebformSubmissionInterface $ foreach ($items as $index => &$item) { $build[] = (is_array($item)) ? $item : ['#markup' => $item]; if ($total === 2 && $index === 0) { - $build[] = ['#markup' => ' ' . t('and') . ' ']; + $build[] = ['#markup' => ' ' . $this->t('and') . ' ']; } elseif ($index !== ($total - 1)) { if ($index === ($total - 2)) { - $build[] = ['#markup' => ', ' . t('and') . ' ']; + $build[] = ['#markup' => ', ' . $this->t('and') . ' ']; } else { $build[] = ['#markup' => ', ']; @@ -2388,7 +2402,7 @@ public function form(array $form, FormStateInterface $form_state) { $form['element_description']['description'] = [ '#type' => 'webform_html_editor', '#title' => $this->t('Description'), - '#description' => $this->t('A short description of the element used as help for the user when he/she uses the webform.'), + '#description' => $this->t('A short description of the element used as help for the user when they use the webform.'), ]; $form['element_description']['help'] = [ '#type' => 'details', @@ -3007,9 +3021,9 @@ public function form(array $form, FormStateInterface $form_state) { 'form_element' => $this->t('Form element'), 'container' => $this->t('Container'), ], - '#description' => '<b>' . t('Fieldset') . ':</b> ' . t('Wraps inputs in a fieldset.') . ' <strong>' . t('Recommended') . '</strong>' . - '<br/><br/><b>' . t('Form element') . ':</b> ' . t('Wraps inputs in a basic form element with title and description.') . - '<br/><br/><b>' . t('Container') . ':</b> ' . t('Wraps inputs in a basic div with no title or description.'), + '#description' => '<b>' . $this->t('Fieldset') . ':</b> ' . $this->t('Wraps inputs in a fieldset.') . ' <strong>' . $this->t('Recommended') . '</strong>' . + '<br/><br/><b>' . $this->t('Form element') . ':</b> ' . $this->t('Wraps inputs in a basic form element with title and description.') . + '<br/><br/><b>' . $this->t('Container') . ':</b> ' . $this->t('Wraps inputs in a basic div with no title or description.'), ]; // Hide element description and display when using a container wrapper. if ($this->hasProperty('wrapper_type')) { @@ -3533,7 +3547,7 @@ protected function setConfigurationFormDefaultValueRecursive(array &$form, array foreach ($form as $property_name => &$property_element) { // Skip all properties. - if (is_string($property_name) && Element::property($property_name)) { + if (WebformElementHelper::property($property_name)) { continue; } @@ -3788,7 +3802,7 @@ protected function hasCompositeFormElementWrapper() { } /** - * @inheritDoc + * {@inheritdoc} */ public static function trustedCallbacks() { return ['preRenderFixStatesWrapper', 'preRenderFixFlexboxWrapper', 'preRenderWebformCompositeFormElement']; diff --git a/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php b/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php index 748799b125..4568945213 100644 --- a/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php +++ b/web/modules/webform/src/Plugin/WebformExporter/DelimitedWebformExporter.php @@ -31,9 +31,7 @@ public function defaultConfiguration() { */ public function setConfiguration(array $configuration) { parent::setConfiguration($configuration); - if ($this->configuration['delimiter'] === '\t') { - $this->configuration['delimiter'] = "\t"; - } + $this->configuration['delimiter'] = ($this->configuration['delimiter'] === '\t') ? "\t" : $this->configuration['delimiter']; return $this; } @@ -61,12 +59,12 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta '.' => $this->t('Period (.)'), ' ' => $this->t('Space ( )'), ], - '#default_value' => $this->configuration['delimiter'], + '#default_value' => ($this->configuration['delimiter'] === "\t") ? '\t' : $this->configuration['delimiter'], ]; $form['excel'] = [ '#type' => 'checkbox', '#title' => $this->t('Generate Excel compatible file'), - '#description' => $this->t("If checked, the generated file's carriage returns will be compatible with Excel."), + '#description' => $this->t("If checked, the generated file's carriage returns will be compatible with Excel and a marker flagging the data as UTF-8 will be added at the beginning."), '#return_value' => TRUE, '#default_value' => $this->configuration['excel'], ]; @@ -90,6 +88,9 @@ public function getFileExtension() { * {@inheritdoc} */ public function writeHeader() { + if ($this->configuration['excel']) { + fwrite($this->fileHandle, "\xEF\xBB\xBF"); + } $header = $this->buildHeader(); fputcsv($this->fileHandle, $header, $this->configuration['delimiter']); } diff --git a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php index 343f9640a7..4ff9b5d310 100644 --- a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php +++ b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php @@ -511,6 +511,12 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta $form['from']['from_mail'] = $this->buildElement('from_mail', $this->t('From email'), $this->t('From email address'), TRUE, $mail_element_options, $options_element_options, NULL, $other_element_email_options); $form['from']['from_name'] = $this->buildElement('from_name', $this->t('From name'), $this->t('From name'), FALSE, $name_element_options, NULL, NULL, $other_element_name_options); $form['from']['token_tree_link'] = $this->buildTokenTreeElement(); + // 'From name' is not used if it contains multiple email addresses. + $form['from']['from_name']['from_name']['#states'] = [ + '!visible' => [ + ':input[name="settings[from_mail][other]"]' => ['value' => ['pattern' => ',']], + ], + ]; // Message. $form['message'] = [ @@ -1501,7 +1507,7 @@ protected function getBodyDefaultValues($format = NULL) { * @return array * A select other element. */ - protected function buildElement($name, $title, $label, $required = FALSE, array $element_options, array $options_options = NULL, array $role_options = NULL, array $other_options = NULL) { + protected function buildElement($name, $title, $label, $required = FALSE, array $element_options = [], array $options_options = NULL, array $role_options = NULL, array $other_options = NULL) { list($element_name, $element_type) = (strpos($name, '_') !== FALSE) ? explode('_', $name) : [$name, 'text']; $default_option = $this->getDefaultConfigurationValue($name); @@ -1511,7 +1517,7 @@ protected function buildElement($name, $title, $label, $required = FALSE, array if ($default_option) { $options[(string) $this->t('Default')] = [static::DEFAULT_VALUE => $default_option]; } - if ($element_options) { + if (!empty($element_options)) { $options[(string) $this->t('Elements')] = $element_options; } if ($options_options) { @@ -1550,25 +1556,33 @@ protected function buildElement($name, $title, $label, $required = FALSE, array $element[$name]['#other__maxlength'] = NULL; } + // Tweak elements. + switch ($name) { + case 'from_mail': + $element[$name]['#other__description'] = $this->t('Multiple email addresses may be separated by commas.') + . ' ' + . $this->t("If multiple email addresses are entered the '@name' will be not included in the email.", ['@name' => $this->t('From name')]); + break; + + case 'reply_to': + $element[$name]['#description'] = $this->t('The email address that a recipient will see when they replying to an email.'); + break; + + case 'return_path': + $element[$name]['#description'] = $this->t('The email address to which bounce messages are delivered.'); + break; + + case 'sender_mail': + $element[$name]['#description'] = $this->t('The email address submitting the message, if other than shown by the From header'); + break; + } + // Use multiple email for reply_to, return_path, and sender_mail because // it supports tokens. if (in_array($name, ['reply_to', 'return_path', 'sender_mail'])) { $element[$name]['#other__type'] = 'webform_email_multiple'; $element[$name]['#other__cardinality'] = 1; $element[$name]['#other__description'] = ''; - switch ($name) { - case 'reply_to': - $element[$name]['#description'] = $this->t('The email address that a recipient will see when they replying to an email.'); - break; - - case 'return_path': - $element[$name]['#description'] = $this->t('The email address to which bounce messages are delivered.'); - break; - - case 'sender_mail': - $element[$name]['#description'] = $this->t('The email address submitting the message, if other than shown by the From header'); - break; - } $t_args = ['@title' => $title]; if ($default_email = $this->getDefaultConfigurationValue($name)) { $t_args['%email'] = $default_email; diff --git a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php index b4928642b7..68c600d86e 100644 --- a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php +++ b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php @@ -2,6 +2,7 @@ namespace Drupal\webform\Plugin\WebformHandler; +use Drupal\Component\Render\MarkupInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Logger\LoggerChannelFactoryInterface; use Drupal\Core\Messenger\MessengerInterface; @@ -82,11 +83,11 @@ class RemotePostWebformHandler extends WebformHandlerBase { protected $elementManager; /** - * The current request. + * The request stack. * - * @var \Symfony\Component\HttpFoundation\Request + * @var \Symfony\Component\HttpFoundation\RequestStack */ - protected $request; + protected $requestStack; /** * The DrupalKernel instance used in the test. @@ -137,7 +138,7 @@ public static function create(ContainerInterface $container, array $configuratio $container->get('plugin.manager.webform.element') ); - $instance->request = $container->get('request_stack')->getCurrentRequest(); + $instance->requestStack = $container->get('request_stack'); $instance->kernel = $container->get('kernel'); return $instance; @@ -395,7 +396,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta $form['additional']['error_url'] = [ '#type' => 'textfield', '#title' => $this->t('Custom error response redirect URL'), - '#description' => $this->t('The URL or path to redirect to when a remote fails.', $t_args), + '#description' => $this->t('The URL or path to redirect to when a remote fails.'), '#default_value' => $this->configuration['error_url'], '#pattern' => '(https?:\/\/|\/).+', ]; @@ -595,6 +596,12 @@ protected function getRequestData($state, WebformSubmissionInterface $webform_su continue; } + // Cast markup to string. This only applies to computed Twig values. + // @see \Drupal\webform\Element\WebformComputedTwig::computeValue + if ($element_value instanceof MarkupInterface) { + $data[$element_key] = $element_value = (string) $element_value; + } + $element_plugin = $this->elementManager->getElementInstance($element); if ($element_plugin instanceof WebformManagedFileBase) { @@ -962,7 +969,6 @@ protected function debug($message, $state, $request_url, $request_method, $reque '#suffix' => '</pre>', ], ]; - } if ($tokens = $this->getResponseTokens($response_data, ['webform', 'handler', $this->getHandlerId(), $state])) { asort($tokens); @@ -1056,11 +1062,12 @@ protected function handleError($state, $message, $request_url, $request_method, $error_url = $base_url . preg_replace('#^' . $base_path . '#', '/', $error_url); } $response = new TrustedRedirectResponse($error_url); + $request = $this->requestStack->getCurrentRequest(); // Save the session so things like messages get saved. - $this->request->getSession()->save(); - $response->prepare($this->request); + $request->getSession()->save(); + $response->prepare($request); // Make sure to trigger kernel events. - $this->kernel->terminate($this->request, $response); + $this->kernel->terminate($request, $response); $response->send(); } } diff --git a/web/modules/webform/src/Plugin/WebformHandlerBase.php b/web/modules/webform/src/Plugin/WebformHandlerBase.php index 1ab9fd3ee0..19ffbf0556 100644 --- a/web/modules/webform/src/Plugin/WebformHandlerBase.php +++ b/web/modules/webform/src/Plugin/WebformHandlerBase.php @@ -615,6 +615,16 @@ public function postCreate(WebformSubmissionInterface $webform_submission) {} */ public function postLoad(WebformSubmissionInterface $webform_submission) {} + /** + * {@inheritdoc} + */ + public function prePurge(array $webform_submissions) {} + + /** + * {@inheritdoc} + */ + public function postPurge(array $webform_submissions) {} + /** * {@inheritdoc} */ diff --git a/web/modules/webform/src/Plugin/WebformHandlerInterface.php b/web/modules/webform/src/Plugin/WebformHandlerInterface.php index 1cbc55f475..b721a2f12d 100644 --- a/web/modules/webform/src/Plugin/WebformHandlerInterface.php +++ b/web/modules/webform/src/Plugin/WebformHandlerInterface.php @@ -512,6 +512,26 @@ public function preSave(WebformSubmissionInterface $webform_submission); */ public function postSave(WebformSubmissionInterface $webform_submission, $update = TRUE); + /** + * Acts on webform submissions before they are purged. + * + * Used before the entities are purged and before they are deleted. + * + * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions + * The webform submissions to be purged. + */ + public function prePurge(array $webform_submissions); + + /** + * Acts on webform submissions after they are purged. + * + * Used after the entities are purged and after they are deleted.. + * + * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions + * The webform submissions that were purged. + */ + public function postPurge(array $webform_submissions); + /** * Acts on a webform submission before they are deleted and before hooks are invoked. * diff --git a/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php b/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php index c9d7591fb5..cbe19f682d 100644 --- a/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php +++ b/web/modules/webform/src/Plugin/WebformVariant/OverrideWebformVariant.php @@ -4,11 +4,11 @@ use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element; use Drupal\Core\Serialization\Yaml; use Drupal\Core\Session\AccountInterface; use Drupal\webform\Element\WebformHtmlEditor; use Drupal\webform\Plugin\WebformVariantBase; +use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\Utility\WebformYaml; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -176,7 +176,7 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form if ($elements) { foreach ($elements as $element_key => $element_properties) { // Skip custom form property. - if (Element::property($element_key)) { + if (WebformElementHelper::property($element_key)) { continue; } @@ -224,7 +224,7 @@ public function applyVariant() { $elements = Yaml::decode($this->configuration['elements']) ?: []; if ($elements) { foreach ($elements as $element_key => $element_properties) { - if (Element::property($element_key)) { + if (WebformElementHelper::property($element_key)) { // Set custom form property. $webform->setElements([$element_key => $element_properties] + $webform->getElementsDecoded()); } diff --git a/web/modules/webform/src/Twig/WebformTwigExtension.php b/web/modules/webform/src/Twig/WebformTwigExtension.php index d265f01fda..c797fa01c3 100644 --- a/web/modules/webform/src/Twig/WebformTwigExtension.php +++ b/web/modules/webform/src/Twig/WebformTwigExtension.php @@ -8,6 +8,7 @@ use Drupal\webform\Utility\WebformElementHelper; use Drupal\webform\Utility\WebformHtmlHelper; use Drupal\webform\Utility\WebformLogicHelper; +use Drupal\webform\Utility\WebformXss; use Drupal\webform\Utility\WebformYaml; use Drupal\webform\WebformSubmissionInterface; @@ -132,7 +133,7 @@ public function webformToken($token, EntityInterface $entity = NULL, array $data return ''; } - return (WebformHtmlHelper::containsHtml($value)) ? ['#markup' => $value] : $value; + return (WebformHtmlHelper::containsHtml($value)) ? ['#markup' => $value, '#allowed_tags' => WebformXss::getAdminTagList()] : $value; } /****************************************************************************/ diff --git a/web/modules/webform/src/Utility/WebformDialogHelper.php b/web/modules/webform/src/Utility/WebformDialogHelper.php index 78a663352f..40a5ae1257 100644 --- a/web/modules/webform/src/Utility/WebformDialogHelper.php +++ b/web/modules/webform/src/Utility/WebformDialogHelper.php @@ -37,7 +37,7 @@ class WebformDialogHelper { const DIALOG_NARROW = 'narrow'; /** - * Prevent dialog from being displayed + * Prevent dialog from being displayed. * * @var string */ diff --git a/web/modules/webform/src/Utility/WebformElementHelper.php b/web/modules/webform/src/Utility/WebformElementHelper.php index 1444eae757..f196afe52c 100644 --- a/web/modules/webform/src/Utility/WebformElementHelper.php +++ b/web/modules/webform/src/Utility/WebformElementHelper.php @@ -4,9 +4,7 @@ use Drupal\Component\Render\MarkupInterface; use Drupal\Component\Serialization\Json; -use Drupal\Component\Utility\Xss; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Markup; use Drupal\Core\Render\Element; use Drupal\Core\Template\Attribute; use Drupal\webform\Plugin\WebformElement\WebformCompositeBase; @@ -73,6 +71,19 @@ class WebformElementHelper { */ protected static $allowedSubPropertiesRegExp; + /** + * Checks if the key is string and a property. + * + * @param string $key + * The key to check. + * + * @return bool + * TRUE of the key is string and a property., FALSE otherwise. + */ + public static function property($key) { + return ($key && is_string($key) && $key[0] == '#'); + } + /** * Determine if an element and its key is a renderable array. * @@ -88,6 +99,21 @@ public static function isElement($element, $key) { return (Element::child($key) && is_array($element)); } + /** + * Determine if an element is accessible. + * + * @param array|mixed $element + * An element. + * + * @return bool + * TRUE if an element is accessible. + * + * @see \Drupal\Core\Render\Element::isVisibleElement + */ + public static function isAccessibleElement($element) { + return (isset($element['#access']) && $element['#access'] === FALSE) ? FALSE : TRUE; + } + /** * Determine if an element has children. * @@ -246,7 +272,7 @@ public static function hasProperty(array $elements, $property, $value = NULL) { public static function getProperties(array $element) { $properties = []; foreach ($element as $key => $value) { - if (Element::property($key)) { + if (static::property($key)) { $properties[$key] = $value; } } @@ -264,7 +290,7 @@ public static function getProperties(array $element) { */ public static function removeProperties(array $element) { foreach ($element as $key => $value) { - if (Element::property($key)) { + if (static::property($key)) { unset($element[$key]); } } @@ -376,7 +402,7 @@ public static function fixStatesWrapper(array &$element) { public static function getIgnoredProperties(array $element) { $ignored_properties = []; foreach ($element as $key => $value) { - if (Element::property($key)) { + if (static::property($key)) { if (self::isIgnoredProperty($key)) { // Computed elements use #ajax as boolean and should not be ignored. // @see \Drupal\webform\Element\WebformComputedBase @@ -421,7 +447,7 @@ public static function getIgnoredProperties(array $element) { */ public static function removeIgnoredProperties(array $element) { foreach ($element as $key => $value) { - if ($key && is_string($key) && Element::property($key) && self::isIgnoredProperty($key)) { + if (static::property($key) && self::isIgnoredProperty($key)) { // Computed elements use #ajax as boolean and should not be ignored. // @see \Drupal\webform\Element\WebformComputedBase $is_ajax_computed = ($key === '#ajax' && is_bool($value)); @@ -530,7 +556,7 @@ public static function applyTranslation(array &$element, array $translation) { foreach ($element as $key => &$value) { // Make sure to only merge properties. - if (!Element::property($key) || empty($translation[$key])) { + if (!static::property($key) || empty($translation[$key])) { continue; } diff --git a/web/modules/webform/src/Utility/WebformOptionsHelper.php b/web/modules/webform/src/Utility/WebformOptionsHelper.php index 9694ad8e10..a8244fd73a 100644 --- a/web/modules/webform/src/Utility/WebformOptionsHelper.php +++ b/web/modules/webform/src/Utility/WebformOptionsHelper.php @@ -81,6 +81,32 @@ public static function getOptionsText(array $values, array $options) { return $values; } + /** + * Determine if option text includes a description. + * + * @param string $text + * Option text. + * + * @return bool + * TRUE option text includes a description. + */ + public static function hasOptionDescription($text) { + return (strpos($text, WebformOptionsHelper::DESCRIPTION_DELIMITER) !== FALSE) ? TRUE : FALSE; + } + + /** + * Split option text into an array containing an option's text and description. + * + * @param string $text + * Option text. + * + * @return array + * An array containing an option's text and description. + */ + public static function splitOption($text) { + return explode(static::DESCRIPTION_DELIMITER, $text); + } + /** * Get the text string for an option value. * @@ -104,7 +130,7 @@ public static function getOptionText($value, array $options, $options_descriptio } elseif ($value !== NULL && (string) $value === (string) $option_value) { if ($options_description && strpos($option_text, static::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text) = explode(static::DESCRIPTION_DELIMITER, $option_text); + list($option_text) = static::splitOption($option_text); return $option_text; } else { @@ -137,7 +163,7 @@ public static function getOptionDescription($value, array $options, $options_des } elseif ($value !== NULL && (string) $value === (string) $option_value) { if ($options_description && strpos($option_text, static::DESCRIPTION_DELIMITER) !== FALSE) { - list($option_text, $option_description) = explode(static::DESCRIPTION_DELIMITER, $option_text); + list($option_text, $option_description) = static::splitOption($option_text); return $option_description; } else { diff --git a/web/modules/webform/src/WebformAddonsManager.php b/web/modules/webform/src/WebformAddonsManager.php index d201e61ecc..7bfa7ea239 100644 --- a/web/modules/webform/src/WebformAddonsManager.php +++ b/web/modules/webform/src/WebformAddonsManager.php @@ -61,6 +61,9 @@ public function getThirdPartySettings() { */ public function getCategories() { $categories = []; + $categories['applications'] = [ + 'title' => $this->t('Applications'), + ]; $categories['element'] = [ 'title' => $this->t('Elements'), ]; @@ -113,6 +116,18 @@ protected function initProjects() { $projects = []; + /**************************************************************************/ + // Applications. + /**************************************************************************/ + + // Applications: Academic Applications. + $projects['academic_applications'] = [ + 'title' => $this->t('Academic Applications'), + 'description' => $this->t('Provides a simple Webform-based system for applying to academic programs.'), + 'url' => Url::fromUri('https://www.drupal.org/project/academic_applications'), + 'category' => 'applications', + ]; + /**************************************************************************/ // Element. /**************************************************************************/ @@ -206,6 +221,14 @@ protected function initProjects() { 'category' => 'element', ]; + // Element: Webform Entity View. + $projects['webform_entity_view'] = [ + 'title' => $this->t('Webform Entity View'), + 'description' => $this->t('Provides an Entity Reference Webform element that can be picked in the build of a webform and will be rendered in the view.'), + 'url' => Url::fromUri('https://www.drupal.org/project/webform_entity_view'), + 'category' => 'element', + ]; + // Element: Webform Handsontable. $projects['handsontable_yml_webform'] = [ 'title' => $this->t('Webform Handsontable'), @@ -314,6 +337,14 @@ protected function initProjects() { // Enhancement. /**************************************************************************/ + // Enhancement: Dopup. + $projects['dopup'] = [ + 'title' => $this->t('Dopup'), + 'description' => $this->t('Simple webform popups for lead generation and other marketing needs.'), + 'url' => Url::fromUri('https://www.drupal.org/project/dopup'), + 'category' => 'enhancement', + ]; + // Enhancement: Formset. $projects['formset'] = [ 'title' => $this->t('Formset'), @@ -338,6 +369,14 @@ protected function initProjects() { 'category' => 'enhancement', ]; + // Enhancement: Webform Cookie. + $projects['webform_cookie'] = [ + 'title' => $this->t('Webform Cookie'), + 'description' => $this->t('Provides a Webform submission handler that sets an arbitrary cookie after submission.'), + 'url' => Url::fromUri('https://github.com/r0nn1ef/webform_cookie'), + 'category' => 'enhancement', + ]; + // Enhancement: Webform Confirmation File. $projects['webform_confirmation_file'] = [ 'title' => $this->t('Webform Confirmation File'), @@ -426,6 +465,14 @@ protected function initProjects() { 'category' => 'enhancement', ]; + // Enhancement: Webform Paragraphs. + $projects['webform_paragraphs'] = [ + 'title' => $this->t('Webform Paragraphs'), + 'description' => $this->t('Adds a paragraph reference to the webforms when they are submitted from a paragraph context.'), + 'url' => Url::fromUri('https://www.drupal.org/project/webform_paragraphs'), + 'category' => 'enhancement', + ]; + // Enhancement: Webform Pre-populate. $projects['webform_prepopulate'] = [ 'title' => $this->t('Webform Pre-populate'), @@ -442,6 +489,14 @@ protected function initProjects() { 'category' => 'enhancement', ]; + // Enhancement: Webform Unsubscribe. + $projects['webform_unsubscribe'] = [ + 'title' => $this->t('Webform Unsubscribe'), + 'description' => $this->t('Provides the token for creation of the link for removing a webform submission by an anonymous user.'), + 'url' => Url::fromUri('https://www.drupal.org/project/webform_unsubscribe'), + 'category' => 'enhancement', + ]; + // Enhancement: Webform Timeout. $projects['webform_timeout'] = [ 'title' => $this->t('Webform Timeout'), @@ -499,14 +554,6 @@ protected function initProjects() { /**************************************************************************/ - // Integrations: Webform AddressFinder. - $projects['academic_applications'] = [ - 'title' => $this->t('Academic Applications'), - 'description' => $this->t('Provides a simple Webform-based system for applying to academic programs.'), - 'url' => Url::fromUri('https://www.drupal.org/project/academic_applications'), - 'category' => 'integration', - ]; - // Integrations: Ansible. $projects['ansible'] = [ 'title' => $this->t('Ansible'), @@ -531,6 +578,14 @@ protected function initProjects() { 'category' => 'integration', ]; + // Integration: Drip Webform Handler. + $projects['drip_webform_handler'] = [ + 'title' => $this->t('Drip Webform Handler'), + 'description' => $this->t('Allows you to post submissions to Drip.com.'), + 'url' => Url::fromUri('https://www.drupal.org/project/drip_webform_handler'), + 'category' => 'integration', + ]; + // Integrations: Druminate Webforms. $projects['druminate'] = [ 'title' => $this->t('Druminate Webforms'), @@ -595,6 +650,22 @@ protected function initProjects() { 'category' => 'integration', ]; + // Integrations: Mailchimp Webform Handler. + $projects['mailchimp_webform_handler'] = [ + 'title' => $this->t('Mailchimp Webform Handler'), + 'description' => $this->t('Allows you to add a new contact from a webform to a Mailchimp list without enabling a dependent Mailchimp-module.'), + 'url' => Url::fromUri('https://www.drupal.org/project/mailchimp_webform_handler'), + 'category' => 'integration', + ]; + + // Integrations: Marketo MA. + $projects['marketo_ma'] = [ + 'title' => $this->t('Marketo MA Webform'), + 'description' => $this->t('Integrates Marketo MA with Webform module forms.'), + 'url' => Url::fromUri('https://www.drupal.org/project/marketo_ma'), + 'category' => 'integration', + ]; + // Integrations: Micro Webform. $projects['micro_webform'] = [ 'title' => $this->t('Micro Webform'), @@ -611,6 +682,14 @@ protected function initProjects() { 'category' => 'integration', ]; + // Integrations: Webform Postcode API. + $projects['webform_postcodeapi'] = [ + 'title' => $this->t('Webform Postcode API'), + 'description' => $this->t('Provides a composite Webform address element with autocompletion based on PostcodeAPI.nu data.'), + 'url' => Url::fromUri('https://www.drupal.org/project/webform_postcodeapi'), + 'category' => 'integration', + ]; + // Integrations: Rules Webform. $projects['rules_webform'] = [ 'title' => $this->t('Rules Webform'), @@ -619,7 +698,15 @@ protected function initProjects() { 'category' => 'integration', ]; - // Integrations: Sherpa Webform . + // Integrations: Sharpspring Webforms. + $projects['sharpspring_webforms'] = [ + 'title' => $this->t('Sharpspring Webforms'), + 'description' => $this->t("Extends the SharpSpring module's functionality to add SharpSpring lead tracking to Webforms."), + 'url' => Url::fromUri('https://www.drupal.org/project/sharpspring_webforms'), + 'category' => 'integration', + ]; + + // Integrations: Sherpa Webform. $projects['sherpa_webform'] = [ 'title' => $this->t('Sherpa Webform'), 'description' => $this->t('Captures Webform submissions, convert them to JSON, and send them to Sherpa.'), @@ -627,6 +714,14 @@ protected function initProjects() { 'category' => 'integration', ]; + // Integrations: Vipps Recurring Payments. + $projects['vipps_recurring_payments'] = [ + 'title' => $this->t('Vipps Recurring Payments'), + 'description' => $this->t('Use Webform with Vipps Recurring Payments.'), + 'url' => Url::fromUri('https://www.drupal.org/project/vipps_recurring_payments'), + 'category' => 'integration', + ]; + // Integrations: Watson/Silverpop Webform Parser. $projects['watson_form_parser'] = [ 'title' => $this->t('Watson/Silverpop Webform Parser'), @@ -1079,6 +1174,14 @@ protected function initProjects() { 'recommended' => TRUE, ]; + // Spam: SpamAway. + $projects['spamaway'] = [ + 'title' => $this->t('SpamAway'), + 'description' => $this->t('Provides a webform handler which will mark submissions as SPAM'), + 'url' => Url::fromUri('https://www.drupal.org/project/spamaway'), + 'category' => 'spam', + ]; + /**************************************************************************/ // Spam: CleanTalk. @@ -1454,6 +1557,15 @@ protected function initProjects() { 'recommended' => TRUE, ]; + // Workflow: Workflows Field. + $projects['workflows_field'] = [ + 'title' => $this->t('Workflows Field'), + 'description' => $this->t('A business process workflow solution that allows you to create and automate a sequence of tasks representing any business, document approval or collaboration process.'), + 'url' => Url::fromUri('https://www.drupal.org/project/workflows_field'), + 'category' => 'workflow', + 'recommended' => TRUE, + ]; + /**************************************************************************/ // Development. /**************************************************************************/ diff --git a/web/modules/webform/src/WebformEmailProvider.php b/web/modules/webform/src/WebformEmailProvider.php index 37b9dd43f5..e9a52cfa3c 100644 --- a/web/modules/webform/src/WebformEmailProvider.php +++ b/web/modules/webform/src/WebformEmailProvider.php @@ -175,7 +175,7 @@ public function getMailPluginId() { */ public function getMailPluginDefinition() { $plugin_id = $this->getMailPluginId(); - return ($plugin_id) ? $this->mailManager->getDefinition($plugin_id) : NULL; + return ($plugin_id && $this->mailManager->hasDefinition($plugin_id)) ? $this->mailManager->getDefinition($plugin_id) : NULL; } } diff --git a/web/modules/webform/src/WebformEntityAddForm.php b/web/modules/webform/src/WebformEntityAddForm.php index 3a1a106e95..5a09723eaf 100644 --- a/web/modules/webform/src/WebformEntityAddForm.php +++ b/web/modules/webform/src/WebformEntityAddForm.php @@ -3,9 +3,12 @@ namespace Drupal\webform; use Drupal\Core\Entity\BundleEntityFormBase; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\webform\Form\WebformDialogFormTrait; +use Drupal\Core\Language\LanguageManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides a webform add form. @@ -14,6 +17,43 @@ class WebformEntityAddForm extends BundleEntityFormBase { use WebformDialogFormTrait; + /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * The language manager. + * + * @var \Drupal\Core\Language\LanguageManagerInterface + */ + protected $languageManager; + + /** + * Constructs a WebformEntityAddForm. + * + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler. + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * The language manager. + */ + public function __construct(ModuleHandlerInterface $module_handler, LanguageManagerInterface $language_manager) { + $this->moduleHandler = $module_handler; + $this->languageManager = $language_manager; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('module_handler'), + $container->get('language_manager') + ); + } + /** * {@inheritdoc} */ @@ -114,20 +154,23 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $original_id = \Drupal::routeMatch()->getRawParameter('webform'); $duplicate_id = $this->getEntity()->id(); - // Poormans duplication of translated webform configuration. - // This completely bypasses the config translation system and just - // duplicates any translated webform config stored in the database. - $result = \Drupal::database()->select('config', 'c') - ->fields('c', ['collection', 'name', 'data']) - ->condition('c.name', 'webform.webform.' . $original_id) - ->condition('c.collection', 'language.%', 'LIKE') - ->execute(); - while ($record = $result->fetchAssoc()) { - $record['name'] = 'webform.webform.' . $duplicate_id; - \Drupal::database()->insert('config') - ->fields(['collection', 'name', 'data']) - ->values($record) - ->execute(); + // Copy translations. + if ($this->moduleHandler->moduleExists('config_translation')) { + $original_name = 'webform.webform.' . $original_id; + $duplicate_name = 'webform.webform.' . $duplicate_id; + $current_langcode = $this->languageManager->getConfigOverrideLanguage()->getId(); + $languages = $this->languageManager->getLanguages(); + foreach ($languages as $language) { + $langcode = $language->getId(); + if ($langcode !== $current_langcode) { + $original_translation = $this->languageManager->getLanguageConfigOverride($langcode, $original_name)->get(); + if ($original_translation) { + $duplicate_translation = $this->languageManager->getLanguageConfigOverride($langcode, $duplicate_name); + $duplicate_translation->setData($original_translation); + $duplicate_translation->save(); + } + } + } } // Copy webform export and results from state. diff --git a/web/modules/webform/src/WebformEntityConditionsManager.php b/web/modules/webform/src/WebformEntityConditionsManager.php index acd9443a8f..773818d452 100644 --- a/web/modules/webform/src/WebformEntityConditionsManager.php +++ b/web/modules/webform/src/WebformEntityConditionsManager.php @@ -67,7 +67,7 @@ public function toText(WebformInterface $webform, array $states, array $options 'empty' => $this->t('is empty'), 'filled' => $this->t('is filled'), 'checked' => $this->t('is checked'), - 'unchecked' => $this->t('is unchecked'), + 'unchecked' => $this->t('is not checked'), 'value' => '=', '!value' => '!=', 'pattern' => $this->t('matches'), @@ -246,6 +246,16 @@ protected function buildConditionItem(WebformInterface $webform, $selector, arra $element_title .= ': ' . WebformOptionsHelper::getOptionText($element_option_key, $element_options, TRUE); } + // Checked 'checked: false' to 'unchecked: true' and vice-versa. + if ($trigger_state === 'checked' && $trigger_value === FALSE) { + $trigger_state = 'unchecked'; + $trigger_value = TRUE; + } + elseif ($trigger_state === 'unchecked' && $trigger_value === FALSE) { + $trigger_state = 'checked'; + $trigger_value = TRUE; + } + // Build the condition. $t_args = [ '@name' => $element_title, diff --git a/web/modules/webform/src/WebformEntityReferenceManager.php b/web/modules/webform/src/WebformEntityReferenceManager.php index 5ff83aa437..0d6ddd4eb0 100644 --- a/web/modules/webform/src/WebformEntityReferenceManager.php +++ b/web/modules/webform/src/WebformEntityReferenceManager.php @@ -2,10 +2,13 @@ namespace Drupal\webform; -use Drupal\Core\Session\AccountInterface; use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Entity\FieldableEntityInterface; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\field\Entity\FieldStorageConfig; use Drupal\user\UserDataInterface; use Drupal\webform\Entity\Webform; @@ -42,6 +45,20 @@ class WebformEntityReferenceManager implements WebformEntityReferenceManagerInte */ protected $userData; + /** + * The module handler service. + * + * @var \Drupal\Core\Extension\ModuleHandlerInterface + */ + protected $moduleHandler; + + /** + * The entity type manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + /** * Cache of source entity webforms. * @@ -65,11 +82,17 @@ class WebformEntityReferenceManager implements WebformEntityReferenceManagerInte * The current user. * @param \Drupal\user\UserDataInterface $user_data * The user data service. + * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler + * The module handler class to use for loading includes. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity type manager. */ - public function __construct(RouteMatchInterface $route_match, AccountInterface $current_user, UserDataInterface $user_data) { + public function __construct(RouteMatchInterface $route_match, AccountInterface $current_user, UserDataInterface $user_data, ModuleHandlerInterface $module_handler = NULL, EntityTypeManagerInterface $entity_type_manager = NULL) { $this->routeMatch = $route_match; $this->currentUser = $current_user; $this->userData = $user_data; + $this->moduleHandler = $module_handler ?: \Drupal::moduleHandler(); + $this->entityTypeManager = $entity_type_manager ?: \Drupal::entityTypeManager(); } /****************************************************************************/ @@ -159,7 +182,7 @@ public function getFieldName(EntityInterface $entity = NULL) { * {@inheritdoc} */ public function getFieldNames(EntityInterface $entity = NULL) { - if ($entity === NULL || !method_exists($entity, 'hasField')) { + if ($entity === NULL || !$entity instanceof FieldableEntityInterface) { return []; } @@ -211,15 +234,20 @@ public function getWebforms(EntityInterface $entity = NULL) { return $this->webforms[$entity_id]; } - $field_names = $this->getFieldNames($entity); $target_entities = []; $sorted_entities = []; + + $field_names = $this->getFieldNames($entity); foreach ($field_names as $field_name) { foreach ($entity->$field_name as $item) { $sorted_entities[$item->target_id] = (method_exists($item->entity, 'getWeight')) ? $item->entity->getWeight() : 0; $target_entities[$item->target_id] = $item->entity; } } + + // Add paragraphs check. + $this->getParagraphWebformsRecursive($entity, $target_entities, $sorted_entities); + // Sort the webforms by key and then weight. ksort($sorted_entities); asort($sorted_entities, SORT_NUMERIC); @@ -231,9 +259,83 @@ public function getWebforms(EntityInterface $entity = NULL) { } $this->webforms[$entity_id] = $webforms; + return $webforms; } + /****************************************************************************/ + // Paragraph methods. + /****************************************************************************/ + + /** + * Get webform associate with a paragraph field from entity. + * + * @param \Drupal\Core\Entity\EntityInterface $entity + * An entity. + * @param array $target_entities + * An associate array of targeted webfrom entities. + * @param array $sorted_entities + * An associate array of sorted webfrom entities by weight. + */ + protected function getParagraphWebformsRecursive(EntityInterface $entity, array &$target_entities, array &$sorted_entities) { + // Add paragraphs check. + if (!$this->moduleHandler->moduleExists('paragraphs')) { + return; + } + // Make sure the entity exists and is fieldable. + if ($entity === NULL || !$entity instanceof FieldableEntityInterface) { + return; + } + + $paragraph_fields = $this->getParagraphFieldNames($entity); + foreach ($paragraph_fields as $paragraph_field) { + if (!$entity->hasField($paragraph_field)) { + continue; + } + + foreach ($entity->get($paragraph_field) as $paragraph_item) { + $paragraph = $paragraph_item->entity; + if ($paragraph) { + $webform_field_names = $this->getFieldNames($paragraph); + foreach ($webform_field_names as $webform_field_name) { + foreach ($paragraph->$webform_field_name as $webform_field_item) { + if ($webform_field_item->entity) { + $sorted_entities[$webform_field_item->target_id] = (method_exists($webform_field_item->entity, 'getWeight')) ? $webform_field_item->entity->getWeight() : 0; + $target_entities[$webform_field_item->target_id] = $webform_field_item->entity; + } + } + } + $this->getParagraphWebformsRecursive($paragraph, $target_entities, $sorted_entities); + } + } + } + } + + /** + * Get paragraph field names. + * + * @param \Drupal\Core\Entity\EntityInterface|null $entity + * A fieldable content entity. + * + * @return array + * An array of paragraph field names. + */ + protected function getParagraphFieldNames(EntityInterface $entity) { + $fields = $this->entityTypeManager->getStorage('field_storage_config')->loadByProperties([ + 'entity_type' => $entity->getEntityTypeId(), + 'type' => 'entity_reference_revisions', + ]); + + $field_names = []; + foreach ($fields as $field) { + if ($field->getSetting('target_type') === 'paragraph') { + $field_name = $field->get('field_name'); + $field_names[$field_name] = $field_name; + } + } + return $field_names; + } + /****************************************************************************/ // Table methods. /****************************************************************************/ diff --git a/web/modules/webform/src/WebformHelpManager.php b/web/modules/webform/src/WebformHelpManager.php index af3e5b8f23..7f007c21b6 100644 --- a/web/modules/webform/src/WebformHelpManager.php +++ b/web/modules/webform/src/WebformHelpManager.php @@ -1775,7 +1775,7 @@ protected function initHelp() { 'group' => 'configuration', 'title' => $this->t('Configuration: Libraries: Help'), 'content' => '<p>' . $this->t('The Webform module utilizes third-party Open Source libraries to enhance webform elements and to provide additional functionality.') . ' ' . - $this->t('It is recommended that these libraries are installed in your Drupal installations /libraries or /web/libraries directory.') . ' ' . + $this->t("It is recommended that these libraries are installed in your Drupal installation's /libraries or /web/libraries directory.") . ' ' . $this->t('If these libraries are not installed, they will be automatically loaded from a CDN.') . ' ' . $this->t('All libraries are optional and can be excluded via the admin settings form.') . '</p>' . diff --git a/web/modules/webform/src/WebformLibrariesManager.php b/web/modules/webform/src/WebformLibrariesManager.php index 3253b9a755..babf453e33 100644 --- a/web/modules/webform/src/WebformLibrariesManager.php +++ b/web/modules/webform/src/WebformLibrariesManager.php @@ -158,17 +158,26 @@ public function requirements($cli = FALSE) { '#suffix' => '</dt>', ]; $info[$library_name]['description'] = [ - 'content' => [ - '#markup' => $description, - ], - 'status' => (!empty($library['deprecated'])) ? [ - '#markup' => $library['deprecated'], - '#prefix' => '<div class="color-warning"><strong>', - '#suffix' => '</strong></div>', - ] : [], '#prefix' => '<dd>', '#suffix' => '</dd>', ]; + $info[$library_name]['description']['content'] = [ + '#markup' => $description, + ]; + if (!empty($library['notes'])) { + $info[$library_name]['description']['notes'] = [ + '#markup' => $library['notes'], + '#prefix' => '<div><em>(', + '#suffix' => '}</em></div>', + ]; + } + if (!empty($library['deprecated'])) { + $info[$library_name]['description']['status'] = [ + '#markup' => $library['deprecated'], + '#prefix' => '<div class="color-warning"><strong>', + '#suffix' => '</strong></div>', + ]; + } } // Description. @@ -329,9 +338,10 @@ protected function initLibraries() { 'description' => $this->t('Code Mirror is a versatile text editor implemented in JavaScript for the browser.'), 'notes' => $this->t('Code Mirror is used to provide a text editor for YAML, HTML, CSS, and JavaScript configuration settings and messages.'), 'homepage_url' => Url::fromUri('http://codemirror.net/'), - 'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.57.0.zip'), + // Issue #3177233: CodeMirror 5.70.0 is displaying vertical scrollbar. + 'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.53.2.zip'), 'issues_url' => Url::fromUri('https://github.com/codemirror/codemirror/issues'), - 'version' => '5.57.0', + 'version' => '5.53.2', ]; $libraries['algolia.places'] = [ 'title' => $this->t('Algolia Places'), diff --git a/web/modules/webform/src/WebformSubmissionAccessControlHandler.php b/web/modules/webform/src/WebformSubmissionAccessControlHandler.php index 68c8428180..8027159a99 100644 --- a/web/modules/webform/src/WebformSubmissionAccessControlHandler.php +++ b/web/modules/webform/src/WebformSubmissionAccessControlHandler.php @@ -81,15 +81,14 @@ public function checkAccess(EntityInterface $entity, $operation, AccountInterfac return WebformAccessResult::allowed($entity, TRUE); } - // Check view operation token access. - if ($operation === 'view' - && $entity->getWebform()->getSetting('token_view')) { + // Check view and delete operations token access. + if (($operation === 'view' || $operation === 'delete') + && $entity->getWebform()->getSetting('token_' . $operation)) { $token = $this->request->query->get('token'); if ($token === $entity->getToken()) { return WebformAccessResult::allowed($entity) ->addCacheContexts(['url.query_args:token']); } - } // Check 'any' or 'own' webform submission permissions. diff --git a/web/modules/webform/src/WebformSubmissionConditionsValidator.php b/web/modules/webform/src/WebformSubmissionConditionsValidator.php index 2f5fd0119a..f17ecf6279 100644 --- a/web/modules/webform/src/WebformSubmissionConditionsValidator.php +++ b/web/modules/webform/src/WebformSubmissionConditionsValidator.php @@ -4,7 +4,6 @@ use Drupal\Component\Utility\Crypt; use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\webform\Plugin\WebformElement\TextBase; use Drupal\webform\Plugin\WebformElement\WebformCompositeBase; @@ -222,7 +221,7 @@ public function replaceCrossPageTargets(array $conditions, WebformSubmissionInte $cross_page_conditions = []; foreach ($conditions as $index => $value) { if (is_int($index) && is_array($value) && WebformArrayHelper::isSequential($value)) { - $cross_page_conditions[$index] = $this->replaceCrossPageTargets($conditions, $webform_submission, $targets, $form); + $cross_page_conditions[$index] = $this->replaceCrossPageTargets($value, $webform_submission, $targets, $form); } else { $cross_page_conditions[$index] = $value; @@ -303,7 +302,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) { protected function validateFormRecursive(array $form, FormStateInterface $form_state) { foreach ($form as $key => $element) { if (!WebformElementHelper::isElement($element, $key) - || !Element::isVisibleElement($element)) { + || !WebformElementHelper::isAccessibleElement($element)) { continue; } $this->validateFormElement($element, $form_state); @@ -675,7 +674,7 @@ protected function validateCondition($selector, array $condition, WebformSubmiss // If no element is found try checking file uploads which use // :input[name="files[ELEMENT_KEY]. // @see \Drupal\webform\Plugin\WebformElement\WebformManagedFileBase::getElementSelectorOptions - if (!$element && strpos($selector, ':input[name="files[') === 0) { + if (!$element && strpos($selector, ':input[name="files[') !== FALSE) { $element_key = static::getInputNameAsArray($input_name, 1); $element = $webform_submission->getWebform()->getElement($element_key); } @@ -960,8 +959,8 @@ protected function getBuildElementsRecursive(array &$elements, array &$form, arr $element['#_webform_access'] = $element['#access']; } - // Skip if element is not visible. - if (!Element::isVisibleElement($element)) { + // Skip if element is not accessible. + if (!WebformElementHelper::isAccessibleElement($element)) { continue; } @@ -1060,12 +1059,12 @@ protected function getConditionTargetsVisibilityRecursive(array $conditions, arr } elseif (is_int($index)) { $selector = key($value); + $targets[$selector] = $selector; } else { $selector = $index; + $targets[$selector] = $selector; } - - $targets[$selector] = $selector; } } diff --git a/web/modules/webform/src/WebformSubmissionForm.php b/web/modules/webform/src/WebformSubmissionForm.php index 672ff09744..a6e72b95d9 100644 --- a/web/modules/webform/src/WebformSubmissionForm.php +++ b/web/modules/webform/src/WebformSubmissionForm.php @@ -469,7 +469,7 @@ public function setEntity(EntityInterface $entity) { if ($this->operation === 'add' && $entity->isNew() && $webform->getSetting('autofill')) { - if ($last_submission = $this->getLastSubmission()) { + if ($last_submission = $this->getStorage()->getLastSubmission($webform, $source_entity, $account, ['in_draft' => FALSE, 'access_check' => FALSE])) { $excluded_elements = $webform->getSetting('autofill_excluded_elements') ?: []; $last_submission_data = array_diff_key($last_submission->getRawData(), $excluded_elements); $data = $last_submission_data + $data; @@ -622,6 +622,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { // @todo Remove once bubbling of element's max-age to page cache is fixed. // @see https://www.drupal.org/project/webform/issues/3015760 // @see https://www.drupal.org/project/drupal/issues/2352009 + // @see \Drupal\webform\Element\Webform::preRenderWebformElement if ($webform->isScheduled() && $this->currentUser()->isAnonymous() && $this->moduleHandler->moduleExists('page_cache')) { @@ -1014,6 +1015,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state) $webform_submission = $this->getEntity(); $webform = $this->getWebform(); $source_entity = $this->getSourceEntity(); + $account = $this->currentUser(); // Display test message, except on share page. if ($this->isGet() && $this->operation === 'test' && !$this->isSharePage()) { @@ -1065,9 +1067,9 @@ protected function displayMessages(array $form, FormStateInterface $form_state) // Display link to multiple drafts message when user is adding a new // submission. if ($this->isGet() + && $this->operation === 'add' && $this->getWebformSetting('draft') !== WebformInterface::DRAFT_NONE && $this->getWebformSetting('draft_multiple', FALSE) - && ($this->isRoute('webform.canonical') || $this->isWebformEntityReferenceFromSourceEntity()) && ($previous_draft_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser(), ['in_draft' => TRUE])) ) { if ($previous_draft_total > 1) { @@ -1084,8 +1086,8 @@ protected function displayMessages(array $form, FormStateInterface $form_state) // Display link to previous submissions message when user is adding a new // submission. if ($this->isGet() + && $this->operation === 'add' && $this->getWebformSetting('form_previous_submissions', FALSE) - && ($this->isRoute('webform.canonical') || $this->isWebformEntityReferenceFromSourceEntity()) && ($webform->access('submission_view_own') || $this->currentUser()->hasPermission('view own webform submission')) && ($previous_submission_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser())) ) { @@ -1093,7 +1095,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state) $this->getMessageManager()->display(WebformMessageManagerInterface::PREVIOUS_SUBMISSIONS); } else { - $last_submission = $this->getLastSubmission(FALSE); + $last_submission = $this->getStorage()->getLastSubmission($webform, $source_entity, $account); if ($last_submission && $webform_submission->id() !== $last_submission->id()) { $this->getMessageManager()->display(WebformMessageManagerInterface::PREVIOUS_SUBMISSION); } @@ -1105,7 +1107,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state) && $this->operation === 'add' && $webform_submission->isNew() && $webform->getSetting('autofill') - && $this->getLastSubmission()) { + && $this->getStorage()->getLastSubmission($webform, $source_entity, $account, ['in_draft' => FALSE, 'access_check' => FALSE])) { $this->getMessageManager()->display(WebformMessageManagerInterface::AUTOFILL_MESSAGE); } } @@ -2975,6 +2977,9 @@ protected function getLimitSourceEntity() { * * @return \Drupal\webform\WebformSubmissionInterface|null * The last completed webform submission for the current user. + * + * @deprecated Scheduled for removal in Webform 8.x-6.x + * Use $this->getStorage()->getLastSubmission instead. */ protected function getLastSubmission($completed = TRUE) { $webform = $this->getWebform(); @@ -3034,6 +3039,13 @@ protected function isAjax() { if ($this->operation === 'api') { return FALSE; } + + // Disable Ajax if the form has its #method set to 'get'. + $elements = $this->getWebform()->getElementsInitialized(); + if (isset($elements['#method']) && $elements['#method'] === 'get') { + return FALSE; + } + return $this->getWebformSetting('ajax', FALSE); } diff --git a/web/modules/webform/src/WebformSubmissionGenerate.php b/web/modules/webform/src/WebformSubmissionGenerate.php index 265c787c9b..3f8d37d529 100644 --- a/web/modules/webform/src/WebformSubmissionGenerate.php +++ b/web/modules/webform/src/WebformSubmissionGenerate.php @@ -65,8 +65,8 @@ public function __construct(ConfigFactoryInterface $config_factory, WebformToken $this->tokenManager = $token_manager; $this->elementManager = $element_manager; - $this->types = Yaml::decode($this->configFactory->get('webform.settings')->get('test.types') ?: ''); - $this->names = Yaml::decode($this->configFactory->get('webform.settings')->get('test.names') ?: ''); + $this->types = Yaml::decode($this->configFactory->get('webform.settings')->get('test.types') ?: '') ?: []; + $this->names = Yaml::decode($this->configFactory->get('webform.settings')->get('test.names') ?: '') ?: []; } /** diff --git a/web/modules/webform/src/WebformSubmissionStorage.php b/web/modules/webform/src/WebformSubmissionStorage.php index 8f58dcc29d..73016cff30 100644 --- a/web/modules/webform/src/WebformSubmissionStorage.php +++ b/web/modules/webform/src/WebformSubmissionStorage.php @@ -407,6 +407,7 @@ public function addQueryConditions(AlterableInterface $query, WebformInterface $ * Defaults to NULL * - check_source_entity (boolean): Check that a source entity is defined. * - interval (int): Limit total within an seconds interval. + * - check_access (boolean): Check access to the submission. * * @todo Webform 8.x-6.x: Remove and move code to ::addQueryConditions. */ @@ -1234,13 +1235,12 @@ public function purge($count) { $query->accessCheck(FALSE); $query->condition('settings.purge', [WebformSubmissionStorageInterface::PURGE_DRAFT, WebformSubmissionStorageInterface::PURGE_COMPLETED, WebformSubmissionStorageInterface::PURGE_ALL], 'IN'); $query->condition('settings.purge_days', 0, '>'); - $webforms_to_purge = array_values($query->execute()); + $webform_ids = array_values($query->execute()); - $webform_submissions_to_purge = []; - - if (!empty($webforms_to_purge)) { - $webforms_to_purge = $this->entityManager->getStorage('webform')->loadMultiple($webforms_to_purge); - foreach ($webforms_to_purge as $webform) { + $remaining = $count; + if (!empty($webform_ids)) { + $webforms = $this->entityManager->getStorage('webform')->loadMultiple($webform_ids); + foreach ($webforms as $webform) { $query = $this->getQuery(); // Since results of this query are never displayed to the user and we // actually need to query the entire dataset of webform submissions, we @@ -1257,22 +1257,27 @@ public function purge($count) { $query->condition('in_draft', 0); break; } - $query->range(0, $count - count($webform_submissions_to_purge)); - $result = array_values($query->execute()); - if (!empty($result)) { - $webform_submissions_to_purge = array_merge($webform_submissions_to_purge, $result); + $query->range(0, $remaining); + $sids = array_values($query->execute()); + if (empty($sids)) { + continue; } - if (count($webform_submissions_to_purge) === $count) { + $remaining -= count($sids); + $webform_submissions = $this->loadMultiple($sids); + + $webform->invokeHandlers('prePurge', $webform_submissions); + $this->moduleHandler()->invokeAll('webform_submissions_pre_purge', [$webform_submissions]); + + $this->delete($webform_submissions); + + $webform->invokeHandlers('postPurge', $webform_submissions); + $this->moduleHandler()->invokeAll('webform_submissions_post_purge', [$webform_submissions]); + if ($remaining === 0) { // We've collected enough webform submissions for purging in this run. break; } } } - - if (!empty($webform_submissions_to_purge)) { - $webform_submissions_to_purge = $this->loadMultiple($webform_submissions_to_purge); - $this->delete($webform_submissions_to_purge); - } } /****************************************************************************/ diff --git a/web/modules/webform/templates/webform-submission-information.html.twig b/web/modules/webform/templates/webform-submission-information.html.twig index 7f036913e1..62f480ceb2 100644 --- a/web/modules/webform/templates/webform-submission-information.html.twig +++ b/web/modules/webform/templates/webform-submission-information.html.twig @@ -43,6 +43,9 @@ {% if token_update %} <div><b>{{ 'Submission Update'|t }}:</b> {{ token_update }}</div> {% endif %} + {% if token_delete %} + <div><b>{{ 'Submission Delete'|t }}:</b> {{ token_delete }}</div> + {% endif %} <br /> <div><b>{{ 'Created'|t }}:</b> {{ created }}</div> <div><b>{{ 'Completed'|t }}:</b> {{ completed }}</div> diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml index e5687d99be..c58f42b8f0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml index 230568fd56..d4de666778 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml index ea755acc84..4cf321daaf 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml index 87016a5225..b147b72092 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml index 796a213813..d7698f0486 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml index 0a0f9692e6..6943f01f0c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml index 5b03021bc4..eec0eeac6b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml index dc591ace21..00f0285053 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml @@ -104,7 +104,7 @@ elements: | one: One two: Two three: Three - + css: '' javascript: '' settings: @@ -234,6 +234,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml index 27029ffab6..b7d080a16d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml @@ -66,7 +66,7 @@ elements: | martial_status: Single employment_status: Unemployed age: 20 - + css: '' javascript: '' settings: @@ -196,6 +196,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml index 0a20ecfdfa..aa883cda09 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml @@ -37,7 +37,7 @@ elements: | managed_file: '#type': managed_file '#title': managed_file - + css: '' javascript: '' settings: @@ -167,6 +167,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml index ce25ad13f9..e2a650dd70 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml @@ -456,7 +456,7 @@ elements: | q2: 1 q3: 1 '#format': table - + css: '' javascript: '' settings: @@ -586,6 +586,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml index e6182a6418..98333bc572 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml @@ -712,7 +712,7 @@ elements: | phone: '+1 212-333-4444' ext: 0 '#format_items': table - + css: '' javascript: '' settings: @@ -842,6 +842,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml index ddf330bcfa..9b84bc9b42 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml index 66f64247a8..f2e68d7f00 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml index 3c6c20fde1..5b48bf880d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml index f24152614a..7d6b96b6ed 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml index 3e78b695fd..9587ca0f4a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml index 8ff8342a45..9537d5ef27 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml index 824510b58d..6130630ee7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml index ef3e025db5..b0d1bc8890 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml index f7c4ccf76b..85e466987f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml @@ -368,6 +368,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml index 0765765093..d43bdf8a9e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml @@ -250,6 +250,7 @@ settings: results_customize: false token_view: false token_update: true + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml index a22209ce8b..f4dc056f2c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml @@ -288,6 +288,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml index 3b230bfb37..0908920141 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml @@ -189,6 +189,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml index 0f69da9f37..486b25ad46 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml @@ -71,7 +71,7 @@ elements: | administrative_area: CA country_code: US langcode: en - + css: '' javascript: '' settings: @@ -201,6 +201,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml index b78e0ff96d..0ac7e12994 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml index 20c2c78308..1ee981803d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml @@ -23,7 +23,7 @@ elements: | one two three - + '#class__description': 'This is a custom class description.' '#style__description': 'This is a custom style description.' '#attributes__description': 'This is a custom attributes description.' @@ -34,7 +34,7 @@ elements: | - four style: 'color: red' custom: test - + css: '' javascript: '' settings: @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml index a0828246cd..dce7525d00 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml @@ -168,6 +168,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml index 93c6830d31..d5a4200781 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml @@ -41,7 +41,7 @@ elements: | captcha_recaptcha: '#type': captcha '#captcha_type': recaptcha/reCAPTCHA - + css: '' javascript: '' settings: @@ -171,6 +171,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml index 938120c4b5..a340037254 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml @@ -32,7 +32,7 @@ elements: | '#title': checkbox_return_value_raw '#return_value': custom_return_value_raw '#format': raw - + css: '' javascript: '' settings: @@ -162,6 +162,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml index 8c3f43bcf9..f4b66de470 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml @@ -35,7 +35,7 @@ elements: | One: One Two: Two Three: Three - + css: '' javascript: '' settings: @@ -165,6 +165,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml index ef64337e0e..3d77003f26 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml @@ -209,7 +209,7 @@ elements: | '#disabled': true three: '#disabled': true - + css: '' javascript: '' settings: @@ -339,6 +339,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml index 8ee696edf0..8261cfaf96 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml @@ -69,7 +69,7 @@ elements: | include_anonymous: true '#default_value': - 1 - + css: '' javascript: '' settings: @@ -92,7 +92,7 @@ settings: form_confidential_message: '' form_remote_addr: true form_convert_anonymous: false - form_prepopulate: false + form_prepopulate: true form_prepopulate_source_entity: false form_prepopulate_source_entity_required: false form_prepopulate_source_entity_type: '' @@ -199,6 +199,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml index 49c5607c0e..012aa4b872 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml @@ -93,16 +93,16 @@ elements: | </script> </body> </html> - + twig_basic: '#type': webform_codemirror '#mode': twig '#title': twig_basic '#default_value': | - + {% set value = "Hello" %} {{ value }} - + css: '' javascript: '' settings: @@ -232,6 +232,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml index cd82c82732..4fe98e578c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml @@ -58,7 +58,7 @@ elements: | '#field_suffix': ' yrs. old' '#min': 1 '#max': 125 - + css: '' javascript: '' settings: @@ -188,6 +188,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml index eb209c4337..46aa374947 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml @@ -134,7 +134,7 @@ elements: | visible: ':input[name="states_checkbox"]': checked: true - + css: '' javascript: '' settings: @@ -264,6 +264,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml index 7b1d8ad61b..68725b7969 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml @@ -51,7 +51,7 @@ elements: | Please enter a value for a and b. {% endif %} {% endspaceless %} - + webform_computed_twig_token: '#type': webform_computed_twig '#title': webform_computed_twig_token @@ -66,7 +66,7 @@ elements: | Please enter a value for a and b. {% endif %} {% endspaceless %} - + horizontal_rule: '#type': webform_horizontal_rule composite: @@ -89,9 +89,9 @@ elements: | Please enter a value for composite textfield. {% endif %} {% endspaceless %} - + '#ajax': true - + css: '' javascript: '' settings: @@ -221,6 +221,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml index 6cefb9352e..0f35dd8f47 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml @@ -281,6 +281,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml index 0341e1d987..e8084acef5 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml @@ -30,7 +30,7 @@ elements: | '#default_value': | <p>This is a <strong>text format</strong> string.</p> <p>It contains "double" and 'single' quotes with special characters like <, >, <>, and ><.</p> - + xss: '#type': textfield '#title': xss @@ -43,7 +43,7 @@ elements: | <b class="webform_computed_token_auto">complex string :</b> [webform_submission:values:complex_string]<br /> <b class="webform_computed_token_auto">text_format:</b> [webform_submission:values:text_format]<br /> <b class="webform_computed_token_auto">xss:</b> [webform_submission:values:xss]<br /> - + webform_computed_token_html: '#type': webform_computed_token '#title': webform_computed_token_html @@ -53,7 +53,7 @@ elements: | <b class="webform_computed_token_html">complex string :</b> [webform_submission:values:complex_string]<br /> <b class="webform_computed_token_html">text_format:</b> [webform_submission:values:text_format]<br /> <b class="webform_computed_token_html">xss:</b> [webform_submission:values:xss]<br /> - + webform_computed_token_text: '#type': webform_computed_token '#title': webform_computed_token_text @@ -63,7 +63,7 @@ elements: | complex string : [webform_submission:values:complex_string] text_format: [webform_submission:values:text_format] xss: [webform_submission:values:xss] - + webform_computed_token_store: '#type': webform_computed_token '#title': webform_computed_token_store @@ -71,7 +71,7 @@ elements: | '#display_on': none '#store': true '#template': 'sid: [webform_submission:sid]' - + css: '' javascript: '' settings: @@ -201,6 +201,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml index 27ce710ec3..1b765862c1 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml @@ -228,6 +228,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml index 778c630d70..02fb5c15e1 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml @@ -205,6 +205,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml index 6cdefd7b4f..aae4013b5a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml @@ -56,7 +56,7 @@ elements: | '#counter_maximum': 10 '#counter_minimum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) entered.' '#counter_maximum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) remaining.' - + counter_word: '#type': details '#title': counter_word @@ -89,7 +89,7 @@ elements: | '#counter_type': word '#counter_maximum': 10 '#counter_maximum_message': '%d character(s) remaining. This is custom text' - + css: '' javascript: '' settings: @@ -219,6 +219,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml index 24088a9791..262bd38cc7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml @@ -83,7 +83,7 @@ elements: | '#title': date_datepicker_placeholder '#datepicker': true '#placeholder': '{date}' - + css: '' javascript: '' settings: @@ -213,6 +213,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml index f66561eac0..c246807819 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml @@ -96,7 +96,7 @@ elements: | '#title': datelist '#default_value': - datelist: '2009-08-18T01:00:00-05:00' - + css: '' javascript: '' settings: @@ -226,6 +226,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml index cb380283fe..41a11160ac 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml @@ -124,7 +124,7 @@ elements: | '#description': | @see <a href="https://www.drupal.org/node/2917107">Issue #2917107: Date and Time validation problem</a><br/> @see <a href="https://www.drupal.org/node/2723159">Issue #2723159: Datetime form element cannot validate when using a format without seconds</a><br/> - + '#date_date_element': datepicker '#date_time_element': text '#date_time_format': 'H:i' @@ -154,7 +154,7 @@ elements: | '#autocomplete': 'off' '#default_value': - datetime: '2009-08-18T01:00:00-05:00' - + css: '' javascript: '' settings: @@ -284,6 +284,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml index 4809ca22bb..4e2401d4ca 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml @@ -271,15 +271,15 @@ elements: | '#title': 'Image select' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#description': 'This is a description for the ''webform_image_select'' element.' '#description_display': tooltip webform_likert: @@ -467,7 +467,7 @@ elements: | '#title': 'Machine name' '#description': 'This is a description for the ''machine_name'' element.' '#description_display': tooltip - + css: '' javascript: '' settings: @@ -597,6 +597,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml index 744d7a7343..242f5ac6a6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml @@ -177,6 +177,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml index a0554cb63e..2453f93ac9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml @@ -494,6 +494,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml index 2985a935cc..3b88491bc5 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml @@ -43,7 +43,7 @@ elements: | '#type': webform_email_confirm '#title': email_confirm_flexbox '#flexbox': 1 - + css: '' javascript: '' settings: @@ -173,6 +173,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml index 47a3fe89dd..6805196c22 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml @@ -28,7 +28,7 @@ elements: | '#type': webform_email_multiple '#title': email_multiple_three '#cardinality': 3 - + css: '' javascript: '' settings: @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml index c2a06e5cb3..b12b792ef2 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml @@ -86,7 +86,7 @@ elements: | auto_create: true auto_create_bundle: tags '#default_value': 1 - + css: '' javascript: '' settings: @@ -216,6 +216,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml index 7d439e9bd2..329770dda1 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml @@ -63,7 +63,7 @@ elements: | include_anonymous: true '#default_value': - 1 - + css: '' javascript: '' settings: @@ -193,6 +193,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml index 706cd96f32..78ebf7117d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml @@ -30,7 +30,7 @@ elements: | '#title': webform_excluded_columns '#default_value': webform_excluded_columns: webform_excluded_columns - + css: '' javascript: '' settings: @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml index 31b819a273..fdfe9ed67c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml @@ -38,7 +38,7 @@ elements: | '#default_value': webform_excluded_elements: webform_excluded_elements webform_excluded_elements_markup: webform_excluded_elements_markup - + css: '' javascript: '' settings: @@ -168,6 +168,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml index da19294345..2f8fadd44f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml @@ -191,6 +191,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml index cb9767a125..3c287c79d8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml @@ -461,29 +461,29 @@ elements: | '#title': 'Image select 01' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' flex_webform_image_select_right: '#type': webform_image_select '#title': 'Image select 02' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' flexbox_item: '#type': webform_flexbox flex_item_left: @@ -928,16 +928,28 @@ elements: | '#type': webform_flexbox '#align_items': flex-end toggle: - '#type': toggle + '#type': webform_toggle '#title': toggle toggle_textfield: '#type': textfield '#title': textfield '#flex': 5 toggle_rating: - '#type': rating + '#type': webform_rating '#title': rating - + flexbox_inline_title: + '#type': webform_flexbox + flexbox_inline_title_textfield_01: + '#type': textfield + '#title': 'textfield 01' + '#title_display': inline + '#size': 20 + flexbox_inline_title_textfield_02: + '#type': textfield + '#title': 'textfield 02' + '#title_display': inline + '#size': 20 + css: '' javascript: '' settings: @@ -1067,6 +1079,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml index 26c9fe3bb8..6b45f09750 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml @@ -936,6 +936,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml index 51a4f82a2e..35197db1b4 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml @@ -497,15 +497,15 @@ elements: | '#title': 'Image select (Value)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#format': value webform_image_select_raw: @@ -513,15 +513,15 @@ elements: | '#title': 'Image select (Raw value)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#format': raw webform_image_select_image: @@ -529,15 +529,15 @@ elements: | '#title': 'Image select (Image)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#format': image radios: @@ -1435,6 +1435,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml index 2ec190b320..9565092c26 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml @@ -344,6 +344,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml index 8dc9f62a2e..2837282bdc 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml @@ -540,15 +540,15 @@ elements: | '#title': 'Image select (Comma)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -560,15 +560,15 @@ elements: | '#title': 'Image select (Semicolon)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -580,15 +580,15 @@ elements: | '#title': 'Image select (And)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -600,15 +600,15 @@ elements: | '#title': 'Image select (Ordered list)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -620,15 +620,15 @@ elements: | '#title': 'Image select (Unordered list)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -640,15 +640,15 @@ elements: | '#title': 'Image select (Break)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -660,15 +660,15 @@ elements: | '#title': 'Image select (Space)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true '#default_value': - Loremipsum @@ -1697,6 +1697,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml index c30a8bb551..9c6b902356 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml @@ -27,7 +27,7 @@ elements: | - 1 - 2 - 3 - + css: '' javascript: '' settings: @@ -157,6 +157,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -235,7 +236,7 @@ handlers: <h3>ul:</h3>[webform_submission:values:checkboxes:value:ul]<hr /> <h3>ol:</h3>[webform_submission:values:checkboxes:value:ol]<hr /> <h3>raw:</h3>[webform_submission:values:checkboxes:raw]<hr /> - + excluded_elements: { } ignore_access: false exclude_empty: true @@ -275,25 +276,25 @@ handlers: body: | default: [webform_submission:values:checkboxes] - + comma: [webform_submission:values:checkboxes:value:comma] - + semicolon: [webform_submission:values:checkboxes:value:semicolon] - + and: [webform_submission:values:checkboxes:value:and] - + ul: [webform_submission:values:checkboxes:value:ul] - + ol: [webform_submission:values:checkboxes:value:ol] - + raw: [webform_submission:values:checkboxes:raw] - + excluded_elements: { } ignore_access: false exclude_empty: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml index e4439d88ab..791c65a5f8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml @@ -92,6 +92,7 @@ elements: | '#title': height_select_empty_required '#height_type': select '#required': true + css: '' javascript: '' settings: @@ -133,7 +134,6 @@ settings: form_access_denied_message: '' form_access_denied_attributes: { } form_file_limit: '' - form_elements_attributes: { } share: false share_node: false share_theme_name: '' @@ -222,6 +222,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml index 3f5227384d..0f7b541087 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml @@ -263,6 +263,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml index 8fddd867d8..ce12d3c27c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml @@ -1027,15 +1027,15 @@ elements: | '#title': 'Image select (title_before)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#help': 'This is help.' '#help_display': title_before webform_image_select_title_after: @@ -1043,15 +1043,15 @@ elements: | '#title': 'Image select (title_after)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#help': 'This is help.' '#help_display': title_after webform_image_select_element_before: @@ -1059,15 +1059,15 @@ elements: | '#title': 'Image select (element_before)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#help': 'This is help.' '#help_display': element_before webform_image_select_element_after: @@ -1075,15 +1075,15 @@ elements: | '#title': 'Image select (element_after)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#help': 'This is help.' '#help_display': element_after webform_image_select_hr: @@ -1910,7 +1910,7 @@ elements: | '#help_display': element_after machine_name_hr: '#type': webform_horizontal_rule - + css: '' javascript: '' settings: @@ -2040,6 +2040,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml index 4145cb0634..97a6439c03 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml @@ -102,7 +102,7 @@ elements: | '#attributes': class: - webform-horizontal-rule--glyph - + css: '' javascript: '' settings: @@ -232,6 +232,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml index 18d5b1766e..6bf7e92733 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml @@ -42,7 +42,7 @@ elements: | '#required': true '#default_value': 'Hello <b>World!!!</b>' '#format': false - + css: '' javascript: '' settings: @@ -172,6 +172,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml index 3eca0bcd0f..b4f575bac3 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml @@ -261,29 +261,29 @@ elements: | '#title': 'Image select | <script>alert(''This markup is not escaped properly!!!'') </script>' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' webform_image_select_multiple: '#type': webform_image_select '#title': 'Image select multiple | <script>alert(''This markup is not escaped properly!!!'') </script>' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true radios: '#type': radios @@ -525,7 +525,7 @@ elements: | table: '#type': table '#title': 'Table | <script>alert(''This markup is not escaped properly!!!'') </script>' - + css: '' javascript: '' settings: @@ -655,6 +655,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml index 8beda5c967..8c010015fd 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml @@ -261,29 +261,29 @@ elements: | '#title': '<u>Image select</u>' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' webform_image_select_multiple: '#type': webform_image_select '#title': '<u>Image select multiple</u>' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true radios: '#type': radios @@ -525,7 +525,7 @@ elements: | table: '#type': table '#title': '<u>Table</u>' - + css: '' javascript: '' settings: @@ -655,6 +655,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml index ccb1f38000..758198c60e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml @@ -200,6 +200,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml index 6c3c116fa0..dfc7a24a12 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml @@ -23,7 +23,7 @@ elements: | '#type': webform_image_file '#title': 'webform_image_file_advanced (max: 20x20)' '#max_resolution': 20x20 - + css: '' javascript: '' settings: @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml index f8bc76ca3e..fecfd04a50 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml @@ -21,7 +21,7 @@ elements: | '#title': webform_image_file_attachment '#file_extensions': gif '#attachment_image_style': thumbnail - + css: '' javascript: '' settings: @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml index 964be246d1..af40d07c99 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml @@ -26,7 +26,7 @@ elements: | '#height_title': '{height_title}' '#width_title': '{width_title}' '#default_value': 300x400 - + css: '' javascript: '' settings: @@ -156,6 +156,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml index 4dc1a62f3f..ef1c8e5b3a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml @@ -82,7 +82,7 @@ elements: | '#type': textfield '#title': module '#input_mask': '999' - + css: '' javascript: '' settings: @@ -212,6 +212,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml index 226e1b648a..ff65ca47e0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml @@ -145,6 +145,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml index d0ea3f040e..f3fbf7deaa 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml @@ -31,6 +31,7 @@ elements: | '#type': webform_likert '#title': likert_advanced '#required': true + '#required_error': '{custom error for @name}' '#na_answer': true '#na_answer_value': N/A '#na_answer_text': 'Not applicable' @@ -209,6 +210,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml index 17793be056..bf531b8cb7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml @@ -70,7 +70,7 @@ elements: | '#geolocation': true '#hidden': true '#geocomplete': true - + css: '' javascript: '' settings: @@ -200,6 +200,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml index ddc240445c..d7218d1b8b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml @@ -199,6 +199,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml index 3759bc787a..fc2942adbd 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml index cab1d36750..78d99269c4 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml @@ -65,7 +65,7 @@ elements: | '#type': managed_file '#title': managed_file_help_none '#file_help': none - + css: '' javascript: '' settings: @@ -195,6 +195,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml index 75df5694fa..d226583b4b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml @@ -165,6 +165,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml index 171d774f3d..b2de9eb45c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml @@ -32,7 +32,7 @@ elements: | '#type': managed_file '#title': 'File truncate (255)' '#file_name': 'file_truncate_123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' - + css: '' javascript: '' settings: @@ -162,6 +162,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml index 8e2cfbdb6f..9b732a99f3 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml @@ -190,6 +190,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml index ab9c1d5bbf..bc1ec43252 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml @@ -131,7 +131,7 @@ elements: | two: Two three: Three '#destination__type': webform_email_multiple - + css: '' javascript: '' settings: @@ -261,6 +261,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml index c78703f712..60851e1b41 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml index c6e01957d9..0d9e1b3428 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml @@ -202,6 +202,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml index 3929988cea..404773c86c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml @@ -222,6 +222,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml index 55cafdaeb2..e69cd5df20 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml @@ -195,6 +195,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml index 69b82f011d..2f5a3227b0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml @@ -279,7 +279,7 @@ elements: | '#attributes': class: - custom-element - + css: '' javascript: '' settings: @@ -409,6 +409,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml index db38e2cb32..8a02b6c572 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml @@ -40,7 +40,7 @@ elements: | '#type': datelist '#title': datelist_basic '#multiple': true - + css: '' javascript: '' settings: @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml index b6c2a7e96c..a6e060619b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml @@ -51,7 +51,7 @@ elements: | '#title': webform_element_multiple_custom_access '#default_value': 5 '#access': false - + css: '' javascript: '' settings: @@ -181,6 +181,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml index ab836c7d29..24abf710a8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml @@ -83,7 +83,7 @@ elements: | '#type': number '#title': number_basic '#multiple': true - + css: '' javascript: '' settings: @@ -213,6 +213,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml index a0f3a460b7..4e93cd34f3 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml @@ -76,7 +76,7 @@ elements: | '#title': webform_element_options_custom_type_multiple '#custom__type': webform_multiple '#default_value': { } - + css: '' javascript: '' settings: @@ -206,6 +206,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml index 86f9f3fae7..cccefaabd8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml @@ -63,6 +63,14 @@ elements: | - One - Two - Four + select_other_zero: + '#type': webform_select_other + '#title': 'Select other zero' + '#options': + One: One + Two: Two + Three: Three + '#default_value': 0 checkboxes_other: '#type': details '#title': 'Checkboxes other (checkboxes_other)' @@ -279,6 +287,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml index d9c20db617..12a15d5e05 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml @@ -178,6 +178,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml index 0b336aa589..910bacd09c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: true + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml index 7c3e81d587..ae2a43013b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml @@ -224,7 +224,7 @@ elements: | '#disabled': true three: '#disabled': true - + css: '' javascript: '' settings: @@ -354,6 +354,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml index ae43c5b73b..7d959dd7a1 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml @@ -71,7 +71,7 @@ elements: | '#output': right '#output__field_prefix': $ '#output__field_suffix': '.00' - + css: '' javascript: '' settings: @@ -201,6 +201,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml index 646e6a6608..b692de594a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml @@ -34,7 +34,7 @@ elements: | '#type': webform_rating '#title': rating_required '#required': true - + css: '' javascript: '' settings: @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml index f99a061f97..2ed9437c19 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml @@ -24,7 +24,7 @@ elements: | '#type': textarea '#title': textarea '#readonly': true - + css: '' javascript: '' settings: @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml index c86b13e1b9..5b95aa84aa 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml @@ -89,7 +89,7 @@ elements: | '#title': textfield_multiple_destination '#multiple': true '#required': true - + css: '' javascript: '' settings: @@ -219,6 +219,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml index 3b8196b067..c8626114fb 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml @@ -56,7 +56,7 @@ elements: | '#scale_type': flexbox '#min_text': '1 = disagree' '#max_text': 'agree = 5' - + css: '' javascript: '' settings: @@ -186,6 +186,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml index 9368aedbc3..84df8418ab 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml @@ -165,6 +165,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml index 3c6bf607da..d1730f7435 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml @@ -70,7 +70,7 @@ elements: | five: Five '#attributes': 'data-webform-select-options-disabled': 'one,two,four,five' - + select_select2_examples: '#type': details '#title': 'Select select2' @@ -373,7 +373,7 @@ elements: | three: Three four: Four five: Five - + css: '' javascript: '' settings: @@ -503,6 +503,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml index b8ef325900..3e26355410 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml @@ -42,7 +42,7 @@ elements: | '#type': webform_signature '#title': signature_readonly '#readonly': true - + css: '' javascript: '' settings: @@ -172,6 +172,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml index 4865df81c6..2357fbab8a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml @@ -124,7 +124,7 @@ elements: | custom_selector: value: pattern: '[a-z0-9]+' - + css: '' javascript: '' settings: @@ -254,6 +254,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml index 10c44d4e41..562038d116 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml @@ -47,7 +47,7 @@ elements: | - entity.webform.results_submissions node_routes: - entity.node.webform.results_submissions - + css: '' javascript: '' settings: @@ -177,6 +177,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml index 337ad0d879..a5b89b2ce0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml @@ -41,7 +41,7 @@ elements: | - entity.webform.results_submissions node_routes: - entity.node.webform.results_submissions - + css: '' javascript: '' settings: @@ -171,6 +171,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml index 71ddd4006a..ed6851a7d8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml @@ -55,7 +55,7 @@ elements: | - one - two - three - + css: '' javascript: '' settings: @@ -185,6 +185,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml index 32ba985abb..ecdf4b1234 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml @@ -193,7 +193,7 @@ elements: | table_advanced_04_textfield: '#type': textfield '#title': 'textfield (4)' - + css: '' javascript: '' settings: @@ -323,6 +323,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml index 748b1f8b97..aad573e581 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml @@ -157,7 +157,7 @@ elements: | '#default_value': five: five three: three - + css: '' javascript: '' settings: @@ -287,6 +287,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml index 49be668259..cee87d608c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml @@ -45,7 +45,7 @@ elements: | '#international': true '#international_preferred_countries': - ZW - + css: '' javascript: '' settings: @@ -175,6 +175,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml index d8fc87efc0..812729dea6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml @@ -28,6 +28,11 @@ elements: | '#type': webform_term_checkboxes '#title': webform_term_checkboxes_tree_default '#vocabulary': tags + webform_term_checkboxes_tree_depth: + '#type': webform_term_checkboxes + '#title': webform_term_checkboxes_tree_depth + '#vocabulary': tags + '#depth': 1 webform_term_checkboxes_tree_advanced: '#type': webform_term_checkboxes '#title': webform_term_checkboxes_tree_advanced @@ -47,6 +52,13 @@ elements: | '#vocabulary': tags '#breadcrumb': true '#format': breadcrumb + webform_term_checkboxes_breadcrumb_depth: + '#type': webform_term_checkboxes + '#title': webform_term_checkboxes_breadcrumb_depth + '#vocabulary': tags + '#breadcrumb': true + '#format': breadcrumb + '#depth': 1 webform_term_checkboxes_breadcrumb_advanced: '#type': webform_term_checkboxes '#title': webform_term_checkboxes_breadcrumb_advanced @@ -69,6 +81,11 @@ elements: | '#type': webform_term_select '#title': webform_term_select_tree_default '#vocabulary': tags + webform_term_select_tree_depth: + '#type': webform_term_select + '#title': webform_term_select_tree_depth + '#vocabulary': tags + '#depth': 1 webform_term_select_tree_advanced: '#type': webform_term_select '#title': webform_term_select_tree_advanced @@ -87,6 +104,13 @@ elements: | '#vocabulary': tags '#breadcrumb': true '#format': breadcrumb + webform_term_select_breadcrumb_depth: + '#type': webform_term_select + '#title': webform_term_select_breadcrumb_depth + '#vocabulary': tags + '#breadcrumb': true + '#format': breadcrumb + '#depth': 1 webform_term_select_breadcrumb_advanced: '#type': webform_term_select '#title': webform_term_select_breadcrumb_advanced @@ -97,7 +121,7 @@ elements: | '#breadcrumb_delimiter': ' » ' '#format': breadcrumb '#format_items': ul - + css: '' javascript: '' settings: @@ -227,6 +251,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml index eb2021ca73..6a421d95e3 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml index e27bd56b27..fa8714b9fc 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml @@ -161,6 +161,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml index 7e1a7f2673..dfb8ee28e6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml @@ -68,7 +68,7 @@ elements: | '#title': time_timepicker_placeholder '#timepicker': true '#placeholder': '{time}' - + css: '' javascript: '' settings: @@ -198,6 +198,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml index 41ae2b7462..9920ea536b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml @@ -743,45 +743,45 @@ elements: | '#title': 'Image select (before)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#title_display': before webform_image_select_after: '#type': webform_image_select '#title': 'Image select (after)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#title_display': after webform_image_select_none: '#type': webform_image_select '#title': 'Image select (none)' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#title_display': none webform_image_select_hr: '#type': webform_horizontal_rule @@ -1644,6 +1644,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml index 7dc5a5c1fa..a432477074 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml @@ -33,7 +33,7 @@ elements: | '#include_anonymous': false '#default_value': authenticated: authenticated - + css: '' javascript: '' settings: @@ -163,6 +163,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml index dbf46e07e9..0d17076eda 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml @@ -157,6 +157,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml index fb37aec765..7e71ed8ee2 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml @@ -79,7 +79,7 @@ elements: | '#title': webform_element_multiple_managed_file_two '#select2': true '#multiple': 2 - + css: '' javascript: '' settings: @@ -209,6 +209,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml index c586b4522d..939ca2a397 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml @@ -38,7 +38,7 @@ elements: | '#title': pattern_unicode '#pattern': \u2E8F '#description': 'Enter unicode CJK characters ''⺏''' - + css: '' javascript: '' settings: @@ -168,6 +168,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml index d194ca5f7a..c7a1b172d6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml @@ -165,6 +165,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml index 8570469fd0..58f4551314 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml @@ -186,6 +186,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml new file mode 100644 index 0000000000..51692d5910 --- /dev/null +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml @@ -0,0 +1,274 @@ +uuid: null +langcode: en +status: open +dependencies: + enforced: + module: + - webform_test +open: null +close: null +weight: 0 +uid: null +template: false +archive: false +id: test_element_vertical_tabs +title: 'Test: Element: Vertical tabs' +description: 'Test Vertical tabs support' +category: 'Test: Element' +elements: | + vertical_tabs: + '#type': vertical_tabs + vertical_tabs_details_01: + '#type': details + '#title': vertical_tabs_details_01 + '#group': vertical_tabs + vertical_tabs_textfield_01: + '#type': textfield + '#title': vertical_tabs_textfield_01 + vertical_tabs_details_02: + '#type': details + '#title': vertical_tabs_details_02 + '#group': vertical_tabs + vertical_tabs_textfield_02: + '#type': textfield + '#title': vertical_tabs_textfield_02 + vertical_tabs_details_03: + '#type': details + '#title': vertical_tabs_details_03 + '#group': vertical_tabs + vertical_tabs_textfield_03: + '#type': textfield + '#title': vertical_tabs_textfield_03 + vertical_tabs_advanced: + '#type': vertical_tabs + '#title': 'My Vertical Tabs' + '#title_display': before + '#require': TRUE + '#description': 'This is a description' + '#help': 'This is a help' + '#more': 'This is a more' + '#default_tab': edit-vertical-tabs-advanced-details-03 + '#wrapper_attributes': + style: 'border: 1px solid red; padding: 10px' + '#label_attributes': + style: 'color: green' + vertical_tabs_advanced_details_01: + '#type': details + '#title': vertical_tabs_advanced_details_01 + '#group': vertical_tabs_advanced + vertical_tabs_advanced_textfield_01: + '#type': textfield + '#title': vertical_tabs_advanced_textfield_01 + vertical_tabs_advanced_details_02: + '#type': details + '#title': vertical_tabs_advanced_details_02 + '#group': vertical_tabs_advanced + vertical_tabs_advanced_textfield_02: + '#type': textfield + '#title': vertical_tabs_advanced_textfield_02 + vertical_tabs_advanced_details_03: + '#type': details + '#title': vertical_tabs_advanced_details_03 + '#group': vertical_tabs_advanced + vertical_tabs_advanced_textfield_03: + '#type': textfield + '#title': vertical_tabs_advanced_textfield_03 + details_01: + '#type': details + '#title': details_01 + textfield_01: + '#type': textfield + '#title': textfield_01 + details_02: + '#type': details + '#title': details_02 + textfield_02: + '#type': textfield + '#title': textfield_02 + details_03: + '#type': details + '#title': details_03 + textfield_03: + '#type': textfield + '#title': textfield_03 + +css: '' +javascript: '' +settings: + ajax: false + ajax_scroll_top: form + ajax_progress_type: '' + ajax_effect: '' + ajax_speed: null + page: true + page_submit_path: '' + page_confirm_path: '' + page_theme_name: '' + form_title: source_entity_webform + form_submit_once: false + form_exception_message: '' + form_open_message: '' + form_close_message: '' + form_previous_submissions: true + form_confidential: false + form_confidential_message: '' + form_remote_addr: true + form_convert_anonymous: false + form_prepopulate: false + form_prepopulate_source_entity: false + form_prepopulate_source_entity_required: false + form_prepopulate_source_entity_type: '' + form_reset: false + form_disable_autocomplete: false + form_novalidate: false + form_disable_inline_errors: false + form_required: false + form_unsaved: false + form_disable_back: false + form_submit_back: false + form_autofocus: false + form_details_toggle: false + form_access_denied: default + form_access_denied_title: '' + form_access_denied_message: '' + form_access_denied_attributes: { } + form_file_limit: '' + share: false + share_node: false + share_theme_name: '' + share_title: true + share_page_body_attributes: { } + submission_label: '' + submission_log: false + submission_views: { } + submission_views_replace: { } + submission_user_columns: { } + submission_user_duplicate: false + submission_access_denied: default + submission_access_denied_title: '' + submission_access_denied_message: '' + submission_access_denied_attributes: { } + submission_exception_message: '' + submission_locked_message: '' + submission_excluded_elements: { } + submission_exclude_empty: false + submission_exclude_empty_checkbox: false + previous_submission_message: '' + previous_submissions_message: '' + autofill: false + autofill_message: '' + autofill_excluded_elements: { } + wizard_progress_bar: true + wizard_progress_pages: false + wizard_progress_percentage: false + wizard_progress_link: false + wizard_progress_states: false + wizard_auto_forward: true + wizard_auto_forward_hide_next_button: false + wizard_keyboard: true + wizard_start_label: '' + wizard_preview_link: false + wizard_confirmation: true + wizard_confirmation_label: '' + wizard_track: '' + wizard_prev_button_label: '' + wizard_next_button_label: '' + wizard_toggle: false + wizard_toggle_show_label: '' + wizard_toggle_hide_label: '' + preview: 0 + preview_label: '' + preview_title: '' + preview_message: '' + preview_attributes: { } + preview_excluded_elements: { } + preview_exclude_empty: true + preview_exclude_empty_checkbox: false + draft: none + draft_multiple: false + draft_auto_save: false + draft_saved_message: '' + draft_loaded_message: '' + draft_pending_single_message: '' + draft_pending_multiple_message: '' + confirmation_type: page + confirmation_title: '' + confirmation_message: '' + confirmation_url: '' + confirmation_attributes: { } + confirmation_back: true + confirmation_back_label: '' + confirmation_back_attributes: { } + confirmation_exclude_query: false + confirmation_exclude_token: false + confirmation_update: false + limit_total: null + limit_total_interval: null + limit_total_message: '' + limit_total_unique: false + limit_user: null + limit_user_interval: null + limit_user_message: '' + limit_user_unique: false + entity_limit_total: null + entity_limit_total_interval: null + entity_limit_user: null + entity_limit_user_interval: null + purge: none + purge_days: null + results_disabled: false + results_disabled_ignore: false + results_customize: false + token_view: false + token_update: false + token_delete: false + serial_disabled: false +access: + create: + roles: + - anonymous + - authenticated + users: { } + permissions: { } + view_any: + roles: { } + users: { } + permissions: { } + update_any: + roles: { } + users: { } + permissions: { } + delete_any: + roles: { } + users: { } + permissions: { } + purge_any: + roles: { } + users: { } + permissions: { } + view_own: + roles: { } + users: { } + permissions: { } + update_own: + roles: { } + users: { } + permissions: { } + delete_own: + roles: { } + users: { } + permissions: { } + administer: + roles: { } + users: { } + permissions: { } + test: + roles: { } + users: { } + permissions: { } + configuration: + roles: { } + users: { } + permissions: { } +handlers: { } +variants: { } diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml index d258c43571..5ee0cb618e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml @@ -25,7 +25,7 @@ elements: | '#display_id': default '#arguments': - '[webform:id]' - + css: '' javascript: '' settings: @@ -155,6 +155,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml index 49ddc4f5c8..672d7789e6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml @@ -247,29 +247,29 @@ elements: | '#title': 'Image select' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' webform_image_select_multiple: '#type': webform_image_select '#title': 'Image select multiple' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#multiple': true radios: '#type': radios @@ -511,7 +511,7 @@ elements: | table: '#type': table '#title': Table - + css: '' javascript: '' settings: @@ -641,6 +641,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml index 25bf5f6362..0f7658ad4f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml @@ -301,6 +301,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml index 66ed2b2ab1..96dffe9e4c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml index b17204a529..4e32b2b596 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml @@ -174,6 +174,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml index 1d5a057f1f..1215961897 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml index 5a37d705b7..f86fe0d170 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml @@ -249,6 +249,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml index 325774c86b..7f2f1cbb35 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml index 46862386af..f40564219a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml @@ -161,6 +161,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml index 0d3b9f408b..62918040be 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml index 0b68ca980a..03cce26716 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml index 1bd7f4ad5b..b2614f8699 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml index 07aa2950b3..bfc32a5a24 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml index 8fbf020dc7..fbecb87e7d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml @@ -156,6 +156,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml index 92ad1b99bf..d09a9d6c0d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml @@ -151,6 +151,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml index 4bed3fbfee..2feb56008d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml @@ -476,6 +476,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml index 402417aad2..1bea2561fa 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml index 009c159666..aa2b982ebd 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml index 5ebf576bb5..6c973da54d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml index 13930ed7eb..23a7d81aa9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml index 9cada602bc..b27f069d34 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml @@ -257,6 +257,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml index e18bad2bb5..71b46388a9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml @@ -169,6 +169,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml index 6e32134803..c82d3e47ad 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml index cdabfdfee8..6ff94ade78 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml index e34518fa55..fdbfb21255 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml index 69f5cb1365..826fb8cfbe 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml @@ -446,6 +446,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml index 91e32608ab..bd7359b665 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml @@ -746,6 +746,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml index 1aecfecfff..30d0b06073 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml @@ -1046,6 +1046,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml index 5c19359f44..b5b192fcdd 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml index bae32c2e6e..c9f9e1b758 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml index 2a41a8b057..04847e3edc 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml @@ -169,6 +169,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml index ee92ac36f9..285013fe4b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml @@ -187,6 +187,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml index 67373b1a03..e7dc2a9774 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml @@ -161,6 +161,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml index 181bbed6bc..2a94ec4b5d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml index f74bbb441c..cf35f9ccb9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml index b970ee695c..0024181e1f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml index e8144b3efc..e190b93344 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml index 98030e0634..eb453cdf6a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml index 35f28dd5f7..96e580e40c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml @@ -157,6 +157,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml index f0f6299b39..1db9c28323 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml index bf506282a4..52d89990b0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml index 31223aa43e..9fadfcecf3 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml index 19a4869ca8..decc847b4a 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml index 208b0f9da1..496a44052f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml index 6d06b793f1..bb771a9a7f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml @@ -187,6 +187,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml index fb0837d662..72083a9676 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml @@ -191,6 +191,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml index 1873a93868..efd13eb68e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml index eb1c4a0372..55ce51f0f7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml @@ -229,6 +229,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml index b6e5ee1c6f..72cc84db5f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml @@ -192,6 +192,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml index eb13895a33..c7a6b01e24 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml @@ -160,6 +160,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml index 352f48af60..519a7bf98f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml @@ -476,6 +476,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml index a8532c3a09..91daa2b0d0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml @@ -806,6 +806,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml index 3d2a6996ca..4eb920612f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml @@ -1136,6 +1136,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml index 372aa75f42..bf75217725 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml @@ -59,7 +59,7 @@ elements: | wizard_3: '#type': webform_wizard_page '#title': 'Wizard page #3' - + css: '' javascript: '' settings: @@ -189,6 +189,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml index 0a73222946..f0a336c26f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml @@ -107,7 +107,7 @@ elements: | wizard_3: '#type': webform_wizard_page '#title': 'Wizard page #3' - + css: '' javascript: '' settings: @@ -237,6 +237,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml index cac6e5b404..066d6402d2 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml @@ -48,7 +48,7 @@ elements: | '#attributes': readonly: readonly style: 'background-color: #eee' - + css: '' javascript: '' settings: @@ -178,6 +178,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -250,7 +251,7 @@ handlers: data: | notes_add: '' notes_last: '[webform_submission:values:notes_add]' - + message: 'Submission notes have been updated.' message_type: status debug: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml index 2dbcd9f934..d9b8551f0e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml @@ -41,7 +41,7 @@ elements: | '#type': textarea '#required': true '#default_value': '{message}' - + css: '' javascript: '' settings: @@ -171,6 +171,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml index ce65851fb7..d146231f11 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml @@ -56,7 +56,7 @@ elements: | '#title': Notes '#private': true '#default_value': 'These notes are private.' - + css: '' javascript: '' settings: @@ -186,6 +186,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -263,7 +264,7 @@ handlers: [webform_submission:values] <hr /> <p style="color:yellow"><em>Custom styled HTML markup</em></p> - + excluded_elements: { } ignore_access: true exclude_empty: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml index c4547158bd..17f8e856e8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml @@ -31,7 +31,7 @@ elements: | '#title': radios_other '#options': gender '#description': 'Check and enter ''Other'' to trigger an email.' - + css: '' javascript: '' settings: @@ -161,6 +161,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml index a01230c938..d01b236d51 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml @@ -23,7 +23,7 @@ elements: | authenticated: 'Authenticated (authenticated)' administrator: 'Administrator (administrator)' other: Other - + css: '' javascript: '' settings: @@ -153,6 +153,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml index 5e650fba29..991f18420e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml @@ -18,7 +18,7 @@ category: 'Test: Handler' elements: | message: '#markup': 'Click ''Save Draft'' and ''Submit'' to send emails triggered by submissions state.' - + css: '' javascript: '' settings: @@ -148,6 +148,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml index e88029bb85..bfa20d0cfc 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml @@ -41,7 +41,7 @@ elements: | '#type': textarea '#required': true '#default_value': '{message}' - + css: '' javascript: '' settings: @@ -171,6 +171,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -244,7 +245,7 @@ handlers: body: | <p>Submitted values are:</p> {{ webform_token('[webform_submission:values]', webform_submission) }} - + excluded_elements: { } ignore_access: false exclude_empty: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml index 50228e7d82..c7a37d4c31 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml @@ -61,7 +61,7 @@ elements: | '#type': textfield '#title': 'Draft loaded message' '#default_value': '{Custom draft loaded message}' - + css: '' javascript: '' settings: @@ -191,6 +191,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml index 797d77dbc0..f4dbb7534f 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml @@ -215,6 +215,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml index dc1282b35a..3bf2dade81 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml @@ -50,7 +50,7 @@ elements: | '#default_value': value: '<p><em>{default_value}</em></p>' format: basic_html - + css: '' javascript: '' settings: @@ -180,6 +180,7 @@ settings: results_customize: false token_view: false token_update: true + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml index 8b95721f68..8d9717fc52 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml @@ -290,6 +290,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml index 36215f7fbf..25eb1c2d7d 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml @@ -473,15 +473,15 @@ elements: | '#title': 'Image select' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#states': disabled: @@ -998,7 +998,7 @@ elements: | checked: true webform_variant: '#type': webform_variant - '#title': 'Variant [EXPERIMENTAL]' + '#title': 'Variant' '#states': disabled: ':input[name="trigger"]': @@ -1146,6 +1146,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml index 83b66118e9..f00adebeea 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml @@ -403,15 +403,15 @@ elements: | '#title': 'Image select' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#states': invisible: @@ -817,7 +817,7 @@ elements: | checked: true webform_variant: '#type': webform_variant - '#title': 'Variant [EXPERIMENTAL]' + '#title': 'Variant' '#states': invisible: ':input[name="trigger"]': @@ -959,6 +959,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml index 53283bbe3a..22b88bec4e 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml @@ -147,7 +147,7 @@ elements: | two: Two three: Three '#required': true - + css: '' javascript: '' settings: @@ -277,6 +277,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml index 99a0776074..d4b1be76cf 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml @@ -514,15 +514,15 @@ elements: | '#title': 'Image select' '#show_label': true '#images': - bear_1: - text: 'Bear 1' - src: 'https://www.placebear.com/80/100' - bear_2: - text: 'Bear 2' - src: 'https://www.placebear.com/100/100' - bear_3: - text: 'Bear 3' - src: 'https://www.placebear.com/120/100' + dog_1: + text: 'Dog 1' + src: 'https://www.placedog.net/80/100' + dog_2: + text: 'Dog 2' + src: 'https://www.placedog.net/100/100' + dog_3: + text: 'Dog 3' + src: 'https://www.placedog.net/120/100' '#default_value': Loremipsum '#states': visible: @@ -1039,7 +1039,7 @@ elements: | checked: true webform_variant: '#type': webform_variant - '#title': 'Variant [EXPERIMENTAL]' + '#title': 'Variant' '#states': visible: ':input[name="trigger"]': @@ -1187,6 +1187,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml index c6df0b4acf..c7bac1640c 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml @@ -176,6 +176,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml index 4e09360eb2..e1b4fed262 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml @@ -60,7 +60,7 @@ elements: | disabled: ':input[name="disabled"]': checked: true - + css: '' javascript: '' settings: @@ -190,6 +190,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml index 8f36d31d94..6848f155b1 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml @@ -103,7 +103,7 @@ elements: | '#type': textfield '#title': dependent_details_textfield '#default_value': '{dependent_details_textfield}' - + css: '' javascript: '' settings: @@ -233,6 +233,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml index d42792826b..dfd924a085 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml @@ -207,6 +207,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml index 50dcced9ad..fc116bcee2 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml @@ -204,6 +204,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml index 7063694bcd..f250d0faf6 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml @@ -280,6 +280,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml new file mode 100644 index 0000000000..f0d93afc21 --- /dev/null +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml @@ -0,0 +1,209 @@ +uuid: null +langcode: en +status: open +dependencies: + enforced: + module: + - webform_test +open: null +close: null +weight: 0 +uid: null +template: false +archive: false +id: test_states_server_file +title: 'Test: Form API #states file validation' +description: 'Test Drupal''s #states API file validation.' +category: 'Test: Form API #states' +elements: | + trigger_file: + '#type': managed_file + '#title': trigger_file + textfield_dependent_required: + '#type': textfield + '#title': textfield_dependent_required + '#states': + required: + ':input[name="files[trigger_file]"]': + filled: true + +css: '' +javascript: '' +settings: + ajax: false + ajax_scroll_top: form + ajax_progress_type: '' + ajax_effect: '' + ajax_speed: null + page: true + page_submit_path: '' + page_confirm_path: '' + page_theme_name: '' + form_title: source_entity_webform + form_submit_once: false + form_exception_message: '' + form_open_message: '' + form_close_message: '' + form_previous_submissions: true + form_confidential: false + form_confidential_message: '' + form_remote_addr: true + form_convert_anonymous: false + form_prepopulate: false + form_prepopulate_source_entity: false + form_prepopulate_source_entity_required: false + form_prepopulate_source_entity_type: '' + form_reset: false + form_disable_autocomplete: false + form_novalidate: true + form_disable_inline_errors: false + form_required: false + form_unsaved: false + form_disable_back: false + form_submit_back: false + form_autofocus: false + form_details_toggle: false + form_access_denied: default + form_access_denied_title: '' + form_access_denied_message: '' + form_access_denied_attributes: { } + form_file_limit: '' + share: false + share_node: false + share_theme_name: '' + share_title: true + share_page_body_attributes: { } + submission_label: '' + submission_log: false + submission_views: { } + submission_views_replace: { } + submission_user_columns: { } + submission_user_duplicate: false + submission_access_denied: default + submission_access_denied_title: '' + submission_access_denied_message: '' + submission_access_denied_attributes: { } + submission_exception_message: '' + submission_locked_message: '' + submission_excluded_elements: { } + submission_exclude_empty: false + submission_exclude_empty_checkbox: false + previous_submission_message: '' + previous_submissions_message: '' + autofill: false + autofill_message: '' + autofill_excluded_elements: { } + wizard_progress_bar: true + wizard_progress_pages: false + wizard_progress_percentage: false + wizard_progress_link: false + wizard_progress_states: false + wizard_auto_forward: true + wizard_auto_forward_hide_next_button: false + wizard_keyboard: true + wizard_start_label: '' + wizard_preview_link: false + wizard_confirmation: true + wizard_confirmation_label: '' + wizard_track: '' + wizard_prev_button_label: '' + wizard_next_button_label: '' + wizard_toggle: false + wizard_toggle_show_label: '' + wizard_toggle_hide_label: '' + preview: 0 + preview_label: '' + preview_title: '' + preview_message: '' + preview_attributes: { } + preview_excluded_elements: { } + preview_exclude_empty: true + preview_exclude_empty_checkbox: false + draft: none + draft_multiple: false + draft_auto_save: false + draft_saved_message: '' + draft_loaded_message: '' + draft_pending_single_message: '' + draft_pending_multiple_message: '' + confirmation_type: message + confirmation_title: '' + confirmation_message: '' + confirmation_url: '' + confirmation_attributes: { } + confirmation_back: true + confirmation_back_label: '' + confirmation_back_attributes: { } + confirmation_exclude_query: false + confirmation_exclude_token: false + confirmation_update: false + limit_total: null + limit_total_interval: null + limit_total_message: '' + limit_total_unique: false + limit_user: null + limit_user_interval: null + limit_user_message: '' + limit_user_unique: false + entity_limit_total: null + entity_limit_total_interval: null + entity_limit_user: null + entity_limit_user_interval: null + purge: none + purge_days: null + results_disabled: true + results_disabled_ignore: true + results_customize: false + token_view: false + token_update: false + token_delete: false + serial_disabled: false +access: + create: + roles: + - anonymous + - authenticated + users: { } + permissions: { } + view_any: + roles: { } + users: { } + permissions: { } + update_any: + roles: { } + users: { } + permissions: { } + delete_any: + roles: { } + users: { } + permissions: { } + purge_any: + roles: { } + users: { } + permissions: { } + view_own: + roles: { } + users: { } + permissions: { } + update_own: + roles: { } + users: { } + permissions: { } + delete_own: + roles: { } + users: { } + permissions: { } + administer: + roles: { } + users: { } + permissions: { } + test: + roles: { } + users: { } + permissions: { } + configuration: + roles: { } + users: { } + permissions: { } +handlers: { } +variants: { } diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml index 8bc736666a..4f9fc569a7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml @@ -139,7 +139,7 @@ elements: | invisible: ':input[name="trigger_checkbox"]': checked: true - + css: '' javascript: '' settings: @@ -269,6 +269,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml index f4b616ee69..8e2ec3deb0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml index f57ab35bdb..d239d74a20 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml index 55f11be8ba..af382fc9f0 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml @@ -189,6 +189,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml index 59e6ccb04e..eab1c632f5 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml @@ -183,6 +183,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml index 902732e5e4..e62efc2374 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml @@ -578,6 +578,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml index ec24e84421..bdeef0d771 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml @@ -71,7 +71,7 @@ elements: | '#type': textfield '#title': dependent_details_textfield '#default_value': '{dependent_details_textfield}' - + css: '' javascript: '' settings: @@ -201,6 +201,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml index e2352b554a..f7610b5066 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml @@ -234,7 +234,7 @@ elements: | '#default_value': '{default_value}' '#required': '{default_value}' '#description': '<b>Required:</b> page_01_trigger_checkbox:checked' - + css: '' javascript: '' settings: @@ -364,6 +364,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml index 735a1e05d8..6672bb9fe9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml @@ -47,7 +47,7 @@ elements: | '#states': required: - ':input[name="some_trigger"]': - checked: true + unchecked: false - 'or' - ':input[name="some_value"]': value: 1 @@ -61,7 +61,7 @@ elements: | '#states': required: - ':input[name="some_trigger"]': - checked: true + checked: false - - ':input[name="some_value"]': value: 1 @@ -69,7 +69,7 @@ elements: | - ':input[name="some_number"]': value: between: '1:10' - + css: '' javascript: '' settings: @@ -199,6 +199,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml index ee6b3815d3..d54592dd36 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml @@ -261,6 +261,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml index a50d911ce8..753b92f3c7 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml index 481f4142fb..dcab22fd55 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml @@ -149,6 +149,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml index eed2c4e3f1..769ccd3f87 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml @@ -179,6 +179,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml index c0a7d3f4ec..026052b91b 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml @@ -35,7 +35,7 @@ elements: | Close long: [webform:close:long] Element title: [webform:element:webform_tokens:title] Element description: [webform:element:webform_tokens:description] - + webform_submission_tokens: '#type': webform_codemirror '#mode': text @@ -68,7 +68,7 @@ elements: | URL: [webform_submission:url] URL Edit Webform: [webform_submission:url:edit-form] UUID: [webform_submission:uuid] - + webform_submission_source_entity_tokens: '#type': webform_codemirror '#mode': text @@ -97,7 +97,7 @@ elements: | Summary: [webform_submission:source-entity:summary] Title: [webform_submission:source-entity:title] URL: [webform_submission:source-entity:url] - + webform_submission_node_tokens: '#type': webform_codemirror '#mode': text @@ -126,7 +126,7 @@ elements: | Summary: [webform_submission:node:summary] Title: [webform_submission:node:title] URL: [webform_submission:node:url] - + css: '' javascript: '' settings: @@ -256,6 +256,7 @@ settings: results_customize: false token_view: false token_update: true + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml similarity index 92% rename from web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml rename to web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml index 0dc7bb753f..310928fbdf 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_view_update.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml @@ -11,15 +11,15 @@ weight: 0 uid: null template: false archive: false -id: test_token_view_update -title: 'Test: Token: View & Update' -description: 'Test viewing and updating submission using secure token.' +id: test_token_operations +title: 'Test: Token: Operations (View, Update, & Delete)' +description: 'Test viewing, updating, and deleting a submission using secure token.' category: 'Test: Token' elements: | textfield: '#type': textfield '#title': textfield - + css: '' javascript: '' settings: @@ -124,7 +124,8 @@ settings: confirmation_message: | <p>You can view your submission via <a href="[webform_submission:view-url]">[webform_submission:view-url:relative]</a></p> <p>You can update your submission via <a href="[webform_submission:update-url]">[webform_submission:update-url:relative]</a></p> - + <p>You can delete your submission via <a href="[webform_submission:delete-url]">[webform_submission:delete-url:relative]</a></p> + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -152,6 +153,7 @@ settings: results_customize: false token_view: true token_update: true + token_delete: true serial_disabled: false access: create: @@ -224,8 +226,9 @@ handlers: subject: _default body: | <a href="[webform_submission:view-url]">[webform_submission:view-url]</a><br/> - <a href="[webform_submission:update-url]">[webform_submission:update-url]</a> - + <a href="[webform_submission:update-url]">[webform_submission:update-url]</a><br/> + <a href="[webform_submission:delete-url]">[webform_submission:delete-url]</a> + excluded_elements: { } ignore_access: false exclude_empty: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml index 0d1b48a305..d36dab6009 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml @@ -399,6 +399,7 @@ settings: results_customize: false token_view: false token_update: true + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml index 4487f89db0..6a4ef4a9f2 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml @@ -20,7 +20,7 @@ elements: | '#type': webform_variant '#title': test_offcanvas_width '#variant': test_offcanvas_width - + css: '' javascript: '' settings: @@ -150,6 +150,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml index 51a4ac95c0..dedb2d50b8 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml @@ -34,7 +34,7 @@ elements: | '#wrapper_attributes': style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px; ' '#markup': '{0}' - + css: '' javascript: '' settings: @@ -164,6 +164,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -236,7 +237,7 @@ variants: elements: | letter_markup: '#markup': '[A]' - + handlers: { } debug: false b: @@ -252,7 +253,7 @@ variants: elements: | letter_markup: '#markup': '[B]' - + handlers: { } debug: false 1: @@ -268,7 +269,7 @@ variants: elements: | number_markup: '#markup': '[1]' - + handlers: { } debug: false 2: @@ -284,7 +285,7 @@ variants: elements: | number_markup: '#markup': '[2]' - + handlers: { } debug: false 3: @@ -300,6 +301,6 @@ variants: elements: | number_markup: '#markup': '[3]' - + handlers: { } debug: false diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml index bc72f12117..9edf472886 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml @@ -24,7 +24,7 @@ elements: | textfield: '#type': textfield '#title': textfield - + css: '' javascript: '' settings: @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -240,7 +241,7 @@ variants: elements: | textfield: '#placeholder': 'This is a placeholder' - + handlers: { } debug: true handlers: @@ -286,6 +287,6 @@ variants: elements: | '#method': get '#action': 'https://drupal.org' - + handlers: { } debug: true diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml index 7019ec5510..4b6c07b7b9 100644 --- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml +++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml @@ -26,7 +26,7 @@ elements: | '#attributes': style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px;' '#markup': '{X}' - + css: '' javascript: '' settings: @@ -156,6 +156,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -228,7 +229,7 @@ variants: elements: | letter_markup: '#markup': '[A]' - + handlers: { } debug: false b: @@ -244,6 +245,6 @@ variants: elements: | letter_markup: '#markup': '[B]' - + handlers: { } debug: false diff --git a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml index b4dd448714..3f7714f0db 100644 --- a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml +++ b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml index 8dc3d152d7..3c023030f4 100644 --- a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml +++ b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml index 8b92435da1..95717aa08a 100644 --- a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml +++ b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml index 9ba2fcb144..a657efe00c 100644 --- a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml +++ b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml index cb2415e387..7b33c5415d 100644 --- a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml +++ b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:block_content' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml index f8b0da0909..68d6bd3b4e 100644 --- a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml +++ b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:block' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml index 4af6f89f90..bcede73e99 100644 --- a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml +++ b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml index b740484dab..f19a0ee69b 100644 --- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml +++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml @@ -28,7 +28,7 @@ elements: | '#title': webform_test_composite_file_multiple_header '#multiple': true '#multiple__header': true - + css: '' javascript: '' settings: @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml index 487720a170..55a73d3e47 100644 --- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml +++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml @@ -28,7 +28,7 @@ elements: | '#title': webform_test_composite_multiple_header '#multiple': true '#multiple__header': true - + css: '' javascript: '' settings: @@ -158,6 +158,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml index 7ccd4176af..44512a59fa 100644 --- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml +++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml index 531189c201..81c4473120 100644 --- a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml +++ b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml index 4969235268..df25a23e20 100644 --- a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml +++ b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/views.view.webform_test_entity_reference_vs.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/views.view.webform_test_entity_reference_vs.yml similarity index 100% rename from web/modules/webform/tests/modules/webform_test_entity_reference/config/install/views.view.webform_test_entity_reference_vs.yml rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/views.view.webform_test_entity_reference_vs.yml diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml similarity index 97% rename from web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml index 58d180c3e9..5409d06ba0 100644 --- a/web/modules/webform/tests/modules/webform_test_entity_reference/config/install/webform.webform.test_element_entity_reference_vs.yml +++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml @@ -25,7 +25,7 @@ elements: | '#selection_settings': view: view_name: webform_test_entity_reference_vs - display_name: entity_reference_1 + display_name: entity_reference arguments: { } entity_select: '#type': webform_entity_select @@ -36,7 +36,7 @@ elements: | '#selection_settings': view: view_name: webform_test_entity_reference_vs - display_name: entity_reference_1 + display_name: entity_reference arguments: { } entity_radios: '#type': webform_entity_radios @@ -47,7 +47,7 @@ elements: | '#selection_settings': view: view_name: webform_test_entity_reference_vs - display_name: entity_reference_1 + display_name: entity_reference arguments: { } '#wrapper_attributes': class: @@ -61,22 +61,22 @@ elements: | '#selection_settings': view: view_name: webform_test_entity_reference_vs - display_name: entity_reference_1 + display_name: entity_reference arguments: { } '#wrapper_attributes': class: - webform-entity-reference-options - + css: | /* Autocomplete */ - + .ui-autocomplete { display: flex; flex-wrap: wrap !important; align-self: flex-start !important; max-width: 540px !important; } - + .ui-autocomplete .ui-menu-item-wrapper { display: block !important; border: 1px solid #ccc !important; @@ -85,34 +85,34 @@ css: | margin: 10px 0 0 10px !important; padding: 10px !important; } - + .ui-autocomplete .ui-menu-item-wrapper.ui-state-active { background-color: blue !important; } - + .ui-autocomplete .views-field views-field-field-image { display: block; margin: 0 0 5px 0; } - + /* Checkboex and radios */ - + .webform-entity-reference-options .fieldset-wrapper > div { display: flex; flex-wrap: wrap; align-self: flex-start; } - + .webform-entity-reference-options .form-item { position: relative; } - + .webform-entity-reference-options .form-item input { position: absolute; top: 20px; left: 20px; } - + .webform-entity-reference-options .form-item label { display: block; border: 1px solid #ccc; @@ -121,7 +121,7 @@ css: | margin: 0 10px 10px 0; padding: 10px; } - + .webform-entity-reference-options .form-item input:checked + label { display: block; border: 1px solid #ccc; @@ -130,12 +130,12 @@ css: | margin: 0 10px 10px 0; padding: 10px; } - + .webform-entity-reference-options label.option img { display: block; margin: 0 0 5px 0; } - + javascript: '' settings: ajax: false @@ -264,6 +264,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml similarity index 73% rename from web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml rename to web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml index 60fa7df24e..d38be28505 100644 --- a/web/modules/webform/tests/modules/webform_test_entity_reference/webform_test_entity_reference_views.info.yml +++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml index 7e7a2f9de4..dda53dcb99 100644 --- a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml +++ b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml index d183e11055..2b79ae47a1 100644 --- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml +++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml @@ -24,7 +24,7 @@ elements: | trigger_b: '#type': checkbox '#title': trigger_b - + css: '' javascript: '' settings: @@ -154,6 +154,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml index 8cf148ff0d..34d2ad986b 100644 --- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml +++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml @@ -22,7 +22,7 @@ elements: | '#type': textfield '#title': 'Empty element' '#description': 'Entering any value will throw an error' - + css: '' javascript: '' settings: @@ -152,6 +152,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php b/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php new file mode 100644 index 0000000000..2d6be6f872 --- /dev/null +++ b/web/modules/webform/tests/modules/webform_test_handler/src/Plugin/WebformHandler/TestPurgeHandler.php @@ -0,0 +1,40 @@ +<?php + +namespace Drupal\webform_test_handler\Plugin\WebformHandler; + +use Drupal\webform\Plugin\WebformHandlerBase; +use Drupal\webform\WebformSubmissionInterface; + +/** + * Defines a handler that interacts with the submission purge APIs. + * + * @WebformHandler( + * id = "test_purge", + * label = @Translation("Test purging"), + * category = @Translation("Testing"), + * description = @Translation("Tests webform submission handler purge APIS."), + * ) + */ +class TestPurgeHandler extends WebformHandlerBase { + + /** + * {@inheritdoc} + */ + public function prePurge(array $webform_submissions) { + \Drupal::state()->set('webform_test_purge_handler_pre', array_map(function (WebformSubmissionInterface $submission) { + return $submission->id(); + }, $webform_submissions)); + parent::prePurge($webform_submissions); + } + + /** + * {@inheritdoc} + */ + public function postPurge(array $webform_submissions) { + \Drupal::state()->set('webform_test_purge_handler_post', array_map(function (WebformSubmissionInterface $submission) { + return $submission->id(); + }, $webform_submissions)); + parent::postPurge($webform_submissions); + } + +} diff --git a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml index cc0db94dd4..e0bddfa5fe 100644 --- a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml +++ b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module index 340e41cca4..20b0c5a768 100644 --- a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module +++ b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.module @@ -5,6 +5,8 @@ * Support module for webform that provides handler plugin tests. */ +use Drupal\webform\WebformSubmissionInterface; + /** * Implements hook_theme(). */ @@ -18,3 +20,21 @@ function webform_test_handler_theme() { ], ]; } + +/** + * Implements hook_webform_submissions_pre_purge(). + */ +function webform_test_handler_webform_submissions_pre_purge(array $webform_submissions) { + \Drupal::state()->set('webform_test_purge_hook_pre', array_map(function (WebformSubmissionInterface $submission) { + return $submission->id(); + }, $webform_submissions)); +} + +/** + * Implements hook_webform_submissions_post_purge(). + */ +function webform_test_handler_webform_submissions_post_purge(array $webform_submissions) { + \Drupal::state()->set('webform_test_purge_hook_post', array_map(function (WebformSubmissionInterface $submission) { + return $submission->id(); + }, $webform_submissions)); +} diff --git a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml index 49fbc81e11..19124b8585 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml index b46d70975a..6c603eac42 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml @@ -38,7 +38,7 @@ elements: | '#title': 'Confirmation number' '#type': value '#value': '[webform:handler:remote_post:completed:confirmation_number]' - + css: '' javascript: '' settings: @@ -142,7 +142,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -253,37 +254,37 @@ handlers: confirmation_number: confirmation_number custom_data: | custom_data: true - + custom_options: | headers: custom_header: 'true' - + cast: false debug: true completed_url: 'http://webform-test-handler-remote-post/completed' completed_custom_data: | custom_completed: true - + updated_url: 'http://webform-test-handler-remote-post/updated' updated_custom_data: | custom_updated: true - + deleted_url: 'http://webform-test-handler-remote-post/deleted' deleted_custom_data: | custom_deleted: true - + draft_created_url: 'http://webform-test-handler-remote-post/draft_created' draft_created_custom_data: | custom_draft_created: true - + draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated' draft_updated_custom_data: | custom_draft_updated: true - + converted_url: 'http://webform-test-handler-remote-post/converted' converted_custom_data: | custom_converted: true - + message: '' messages: { } error_url: '' diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml index 080d450fdf..ec6cb3fce0 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml @@ -41,7 +41,7 @@ elements: | '#title': 'Confirmation number' '#type': value '#value': '[webform:handler:remote_post:completed:confirmation_number]' - + css: '' javascript: '' settings: @@ -145,7 +145,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -173,6 +173,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -256,38 +257,38 @@ handlers: confirmation_number: confirmation_number custom_data: | custom_data: true - + custom_options: | headers: 'Accept-Language': '[webform_submission:langcode]' custom_header: 'true' - + cast: false debug: true completed_url: 'http://webform-test-handler-remote-post/completed' completed_custom_data: | custom_completed: true - + updated_url: 'http://webform-test-handler-remote-post/updated' updated_custom_data: | custom_updated: true - + deleted_url: 'http://webform-test-handler-remote-post/deleted' deleted_custom_data: | custom_deleted: true - + draft_created_url: 'http://webform-test-handler-remote-post/draft_created' draft_created_custom_data: | custom_draft_created: true - + draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated' draft_updated_custom_data: | custom_draft_updated: true - + converted_url: 'http://webform-test-handler-remote-post/converted' converted_custom_data: | custom_converted: true - + message: '' messages: - code: 401 diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml index da9a433496..195b5e791d 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml @@ -39,7 +39,7 @@ elements: | number: '#type': number '#title': number - + css: '' javascript: '' settings: @@ -145,7 +145,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -173,6 +173,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -257,7 +258,7 @@ handlers: boolean_true: '(boolean) true' integer: '(integer) 100' float: '(float) 100.01' - + custom_options: '' debug: true completed_url: 'http://webform-test-handler-remote-post/completed' diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml index de3076bb27..6f6644a836 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml @@ -27,7 +27,7 @@ elements: | '#required': true '#multiple': true '#file_extensions': txt - + css: '' javascript: '' settings: @@ -131,7 +131,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -159,6 +159,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml index 5e4869c756..ff697d1afd 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml @@ -38,7 +38,7 @@ elements: | '#title': 'Confirmation number' '#type': value '#value': '[webform:handler:remote_post:completed:confirmation_number]' - + css: '' javascript: '' settings: @@ -142,7 +142,7 @@ settings: confirmation_title: '' confirmation_message: | <p>Your confirmation number is [webform_submission:values:confirmation_number].</p> - + confirmation_url: '' confirmation_attributes: { } confirmation_back: true @@ -170,6 +170,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -253,37 +254,37 @@ handlers: confirmation_number: confirmation_number custom_data: | custom_data: true - + custom_options: | headers: custom_header: 'true' - + cast: false debug: true completed_url: 'http://webform-test-handler-remote-post/completed' completed_custom_data: | custom_completed: true - + updated_url: 'http://webform-test-handler-remote-post/updated' updated_custom_data: | custom_updated: true - + deleted_url: 'http://webform-test-handler-remote-post/deleted' deleted_custom_data: | custom_deleted: true - + draft_created_url: 'http://webform-test-handler-remote-post/draft_created' draft_created_custom_data: | custom_draft_created: true - + draft_updated_url: 'http://webform-test-handler-remote-post/draft_updated' draft_updated_custom_data: | custom_draft_updated: true - + converted_url: 'http://webform-test-handler-remote-post/converted' converted_custom_data: | custom_converted: true - + message: '' messages: { } error_url: '' diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml index 43c3054a52..03e82600a6 100644 --- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml +++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml index fc0bf60a4b..da7a5c902a 100644 --- a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml +++ b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml index c8ed8bb4e0..8065973efa 100644 --- a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml +++ b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml index 94d2f213fe..7d089c15c5 100644 --- a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml +++ b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml @@ -350,6 +350,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml index c72fe1308a..fbb538104d 100644 --- a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml +++ b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml index 8d97507f19..51a75befa4 100644 --- a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml +++ b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml @@ -7,7 +7,7 @@ dependencies: - 'paragraphs:paragraphs' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml index b643d3683a..8fe01a2673 100644 --- a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml +++ b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:serialization' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml index 2afe08e80b..bfd09d165d 100644 --- a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml +++ b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml index 5307d62d21..d4d2f9eb6c 100644 --- a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml +++ b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml @@ -189,6 +189,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: diff --git a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml index d3df2fc139..ec5dbb0e86 100644 --- a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml +++ b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml @@ -7,7 +7,7 @@ dependencies: - 'drupal:node' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml index f9743c3ff5..ee52060c18 100644 --- a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml +++ b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml index 73f75dbe14..e952549b61 100644 --- a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml +++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml @@ -43,7 +43,13 @@ settings: handlers: email_confirmation: label: ' Confirmación de correo electrónico' -weight: 0 +variants: + test: + settings: + elements: | + textfield: + '#title': 'Campo de texto - Variante' +˚weight: 0 dependencies: enforced: module: diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml index f7860fd14a..c287b88ab9 100644 --- a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml +++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml @@ -16,6 +16,10 @@ title: 'Test: Translations' description: 'Test translating a webform.' category: null elements: | + variant: + '#type': webform_variant + '#title': Variant + '#variant': override textfield: '#type': textfield '#title': 'Text field' @@ -193,6 +197,7 @@ settings: results_customize: false token_view: false token_update: false + token_delete: false serial_disabled: false access: create: @@ -279,4 +284,21 @@ handlers: return_path: '' sender_mail: '' sender_name: '' -variants: { } +variants: + test: + id: override + label: Test + notes: '' + variant_id: test + element_key: variant + status: true + weight: 1 + settings: + settings: { } + elements: | + textfield: + '#title': 'Text field - Variant' + '#type': textarea + + handlers: { } + debug: false diff --git a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml index 807e14e6ec..a483496686 100644 --- a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml +++ b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:locale' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml index 9d2c99c97e..e6ac9f7c3d 100644 --- a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml +++ b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml @@ -10,7 +10,7 @@ dependencies: - 'lingotek:lingotek' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml index b140c22e2a..53d7d871a1 100644 --- a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml +++ b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml index dda382f9ec..dafa50a0b6 100644 --- a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml +++ b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml index e14ad6bd73..e967a1fbd5 100644 --- a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml +++ b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml @@ -9,7 +9,7 @@ dependencies: - 'drupal:views' - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml index 57f1ddc91c..5bf58e01b6 100644 --- a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml +++ b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml @@ -6,7 +6,7 @@ core_version_requirement: ^8.8 dependencies: - 'webform:webform' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php index 53e4ce5cb9..1875fbb641 100644 --- a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php +++ b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomFileTest.php @@ -31,12 +31,23 @@ public function testCustom() { /**************************************************************************/ - // Create submission with file. + // Upload file while adding a new row to the composite element. $edit = [ 'webform_custom_composite_file[items][0][_item_][textfield]' => '{textfield}', 'files[webform_custom_composite_file_items_0__item__managed_file]' => \Drupal::service('file_system')->realpath($first_file->uri), ]; - $sid = $this->postSubmission($webform, $edit); + $this->drupalPostForm('webform/test_composite_custom_file', $edit, 'webform_custom_composite_file_table_add'); + + // Check that file was uploaded. + $this->assertRaw(basename($first_file->uri)); + + // Add another empty row and check that file is still uploaded and attached. + $this->drupalPostForm(NULL, [], 'webform_custom_composite_file_table_add'); + $this->assertRaw(basename($first_file->uri)); + + // Submit the file and the text field. + $this->drupalPostForm(NULL, [], 'Submit'); + $sid = $this->getLastSubmissionId($webform); $webform_submission = WebformSubmission::load($sid); @@ -63,6 +74,18 @@ public function testCustom() { // Check that test file exists. $this->assertFileExists($file->getFileUri()); + + // Login as root user. + $this->drupalLogin($this->rootUser); + + // Check that the file exists on the submission edit form. + $this->drupalGet("/admin/structure/webform/manage/test_composite_custom_file/submission/$sid/edit"); + $this->assertLink($file->getFileName()); + + // Check that test file still exists as more items are be added to the + // composite element. + $this->drupalPostForm(NULL, [], 'webform_custom_composite_file_table_add'); + $this->assertLink($file->getFileName()); } } diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php index 224139262f..7e6117c069 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatCustomTest.php @@ -88,7 +88,13 @@ public function testFormatCustom() { $this->assertRaw("item['value']: $file_url<br/>"); $this->assertRaw("item['raw']: $file_url<br/>"); $this->assertRaw("item['link']:"); - $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png; length=' . $file_size . '">' . $file_name . '</a></span>'); + // @todo Remove once Drupal 9.1.x is only supported. + if (floatval(\Drupal::VERSION) >= 9.1) { + $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png">' . $file_name . '</a></span>'); + } + else { + $this->assertRaw('<span class="file file--mime-image-png file--image"><a href="' . $file_url . '" type="image/png; length=' . $file_size . '">' . $file_name . '</a></span>'); + } $this->assertRaw('item[\'id\']: 1<br/>'); $this->assertRaw("item['url']: $file_url<br/>"); $this->assertRaw('<img class="webform-image-file" alt="' . $file_name . '" title="' . $file_name . '" src="' . $file_url . '" />'); diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php index a0e3c079a8..f5f0d8c69b 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php @@ -134,7 +134,12 @@ public function testFormat() { 'File (File extension)' => 'txt', 'File (URL)' => $this->getSubmissionFileUrl($submission, 'managed_file_url'), ]; + foreach ($elements as $label => $value) { + // @todo Remove once Drupal 9.1.x is only supported. + if (floatval(\Drupal::VERSION) >= 9.1) { + $value = str_replace('; length=43', '', $value); + } $this->assertStringContainsString('<b>' . $label . '</b><br />' . $value, $body, new FormattableMarkup('Found @label: @value', ['@label' => $label, '@value' => $value])); } diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php index 90284964df..df56c8ec45 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php @@ -49,11 +49,14 @@ public function testLikertElement() { $this->assertRaw('<label>Question 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="<div class="webform-element-help--title">Question 1</div><div class="webform-element-help--content">This is help text</div>"><span aria-hidden="true">?</span></span>'); $this->assertRaw('<label for="edit-likert-help-q1--2" class="option"><span class="webform-likert-label visually-hidden">Option 2<span class="webform-likert-help hidden"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="<div class="webform-element-help--title">Option 2</div><div class="webform-element-help--content">This is help text</div>"><span aria-hidden="true">?</span></span>'); - // Check likert required. + // Check likert with custom required error. $this->drupalPostForm('/webform/test_element_likert', [], 'Submit'); - $this->assertRaw('Question 1 field is required.'); - $this->assertRaw('Question 2 field is required.'); - $this->assertRaw('Question 3 field is required.'); + $this->assertNoRaw('Question 1 field is required.'); + $this->assertNoRaw('Question 2 field is required.'); + $this->assertNoRaw('Question 3 field is required.'); + $this->assertRaw('{custom error for Question 1}'); + $this->assertRaw('{custom error for Question 2}'); + $this->assertRaw('{custom error for Question 3}'); // Check likert processing. $edit = [ diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php index 1f13448f05..7d7fc37296 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementManagedFileTest.php @@ -336,7 +336,13 @@ protected function checkFileUpload($type, $first_file, $second_file) { $this->assertRaw('<label>managed_file_multiple</label>'); $this->assertRaw('<ul>'); } - $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain; length=' . $file->getSize() . '">' . $file->getFilename() . '</a></span>'); + // @todo Remove once Drupal 9.1.x is only supported. + if (floatval(\Drupal::VERSION) >= 9.1) { + $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain">' . $file->getFilename() . '</a></span>'); + } + else { + $this->assertRaw('<span class="file file--mime-text-plain file--text"><a href="' . file_create_url($file->getFileUri()) . '" type="text/plain; length=' . $file->getSize() . '">' . $file->getFilename() . '</a></span>'); + } // Remove the uploaded file. if ($type === 'multiple') { diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php index 584a9a1bb4..a102f6e406 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php @@ -48,6 +48,11 @@ public function testBuildingOtherElements() { $this->assertRaw('<select data-drupal-selector="edit-select-other-multiple-select" multiple="multiple" name="select_other_multiple[select][]" id="edit-select-other-multiple-select" class="form-select">'); $this->assertRaw('<input data-drupal-selector="edit-select-other-multiple-other" type="text" id="edit-select-other-multiple-other" name="select_other_multiple[other]" value="Four" size="60" maxlength="255" placeholder="Enter other…" class="form-text" />'); + // Check select_other with zero (0) as the default value. + $this->assertRaw('<span class="fieldset-legend">Select other zero</span>'); + $this->assertRaw('<select data-drupal-selector="edit-select-other-zero-select" id="edit-select-other-zero-select" name="select_other_zero[select]" class="form-select">'); + $this->assertRaw('<input data-drupal-selector="edit-select-other-zero-other" type="text" id="edit-select-other-zero-other" name="select_other_zero[other]" value="0" size="60" maxlength="255" placeholder="Enter other…" class="form-text" />'); + /**************************************************************************/ // checkboxes_other /**************************************************************************/ @@ -99,6 +104,32 @@ public function testBuildingOtherElements() { public function testProcessingOtherElements() { $webform = Webform::load('test_element_other'); + /**************************************************************************/ + // Basic input processing. + /**************************************************************************/ + + $this->postSubmission($webform); + $this->assertRaw("select_other_basic: Four +select_other_advanced: Four +select_other_multiple: + - One + - Two + - Four +select_other_zero: '0' +checkboxes_other_basic: + - One + - Two + - Four +checkboxes_other_advanced: + - One + - Two + - Four +radios_other_basic: Four +radios_other_advanced: Four +wrapper_other_fieldset: '' +wrapper_other_form_element: '' +wrapper_other_container: ''"); + /**************************************************************************/ // select_other /**************************************************************************/ diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php index 74aa248f37..97db70d72e 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginDefinitionsTest.php @@ -764,6 +764,25 @@ class: Drupal\webform\Plugin\WebformElement\Value container: false root: false multiple: false +vertical_tabs: + dependencies: { } + default_key: '' + category: 'Markup elements' + description: 'Provides a vertical tabs element.' + hidden: true + multiline: false + composite: false + states_wrapper: false + deprecated: false + deprecated_message: '' + id: vertical_tabs + label: 'Vertical tabs' + class: Drupal\webform\Plugin\WebformElement\VerticalTabs + provider: webform + input: false + container: false + root: false + multiple: false view: dependencies: { } default_key: '' @@ -1075,7 +1094,7 @@ class: Drupal\webform\Plugin\WebformElement\WebformDocumentFile default_key: '' category: '' description: 'Provides a generic form element.' - hidden: false + hidden: true multiline: false composite: false states_wrapper: false @@ -1849,7 +1868,7 @@ class: Drupal\webform_toggles\Plugin\WebformElement\WebformToggles deprecated: false deprecated_message: '' id: webform_variant - label: 'Variant [EXPERIMENTAL]' + label: 'Variant' class: Drupal\webform\Plugin\WebformElement\WebformVariant provider: webform input: true @@ -1896,7 +1915,6 @@ class: Drupal\webform\Plugin\WebformElement\WebformWizardPage root: true multiple: false YAML; - return Yaml::decode($yaml); } diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php index a5b6577022..d0d78ca909 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php @@ -26,7 +26,7 @@ class WebformElementPluginPropertiesTest extends WebformElementBrowserTestBase { 'webform_attachment', 'webform_cards', // Issue #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the - // Webform module's (optional) dependencies + // Webform module's (optional) dependencies. // @see https://www.drupal.org/project/webform/issues/3110478 // 'webform_entity_print_attachment', 'webform_image_select', @@ -52,7 +52,7 @@ public function testElementDefaultProperties() { $expected_elements = $this->getExpectedElementDefaultProperties(); // Issue #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the - // Webform module's (optional) dependencies + // Webform module's (optional) dependencies. // @see https://www.drupal.org/project/webform/issues/3110478 unset($expected_elements['webform_entity_print_attachment:pdf']); @@ -1849,6 +1849,41 @@ protected function getExpectedElementDefaultProperties() { value: title: '' value: '' +vertical_tabs: + access: true + access_create_permissions: { } + access_create_roles: + - anonymous + - authenticated + access_create_users: { } + access_update_permissions: { } + access_update_roles: + - anonymous + - authenticated + access_update_users: { } + access_view_permissions: { } + access_view_roles: + - anonymous + - authenticated + access_view_users: { } + admin_notes: '' + admin_title: '' + default_tab: '' + description: '' + description_display: '' + flex: 1 + help: '' + help_display: '' + help_title: '' + label_attributes: { } + more: '' + more_title: '' + private: false + required: false + states: { } + title: 'Vertical Tabs' + title_display: invisible + wrapper_attributes: { } view: access: true access_create_permissions: { } @@ -4773,6 +4808,7 @@ protected function getExpectedElementDefaultProperties() { breadcrumb: false breadcrumb_delimiter: ' › ' default_value: '' + depth: null description: '' description_display: '' disabled: false @@ -4844,6 +4880,7 @@ protected function getExpectedElementDefaultProperties() { choices: false chosen: false default_value: '' + depth: null description: '' description_display: '' disabled: false diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php index 5c49b6a995..c7536b6f9c 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementTermReferenceTest.php @@ -54,6 +54,12 @@ public function testTermReference() { $this->assertRaw('<input data-drupal-selector="edit-webform-term-checkboxes-tree-default-2" type="checkbox" id="edit-webform-term-checkboxes-tree-default-2" name="webform_term_checkboxes_tree_default[2]" value="2" class="form-checkbox" />'); $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-default-2" class="option">Parent 1: Child 1</label>'); + // Check term checkboxes tree depth. + $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-1" class="option">Parent 1</label>'); + $this->assertNoRaw('<label for="edit-webform-term-checkboxes-tree-depth-2" class="option">Parent 1: Child 1</label>'); + $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-5" class="option">Parent 2</label>'); + $this->assertRaw('<label for="edit-webform-term-checkboxes-tree-depth-9" class="option">Parent 3</label>'); + // Check term checkboxes tree advanced. $this->assertRaw('<fieldset data-drupal-selector="edit-webform-term-checkboxes-tree-advanced" class="js-webform-term-checkboxes webform-term-checkboxes webform-term-checkboxes--wrapper fieldgroup form-composite webform-composite-visible-title js-webform-type-webform-term-checkboxes webform-type-webform-term-checkboxes js-form-item form-item js-form-wrapper form-wrapper" id="edit-webform-term-checkboxes-tree-advanced--wrapper">'); $this->assertRaw('<span class="field-prefix">..</span>'); @@ -72,25 +78,25 @@ public function testTermReference() { $this->assertRaw('<label>webform_term_checkboxes_breadcrumb_advanced</label>'); $this->assertRaw('<ul><li>Parent 1 › Parent 1: Child 1</li><li>Parent 1 › Parent 1: Child 2</li></ul>'); - // Unpublish term:2. - Term::load(2)->setUnpublished()->save(); + // Unpublish term:2. + Term::load(2)->setUnpublished()->save(); - $this->drupalGet('/webform/test_element_term_reference'); + $this->drupalGet('/webform/test_element_term_reference'); - // Check term select tree default. - $this->assertRaw('<option value="1">Parent 1</option>'); - $this->assertNoRaw('<option value="2">-Parent 1: Child 1</option>'); - $this->assertRaw('<option value="3">-Parent 1: Child 2</option>'); - $this->assertRaw('<option value="4">-Parent 1: Child 3</option>'); + // Check term select tree default. + $this->assertRaw('<option value="1">Parent 1</option>'); + $this->assertNoRaw('<option value="2">-Parent 1: Child 1</option>'); + $this->assertRaw('<option value="3">-Parent 1: Child 2</option>'); + $this->assertRaw('<option value="4">-Parent 1: Child 3</option>'); - // Check term select breadcrumb default. - $this->assertRaw('<option value="1">Parent 1</option>'); - $this->assertNoRaw('<option value="2">Parent 1 › Parent 1: Child 1</option>'); - $this->assertRaw('<option value="3">Parent 1 › Parent 1: Child 2</option>'); - $this->assertRaw('<option value="4">Parent 1 › Parent 1: Child 3</option>'); + // Check term select breadcrumb default. + $this->assertRaw('<option value="1">Parent 1</option>'); + $this->assertNoRaw('<option value="2">Parent 1 › Parent 1: Child 1</option>'); + $this->assertRaw('<option value="3">Parent 1 › Parent 1: Child 2</option>'); + $this->assertRaw('<option value="4">Parent 1 › Parent 1: Child 3</option>'); - // Publish term: 2 - Term::load(2)->setPublished()->save(); + // Publish term: 2 + Term::load(2)->setPublished()->save(); /**************************************************************************/ // Term select. diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php index b2011d4fe1..b3f7f2a342 100644 --- a/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementTextFormatTest.php @@ -54,7 +54,7 @@ public function testTextFormat() { // Check that formats and tips are removed and/or hidden. $this->drupalGet('/webform/test_element_text_format'); - $this->assertRaw('<div class="js-filter-wrapper filter-wrapper js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format" style="display: none" id="edit-text-format-format">'); + $this->assertRaw('<div class="js-filter-wrapper filter-wrapper js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format" style="display: none" data-webform-states-no-clear id="edit-text-format-format">'); $this->assertRaw('<div class="filter-help js-form-wrapper form-wrapper" data-drupal-selector="edit-text-format-format-help" style="display: none" id="edit-text-format-format-help">'); // Check description + more. diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php new file mode 100644 index 0000000000..1fc8bf39bc --- /dev/null +++ b/web/modules/webform/tests/src/Functional/Element/WebformElementVerticalTabsTest.php @@ -0,0 +1,34 @@ +<?php + +namespace Drupal\Tests\webform\Functional\Element; + +/** + * Tests for vertical tabs element. + * + * @group webform + */ +class WebformElementVerticalTabsTest extends WebformElementBrowserTestBase { + + /** + * Webforms to load. + * + * @var array + */ + protected static $testWebforms = ['test_element_vertical_tabs']; + + /** + * Test vertical tabs element. + */ + public function testVerticalTabs() { + $this->drupalGet('/webform/test_element_vertical_tabs'); + + // Check vertical_tabs element. + $this->assertRaw('<div data-drupal-selector="edit-vertical-tabs" data-vertical-tabs-panes>'); + $this->assertRaw('<input class="vertical-tabs__active-tab" data-drupal-selector="edit-vertical-tabs-active-tab" type="hidden" name="vertical_tabs__active_tab" value="" />'); + + // Check vertical_tabs advanced element. + $this->assertRaw('<div data-drupal-selector="edit-vertical-tabs-advanced" aria-describedby="edit-vertical-tabs-advanced--description" data-vertical-tabs-panes>'); + $this->assertRaw('<input class="vertical-tabs__active-tab" data-drupal-selector="edit-vertical-tabs-advanced-active-tab" type="hidden" name="vertical_tabs_advanced__active_tab" value="edit-vertical-tabs-advanced-details-03" />'); + } + +} diff --git a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php index fb2e6af8b0..d1fb2dd0c3 100644 --- a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php +++ b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAutofillTest.php @@ -23,7 +23,8 @@ class WebformSettingsAutofillTest extends WebformBrowserTestBase { * Test webform submission form autofill. */ public function testAutofill() { - $this->drupalLogin($this->rootUser); + $account = $this->drupalCreateUser(); + $this->drupalLogin($account); $webform = Webform::load('test_form_autofill'); diff --git a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php index 3ea019a4e5..96b5ac7efb 100644 --- a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php +++ b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsLimitUniqueTest.php @@ -231,11 +231,17 @@ public function testLimitUnique() { $this->assertFieldByName('name', 'Jane Doe'); $this->assertRaw("<div><b>Submission ID:</b> $sid</div>"); + // Check that the delete submission link includes ?destination. + $this->assertLinkByHref(base_path() . 'webform/test_form_limit_user_unique/submissions/' . $sid . '/delete?destination=' . base_path() . 'form/test-form-limit-user-unique'); + // Check that 'Test' form also has name set to 'Jane Doe' // and does not display a message. $this->drupalGet('/webform/test_form_limit_user_unique/test'); $this->assertFieldByName('name', 'Jane Doe'); $this->assertRaw("<div><b>Submission ID:</b> $sid</div>"); + + // Check that the delete submission link does not include the ?destination. + $this->assertLinkByHref(base_path() . 'admin/structure/webform/manage/test_form_limit_user_unique/submission/' . $sid . '/delete'); } } diff --git a/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php b/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php index 39524c1e63..916e014556 100644 --- a/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php +++ b/web/modules/webform/tests/src/Functional/States/WebformStatesManagerTest.php @@ -36,7 +36,7 @@ public function testStatesToText() { $this->assertRaw('<label>textfield_or</label>'); $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is checked.</li><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> >= <strong>1</strong>.</li></ul>'); $this->assertRaw('<label>textfield_or</label>'); - $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is checked.</li><li>When <strong>any</strong> of the following (nested) conditions are met:<ul><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> is between <strong>1</strong> and <strong>10</strong>.</li></ul></li></ul>'); + $this->assertRaw('This element is <strong>required</strong> when <strong>any</strong> of the following conditions are met:<ul><li><strong>some_trigger</strong> is not checked.</li><li>When <strong>any</strong> of the following (nested) conditions are met:<ul><li><strong>some_value</strong> = <strong>one</strong>.</li><li><strong>some_number</strong> is between <strong>1</strong> and <strong>10</strong>.</li></ul></li></ul>'); } } diff --git a/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php b/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php index b8cb4d3eda..be003c239d 100644 --- a/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php +++ b/web/modules/webform/tests/src/Functional/States/WebformStatesServerTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\webform\Functional\States; use Drupal\Component\Utility\Crypt; +use Drupal\Tests\TestFileCreationTrait; use Drupal\webform\Element\WebformOtherBase; use Drupal\webform\Entity\Webform; use Drupal\Tests\webform\Functional\WebformBrowserTestBase; @@ -14,6 +15,8 @@ */ class WebformStatesServerTest extends WebformBrowserTestBase { + use TestFileCreationTrait; + /** * Webforms to load. * @@ -23,6 +26,8 @@ class WebformStatesServerTest extends WebformBrowserTestBase { 'test_states_crosspage', 'test_states_server_custom', 'test_states_server_comp', + 'test_states_server_file', + 'test_states_server_file', 'test_states_server_likert', 'test_states_server_nested', 'test_states_server_multiple', @@ -35,7 +40,7 @@ class WebformStatesServerTest extends WebformBrowserTestBase { * * @var array */ - public static $modules = ['filter', 'webform']; + public static $modules = ['filter', 'file', 'webform']; /** * {@inheritdoc} @@ -447,6 +452,20 @@ public function testFormStatesValidatorRequired() { $this->assertRaw('webform_name_nested_last field is required.'); $this->assertRaw(' <input data-drupal-selector="edit-webform-name-nested-last" type="text" id="edit-webform-name-nested-last" name="webform_name_nested[last]" value="" size="60" maxlength="255" class="form-text error" aria-invalid="true" data-drupal-states="{"required":{".webform-submission-test-states-server-comp-add-form :input[name=\u0022webform_name_nested_trigger\u0022]":{"checked":true}}}" />'); + /**************************************************************************/ + // file_trigger. + /**************************************************************************/ + + $webform = Webform::load('test_states_server_file'); + + // Check required error. + $files = $this->getTestFiles('text');; + $edit = [ + 'files[trigger_file]' => \Drupal::service('file_system')->realpath($files[0]->uri), + ]; + $this->postSubmission($webform, $edit); + $this->assertRaw('textfield_dependent_required field is required.'); + /**************************************************************************/ // likert element. /**************************************************************************/ diff --git a/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php b/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php index 5b510d14ba..e93fd3609b 100644 --- a/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php +++ b/web/modules/webform/tests/src/Functional/Variant/WebformVariantElementTest.php @@ -47,13 +47,13 @@ public function testVariantElement() { // 'edit webform variants' permission. $this->drupalLogin($variant_user); $this->drupalGet('/admin/structure/webform/manage/contact/element/add'); - $this->assertLink('Variant [EXPERIMENTAL]'); + $this->assertLink('Variant'); // Check that the variant element is hidden to users without // 'edit webform variants' permission. $this->drupalLogin($admin_user); $this->drupalGet('/admin/structure/webform/manage/contact/element/add'); - $this->assertNoLink('Variant [EXPERIMENTAL]'); + $this->assertNoLink('Variant'); // Check that hidden variant element is still available. $this->drupalGet('/admin/structure/webform/manage/contact/element/add/webform_variant'); diff --git a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php index f4d1c09a3d..ca930b5a4a 100644 --- a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php +++ b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php @@ -122,7 +122,9 @@ public function testTranslate() { // Check default elements. $this->drupalGet('/admin/structure/webform/manage/test_translation/translate/fr/add'); - $this->assertRaw('<textarea lang="fr" data-drupal-selector="edit-translation-config-names-webformwebformtest-translation-elements" aria-describedby="edit-translation-config-names-webformwebformtest-translation-elements--description" class="js-webform-codemirror webform-codemirror yaml form-textarea" data-webform-codemirror-mode="text/x-yaml" id="edit-translation-config-names-webformwebformtest-translation-elements" name="translation[config_names][webform.webform.test_translation][elements]" rows="48" cols="60">textfield: + $this->assertRaw('<textarea lang="fr" data-drupal-selector="edit-translation-config-names-webformwebformtest-translation-elements" aria-describedby="edit-translation-config-names-webformwebformtest-translation-elements--description" class="js-webform-codemirror webform-codemirror yaml form-textarea" data-webform-codemirror-mode="text/x-yaml" id="edit-translation-config-names-webformwebformtest-translation-elements" name="translation[config_names][webform.webform.test_translation][elements]" rows="52" cols="60">variant: + '#title': Variant +textfield: '#title': 'Text field' select_options: '#title': 'Select (options)' @@ -288,4 +290,79 @@ public function testTranslate() { $this->assertRaw('<label for="edit-textfield">French</label>'); } + /** + * Tests webform translate variants. + */ + public function testTranslateVariants() { + // Check English webform. + $this->drupalGet('/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check English webform with test variant. + $this->drupalGet('/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Text field - Variant</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check Spanish webform. + $this->drupalGet('/es/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Campo de texto</label>'); + $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>'); + + // Check Spanish webform with test variant. + $this->drupalGet('/es/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Campo de texto - Variante</label>'); + $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>'); + + // Check French (not translated) webform. + $this->drupalGet('/fr/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check French (not translated) webform with test variant. + $this->drupalGet('/fr/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Text field - Variant</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Remove variant element and variants. + /** @var \Drupal\webform\WebformInterface $webform */ + $webform = Webform::load('test_translation'); + $variants = $webform->getVariants(); + foreach ($variants as $variant) { + $webform->deleteWebformVariant($variant); + } + $webform->deleteElement('variant'); + $webform->save(); + + // Check English webform. + $this->drupalGet('/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check English webform with test variant. + $this->drupalGet('/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check Spanish webform. + $this->drupalGet('/es/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Campo de texto</label>'); + $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>'); + + // Check Spanish webform with test variant. + $this->drupalGet('/es/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Campo de texto</label>'); + $this->assertRaw('<label for="edit-select-options">Seleccione (opciones)</label>'); + + // Check French (not translated) webform. + $this->drupalGet('/fr/webform/test_translation'); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + + // Check French (not translated) webform with test variant. + $this->drupalGet('/fr/webform/test_translation', ['query' => ['variant' => 'test']]); + $this->assertRaw('<label for="edit-textfield">Text field</label>'); + $this->assertRaw('<label for="edit-select-options">Select (options)</label>'); + } + } diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php new file mode 100644 index 0000000000..461f8c3938 --- /dev/null +++ b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php @@ -0,0 +1,135 @@ +<?php + +namespace Drupal\Tests\webform\Functional; + +use Drupal\webform\Entity\Webform; +use Drupal\webform\Entity\WebformSubmission; + +/** + * Tests for operations on a webform submission using a tokenized URL. + * + * @group webform + */ +class WebformSubmissionTokenOperationsTest extends WebformBrowserTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['token']; + + /** + * Webforms to load. + * + * @var array + */ + protected static $testWebforms = ['test_token_operations']; + + /** + * Test operations on a webform submission using a tokenized URL. + */ + public function testTokenOperationsTest() { + $normal_user = $this->drupalCreateUser(); + + $webform = Webform::load('test_token_operations'); + + $token_operations = ['view', 'update', 'delete']; + + // Post test submission. + $sid = $this->postSubmission($webform, ['textfield' => 'test']); + /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */ + $webform_submission = WebformSubmission::load($sid); + + /**************************************************************************/ + + // Check confirmation page's operations (view, update, & delete) token URLs. + foreach ($token_operations as $token_operation) { + $token_url = $webform_submission->getTokenUrl($token_operation); + $link_label = $token_url->setAbsolute(FALSE)->toString(); + $link_url = $token_url->setAbsolute(TRUE)->toString(); + $this->assertRaw('<a href="' . $link_url . '">' . $link_label . '</a>'); + } + + /**************************************************************************/ + /* View */ + /**************************************************************************/ + + // Check token view access allowed. + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('view')); + $this->assertResponse(200); + $this->assertRaw('Submission information'); + $this->assertRaw('<label>textfield</label>'); + + // Check token view access denied. + $webform->setSetting('token_view', FALSE)->save(); + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('view')); + $this->assertResponse(403); + $this->assertNoRaw('Submission information'); + $this->assertNoRaw('<label>textfield</label>'); + + /**************************************************************************/ + /* Update */ + /**************************************************************************/ + + // Check token update access allowed. + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('update')); + $this->assertResponse(200); + $this->assertRaw('Submission information'); + $this->assertFieldByName('textfield', $webform_submission->getElementData('textfield')); + + // Check token update does not load the submission. + $webform->setSetting('token_update', FALSE)->save(); + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('update')); + $this->assertResponse(200); + $this->assertNoRaw('Submission information'); + $this->assertNoFieldByName('textfield', $webform_submission->getElementData('textfield')); + + /**************************************************************************/ + /* Delete */ + /**************************************************************************/ + + // Check token delete access allowed. + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('delete')); + $this->assertResponse(200); + + // Check token delete access denied. + $webform->setSetting('token_delete', FALSE)->save(); + $this->drupalLogin($normal_user); + $this->drupalGet($webform_submission->getTokenUrl('delete')); + $this->assertResponse(403); + + /**************************************************************************/ + /* Anonymous */ + /**************************************************************************/ + + // Logout and switch to anonymous user. + $this->drupalLogout(); + + // Set access to authenticated only and reenabled tokenized URL. + $access = $webform->getAccessRules(); + $access['create']['roles'] = ['authenticated']; + $webform->setAccessRules($access); + $webform + ->setSetting('token_view', TRUE) + ->setSetting('token_update', TRUE) + ->setSetting('token_delete', TRUE) + ->save(); + + // Check that access is denied for anonymous user. + $this->drupalGet('/webform/test_token_operations'); + $this->assertResponse(403); + + // Check token operations are allowed for anonymous user. + foreach ($token_operations as $token_operation) { + $this->drupalGet($webform_submission->getTokenUrl($token_operation)); + $this->assertResponse(200); + } + } + +} diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php deleted file mode 100644 index d13c388465..0000000000 --- a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenUpdateTest.php +++ /dev/null @@ -1,108 +0,0 @@ -<?php - -namespace Drupal\Tests\webform\Functional; - -use Drupal\webform\Entity\Webform; -use Drupal\webform\Entity\WebformSubmission; - -/** - * Tests for updating webform submission using tokenized URL. - * - * @group webform - */ -class WebformSubmissionTokenUpdateTest extends WebformBrowserTestBase { - - /** - * Modules to enable. - * - * @var array - */ - public static $modules = ['token']; - - /** - * Webforms to load. - * - * @var array - */ - protected static $testWebforms = ['test_token_view_update']; - - /** - * Test updating webform submission using tokenized URL. - */ - public function testTokenUpdateTest() { - $normal_user = $this->drupalCreateUser(); - - $webform = Webform::load('test_token_view_update'); - - /**************************************************************************/ - - // Post test submission. - $this->drupalLogin($this->rootUser); - $sid = $this->postSubmissionTest($webform); - $webform_submission = WebformSubmission::load($sid); - // Check confirmation page's URL token. - $token_url = $webform_submission->getTokenUrl(); - $link_label = $token_url->setAbsolute(FALSE)->toString(); - $link_url = $token_url->setAbsolute(TRUE)->toString(); - $this->assertRaw('<a href="' . $link_url . '">' . $link_label . '</a>'); - - /* View */ - - // Check token view access allowed. - $this->drupalLogin($normal_user); - $this->drupalGet($webform_submission->getTokenUrl('view')); - $this->assertResponse(200); - $this->assertRaw('Submission information'); - $this->assertRaw('<label>textfield</label>'); - - // Check token view access denied. - $webform->setSetting('token_view', FALSE)->save(); - $this->drupalLogin($normal_user); - $this->drupalGet($webform_submission->getTokenUrl('view')); - $this->assertResponse(403); - $this->assertNoRaw('Submission information'); - $this->assertNoRaw('<label>textfield</label>'); - - /* Update */ - - // Check token update access allowed. - $this->drupalLogin($normal_user); - $this->drupalGet($webform_submission->getTokenUrl()); - $this->assertResponse(200); - $this->assertRaw('Submission information'); - $this->assertFieldByName('textfield', $webform_submission->getElementData('textfield')); - - // Check token update not autoload. - $webform->setSetting('token_update', FALSE)->save(); - $this->drupalLogin($normal_user); - $this->drupalGet($webform_submission->getTokenUrl()); - $this->assertResponse(200); - $this->assertNoRaw('Submission information'); - $this->assertNoFieldByName('textfield', $webform_submission->getElementData('textfield')); - - // Logout and switch to anonymous user. - $this->drupalLogout(); - - // Set access to authenticated only and reenabled tokenized URL. - $access = $webform->getAccessRules(); - $access['create']['roles'] = ['authenticated']; - $webform->setAccessRules($access); - $webform - ->setSetting('token_view', TRUE) - ->setSetting('token_update', TRUE) - ->save(); - - // Check that access is denied for anonymous user. - $this->drupalGet('/webform/test_token_view_update'); - $this->assertResponse(403); - - // Check token view access allowed for anonymous user. - $this->drupalGet($webform_submission->getTokenUrl('view')); - $this->assertResponse(200); - - // Check token update access allowed for anonymous user. - $this->drupalGet($webform_submission->getTokenUrl()); - $this->assertResponse(200); - } - -} diff --git a/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php b/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php index ac201efe08..6883ee8ef0 100644 --- a/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php +++ b/web/modules/webform/tests/src/FunctionalJavascript/Element/WebformElementCheckboxesJavaScriptTest.php @@ -66,6 +66,15 @@ public function testCheckboxesAllNone() { $assert_session->checkboxChecked('edit-checkboxes-both-two'); $assert_session->checkboxChecked('edit-checkboxes-both-three'); $assert_session->checkboxChecked('edit-checkboxes-both-all'); + + // Check that 'all' is checked when form is prepopulated. + $options = [ + 'query' => [ + 'checkboxes_all' => ['one', 'two', 'three'], + ], + ]; + $this->drupalGet('/webform/test_element_checkboxes_all_none', $options); + $assert_session->checkboxChecked('edit-checkboxes-all-all'); } } diff --git a/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php b/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php index 7e667ab247..e7fcc81a78 100644 --- a/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php +++ b/web/modules/webform/tests/src/FunctionalJavascript/Wizard/WebformWizardBasicJavaScriptTest.php @@ -1,6 +1,6 @@ <?php -namespace Drupal\Tests\webform\FunctionalJavaScript\Wizard; +namespace Drupal\Tests\webform\FunctionalJavascript\Wizard; use Drupal\webform\Entity\Webform; use Drupal\Tests\webform\FunctionalJavascript\WebformWebDriverTestBase; @@ -75,6 +75,30 @@ public function testBasicWizard() { $page->pressButton('edit-wizard-prev'); $assert_session->waitForText('Element 1'); $this->assertQuery('custom_param=1&page=page_1'); + + /**************************************************************************/ + + // Set the webform to use ajax. + $webform->setSetting('ajax', TRUE); + $webform->save(); + + // There should be no announcements when first visiting the form. + $this->drupalGet('/webform/test_form_wizard_basic'); + $this->assertRaw('Element 1'); + $this->assertEqual('', $page->findById('drupal-live-announce')->getText()); + + // Check announcements on next and previous pages. + $page->pressButton('Next >'); + $assert_session->waitForText('"Test: Webform: Wizard basic: Page 2" loaded. (2 of 4)'); + + $page->pressButton('< Previous'); + $assert_session->waitForText('"Test: Webform: Wizard basic: Page 1" loaded. (1 of 4)'); + + $page->pressButton('Next >'); + $assert_session->waitForText('"Test: Webform: Wizard basic: Page 2" loaded. (2 of 4)'); + + $page->pressButton('Preview'); + $assert_session->waitForText('"Test: Webform: Wizard basic: Preview" loaded. (3 of 4)'); } /** diff --git a/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php b/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php new file mode 100644 index 0000000000..69c66de884 --- /dev/null +++ b/web/modules/webform/tests/src/Kernel/WebformSubmissionPurgeApiTest.php @@ -0,0 +1,75 @@ +<?php + +namespace Drupal\Tests\webform\Kernel; + +use Drupal\KernelTests\KernelTestBase; +use Drupal\webform\Entity\Webform; +use Drupal\webform\Entity\WebformSubmission; +use Drupal\webform\WebformSubmissionStorageInterface; + +/** + * Defines a class for testing webform submission purge APIs. + * + * @group webform + */ +class WebformSubmissionPurgeApiTest extends KernelTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = [ + 'system', + 'user', + 'path', + 'path_alias', + 'webform_test_handler', + 'field', + 'webform', + ]; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + $this->installEntitySchema('path_alias'); + $this->installSchema('webform', ['webform']); + $this->installConfig('webform'); + $this->installEntitySchema('webform_submission'); + $this->installEntitySchema('user'); + } + + /** + * Tests webform handler prePurge and postPurge methods and associated hooks. + */ + public function testPurgeApis() { + /** @var \Drupal\webform\WebformInterface $webform */ + $webform = Webform::create([ + 'id' => $this->randomMachineName(), + ]); + $webform->setSetting('purge', WebformSubmissionStorageInterface::PURGE_ALL); + $webform->setSetting('purge_days', 14); + $webform->addWebformHandler(\Drupal::service('plugin.manager.webform.handler')->createInstance('test_purge')); + $webform->save(); + + $submission_ids = []; + for ($i = 0; $i < 10; $i++) { + $webform_submission = WebformSubmission::create([ + 'webform_id' => $webform->id(), + ]); + $webform_submission->in_draft = FALSE; + // 15 days ago. + $webform_submission->setCreatedTime(time() - (15 * 86400)); + $webform_submission->save(); + $submission_ids[$webform_submission->id()] = $webform_submission->id(); + } + \Drupal::entityTypeManager()->getStorage('webform_submission')->purge(10); + $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_handler_pre')); + $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_handler_post')); + $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_hook_pre')); + $this->assertEquals($submission_ids, \Drupal::state()->get('webform_test_purge_hook_post')); + } + +} diff --git a/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php b/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php index 57786ec8b4..01e8395b62 100644 --- a/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php +++ b/web/modules/webform/tests/src/Unit/Plugin/Block/WebformBlockTest.php @@ -6,6 +6,7 @@ use Drupal\Core\Cache\Context\CacheContextsManager; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Session\AccountInterface; use Drupal\Tests\UnitTestCase; use Drupal\webform\Plugin\Block\WebformBlock; @@ -135,13 +136,17 @@ protected function mockWebformBlock(WebformInterface $webform) { ->disableOriginalConstructor() ->getMock(); + $route_match = $this->getMockBuilder(RouteMatchInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $configuration = ['webform_id' => $webform->id()]; $plugin_id = 'webform_block'; $plugin_definition = ['provider' => 'unit_test']; - return new WebformBlock($configuration, $plugin_id, $plugin_definition, $request_stack, $entity_type_manager, $token_manager); + return new WebformBlock($configuration, $plugin_id, $plugin_definition, $request_stack, $entity_type_manager, $token_manager, $route_match); } } diff --git a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml index 1c429a49e9..532e9dc3a0 100644 --- a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml +++ b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml @@ -5,7 +5,7 @@ name: 'Webform Bartik test' description: 'Support theme for webform Bartik integration testing.' package: 'Webform Testing' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453181 diff --git a/web/modules/webform/webform.api.php b/web/modules/webform/webform.api.php index b4e98a3a3c..a3cb0c075d 100644 --- a/web/modules/webform/webform.api.php +++ b/web/modules/webform/webform.api.php @@ -331,6 +331,26 @@ function hook_webform_options_WEBFORM_OPTIONS_ID_alter(array &$options, array &$ } +/** + * Respond before webform submissions are purged (before they are deleted). + * + * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions + * The webform submissions being purged. + */ +function hook_webform_submissions_pre_purge(array $webform_submissions) { + +} + +/** + * Respond to webform submissions being purged (after they are deleted). + * + * @param \Drupal\webform\WebformSubmissionInterface[] $webform_submissions + * The webform submissions that were purged. + */ +function hook_webform_submissions_post_purge(array $webform_submissions) { + +} + /** * Perform alterations before a webform submission form is rendered. * diff --git a/web/modules/webform/webform.info.yml b/web/modules/webform/webform.info.yml index 3e120960a7..e30e4798db 100644 --- a/web/modules/webform/webform.info.yml +++ b/web/modules/webform/webform.info.yml @@ -8,7 +8,7 @@ dependencies: - 'drupal:field' - 'drupal:user' -# Information added by Drupal.org packaging script on 2020-10-05 -version: '8.x-5.22' +# Information added by Drupal.org packaging script on 2021-02-04 +version: '8.x-5.24' project: 'webform' -datestamp: 1601919526 +datestamp: 1612453182 diff --git a/web/modules/webform/webform.libraries.yml b/web/modules/webform/webform.libraries.yml index 821bda4858..d2cfb96a0d 100644 --- a/web/modules/webform/webform.libraries.yml +++ b/web/modules/webform/webform.libraries.yml @@ -50,6 +50,7 @@ webform.admin.dialog: - webform/webform.form.tabs - webform/webform.admin.dropbutton - webform/webform.element.codemirror.yaml + - webform/webform.element.help - webform/webform.element.html_editor - webform/webform.element.other - webform/webform.element.message @@ -130,6 +131,7 @@ webform.ajax: - core/drupal.announce - core/jquery.once - core/jquery.form + - webform/webform.scroll # Announce. @@ -143,6 +145,13 @@ webform.announce: - core/drupal - core/drupal.announce +# Behaviors. + +webform.behaviors: + version: VERSION + js: + js/webform.behaviors.js: {} + # Block. webform.block: @@ -267,6 +276,16 @@ webform.promotions: component: css/webform.promotions.css: {} +# Scroll. + +webform.scroll: + version: VERSION + js: + js/webform.scroll.js: {} + dependencies: + - core/drupal + - core/jquery + # States. webform.states: @@ -274,6 +293,7 @@ webform.states: js: js/webform.states.js: {} dependencies: + - webform/webform.behaviors - core/drupal.states # Token. @@ -990,14 +1010,14 @@ libraries.choices: libraries.codemirror.text: remote: https://github.com/codemirror/codemirror - version: &webform_codemirror_version '5.57.0' + version: &webform_codemirror_version '5.53.2' license: &webform_codemirror_license name: MIT url: http://codemirror.net/LICENSE gpl-compatible: true cdn: &webform_codemirror_cdn - /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.57.0/ - /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.57.0/ + /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/ + /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/ css: component: /libraries/codemirror/lib/codemirror.css: {} diff --git a/web/modules/webform/webform.module b/web/modules/webform/webform.module index af3825ae69..b9b01aff3e 100644 --- a/web/modules/webform/webform.module +++ b/web/modules/webform/webform.module @@ -420,7 +420,12 @@ function webform_mail($key, &$message, $params) { // instead of site's email address. // @see: \Drupal\Core\Mail\MailManager::mail. if (!empty($params['from_mail'])) { - $message['from'] = $message['headers']['From'] = (!empty($params['from_name'])) ? Mail::formatDisplayName($params['from_name']) . ' <' . $params['from_mail'] . '>' : $params['from_mail']; + // 'From name' is only used when the 'From mail' contains a single + // email address. + $from = (!empty($params['from_name']) && strpos($params['from_mail'], ',') === FALSE) + ? Mail::formatDisplayName($params['from_name']) . ' <' . $params['from_mail'] . '>' + : $params['from_mail']; + $message['from'] = $message['headers']['From'] = $from; } // Set header 'Cc'. @@ -442,10 +447,12 @@ function webform_mail($key, &$message, $params) { $message['reply-to'] = $message['headers']['Reply-to'] = $reply_to; } - // Set header 'Return-Path'. + // Set header 'Return-Path' which only supports a single email address and the + // 'from_mail' may contain multiple comma delimited email addresses. $return_path = $params['return_path'] ?: $params['from_mail'] ?: ''; if ($return_path) { - $message['headers']['Sender'] = $message['headers']['Return-Path'] = $return_path; + $return_path = explode(',', $return_path); + $message['headers']['Sender'] = $message['headers']['Return-Path'] = $return_path[0]; } // Set header 'Sender'. @@ -481,7 +488,6 @@ function webform_toolbar_alter(&$items) { } } - /** * Implements hook_menu_links_discovered_alter(). */ @@ -742,10 +748,28 @@ function setSessionVariantID(variant_key, variant_id) { * @see webform_preprocess_file_link() */ function webform_file_access(FileInterface $file, $operation, AccountInterface $account) { - // Block access to temporary anonymous private file uploads. - if ($operation === 'download' && $file->isTemporary() && (int) $file->getOwnerId() === 0 && strpos($file->getFileUri(), 'private://webform/') === 0) { + $is_webform_download = ($operation === 'download' && strpos($file->getFileUri(), 'private://webform/') === 0); + + // Block access to temporary anonymous private file uploads + // only when an anonymous user is attempting to download the file. + // Links to anonymous file uploads are automatically suppressed. + // @see webform_preprocess_file_link() + // @see webform_file_download() + if ($is_webform_download + && $file->isTemporary() + && $file->getOwner() && $file->getOwner()->isAnonymous() + && \Drupal::routeMatch()->getRouteName() === 'system.files') { return AccessResult::forbidden(); } + + // Allow access to files associated with a webform submission. + // This prevent uploaded webform files from being lost when another user + // edits a submission with multiple file uploads. + // @see \Drupal\file\Element\ManagedFile::valueCallback + if ($is_webform_download && ManagedFile::accessFile($file, $account)) { + return AccessResult::allowed(); + } + return AccessResult::neutral(); } @@ -878,7 +902,7 @@ function webform_process_states(array &$elements, $key = '#attributes') { /******************************************************************************/ /** - * Implements hook_devel_generate_info_alter() + * Implements hook_devel_generate_info_alter(). */ function webform_devel_generate_info_alter(array &$generators) { if (!isset($generators['webform_submission'])) { @@ -936,11 +960,11 @@ function webform_process_options(&$element, FormStateInterface $form_state, &$co foreach (Element::children($element) as $key) { $title = (string) $element[$key]['#title']; // Check for -- delimiter. - if (strpos($title, WebformOptionsHelper::DESCRIPTION_DELIMITER) === FALSE) { + if (!WebformOptionsHelper::hasOptionDescription($title)) { continue; } - list($title, $description) = explode(WebformOptionsHelper::DESCRIPTION_DELIMITER, $title); + list($title, $description) = WebformOptionsHelper::splitOption($title); $element[$key]['#title'] = $title; $element[$key]['#webform_element'] = TRUE; $element[$key][$description_property_name] = $description; @@ -1018,19 +1042,19 @@ function webform_process_options(&$element, FormStateInterface $form_state, &$co * @param string $message * The error message. * @param string $filename - * The filename that the error was raised in. - * @param int $line - * The line number the error was raised at. + * (optional) The filename that the error was raised in. + * @param string $line + * (optional) The line number the error was raised at. * @param array $context - * An array that points to the active symbol table at the point the error - * occurred. + * (optional) An array that points to the active symbol table at the point the + * error occurred. * * @throws \ErrorException * Throw ErrorException for E_RECOVERABLE_ERROR errors. * * @see \Drupal\webform\WebformEntityElementsValidator::validateRendering() */ -function _webform_entity_element_validate_rendering_error_handler($error_level, $message, $filename, $line, array $context) { +function _webform_entity_element_validate_rendering_error_handler($error_level, $message, $filename = NULL, $line = NULL, $context = NULL) { // From: http://stackoverflow.com/questions/15461611/php-try-catch-not-catching-all-exceptions if (E_RECOVERABLE_ERROR === $error_level) { // Allow Drupal to still log the error but convert it to a warning. diff --git a/web/modules/webform/webform.services.yml b/web/modules/webform/webform.services.yml index e6bb3890be..3210cca967 100644 --- a/web/modules/webform/webform.services.yml +++ b/web/modules/webform/webform.services.yml @@ -57,7 +57,7 @@ services: webform.entity_reference_manager: class: Drupal\webform\WebformEntityReferenceManager - arguments: ['@current_route_match', '@current_user', '@user.data'] + arguments: ['@current_route_match', '@current_user', '@user.data', '@module_handler', '@entity_type.manager'] webform.help_manager: class: Drupal\webform\WebformHelpManager diff --git a/web/modules/webform/webform.tokens.inc b/web/modules/webform/webform.tokens.inc index 404adbef95..8cd23af764 100644 --- a/web/modules/webform/webform.tokens.inc +++ b/web/modules/webform/webform.tokens.inc @@ -82,6 +82,11 @@ function webform_token_info() { 'description' => t('The URL that can used to update the webform submission. The webform must be configured to allow users to update a submission using a secure token.'), 'type' => 'url', ]; + $webform_submission['delete-url'] = [ + 'name' => t('Delete (token) URL'), + 'description' => t('The URL that can used to delete the webform submission. The webform must be configured to allow users to delete a submission using a secure token.'), + 'type' => 'url', + ]; $webform_submission['langcode'] = [ 'name' => t('Langcode'), 'description' => t('The language code of the webform submission.'), @@ -103,12 +108,12 @@ function webform_token_info() { 'description' => t('Is the webform submission in draft.'), ]; $webform_submission['state'] = [ - 'name' => t('State'), - 'description' => t('The state of the webform submission. (Unsaved, Draft, Completed, Updated, Locked, or Converted)'), + 'name' => t('State (Name)'), + 'description' => t('The state of the webform submission. (unsaved, draft, completed, updated, locked, or converted)'), ]; - $webform_submission['state:raw'] = [ - 'name' => t('State (Raw value)'), - 'description' => t('The state raw value untranslated of the webform submission. (unsaved, draft, completed, updated, locked, or converted)'), + $webform_submission['state:label'] = [ + 'name' => t('State (Label)'), + 'description' => t('The state raw value untranslated of the webform submission. (Unsaved, Draft, Completed, Updated, Locked, or Converted)'), ]; $webform_submission['label'] = [ 'name' => t('Label'), @@ -538,11 +543,9 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM break; case 'view-url': - $replacements[$original] = $webform_submission->getTokenUrl('view')->toString(); - break; - case 'update-url': - $replacements[$original] = $webform_submission->getTokenUrl('update')->toString(); + case 'delete-url': + $replacements[$original] = $webform_submission->getTokenUrl(str_replace('-url', '', $name))->toString(); break; case 'token': @@ -730,21 +733,21 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM $replacements += $token_service->generate('webform', $webform_tokens, ['webform' => $webform], $options, $bubbleable_metadata); } if (($source_entity_tokens = $token_service->findWithPrefix($tokens, 'source-entity')) && ($source_entity = $webform_submission->getSourceEntity(TRUE))) { - $replacements += $token_service->generate($source_entity->getEntityTypeId(), $source_entity_tokens, [$source_entity->getEntityTypeId() => $source_entity], $options, $bubbleable_metadata); + $type = $source_entity->getEntityType()->get('token_type') ?: $source_entity->getEntityTypeId(); + $replacements += $token_service->generate($type, $source_entity_tokens, [$type => $source_entity], $options, $bubbleable_metadata); } if (($submitted_to_tokens = $token_service->findWithPrefix($tokens, 'submitted-to')) && ($submitted_to = $webform_submission->getSourceEntity(TRUE) ?: $webform_submission->getWebform())) { - $replacements += $token_service->generate($submitted_to->getEntityTypeId(), $submitted_to_tokens, [$submitted_to->getEntityTypeId() => $submitted_to], $options, $bubbleable_metadata); + $type = $submitted_to->getEntityType()->get('token_type') ?: $submitted_to->getEntityTypeId(); + $replacements += $token_service->generate($type, $submitted_to_tokens, [$type => $submitted_to], $options, $bubbleable_metadata); } - foreach (['view-url', 'update-url', 'source-url'] as $token) { + foreach (['view-url', 'update-url', 'delete-url', 'source-url'] as $token) { if ($url_tokens = $token_service->findWithPrefix($tokens, $token)) { $url = NULL; switch ($token) { case 'view-url': - $url = $webform_submission->getTokenUrl('view'); - break; - case 'update-url': - $url = $webform_submission->getTokenUrl('update'); + case 'delete-url': + $url = $webform_submission->getTokenUrl(str_replace('-url', '', $token)); break; case 'source-url': -- GitLab