Class Sass::Selector::Universal
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

A universal selector (`*` in CSS).

Methods

new   to_a   unify  

Attributes

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 namespace [Array<String, Sass::Script::Node>, nil] See \{namespace}

[Source]

    # File lib/sass/selector.rb, line 95
95:       def initialize(namespace)
96:         @namespace = namespace
97:       end

Public Instance methods

@see Selector#to_a

[Source]

     # File lib/sass/selector.rb, line 100
100:       def to_a
101:         @namespace ? @namespace + ["|*"] : ["*"]
102:       end

Unification of a universal selector is somewhat complicated, especially when a namespace is specified. If there is no namespace specified or any namespace is specified (namespace `"*"`), then `sel` is returned without change (unless it‘s empty, in which case `"*"` is required).

If a namespace is specified but `sel` does not specify a namespace, then the given namespace is applied to `sel`, either by adding this {Universal} selector or applying this namespace to an existing {Element} selector.

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.

@todo If any branch of a CommaSequence ends up being just `"*"`,

  then all other branches should be eliminated

@see Selector#unify

[Source]

     # File lib/sass/selector.rb, line 129
129:       def unify(sels)
130:         name =
131:           case sels.first
132:           when Universal; :universal
133:           when Element; sels.first.name
134:           else
135:             return [self] + sels unless namespace.nil? || namespace == ['*']
136:             return sels unless sels.empty?
137:             return [self]
138:           end
139: 
140:         ns, accept = unify_namespaces(namespace, sels.first.namespace)
141:         return unless accept
142:         [name == :universal ? Universal.new(ns) : Element.new(name, ns)] + sels[1..-1]
143:       end

[Validate]