~michalr/blog2gmi

d17ca5a0598440b00ab5ab88f04982be581afae0 — Michał Rudowicz 2 years ago 0720b60
Initial generation of the index page
2 files changed, 35 insertions(+), 5 deletions(-)

M src/main.cr
A src/templates.cr
M src/main.cr => src/main.cr +20 -5
@@ 1,8 1,10 @@
require "markd"
require "./gmi_renderer"
require "./extract_jekyll_front_matter"
require "./templates"
require "map_parallel"
require "option_parser"
require "crustache"

posts_dir = "."



@@ 26,7 28,7 @@ def g(matched, field)
  return 0
end

Dir.new(posts_dir).entries
entries_list = Dir.new(posts_dir).entries
  .select! { |x| /\.(md|markdown)$/ =~ x }
  .map_parallel do |fname|
    entry = File.read(Path.new(posts_dir, fname))


@@ 43,8 45,21 @@ Dir.new(posts_dir).entries
      g(matched_publication_date, "day"))
    {fname, front_matter, article_date, rendered}
  end
  .each do |fname, front_matter, article_date, rendered|
    puts "======= #{fname} (#{article_date}) : #{front_matter["title"]?} =======\n"
    puts "#{front_matter}\n"
    puts "#{rendered}\n"
  .sort { |a, b| b[2] <=> a[2] } # newest to oldest
  .map do |fname, front_matter, article_date, rendered|
    {
      "url"      => fname,
      "title"    => front_matter["title"],
      "year"     => article_date.year,
      "month"    => article_date.month,
      "day"      => article_date.day,
      "rendered" => rendered,
    }
  end

model = {
  "entries" => entries_list,
}
template = Crustache.parse front_matter_tpl()

puts Crustache.render template, model

A src/templates.cr => src/templates.cr +15 -0
@@ 0,0 1,15 @@
def front_matter_tpl
  tpl = <<-FRONT_MATTER_TPL
# fleg gemlog

This is basically a Gemini version of my blog:

=> https://blog.fl9.eu/

## Gemlog entries

{{#entries}}
=> {{url}} {{year}}-{{month}}-{{day}} - {{title}}
{{/entries}}
FRONT_MATTER_TPL
end