Class: Sass::Selector::Universal

Inherits:
Simple
  • Object
show all
Defined in:
lib/sass/selector.rb

Overview

A universal selector (* in CSS).

Instance Attribute Summary collapse

Attributes inherited from Simple

#filename, #line

Instance Method Summary collapse

Methods inherited from Simple

#eql?, #hash, #inspect, #unify_namespaces

Constructor Details

#initialize(namespace) ⇒ Universal

Returns a new instance of Universal.

Parameters:



95
96
97
# File 'lib/sass/selector.rb', line 95

def initialize(namespace)
  @namespace = namespace
end

Instance Attribute Details

#namespaceArray<String, Sass::Script::Node>? (readonly)

The selector namespace. nil means the default namespace, [""] means no namespace, ["*"] means any namespace.

Returns:



92
93
94
# File 'lib/sass/selector.rb', line 92

def namespace
  @namespace
end

Instance Method Details

#to_a

See Also:

  • Selector#to_a


100
101
102
# File '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 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.

See Also:

  • Selector#unify


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