Define methods for shared vars between include & include_relative

This commit is contained in:
Garen Torikian 2014-09-07 11:21:40 -07:00
parent 9f558d1cec
commit 0e4549013d
1 changed files with 23 additions and 17 deletions

View File

@ -19,14 +19,6 @@ module Jekyll
VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/
def initialize(tag_name, markup, tokens)
@tag_name = tag_name
case tag_name
when 'include'
@includes_dir = '_includes'
when 'include_relative'
@includes_dir = ''
end
super
matched = markup.strip.match(VARIABLE_SYNTAX)
if matched
@ -102,13 +94,13 @@ eos
end
end
def render(context)
case @tag_name
when 'include'
dir = File.join(File.realpath(context.registers[:site].source), @includes_dir)
when 'include_relative'
dir = File.join(File.realpath(context.registers[:site].source), File.dirname(context.registers[:page]["path"]))
def includes_dir
'_includes'
end
def render(context)
dir = dir_to_include(context)
file = render_variable(context) || @file
validate_file_name(file)
@ -123,10 +115,14 @@ eos
partial.render!(context)
end
rescue => e
raise IncludeTagError.new e.message, File.join(@includes_dir, @file)
raise IncludeTagError.new e.message, File.join(includes_dir, @file)
end
end
def dir_to_include(context)
File.join(File.realpath(context.registers[:site].source), includes_dir)
end
def validate_path(path, dir, safe)
if safe && !realpath_prefixed_with?(path, dir)
raise IOError.new "The included file '#{path}' should exist and should not be a symlink"
@ -136,7 +132,7 @@ eos
end
def path_relative_to_source(dir, path)
File.join(@includes_dir, path.sub(Regexp.new("^#{dir}"), ""))
File.join(includes_dir, path.sub(Regexp.new("^#{dir}"), ""))
end
def realpath_prefixed_with?(path, dir)
@ -148,8 +144,18 @@ eos
File.read(file, file_read_opts(context))
end
end
class IncludeRelativeTag < IncludeTag
def includes_dir
'.'
end
def dir_to_include(context)
File.join(File.realpath(context.registers[:site].source), File.dirname(context.registers[:page]["path"]))
end
end
end
end
Liquid::Template.register_tag('include', Jekyll::Tags::IncludeTag)
Liquid::Template.register_tag('include_relative', Jekyll::Tags::IncludeTag)
Liquid::Template.register_tag('include_relative', Jekyll::Tags::IncludeRelativeTag)