Class: Sass::Selector::Universal
- Inherits:
-
Simple
- Object
- Simple
- Sass::Selector::Universal
- Defined in:
- /var/www/sass-pages/.sass/lib/sass/selector.rb
Overview
A universal selector (* in CSS).
Instance Attribute Summary
- - (Array<String, Sass::Script::Node>?) namespace readonly The selector namespace.
Instance Method Summary
- - (Universal) initialize(namespace) 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, #to_s, #unify_namespaces
Constructor Details
- (Universal) initialize(namespace)
A new instance of Universal
95 96 97 |
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 95
def initialize(namespace)
@namespace = namespace
end
|
Instance Attribute Details
- (Array<String, Sass::Script::Node>?) namespace (readonly)
The selector namespace. nil means the default namespace, [""] means no namespace, ["*"] means any namespace.
92 93 94 |
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 92
def namespace
@namespace
end
|
Instance Method Details
- to_a
100 101 102 |
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 100
def to_a
@namespace ? @namespace + ["|*"] : ["*"]
end
|
- unify(sels)
TODO: There are lots of cases that this documentation specifies; make sure we thoroughly test all of them.
TODO: Keep track of whether a default namespace has been declared and handle namespace-unspecified selectors accordingly.
TODO:
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 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 '/var/www/sass-pages/.sass/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
|