From e72014b40fe89928d310aa7bcc09ecc07e0371cd Mon Sep 17 00:00:00 2001 From: ajuvercr Date: Mon, 12 Oct 2020 19:40:15 +0200 Subject: [PATCH] Add tags filter to blog posts --- Rules | 2 ++ content/blog/19-20/corona.md | 2 ++ content/blog/19-20/vleor.md | 2 ++ content/blog/20-21/bestuur20_21.md | 3 ++- content/blog/20-21/wij-coden-voort.md | 3 +++ layouts/blogs.erb | 25 +++++++++++++++++---- lib/helpers/archives.rb | 32 +++++++++++++++++++++++++-- lib/helpers/preprocess.rb | 19 ++++++++++++++-- 8 files changed, 79 insertions(+), 9 deletions(-) diff --git a/Rules b/Rules index e6fb788..86f2da2 100644 --- a/Rules +++ b/Rules @@ -24,6 +24,8 @@ preprocess do update_blog_attributes create_yearly_items('Blog') create_yearly_items('Events') + create_tagly_items('Blog') + create_tagly_items('Events') convert_event_time_to_timestamps all_events.each do |event| diff --git a/content/blog/19-20/corona.md b/content/blog/19-20/corona.md index d5e9395..9fbe8ab 100644 --- a/content/blog/19-20/corona.md +++ b/content/blog/19-20/corona.md @@ -3,6 +3,8 @@ title: "Zeus en Corona" created_at: 11-03-2020 description: Corona en de invloed ervan op Zeus WPI author: Robbe Van Herck +tags: + - Corona --- Beste Zeussers en Zeusinnen, diff --git a/content/blog/19-20/vleor.md b/content/blog/19-20/vleor.md index b10a6d7..7bcdef1 100644 --- a/content/blog/19-20/vleor.md +++ b/content/blog/19-20/vleor.md @@ -4,6 +4,8 @@ title: "Het vervolg op het avontuur van de Vleor" created_at: 07-07-2020 description: Eindelijk, de Zeuskelder heeft weer een nieuwe vloer! toc: true +tags: + - vloer --- **vleor** (_de; m;_ meervoud: _vleoren_) diff --git a/content/blog/20-21/bestuur20_21.md b/content/blog/20-21/bestuur20_21.md index b962fe4..bbbcd8f 100644 --- a/content/blog/20-21/bestuur20_21.md +++ b/content/blog/20-21/bestuur20_21.md @@ -3,6 +3,8 @@ title: "Zeusbestuur 2020-2021" created_at: 6-7-2020 description: "Het gloriZeuse nieuw bestuur" author: "Robbe Van Herck" +tags: + - Bestuur --- > Hallo mijn naam is Jasper en ik zou nog steeds sysadmin willen blijven @@ -25,4 +27,3 @@ Voor iedereen die niet op de verkiezingen was of de uitslag vergeten is, hier ee | Evenementen | Ruben De Facq | Veel succes en veel plezier van jullie oud bestuur. Het gaat gegarandeerd onvergetelijk worden! 🧡 - diff --git a/content/blog/20-21/wij-coden-voort.md b/content/blog/20-21/wij-coden-voort.md index 645c0bc..daef3a9 100644 --- a/content/blog/20-21/wij-coden-voort.md +++ b/content/blog/20-21/wij-coden-voort.md @@ -3,6 +3,9 @@ title: "Wij coden voort" created_at: 21-7-2020 description: "We mogen de kelder opnieuw openen" author: "Jasper Devreker" +tags: + - Corona + - General update --- We hebben via het WVK[^wvk] doorgekregen dat we onze geliefde kelder terug mogen openen. diff --git a/layouts/blogs.erb b/layouts/blogs.erb index 41f6de0..78bcea3 100644 --- a/layouts/blogs.erb +++ b/layouts/blogs.erb @@ -19,24 +19,41 @@ <% end %> <% end %> + +
- <% posts_in_year(item[:academic_year]).each_with_index.select {|e, i| i.even?}.map(&:first).each do |post| %> + <% posts_in_year_or_with_tag(item).each_with_index.select {|e, i| i.even?}.map(&:first).each do |post| %> <%= render '/partials/_blog_preview.*', post: post %> <% end %>
- <% posts_in_year(item[:academic_year]).each_with_index.reject {|e, i| i.even?}.map(&:first).each do |post| %> + <% posts_in_year_or_with_tag(item).each_with_index.reject {|e, i| i.even?}.map(&:first).each do |post| %> <%= render '/partials/_blog_preview.*', post: post %> <% end %>
-
- <% if posts_in_year(@item[:academic_year]).empty? %> + <% if posts_in_year_or_with_tag(item).empty? %>

Sorry.

No blog posts yet this year.

diff --git a/lib/helpers/archives.rb b/lib/helpers/archives.rb index 68ec04f..7915c51 100644 --- a/lib/helpers/archives.rb +++ b/lib/helpers/archives.rb @@ -3,8 +3,8 @@ module ArchiveHelper # Set.to_a to prevent duplicates Set.new(items .find_all('/blog/*/*') - .map { |i| i.identifier.to_s[/\d\d-\d\d/] }) - .to_a + .map { |i| i.identifier.to_s.split('/')[-2] }) + .to_a .sort .push(@config[:academic_year]) .uniq @@ -14,6 +14,20 @@ module ArchiveHelper academic_years.reverse.map { |y| [y, items["/blog/#{y}.html"]] } end + def tags + # Set.to_a to prevent duplicates + Set.new(items + .find_all('/blog/*/*') + .flat_map { |i| i[:tags] || [] }) + .to_a + .sort + .uniq + end + + def tag_blog_items + tags.map { |y| [y, items["/blog/#{y}.html"]]} + end + def pretty_year(year) year = year.scan(/\d\d/) "'#{year[0]} - '#{year[1]}" @@ -22,4 +36,18 @@ module ArchiveHelper def posts_in_year(y) items.find_all("/blog/#{y}/*").sort_by { |x| x[:created_at] }.reverse end + + def posts_with_tag(tag) + items + .find_all('/blog/*/*') + .filter{|i| (i[:tags] || []).include? tag } + end + + def posts_in_year_or_with_tag(item) + if item[:is_yearly] + posts_in_year(item[:academic_year]) + else + posts_with_tag(item[:tag]) + end + end end diff --git a/lib/helpers/preprocess.rb b/lib/helpers/preprocess.rb index 07ff4a9..a6eb65e 100644 --- a/lib/helpers/preprocess.rb +++ b/lib/helpers/preprocess.rb @@ -56,7 +56,7 @@ module PreprocessHelper i.update_attributes( # Tag all posts with article (for Blogging helper) kind: 'article', - academic_year: i.identifier.to_s[/\d\d-\d\d/], + academic_year: i.identifier.to_s[/\d-\d/], created_at: Date.parse(i[:created_at]) ) end @@ -72,7 +72,7 @@ module PreprocessHelper years.each do |year| @items.create( '', - { academic_year: year, title: type }, + { academic_year: year, title: type, is_yearly: true }, "/#{type.downcase}/#{year}.html" ) end @@ -84,6 +84,21 @@ module PreprocessHelper ) end + def create_tagly_items(type) + type = type.to_s + tags = @items.find_all("/#{type.downcase}/*/*") + .flat_map { |i| i[:tags] || [] } + .uniq + + tags.each do |tag| + @items.create( + '', + { tag: tag, title: type, is_yearly: false }, + "/#{type.downcase}/#{tag}.html" + ) + end + end + def convert_event_time_to_timestamps @items.find_all('/events/*/*.md').each do |event| # HACK: Strings in a format like "2017-10-05T20:45:00+0200" automatically get converted to Time