Skip to content
Snippets Groups Projects
Verified Commit 81088a65 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3020061 by bnjmnm, tedbow, lauriii, zrpnr, smustgrave, yash.rode: Ajax...

Issue #3020061 by bnjmnm, tedbow, lauriii, zrpnr, smustgrave, yash.rode: Ajax replace does not refocus element if inside a dialog
parent 0d44d1f7
No related branches found
No related tags found
39 merge requests!12227Issue #3181946 by jonmcl, mglaman,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8323Fix source code editing and in place front page site studio editing.,!6278Issue #3187770 by godotislate, smustgrave, catch, quietone: Views Rendered...,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3546refactored dialog.pcss file,!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3502Issue #3335308: Confusing behavior with FormState::setFormState and FormState::setMethod,!3478Issue #3337882: Deleted menus are not removed from content type config,!3452Issue #3332701: Refactor Claro's tablesort-indicator stylesheet,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3147Issue #3328457: Replace most substr($a, $i) where $i is negative with str_ends_with(),!3146Issue #3328456: Replace substr($a, 0, $i) with str_starts_with(),!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2614Issue #2981326: Replace non-test usages of \Drupal::logger() with IoC injection,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!844Resolve #3036010 "Updaters",!673Issue #3214208: FinishResponseSubscriber could create duplicate headers,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #54378 failed
Pipeline: drupal

#54383

    Pipeline: drupal

    #54382

      Pipeline: drupal

      #54381

        +1
        ......@@ -38,8 +38,11 @@
        $dialog.trigger('dialogButtonsChange');
        }
        // Force focus on the modal when the behavior is run.
        $dialog.dialog('widget').trigger('focus');
        // If the body element has focus, it means focus was effectively lost.
        // In these instances, force focus on the dialog.
        if (document.activeElement === document.body) {
        $dialog.dialog('widget').trigger('focus');
        }
        }
        const originalClose = settings.dialog.close;
        ......
        ......@@ -45,3 +45,11 @@ ajax_forms_test.ajax_element_form:
        _form: '\Drupal\ajax_forms_test\Form\AjaxFormsTestAjaxElementsForm'
        requirements:
        _access: 'TRUE'
        ajax_forms_test.dialog_form_link:
        path: '/ajax_forms_test_dialog_form_link'
        defaults:
        _title: 'Dialog form link test'
        _controller: '\Drupal\ajax_forms_test\Controller\DialogFormLink::makeDialogFormLink'
        requirements:
        _access: 'TRUE'
        <?php
        namespace Drupal\ajax_forms_test\Controller;
        use Drupal\Core\Url;
        /**
        * Test class to create dialog form link.
        */
        class DialogFormLink {
        /**
        * Builds an associative array representing a link that opens a dialog.
        *
        * @return array
        * An associative array of link to a form to be opened.
        */
        public function makeDialogFormLink() {
        return [
        'dialog' => [
        '#type' => 'link',
        '#title' => 'Open form in dialog',
        '#url' => Url::fromRoute('ajax_forms_test.get_form'),
        '#attributes' => [
        'class' => ['use-ajax'],
        'data-dialog-type' => 'dialog',
        ],
        ],
        'off_canvas' => [
        '#type' => 'link',
        '#title' => 'Open form in off canvas dialog',
        '#url' => Url::fromRoute('ajax_forms_test.get_form'),
        '#attributes' => [
        'class' => ['use-ajax'],
        'data-dialog-type' => 'dialog',
        'data-dialog-renderer' => 'off_canvas',
        ],
        ],
        '#attached' => [
        'library' => ['core/drupal.dialog.ajax'],
        ],
        ];
        }
        }
        ......@@ -31,21 +31,36 @@ protected function setUp(): void {
        /**
        * Submits forms with select and checkbox elements via Ajax.
        *
        * @dataProvider formModeProvider
        */
        public function testSimpleAjaxFormValue() {
        public function testSimpleAjaxFormValue($form_mode) {
        $this->drupalGet('ajax_forms_test_get_form');
        $session = $this->getSession();
        $assertSession = $this->assertSession();
        // Run the test both in a dialog and not in a dialog.
        if ($form_mode === 'direct') {
        $this->drupalGet('ajax_forms_test_get_form');
        }
        else {
        $this->drupalGet('ajax_forms_test_dialog_form_link');
        $assertSession->waitForElementVisible('css', '[data-once="ajax"]');
        $this->clickLink("Open form in $form_mode");
        $this->assertNotEmpty($assertSession->waitForElementVisible('css', '.ui-dialog [data-drupal-selector="edit-select"]'));
        }
        // Verify form values of a select element.
        foreach (['green', 'blue', 'red'] as $item) {
        // Updating the field will trigger an AJAX request/response.
        $session->getPage()->selectFieldOption('select', $item);
        // The AJAX command in the response will update the DOM
        // The AJAX command in the response will update the DOM.
        $select = $assertSession->waitForElement('css', "div#ajax_selected_color:contains('$item')");
        $this->assertNotNull($select, "DataCommand has updated the page with a value of $item.");
        $condition = "(typeof jQuery !== 'undefined' && jQuery('[data-drupal-selector=\"edit-select\"]').is(':focus'))";
        $this->assertJsCondition($condition, 5000);
        }
        // Verify form values of a checkbox element.
        ......@@ -97,4 +112,15 @@ public function testSimpleInvalidCallbacksAjaxFormValue() {
        $this->drupalGet('ajax_forms_test_get_form');
        }
        /**
        * Data provider for testSimpleAjaxFormValue.
        */
        public function formModeProvider() {
        return [
        ['direct'],
        ['dialog'],
        ['off canvas dialog'],
        ];
        }
        }
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment