Class | Sass::Selector::Universal
In: | lib/sass/selector.rb
Parent: | Simple

A universal selector (`*` in CSS).

### Methods

new to_a unify

### Attributes

namespace | [R] | The selector namespace. `nil` means the default namespace, `[""]` means no namespace, `["*"]` means any namespace. @return [Array<String, Sass::Script::Node>, nil]

### Public Class methods

new(namespace)

@param namespace [Array<String, Sass::Script::Node>, nil] See \{namespace}

[Source]

        # File lib/sass/selector.rb, line 95
    95:       def initialize(namespace)
    96:         @namespace = namespace
    97:       end

### Public Instance methods

to_a()

@see Selector#to_a

[Source]

         # File lib/sass/selector.rb, line 100
    100:       def to_a
    101:         @namespace ? @namespace + ["|*"] : ["*"]
    102:       end

unify(sels)

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

[Source]

         # 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

[Validate]