From ef82c90f572fa42dae41c6d20d9a3616b01795cd Mon Sep 17 00:00:00 2001 From: vonavi Date: Wed, 2 Jul 2014 12:22:52 +0300 Subject: [PATCH] Generator for game reviews added. --- _plugins/generate_reviews.rb | 84 ++++++++++++++++++++++++++++++++++++ reviews/index.md | 3 -- 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 _plugins/generate_reviews.rb delete mode 100644 reviews/index.md diff --git a/_plugins/generate_reviews.rb b/_plugins/generate_reviews.rb new file mode 100644 index 0000000..0f8a745 --- /dev/null +++ b/_plugins/generate_reviews.rb @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +module Jekyll + class ReviewsGenerator < Generator + safe true + priority :low + + # Generates the reviews file + def generate(site) + @buffer = '' + + # Create the destination folder if necessary + reviews_dest = File.join(site.dest, 'reviews') + FileUtils.mkdir_p(reviews_dest) unless File.directory?(reviews_dest) + + # Write the contents of reviews file + File.open(File.join(reviews_dest, 'index.html'), 'w') do |f| + generate_header + generate_content site + f.write @buffer + f.close + end + + # Add the reviews file, so it won't be cleaned + site.pages << Page.new(site, site.dest, 'reviews', 'index.html') + end + + # Add the YAML header + def generate_header + @buffer += "---\nlayout: page\n---\n" + end + + # Add a string containing the review entries + def generate_content(site) + site.posts.reverse_each do |post| + review_entry(site, post) unless post.data['pgn'].nil? + end + end + + # Creates a review entry from the given post + def review_entry(site, post) + # Creates the link to post + @buffer += "\n

" + @buffer += "#{post.title}" + @buffer += "

\n" + + @buffer += "
\n" + + # Creates the date of post + post_date = post.date.strftime("%d %B %Y") + @buffer += "
Дата:
#{post_date}
\n" + + pgn = post.data['pgn'] + if pgn =~ /^\// + none, year, tournament, basename = pgn.split '/' + else + year, tournament, basename = pgn.split '/' + end + + # Finds the tournament that the game was played in + catch :trn_found do + site.data['tournaments'].each do |entry| + entry['events'].each do |trn| + # Remove the trailing slash from the tournament directory if needed + if entry['year'] == year.to_i && trn['dir'].sub(/\/$/, '') == tournament + trn_link = "" + trn['title'] + "" + @buffer += "
Турнир:
#{trn_link}
\n" + throw :trn_found + end + end + end + end + + # Creates the game info + white, black = basename[11..-1].sub(/-with-comments\.pgn$/, '').split('-vs-') + white_link = "#{white}" + black_link = "#{black}" + game_date_str = basename[0..9] + game_date = Time.parse(game_date_str).strftime("%d %b %Y") + @buffer += "
Игра:
#{white_link} vs. #{black_link} (#{game_date})
\n" + + @buffer += "
\n" + end + end +end diff --git a/reviews/index.md b/reviews/index.md deleted file mode 100644 index 0d6905d..0000000 --- a/reviews/index.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -layout: default ----