Class: Sass::Selector::Universal
Overview
A universal selector (*
in CSS).
Instance Attribute Summary collapse
-
#namespace ⇒ Array<String, Sass::Script::Node>?
readonly
The selector namespace.
Attributes inherited from Simple
Instance Method Summary collapse
-
#initialize(namespace) ⇒ Universal
constructor
A new instance of Universal.
- #to_a
-
#unify(sels)
Unification of a universal selector is somewhat complicated, especially when a namespace is specified.
Methods inherited from Simple
#eql?, #hash, #inspect, #unify_namespaces
Constructor Details
#initialize(namespace) ⇒ Universal
Returns a new instance of Universal.
95 96 97 |
# File 'lib/sass/selector.rb', line 95
def initialize(namespace)
@namespace = namespace
end
|
Instance Attribute Details
#namespace ⇒ Array<String, Sass::Script::Node>? (readonly)
The selector namespace.
nil
means the default namespace,
[""]
means no namespace,
["*"]
means any namespace.
92 93 94 |
# File 'lib/sass/selector.rb', line 92
def namespace
@namespace
end
|
Instance Method Details
#to_a
100 101 102 |
# File 'lib/sass/selector.rb', line 100
def to_a
@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.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/sass/selector.rb', line 129
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
|