Class: Sass::Selector::Universal

Inherits:
Simple
  • Object
show all
Defined in:
.ruby-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?, #hash, #inspect, #unique?

Constructor Details

#initialize(namespace) ⇒ Universal

Returns a new instance of Universal

Parameters:



149
150
151
# File '.ruby-sass/lib/sass/selector.rb', line 149

def initialize(namespace)
  @namespace = namespace
end

Constructor Details

#initialize(namespace) ⇒ Universal

Returns a new instance of Universal

Parameters:



149
150
151
# File '.ruby-sass/lib/sass/selector.rb', line 149

def initialize(namespace)
  @namespace = namespace
end

Instance Attribute Details

#namespaceString? (readonly)

The selector namespace. `nil` means the default namespace, `“”` means no namespace, `“*”` means any namespace.

Returns:

  • (String, nil)


146
147
148
# File '.ruby-sass/lib/sass/selector.rb', line 146

def namespace
  @namespace
end

Instance Method Details

#specificityObject



200
201
202
# File '.ruby-sass/lib/sass/selector.rb', line 200

def specificity
  0
end

#to_s(opts = {}) ⇒ Object

See Also:

  • Selector#to_s


154
155
156
# File '.ruby-sass/lib/sass/selector.rb', line 154

def to_s(opts = {})
  @namespace ? "#{@namespace}|*" : "*"
end

#unify(sels) ⇒ Object

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 '.ruby-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