Rollup merge of #66123 - GuillaumeGomez:no-more-hidden-elements, r=Dylan-DPC
No more hidden elements Fixes #66046. Follow-up of #66082. r? @kinnison
This commit is contained in:
commit
392ebad5c6
2 changed files with 52 additions and 16 deletions
|
@ -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";
|
||||
}
|
||||
|
||||
var main = document.getElementById("main");
|
||||
function isHidden(elem) {
|
||||
return elem.offsetHeight === 0;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
var main = document.getElementById("main");
|
||||
var savedHash = "";
|
||||
|
||||
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();
|
||||
}());
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue