2010-05-30 23:57:33 +00:00
|
|
|
module Locomotive
|
|
|
|
module Liquid
|
|
|
|
module Tags
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-05-30 23:57:33 +00:00
|
|
|
class Snippet < ::Liquid::Include
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-08-24 13:04:53 +00:00
|
|
|
attr_accessor :slug
|
2010-08-21 22:48:24 +00:00
|
|
|
attr_accessor :partial
|
|
|
|
|
|
|
|
def initialize(tag_name, markup, tokens, context)
|
|
|
|
super
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-08-24 13:04:53 +00:00
|
|
|
@slug = @template_name.gsub('\'', '')
|
2010-08-21 22:48:24 +00:00
|
|
|
|
2010-08-24 22:59:22 +00:00
|
|
|
context[:snippets] << @slug
|
|
|
|
|
2010-08-24 13:04:53 +00:00
|
|
|
snippet = context[:site].snippets.where(:slug => @slug).first
|
|
|
|
|
|
|
|
self.refresh(snippet, context) if snippet
|
2010-08-21 22:48:24 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def render(context)
|
|
|
|
return '' if @partial.nil?
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-05-30 23:57:33 +00:00
|
|
|
variable = context[@variable_name || @template_name[1..-2]]
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-05-30 23:57:33 +00:00
|
|
|
context.stack do
|
|
|
|
@attributes.each do |key, value|
|
|
|
|
context[key] = context[value]
|
|
|
|
end
|
|
|
|
|
2010-07-23 20:09:54 +00:00
|
|
|
output = (if variable.is_a?(Array)
|
|
|
|
variable.collect do |variable|
|
2010-05-30 23:57:33 +00:00
|
|
|
context[@template_name[1..-2]] = variable
|
2010-08-21 22:48:24 +00:00
|
|
|
@partial.render(context)
|
2010-05-30 23:57:33 +00:00
|
|
|
end
|
|
|
|
else
|
|
|
|
context[@template_name[1..-2]] = variable
|
2010-08-21 22:48:24 +00:00
|
|
|
@partial.render(context)
|
2010-05-30 23:57:33 +00:00
|
|
|
end)
|
2010-07-23 20:09:54 +00:00
|
|
|
|
2010-05-30 23:57:33 +00:00
|
|
|
output
|
|
|
|
end
|
|
|
|
end
|
2010-08-24 13:04:53 +00:00
|
|
|
|
|
|
|
def refresh(snippet, context = {})
|
|
|
|
if snippet.destroyed?
|
|
|
|
@snippet_id = nil
|
|
|
|
@partial = nil
|
|
|
|
else
|
|
|
|
@snippet_id = snippet.id
|
|
|
|
@partial = ::Liquid::Template.parse(snippet.template, context)
|
|
|
|
@partial.root.context.clear
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-05-30 23:57:33 +00:00
|
|
|
end
|
|
|
|
|
2010-07-06 00:05:47 +00:00
|
|
|
::Liquid::Template.register_tag('include', Snippet)
|
2010-07-23 20:09:54 +00:00
|
|
|
end
|
2010-05-30 23:57:33 +00:00
|
|
|
end
|
2010-07-23 20:09:54 +00:00
|
|
|
end
|