Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions crates/bin/docs_rs_web/src/handlers/releases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,7 @@ pub(crate) async fn build_queue_handler(
#[cfg(test)]
mod tests {
use super::*;
use crate::page::web_page::AddCspNonce;
use crate::testing::{
AxumResponseTestExt, AxumRouterTestExt, TestEnvironment, TestEnvironmentExt as _,
async_wrapper,
Expand Down Expand Up @@ -2026,6 +2027,34 @@ mod tests {
});
}

#[test]
fn home_page_description_title_escapes_quotes() {
let description = r#"A "quoted" crate description"#;
let mut page = HomePage {
recent_releases: vec![Release {
name: FOO,
version: V1,
description: Some(description.into()),
target_name: None,
rustdoc_status: true,
build_time: None,
stars: 0,
has_unyanked_releases: Some(true),
}],
};

let html =
kuchikiki::parse_html().one(page.render_with_csp_nonce("test-nonce".into()).unwrap());
let description_element = html
.select_first(".recent-releases-container .description")
.expect("missing release description");

assert_eq!(
description_element.attributes.borrow().get("title"),
Some(description),
);
}

#[test]
fn home_page_links() {
async_wrapper(|env| async move {
Expand Down
3 changes: 2 additions & 1 deletion crates/bin/docs_rs_web/templates/core/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ <h1 class="brand">{{ crate::icons::IconCubes.render_solid(false, false, "") }} D
<div class="pure-u-1 pure-u-sm-6-24 pure-u-md-5-24 name">
{{- release.name }}-{{ release.version -}}
</div>
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description">
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description"
title="{{ release.description.as_deref().unwrap_or_default()|escape }}">
{{- release.description.as_deref().unwrap_or_default() -}}
</div>

Expand Down
9 changes: 6 additions & 3 deletions crates/bin/docs_rs_web/templates/releases/releases.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@
<div class="release">
<div class="pure-g">
<div class="pure-u-1 pure-u-sm-6-24 pure-u-md-5-24 name not-available">{{ name }}</div>
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description">Documentation not available on docs.rs</div>
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description"
title="Documentation not available on docs.rs">Documentation not available on docs.rs</div>
</div>
</div>
{%- when ReleaseStatus::External(release) -%}
Expand All @@ -46,7 +47,8 @@
{{- release.name -}}
</div>

<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description">
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description"
title="{{ release.description|escape }}">
{{- release.description -}}
</div>

Expand Down Expand Up @@ -81,7 +83,8 @@
{%- endif -%}
</div> {#- -#}

<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description">
<div class="pure-u-1 pure-u-sm-14-24 pure-u-md-16-24 description"
title="{{ release.description.as_deref().unwrap_or_default()|escape }}">
{{- release.description.as_deref().unwrap_or_default() -}}
</div>

Expand Down
7 changes: 0 additions & 7 deletions crates/bin/docs_rs_web/templates/style/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -389,13 +389,6 @@ div.recent-releases-container {
}
}

.description:hover {
@media #{$media-sm} {
overflow: visible;
white-space: normal;
}
}

.date,
.duration,
.memory {
Expand Down
12 changes: 12 additions & 0 deletions gui-tests/long-crate-description.goml
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,15 @@ store-property: (|description_selector|, {"scrollWidth": description_width})
// It should be smaller due to padding, but if it overflows it'll be wider than the screen anyway.
assert-false: |description_width| > |screen_width|

// Desktop release descriptions are truncated, but hovering them should not change
// the row height and make the release list jump around.
set-window-size: (1200, 800)
store-value: (release_selector, "div.recent-releases-container a.release")
set-text: (|description_selector|, "A very long crate description that should remain on one line when hovered instead of expanding and moving nearby release rows")

store-property: (|release_selector|, {"clientHeight": release_height})
move-cursor-to: |description_selector|
store-property: (|release_selector|, {"clientHeight": release_height_after_hover})

assert: |release_height_after_hover| == |release_height|

Loading