Class: Glimmer::DSL::Web::ElementExpression

Inherits:
Expression
  • Object
show all
Includes:
GeneralElementExpression
Defined in:
lib/glimmer/dsl/web/element_expression.rb

Instance Method Summary collapse

Methods included from GeneralElementExpression

#add_content, #interpret

Instance Method Details

#can_interpret?(parent, keyword, *args, &block) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/glimmer/dsl/web/element_expression.rb', line 12

def can_interpret?(parent, keyword, *args, &block)
  slot = keyword.to_s.to_sym
  Glimmer::Web::ElementProxy.keyword_supported?(keyword) &&
    (
      (
        args.empty? &&
        (
          parent.nil? ||
          !parent.respond_to?(:slot_elements) ||
          !(parent.slot_elements.keys.include?(slot) || parent.slot_elements.keys.include?(slot.to_s))
        )
      ) ||
      args.size == 1 && args.first.is_a?(String) ||
      args.size == 1 && args.first.is_a?(Hash) ||
      args.size == 2 && args.first.is_a?(String) && args.last.is_a?(Hash)
    ) &&
    (
      keyword != 'title' ||
      parent.nil? ||
      parent.keyword == 'head'
    ) &&
    ( # ensure SVG keywords only live under SVG element (unless it's the SVG element itself)
      !Glimmer::Web::ElementProxy.svg_keyword_supported?(keyword) ||
      keyword == 'svg' ||
      parent.find_ancestor(include_self: true) { |ancestor| ancestor.keyword == 'svg' }
    )
end