Sha256: 77418f769cd81449d4a5d321c3f4d2a87e05f0644c26f56f40848c68fdde6e05

Contents?: true

Size: 1.72 KB

Versions: 48

Compression:

Stored size: 1.72 KB

Contents

module Temple
  module HTML
    # This filter merges html attributes (e.g. used for id and class)
    # @api public
    class AttributeMerger < Filter
      default_options[:attr_delimiter] = {'id' => '_', 'class' => ' '}

      def on_html_attrs(*attrs)
        names = []
        result = {}
        attrs.each do |attr|
          raise(InvalidExpression, 'Attribute is not a html attr') if attr[0] != :html || attr[1] != :attr
          name, value = attr[2].to_s, attr[3]
          if result[name]
            delimiter = options[:attr_delimiter][name]
            raise "Multiple #{name} attributes specified" unless delimiter
            if empty_exp?(value)
              result[name] = [:html, :attr, name,
                              [:multi,
                               result[name][3],
                               value]]
            elsif contains_static?(value)
              result[name] = [:html, :attr, name,
                              [:multi,
                               result[name][3],
                               [:static, delimiter],
                               value]]
            else
              tmp = unique_name
              result[name] = [:html, :attr, name,
                              [:multi,
                               result[name][3],
                               [:capture, tmp, value],
                               [:if, "!#{tmp}.empty?",
                                [:multi,
                                 [:static, delimiter],
                                 [:dynamic, tmp]]]]]
            end
          else
            result[name] = attr
            names << name
          end
        end
        [:html, :attrs, *names.map {|name| result[name] }]
      end
    end
  end
end

Version data entries

48 entries across 48 versions & 2 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.7.4 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.7.3 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.7.2 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.7.1 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.7.0 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.9 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.8 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.7 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.6 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.5 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.4 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.3 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.2 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.1 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.6.0 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.5.17 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.5.16 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.5.15 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb
classiccms-0.5.14 vendor/bundle/gems/temple-0.4.0/lib/temple/html/attribute_merger.rb