From 0a989d0810805daf7f209052e90a9cae8d4796a3 Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Thu, 8 Oct 2020 19:13:39 +0200 Subject: [PATCH 1/7] Move docs.rs internal navbar links to the right --- templates/header/topbar.html | 4 ++-- templates/style/_navbar.scss | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/templates/header/topbar.html b/templates/header/topbar.html index 4092f5962..329ef03d2 100644 --- a/templates/header/topbar.html +++ b/templates/header/topbar.html @@ -8,7 +8,7 @@ - {%- endif -%} - {# + + {%- endif -%} - If this is the latest release and it's been yanked, just display a warning #} + {# If this is the latest release and it's been yanked, just display a warning #} {%- if is_latest_version and krate.yanked -%}
  • From 609de3276ad38e495ab18cd01b6771d4b97e1cd7 Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Mon, 12 Oct 2020 20:46:03 +0200 Subject: [PATCH 7/7] Include crate specific navbar section on source and builds pages --- src/web/crate_details.rs | 18 +- src/web/mod.rs | 53 +++++- src/web/rustdoc.rs | 20 ++- src/web/source.rs | 6 +- templates/crate/builds.html | 10 ++ templates/crate/details.html | 3 +- templates/crate/source.html | 11 ++ templates/rustdoc/topbar.html | 305 +++++++++++++++++----------------- 8 files changed, 243 insertions(+), 183 deletions(-) diff --git a/src/web/crate_details.rs b/src/web/crate_details.rs index 4b2cd0d1b..15cc60ba8 100644 --- a/src/web/crate_details.rs +++ b/src/web/crate_details.rs @@ -39,8 +39,6 @@ pub struct CrateDetails { github_issues: Option, pub(crate) metadata: MetaData, is_library: bool, - yanked: bool, - pub(crate) doc_targets: Vec, license: Option, documentation_url: Option, total_items: Option, @@ -144,18 +142,8 @@ impl CrateDetails { rustdoc_status: krate.get("rustdoc_status"), target_name: krate.get("target_name"), default_target: krate.get("default_target"), - }; - - let doc_targets = { - let data: Value = krate.get("doc_targets"); - data.as_array() - .map(|array| { - array - .iter() - .filter_map(|item| item.as_str().map(|s| s.to_owned())) - .collect() - }) - .unwrap_or_else(Vec::new) + doc_targets: MetaData::parse_doc_targets(krate.get("doc_targets")), + yanked: krate.get("yanked"), }; let documented_items: Option = krate.get("documented_items"); @@ -189,8 +177,6 @@ impl CrateDetails { github_issues: krate.get("github_issues"), metadata, is_library: krate.get("is_library"), - yanked: krate.get("yanked"), - doc_targets, license: krate.get("license"), documentation_url: krate.get("documentation_url"), documented_items: documented_items.map(|v| v as f32), diff --git a/src/web/mod.rs b/src/web/mod.rs index 64136a08f..642251f79 100644 --- a/src/web/mod.rs +++ b/src/web/mod.rs @@ -3,6 +3,7 @@ pub(crate) mod page; use log::{debug, info}; +use serde_json::Value; /// ctry! (cratesfyitry) is extremely similar to try! and itry! /// except it returns an error page response instead of plain Err. @@ -542,6 +543,8 @@ pub(crate) struct MetaData { pub(crate) target_name: Option, pub(crate) rustdoc_status: bool, pub(crate) default_target: String, + pub(crate) doc_targets: Vec, + pub(crate) yanked: bool, } impl MetaData { @@ -553,7 +556,9 @@ impl MetaData { releases.description, releases.target_name, releases.rustdoc_status, - releases.default_target + releases.default_target, + releases.doc_targets, + releases.yanked FROM releases INNER JOIN crates ON crates.id = releases.crate_id WHERE crates.name = $1 AND releases.version = $2", @@ -570,8 +575,22 @@ impl MetaData { target_name: row.get(3), rustdoc_status: row.get(4), default_target: row.get(5), + doc_targets: MetaData::parse_doc_targets(row.get(6)), + yanked: row.get(7), }) } + + fn parse_doc_targets(targets: Value) -> Vec { + targets + .as_array() + .map(|array| { + array + .iter() + .filter_map(|item| item.as_str().map(|s| s.to_owned())) + .collect() + }) + .unwrap_or_else(Vec::new) + } } #[derive(Debug, Clone, PartialEq, Serialize)] @@ -840,6 +859,11 @@ mod test { target_name: None, rustdoc_status: true, default_target: "x86_64-unknown-linux-gnu".to_string(), + doc_targets: vec![ + "x86_64-unknown-linux-gnu".to_string(), + "arm64-unknown-linux-gnu".to_string(), + ], + yanked: false, }; let correct_json = json!({ @@ -848,19 +872,29 @@ mod test { "description": "serde does stuff", "target_name": null, "rustdoc_status": true, - "default_target": "x86_64-unknown-linux-gnu" + "default_target": "x86_64-unknown-linux-gnu", + "doc_targets": [ + "x86_64-unknown-linux-gnu", + "arm64-unknown-linux-gnu", + ], + "yanked": false, }); assert_eq!(correct_json, serde_json::to_value(&metadata).unwrap()); - metadata.target_name = Some("x86_64-apple-darwin".to_string()); + metadata.target_name = Some("serde_lib_name".to_string()); let correct_json = json!({ "name": "serde", "version": "1.0.0", "description": "serde does stuff", - "target_name": "x86_64-apple-darwin", + "target_name": "serde_lib_name", "rustdoc_status": true, - "default_target": "x86_64-unknown-linux-gnu" + "default_target": "x86_64-unknown-linux-gnu", + "doc_targets": [ + "x86_64-unknown-linux-gnu", + "arm64-unknown-linux-gnu", + ], + "yanked": false, }); assert_eq!(correct_json, serde_json::to_value(&metadata).unwrap()); @@ -870,9 +904,14 @@ mod test { "name": "serde", "version": "1.0.0", "description": null, - "target_name": "x86_64-apple-darwin", + "target_name": "serde_lib_name", "rustdoc_status": true, - "default_target": "x86_64-unknown-linux-gnu" + "default_target": "x86_64-unknown-linux-gnu", + "doc_targets": [ + "x86_64-unknown-linux-gnu", + "arm64-unknown-linux-gnu", + ], + "yanked": false, }); assert_eq!(correct_json, serde_json::to_value(&metadata).unwrap()); diff --git a/src/web/rustdoc.rs b/src/web/rustdoc.rs index 063e11df3..99a32b829 100644 --- a/src/web/rustdoc.rs +++ b/src/web/rustdoc.rs @@ -5,7 +5,7 @@ use crate::{ utils, web::{ crate_details::CrateDetails, error::Nope, file::File, match_version, - metrics::RenderingTimesRecorder, redirect_base, MatchSemver, + metrics::RenderingTimesRecorder, redirect_base, MatchSemver, MetaData, }, Config, Metrics, Storage, }; @@ -186,6 +186,7 @@ struct RustdocPage { is_latest_version: bool, is_prerelease: bool, krate: CrateDetails, + metadata: MetaData, } impl RustdocPage { @@ -390,7 +391,7 @@ pub fn rustdoc_html_server_handler(req: &mut Request) -> IronResult { "/{}/{}/{}", name, latest_version, - path_for_version(&latest_path, &krate.doc_targets, &storage, &config) + path_for_version(&latest_path, &krate.metadata.doc_targets, &storage, &config) ) } else { format!("/crate/{}/{}", name, latest_version) @@ -407,7 +408,12 @@ pub fn rustdoc_html_server_handler(req: &mut Request) -> IronResult { // Drop the `rustdoc/:crate/:version[/:platform]` prefix inner_path.drain(..3).for_each(drop); - let target = if inner_path.len() > 1 && krate.doc_targets.iter().any(|s| s == inner_path[0]) + let target = if inner_path.len() > 1 + && krate + .metadata + .doc_targets + .iter() + .any(|s| s == inner_path[0]) { let mut target = inner_path.remove(0).to_string(); target.push('/'); @@ -427,6 +433,7 @@ pub fn rustdoc_html_server_handler(req: &mut Request) -> IronResult { inner_path, is_latest_version, is_prerelease, + metadata: krate.metadata.clone(), krate, } .into_response(&file.0.content, config.max_parse_memory, req, &path) @@ -513,7 +520,12 @@ pub fn target_redirect_handler(req: &mut Request) -> IronResult { file_path }; - let path = path_for_version(&file_path, &crate_details.doc_targets, &storage, &config); + let path = path_for_version( + &file_path, + &crate_details.metadata.doc_targets, + &storage, + &config, + ); let url = format!( "{base}/{name}/{version}/{path}", base = base, diff --git a/src/web/source.rs b/src/web/source.rs index 587092fe1..30bb48fa7 100644 --- a/src/web/source.rs +++ b/src/web/source.rs @@ -56,7 +56,9 @@ impl FileList { releases.target_name, releases.rustdoc_status, releases.files, - releases.default_target + releases.default_target, + releases.doc_targets, + releases.yanked FROM releases LEFT OUTER JOIN crates ON crates.id = releases.crate_id WHERE crates.name = $1 AND releases.version = $2", @@ -133,6 +135,8 @@ impl FileList { target_name: rows[0].get(3), rustdoc_status: rows[0].get(4), default_target: rows[0].get(6), + doc_targets: MetaData::parse_doc_targets(rows[0].get(7)), + yanked: rows[0].get(8), }, files: file_list, }) diff --git a/templates/crate/builds.html b/templates/crate/builds.html index 47d5520fd..e3b011df2 100644 --- a/templates/crate/builds.html +++ b/templates/crate/builds.html @@ -5,6 +5,16 @@ {{ macros::doc_title(name=metadata.name, version=metadata.version) }} {%- endblock title -%} +{%- block topbar -%} + {%- set latest_version = "" -%} + {%- set latest_path = "" -%} + {%- set target = "" -%} + {%- set inner_path = metadata.target_name ~ "/index.html" -%} + {%- set is_latest_version = true -%} + {%- set is_prerelease = false -%} + {%- include "rustdoc/topbar.html" -%} +{%- endblock topbar -%} + {%- block header -%} {{ navigation::package_navigation(metadata=metadata, active_tab="builds") }} {%- endblock header -%} diff --git a/templates/crate/details.html b/templates/crate/details.html index 685b19569..b1d8a0f83 100644 --- a/templates/crate/details.html +++ b/templates/crate/details.html @@ -6,8 +6,7 @@ {%- endblock title -%} {%- block topbar -%} - {%- set krate = details -%} - {%- set skip_package_details = true -%} + {%- set metadata = details.metadata -%} {%- set latest_version = "" -%} {%- set latest_path = "" -%} {%- set target = "" -%} diff --git a/templates/crate/source.html b/templates/crate/source.html index cf5c32bb0..4312e924d 100644 --- a/templates/crate/source.html +++ b/templates/crate/source.html @@ -5,6 +5,17 @@ {{ macros::doc_title(name=file_list.metadata.name, version=file_list.metadata.version) }} {%- endblock title -%} +{%- block topbar -%} + {%- set metadata = file_list.metadata -%} + {%- set latest_version = "" -%} + {%- set latest_path = "" -%} + {%- set target = "" -%} + {%- set inner_path = metadata.target_name ~ "/index.html" -%} + {%- set is_latest_version = true -%} + {%- set is_prerelease = false -%} + {%- include "rustdoc/topbar.html" -%} +{%- endblock topbar -%} + {%- block header -%} {# Set the active tab to the `source` tab #} {{ navigation::package_navigation(metadata=file_list.metadata, active_tab="source") }} diff --git a/templates/rustdoc/topbar.html b/templates/rustdoc/topbar.html index acfdc3df7..f7c44dea1 100644 --- a/templates/rustdoc/topbar.html +++ b/templates/rustdoc/topbar.html @@ -1,178 +1,177 @@ {%- import "macros.html" as macros -%} {# The url of the current release, `/crate/:name/:version` #} -{%- set crate_url = "/crate/" ~ krate.name ~ "/" ~ krate.version -%} +{%- set crate_url = "/crate/" ~ metadata.name ~ "/" ~ metadata.version -%} {%- include "header/topbar_begin.html" -%}