67 lines
1.3 KiB
Ruby
67 lines
1.3 KiB
Ruby
require "jekyll-seo-tag/version"
|
|
|
|
module Jekyll
|
|
class SeoTag < Liquid::Tag
|
|
attr_accessor :context
|
|
|
|
MINIFY_REGEX = %r!([>,]\n|[%}]})\s+?(<|{[{%]|[ ]+\")!
|
|
|
|
def initialize(_tag_name, text, _tokens)
|
|
super
|
|
@text = text
|
|
end
|
|
|
|
def render(context)
|
|
@context = context
|
|
template.render!(payload, info)
|
|
end
|
|
|
|
private
|
|
|
|
def options
|
|
{
|
|
"version" => Jekyll::SeoTag::VERSION,
|
|
"title" => title?
|
|
}
|
|
end
|
|
|
|
def payload
|
|
{
|
|
"page" => context.registers[:page],
|
|
"site" => context.registers[:site].site_payload["site"],
|
|
"paginator" => context["paginator"],
|
|
"seo_tag" => options
|
|
}
|
|
end
|
|
|
|
def title?
|
|
!(@text =~ %r!title=false!i)
|
|
end
|
|
|
|
def info
|
|
{
|
|
:registers => context.registers,
|
|
:filters => [Jekyll::Filters]
|
|
}
|
|
end
|
|
|
|
def template
|
|
@template ||= Liquid::Template.parse template_contents
|
|
end
|
|
|
|
def template_contents
|
|
@template_contents ||= begin
|
|
File.read(template_path).gsub(MINIFY_REGEX, '\1\2').chomp
|
|
end
|
|
end
|
|
|
|
def template_path
|
|
@template_path ||= begin
|
|
File.expand_path "./template.html", File.dirname(__FILE__)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Liquid::Template.register_tag("seo", Jekyll::SeoTag)
|