Class: Sass::Selector::Pseudo

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

Overview

A pseudoclass (e.g. :visited) or pseudoelement (e.g. ::first-line) selector. It can have arguments (e.g. :nth-child(2n+1)).

Constant Summary collapse

FINAL_SELECTORS =

Some psuedo-class-syntax selectors (:after and `:before) are actually considered pseudo-elements and must be at the end of the selector to function properly.

Returns:

  • (Array<String>)
%w[after before]

Instance Attribute Summary collapse

Attributes inherited from Simple

#filename, #line

Instance Method Summary collapse

Methods inherited from Simple

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

Constructor Details

#initialize(type, name, arg) ⇒ Pseudo

Returns a new instance of Pseudo.

Parameters:

  • type (Symbol)

    See #type

  • name (Array<String, Sass::Script::Node>)

    The name of the selector

  • arg (nil, Array<String, Sass::Script::Node>)

    The argument to the selector, or nil if no argument was given



382
383
384
385
386
# File 'lib/sass/selector.rb', line 382

def initialize(type, name, arg)
  @type = type
  @name = name
  @arg = arg
end

Instance Attribute Details

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

The argument to the selector, or nil if no argument was given.

This may include SassScript nodes that will be run during resolution. Note that this should not include SassScript nodes after resolution has taken place.

Returns:



376
377
378
# File 'lib/sass/selector.rb', line 376

def arg
  @arg
end

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

The name of the selector.

Returns:



366
367
368
# File 'lib/sass/selector.rb', line 366

def name
  @name
end

#typeSymbol (readonly)

The type of the selector. :class if this is a pseudoclass selector, :element if it's a pseudoelement.

Returns:

  • (Symbol)


354
355
356
# File 'lib/sass/selector.rb', line 354

def type
  @type
end

Instance Method Details

#final?Boolean

Returns:

  • (Boolean)


388
389
390
# File 'lib/sass/selector.rb', line 388

def final?
  type == :class && FINAL_SELECTORS.include?(name.first)
end

#specificity



413
414
415
# File 'lib/sass/selector.rb', line 413

def specificity
  type == :class ? SPECIFICITY_BASE : 1
end

#to_a

See Also:

  • Selector#to_a


393
394
395
396
397
# File 'lib/sass/selector.rb', line 393

def to_a
  res = [@type == :class ? ":" : "::"] + @name
  (res << "(").concat(Sass::Util.strip_string_array(@arg)) << ")" if @arg
  res
end

#unify(sels)

Returns nil if this is a pseudoelement selector and sels contains a pseudoelement selector different than this one.

See Also:

  • Selector#unify


403
404
405
406
407
408
409
410
# File 'lib/sass/selector.rb', line 403

def unify(sels)
  return if type == :element && sels.any? do |sel|
    sel.is_a?(Pseudo) && sel.type == :element &&
      (sel.name != self.name || sel.arg != self.arg)
  end
  return sels + [self] if final?
  super
end