From c5688d055f4f2916d42d32761e2ce5c60ef4f029 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Sat, 9 Aug 2014 23:37:05 +0200 Subject: [PATCH] jekyll-timago --- Gemfile | 1 + _config.yml | 3 +- _src/_plugins/timeago.rb | 109 --------------------------------------- 3 files changed, 3 insertions(+), 110 deletions(-) delete mode 100644 _src/_plugins/timeago.rb diff --git a/Gemfile b/Gemfile index 7d018ff8..50a50761 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source "https://rubygems.org" # gem "rails" gem 'jekyll' gem 'jekyll-sitemap' +gem 'jekyll-timeago' gem 'mini_magick' gem 'fileutils' diff --git a/_config.yml b/_config.yml index a5299f40..c400766f 100644 --- a/_config.yml +++ b/_config.yml @@ -35,7 +35,7 @@ future: false markdown: redcarpet redcarpet: - extensions: ['autolink', 'smart', 'hard_wrap'] + extensions: ['autolink', 'smart', 'hard_wrap'] # Generator @@ -52,6 +52,7 @@ keep_files: ['media', 'gen'] gems: - jekyll-sitemap + - jekyll-timeago # jekyll-picture-tag diff --git a/_src/_plugins/timeago.rb b/_src/_plugins/timeago.rb deleted file mode 100644 index 17b50dcf..00000000 --- a/_src/_plugins/timeago.rb +++ /dev/null @@ -1,109 +0,0 @@ -# -# jekyll-timeago -# -# https://github.com/markets/jekyll-timeago -# - -module Jekyll - module Timeago - - DAYS_PER = { - :days => 1, - :weeks => 7, - :months => 31, - :years => 365, - } - - # Max level of detail - # years > months > weeks > days - # 1 year and 7 months and 2 weeks and 6 days - MAX_DEPTH_LEVEL = 4 - - # Default level of detail - # 1 month and 5 days, 3 weeks and 2 days, 2 years and 6 months - DEFAULT_DEPTH_LEVEL = 2 - - def timeago(input, depth = DEFAULT_DEPTH_LEVEL) - unless depth_allowed?(depth) - raise "Invalid depth level: #{depth.inspect}" - end - - unless input.is_a?(Date) || input.is_a?(Time) - raise "Invalid input type: #{input.inspect}" - end - - days_passed = (Date.today - Date.parse(input.to_s)).to_i - time_ago_to_now(days_passed, depth) - end - - private - - # Days passed to time ago sentence - def time_ago_to_now(days_passed, depth) - return "today" if days_passed == 0 - return "yesterday" if days_passed == 1 - return "tomorrow" if days_passed == -1 - - future = days_passed < 0 - slots = build_time_ago_slots(days_passed.abs, depth) - sentence = to_sentence(slots) - - if future - "in #{sentence}" - else - "#{sentence} ago" - end - end - - # Builds time ranges: ['1 month', '5 days'] - # - days_passed: integer in absolute - # - depth: level of detail - # - current_slots: built time slots - def build_time_ago_slots(days_passed, depth, current_slots = []) - return current_slots if depth == 0 || days_passed == 0 - - time_range = days_to_time_range(days_passed) - days = DAYS_PER[time_range] - num_elems = days_passed / days - range_type = if num_elems == 1 - time_range.to_s[0...-1] # singularize - else - time_range.to_s - end - - current_slots << "#{num_elems} #{range_type}" - pending_days = days_passed - (num_elems*days) - build_time_ago_slots(pending_days, depth - 1, current_slots) - end - - # Number of days to minimum period time which can be grouped - def days_to_time_range(days_passed) - case days_passed.abs - when 0...7 - :days - when 7...31 - :weeks - when 31...365 - :months - else - :years - end - end - - # Validate if allowed level of detail - def depth_allowed?(depth) - (1..MAX_DEPTH_LEVEL).include?(depth) - end - - # Array to sentence: ['1 month', '1 week', '5 days'] => "1 month, 1 week and 5 days" - def to_sentence(slots) - if slots.length == 1 - slots[0] - else - "#{slots[0...-1].join(', ')} and #{slots[-1]}" - end - end - end -end - -Liquid::Template.register_filter(Jekyll::Timeago) \ No newline at end of file