Class: Sass::Selector::Universal

Inherits:
Simple
  • Object
show all
Defined in:
/var/www/sass-pages/.sass/lib/sass/selector.rb

Overview

A universal selector (* in CSS).

Instance Attribute Summary

Instance Method Summary

Methods inherited from Simple

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

Constructor Details

- (Universal) initialize(namespace)

A new instance of Universal

Parameters:



95
96
97
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 95

def initialize(namespace)
  @namespace = namespace
end

Instance Attribute Details

- (Array<String, Sass::Script::Node>?) namespace (readonly)

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

Returns:



92
93
94
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 92

def namespace
  @namespace
end

Instance Method Details

- to_a

See Also:

  • Selector#to_a


100
101
102
# File '/var/www/sass-pages/.sass/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 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 '/var/www/sass-pages/.sass/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