Module: CSS::Selectors::Serializer

Extended by:
Serializer
Included in:
Serializer
Defined in:
lib/css/selectors/serializer.rb

Constant Summary collapse

COMBINATOR_GLUE =
{
  descendant:          ' ',
  child:               ' > ',
  next_sibling:        ' + ',
  subsequent_sibling:  ' ~ '
}.freeze
LEADING_COMBINATOR_GLUE =

Leading combinator of a ‘:has()` relative selector (descendant is implicit, so it has no prefix).

{
  descendant:          '',
  child:               '> ',
  next_sibling:        '+ ',
  subsequent_sibling:  '~ '
}.freeze
ATTR_OPS =
{
  exact:     '=',
  includes:  '~=',
  dash:      '|=',
  prefix:    '^=',
  suffix:    '$=',
  substring: '*='
}.freeze

Instance Method Summary collapse

Instance Method Details

#serialize(node) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/css/selectors/serializer.rb', line 31

def serialize(node)
  case node
  when SelectorList      then node.selectors.map { serialize(_1) }.join(', ')
  when ComplexSelector   then serialize_complex(node)
  when CompoundSelector  then node.components.map { serialize(_1) }.join
  when TypeSelector      then ns_prefix(node.namespace) + Escape.ident(node.name)
  when UniversalSelector then "#{ns_prefix(node.namespace)}*"
  when NestingSelector   then '&'
  when IdSelector        then "##{Escape.ident(node.name)}"
  when ClassSelector     then ".#{Escape.ident(node.name)}"
  when AttributeSelector then serialize_attribute(node)
  when PseudoClass          then serialize_pseudo(node, '')
  when PseudoElement        then serialize_pseudo(node, ':')
  when AnB                  then serialize_anb(node)
  when RelativeSelectorList then node.selectors.map { serialize_relative(_1) }.join(', ')
  when RelativeSelector     then serialize_relative(node)
  else
    raise ArgumentError, "cannot serialize selector node #{node.class}"
  end
end