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

Issue #3394220 by claudiu.cristea, catch: Dialog options are not honoured when...

Issue #3394220 by claudiu.cristea, catch: Dialog options are not honoured when open a dialog using GET
parent 9d4f46c0
No related branches found
No related tags found
44 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...,!54479.5.x SF update,!5022Issue #3394406: FileUploadHandler::handleExtensionValidation does not have fallback for sites still using file_validate_extensions,!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,!3451Issue #2410579: Allows setting the current language programmatically.,!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,!31312878513-10.1.x,!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,!1591Issue #3199697: Add JSON:API Translation experimental module,!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,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.
Pipeline #31656 passed
Pipeline: drupal

#31663

    Pipeline: drupal

    #31662

      Pipeline: drupal

      #31661

        +1
        ......@@ -61,7 +61,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
        $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
        // Determine the dialog options and the target for the OpenDialogCommand.
        $options = $request->request->all('dialogOptions');
        $options = $this->getDialogOptions($request);
        $target = $this->determineTargetSelector($options, $route_match);
        $response->addCommand(new OpenDialogCommand($target, $title, $content, $options));
        ......@@ -100,4 +100,20 @@ protected function determineTargetSelector(array &$options, RouteMatchInterface
        return $target;
        }
        /**
        * Returns the dialog options from request.
        *
        * @param \Symfony\Component\HttpFoundation\Request $request
        * The HTTP request.
        *
        * @return array
        * The dialog options used for OpenDialogCommand.
        */
        protected function getDialogOptions(Request $request): array {
        if ($request->getMethod() === 'GET') {
        return $request->query->all('dialogOptions');
        }
        return $request->request->all('dialogOptions');
        }
        }
        ......@@ -29,9 +29,8 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
        // If the main content doesn't provide a title, use the title resolver.
        $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
        // Determine the title: use the title provided by the main content if any,
        // otherwise get it from the routing information.
        $options = $request->request->all('dialogOptions');
        // Determine the dialog options for the OpenDialogCommand.
        $options = $this->getDialogOptions($request);
        $response->addCommand(new OpenModalDialogCommand($title, $content, $options));
        return $response;
        ......
        ......@@ -129,3 +129,19 @@ ajax_test.throw_exception:
        _controller: '\Drupal\ajax_test\Controller\AjaxTestController::throwException'
        requirements:
        _access: 'TRUE'
        ajax_test.http_methods:
        path: '/ajax-test/http-methods'
        defaults:
        _controller: Drupal\ajax_test\Controller\AjaxTestController::httpMethods
        requirements:
        _access: 'TRUE'
        options:
        no_cache: TRUE
        ajax_test.http_methods.dialog:
        path: '/ajax-test/http-methods-dialog'
        defaults:
        _controller: Drupal\ajax_test\Controller\AjaxTestController::httpMethodsDialog
        requirements:
        _access: 'TRUE'
        ......@@ -2,6 +2,7 @@
        namespace Drupal\ajax_test\Controller;
        use Drupal\Component\Serialization\Json;
        use Drupal\Core\Ajax\AjaxResponse;
        use Drupal\Core\Ajax\AlertCommand;
        use Drupal\Core\Ajax\CloseDialogCommand;
        ......@@ -419,4 +420,41 @@ public function exceptionLink() {
        ];
        }
        /**
        * Provides an Ajax link used with different HTTP methods.
        *
        * @return array
        * The AJAX link.
        */
        public function httpMethods(): array {
        return [
        '#type' => 'link',
        '#title' => 'Link',
        '#url' => Url::fromRoute('ajax_test.http_methods.dialog'),
        '#attributes' => [
        'class' => ['use-ajax'],
        'data-dialog-type' => 'modal',
        'data-dialog-options' => Json::encode(['width' => 800]),
        // Use this state var to change the HTTP method in tests.
        // @see \Drupal\FunctionalJavascriptTests\Ajax\DialogTest::testHttpMethod()
        'data-ajax-http-method' => \Drupal::state()->get('ajax_test.http_method', 'POST'),
        ],
        '#attached' => [
        'library' => [
        'core/drupal.dialog.ajax',
        ],
        ],
        ];
        }
        /**
        * Provides a modal dialog to test links with different HTTP methods.
        *
        * @return array
        * The render array.
        */
        public function httpMethodsDialog(): array {
        return ['#markup' => 'Modal dialog contents'];
        }
        }
        ......@@ -188,4 +188,38 @@ public function testDialog() {
        $this->assertNotNull($form_title, 'The add form title is as expected.');
        }
        /**
        * Tests dialog link opener with different HTTP methods.
        */
        public function testHttpMethod(): void {
        $assert = $this->assertSession();
        $script = <<<SCRIPT
        (function() {
        return document.querySelector('div[aria-describedby="drupal-modal"]').offsetWidth;
        }())
        SCRIPT;
        // Open the modal dialog with POST HTTP method.
        $this->drupalGet('/ajax-test/http-methods');
        $this->clickLink('Link');
        $assert->assertWaitOnAjaxRequest();
        $assert->pageTextContains('Modal dialog contents');
        $width = $this->getSession()->getDriver()->evaluateScript($script);
        // The theme is adding 4px as padding and border on each side.
        $this->assertSame(808, $width);
        // Switch to GET HTTP method.
        // @see \Drupal\ajax_test\Controller\AjaxTestController::httpMethods()
        \Drupal::state()->set('ajax_test.http_method', 'GET');
        // Open the modal dialog with GET HTTP method.
        $this->drupalGet('/ajax-test/http-methods');
        $this->clickLink('Link');
        $assert->assertWaitOnAjaxRequest();
        $assert->pageTextContains('Modal dialog contents');
        $width = $this->getSession()->getDriver()->evaluateScript($script);
        // The theme is adding 4px as padding and border on each side.
        $this->assertSame(808, $width);
        }
        }
        0% Loading or .
        You are about to add 0 people to the discussion. Proceed with caution.
        Please register or to comment