OSDN Git Service

Support an isKeyError method
authordhrname <dhrname@users.sourceforge.jp>
Wed, 8 Feb 2017 12:07:57 +0000 (21:07 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Wed, 8 Feb 2017 12:07:57 +0000 (21:07 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index fd398ec..1da1374 100644 (file)
@@ -1295,6 +1295,17 @@ base("$calcMode").up("$attribute").mix( {
      return s;\r
    },\r
    \r
+  /*isKeyErrorメソッド\r
+   * 後述のsetKeyメソッドで使われる。keyTimes属性のエラーをチェックするメソッド\r
+   * 属性値にエラーがあれば、trueを返し、なければ、falseを返す*/\r
+  isKeyError: function(/*number*/ keyLength, /*number*/toLength) {\r
+    if (keyLength && (keyLength !== (toLength+1)) ) {\r
+      return true;\r
+    } else {\r
+      return false;\r
+    }\r
+  },\r
+   \r
    /*setKeyメソッド\r
     * 引数の要素のkeyTimes属性やkeySplines属性を処理するためのメソッド\r
     * 必要な他の属性処理はsetValuesメソッドに任せている*/\r
@@ -1319,10 +1330,19 @@ base("$calcMode").up("$attribute").mix( {
         return null;\r
       }\r
       /*toオブジェクトはtoとfromで一組となっているのでlengthが加算される*/\r
-      if (keys.length && (keys.length !== (to.length+1))) {\r
+      if (this.isKeyError(keys.length, to.length)) {\r
         /*keyTimes属性とvalues属性のリストの個数が合致しない場合、アニメーションの効果がない\r
          * 仕様を参照 SMIL Animation 3.2.3. Animation function calculation modes\r
          * http://www.w3.org/TR/smil-animation/#AnimFuncCalcMode*/\r
+         \r
+        /*ただし、animateMotion要素においては、keyPoints属性が\r
+         * values属性のリストよりも優先されるため、\r
+         * keyPoints属性があるときは、アニメーションの効果がある\r
+         * \r
+         * >Regarding determining the points which correspond to the ‘keyTimes’ attributes, the ‘keyPoints’ attribute overrides ‘path’, which overrides ‘values’\r
+         * \r
+         * http://www.w3.org/TR/SVG11/animate.html#AnimateMotionElement\r
+         */\r
         return null;\r
       }\r
       for (var i=0;i<to.length;++i) {\r
@@ -1356,7 +1376,7 @@ base("$calcMode").up("$attribute").mix( {
         if (keys.length && (keys[0] !== 0)) {\r
           return null;\r
         }\r
-        if (keys.length && (keys.length !== (to.length+1))) {\r
+        if (this.isKeyError(keys.length, to.length)) {\r
           return null;\r
         }\r
         for (var i=0;i<to.length;++i) {\r
index e582fa2..6a11b4c 100644 (file)
@@ -2014,7 +2014,7 @@ describe("SMIL Animation Spec", function() {
         expect(attr.setValues(null, null, null, null)).toBeNull();\r
       } );\r
     } );\r
-    describe("A setKey method", function() {\r
+    describe("A setKey method and a isKeyError method", function() {\r
       var attr, s;\r
       beforeEach( function() {\r
         attr = base("$calcMode").$attribute.up("width");\r
@@ -2025,6 +2025,10 @@ describe("SMIL Animation Spec", function() {
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
         expect(attr.setKey(s)).toBeNull();\r
+        expect(attr.isKeyError()).toBeFalsy();\r
+        expect(attr.isKeyError(0, 0)).toBeFalsy();\r
+        expect(attr.isKeyError(1, 0)).toBeFalsy();\r
+        expect(attr.isKeyError(1, 1)).toBeTruthy();\r
         \r
         s.setAttributeNS(null, "from", "0");\r
         attr.setKey(s);\r