Class: Sass::Selector::Sequence
- Inherits:
-
AbstractSequence
- Object
- AbstractSequence
- Sass::Selector::Sequence
- Defined in:
- lib/sass/selector/sequence.rb
Overview
An operator-separated sequence of simple selector sequences.
Instance Attribute Summary collapse
-
#members ⇒ Array<SimpleSequence, String>
readonly
The array of simple selector sequences, operators, and newlines.
Attributes inherited from AbstractSequence
Instance Method Summary collapse
-
#do_extend(extends) ⇒ Array<Sequence>
Non-destructively extends this selector with the extensions specified in a hash (which should be populated via Tree::Node#cssize).
-
#eql?(other) ⇒ Boolean
Checks equality between this and another object.
-
#filename=(filename) ⇒ String?
Sets the name of the file in which this selector was declared, or
nil
if it was not declared in a file (e.g. on stdin). -
#hash ⇒ Fixnum
Returns a hash code for this sequence.
-
#initialize(seqs_and_ops) ⇒ Sequence
constructor
A new instance of Sequence.
-
#inspect ⇒ String
Returns a string representation of the sequence.
-
#line=(line) ⇒ Fixnum
Sets the line of the Sass template on which this selector was declared.
-
#resolve_parent_refs(super_seq) ⇒ Sequence
Resolves the Parent selectors within this selector by replacing them with the given parent selector, handling commas appropriately.
- #to_a
Constructor Details
#initialize(seqs_and_ops) ⇒ Sequence
Returns a new instance of Sequence.
38 39 40 |
# File 'lib/sass/selector/sequence.rb', line 38
def initialize(seqs_and_ops)
@members = seqs_and_ops
end
|
Instance Attribute Details
#members ⇒ Array<SimpleSequence, String> (readonly)
The array of simple selector sequences, operators, and newlines.
The operators are strings such as "+"
and ">"
representing the corresponding CSS operators.
Newlines are also newline strings;
these aren't semantically relevant,
but they do affect formatting.
35 36 37 |
# File 'lib/sass/selector/sequence.rb', line 35
def members
@members
end
|
Instance Method Details
#do_extend(extends) ⇒ Array<Sequence>
Non-destructively extends this selector with the extensions specified in a hash (which should be populated via Tree::Node#cssize).
79 80 81 82 83 84 |
# File 'lib/sass/selector/sequence.rb', line 79
def do_extend(extends, supers = [])
Haml::Util.paths(members.map do |sseq_or_op|
next [[sseq_or_op]] unless sseq_or_op.is_a?(SimpleSequence)
[[sseq_or_op], *sseq_or_op.do_extend(extends, supers).map {|seq| seq.members}]
end).map {|path| weave(path)}.flatten(1).map {|p| Sequence.new(p)}
end
|
#eql?(other) ⇒ Boolean
Checks equality between this and another object.
113 114 115 116 |
# File 'lib/sass/selector/sequence.rb', line 113
def eql?(other)
other.class == self.class &&
other.members.reject {|m| m == "\n"}.eql?(self.members.reject {|m| m == "\n"})
end
|
#filename=(filename) ⇒ String?
Sets the name of the file in which this selector was declared,
or nil
if it was not declared in a file (e.g. on stdin).
This also sets the filename for all child selectors.
22 23 24 25 |
# File 'lib/sass/selector/sequence.rb', line 22
def filename=(filename)
members.each {|m| m.filename = filename if m.is_a?(SimpleSequence)}
filename
end
|
#hash ⇒ Fixnum
Returns a hash code for this sequence.
105 106 107 |
# File 'lib/sass/selector/sequence.rb', line 105
def hash
members.reject {|m| m == "\n"}.hash
end
|
#inspect ⇒ String
Returns a string representation of the sequence. This is basically the selector string.
98 99 100 |
# File 'lib/sass/selector/sequence.rb', line 98
def inspect
members.map {|m| m.inspect}.join(" ")
end
|
#line=(line) ⇒ Fixnum
Sets the line of the Sass template on which this selector was declared. This also sets the line for all child selectors.
11 12 13 14 |
# File 'lib/sass/selector/sequence.rb', line 11
def line=(line)
members.each {|m| m.line = line if m.is_a?(SimpleSequence)}
line
end
|
#resolve_parent_refs(super_seq) ⇒ Sequence
Resolves the Parent selectors within this selector by replacing them with the given parent selector, handling commas appropriately.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/sass/selector/sequence.rb', line 49
def resolve_parent_refs(super_seq)
members = @members
members.slice!(0) if nl = (members.first == "\n")
unless members.any? do |seq_or_op|
seq_or_op.is_a?(SimpleSequence) && seq_or_op.members.first.is_a?(Parent)
end
members = []
members << "\n" if nl
members << SimpleSequence.new([Parent.new])
members += @members
end
Sequence.new(
members.map do |seq_or_op|
next seq_or_op unless seq_or_op.is_a?(SimpleSequence)
seq_or_op.resolve_parent_refs(super_seq)
end.flatten)
end
|
#to_a
87 88 89 90 91 92 |
# File 'lib/sass/selector/sequence.rb', line 87
def to_a
ary = @members.map {|seq_or_op| seq_or_op.is_a?(SimpleSequence) ? seq_or_op.to_a : seq_or_op}
ary = Haml::Util.intersperse(ary, " ")
ary = Haml::Util.substitute(ary, [" ", "\n", " "], ["\n"])
ary.flatten.compact
end
|