Class Sass::Selector::Element
In: lib/sass/selector.rb
Parent: Simple
Haml::Util Engine Color SyntaxError UnitConversionError StandardError AbstractSequence CommaSequence Sequence SimpleSequence Simple Parent Universal Class Negation Id Pseudo Attribute Interpolation Element Node Operation Literal UnaryOperation StringInterpolation Funcall Variable Interpolation Lexer CssLexer Number String Bool Parser Parser CssParser EvaluationContext StaticParser SassParser CssParser Node DebugNode IfNode CommentNode ForNode PropNode MixinNode DirectiveNode VariableNode RootNode WarnNode ExtendNode RuleNode MixinDefNode WhileNode Enumerable ImportNode Merb::BootLoader MerbBootLoader Repl CSS Environment Rack StalenessChecker lib/sass/repl.rb lib/sass/css.rb lib/sass/environment.rb lib/sass/error.rb lib/sass/engine.rb lib/sass/selector/simple_sequence.rb lib/sass/selector/abstract_sequence.rb lib/sass/selector/sequence.rb lib/sass/selector/comma_sequence.rb lib/sass/selector/simple.rb lib/sass/selector.rb Selector lib/sass/script/css_parser.rb lib/sass/script/lexer.rb lib/sass/script/color.rb lib/sass/script/string.rb lib/sass/script/unary_operation.rb lib/sass/script/variable.rb lib/sass/script/funcall.rb lib/sass/script/string_interpolation.rb lib/sass/script/operation.rb lib/sass/script/bool.rb lib/sass/script/parser.rb lib/sass/script/node.rb lib/sass/script/literal.rb lib/sass/script/interpolation.rb lib/sass/script/css_lexer.rb lib/sass/script/number.rb lib/sass/script/functions.rb Functions Script lib/sass/scss/sass_parser.rb lib/sass/scss/static_parser.rb lib/sass/scss/parser.rb lib/sass/scss/css_parser.rb ScriptParser ScriptLexer RX SCSS Files Callbacks lib/sass/tree/while_node.rb lib/sass/tree/if_node.rb lib/sass/tree/mixin_def_node.rb lib/sass/tree/debug_node.rb lib/sass/tree/root_node.rb lib/sass/tree/for_node.rb lib/sass/tree/import_node.rb lib/sass/tree/prop_node.rb lib/sass/tree/node.rb lib/sass/tree/comment_node.rb lib/sass/tree/extend_node.rb lib/sass/tree/mixin_node.rb lib/sass/tree/warn_node.rb lib/sass/tree/directive_node.rb lib/sass/tree/rule_node.rb lib/sass/tree/variable_node.rb Tree lib/sass/plugin/rack.rb lib/sass/plugin/staleness_checker.rb lib/sass/plugin/merb.rb Plugin Sass dot/m_61_0.png

An element selector (e.g. `h1`).

Methods

new   to_a   unify  

Attributes

name  [R]  The element name.

@return [Array<String, Sass::Script::Node>]

namespace  [R]  The selector namespace. `nil` means the default namespace, `[""]` means no namespace, `["*"]` means any namespace.

@return [Array<String, Sass::Script::Node>, nil]

Public Class methods

@param name [Array<String, Sass::Script::Node>] The element name @param namespace [Array<String, Sass::Script::Node>, nil] See \{namespace}

[Source]

     # File lib/sass/selector.rb, line 163
163:       def initialize(name, namespace)
164:         @name = name
165:         @namespace = namespace
166:       end

Public Instance methods

@see Selector#to_a

[Source]

     # File lib/sass/selector.rb, line 169
169:       def to_a
170:         @namespace ? @namespace + ["|"] + @name : @name
171:       end

Unification of an element selector is somewhat complicated, especially when a namespace is specified. First, if `sel` contains another {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.

@todo There are lots of cases that this documentation specifies;

  make sure we thoroughly test **all of them**.

@todo Keep track of whether a default namespace has been declared

  and handle namespace-unspecified selectors accordingly.

@see Selector#unify

[Source]

     # File lib/sass/selector.rb, line 195
195:       def unify(sels)
196:         case sels.first
197:         when Universal;
198:         when Element; return unless name == sels.first.name
199:         else return [self] + sels
200:         end
201: 
202:         ns, accept = unify_namespaces(namespace, sels.first.namespace)
203:         return unless accept
204:         [Element.new(name, ns)] + sels[1..-1]
205:       end

[Validate]