Class: Sass::Selector::Sequence
- Inherits:
-
AbstractSequence
- Object
- AbstractSequence
- Sass::Selector::Sequence
- Defined in:
- /var/www/sass-pages/.haml/lib/sass/selector/sequence.rb
Overview
An operator-separated sequence of simple selector sequences.
Instance Attribute Summary
- - (Array<SimpleSequence, String>) members readonly The array of simple selector sequences, operators, and newlines.
Instance Method Summary
- - do_extend(extends) Non-destructively extends this selector with the extensions specified in a hash (which should be populated via Sass::Tree::Node#cssize).
-
- (String?) filename(filename)
Sets the name of the file in which this selector was declared, or
nilif it was not declared in a file (e.g. on stdin). - - (Sequence) initialize(seqs_and_ops) constructor A new instance of Sequence.
- - (String) inspect Returns a string representation of the sequence.
- - (Fixnum) line(line) Sets the line of the Sass template on which this selector was declared.
- - (Sequence) resolve_parent_refs(super_seq) Resolves the Parent selectors within this selector by replacing them with the given parent selector, handling commas appropriately.
- - (Boolean) superselector?(sseq) Returns whether or not this selector matches all elements that the given selector matches (as well as possibly more).
- - to_a
Methods inherited from AbstractSequence
Constructor Details
- (Sequence) initialize(seqs_and_ops)
A new instance of Sequence
38 39 40 |
# File '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 38
def initialize(seqs_and_ops)
@members = seqs_and_ops
end
|
Instance Attribute Details
- (Array<SimpleSequence, String>) members (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 '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 35
def members
@members
end
|
Instance Method Details
- do_extend(extends)
Non-destructively extends this selector with the extensions specified in a hash (which should be populated via Sass::Tree::Node#cssize).
79 80 81 82 83 84 85 86 87 88 |
# File '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 79
def do_extend(extends, seen = Set.new)
paths = Haml::Util.paths(members.map do |sseq_or_op|
next [[sseq_or_op]] unless sseq_or_op.is_a?(SimpleSequence)
extended = sseq_or_op.do_extend(extends, seen)
choices = extended.map {|seq| seq.members}
choices.unshift([sseq_or_op]) unless extended.any? {|seq| seq.superselector?(sseq_or_op)}
choices
end)
Haml::Util.flatten(paths.map {|path| weave(path)}, 1).map {|p| Sequence.new(p)}
end
|
- (String?) filename=(filename)
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 '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 22
def filename=(filename)
members.each {|m| m.filename = filename if m.is_a?(SimpleSequence)}
filename
end
|
- (String) inspect
Returns a string representation of the sequence. This is basically the selector string.
117 118 119 |
# File '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 117
def inspect
members.map {|m| m.inspect}.join(" ")
end
|
- (Fixnum) line=(line)
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 '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 11
def line=(line)
members.each {|m| m.line = line if m.is_a?(SimpleSequence)}
line
end
|
- (Sequence) resolve_parent_refs(super_seq)
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 '/var/www/sass-pages/.haml/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
|
- (Boolean) superselector?(sseq)
Returns whether or not this selector matches all elements that the given selector matches (as well as possibly more).
100 101 102 103 |
# File '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 100
def superselector?(sseq)
return false unless members.size == 1
members.last.superselector?(sseq)
end
|
- to_a
106 107 108 109 110 111 |
# File '/var/www/sass-pages/.haml/lib/sass/selector/sequence.rb', line 106
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
|