jekyll-seo-tag/lib/jekyll-seo-tag.rb

52 lines
1.1 KiB
Ruby
Raw Normal View History

2015-10-25 21:21:46 +00:00
module Jekyll
class SeoTag < Liquid::Tag
attr_accessor :context
2016-01-06 06:08:27 +00:00
HTML_ESCAPE = {
"\u201c".freeze => '&ldquo;'.freeze,
"\u201d".freeze => '&rdquo;'.freeze
}
HTML_ESCAPE_REGEX = Regexp.union(HTML_ESCAPE.keys).freeze
2015-10-25 21:21:46 +00:00
def render(context)
@context = context
output = Liquid::Template.parse(template_contents).render!(payload, info)
# Minify
2015-11-25 21:26:57 +00:00
output.gsub!(/[\s]{2,}/, "\n")
# Encode smart quotes. See https://github.com/benbalter/jekyll-seo-tag/pull/6
2016-01-06 06:08:27 +00:00
output.gsub!(HTML_ESCAPE_REGEX, HTML_ESCAPE)
output
2015-10-25 21:21:46 +00:00
end
private
def payload
{
"page" => context.registers[:page],
"site" => context.registers[:site].site_payload["site"]
}
end
def info
{
:registers => context.registers,
:filters => [Jekyll::Filters]
}
end
def template_contents
@template_contents ||= File.read(template_path)
end
def template_path
@template_path ||= File.expand_path "./template.html", File.dirname(__FILE__)
end
end
end
Liquid::Template.register_tag('seo', Jekyll::SeoTag)