diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2019-11-08 13:42:19 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-08 13:42:19 +0900 |
| commit | 392ebad5c693ee9dab4faa70bf400fff1f523dd7 (patch) | |
| tree | b49809055d0d2e58ff7be1c881d073e85c7a5153 /src | |
| parent | 996d94a9db8ec6f8c6feb4d11a0c53a1436457ff (diff) | |
| parent | d4527b7e00de1e6ed5b22a3fdb99a4515f2ba482 (diff) | |
Rollup merge of #66123 - GuillaumeGomez:no-more-hidden-elements, r=Dylan-DPC
No more hidden elements Fixes #66046. Follow-up of #66082. r? @kinnison
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/html/static/main.js | 62 | ||||
| -rw-r--r-- | src/librustdoc/html/static/storage.js | 4 |
2 files changed, 51 insertions, 15 deletions
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 87eb36aba13..04c0a0f005b 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -3,7 +3,7 @@ // Local js definitions: /* global addClass, getCurrentValue, hasClass */ -/* global isHidden, onEach, removeClass, updateLocalStorage */ +/* global onEach, removeClass, updateLocalStorage */ if (!String.prototype.startsWith) { String.prototype.startsWith = function(searchString, position) { @@ -161,17 +161,18 @@ function getSearchElement() { return window.history && typeof window.history.pushState === "function"; } + function isHidden(elem) { + return elem.offsetHeight === 0; + } + var main = document.getElementById("main"); + var savedHash = ""; - function onHashChange(ev) { - // If we're in mobile mode, we should hide the sidebar in any case. - hideSidebar(); - var match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/); - if (match) { - return highlightSourceLines(match, ev); - } + function handleHashes(ev) { var search = getSearchElement(); if (ev !== null && search && !hasClass(search, "hidden") && ev.newURL) { + // This block occurs when clicking on an element in the navbar while + // in a search. addClass(search, "hidden"); removeClass(main, "hidden"); var hash = ev.newURL.slice(ev.newURL.indexOf("#") + 1); @@ -183,6 +184,35 @@ function getSearchElement() { elem.scrollIntoView(); } } + // This part is used in case an element is not visible. + if (savedHash !== window.location.hash) { + savedHash = window.location.hash; + if (savedHash.length === 0) { + return; + } + var elem = document.getElementById(savedHash.slice(1)); // we remove the '#' + if (!elem || !isHidden(elem)) { + return; + } + var parent = elem.parentNode; + if (parent && hasClass(parent, "impl-items")) { + // In case this is a trait implementation item, we first need to toggle + // the "Show hidden undocumented items". + onEachLazy(parent.getElementsByClassName("collapsed"), function(e) { + if (e.parentNode === parent) { + // Only click on the toggle we're looking for. + e.click(); + return true; + } + }); + if (isHidden(elem)) { + // The whole parent is collapsed. We need to click on its toggle as well! + if (hasClass(parent.lastElementChild, "collapse-toggle")) { + parent.lastElementChild.click(); + } + } + } + } } function highlightSourceLines(match, ev) { @@ -228,6 +258,16 @@ function getSearchElement() { } } + function onHashChange(ev) { + // If we're in mobile mode, we should hide the sidebar in any case. + hideSidebar(); + var match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/); + if (match) { + return highlightSourceLines(match, ev); + } + handleHashes(ev); + } + function expandSection(id) { var elem = document.getElementById(id); if (elem && isHidden(elem)) { @@ -246,9 +286,6 @@ function getSearchElement() { } } - highlightSourceLines(); - window.onhashchange = onHashChange; - // Gets the human-readable string for the virtual-key code of the // given KeyboardEvent, ev. // @@ -2639,6 +2676,9 @@ function getSearchElement() { insertAfter(popup, getSearchElement()); } + onHashChange(); + window.onhashchange = onHashChange; + buildHelperPopup(); }()); diff --git a/src/librustdoc/html/static/storage.js b/src/librustdoc/html/static/storage.js index eae998ca3ec..d142d99ac70 100644 --- a/src/librustdoc/html/static/storage.js +++ b/src/librustdoc/html/static/storage.js @@ -24,10 +24,6 @@ function removeClass(elem, className) { elem.classList.remove(className); } -function isHidden(elem) { - return elem.offsetParent === null; -} - function onEach(arr, func, reversed) { if (arr && arr.length > 0 && func) { var length = arr.length; |
