class Slimi::Filters::Attribute

Handle ‘[:slimi, :attributes, …]`.

Public Instance Methods

on_html_attr(name, value) click to toggle source

@param [String] name @param [Array] value @return [Array]

Calls superclass method
# File lib/slimi/filters/attribute.rb, line 18
def on_html_attr(name, value)
  if value[0] == :slimi && value[1] == :attrvalue && !options[:merge_attrs][name]
    escape = value[2]
    code = value[3]
    case code
    when 'true'
      [:html, :attr, name, [:multi]]
    when 'false', 'nil'
      [:multi]
    else
      tmp = unique_name
      [:multi,
       [:code, "#{tmp} = #{code}"],
       [:if, tmp,
        [:if, "#{tmp} == true",
         [:html, :attr, name, [:multi]],
         [:html, :attr, name, [:escape, escape, [:dynamic, tmp]]]]]]
    end
  else
    @attr = name
    super
  end
end
on_html_attrs(*expressions) click to toggle source

@param [Array<Array>] expressions @return [Array]

# File lib/slimi/filters/attribute.rb, line 11
def on_html_attrs(*expressions)
  [:multi, *expressions.map { |expression| compile(expression) }]
end
on_slimi_attrvalue(escape, code) click to toggle source

@param [Boolean] escape @param [String] code\ @return [Array]\

# File lib/slimi/filters/attribute.rb, line 45
def on_slimi_attrvalue(escape, code)
  if (delimiter = options[:merge_attrs][@attr])
    tmp = unique_name
    [:multi,
     [:code, "#{tmp} = #{code}"],
     [:if, "Array === #{tmp}",
      [:multi,
       [:code, "#{tmp} = #{tmp}.flatten"],
       [:code, "#{tmp}.map!(&:to_s)"],
       [:code, "#{tmp}.reject!(&:empty?)"],
       [:escape, escape, [:dynamic, "#{tmp}.join(#{delimiter.inspect})"]]],
      [:escape, escape, [:dynamic, tmp]]]]
  else
    [:escape, escape, [:dynamic, code]]
  end
end