Class: Sass::Selector::Element
- Inherits:
-
Simple
- Object
- Simple
- Sass::Selector::Element
- Defined in:
- /var/www/sass-pages/.sass/lib/sass/selector.rb
Overview
An element selector (e.g. h1).
Instance Attribute Summary
- - (Array<String, Sass::Script::Node>) name readonly The element name.
- - (Array<String, Sass::Script::Node>?) namespace readonly The selector namespace.
Instance Method Summary
- - (Element) initialize(name, namespace) constructor A new instance of Element.
- - to_a
- - unify(sels) Unification of an element selector is somewhat complicated, especially when a namespace is specified.
Methods inherited from Simple
#eql?, #hash, #inspect, #unify_namespaces
Constructor Details
- (Element) initialize(name, namespace)
A new instance of Element
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.
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.
159 160 161 |
# File '/var/www/sass-pages/.sass/lib/sass/selector.rb', line 159
def namespace
@namespace
end
|
Instance Method Details
- 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.
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
|