mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
Rollup merge of #88742 - GuillaumeGomez:fix-table-in-docblocks, r=nbdd0121
Fix table in docblocks "Overwrite" of #88702. Instead of adding a z-index to the sidebar (which only hides the issue, doesn't fix it), I wrap `<table>` elements inside a `<div>` and limit all chidren of `.docblock` elements' width to prevent having the scrollbar on the whole doc block. ![Screenshot from 2021-09-08 15-11-24](https://user-images.githubusercontent.com/3050060/132515740-71796515-e74f-429f-ba98-2596bdbf781c.png) Thanks `@nbdd0121` for `overflow-x: auto;`. ;) r? `@notriddle`
This commit is contained in:
commit
130e2e1edf
@ -445,6 +445,42 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for LinkReplacer<'a, I> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Wrap HTML tables into `<div>` to prevent having the doc blocks width being too big.
|
||||
struct TableWrapper<'a, I: Iterator<Item = Event<'a>>> {
|
||||
inner: I,
|
||||
stored_events: VecDeque<Event<'a>>,
|
||||
}
|
||||
|
||||
impl<'a, I: Iterator<Item = Event<'a>>> TableWrapper<'a, I> {
|
||||
fn new(iter: I) -> Self {
|
||||
Self { inner: iter, stored_events: VecDeque::new() }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I: Iterator<Item = Event<'a>>> Iterator for TableWrapper<'a, I> {
|
||||
type Item = Event<'a>;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if let Some(first) = self.stored_events.pop_front() {
|
||||
return Some(first);
|
||||
}
|
||||
|
||||
let event = self.inner.next()?;
|
||||
|
||||
Some(match event {
|
||||
Event::Start(Tag::Table(t)) => {
|
||||
self.stored_events.push_back(Event::Start(Tag::Table(t)));
|
||||
Event::Html(CowStr::Borrowed("<div>"))
|
||||
}
|
||||
Event::End(Tag::Table(t)) => {
|
||||
self.stored_events.push_back(Event::Html(CowStr::Borrowed("</div>")));
|
||||
Event::End(Tag::Table(t))
|
||||
}
|
||||
e => e,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type SpannedEvent<'a> = (Event<'a>, Range<usize>);
|
||||
|
||||
/// Make headings links with anchor IDs and build up TOC.
|
||||
@ -993,6 +1029,7 @@ impl Markdown<'_> {
|
||||
let p = HeadingLinks::new(p, None, &mut ids);
|
||||
let p = Footnotes::new(p);
|
||||
let p = LinkReplacer::new(p.map(|(ev, _)| ev), links);
|
||||
let p = TableWrapper::new(p);
|
||||
let p = CodeBlocks::new(p, codes, edition, playground);
|
||||
html::push_html(&mut s, p);
|
||||
|
||||
@ -1013,7 +1050,8 @@ impl MarkdownWithToc<'_> {
|
||||
{
|
||||
let p = HeadingLinks::new(p, Some(&mut toc), &mut ids);
|
||||
let p = Footnotes::new(p);
|
||||
let p = CodeBlocks::new(p.map(|(ev, _)| ev), codes, edition, playground);
|
||||
let p = TableWrapper::new(p.map(|(ev, _)| ev));
|
||||
let p = CodeBlocks::new(p, codes, edition, playground);
|
||||
html::push_html(&mut s, p);
|
||||
}
|
||||
|
||||
@ -1041,7 +1079,8 @@ impl MarkdownHtml<'_> {
|
||||
|
||||
let p = HeadingLinks::new(p, None, &mut ids);
|
||||
let p = Footnotes::new(p);
|
||||
let p = CodeBlocks::new(p.map(|(ev, _)| ev), codes, edition, playground);
|
||||
let p = TableWrapper::new(p.map(|(ev, _)| ev));
|
||||
let p = CodeBlocks::new(p, codes, edition, playground);
|
||||
html::push_html(&mut s, p);
|
||||
|
||||
s
|
||||
|
@ -275,7 +275,8 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
|
||||
write!(
|
||||
w,
|
||||
"<h2 id=\"{id}\" class=\"section-header\">\
|
||||
<a href=\"#{id}\">{name}</a></h2>\n{}",
|
||||
<a href=\"#{id}\">{name}</a>\
|
||||
</h2>\n{}",
|
||||
ITEM_TABLE_OPEN,
|
||||
id = cx.derive_id(short.to_owned()),
|
||||
name = name
|
||||
|
@ -522,6 +522,11 @@ nav.sub {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.docblock > * {
|
||||
max-width: 100%;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.content .out-of-band {
|
||||
flex-grow: 0;
|
||||
text-align: right;
|
||||
|
@ -7,3 +7,11 @@ compare-elements-property: (".top-doc .docblock", ".top-doc .docblock > p", ["sc
|
||||
assert-property: (".top-doc .docblock", {"scrollWidth": "816"})
|
||||
// However, since there is overflow in the <table>, its scroll width is bigger.
|
||||
assert-property: (".top-doc .docblock table", {"scrollWidth": "1573"})
|
||||
|
||||
// Checking it works on other doc blocks as well...
|
||||
|
||||
// Logically, the ".docblock" and the "<p>" should have the same scroll width.
|
||||
compare-elements-property: ("#implementations + details .docblock", "#implementations + details .docblock > p", ["scrollWidth"])
|
||||
assert-property: ("#implementations + details .docblock", {"scrollWidth": "816"})
|
||||
// However, since there is overflow in the <table>, its scroll width is bigger.
|
||||
assert-property: ("#implementations + details .docblock table", {"scrollWidth": "1573"})
|
||||
|
@ -67,6 +67,15 @@ pub mod long_table {
|
||||
///
|
||||
/// I wanna sqdkfnqds f dsqf qds f dsqf dsq f dsq f qds f qds f qds f dsqq f dsf sqdf dsq fds f dsq f dq f ds fq sd fqds f dsq f sqd fsq df sd fdsqfqsd fdsq f dsq f dsqfd s dfq
|
||||
pub struct Foo;
|
||||
|
||||
/// | This::is::a::kinda::very::long::header::number::one | This::is::a::kinda::very::long::header::number::two | This::is::a::kinda::very::long::header::number::one | This::is::a::kinda::very::long::header::number::two |
|
||||
/// | ----------- | ----------- | ----------- | ----------- |
|
||||
/// | This::is::a::kinda::long::content::number::one | This::is::a::kinda::very::long::content::number::two | This::is::a::kinda::long::content::number::one | This::is::a::kinda::very::long::content::number::two |
|
||||
///
|
||||
/// I wanna sqdkfnqds f dsqf qds f dsqf dsq f dsq f qds f qds f qds f dsqq f dsf sqdf dsq fds f dsq f dq f ds fq sd fqds f dsq f sqd fsq df sd fdsqfqsd fdsq f dsq f dsqfd s dfq
|
||||
impl Foo {
|
||||
pub fn foo(&self) {}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod summary_table {
|
||||
|
16
src/test/rustdoc/table-in-docblock.rs
Normal file
16
src/test/rustdoc/table-in-docblock.rs
Normal file
@ -0,0 +1,16 @@
|
||||
#![crate_name = "foo"]
|
||||
|
||||
// @has foo/struct.Foo.html
|
||||
// @count - '//*[@class="docblock"]/div/table' 2
|
||||
// @!has - '//*[@class="docblock"]/table'
|
||||
/// | hello | hello2 |
|
||||
/// | ----- | ------ |
|
||||
/// | data | data2 |
|
||||
pub struct Foo;
|
||||
|
||||
impl Foo {
|
||||
/// | hello | hello2 |
|
||||
/// | ----- | ------ |
|
||||
/// | data | data2 |
|
||||
pub fn foo(&self) {}
|
||||
}
|
Loading…
Reference in New Issue
Block a user