| Class | Sass::Selector::Universal |
| In: |
lib/sass/selector.rb
|
| Parent: | Simple |
| namespace | [R] |
The selector namespace. `nil` means the default namespace, `[""]`
means no namespace, `["*"]` means any namespace.
@return [Array<String, Sass::Script::Node>, nil] |
@param namespace [Array<String, Sass::Script::Node>, nil] See \{namespace}
# File lib/sass/selector.rb, line 95
95: def initialize(namespace)
96: @namespace = namespace
97: end
@see Selector#to_a
# File lib/sass/selector.rb, line 100
100: def to_a
101: @namespace ? @namespace + ["|*"] : ["*"]
102: end
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.
@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
@see Selector#unify
# File lib/sass/selector.rb, line 129
129: def unify(sels)
130: name =
131: case sels.first
132: when Universal; :universal
133: when Element; sels.first.name
134: else
135: return [self] + sels unless namespace.nil? || namespace == ['*']
136: return sels unless sels.empty?
137: return [self]
138: end
139:
140: ns, accept = unify_namespaces(namespace, sels.first.namespace)
141: return unless accept
142: [name == :universal ? Universal.new(ns) : Element.new(name, ns)] + sels[1..-1]
143: end