Class: Sass::Selector::Universal

Inherits:
Simple
  • Object
show all
Defined in:
/home/nweiz/code/sass-site/.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, #unique?

Constructor Details

- (Universal) initialize(namespace)

Returns a new instance of Universal

Parameters:



149
150
151
# File '/home/nweiz/code/sass-site/.sass/lib/sass/selector.rb', line 149

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)


146
147
148
# File '/home/nweiz/code/sass-site/.sass/lib/sass/selector.rb', line 146

def namespace
  @namespace
end

Instance Method Details

- specificity



200
201
202
# File '/home/nweiz/code/sass-site/.sass/lib/sass/selector.rb', line 200

def specificity
  0
end

- to_s(opts = {})

See Also:

  • Selector#to_s


154
155
156
# File '/home/nweiz/code/sass-site/.sass/lib/sass/selector.rb', line 154

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


183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File '/home/nweiz/code/sass-site/.sass/lib/sass/selector.rb', line 183

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