2009-11-21 Simon Fraser <simon.fraser@apple.com>
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 22 Nov 2009 00:18:46 +0000 (00:18 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 22 Nov 2009 00:18:46 +0000 (00:18 +0000)
        Reviewed by Dan Bernstein.

        CSSKeyframesRule::findRule() and deleteRule() should accept 'from' and 'to' as well as percentages
        https://bugs.webkit.org/show_bug.cgi?id=31588

        In WebKitCSSKeyframesRule::findRuleIndex(), map 'from' to 0% an 'to' to 100%
        so that findRule() and deleteRule() work with these keywords.

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@51289 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/animations/keyframes-rule-expected.txt
LayoutTests/animations/keyframes-rule.html
WebCore/ChangeLog
WebCore/css/WebKitCSSKeyframesRule.cpp

index 9d74ab3..5709ae3 100644 (file)
@@ -1,3 +1,15 @@
+2009-11-21  Simon Fraser  <simon.fraser@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        CSSKeyframesRule::findRule() and deleteRule() should accept 'from' and 'to' as well as percentages
+        https://bugs.webkit.org/show_bug.cgi?id=31588
+        
+        Add tests for finding and deleting keyframes using 'from' and 'to'.
+
+        * animations/keyframes-rule-expected.txt:
+        * animations/keyframes-rule.html:
+
 2009-11-20  Chris Fleizach  <cfleizach@apple.com>
 
         Reviewed by Beth Dakin.
index 2123478..51aa8dc 100644 (file)
@@ -43,6 +43,13 @@ Find a rule
 PASS rule.type is window.CSSRule.WEBKIT_KEYFRAME_RULE
 PASS rule.cssText is '50% { left: 30px; }'
 
+Find a rule using from and to
+PASS keyframesFromTo.type is window.CSSRule.WEBKIT_KEYFRAMES_RULE
+PASS rule.type is window.CSSRule.WEBKIT_KEYFRAME_RULE
+PASS rule.cssText is '0% { left: 10px; }'
+PASS rule.type is window.CSSRule.WEBKIT_KEYFRAME_RULE
+PASS rule.cssText is '100% { left: 20px; }'
+
 Try to find a rule that doesn't exist
 PASS Non-existent rule was not found
 
@@ -52,6 +59,12 @@ PASS rules2.item(0).type is window.CSSRule.WEBKIT_KEYFRAME_RULE
 PASS rules2.item(0).keyText is '0%'
 PASS rules2.item(1).keyText is '100%'
 
+Delete a from rule
+PASS rulesFromTo.length is 2
+PASS rulesFromTo.item(0).type is window.CSSRule.WEBKIT_KEYFRAME_RULE
+PASS rulesFromTo.item(0).keyText is '50%'
+PASS rulesFromTo.item(1).keyText is '100%'
+
 Delete a rule that doesn't exist
 PASS rules2.length is 2
 PASS rules2.item(0).type is window.CSSRule.WEBKIT_KEYFRAME_RULE
index 97bad7a..fda6652 100644 (file)
     50% { left: 30px; }
     100% { left: 20px; }
   }
+  @-webkit-keyframes test-from-to {
+    from { left: 10px; }
+    50% { left: 30px; }
+    to { left: 20px; }
+  }
 </style>
 <script src="../fast/js/resources/js-test-pre.js"></script>
 </head>
@@ -109,6 +114,19 @@ shouldBe("rule.type", "window.CSSRule.WEBKIT_KEYFRAME_RULE");
 shouldBe("rule.cssText", "'50% { left: 30px; }'");
 
 debug("");
+debug("Find a rule using from and to");
+
+var keyframesFromTo = document.styleSheets.item(1).cssRules.item(2);
+shouldBe("keyframesFromTo.type", "window.CSSRule.WEBKIT_KEYFRAMES_RULE");
+rule = keyframesFromTo.findRule("From");
+shouldBe("rule.type", "window.CSSRule.WEBKIT_KEYFRAME_RULE");
+shouldBe("rule.cssText", "'0% { left: 10px; }'");
+
+rule = keyframesFromTo.findRule("TO");
+shouldBe("rule.type", "window.CSSRule.WEBKIT_KEYFRAME_RULE");
+shouldBe("rule.cssText", "'100% { left: 20px; }'");
+
+debug("");
 debug("Try to find a rule that doesn't exist");
 
 rule = keyframes2.findRule("70%");
@@ -128,6 +146,16 @@ shouldBe("rules2.item(0).keyText", "'0%'");
 shouldBe("rules2.item(1).keyText", "'100%'");
 
 debug("");
+debug("Delete a from rule");
+keyframesFromTo.deleteRule("0%");
+var rulesFromTo = keyframesFromTo.cssRules;
+shouldBe("rulesFromTo.length", "2");
+shouldBe("rulesFromTo.item(0).type", "window.CSSRule.WEBKIT_KEYFRAME_RULE");
+shouldBe("rulesFromTo.item(0).keyText", "'50%'");
+shouldBe("rulesFromTo.item(1).keyText", "'100%'");
+
+
+debug("");
 debug("Delete a rule that doesn't exist");
 
 keyframes2.deleteRule("70%");
index 86a265d..2602915 100644 (file)
@@ -1,3 +1,16 @@
+2009-11-21  Simon Fraser  <simon.fraser@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        CSSKeyframesRule::findRule() and deleteRule() should accept 'from' and 'to' as well as percentages
+        https://bugs.webkit.org/show_bug.cgi?id=31588
+        
+        In WebKitCSSKeyframesRule::findRuleIndex(), map 'from' to 0% an 'to' to 100%
+        so that findRule() and deleteRule() work with these keywords.
+
+        * css/WebKitCSSKeyframesRule.cpp:
+        (WebCore::WebKitCSSKeyframesRule::findRuleIndex):
+
 2009-11-21  Daniel Bates  <dbates@webkit.org>
 
         Reviewed by Eric Seidel.
index 440d7a2..23f9f34 100644 (file)
@@ -108,8 +108,16 @@ WebKitCSSKeyframeRule* WebKitCSSKeyframesRule::findRule(const String& s)
 
 int WebKitCSSKeyframesRule::findRuleIndex(const String& key) const
 {
+    String percentageString;
+    if (equalIgnoringCase(key, "from"))
+        percentageString = "0%";
+    else if (equalIgnoringCase(key, "to"))
+        percentageString = "100%";
+    else
+        percentageString = key;
+
     for (unsigned i = 0; i < length(); ++i) {
-        if (item(i)->keyText() == key)
+        if (item(i)->keyText() == percentageString)
             return i;
     }