Class: Sass::Selector::Element

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

Overview

An element selector (e.g. h1).

Instance Attribute Summary

Instance Method Summary

Methods inherited from Simple

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

Constructor Details

- (Element) initialize(name, namespace)

A new instance of Element

Parameters:



163
164
165
166
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 163

def initialize(name, namespace)
  @name = name
  @namespace = namespace
end

Instance Attribute Details

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

The element name.

Returns:



151
152
153
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 151

def name
  @name
end

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

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

Returns:



159
160
161
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 159

def namespace
  @namespace
end

Instance Method Details

- to_a

See Also:

  • Selector#to_a


169
170
171
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 169

def to_a
  @namespace ? @namespace + ["|"] + @name : @name
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.

Unification of an element selector is somewhat complicated, especially when a namespace is specified. First, if sel contains another Element with a different #name, then the selectors can’t be unified and nil is returned.

Otherwise, if sel doesn’t specify a namespace, or it specifies any namespace (via "*"), then it’s returned with this element selector (e.g. .foo becomes a.foo or svg|a.foo). Similarly, if this selector doesn’t specify a namespace, the namespace from sel is used.

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


195
196
197
198
199
200
201
202
203
204
205
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 195

def unify(sels)
  case sels.first
  when Universal;
  when Element; return unless name == sels.first.name
  else return [self] + sels
  end

  ns, accept = unify_namespaces(namespace, sels.first.namespace)
  return unless accept
  [Element.new(name, ns)] + sels[1..-1]
end