From cab02128a7f4edcae51d2a5feebbca53665e2f6b Mon Sep 17 00:00:00 2001
From: Stan Angeloff <stanimir@psp-webtech.co.uk>
Date: Fri, 13 Apr 2012 19:56:27 +0300
Subject: [PATCH] Turn off legacy IE support in @keyframes.

This commit turns off $legacy-support-for-ie* for @content within the
@keyframes mixin.

If a project has legacy IE support turned on, certain mixins add property
definitions which are not affected by $experimental-support-for-*. One
such mixin is @opacity with will add a `filter:` property.

Because IE 6, 7 and 8 do not support CSS animations and keyframes, we can
safely turn off the support and restore to its previous values once we are
done rendering the @keyframes @content.
---
 .../stylesheets/compass/css3/_shared.scss     | 14 ++++++-
 .../compass/css/animation-with-legacy-ie.css  | 41 +++++++++++++++++++
 .../sass/animation-with-legacy-ie.scss        | 19 +++++++++
 3 files changed, 73 insertions(+), 1 deletion(-)
 create mode 100644 test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css
 create mode 100644 test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss

diff --git a/frameworks/compass/stylesheets/compass/css3/_shared.scss b/frameworks/compass/stylesheets/compass/css3/_shared.scss
index 4076419b..fbe072ad 100644
--- a/frameworks/compass/stylesheets/compass/css3/_shared.scss
+++ b/frameworks/compass/stylesheets/compass/css3/_shared.scss
@@ -46,19 +46,31 @@
   $experimental-support-for-khtml: $khtml;
 }
 
+// Change the legacy-support-for-ie* settings in specific contexts.
+@mixin set-legacy-ie-support($ie6: false, $ie7: false, $ie8: false) {
+  $legacy-support-for-ie6: $ie6;
+  $legacy-support-for-ie7: $ie7;
+  $legacy-support-for-ie8: $ie8;
+}
+
 // This mixin allows you to change the experimental support settings for
 // child (@content) styles.
-@mixin with-only-support-for($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false) {
+@mixin with-only-support-for($moz: false, $webkit: false, $ms: false, $o: false, $khtml: false, $legacy-ie: false) {
   // Capture the current state
   $original-moz: $experimental-support-for-mozilla;
   $original-webkit: $experimental-support-for-webkit;
   $original-o: $experimental-support-for-opera;
   $original-ms: $experimental-support-for-microsoft;
   $original-khtml: $experimental-support-for-khtml;
+  $original-ie6: $legacy-support-for-ie6;
+  $original-ie7: $legacy-support-for-ie7;
+  $original-ie8: $legacy-support-for-ie8;
   // Change support settings
   @include set-experimental-support($moz, $webkit, $ms, $o, $khtml);
+  @include set-legacy-ie-support($legacy-ie, $legacy-ie, $legacy-ie);
   // Apply styles
   @content;
   // Return to original support settings
+  @include set-legacy-ie-support($original-ie6, $original-ie7, $original-ie8);
   @include set-experimental-support($original-moz, $original-webkit, $original-ms, $original-o, $original-khtml);
 }
diff --git a/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css b/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css
new file mode 100644
index 00000000..f5f81815
--- /dev/null
+++ b/test/fixtures/stylesheets/compass/css/animation-with-legacy-ie.css
@@ -0,0 +1,41 @@
+@-moz-keyframes test {
+  0%, 100% {
+    opacity: 1; }
+
+  50% {
+    opacity: 0; } }
+
+@-webkit-keyframes test {
+  0%, 100% {
+    opacity: 1; }
+
+  50% {
+    opacity: 0; } }
+
+@-o-keyframes test {
+  0%, 100% {
+    opacity: 1; }
+
+  50% {
+    opacity: 0; } }
+
+@-ms-keyframes test {
+  0%, 100% {
+    opacity: 1; }
+
+  50% {
+    opacity: 0; } }
+
+@keyframes test {
+  0%, 100% {
+    opacity: 1; }
+
+  50% {
+    opacity: 0; } }
+
+.animation {
+  -webkit-animation: test;
+  -moz-animation: test;
+  -ms-animation: test;
+  -o-animation: test;
+  animation: test; }
diff --git a/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss b/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss
new file mode 100644
index 00000000..89474b5f
--- /dev/null
+++ b/test/fixtures/stylesheets/compass/sass/animation-with-legacy-ie.scss
@@ -0,0 +1,19 @@
+@import "compass/css3/animation";
+@import "compass/css3/opacity";
+
+$legacy-support-for-ie8: true;
+$legacy-support-for-ie7: true;
+$legacy-support-for-ie6: true;
+
+@include keyframes(test) {
+  0%, 100% {
+    @include opacity(1);
+  }
+  50% {
+    @include opacity(0);
+  }
+}
+
+.animation {
+  @include animation(test);
+}