A little app to serve my photography from my personal website

show tag list on blog index page

ericwood.org 3b966ca2 4dbd0668

Waiting for spindle ...
+33 -6
+11
src/blog.rs
··· 81 81 self.by_slug.values().cloned().collect() 82 82 } 83 83 84 + pub fn all_tags(&self) -> Vec<(String, usize)> { 85 + let mut tags: Vec<(String, usize)> = self 86 + .by_tag 87 + .iter() 88 + .map(|(k, v)| (k.clone(), v.len())) 89 + .collect(); 90 + tags.sort_by(|a, b| b.1.cmp(&a.1)); 91 + 92 + tags 93 + } 94 + 84 95 pub fn get_by_slug(&self, slug: &str) -> Option<Arc<BlogPost>> { 85 96 self.by_slug.get(slug).cloned() 86 97 }
+3 -1
src/routes/blog/index.rs
··· 20 20 } else { 21 21 state.blog_store.all() 22 22 }; 23 - let view = BlogIndex::new(posts); 23 + 24 + let tags = state.blog_store.all_tags(); 25 + let view = BlogIndex::new(posts, tags, query.tag.clone()); 24 26 let html = view.render(&state.reloader)?; 25 27 26 28 Ok(Html(html))
+7 -3
src/views/blog/index/mod.rs
··· 7 7 8 8 pub struct BlogIndex { 9 9 posts: Vec<Arc<BlogPost>>, 10 + tags: Vec<(String, usize)>, 11 + tag: Option<String>, 10 12 } 11 13 12 14 impl BlogIndex { 13 - pub fn new(posts: Vec<Arc<BlogPost>>) -> Self { 14 - Self { posts } 15 + pub fn new(posts: Vec<Arc<BlogPost>>, tags: Vec<(String, usize)>, tag: Option<String>) -> Self { 16 + Self { posts, tags, tag } 15 17 } 16 18 } 17 19 ··· 21 23 reloader, 22 24 "views/blog/index", 23 25 context! { 24 - posts => self.posts 26 + posts => self.posts, 27 + tags => self.tags, 28 + tag => self.tag, 25 29 }, 26 30 )?; 27 31
+12 -2
src/views/blog/index/template.jinja
··· 3 3 {% block title %}Blog{% endblock %} 4 4 5 5 {% block body %} 6 + Tags: 7 + <ul> 8 + {% for t in tags %} 9 + {% if t[0] != tag %} 10 + <li> 11 + <a href="/blog?tag={{ url_escape(t[0]) }}">{{ t[0] }} {{ t[1] }}</a> 12 + </li> 13 + {% endif %} 14 + {% endfor %} 15 + </ul> 6 16 <ul> 7 17 {% for post in posts %} 8 18 <li> 9 19 <a href="/blog/{{ post.slug }}">{{ post.title }}</a> 10 - {% for tag in post.tags %} 11 - <a href="/blog?tag={{ tag }}">{{ tag }}</a> 20 + {% for t in post.tags %} 21 + <a href="/blog?tag={{ url_escape(t) }}">{{ t }}</a> 12 22 {% endfor %} 13 23 </li> 14 24 {% endfor %}