From 68b0759637b94b29ce4eb5436fc8b718eb8043a4 Mon Sep 17 00:00:00 2001
From: "Myst(MysterialPy)" <mysterialpy@gmail.com>
Date: Wed, 9 Mar 2022 12:26:12 +1000
Subject: [PATCH] Add sidebar search and support for search bar middle clicking

---
 docs/_static/custom.js      | 16 ++++++++++++++++
 docs/_static/style.css      | 18 ++++++++++++++++++
 docs/_templates/layout.html | 12 ++++++++++--
 3 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/docs/_static/custom.js b/docs/_static/custom.js
index f3cfa461f..bfbbe03ef 100644
--- a/docs/_static/custom.js
+++ b/docs/_static/custom.js
@@ -95,3 +95,19 @@ document.addEventListener('keydown', (event) => {
     activeModal.close();
   }
 });
+
+function searchBarClick(event, which) {
+  event.preventDefault();
+
+  if (event.button === 1 || event.buttons === 4) {
+      which.target = "_blank";  // Middle mouse button was clicked. Set our target to a new tab.
+  }
+  else if (event.button === 2) {
+    return  // Right button was clicked... Don't do anything here.
+  }
+  else {
+    which.target = "_self";  // Revert to same window.
+  }
+
+  which.submit();
+}
diff --git a/docs/_static/style.css b/docs/_static/style.css
index eec62eb38..f65806603 100644
--- a/docs/_static/style.css
+++ b/docs/_static/style.css
@@ -61,6 +61,8 @@ Historically however, thanks to:
   --search-focus: var(--blue-1);
   --search-button: var(--grey-1);
   --search-button-hover: var(--grey-1-8);
+  --search-sidebar-background: var(--grey-1);
+  --search-sidebar-text: var(--grey-7);
   --footer-text: var(--grey-5);
   --footer-link: var(--grey-6);
   --hr-border: var(--grey-2);
@@ -167,6 +169,8 @@ Historically however, thanks to:
   --attribute-table-entry-hover-text: var(--blue-1);
   --attribute-table-badge: var(--grey-4);
   --highlighted-text: rgba(250, 166, 26, 0.2);
+  --search-sidebar-background: var(--grey-7);
+  --search-sidebar-text: var(--search-text);
 }
 
 img[src$="snake_dark.svg"]  {
@@ -523,6 +527,20 @@ input[type=search]:focus ~ button[type=submit] {
   color: var(--search-button-hover);
 }
 
+/* search sidebar */
+
+.search-sidebar > input[type=search],
+.search-sidebar > button[type=submit] {
+  background-color: var(--search-sidebar-background);
+  color: var(--search-sidebar-text);
+}
+
+.sidebar-toggle .search-sidebar > input[type=search],
+.sidebar-toggle .search-sidebar > button[type=submit] {
+  background-color: var(--mobile-nav-background);
+  color: var(--mobile-nav-text);
+}
+
 /* main content area */
 
 main {
diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html
index d9fe22315..229da72c4 100644
--- a/docs/_templates/layout.html
+++ b/docs/_templates/layout.html
@@ -90,10 +90,10 @@
         <option value="{{ pathto(p + '/index')|e }}" {% if pagename is prefixedwith p %}selected{% endif %}>{{ ext }}</option>
         {%- endfor %}
       </select>
-      <form role="search" class="search" action="{{ pathto('search') }}" method="get">
+      <form id="search-form" role="search" class="search" action="{{ pathto('search') }}" method="get">
         <div class="search-wrapper">
           <input type="search" name="q" placeholder="{{ _('Search documentation') }}" />
-          <button type="submit">
+          <button type="submit" onmousedown="searchBarClick(event, document.getElementById('search-form'));">
             <span class="material-icons">search</span>
           </button>
         </div>
@@ -111,6 +111,14 @@
         <span class="material-icons">settings</span>
       </span>
       <div id="sidebar">
+        <form id="sidebar-form" role="search" class="search" action="{{ pathto('search') }}" method="get">
+        <div class="search-wrapper search-sidebar">
+          <input type="search" name="q" placeholder="{{ _('Search documentation') }}" />
+          <button type="submit" onmousedown="searchBarClick(event, document.getElementById('sidebar-form'));">
+            <span class="material-icons">search</span>
+          </button>
+        </div>
+      </form>
         {%- include "localtoc.html" %}
       </div>
     </aside>