Class: Sass::Selector::Element
- Inherits:
- Simple
- Object
- Simple
- Sass::Selector::Element
- Defined in:
- /Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb
Overview
An element selector (e.g. h1
).
Instance Attribute Summary (collapse)
- - (String) name readonly
The element name.
- - (String?) namespace readonly
The selector namespace.
Attributes inherited from Simple
Instance Method Summary (collapse)
- - (Element) initialize(name, namespace) constructor
A new instance of Element.
- - specificity
- - to_s(opts = {})
- - unify(sels)
Unification of an element selector is somewhat complicated, especially when a namespace is specified.
Methods inherited from Simple
#eql?, #equality_key, #hash, #inspect, #unify_namespaces
Constructor Details
- (Element) initialize(name, namespace)
Returns a new instance of Element
216 217 218 219 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 216
def initialize(name, namespace)
@name = name
@namespace = namespace
end |
Instance Attribute Details
- (String) name (readonly)
The element name.
206 207 208 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 206
def name
@name
end |
- (String?) namespace (readonly)
The selector namespace. nil
means the default namespace, ""
means no namespace, "*"
means any namespace.
212 213 214 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 212
def namespace
@namespace
end |
Instance Method Details
- specificity
261 262 263 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 261
def specificity
1
end |
- to_s(opts = {})
222 223 224 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 222
def to_s(opts = {})
@namespace ? "#{@namespace}|#{@name}" : @name
end |
- unify(sels)
There are lots of cases that this documentation specifies; make sure we thoroughly test all of them.
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.
248 249 250 251 252 253 254 255 256 257 258 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector.rb', line 248
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 |