Fix a css2sass bug.

Rule-flattening wasn't working quite properly.

    foo.bar { baz: boom }

would render as

    foo &.bar
      baz: boom
This commit is contained in:
Nathan Weizenbaum 2008-04-29 15:09:07 -07:00
parent b05cafdf41
commit 0b1d5c48d9
1 changed files with 18 additions and 1 deletions

View File

@ -313,6 +313,17 @@ module Sass
# foo bar baz # foo bar baz
# color: red # color: red
# #
# and
#
# foo
# &.bar
# color: blue
#
# becomes
#
# foo.bar
# color: blue
#
def flatten_rules(root) def flatten_rules(root)
root.children.each { |child| flatten_rule(child) if child.is_a?(Tree::RuleNode) } root.children.each { |child| flatten_rule(child) if child.is_a?(Tree::RuleNode) }
end end
@ -320,7 +331,13 @@ module Sass
def flatten_rule(rule) def flatten_rule(rule)
while rule.children.size == 1 && rule.children.first.is_a?(Tree::RuleNode) while rule.children.size == 1 && rule.children.first.is_a?(Tree::RuleNode)
child = rule.children.first child = rule.children.first
rule.rule = "#{rule.rule} #{child.rule}"
if child.rule[0] == ?&
rule.rule = child.rule.gsub /^&/, rule.rule
else
rule.rule = "#{rule.rule} #{child.rule}"
end
rule.children = child.children rule.children = child.children
end end