From 7717f3c5d2358bf44bc0d2401dfce350fc5af84f Mon Sep 17 00:00:00 2001
From: bnjmnm <benm@umich.edu>
Date: Fri, 7 Apr 2023 10:12:56 -0400
Subject: [PATCH] Issue #2991686 by smustgrave, larowlan, Grayle: Enabling
 "Edit" to show all contextual links breaks tabbing in edit forms in the
 backend

---
 .../contextual/js/contextual.toolbar.js       |  3 ++-
 .../src/FunctionalJavascript/EditModeTest.php | 21 +++++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/core/modules/contextual/js/contextual.toolbar.js b/core/modules/contextual/js/contextual.toolbar.js
index 2cbac3e139c5..0a188c05f4f0 100644
--- a/core/modules/contextual/js/contextual.toolbar.js
+++ b/core/modules/contextual/js/contextual.toolbar.js
@@ -32,8 +32,9 @@
         // rather than view mode.
         // @see Drupal.contextualToolbar.VisualView.persist
         isViewing:
+          document.querySelector('body .contextual-region') === null ||
           localStorage.getItem('Drupal.contextualToolbar.isViewing') !==
-          'false',
+            'false',
       },
       {
         contextualCollection: Drupal.contextual.collection,
diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
index 6b44315ac1c5..78068c76a40c 100644
--- a/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
+++ b/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
@@ -34,16 +34,30 @@ class EditModeTest extends WebDriverTestBase {
    */
   protected $defaultTheme = 'stark';
 
+  /**
+   * The administration theme name.
+   *
+   * @var string
+   */
+  protected $adminTheme = 'claro';
+
   /**
    * {@inheritdoc}
    */
   protected function setUp(): void {
     parent::setUp();
 
+    \Drupal::service('theme_installer')->install([$this->adminTheme]);
+    \Drupal::configFactory()
+      ->getEditable('system.theme')
+      ->set('admin', $this->adminTheme)
+      ->save();
+
     $this->drupalLogin($this->createUser([
       'administer blocks',
       'access contextual links',
       'access toolbar',
+      'view the administration theme',
     ]));
     $this->placeBlock('system_powered_by_block', ['id' => 'powered']);
   }
@@ -86,6 +100,13 @@ public function testEditModeEnableDisable() {
       // correct after toggling the edit mode at least once.
       $this->assertAnnounceEditMode();
       $this->assertSame($expected_restricted_tab_count, $this->getTabbableElementsCount());
+
+      // Test while Edit Mode is enabled it doesn't interfere with pages with
+      // no contextual links.
+      $this->drupalGet('admin/structure/block');
+      $web_assert->elementContains('css', 'h1.page-title', 'Block layout');
+      $this->assertEquals(0, count($page->findAll('css', '[data-contextual-id]')));
+      $this->assertGreaterThan(0, $this->getTabbableElementsCount());
     }
 
   }
-- 
GitLab