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 21 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 54 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 36 def inlinable? !(pseudo_element? || at_rule? || pseudo_function?) end
# File lib/roadie/selector.rb, line 48 def inspect selector.inspect end
Returns the specificity of the selector, calculating it if needed.
# File lib/roadie/selector.rb, line 27 def specificity @specificity ||= CssParser.calculate_specificity selector end
# File lib/roadie/selector.rb, line 40 def to_s selector end
# File lib/roadie/selector.rb, line 44 def to_str to_s end
Private Instance Methods
# File lib/roadie/selector.rb, line 81 def at_rule? selector[0, 1] == "@" end
# File lib/roadie/selector.rb, line 77 def pseudo_element? selector.include? "::" end
# File lib/roadie/selector.rb, line 85 def pseudo_function? BAD_PSEUDO_FUNCTIONS.any? { |bad| selector.include?(bad) } end