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/tree/mixin_def_node.rb
2010-04-27 04:06:52 -07:00

60 lines
1.8 KiB
Ruby

module Sass
module Tree
# A dynamic node representing a mixin definition.
#
# @see Sass::Tree
class MixinDefNode < Node
# @param name [String] The mixin name
# @param args [Array<(Script::Node, Script::Node)>] The arguments for the mixin.
# Each element is a tuple containing the variable for argument
# and the parse tree for the default value of the argument
def initialize(name, args)
@name = name
@args = args
super()
end
protected
# @see Node#to_src
def to_src(tabs, opts, fmt)
args =
if @args.empty?
""
else
'(' + @args.map do |v, d|
if d
"#{v.to_sass(opts)}: #{d.to_sass(opts)}"
else
v.to_sass(opts)
end
end.join(", ") + ')'
end
"#{' ' * tabs}#{fmt == :sass ? '=' : '@mixin '}#{dasherize(@name, opts)}#{args}" +
children_to_src(tabs, opts, fmt)
end
# Loads the mixin into the environment.
#
# @param environment [Sass::Environment] The lexical environment containing
# variable and mixin values
def _perform(environment)
environment.set_mixin(@name, Sass::Mixin.new(@name, @args, environment, children))
[]
end
# Returns an error message if the given child node is invalid,
# and false otherwise.
#
# {ExtendNode}s are valid within {MixinDefNode}s.
#
# @param child [Tree::Node] A potential child node.
# @return [Boolean, String] Whether or not the child node is valid,
# as well as the error message to display if it is invalid
def invalid_child?(child)
super unless child.is_a?(ExtendNode)
end
end
end
end