Class: Sass::Selector::Universal

Inherits:
Simple
  • Object
show all
Defined in:
/Users/ceppstei/Projects/sass-lang/.sass/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?, #equality_key, #hash, #inspect, #unify_namespaces

Constructor Details

- (Universal) initialize(namespace)

Returns a new instance of Universal

Parameters:



145
146
147
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 145

def initialize(namespace)
  @namespace = namespace
end

Instance Attribute Details

- (String?) namespace (readonly)

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

Returns:

  • (String, nil)


142
143
144
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 142

def namespace
  @namespace
end

Instance Method Details

- specificity



196
197
198
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 196

def specificity
  0
end

- to_s(opts = {})

See Also:

  • Selector#to_s


150
151
152
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 150

def to_s(opts = {})
  @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


179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 179

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