Skip to content

Commit aca1bd7

Browse files
First step for important traits UI
1 parent be68d34 commit aca1bd7

File tree

3 files changed

+61
-14
lines changed

3 files changed

+61
-14
lines changed

src/librustdoc/html/render.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1816,8 +1816,7 @@ fn plain_summary_line(s: Option<&str>) -> String {
18161816

18171817
fn document(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item) -> fmt::Result {
18181818
document_stability(w, cx, item)?;
1819-
let mut prefix = render_assoc_const_value(item);
1820-
prefix.push_str(&render_spotlight_traits(item)?);
1819+
let prefix = render_assoc_const_value(item);
18211820
document_full(w, item, cx, &prefix)?;
18221821
Ok(())
18231822
}
@@ -2267,10 +2266,15 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
22672266
AbiSpace(f.abi),
22682267
it.name.as_ref().unwrap(),
22692268
f.generics).len();
2269+
let mut extra = render_spotlight_traits(it)?;
2270+
if !extra.is_empty() {
2271+
extra.insert_str(0, "<div class=\"important-traits\">ⓘ<div class=\"content hidden\">");
2272+
extra.push_str("</div></div>");
2273+
};
22702274
write!(w, "<pre class='rust fn'>")?;
22712275
render_attributes(w, it)?;
22722276
write!(w, "{vis}{constness}{unsafety}{abi}fn \
2273-
{name}{generics}{decl}{where_clause}</pre>",
2277+
{name}{generics}{decl}{where_clause}</pre>{extra}",
22742278
vis = VisSpace(&it.visibility),
22752279
constness = ConstnessSpace(f.constness),
22762280
unsafety = UnsafetySpace(f.unsafety),
@@ -2282,7 +2286,8 @@ fn item_function(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item,
22822286
decl: &f.decl,
22832287
name_len,
22842288
indent: 0,
2285-
})?;
2289+
},
2290+
extra = extra)?;
22862291
document(w, cx, it)
22872292
}
22882293

@@ -3266,7 +3271,7 @@ fn spotlight_decl(decl: &clean::FnDecl) -> Result<String, fmt::Error> {
32663271
if out.is_empty() {
32673272
out.push_str("<span class=\"docblock autohide\">");
32683273
out.push_str(&format!("<h3>Important traits for {}</h3>", impl_.for_));
3269-
out.push_str("<code class=\"spotlight\">");
3274+
out.push_str("<code class=\"content\">");
32703275
}
32713276

32723277
//use the "where" class here to make it small
@@ -3287,7 +3292,8 @@ fn spotlight_decl(decl: &clean::FnDecl) -> Result<String, fmt::Error> {
32873292
}
32883293

32893294
if !out.is_empty() {
3290-
out.push_str("</code></span>");
3295+
out.insert_str(0, "<div class=\"important-traits\">ⓘ<div class=\"content hidden\">");
3296+
out.push_str("</code></span></div></div>");
32913297
}
32923298

32933299
Ok(out)
@@ -3327,7 +3333,6 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
33273333
trait_: Option<&clean::Trait>, show_def_docs: bool) -> fmt::Result {
33283334
let item_type = item.type_();
33293335
let name = item.name.as_ref().unwrap();
3330-
let mut method_prefix: Option<String> = None;
33313336

33323337
let render_method_item: bool = match render_mode {
33333338
RenderMode::Normal => true,
@@ -3342,6 +3347,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
33423347
let id = derive_id(format!("{}.{}", item_type, name));
33433348
let ns_id = derive_id(format!("{}.{}", name, item_type.name_space()));
33443349
write!(w, "<h4 id='{}' class=\"{}\">", id, item_type)?;
3350+
write!(w, "{}", spotlight_decl(decl)?)?;
33453351
write!(w, "<span id='{}' class='invisible'>", ns_id)?;
33463352
write!(w, "<code>")?;
33473353
render_assoc_item(w, item, link.anchor(&id), ItemType::Impl)?;
@@ -3356,7 +3362,6 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
33563362
render_stability_since_raw(w, item.stable_since(), outer_version)?;
33573363
}
33583364
write!(w, "</span></h4>\n")?;
3359-
method_prefix = Some(spotlight_decl(decl)?);
33603365
}
33613366
}
33623367
clean::TypedefItem(ref tydef, _) => {
@@ -3388,11 +3393,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
33883393
}
33893394

33903395
if render_method_item || render_mode == RenderMode::Normal {
3391-
let mut prefix = render_assoc_const_value(item);
3392-
3393-
if let Some(method_prefix) = method_prefix {
3394-
prefix.push_str(&method_prefix);
3395-
}
3396+
let prefix = render_assoc_const_value(item);
33963397

33973398
if !is_default_item {
33983399
if let Some(t) = trait_ {

src/librustdoc/html/static/main.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1624,7 +1624,9 @@
16241624
}
16251625

16261626
onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) {
1627-
e.parentNode.insertBefore(createToggle(), e);
1627+
if (e.parentNode.id === "main") {
1628+
e.parentNode.insertBefore(createToggle(), e);
1629+
}
16281630
});
16291631

16301632
onEach(document.getElementsByClassName('docblock'), function(e) {
@@ -1711,6 +1713,19 @@
17111713
}
17121714
});
17131715

1716+
function showModal(content) {
1717+
var modal = document.createElement('div');
1718+
addClass(modal, 'modal');
1719+
modal.innerHTML = '<div class="modal-content">' + content + "</div>";
1720+
document.getElementsByTagName('body')[0].appendChild(modal);
1721+
}
1722+
1723+
onEach(document.getElementsByClassName('important-traits'), function(e) {
1724+
e.onclick = function() {
1725+
showModal(e.firstElementChild.innerHTML);
1726+
};
1727+
});
1728+
17141729
var search_input = document.getElementsByClassName("search-input")[0];
17151730

17161731
if (search_input) {

src/librustdoc/html/static/rustdoc.css

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,3 +954,34 @@ pre.rust {
954954
color: #888;
955955
font-size: 16px;
956956
}
957+
958+
h4 > .important-traits {
959+
position: absolute;
960+
left: -44px;
961+
top: 2px;
962+
cursor: pointer;
963+
}
964+
965+
.modal {
966+
position: fixed;
967+
width: 100vw;
968+
height: 100vh;
969+
background-color: rgba(0,0,0,0.3);
970+
z-index: 10000;
971+
top: 0;
972+
left: 0;
973+
}
974+
975+
.modal-content {
976+
display: block;
977+
max-width: 60%;
978+
min-width: 200px;
979+
background-color: white;
980+
padding: 5px;
981+
top: 10%;
982+
position: absolute;
983+
left: 50%;
984+
transform: translate(-50%, -50%);
985+
border: 1px solid #999;
986+
border-radius: 4px;
987+
}

0 commit comments

Comments
 (0)