mirror of
https://github.com/Shopify/liquid.git
synced 2025-09-21 00:00:32 -04:00
Added code to make for-else work
This commit is contained in:
parent
8319d78c2e
commit
caf59940d3
@ -58,8 +58,14 @@ module Liquid
|
||||
raise SyntaxError.new("Syntax Error in 'for loop' - Valid syntax: for [item] in [collection]")
|
||||
end
|
||||
|
||||
@nodelist = @for_block = []
|
||||
super
|
||||
end
|
||||
|
||||
def unknown_tag(tag, markup, tokens)
|
||||
return super unless tag == 'else'
|
||||
@nodelist = @else_block = []
|
||||
end
|
||||
|
||||
def render(context)
|
||||
context.registers[:for] ||= Hash.new(0)
|
||||
@ -67,7 +73,7 @@ module Liquid
|
||||
collection = context[@collection_name]
|
||||
collection = collection.to_a if collection.is_a?(Range)
|
||||
|
||||
return '' unless collection.respond_to?(:each)
|
||||
return render_else(context) unless collection.respond_to?(:each)
|
||||
|
||||
from = if @attributes['offset'] == 'continue'
|
||||
context.registers[:for][@name].to_i
|
||||
@ -81,7 +87,7 @@ module Liquid
|
||||
|
||||
segment = slice_collection_using_each(collection, from, to)
|
||||
|
||||
return '' if segment.empty?
|
||||
return render_else(context) if segment.empty?
|
||||
|
||||
segment.reverse! if @reversed
|
||||
|
||||
@ -105,7 +111,7 @@ module Liquid
|
||||
'first' => (index == 0),
|
||||
'last' => (index == length - 1) }
|
||||
|
||||
result << render_all(@nodelist, context)
|
||||
result << render_all(@for_block, context)
|
||||
end
|
||||
end
|
||||
result
|
||||
@ -130,7 +136,14 @@ module Liquid
|
||||
|
||||
segments
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_else(context)
|
||||
return @else_block ? [render_all(@else_block, context)] : ''
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Template.register_tag('for', For)
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user