class Roadie::Selector
@api private
A selector is a domain object for a CSS selector, such as:
body a:hover input::placeholder p:nth-of-child(4n+1) .important a img
“Selectors” such as “strong, em” are actually two selectors and should be represented as two instances of this class.
This class can also calculate specificity for the selector and answer a few questions about them.
Selectors can be coerced into Strings, so they should be transparent to use anywhere a String is expected.
Constants
- BAD_PSEUDO_FUNCTIONS
Attributes
Public Class Methods
# File lib/roadie/selector.rb, line 19 def initialize(selector, specificity = nil) @selector = selector.to_s.strip @specificity = specificity end
Public Instance Methods
{Selector}s are equal to other {Selector}s if, and only if, their string representations are equal.
# File lib/roadie/selector.rb, line 44 def ==(other) if other.is_a?(self.class) other.selector == selector else super end end
Returns whenever or not a selector can be inlined. It's impossible to
inline properties that applies to a pseudo element (like
::placeholder
, ::before
) or a pseudo function
(like :active
).
We cannot inline styles that appear inside “@” constructs, like +@keyframes+.
# File lib/roadie/selector.rb, line 34 def inlinable? !(pseudo_element? || at_rule? || pseudo_function?) end
# File lib/roadie/selector.rb, line 40 def inspect() selector.inspect end
Returns the specificity of the selector, calculating it if needed.
# File lib/roadie/selector.rb, line 25 def specificity @specificity ||= CssParser.calculate_specificity selector end
# File lib/roadie/selector.rb, line 38 def to_s() selector end
# File lib/roadie/selector.rb, line 39 def to_str() to_s end
Private Instance Methods
# File lib/roadie/selector.rb, line 67 def at_rule? selector[0, 1] == '@' end
# File lib/roadie/selector.rb, line 63 def pseudo_element? selector.include? '::' end
# File lib/roadie/selector.rb, line 71 def pseudo_function? BAD_PSEUDO_FUNCTIONS.any? { |bad| selector.include?(bad) } end