[libvirt] [PATCH 2/2] docs: add advanced search capabilities

Daniel P. Berrangé berrange at redhat.com
Fri Apr 5 13:30:31 UTC 2019


Allow targetting the search scope to the website, wiki or mailing lists
only. When javascript is disabled this should gracefully fallback to
only searching the website.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 docs/libvirt.css | 40 ++++++++++++++++++++++++++++++++++++++++
 docs/main.js     | 44 ++++++++++++++++++++++++++++++++++++++++++++
 docs/mobile.css  |  7 +++++++
 docs/page.xsl    | 15 +++++++++++----
 4 files changed, 102 insertions(+), 4 deletions(-)

diff --git a/docs/libvirt.css b/docs/libvirt.css
index ed797d5d91..c53825019a 100644
--- a/docs/libvirt.css
+++ b/docs/libvirt.css
@@ -542,3 +542,43 @@ dl.mail dt a:hover {
 td.enumvalue {
     white-space: nowrap;
 }
+
+#advancedsearch {
+    display: none;
+    vertical-align: bottom;
+    position: absolute;
+    padding: 1em;
+    padding-top: 0em;
+    margin-top: 0em;
+    top: 100px;
+    right: 0px;
+    width: 13em;
+    text-align: left;
+    color: white;
+    background: rgb(0, 95, 97);
+    border-left: 3px solid rgb(60, 133, 124);
+    border-bottom: 3px solid rgb(60, 133, 124);
+}
+
+/* Use div.advancedsearch, not #advancedsearch because the
+ * 'advancedsearch' class is set dynamically when javascript
+ * loads. This ensures that the advancedsearch options are
+ * not displayed when javascript is disabled.
+*/
+#search:hover div.advancedsearch {
+    display: table;
+}
+
+
+#advancedsearch span {
+    display: block;
+}
+
+#advancedsearch input[type=radio] {
+    height: inherit;
+    display: inline;
+}
+
+#advancedsearch label {
+    display: inline;
+}
diff --git a/docs/main.js b/docs/main.js
index 723e2fb16d..2c4443de90 100644
--- a/docs/main.js
+++ b/docs/main.js
@@ -22,4 +22,48 @@ function pageload() {
             }
         }
     });
+
+    /* Setting this class makes the advanced search options visible */
+    advancedSearch = document.getElementById("advancedsearch")
+    advancedSearch.className = "advancedsearch"
+
+    simpleSearch = document.getElementById("simplesearch")
+    simplesearch.addEventListener("submit", advancedsearch)
+}
+
+function advancedsearch(e) {
+    e.preventDefault();
+    e.stopPropagation();
+
+    form = document.createElement("form");
+    form.setAttribute("method", "get");
+    form.setAttribute("action", "https://google.com/search");
+
+    newq = document.createElement("input");
+    newq.setAttribute("type", "hidden");
+    newq.setAttribute("name", "q");
+    form.appendChild(newq);
+
+    q = document.getElementById("searchq");
+    whats = document.getElementsByName("what");
+    what = "website";
+    for (var i = 0; i < whats.length; i++) {
+	if (whats[i].checked) {
+	    what = whats[i].value;
+	    break;
+	}
+    }
+
+    if (what == "website") {
+	newq.value = "site:libvirt.org " + q.value;
+    } else if (what == "wiki") {
+	newq.value = "site:wiki.libvirt.org " + q.value;
+    } else if (what == "lists") {
+	newq.value = "site:redhat.com inurl:/archives/libvir " + q.value;
+    }
+
+    document.body.appendChild(form);
+    form.submit();
+
+    return false;
 }
diff --git a/docs/mobile.css b/docs/mobile.css
index 85ca497525..366d0f1a5d 100644
--- a/docs/mobile.css
+++ b/docs/mobile.css
@@ -15,6 +15,7 @@
 	margin: 0px;
 	background: white;
 	padding: 0px;
+	height: 2em;
     }
     #search form {
 	padding: 5px;
@@ -91,4 +92,10 @@
 	float: none;
 	margin-bottom: 2em;
     }
+    #advancedsearch {
+	margin-top: 4em;
+	border: 0px;
+	background: white;
+	color: black;
+    }
 }
diff --git a/docs/page.xsl b/docs/page.xsl
index 679e3f6822..39ac095e53 100644
--- a/docs/page.xsl
+++ b/docs/page.xsl
@@ -126,11 +126,18 @@
             </ul>
           </div>
           <div id="search">
-            <form action="https://www.google.com/search" enctype="application/x-www-form-urlencoded" method="get">
-              <input name="sitesearch" type="hidden" value="libvirt.org"/>
-              <input name="q" type="text" size="12" value=""/>
-              <input type="submit" value="Go"/>
+            <form id="simplesearch" action="https://www.google.com/search" enctype="application/x-www-form-urlencoded" method="get">
+              <div>
+                <input id="searchsite" name="sitesearch" type="hidden" value="libvirt.org"/>
+                <input id="searchq" name="q" type="text" size="12" value=""/>
+                <input name="submit" type="submit" value="Go"/>
+              </div>
             </form>
+            <div id="advancedsearch">
+              <span><input type="radio" name="what" id="whatwebsite" checked="checked" value="website"/><label for="whatwebsite">Website</label></span>
+              <span><input type="radio" name="what" id="whatwiki" value="wiki"/><label for="whatwiki">Wiki</label></span>
+              <span><input type="radio" name="what" id="whatlists" value="lists"/><label for="whatlists">Mailing lists</label></span>
+            </div>
           </div>
         </div>
         <div id="footer">
-- 
2.20.1




More information about the libvir-list mailing list