gems.sass-3.2.9.lib.sass.selector.comma_sequence.rb Maven / Gradle / Ivy
Go to download
Sass makes CSS fun again. Sass is an extension of CSS3, adding nested rules, variables, mixins, selector
inheritance, and more. It's translated to well-formatted, standard CSS using the command line tool or a
web-framework plugin.
This is a repackaged GEM in a JAR format of the sass-lang.gem package. The sass-gems package version
follows the sass-lang.gem versions located http://rubyforge.org/frs/?group_id=9702. Simply change
the version of this package to download and repackage the same GEM version.
The newest version!
module Sass
module Selector
# A comma-separated sequence of selectors.
class CommaSequence < AbstractSequence
# The comma-separated selector sequences
# represented by this class.
#
# @return [Array]
attr_reader :members
# @param seqs [Array] See \{#members}
def initialize(seqs)
@members = seqs
end
# Resolves the {Parent} selectors within this selector
# by replacing them with the given parent selector,
# handling commas appropriately.
#
# @param super_cseq [CommaSequence] The parent selector
# @return [CommaSequence] This selector, with parent references resolved
# @raise [Sass::SyntaxError] If a parent selector is invalid
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
# Non-destrucively extends this selector with the extensions specified in a hash
# (which should come from {Sass::Tree::Visitors::Cssize}).
#
# @todo Link this to the reference documentation on `@extend`
# when such a thing exists.
#
# @param extends [Sass::Util::SubsetMap{Selector::Simple =>
# Sass::Tree::Visitors::Cssize::Extend}]
# The extensions to perform on this selector
# @param parent_directives [Array]
# The directives containing this selector.
# @return [CommaSequence] A copy of this selector,
# with extensions made according to `extends`
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
# Returns a string representation of the sequence.
# This is basically the selector string.
#
# @return [String]
def inspect
members.map {|m| m.inspect}.join(", ")
end
# @see Simple#to_a
def to_a
arr = Sass::Util.intersperse(@members.map {|m| m.to_a}, ", ").flatten
arr.delete("\n")
arr
end
private
def _hash
members.hash
end
def _eql?(other)
other.class == self.class && other.members.eql?(self.members)
end
end
end
end