diff options
author | Kornel <kornel@geekhood.net> | 2020-02-22 21:28:14 +0000 |
---|---|---|
committer | Kornel <kornel@geekhood.net> | 2020-02-22 21:28:32 +0000 |
commit | 56df51e0c0e10f92d57a37dd5f099edf31909d2d (patch) | |
tree | 05ce82a41139996a1e93186e85012f9060f52226 /front_end | |
parent | 0e5156313e9c9a893a554b9f27021a06aa3eb60c (diff) |
Rev deps polish
Diffstat (limited to 'front_end')
-rw-r--r-- | front_end/src/reverse_dependencies.rs | 44 | ||||
-rw-r--r-- | front_end/templates/reverse_dependencies.rs.html | 4 |
2 files changed, 43 insertions, 5 deletions
diff --git a/front_end/src/reverse_dependencies.rs b/front_end/src/reverse_dependencies.rs index 8338ff6..fa97359 100644 --- a/front_end/src/reverse_dependencies.rs +++ b/front_end/src/reverse_dependencies.rs @@ -123,8 +123,12 @@ impl<'a> CratePageRevDeps<'a> { // version, deps, normalized popularity 0..100 pub fn version_breakdown(&self) -> Vec<DlRow> { - // fixmeL always add current ver there - let mut ver: Vec<_> = self.stats.map(|s| s.versions.iter().map(|(k, v)| { + let stats = match self.stats { + None => return Vec::new(), + Some(s) => s, + }; + + let mut ver: Vec<_> = stats.versions.iter().map(|(k, v)| { DlRow { ver: k.to_semver(), num: *v, @@ -136,7 +140,41 @@ impl<'a> CratePageRevDeps<'a> { num_str: String::new(), dl_str: (String::new(),""), } - }).collect()).unwrap_or_default(); + }).collect(); + + // Ensure the (latest) version is always included + let own_ver_semver: SemVer = self.ver.version().parse().expect("semver2"); + if !ver.iter().any(|v| v.ver == own_ver_semver) { + ver.push(DlRow { + ver: own_ver_semver, + num: 0, + perc: 0., + num_width: 0., + dl: 0, + dl_perc: 0., + dl_num_width: 0., + num_str: String::new(), + dl_str: (String::new(),""), + }); + } + + // Download data may be older and not match exactly, so at least avoid + // accidentally omitting the most popular version + if let Some(biggest) = self.downloads_by_ver.iter().max_by_key(|v| v.1) { + if !ver.iter().any(|v| v.ver == biggest.0) { + ver.push(DlRow { + ver: biggest.0.clone(), + num: 0, + perc: 0., + num_width: 0., + dl: 0, + dl_perc: 0., + dl_num_width: 0., + num_str: String::new(), + dl_str: (String::new(),""), + }); + } + } // align selected versions and their (or older) downloads let mut dl_vers = self.downloads_by_ver.iter().rev().peekable(); diff --git a/front_end/templates/reverse_dependencies.rs.html b/front_end/templates/reverse_dependencies.rs.html index 17ca7d9..9df66cc 100644 --- a/front_end/templates/reverse_dependencies.rs.html +++ b/front_end/templates/reverse_dependencies.rs.html @@ -41,7 +41,7 @@ <thead><th>Number of dependers</th><th>@p.ver.capitalized_name() version</th><th>Downloads/month</th></thead> @for x in p.version_breakdown() { <tr> - <td class="rv">@if x.perc <= x.num_width {@x.num_str} <span style="width:@x.perc%">@if x.perc > x.num_width {@x.num_str}</span></td> + <td class="rv">@if x.num == 0 || x.perc <= x.num_width {@x.num_str} @if x.num > 0 {<span style="width:@x.perc%">@if x.perc > x.num_width {@x.num_str}</span>}</td> <th>@x.ver</th> <td class="dl"> @if x.dl > 0 { @@ -82,7 +82,7 @@ <footer> <div class="inner-col"> - <p>Back to <a href="@url.krate(&p.ver)" rel="up">@p.ver.capitalized_name()</a>.</p> + <p><a href="/revdeps">How this data is computed</a>. Back to <a href="@url.krate(&p.ver)" rel="up">@p.ver.capitalized_name()</a>.</p> </div> </footer> }) |