]> git.lizzy.rs Git - rust.git/commitdiff
Some JS improvements
authorGuillaume Gomez <guillaume1.gomez@gmail.com>
Tue, 24 Apr 2018 18:23:57 +0000 (20:23 +0200)
committerGuillaume Gomez <guillaume1.gomez@gmail.com>
Wed, 25 Apr 2018 07:01:32 +0000 (09:01 +0200)
src/librustdoc/html/static/main.js

index ef8bf2244d97763186352b7593fb50a3da93dd4a..58a57f43d374580a495876cc7348adc86610fea4 100644 (file)
@@ -40,6 +40,8 @@
                      "union",
                      "foreigntype"];
 
+    var search_input = document.getElementsByClassName('search-input')[0];
+
     // On the search screen, so you remain on the last tab you opened.
     //
     // 0 for "In Names"
         // but only if the input bar is empty. This avoid the obnoxious issue
         // where you start trying to do a search, and the index loads, and
         // suddenly your search is gone!
-        if (document.getElementsByClassName("search-input")[0].value === "") {
-            document.getElementsByClassName("search-input")[0].value = params.search || '';
+        if (search_input.value === "") {
+            search_input.value = params.search || '';
         }
 
         /**
                 });
             });
 
-            var search_input = document.getElementsByClassName('search-input')[0];
             search_input.onkeydown = function(e) {
                 // "actives" references the currently highlighted item in each search tab.
                 // Each array in "actives" represents a tab.
                     // Does nothing, it's just to avoid losing "focus" on the highlighted element.
                 } else if (e.which === 27) { // escape
                     removeClass(actives[currentTab][0], 'highlighted');
-                    document.getElementsByClassName('search-input')[0].value = '';
+                    search_input.value = '';
                     defocusSearchBar();
                 } else if (actives[currentTab].length > 0) {
                     removeClass(actives[currentTab][0], 'highlighted');
                         return;
                     }
 
-                    console.log(item);
                     shown.push(id_ty);
                     name = item.name;
                     type = itemTypes[item.ty];
         }
 
         function showResults(results) {
-            var output, query = getQuery(document.getElementsByClassName('search-input')[0].value);
+            var output, query = getQuery(search_input.value);
 
             currentResults = query.id;
             output = '<h1>Results for ' + escape(query.query) +
 
         function search(e) {
             var params = getQueryStringParams();
-            var search_input = document.getElementsByClassName('search-input')[0];
             var query = getQuery(search_input.value.trim());
 
             if (e) {
                 e.preventDefault();
             }
 
-            if (!query.query || query.id === currentResults) {
+            if (query.query.length === 0 || query.id === currentResults) {
                 if (query.query.length > 0) {
                     putBackSearch(search_input);
                 }
         function startSearch() {
             var searchTimeout;
             var callback = function() {
-                var search_input = document.getElementsByClassName('search-input');
-                if (search_input.length < 1) { return; }
-                search_input = search_input[0];
                 clearTimeout(searchTimeout);
                 if (search_input.value.length === 0) {
                     if (browserSupportsHistoryApi()) {
                     searchTimeout = setTimeout(search, 500);
                 }
             };
-            var search_input = document.getElementsByClassName("search-input")[0];
             search_input.onkeyup = callback;
             search_input.oninput = callback;
             document.getElementsByClassName("search-form")[0].onsubmit = function(e) {
                     // nothing there, which lets you really go back to a
                     // previous state with nothing in the bar.
                     if (params.search) {
-                        document.getElementsByClassName('search-input')[0].value = params.search;
+                        search_input.value = params.search;
                     } else {
-                        document.getElementsByClassName('search-input')[0].value = '';
+                        search_input.value = '';
                     }
                     // Some browsers fire 'onpopstate' for every page load
                     // (Chrome), while others fire the event only when actually
         return wrapper;
     }
 
-    onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) {
-        if (e.parentNode.id === "main") {
-            var otherMessage;
-            if (hasClass(e, "type-decl")) {
-                otherMessage = '&nbsp;Show&nbsp;type&nbsp;declaration';
-            }
-            e.parentNode.insertBefore(createToggle(otherMessage), e);
-            if (otherMessage && getCurrentValue('rustdoc-item-declarations') !== "false") {
-                collapseDocs(e.previousSibling.childNodes[0], "toggle");
-            }
-        }
-    });
-
     onEach(document.getElementsByClassName('docblock'), function(e) {
         if (hasClass(e, 'autohide')) {
             var wrap = e.previousElementSibling;
             if (wrap && hasClass(wrap, 'toggle-wrapper')) {
                 var toggle = wrap.childNodes[0];
+                var extra = false;
                 if (e.childNodes[0].tagName === 'H3') {
-                    onEach(toggle.getElementsByClassName('toggle-label'), function(i_e) {
-                        i_e.innerHTML = " Show " + e.childNodes[0].innerHTML;
-                    });
+                    extra = true;
                 }
                 e.style.display = 'none';
                 addClass(wrap, 'collapsed');
                 });
                 onEach(toggle.getElementsByClassName('toggle-label'), function(e) {
                     e.style.display = 'inline-block';
+                    if (extra === true) {
+                        i_e.innerHTML = " Show " + e.childNodes[0].innerHTML;
+                    }
                 });
             }
         }
+        if (e.parentNode.id === "main") {
+            var otherMessage;
+            if (hasClass(e, "type-decl")) {
+                otherMessage = '&nbsp;Show&nbsp;type&nbsp;declaration';
+            }
+            e.parentNode.insertBefore(createToggle(otherMessage), e);
+            if (otherMessage && getCurrentValue('rustdoc-item-declarations') !== "false") {
+                collapseDocs(e.previousSibling.childNodes[0], "toggle");
+            }
+        }
     })
 
     autoCollapseAllImpls(getPageId());
         }
     }
 
-    var search_input = document.getElementsByClassName("search-input")[0];
-
     if (search_input) {
         search_input.onfocus = function() {
             putBackSearch(this);