Cache the `@includes_dir` in each instance so the method isn't called all the time
This commit is contained in:
parent
a7c0fffcec
commit
626706c8c5
|
@ -13,11 +13,14 @@ module Jekyll
|
||||||
|
|
||||||
class IncludeTag < Liquid::Tag
|
class IncludeTag < Liquid::Tag
|
||||||
|
|
||||||
|
attr_reader :includes_dir
|
||||||
|
|
||||||
VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
|
VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
|
||||||
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)
|
||||||
super
|
super
|
||||||
|
@includes_dir = tag_includes_dir
|
||||||
matched = markup.strip.match(VARIABLE_SYNTAX)
|
matched = markup.strip.match(VARIABLE_SYNTAX)
|
||||||
if matched
|
if matched
|
||||||
@file = matched['variable'].strip
|
@file = matched['variable'].strip
|
||||||
|
@ -97,8 +100,8 @@ eos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def includes_dir
|
def tag_includes_dir
|
||||||
@includes_dir ||= '_includes'
|
'_includes'
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(context)
|
def render(context)
|
||||||
|
@ -118,12 +121,12 @@ 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 resolved_includes_dir(context)
|
def resolved_includes_dir(context)
|
||||||
File.join(File.realpath(context.registers[:site].source), includes_dir)
|
File.join(File.realpath(context.registers[:site].source), @includes_dir)
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_path(path, dir, safe)
|
def validate_path(path, dir, safe)
|
||||||
|
@ -135,7 +138,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)
|
||||||
|
@ -149,12 +152,15 @@ eos
|
||||||
end
|
end
|
||||||
|
|
||||||
class IncludeRelativeTag < IncludeTag
|
class IncludeRelativeTag < IncludeTag
|
||||||
def includes_dir
|
def tag_includes_dir
|
||||||
@includes_dir ||= '.'
|
'.'
|
||||||
|
end
|
||||||
|
|
||||||
|
def page_path
|
||||||
|
context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolved_includes_dir(context)
|
def resolved_includes_dir(context)
|
||||||
page_path = context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"])
|
|
||||||
Jekyll.sanitized_path(context.registers[:site].source, page_path)
|
Jekyll.sanitized_path(context.registers[:site].source, page_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue