1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00
haml--haml/lib/sass/selector.rb
2010-02-25 21:23:34 -08:00

111 lines
2 KiB
Ruby

module Sass
# A namespace for nodes in the parse tree for selectors.
#
# This parse tree is distinct from the normal Sass/SCSS parse tree.
# It's used primarily for
module Selector
class Node
def to_a
raise NotImplementedError.new("All static-node subclasses of Sass::Selector::Node must override #to_a.")
end
end
class Parent < Node
def to_a
["&"]
end
end
class Class < Node
def initialize(name)
@name = name
end
def to_a
[".", @name]
end
end
class Id < Node
def initialize(name)
@name = name
end
def to_a
["#", @name]
end
end
class Universal < Node
def initialize(namespace)
@namespace = namespace
end
def to_a
@namespace ? [@namespace, "|*"] : ["*"]
end
end
class Element < Node
def initialize(name, namespace)
@name = name
@namespace = namespace
end
def to_a
@namespace ? [@namespace, "|", @name] : [@name]
end
end
class Interpolation < Node
def initialize(script)
@script = script
end
def to_a
[@script]
end
end
class Attribute < Node
def initialize(name, namespace, operator, value)
@name = name
@namespace = namespace
@operator = operator
@value = value
end
def to_a
res = ["["]
res << @namespace << "|" if @namespace
res << @name
res << @operator << @value if @value
res << "]"
end
end
class Pseudo < Node
def initialize(type, name, arg)
@type = type
@name = name
@arg = arg
end
def to_a
res = [@type == :class ? ":" : "::", @name]
res << "(" << @arg << ")" if @arg
res
end
end
class Negation < Node
def initialize(selector)
@selector = selector
end
def to_a
[":not("] + @selector.to_a + [")"]
end
end
end
end