-
-
Save BurntSushi/6bc3fd4dd79a0148b385abfa9d865ec4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
// This function forces rustdoc to collapse documentation for all items, | |
// except for the methods defined in an impl block and the primary type's | |
// declaration. This is the most natural view IMO, since it provides the | |
// primary type along with an easy to scan overview of available methods. | |
// | |
// rustdoc does seemingly have user settings that purport to make this the | |
// default, but I could never cause them to work in a reliably consistent | |
// way. This is especially useful when writing documents, where you commonly | |
// want to refresh and look at the docs for the specific item you're working | |
// on. This mini-script will automatically scroll to and expand the currently | |
// selected method. | |
// | |
// I used the tridactyl Firefox extension to bind this script to `,z` with | |
// the following in my tridactylrc: | |
// | |
// bind ,z composite jsb tri.native.run('cat path/to/rustdoc-condensed.js') | js -p eval(JS_ARG.content) | |
// get the currently selected doc item from URL's hash fragment | |
// e.g., in `struct.BStr.html#method.words`, this returns `method.words`. | |
function getPageId() { | |
var id = document.location.href.split("#")[1]; | |
if (id) { | |
return id.split("?")[0].split("&")[0]; | |
} | |
return null; | |
} | |
// collapse everything, with an extra click in case things are partially | |
// collapased already | |
const toggleAll = document.getElementById('toggle-all-docs'); | |
if (toggleAll.className.indexOf('will-expand') > -1) { | |
toggleAll.click(); | |
} | |
toggleAll.click(); | |
// re-expand primary impls | |
const impls = document.getElementsByClassName('impl'); | |
for (let i = 0; i < impls.length; i++) { | |
// but don't expand every impl, just the ones on this type | |
if (!/^impl(-\d+)?$/.test(impls[i].id)) { | |
continue; | |
} | |
const toggles = impls[i].getElementsByClassName('collapse-toggle'); | |
for (let j = 0; j < toggles.length; j++) { | |
// If it's already expanded, then let it be. In newer versions of | |
// rustdoc, collapsing everything doesn't collapse the methods, so we | |
// don't need to do anything. | |
if (toggles[j].innerText == '[−]') { | |
continue; | |
} | |
toggles[j].click(); | |
} | |
} | |
// expand type declaration docs | |
const main = document.getElementById('main'); | |
const wrapper = document.getElementsByClassName('toggle-wrapper')[0]; | |
wrapper.getElementsByTagName('a')[0].click(); | |
// re-expand specific method declaration, and scroll to it | |
const pageId = getPageId(); | |
if (pageId !== null) { | |
const method = document.getElementById(pageId); | |
method.getElementsByClassName('collapse-toggle')[0].click(); | |
method.scrollIntoView(); | |
} | |
})() |
Yes? Works fine for me:
- Go to https://doc.rust-lang.org/std/string/struct.String.html
- Open Javascript console (F12 in Firefox).
- Copy above code into console.
- Hit enter.
- Watch all items individually collapse.
Thanks. Consider changing comments from //
to /* */
so that it is easy to paste in bookmarklet with javascript: <Ctrl+V>
https://gist.github.com/rofrol/c3a3e6395c74326ce075c7f815823a45
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is this still needed? I have tested it on couple of crates and it does nothing.