Class: Sass::Selector::Simple

Inherits:
Object
  • Object
show all
Defined in:
/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb

Overview

The abstract superclass for simple selectors (that is, those that don’t compose multiple selectors).

Direct Known Subclasses

Attribute, Class, Element, Id, Parent, Placeholder, Pseudo, Universal

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Instance Attribute Details

- (String?) filename

The name of the file in which this selector was declared, or nil if it was not declared in a file (e.g. on stdin).

Returns:

  • (String, nil)


15
16
17
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 15

def filename
  @filename
end

- (Fixnum) line

The line of the Sass template on which this selector was declared.

Returns:

  • (Fixnum)


9
10
11
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 9

def line
  @line
end

Instance Method Details

- (Boolean) eql?(other) Also known as: ==

Checks equality between this and another object.

By default, this is based on the value of #to_a, so if that contains information irrelevant to the identity of the selector, this should be overridden.

Parameters:

  • other (Object)

    The object to test equality against

Returns:

  • (Boolean)

    Whether or not this is equal to other



52
53
54
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 52

def eql?(other)
  other.class == self.class && other.hash == hash && other.equality_key == equality_key
end

- (String) equality_key (protected)

Returns the key used for testing whether selectors are equal.

This is a cached version of #to_s.

Returns:

  • (String)


91
92
93
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 91

def equality_key
  @equality_key ||= to_s
end

- (Fixnum) hash

Returns a hash code for this selector object.

By default, this is based on the value of #to_a, so if that contains information irrelevant to the identity of the selector, this should be overridden.

Returns:

  • (Fixnum)


40
41
42
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 40

def hash
  @_hash ||= equality_key.hash
end

- (String) inspect

Returns:

  • (String)

See Also:



20
21
22
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 20

def inspect
  to_s
end

- (String) to_s(opts = {})

Returns the selector string.

Parameters:

  • opts (Hash) (defaults to: {})

    rendering options.

Options Hash (opts):

  • :style (Symbol)

    The css rendering style.

Returns:

  • (String)


29
30
31
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 29

def to_s(opts = {})
  Sass::Util.abstract(self)
end

- (Array<Simple>?) unify(sels)

Unifies this selector with a Sass::Selector::SimpleSequence‘s members array, returning another SimpleSequence members array that matches both this selector and the input selector.

By default, this just appends this selector to the end of the array (or returns the original array if this selector already exists in it).

Parameters:

Returns:

Raises:

  • (Sass::SyntaxError)

    If this selector cannot be unified. This will only ever occur when a dynamic selector, such as Parent or Interpolation, is used in unification. Since these selectors should be resolved by the time extension and unification happen, this exception will only ever be raised as a result of programmer error



74
75
76
77
78
79
80
81
82
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 74

def unify(sels)
  return sels if sels.any? {|sel2| eql?(sel2)}
  sels_with_ix = Sass::Util.enum_with_index(sels)
  if !is_a?(Pseudo) || (sels.last.is_a?(Pseudo) && sels.last.type == :element)
    _, i = sels_with_ix.find {|sel, _| sel.is_a?(Pseudo)}
  end
  return sels + [self] unless i
  sels[0...i] + [self] + sels[i..-1]
end

- (Array(String or nil, Boolean)) unify_namespaces(ns1, ns2) (protected)

Unifies two namespaces, returning a namespace that works for both of them if possible.

Parameters:

  • ns1 (String, nil)

    The first namespace. nil means none specified, e.g. foo. The empty string means no namespace specified, e.g. |foo. "*" means any namespace is allowed, e.g. *|foo.

  • ns2 (String, nil)

    The second namespace. See ns1.

Returns:

  • (Array(String or nil, Boolean))

    The first value is the unified namespace, or nil for no namespace. The second value is whether or not a namespace that works for both inputs could be found at all. If the second value is false, the first should be ignored.



108
109
110
111
112
113
# File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/selector/simple.rb', line 108

def unify_namespaces(ns1, ns2)
  return nil, false unless ns1 == ns2 || ns1.nil? || ns1 == '*' || ns2.nil? || ns2 == '*'
  return ns2, true if ns1 == '*'
  return ns1, true if ns2 == '*'
  [ns1 || ns2, true]
end