OSDN Git Service

Modify the object
authordhrname <dhrname@users.sourceforge.jp>
Tue, 31 May 2016 14:27:30 +0000 (23:27 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Tue, 31 May 2016 14:27:30 +0000 (23:27 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index e4f66f0..99bd6ef 100644 (file)
@@ -1738,18 +1738,17 @@ base("$frame").up("$svgEvent").mix( {
         if (simpleDur && (activeTime !== simpleDur)) {\r
           /*活動継続時間と単純持続時間が異なるとき、repeatイベントを設定\r
            * ただし、repeatイベントはendイベントが発生する前に起きるものと仮定*/\r
-          first.next = {\r
-            firstFrame: begin + simpleDur,\r
-            frame: begin + simpleDur,\r
-            eventType: "repeat",\r
-            target: target,\r
-            /*リピートの制限時間*/\r
-            limit: begin + activeTime,\r
-            /*リピートの回数 (n >= 1)*/\r
-            count: 1,\r
-            simpleDuration: simpleDur,\r
-            next: first.next\r
-          };\r
+          for (var a = first, i= begin + simpleDur, n=1;i < begin + activeTime; i+=simpleDur, ++n) {\r
+            a.next = {\r
+              frame: i,\r
+              eventType: "repeat",\r
+              target: target,\r
+              /*リピートの回数 (n >= 1)*/\r
+              count: n,\r
+              next: a.next\r
+            };\r
+            a = a.next;\r
+          }\r
         }\r
       }\r
     timelines = obj = first = begin = target = simpleDur = activeTime = void 0;\r
@@ -1778,22 +1777,15 @@ base("$frame").up("$svgEvent").mix( {
       if (frame <= num) {\r
         /*IE11ではSVGEventsやDOMEventsを使うと問題が起きるため、MouseEventsで代用する*/\r
         if (obj.eventType === "repeat") {\r
-          var simpleDuration = obj.simpleDuration;\r
-          /*リピートイベントが、リピート制限内である場合\r
-           *numの段階で、何回リピートしたかを求める*/\r
-          detail = obj.count = floor( (num - obj.firstFrame) / simpleDuration) + 1;\r
-          /*simpleDurationを足すことによって、リピートイベントが\r
-           * 単純継続時間内に何度も繰り返されることを防ぐ*/\r
-          frame += simpleDuration;\r
-          obj.frame = frame;\r
+          /*detailは何回リピートしたか*/\r
+          detail = obj.count;\r
         }\r
-        /*obj.limitはrepeatイベントの制限で使われるもの*/\r
-        if ((obj.eventType !== "repeat") || (frame >= obj.limit)) {\r
-          /*ポインタの連結を変更することで、リストからobj を除去*/\r
-          cobj.next = obj.next;\r
-          if (this.first === obj) {\r
-            cobj = this.first = obj.next;\r
-          }\r
+        /*ポインタの連結を変更することで、リストからobj を除去\r
+         * 一度除去したものはイベントを発生させない*/\r
+        cobj.next = obj.next;\r
+        if (this.first === obj) {\r
+          cobj = obj.next;\r
+          this.first = cobj;\r
         } else {\r
           cobj = obj;\r
         }\r
@@ -1806,7 +1798,7 @@ base("$frame").up("$svgEvent").mix( {
       }\r
       obj = obj.next;\r
     }\r
-    obj = num = first = frame = target = cobj = simpleDuration = detail = void 0;\r
+    obj = num = first = frame = target = cobj = detail = void 0;\r
     return s;\r
   }\r
 } );\r
index 78d512a..310744c 100644 (file)
@@ -2757,12 +2757,10 @@ describe("SMIL Animation Spec", function() {
             eventType: "begin",\r
             target: ele,\r
           \r
-            next: { firstFrame: 10,\r
+            next: {\r
               frame: 10,\r
               eventType: "repeat",\r
-              limit: 12,\r
               count: 1,\r
-              simpleDuration: 9,\r
               target: ele,\r
             \r
               next: { frame: 12,\r
@@ -2795,18 +2793,23 @@ describe("SMIL Animation Spec", function() {
             eventType: "begin",\r
             target: ele,\r
           \r
-            next: {firstFrame:5,\r
+            next: {\r
               frame: 5,\r
               eventType: "repeat",\r
-              limit: 11,\r
               count: 1,\r
-              simpleDuration: 4,\r
               target: ele,\r
             \r
-              next: { frame: 11,\r
-                eventType: "end",\r
+              next: {\r
+                frame: 9,\r
+                eventType: "repeat",\r
+                count: 2,\r
                 target: ele,\r
-                next: null\r
+              \r
+                next: { frame: 11,\r
+                  eventType: "end",\r
+                  target: ele,\r
+                  next: null\r
+                }\r
               }\r
             }\r
           };\r
@@ -2820,9 +2823,7 @@ describe("SMIL Animation Spec", function() {
         expect(frame.first).toEqual(a);\r
         frame.setFrame(5);\r
         frame.$endFrame.setFrame(5);\r
-        a.count = 1;\r
-        a.frame = 9;\r
-        expect(frame.first).toEqual(a);\r
+        expect(frame.first).toEqual(a.next);\r
 \r
         ele.addEventListener("repeatEvent", function(evt) {\r
           expect(evt.target).toBe(ele);\r
@@ -2838,10 +2839,18 @@ describe("SMIL Animation Spec", function() {
         }) );\r
         frame.setFrame(9);\r
         frame.$endFrame.setFrame(9);\r
-        a.count = 2;\r
-        a.limit = 16;\r
-        a.next.frame = 16;\r
-        expect(frame.first).toEqual(a);\r
+        expect(frame.first).toEqual({\r
+                frame: 13,\r
+                eventType: "repeat",\r
+                count: 3,\r
+                target: ele,\r
+              \r
+                next: { frame: 16,\r
+                  eventType: "end",\r
+                  target: ele,\r
+                  next: null\r
+                }\r
+              } );\r
       } );\r
       afterEach( function() {\r
         base("$frame").startAnimation();\r