diff --git a/core/modules/contextual/js/contextual.es6.js b/core/modules/contextual/js/contextual.es6.js index f52059ae61c2cb6bdbfc3b32a235bac050e3a0e7..2b26ee2a8377131ff1ee6766b11ebc419c9460f9 100644 --- a/core/modules/contextual/js/contextual.es6.js +++ b/core/modules/contextual/js/contextual.es6.js @@ -99,7 +99,7 @@ // Set the destination parameter on each of the contextual links. const destination = `destination=${Drupal.encodePath( - drupalSettings.path.currentPath, + Drupal.url(drupalSettings.path.currentPath), )}`; $contextual.find('.contextual-links a').each(function() { const url = this.getAttribute('href'); diff --git a/core/modules/contextual/js/contextual.js b/core/modules/contextual/js/contextual.js index d51eba21a94445292907307279b31095932341df..6264b74c20999a0a529e3248ef6d756100ca657d 100644 --- a/core/modules/contextual/js/contextual.js +++ b/core/modules/contextual/js/contextual.js @@ -55,7 +55,7 @@ $contextual.html(html).addClass('contextual').prepend(Drupal.theme('contextualTrigger')); - var destination = 'destination=' + Drupal.encodePath(drupalSettings.path.currentPath); + var destination = 'destination=' + Drupal.encodePath(Drupal.url(drupalSettings.path.currentPath)); $contextual.find('.contextual-links a').each(function () { var url = this.getAttribute('href'); var glue = url.indexOf('?') === -1 ? '?' : '&'; diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php index 7435dada23f3810456a3bb1e8988f6f9457ac873..29d2ec7be5b88975e28f3c046b11adc078b9fa50 100644 --- a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php +++ b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php @@ -92,4 +92,19 @@ public function testContextualLinksClick() { $this->assertSession()->pageTextContains('Everything is contextual!'); } + /** + * Test the contextual links destination. + */ + public function testContextualLinksDestination() { + $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), [ + 'access contextual links', + 'administer blocks', + ]); + $this->drupalGet('user'); + $this->assertSession()->waitForElement('css', '.contextual button'); + $expected_destination_value = (string) $this->loggedInUser->toUrl()->toString(); + $contextual_link_url_parsed = parse_url($this->getSession()->getPage()->findLink('Configure block')->getAttribute('href')); + $this->assertEquals("destination=$expected_destination_value", $contextual_link_url_parsed['query']); + } + } diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php b/core/modules/settings_tray/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php index 6f623cb1bcf10dd5d7f96140931c22cb7f5cb2ea..a543baf1262e7b061244b4e321bce65e12541498 100644 --- a/core/modules/settings_tray/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php +++ b/core/modules/settings_tray/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php @@ -145,7 +145,8 @@ public function testCustomBlockLinks() { $href = array_search('Quick edit', $link_labels); $this->assertEquals('', $href); $href = array_search('Quick edit settings', $link_labels); - $this->assertTrue(strstr($href, '/admin/structure/block/manage/custom/settings-tray?destination=user/2') !== FALSE); + $destination = (string) $this->loggedInUser->toUrl()->toString(); + $this->assertTrue(strstr($href, "/admin/structure/block/manage/custom/settings-tray?destination=$destination") !== FALSE); } /** diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php b/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php index 0e6b9d6251e0372d5d481b2cad03c97c39018bf4..d505a0befcb33e1d05b4dec5c8853cd7dd9c7b57 100644 --- a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php +++ b/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php @@ -69,7 +69,8 @@ protected function doTestBlocks($theme, $block_plugin, $new_page_text, $element_ $link = $web_assert->waitForElement('css', "$block_selector .contextual-links li a"); $this->assertEquals('Quick edit', $link->getHtml(), "'Quick edit' is the first contextual link for the block."); - $this->assertContains("/admin/structure/block/manage/$block_id/settings-tray?destination=user/2", $link->getAttribute('href')); + $destination = (string) $this->loggedInUser->toUrl()->toString(); + $this->assertContains("/admin/structure/block/manage/$block_id/settings-tray?destination=$destination", $link->getAttribute('href')); if (isset($toolbar_item)) { // Check that you can open a toolbar tray and it will be closed after