Class: Sass::Selector::Element

Inherits:
Simple
  • Object
show all
Defined in:
lib/sass/selector.rb

Overview

An element selector (e.g. h1).

Instance Attribute Summary collapse

Attributes inherited from Simple

#filename, #line

Instance Method Summary collapse

Methods inherited from Simple

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

Constructor Details

#initialize(name, namespace) ⇒ Element

Returns a new instance of Element.

Parameters:



163
164
165
166
# File 'lib/sass/selector.rb', line 163

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

Instance Attribute Details

#nameArray<String, Sass::Script::Node> (readonly)

The element name.

Returns:



151
152
153
# File 'lib/sass/selector.rb', line 151

def name
  @name
end

#namespaceArray<String, Sass::Script::Node>? (readonly)

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

Returns:



159
160
161
# File 'lib/sass/selector.rb', line 159

def namespace
  @namespace
end

Instance Method Details

#to_a

See Also:

  • Selector#to_a


169
170
171
# File '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 Sass::Selector::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 '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