Migrate from custom elements to divs with classes to be compatible with safari

This commit is contained in:
Stefan Schindler 2021-06-18 00:33:42 +02:00
parent cc9ef7d8a8
commit 94c84bd72a
15 changed files with 82 additions and 75 deletions

View File

@ -1694,7 +1694,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) {
write!( write!(
buffer, buffer,
"<div class=\"block version\">\ "<div class=\"block version\">\
<div class=\"narrow-helper\"></div> <div class=\"narrow-helper\"></div>\
<p>Version {}</p>\ <p>Version {}</p>\
</div>", </div>",
Escape(version), Escape(version),

View File

@ -29,6 +29,9 @@ use crate::html::highlight;
use crate::html::layout::Page; use crate::html::layout::Page;
use crate::html::markdown::MarkdownSummaryLine; use crate::html::markdown::MarkdownSummaryLine;
const ITEM_TABLE_OPEN: &'static str = "<div class=\"item-table\">";
const ITEM_TABLE_CLOSE: &'static str = "</div>";
pub(super) fn print_item(cx: &Context<'_>, item: &clean::Item, buf: &mut Buffer, page: &Page<'_>) { pub(super) fn print_item(cx: &Context<'_>, item: &clean::Item, buf: &mut Buffer, page: &Page<'_>) {
debug_assert!(!item.is_stripped()); debug_assert!(!item.is_stripped());
// Write the breadcrumb trail header for the top // Write the breadcrumb trail header for the top
@ -263,14 +266,15 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
curty = myty; curty = myty;
} else if myty != curty { } else if myty != curty {
if curty.is_some() { if curty.is_some() {
w.write_str("</item-table>"); w.write_str(ITEM_TABLE_CLOSE);
} }
curty = myty; curty = myty;
let (short, name) = item_ty_to_strs(myty.unwrap()); let (short, name) = item_ty_to_strs(myty.unwrap());
write!( write!(
w, w,
"<h2 id=\"{id}\" class=\"section-header\">\ "<h2 id=\"{id}\" class=\"section-header\">\
<a href=\"#{id}\">{name}</a></h2>\n<item-table>", <a href=\"#{id}\">{name}</a></h2>\n{}",
ITEM_TABLE_OPEN,
id = cx.derive_id(short.to_owned()), id = cx.derive_id(short.to_owned()),
name = name name = name
); );
@ -283,14 +287,14 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
match *src { match *src {
Some(ref src) => write!( Some(ref src) => write!(
w, w,
"<item-left><code>{}extern crate {} as {};", "<div class=\"item-left\"><code>{}extern crate {} as {};",
myitem.visibility.print_with_space(myitem.def_id, cx), myitem.visibility.print_with_space(myitem.def_id, cx),
anchor(myitem.def_id.expect_real(), &*src.as_str(), cx), anchor(myitem.def_id.expect_real(), &*src.as_str(), cx),
myitem.name.as_ref().unwrap(), myitem.name.as_ref().unwrap(),
), ),
None => write!( None => write!(
w, w,
"<item-left><code>{}extern crate {};", "<div class=\"item-left\"><code>{}extern crate {};",
myitem.visibility.print_with_space(myitem.def_id, cx), myitem.visibility.print_with_space(myitem.def_id, cx),
anchor( anchor(
myitem.def_id.expect_real(), myitem.def_id.expect_real(),
@ -299,7 +303,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
), ),
), ),
} }
w.write_str("</code></item-left>\n"); w.write_str("</code></div>");
} }
clean::ImportItem(ref import) => { clean::ImportItem(ref import) => {
@ -326,10 +330,10 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
write!( write!(
w, w,
"<item-left class=\"{stab}{add}import-item\">\ "<div class=\"item-left {stab}{add}import-item\">\
<code>{vis}{imp}</code>\ <code>{vis}{imp}</code>\
</item-left>\ </div>\
<item-right class=\"docblock-short\">{stab_tags}</item-right>", <div class=\"item-right docblock-short\">{stab_tags}</div>",
stab = stab.unwrap_or_default(), stab = stab.unwrap_or_default(),
add = add, add = add,
vis = myitem.visibility.print_with_space(myitem.def_id, cx), vis = myitem.visibility.print_with_space(myitem.def_id, cx),
@ -358,10 +362,11 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
let doc_value = myitem.doc_value().unwrap_or_default(); let doc_value = myitem.doc_value().unwrap_or_default();
write!( write!(
w, w,
"<item-left class=\"{stab}{add}module-item\">\ "<div class=\"item-left {stab}{add}module-item\">\
<a class=\"{class}\" href=\"{href}\" \ <a class=\"{class}\" href=\"{href}\" \
title=\"{title}\">{name}</a>{unsafety_flag}</item-left>\ title=\"{title}\">{name}</a>{unsafety_flag}\
<item-right class=\"docblock-short\">{stab_tags}{docs}</item-right>", </div>\
<div class=\"item-right docblock-short\">{stab_tags}{docs}</div>",
name = *myitem.name.as_ref().unwrap(), name = *myitem.name.as_ref().unwrap(),
stab_tags = extra_info_tags(myitem, item, cx.tcx()), stab_tags = extra_info_tags(myitem, item, cx.tcx()),
docs = MarkdownSummaryLine(&doc_value, &myitem.links(cx)).into_string(), docs = MarkdownSummaryLine(&doc_value, &myitem.links(cx)).into_string(),
@ -381,7 +386,7 @@ fn item_module(w: &mut Buffer, cx: &Context<'_>, item: &clean::Item, items: &[cl
} }
if curty.is_some() { if curty.is_some() {
w.write_str("</item-table>"); w.write_str(ITEM_TABLE_CLOSE);
} }
} }

View File

@ -169,7 +169,7 @@ div.impl-items > div {
h1, h2, h3, h4, h1, h2, h3, h4,
.sidebar, a.source, .search-input, .search-results .result-name, .sidebar, a.source, .search-input, .search-results .result-name,
.content table td:first-child > a, .content table td:first-child > a,
item-left > a, .item-left > a,
div.item-list .out-of-band, span.since, div.item-list .out-of-band, span.since,
#source-sidebar, #sidebar-toggle, #source-sidebar, #sidebar-toggle,
details.rustdoc-toggle > summary::before, details.rustdoc-toggle > summary::before,
@ -711,7 +711,7 @@ a {
.block a.current.crate { font-weight: 500; } .block a.current.crate { font-weight: 500; }
item-table { .item-table {
display: grid; display: grid;
column-gap: 1.2rem; column-gap: 1.2rem;
row-gap: 0.0rem; row-gap: 0.0rem;
@ -720,13 +720,13 @@ item-table {
justify-items: start; justify-items: start;
} }
item-left, item-right { .item-left, .item-right {
display: block; display: block;
} }
item-left { .item-left {
grid-column: 1; grid-column: 1;
} }
item-right { .item-right {
grid-column: 2; grid-column: 2;
} }
@ -1775,11 +1775,11 @@ details.undocumented[open] > summary::before {
} }
/* Display an alternating layout on tablets and phones */ /* Display an alternating layout on tablets and phones */
item-table { .item-table {
display: flex; display: flex;
flex-flow: column wrap; flex-flow: column wrap;
} }
item-left, item-right { .item-left, .item-right {
width: 100%; width: 100%;
} }
@ -1795,7 +1795,7 @@ details.undocumented[open] > summary::before {
.search-results .result-name, .search-results div.desc, .search-results .result-description { .search-results .result-name, .search-results div.desc, .search-results .result-description {
width: 100%; width: 100%;
} }
.search-results div.desc, .search-results .result-description, item-right { .search-results div.desc, .search-results .result-description, .item-right {
padding-left: 2em; padding-left: 2em;
} }
} }

View File

@ -1,6 +1,6 @@
// @has deprecated/index.html '//*[@class="docblock-short"]/span[@class="stab deprecated"]' \ // @has deprecated/index.html '//*[@class="item-right docblock-short"]/span[@class="stab deprecated"]' \
// 'Deprecated' // 'Deprecated'
// @has - '//*[@class="docblock-short"]' 'Deprecated docs' // @has - '//*[@class="item-right docblock-short"]' 'Deprecated docs'
// @has deprecated/struct.S.html '//*[@class="stab deprecated"]' \ // @has deprecated/struct.S.html '//*[@class="stab deprecated"]' \
// 'Deprecated since 1.0.0: text' // 'Deprecated since 1.0.0: text'
@ -8,7 +8,7 @@
#[deprecated(since = "1.0.0", note = "text")] #[deprecated(since = "1.0.0", note = "text")]
pub struct S; pub struct S;
// @matches deprecated/index.html '//*[@class="docblock-short"]' '^Docs' // @matches deprecated/index.html '//*[@class="item-right docblock-short"]' '^Docs'
/// Docs /// Docs
pub struct T; pub struct T;

View File

@ -12,7 +12,7 @@ pub struct Portable;
// @has doc_cfg/unix_only/index.html \ // @has doc_cfg/unix_only/index.html \
// '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \ // '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \
// 'This is supported on Unix only.' // 'This is supported on Unix only.'
// @matches - '//*[@class="docblock-short"]//*[@class="stab portability"]' '\AARM\Z' // @matches - '//*[@class="item-right docblock-short"]//*[@class="stab portability"]' '\AARM\Z'
// @count - '//*[@class="stab portability"]' 2 // @count - '//*[@class="stab portability"]' 2
#[doc(cfg(unix))] #[doc(cfg(unix))]
pub mod unix_only { pub mod unix_only {
@ -42,7 +42,7 @@ pub mod unix_only {
// @has doc_cfg/wasi_only/index.html \ // @has doc_cfg/wasi_only/index.html \
// '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \ // '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \
// 'This is supported on WASI only.' // 'This is supported on WASI only.'
// @matches - '//*[@class="docblock-short"]//*[@class="stab portability"]' '\AWebAssembly\Z' // @matches - '//*[@class="item-right docblock-short"]//*[@class="stab portability"]' '\AWebAssembly\Z'
// @count - '//*[@class="stab portability"]' 2 // @count - '//*[@class="stab portability"]' 2
#[doc(cfg(target_os = "wasi"))] #[doc(cfg(target_os = "wasi"))]
pub mod wasi_only { pub mod wasi_only {
@ -74,7 +74,7 @@ pub mod wasi_only {
// the portability header is different on the module view versus the full view // the portability header is different on the module view versus the full view
// @has doc_cfg/index.html // @has doc_cfg/index.html
// @matches - '//*[@class="docblock-short"]//*[@class="stab portability"]' '\Aavx\Z' // @matches - '//*[@class="item-right docblock-short"]//*[@class="stab portability"]' '\Aavx\Z'
// @has doc_cfg/fn.uses_target_feature.html // @has doc_cfg/fn.uses_target_feature.html
// @has - '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \ // @has - '//*[@id="main"]/*[@class="item-info"]/*[@class="stab portability"]' \

View File

@ -2,8 +2,8 @@
#![feature(doc_cfg)] #![feature(doc_cfg)]
// @has 'foo/index.html' // @has 'foo/index.html'
// @matches '-' '//*[@class="docblock-short"]//*[@class="stab portability"]' '^sync$' // @matches '-' '//*[@class="item-right docblock-short"]//*[@class="stab portability"]' '^sync$'
// @has '-' '//*[@class="docblock-short"]//*[@class="stab portability"]/@title' 'This is supported on crate feature `sync` only' // @has '-' '//*[@class="item-right docblock-short"]//*[@class="stab portability"]/@title' 'This is supported on crate feature `sync` only'
// @has 'foo/struct.Foo.html' // @has 'foo/struct.Foo.html'
// @has '-' '//*[@class="stab portability"]' 'sync' // @has '-' '//*[@class="stab portability"]' 'sync'

View File

@ -7,8 +7,8 @@
extern crate macros; extern crate macros;
// @has foo/index.html '//*[@class="docblock-short"]/span[@class="stab deprecated"]' Deprecated // @has foo/index.html '//*[@class="item-right docblock-short"]/span[@class="stab deprecated"]' Deprecated
// @has - '//*[@class="docblock-short"]/span[@class="stab unstable"]' Experimental // @has - '//*[@class="item-right docblock-short"]/span[@class="stab unstable"]' Experimental
// @has foo/macro.my_macro.html // @has foo/macro.my_macro.html
// @has - '//*[@class="docblock"]' 'docs for my_macro' // @has - '//*[@class="docblock"]' 'docs for my_macro'

View File

@ -2,9 +2,11 @@
// Check that the unstable marker is not added for "rustc_private". // Check that the unstable marker is not added for "rustc_private".
// @!matches internal/index.html '//*[@class="docblock-short"]/span[@class="stab unstable"]' // @!matches internal/index.html \
// @!matches internal/index.html '//*[@class="docblock-short"]/span[@class="stab internal"]' // '//*[@class="item-right docblock-short"]/span[@class="stab unstable"]'
// @matches - '//*[@class="docblock-short"]' 'Docs' // @!matches internal/index.html \
// '//*[@class="item-right docblock-short"]/span[@class="stab internal"]'
// @matches - '//*[@class="item-right docblock-short"]' 'Docs'
// @!has internal/struct.S.html '//*[@class="stab unstable"]' // @!has internal/struct.S.html '//*[@class="stab unstable"]'
// @!has internal/struct.S.html '//*[@class="stab internal"]' // @!has internal/struct.S.html '//*[@class="stab internal"]'

View File

@ -1,17 +1,17 @@
#![feature(staged_api)] #![feature(staged_api)]
#![doc(issue_tracker_base_url = "http://issue_url/")] #![doc(issue_tracker_base_url = "https://issue_url/")]
#![unstable(feature="test", issue = "32374")] #![unstable(feature="test", issue = "32374")]
// @matches issue_32374/index.html '//*[@class="docblock-short"]/span[@class="stab deprecated"]' \ // @matches issue_32374/index.html '//*[@class="item-right docblock-short"]/span[@class="stab deprecated"]' \
// 'Deprecated' // 'Deprecated'
// @matches issue_32374/index.html '//*[@class="docblock-short"]/span[@class="stab unstable"]' \ // @matches issue_32374/index.html '//*[@class="item-right docblock-short"]/span[@class="stab unstable"]' \
// 'Experimental' // 'Experimental'
// @matches issue_32374/index.html '//*[@class="docblock-short"]/text()' 'Docs' // @matches issue_32374/index.html '//*[@class="item-right docblock-short"]/text()' 'Docs'
// @has issue_32374/struct.T.html '//*[@class="stab deprecated"]' \ // @has issue_32374/struct.T.html '//*[@class="stab deprecated"]' \
// '👎 Deprecated since 1.0.0: text' // '👎 Deprecated since 1.0.0: text'
// @has - '<code>test</code>&nbsp;<a href="http://issue_url/32374">#32374</a>' // @has - '<code>test</code>&nbsp;<a href="https://issue_url/32374">#32374</a>'
// @matches issue_32374/struct.T.html '//*[@class="stab unstable"]' \ // @matches issue_32374/struct.T.html '//*[@class="stab unstable"]' \
// '🔬 This is a nightly-only experimental API. \(test\s#32374\)$' // '🔬 This is a nightly-only experimental API. \(test\s#32374\)$'
/// Docs /// Docs

View File

@ -1,3 +1,3 @@
// @has 'issue_46377/index.html' '//*[@class="docblock-short"]' 'Check out this struct!' // @has 'issue_46377/index.html' '//*[@class="item-right docblock-short"]' 'Check out this struct!'
/// # Check out this struct! /// # Check out this struct!
pub struct SomeStruct; pub struct SomeStruct;

View File

@ -29,8 +29,8 @@ pub mod subone {
// @has - '//section[@id="main"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo' // @has - '//section[@id="main"]/details/div[@class="docblock"]//a[@href="../fn.foo.html"]' 'foo'
// @has - '//section[@id="main"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar' // @has - '//section[@id="main"]/details/div[@class="docblock"]//a[@href="../fn.bar.html"]' 'bar'
// Though there should be such links later // Though there should be such links later
// @has - '//section[@id="main"]/item-table//item-left[@class="module-item"]/a[@class="fn"][@href="fn.foo.html"]' 'foo' // @has - '//section[@id="main"]/div[@class="item-table"]//div[@class="item-left module-item"]/a[@class="fn"][@href="fn.foo.html"]' 'foo'
// @has - '//section[@id="main"]/item-table//item-left[@class="module-item"]/a[@class="fn"][@href="fn.bar.html"]' 'bar' // @has - '//section[@id="main"]/div[@class="item-table"]//div[@class="item-left module-item"]/a[@class="fn"][@href="fn.bar.html"]' 'bar'
/// See either [foo] or [bar]. /// See either [foo] or [bar].
pub mod subtwo { pub mod subtwo {
@ -68,8 +68,8 @@ pub mod subthree {
// Next we go *deeper* - In order to ensure it's not just "this or parent" // Next we go *deeper* - In order to ensure it's not just "this or parent"
// we test `crate::` and a `super::super::...` chain // we test `crate::` and a `super::super::...` chain
// @has issue_55364/subfour/subfive/subsix/subseven/subeight/index.html // @has issue_55364/subfour/subfive/subsix/subseven/subeight/index.html
// @has - '//section[@id="main"]/item-table//item-right[@class="docblock-short"]//a[@href="../../../../../subone/fn.foo.html"]' 'other foo' // @has - '//section[@id="main"]/div[@class="item-table"]//div[@class="item-right docblock-short"]//a[@href="../../../../../subone/fn.foo.html"]' 'other foo'
// @has - '//section[@id="main"]/item-table//item-right[@class="docblock-short"]//a[@href="../../../../../subtwo/fn.bar.html"]' 'other bar' // @has - '//section[@id="main"]/div[@class="item-table"]//div[@class="item-right docblock-short"]//a[@href="../../../../../subtwo/fn.bar.html"]' 'other bar'
pub mod subfour { pub mod subfour {
pub mod subfive { pub mod subfive {
pub mod subsix { pub mod subsix {

View File

@ -4,15 +4,15 @@
extern crate reexport_check; extern crate reexport_check;
// @!has 'foo/index.html' '//code' 'pub use self::i32;' // @!has 'foo/index.html' '//code' 'pub use self::i32;'
// @has 'foo/index.html' '//item-left[@class="deprecated module-item"]' 'i32' // @has 'foo/index.html' '//div[@class="item-left deprecated module-item"]' 'i32'
// @has 'foo/i32/index.html' // @has 'foo/i32/index.html'
#[allow(deprecated, deprecated_in_future)] #[allow(deprecated, deprecated_in_future)]
pub use std::i32; pub use std::i32;
// @!has 'foo/index.html' '//code' 'pub use self::string::String;' // @!has 'foo/index.html' '//code' 'pub use self::string::String;'
// @has 'foo/index.html' '//item-left[@class="module-item"]' 'String' // @has 'foo/index.html' '//div[@class="item-left module-item"]' 'String'
pub use std::string::String; pub use std::string::String;
// @has 'foo/index.html' '//item-right[@class="docblock-short"]' 'Docs in original' // @has 'foo/index.html' '//div[@class="item-right docblock-short"]' 'Docs in original'
// this is a no-op, but shows what happens if there's an attribute that isn't a doc-comment // this is a no-op, but shows what happens if there's an attribute that isn't a doc-comment
#[doc(inline)] #[doc(inline)]
pub use reexport_check::S; pub use reexport_check::S;

View File

@ -1,8 +1,8 @@
#![crate_name = "foo"] #![crate_name = "foo"]
// @has foo/index.html '//item-right[@class="docblock-short"]' "" // @has foo/index.html '//*[@class="item-right docblock-short"]' ""
// @!has foo/index.html '//item-right[@class="docblock-short"]' "Some text." // @!has foo/index.html '//*[@class="item-right docblock-short"]' "Some text."
// @!has foo/index.html '//item-right[@class="docblock-short"]' "let x = 12;" // @!has foo/index.html '//*[@class="item-right docblock-short"]' "let x = 12;"
/// ``` /// ```
/// let x = 12; /// let x = 12;

View File

@ -0,0 +1,25 @@
#![crate_name = "foo"]
// @has foo/index.html '//*[@class="item-right docblock-short"]/p' 'fooo'
// @!has foo/index.html '//*[@class="item-right docblock-short"]/p/h1' 'fooo'
// @has foo/fn.foo.html '//h1[@id="fooo"]/a[@href="#fooo"]' 'fooo'
/// # fooo
///
/// foo
pub fn foo() {}
// @has foo/index.html '//*[@class="item-right docblock-short"]/p' 'mooood'
// @!has foo/index.html '//*[@class="item-right docblock-short"]/p/h2' 'mooood'
// @has foo/foo/index.html '//h2[@id="mooood"]/a[@href="#mooood"]' 'mooood'
/// ## mooood
///
/// foo mod
pub mod foo {}
// @has foo/index.html '//*[@class="item-right docblock-short"]/p/a[@href=\
// "https://nougat.world"]/code' 'nougat'
/// [`nougat`](https://nougat.world)
pub struct Bar;

View File

@ -1,25 +0,0 @@
#![crate_name = "foo"]
// @has foo/index.html '//*[@class="docblock-short"]/p' 'fooo'
// @!has foo/index.html '//*[@class="docblock-short"]/p/h1' 'fooo'
// @has foo/fn.foo.html '//h1[@id="fooo"]/a[@href="#fooo"]' 'fooo'
/// # fooo
///
/// foo
pub fn foo() {}
// @has foo/index.html '//*[@class="docblock-short"]/p' 'mooood'
// @!has foo/index.html '//*[@class="docblock-short"]/p/h2' 'mooood'
// @has foo/foo/index.html '//h2[@id="mooood"]/a[@href="#mooood"]' 'mooood'
/// ## mooood
///
/// foo mod
pub mod foo {}
// @has foo/index.html '//*[@class="docblock-short"]/p/a[@href=\
// "https://nougat.world"]/code' 'nougat'
/// [`nougat`](https://nougat.world)
pub struct Bar;