summaryrefslogtreecommitdiffstats
path: root/front_end
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2020-02-22 21:28:14 +0000
committerKornel <kornel@geekhood.net>2020-02-22 21:28:32 +0000
commit56df51e0c0e10f92d57a37dd5f099edf31909d2d (patch)
tree05ce82a41139996a1e93186e85012f9060f52226 /front_end
parent0e5156313e9c9a893a554b9f27021a06aa3eb60c (diff)
Rev deps polish
Diffstat (limited to 'front_end')
-rw-r--r--front_end/src/reverse_dependencies.rs44
-rw-r--r--front_end/templates/reverse_dependencies.rs.html4
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>
})