diff options
author | Kornel <kornel@geekhood.net> | 2020-03-03 12:37:27 +0000 |
---|---|---|
committer | Kornel <kornel@geekhood.net> | 2020-03-10 00:43:41 +0000 |
commit | c516d4775a9d1db845db69e3917c371f894c1e50 (patch) | |
tree | 475d31da6fda0ce059b9e9e0b0372ead285735c9 /front_end | |
parent | 68044807289ac950b94fa0d02c58d7531b127863 (diff) |
author
Diffstat (limited to 'front_end')
-rw-r--r-- | front_end/src/author_page.rs | 24 | ||||
-rw-r--r-- | front_end/templates/author.rs.html | 37 |
2 files changed, 53 insertions, 8 deletions
diff --git a/front_end/src/author_page.rs b/front_end/src/author_page.rs index bf3a548..5bb2ae2 100644 --- a/front_end/src/author_page.rs +++ b/front_end/src/author_page.rs @@ -1,10 +1,15 @@ -use crate::templates; use crate::Page; +use crate::templates; +use futures::stream::StreamExt; +use kitchen_sink::CrateOwnerRow; use kitchen_sink::CResult; use kitchen_sink::KitchenSink; use kitchen_sink::RichAuthor; +use kitchen_sink::RichCrateVersion; +use kitchen_sink::UserOrg; use kitchen_sink::UserType; use render_readme::Renderer; +use std::sync::Arc; // pub struct User { // pub id: u32, @@ -23,17 +28,32 @@ pub struct AuthorPage<'a> { pub aut: &'a RichAuthor, pub kitchen_sink: &'a KitchenSink, pub markup: &'a Renderer, + pub crates: Vec<(Arc<RichCrateVersion>, CrateOwnerRow)>, + pub orgs: Vec<UserOrg>, } impl<'a> AuthorPage<'a> { pub async fn new(aut: &'a RichAuthor, kitchen_sink: &'a KitchenSink, markup: &'a Renderer) -> CResult<AuthorPage<'a>> { dbg!(&aut); - let crates = kitchen_sink.crates_of_author(aut).await?; + let orgs = kitchen_sink.user_github_orgs(&aut.github.login).await?.unwrap_or_default(); + let mut rows = kitchen_sink.crates_of_author(aut).await?; + rows.sort_by(|a,b| b.latest_release.cmp(&a.latest_release)); + rows.truncate(200); + dbg!(&rows); + + let crates = futures::stream::iter(rows.into_iter()) + .filter_map(|row| async move { + let c = kitchen_sink.rich_crate_version_async(&row.origin).await.map_err(|e| eprintln!("{}", e)).ok()?; + Some((c, row)) + }) + .collect().await; Ok(Self { + crates, aut, kitchen_sink, markup, + orgs, }) } diff --git a/front_end/templates/author.rs.html b/front_end/templates/author.rs.html index 244ddf2..bc95198 100644 --- a/front_end/templates/author.rs.html +++ b/front_end/templates/author.rs.html @@ -2,13 +2,13 @@ @use crate::Urler; @use crate::AuthorPage; -@(url: &Urler, c: &AuthorPage) +@(url: &Urler, p: &AuthorPage) -@:base(&c.page(), { +@:base(&p.page(), { <header id="author"> <div class="inner-col"> <div class="breadcrumbs"> - <h1><a href="/">Lib.rs</a></h1> › @if c.is_org() { + <h1><a href="/">Lib.rs</a></h1> › @if p.is_org() { Orgs } else { Users @@ -16,17 +16,42 @@ </div> <h2> - @"@"@c.login() + @"@"@p.login() </h2> <nav><ul> - <li><a href="@c.github_url()">GitHub</a></li> + <li><a href="@p.github_url()">GitHub</a></li> </ul></nav> </div> </header> <main> <div class="inner-col"> - Hi + @if !p.orgs.is_empty() { + <section>Member of GitHub orgs</section> + <ul> + @for org in &p.orgs { + <li><a href="@org.url">@login</a></li> + } + </ul> + } + <section> + <h3>Crates by @p.aut.name()</h3> + <ul class=crates-list> + @for (k, r) in &p.crates { + <li> + <a href="@url.krate(&k)"> + <div class=h> + <h4> + @k.short_name() + </h4> + </div> + <div class=meta> + </div> + </a> + </li> + } + </ul> + </section> </div> </main> </div> |