Skip to content

Commit 88fe6df

Browse files
committed
Add hide/show detail toggles to rustdoc
All doccomments are now collapsable via a nearby [-] button Adds [collapse all] and [expand all] buttons to the top of all api pages Tweaks some layout to accomadate this
1 parent cd1216a commit 88fe6df

File tree

3 files changed

+96
-3
lines changed

3 files changed

+96
-3
lines changed

src/librustdoc/html/render.rs

+6
Original file line numberDiff line numberDiff line change
@@ -1316,6 +1316,12 @@ impl<'a> fmt::Show for Item<'a> {
13161316
_ => {}
13171317
};
13181318

1319+
try!(write!(fmt,
1320+
r##"<span id='render-detail'>
1321+
<a id="collapse-all" href="#">[collapse all]</a>
1322+
<a id="expand-all" href="#">[expand all]</a>
1323+
</span>"##));
1324+
13191325
// Write `src` tag
13201326
//
13211327
// When this item is part of a `pub use` in a downstream crate, the

src/librustdoc/html/static/main.css

+39-3
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ h3.impl, h3.method, h4.method {
101101
h3.impl, h3.method {
102102
margin-top: 15px;
103103
}
104-
h1, h2, h3, h4, section.sidebar, a.source, .search-input, .content table a {
104+
h1, h2, h3, h4, section.sidebar, a.source, .search-input, .content table a, .collapse-toggle {
105105
font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
106106
}
107107

@@ -277,7 +277,10 @@ nav.sub {
277277
}
278278
.content .multi-column li { width: 100%; display: inline-block; }
279279

280-
.content .method { font-size: 1em; }
280+
.content .method {
281+
font-size: 1em;
282+
position: relative;
283+
}
281284
.content .methods .docblock { margin-left: 40px; }
282285

283286
.content .impl-methods .docblock { margin-left: 40px; }
@@ -405,7 +408,7 @@ h1 .stability {
405408
padding: 4px 10px;
406409
}
407410

408-
.impl-methods .stability {
411+
.impl-methods .stability, .methods .stability {
409412
margin-right: 20px;
410413
}
411414

@@ -476,3 +479,36 @@ pre.rust a { transform: scaleX(-1); }
476479
margin: 0 auto;
477480
}
478481
}
482+
483+
.collapse-toggle {
484+
font-weight: 100;
485+
position: absolute;
486+
left: 13px;
487+
color: #999;
488+
margin-top: 2px;
489+
}
490+
491+
.toggle-wrapper > .collapse-toggle {
492+
left: -24px;
493+
margin-top: 0px;
494+
}
495+
496+
.toggle-wrapper {
497+
position: relative;
498+
}
499+
500+
.toggle-wrapper.collapsed {
501+
height: 1em;
502+
transition: height .2s;
503+
}
504+
505+
.collapse-toggle > .inner {
506+
display: inline-block;
507+
width: 1ch;
508+
text-align: center;
509+
}
510+
511+
.toggle-label {
512+
color: #999;
513+
font-style: italic;
514+
}

src/librustdoc/html/static/main.js

+51
Original file line numberDiff line numberDiff line change
@@ -730,4 +730,55 @@
730730
if (query['gotosrc']) {
731731
window.location = $('#src-' + query['gotosrc']).attr('href');
732732
}
733+
734+
$("#expand-all").on("click", function() {
735+
$(".docblock").show();
736+
$(".toggle-label").hide();
737+
$(".toggle-wrapper").removeClass("collapsed");
738+
$(".collapse-toggle").children(".inner").html("-");
739+
});
740+
741+
$("#collapse-all").on("click", function() {
742+
$(".docblock").hide();
743+
$(".toggle-label").show();
744+
$(".toggle-wrapper").addClass("collapsed");
745+
$(".collapse-toggle").children(".inner").html("+");
746+
});
747+
748+
$(document).on("click", ".collapse-toggle", function() {
749+
var toggle = $(this);
750+
var relatedDoc = toggle.parent().next();
751+
if (relatedDoc.is(".docblock")) {
752+
if (relatedDoc.is(":visible")) {
753+
relatedDoc.slideUp({duration:'fast', easing:'linear'});
754+
toggle.parent(".toggle-wrapper").addClass("collapsed");
755+
toggle.children(".inner").html("+");
756+
toggle.children(".toggle-label").fadeIn();
757+
} else {
758+
relatedDoc.slideDown({duration:'fast', easing:'linear'});
759+
toggle.parent(".toggle-wrapper").removeClass("collapsed");
760+
toggle.children(".inner").html("-");
761+
toggle.children(".toggle-label").hide();
762+
}
763+
}
764+
});
765+
766+
$(function() {
767+
var toggle = "<a href='javascript:void(0)'"
768+
+ "class='collapse-toggle'>[<span class='inner'>-</span>]</a>";
769+
770+
$(".method").each(function() {
771+
if ($(this).next().is(".docblock")) {
772+
$(this).children().first().after(toggle);
773+
}
774+
});
775+
776+
var mainToggle = $(toggle);
777+
mainToggle.append("<span class='toggle-label' style='display:none'>"
778+
+ "&nbsp;Expand&nbsp;description</span></a>")
779+
var wrapper = $("<div class='toggle-wrapper'>");
780+
wrapper.append(mainToggle);
781+
$("#main > .docblock").before(wrapper);
782+
});
783+
733784
}());

0 commit comments

Comments
 (0)