Define methods for shared vars between include & include_relative
This commit is contained in:
parent
9f558d1cec
commit
0e4549013d
|
@ -19,14 +19,6 @@ module Jekyll
|
||||||
VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/
|
VARIABLE_SYNTAX = /(?<variable>[^{]*\{\{\s*(?<name>[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?<params>.*)/
|
||||||
|
|
||||||
def initialize(tag_name, markup, tokens)
|
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
|
super
|
||||||
matched = markup.strip.match(VARIABLE_SYNTAX)
|
matched = markup.strip.match(VARIABLE_SYNTAX)
|
||||||
if matched
|
if matched
|
||||||
|
@ -102,13 +94,13 @@ eos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(context)
|
def includes_dir
|
||||||
case @tag_name
|
'_includes'
|
||||||
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"]))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def render(context)
|
||||||
|
dir = dir_to_include(context)
|
||||||
|
|
||||||
file = render_variable(context) || @file
|
file = render_variable(context) || @file
|
||||||
validate_file_name(file)
|
validate_file_name(file)
|
||||||
|
|
||||||
|
@ -123,10 +115,14 @@ eos
|
||||||
partial.render!(context)
|
partial.render!(context)
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
raise IncludeTagError.new e.message, File.join(@includes_dir, @file)
|
raise IncludeTagError.new e.message, File.join(includes_dir, @file)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dir_to_include(context)
|
||||||
|
File.join(File.realpath(context.registers[:site].source), includes_dir)
|
||||||
|
end
|
||||||
|
|
||||||
def validate_path(path, dir, safe)
|
def validate_path(path, dir, safe)
|
||||||
if safe && !realpath_prefixed_with?(path, dir)
|
if safe && !realpath_prefixed_with?(path, dir)
|
||||||
raise IOError.new "The included file '#{path}' should exist and should not be a symlink"
|
raise IOError.new "The included file '#{path}' should exist and should not be a symlink"
|
||||||
|
@ -136,7 +132,7 @@ eos
|
||||||
end
|
end
|
||||||
|
|
||||||
def path_relative_to_source(dir, path)
|
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
|
end
|
||||||
|
|
||||||
def realpath_prefixed_with?(path, dir)
|
def realpath_prefixed_with?(path, dir)
|
||||||
|
@ -148,8 +144,18 @@ eos
|
||||||
File.read(file, file_read_opts(context))
|
File.read(file, file_read_opts(context))
|
||||||
end
|
end
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
||||||
Liquid::Template.register_tag('include', Jekyll::Tags::IncludeTag)
|
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)
|
||||||
|
|
Loading…
Reference in New Issue