Class: Liquid::Cycle
Overview
Cycle is usually used within a loop to alternate between values, like colors or DOM classes.
{% for item in items %}
<div class="{% cycle 'red', 'green', 'blue' %}"> {{ item }} </div>
{% end %}
<div class="red"> Item one </div>
<div class="green"> Item two </div>
<div class="blue"> Item three </div>
<div class="red"> Item four </div>
<div class="green"> Item five</div>
Defined Under Namespace
Classes: ParseTreeVisitor
Constant Summary collapse
- SimpleSyntax =
/\A#{QuotedFragment}+/o
- NamedSyntax =
/\A(#{QuotedFragment})\s*\:\s*(.*)/om
Instance Attribute Summary collapse
-
#variables ⇒ Object
readonly
Returns the value of attribute variables.
Attributes inherited from Tag
#line_number, #nodelist, #parse_context, #tag_name
Instance Method Summary collapse
-
#initialize(tag_name, markup, options) ⇒ Cycle
constructor
A new instance of Cycle.
- #render_to_output_buffer(context, output) ⇒ Object
Methods inherited from Tag
#blank?, disable_tags, #name, parse, #parse, #raw, #render
Methods included from ParserSwitching
#parse_with_selected_parser, #strict_parse_with_error_mode_fallback
Constructor Details
#initialize(tag_name, markup, options) ⇒ Cycle
Returns a new instance of Cycle.
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/liquid/tags/cycle.rb', line 22 def initialize(tag_name, markup, ) super case markup when NamedSyntax @variables = variables_from_string(Regexp.last_match(2)) @name = parse_expression(Regexp.last_match(1)) when SimpleSyntax @variables = variables_from_string(markup) @name = @variables.to_s else raise SyntaxError, [:locale].t("errors.syntax.cycle") end end |
Instance Attribute Details
#variables ⇒ Object (readonly)
Returns the value of attribute variables.
20 21 22 |
# File 'lib/liquid/tags/cycle.rb', line 20 def variables @variables end |
Instance Method Details
#render_to_output_buffer(context, output) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/liquid/tags/cycle.rb', line 36 def render_to_output_buffer(context, output) context.registers[:cycle] ||= {} key = context.evaluate(@name) iteration = context.registers[:cycle][key].to_i val = context.evaluate(@variables[iteration]) if val.is_a?(Array) val = val.join elsif !val.is_a?(String) val = val.to_s end output << val iteration += 1 iteration = 0 if iteration >= @variables.size context.registers[:cycle][key] = iteration output end |