Browse Source

LibWebView: Generalize the generated Inspector for another tab container

The Inspector will have a split view, where the top view is that of the
exisiting DOM and accessibility trees, and the bottom view is that of
the currently inspected node's style properties. This patch generalizes
some of the generated code to support having these 2 views.
Timothy Flynn 1 year ago
parent
commit
6fc189ea4a
1 changed files with 25 additions and 23 deletions
  1. 25 23
      Userland/Libraries/LibWebView/InspectorClient.cpp

+ 25 - 23
Userland/Libraries/LibWebView/InspectorClient.cpp

@@ -139,11 +139,14 @@ void InspectorClient::maybe_load_inspector()
 
     builder.append(R"~~~(
         body {
+            font-family: system-ui, sans-serif;
+            font-size: 10pt;
+
             margin: 0;
         }
 
         .tab-controls-container {
-            position: fixed;
+            position: absolute;
             width: 100%;
             top: 0;
 
@@ -164,7 +167,6 @@ void InspectorClient::maybe_load_inspector()
         .tab-controls button {
             font-size: 12px;
             font-weight: 600;
-            font-family: system-ui, sans-serif;
 
             float: left;
             border: none;
@@ -182,16 +184,14 @@ void InspectorClient::maybe_load_inspector()
             border-radius: 0 0.5rem 0.5rem 0;
         }
 
-        .tab-content-container {
-            margin-top: 30px;
-        }
-
         .tab-content {
+            height: 100%;
+
             display: none;
             border-radius: 0.5rem;
 
             margin-top: 30px;
-            padding: 6px 12px 6px 12px;
+            padding: 8px;
         }
 
         @media (prefers-color-scheme: dark) {
@@ -274,38 +274,36 @@ void InspectorClient::maybe_load_inspector()
 <body>
     <div class="tab-controls-container">
         <div class="tab-controls">
-            <button id="dom-tree-button" onclick="selectTab(this, 'dom-tree')">DOM Tree</button>
-            <button id="accessibility-tree-button" onclick="selectTab(this, 'accessibility-tree')">Accessibility Tree</button>
+            <button id="dom-tree-button" onclick="selectTopTab(this, 'dom-tree')">DOM Tree</button>
+            <button id="accessibility-tree-button" onclick="selectTopTab(this, 'accessibility-tree')">Accessibility Tree</button>
         </div>
     </div>
 
-    <div class="tab-content-container">
-        <div id="dom-tree" class="tab-content html">
+    <div id="dom-tree" class="tab-content html">
 )~~~"sv);
 
     generate_dom_tree(builder);
 
     builder.append(R"~~~(
-        </div>
-        <div id="accessibility-tree" class="tab-content">
+    </div>
+    <div id="accessibility-tree" class="tab-content">
 )~~~"sv);
 
     generate_accessibility_tree(builder);
 
     builder.append(R"~~~(
-        </div>
     </div>
 
     <script type="text/javascript">
-        let selectedTab = null;
-        let selectedTabButton = null;
+        let selectedTopTab = null;
+        let selectedTopTabButton = null;
         let selectedDOMNode = null;
 
-        const selectTab = (tabButton, tabID) => {
+        const selectTab = (tabButton, tabID, selectedTab, selectedTabButton) => {
             let tab = document.getElementById(tabID);
 
             if (selectedTab === tab) {
-                return;
+                return selectedTab;
             }
             if (selectedTab !== null) {
                 selectedTab.style.display = "none";
@@ -313,14 +311,18 @@ void InspectorClient::maybe_load_inspector()
             }
 
             tab.style.display = "block";
-            selectedTab = tab;
-
             tabButton.classList.add("active");
-            selectedTabButton = tabButton;
+
+            return tab;
+        };
+
+        const selectTopTab = (tabButton, tabID) => {
+            selectedTopTab = selectTab(tabButton, tabID, selectedTopTab, selectedTopTabButton);
+            selectedTopTabButton = tabButton;
         };
 
-        let initialTabButton = document.getElementById("dom-tree-button");
-        selectTab(initialTabButton, "dom-tree");
+        let initialTopTabButton = document.getElementById("dom-tree-button");
+        selectTopTab(initialTopTabButton, "dom-tree");
 
         const scrollToElement = (element) => {
             // Include an offset to prevent the element being placed behind the fixed `tab-controls` header.