Class: Sass::Selector::Universal
- Inherits:
- Simple
- Object
- Simple
- Sass::Selector::Universal
- Defined in:
- /Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb
Overview
A universal selector (*
in CSS).
Instance Attribute Summary (collapse)
- - (String?) namespace readonly
The selector namespace.
Attributes inherited from Simple
Instance Method Summary (collapse)
- - (Universal) initialize(namespace) constructor
A new instance of Universal.
- - specificity
- - to_s(opts = {})
- - unify(sels)
Unification of a universal selector is somewhat complicated, especially when a namespace is specified.
Methods inherited from Simple
#eql?, #equality_key, #hash, #inspect, #unify_namespaces
Constructor Details
- (Universal) initialize(namespace)
Returns a new instance of Universal
145 146 147 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 145
def initialize(namespace)
@namespace = namespace
end |
Instance Attribute Details
- (String?) namespace (readonly)
The selector namespace. nil
means the default namespace, ""
means no namespace, "*"
means any namespace.
142 143 144 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 142
def namespace
@namespace
end |
Instance Method Details
- specificity
196 197 198 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 196
def specificity
0
end |
- to_s(opts = {})
150 151 152 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 150
def to_s(opts = {})
@namespace ? "#{@namespace}|*" : "*"
end |
- unify(sels)
There are lots of cases that this documentation specifies; make sure we thoroughly test all of them.
Keep track of whether a default namespace has been declared and handle namespace-unspecified selectors accordingly.
If any branch of a CommaSequence ends up being just "*"
, then all other branches should be eliminated
Unification of a universal selector is somewhat complicated, especially when a namespace is specified. If there is no namespace specified or any namespace is specified (namespace "*"
), then sel
is returned without change (unless it’s empty, in which case "*"
is required).
If a namespace is specified but sel
does not specify a namespace, then the given namespace is applied to sel
, either by adding this Sass::Selector::Universal selector or applying this namespace to an existing Element selector.
If both this selector and sel
specify namespaces, those namespaces are unified via Simple#unify_namespaces and the unified namespace is used, if possible.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 179
def unify(sels)
name =
case sels.first
when Universal; :universal
when Element; sels.first.name
else
return [self] + sels unless namespace.nil? || namespace == '*'
return sels unless sels.empty?
return [self]
end
ns, accept = unify_namespaces(namespace, sels.first.namespace)
return unless accept
[name == :universal ? Universal.new(ns) : Element.new(name, ns)] + sels[1..-1]
end |