[libvirt] [PATCH v2 3/3] docs: add advanced search capabilities

Daniel P. Berrangé berrange at redhat.com
Fri Apr 5 15:12:45 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/js/main.js  | 77 ++++++++++++++++++++++++++++++++++++++++++++++++
 docs/libvirt.css | 39 ++++++++++++++++++++++++
 docs/main.js     | 25 ----------------
 docs/mobile.css  |  7 +++++
 docs/page.xsl    | 16 +++++++---
 5 files changed, 135 insertions(+), 29 deletions(-)
 create mode 100644 docs/js/main.js
 delete mode 100644 docs/main.js

diff --git a/docs/js/main.js b/docs/js/main.js
new file mode 100644
index 0000000000..aea7c999fc
--- /dev/null
+++ b/docs/js/main.js
@@ -0,0 +1,77 @@
+function pageload() {
+    window.addEventListener('scroll', function(e){
+        var distanceY = window.pageYOffset || document.documentElement.scrollTop
+        var shrinkOn = 94
+        home = document.getElementById("home");
+        links = document.getElementById("jumplinks");
+        search = document.getElementById("search");
+        body = document.getElementById("body");
+        if (distanceY > shrinkOn) {
+            if (home.className != "navhide") {
+                body.className = "navhide"
+                home.className = "navhide"
+                links.className = "navhide"
+                search.className = "navhide"
+            }
+        } else {
+            if (home.className == "navhide") {
+                body.className = ""
+                home.className = ""
+                links.className = ""
+                search.className = ""
+            }
+        }
+    });
+
+    /* 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");
+
+    newq = document.createElement("input");
+    newq.setAttribute("type", "hidden");
+    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") {
+        form.setAttribute("action", "https://google.com/search");
+        newq.setAttribute("name", "q");
+        newq.value = "site:libvirt.org " + q.value;
+    } else if (what == "wiki") {
+        form.setAttribute("action", "https://wiki.libvirt.org/index.php");
+        newq.setAttribute("name", "search");
+        newq.value = q.value;
+    } else if (what == "devs") {
+        form.setAttribute("action", "https://google.com/search");
+        newq.setAttribute("name", "q");
+        newq.value = "site:redhat.com inurl:/archives/libvir-list " + q.value;
+    } else if (what == "users") {
+        form.setAttribute("action", "https://google.com/search");
+        newq.setAttribute("name", "q");
+        newq.value = "site:redhat.com inurl:/archives/libvirt-users " + q.value;
+    }
+
+    document.body.appendChild(form);
+    form.submit();
+
+    return false;
+}
diff --git a/docs/libvirt.css b/docs/libvirt.css
index ed797d5d91..0d2d5f8ace 100644
--- a/docs/libvirt.css
+++ b/docs/libvirt.css
@@ -542,3 +542,42 @@ 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
deleted file mode 100644
index 723e2fb16d..0000000000
--- a/docs/main.js
+++ /dev/null
@@ -1,25 +0,0 @@
-function pageload() {
-    window.addEventListener('scroll', function(e){
-        var distanceY = window.pageYOffset || document.documentElement.scrollTop
-        var shrinkOn = 94
-        home = document.getElementById("home");
-        links = document.getElementById("jumplinks");
-        search = document.getElementById("search");
-        body = document.getElementById("body");
-        if (distanceY > shrinkOn) {
-            if (home.className != "navhide") {
-                body.className = "navhide"
-                home.className = "navhide"
-                links.className = "navhide"
-                search.className = "navhide"
-            }
-        } else {
-            if (home.className == "navhide") {
-                body.className = ""
-                home.className = ""
-                links.className = ""
-                search.className = ""
-            }
-        }
-    });
-}
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 136f3106e4..65ddeb2bb7 100644
--- a/docs/page.xsl
+++ b/docs/page.xsl
@@ -126,11 +126,19 @@
             </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="whatdevs" value="devs"/><label for="whatdevs">Developers list</label></span>
+              <span><input type="radio" name="what" id="whatusers" value="users"/><label for="whatusers">Users list</label></span>
+            </div>
           </div>
         </div>
         <div id="footer">
-- 
2.20.1




More information about the libvir-list mailing list