Liquid Jekyll - Finding Time :
The Jekyll template this site is based on originally used Jekyll modules to estimate blog post read times. This works great when you are hosting your site using "jekyll serve". Any Jekyll Modules within the _plugins folder can be used to build your site. These ruby-based modules are usually simple to write and work well most of the time.
The Problem :
When you don’t pre-build your site and rely on Github Pages to take your code and turn it into your _site , you end up with a few added restrictions. The biggest of these is Github Pages runs Jekyll with the --safe flag, which inherently disables any 3rd-party modules. This means your lovely _plugins folder gets ignored. http://jekyllrb.com/docs/plugins/
In my case, I want to automatically generate and display how long a post will take an average person to read. The original setup of this Jekyll theme used the following Jekyll Modules to compute the time and display the value.
On the page :
{{ post.content.size | readtime | pluralize: "minute" }} read
read-time.rb :
module ReadTimeFilter
def readtime(input)
charcount = 4.5
wpm = 335
rt = (input.to_f/charcount/wpm).round
rt = 1 if rt < 1
rt
end
Liquid::Template.register_filter self
end
pluralize.rb :
module Jekyll
module Pluralize
def pluralize(number, singular, plural=nil)
if number == 1
"#{number} #{singular}"
elsif plural == nil
"#{number} #{singular}s"
else
"#{number} #{plural}"
end
end
end
end
Liquid::Template.register_filter(Jekyll::Pluralize)
The Solution
As found on http://milanaryal.com/2015/knowing-the-site-generated-time-by-jekyll-on-github-pages/ , if you are using Liquid templating in your Jekyll build, you can use “Liquid Tags” to achieve a fair amount of logic using inline tags instead of ruby scripts.
On the page :
{{ post.content.size | divided_by:1507 }} minute read
Other Useful Tidbits :
http://jekyllrb.com/docs/templates/
http://jekyllrb.com/docs/structure/
Till next time,
Jim Howk