Class: Sass::Selector::CommaSequence

Inherits:
AbstractSequence show all
Defined in:
lib/sass/selector/comma_sequence.rb

Overview

A comma-separated sequence of selectors.

Instance Attribute Summary collapse

Attributes inherited from AbstractSequence

#filename, #line

Instance Method Summary collapse

Methods inherited from AbstractSequence

#_specificity, #eql?, #has_placeholder?, #hash, #specificity, #to_s

Constructor Details

#initialize(seqs) ⇒ CommaSequence

Returns a new instance of CommaSequence.

Parameters:



12
13
14
# File 'lib/sass/selector/comma_sequence.rb', line 12

def initialize(seqs)
  @members = seqs
end

Instance Attribute Details

#membersArray<Sequence> (readonly)

The comma-separated selector sequences represented by this class.

Returns:



9
10
11
# File 'lib/sass/selector/comma_sequence.rb', line 9

def members
  @members
end

Instance Method Details

#do_extend(extends, parent_directives) ⇒ CommaSequence

TODO:

Link this to the reference documentation on @extend when such a thing exists.

Non-destrucively extends this selector with the extensions specified in a hash (which should come from Tree::Visitors::Cssize).

The extensions to perform on this selector

Parameters:

Returns:

  • (CommaSequence)

    A copy of this selector, with extensions made according to extends



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/sass/selector/comma_sequence.rb', line 54

def do_extend(extends, parent_directives)
  CommaSequence.new(members.map do |seq|
      extended = seq.do_extend(extends, parent_directives)
      # First Law of Extend: the result of extending a selector should
      # always contain the base selector.
      #
      # See https://github.com/nex3/sass/issues/324.
      extended.unshift seq unless seq.has_placeholder? || extended.include?(seq)
      extended
    end.flatten)
end

#inspectString

Returns a string representation of the sequence. This is basically the selector string.

Returns:

  • (String)


70
71
72
# File 'lib/sass/selector/comma_sequence.rb', line 70

def inspect
  members.map {|m| m.inspect}.join(", ")
end

#resolve_parent_refs(super_cseq) ⇒ CommaSequence

Resolves the Parent selectors within this selector by replacing them with the given parent selector, handling commas appropriately.

Parameters:

Returns:

  • (CommaSequence)

    This selector, with parent references resolved

Raises:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/sass/selector/comma_sequence.rb', line 23

def resolve_parent_refs(super_cseq)
  if super_cseq.nil?
    if @members.any? do |sel|
        sel.members.any? do |sel_or_op|
          sel_or_op.is_a?(SimpleSequence) && sel_or_op.members.any? {|ssel| ssel.is_a?(Parent)}
        end
      end
      raise Sass::SyntaxError.new("Base-level rules cannot contain the parent-selector-referencing character '&'.")
    end
    return self
  end

  CommaSequence.new(
    super_cseq.members.map do |super_seq|
      @members.map {|seq| seq.resolve_parent_refs(super_seq)}
    end.flatten)
end

#to_a

See Also:



75
76
77
78
79
# File 'lib/sass/selector/comma_sequence.rb', line 75

def to_a
  arr = Sass::Util.intersperse(@members.map {|m| m.to_a}, ", ").flatten
  arr.delete("\n")
  arr
end