diff --git a/doc-src/SASS_CHANGELOG.md b/doc-src/SASS_CHANGELOG.md index d6ed1c3530..2c446a7716 100644 --- a/doc-src/SASS_CHANGELOG.md +++ b/doc-src/SASS_CHANGELOG.md @@ -7,6 +7,8 @@ * Be clearer in the reference about hyphen/underscore equivalence. +* `@keyframes` rules are now converted from CSS properly. + ## 3.4.12 (13 February 2015) [Tagged on GitHub](https://github.com/sass/sass/releases/tag/3.4.12). diff --git a/lib/sass/scss/css_parser.rb b/lib/sass/scss/css_parser.rb index d6558166c2..76917c9420 100644 --- a/lib/sass/scss/css_parser.rb +++ b/lib/sass/scss/css_parser.rb @@ -14,6 +14,13 @@ def parent_selector; nil; end def interpolation(warn_for_color = false); nil; end def use_css_import?; true; end + def block_contents(node, context) + if node.is_a?(Sass::Tree::DirectiveNode) && node.normalized_name == '@keyframes' + context = :keyframes + end + super(node, context) + end + def block_child(context) case context when :ruleset @@ -22,6 +29,8 @@ def block_child(context) directive || ruleset when :directive directive || declaration_or_ruleset + when :keyframes + keyframes_ruleset end end @@ -35,6 +44,12 @@ def ruleset block(node(Sass::Tree::RuleNode.new(selector, range(start_pos)), start_pos), :ruleset) end + def keyframes_ruleset + start_pos = source_position + return unless (selector = keyframes_selector) + block(node(Sass::Tree::KeyframeRuleNode.new(selector.strip), start_pos), :ruleset) + end + @sass_script_parser = Class.new(Sass::Script::CssParser) @sass_script_parser.send(:include, ScriptParser) end diff --git a/lib/sass/tree/visitors/convert.rb b/lib/sass/tree/visitors/convert.rb index ecbf0c9625..3f845af11a 100644 --- a/lib/sass/tree/visitors/convert.rb +++ b/lib/sass/tree/visitors/convert.rb @@ -280,6 +280,10 @@ def visit_atroot(node) end end + def visit_keyframerule(node) + "#{tab_str}#{node.resolved_value}#{yield}\n" + end + private def interp_to_src(interp) diff --git a/test/sass/css2sass_test.rb b/test/sass/css2sass_test.rb index b8cd1f667b..3685d9b32d 100755 --- a/test/sass/css2sass_test.rb +++ b/test/sass/css2sass_test.rb @@ -263,6 +263,38 @@ def test_subject CSS end + def test_keyframes + assert_equal(<