summaryrefslogtreecommitdiffstats
path: root/front_end
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2020-03-03 12:37:27 +0000
committerKornel <kornel@geekhood.net>2020-03-10 00:43:41 +0000
commitc516d4775a9d1db845db69e3917c371f894c1e50 (patch)
tree475d31da6fda0ce059b9e9e0b0372ead285735c9 /front_end
parent68044807289ac950b94fa0d02c58d7531b127863 (diff)
author
Diffstat (limited to 'front_end')
-rw-r--r--front_end/src/author_page.rs24
-rw-r--r--front_end/templates/author.rs.html37
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>