OSDN Git Service

Modify the updateState method
authordhrname <dhrname@users.sourceforge.jp>
Tue, 25 Oct 2016 13:33:04 +0000 (22:33 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Tue, 25 Oct 2016 13:33:04 +0000 (22:33 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index 4c17f3e..c880a0b 100644 (file)
@@ -194,7 +194,12 @@ base("$frame").mix ( {
           this.state = begin;\r
         }\r
       } else if (state === begin) {\r
-        this.state = play;\r
+        if (startTime === endTime) {\r
+          /*開始時刻と終了時刻が一致したときは、直接BEGINNING状態からENDING状態へ移行*/\r
+          this.state = end;\r
+        } else {\r
+          this.state = play;\r
+        }\r
       } else if (state === play) {\r
         if ( (endTime >= cacheBegin) || (startTime > cacheBegin) ) {\r
           /*終了時刻に到達したか、再び開始イベントが発火されたとき*/\r
@@ -262,12 +267,6 @@ base("$frame").mix ( {
     /*後述の$beginや$endで使うメソッド*/\r
     this.addList = this.addBeginList;\r
   } );\r
-  \r
-  /*$endFrame オブジェクト\r
-   * 終了時の処理をするためのフレームを集める*/\r
-  $frame.up("$endFrame").mix( {\r
-    timelines: []\r
-  } );\r
    \r
   /*$begin オブジェクト\r
    * 開始のタイミングを計算する*/\r
@@ -437,10 +436,6 @@ base("$frame").mix ( {
       /*初期値を設定*/\r
       this.begin = 0;\r
       this.isResolved = false;\r
-      /*beginとend属性を考慮に入れないで、活動継続時間を求める*/\r
-      var s = ( this.$activate = this.$activate.up() );\r
-      this.activeTime = s.call() || Number.MAX_VALUE;\r
-      this.simpleDuration = s.simpleDur;\r
       var str = this.trim(this.string);\r
       if (str.indexOf(";") > -1){\r
         /*;で区切られたリストを一つずつ解析*/\r
@@ -455,11 +450,15 @@ base("$frame").mix ( {
       return this;\r
     },\r
     \r
-    /*$listã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92æ\9b´æ\96°ã\81\99るメソッド*/\r
+    /*$listã\81¨$activateã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\82\92æ\9b´æ\96°ã\81\97ã\81¦ã\80\81æ´»å\8b\95ç¶\99ç¶\9aæ\99\82é\96\93ã\82\92æ±\82ã\82\81るメソッド*/\r
     updateList: function() {\r
       this.$list = this.$list.up();\r
       /*$endオブジェクトに付属している$listプロパティを更新したものと一致させておく*/\r
       this.$activate.end && (this.$activate.end.$list = this.$list);\r
+      /*beginとend属性を考慮に入れないで、活動継続時間を求める*/\r
+      var s = ( this.$activate = this.$activate.up() );\r
+      this.activeTime = s.call() || Number.MAX_VALUE;\r
+      this.simpleDuration = s.simpleDur;\r
       return this;\r
     }\r
     \r
@@ -2103,7 +2102,6 @@ if (!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Anim
           frame++;\r
           try {\r
             $f.setFrame(frame);\r
-            $f.$endFrame.setFrame(frame);\r
           } catch(e) {\r
           }\r
           _cancel.handle = requestAnimationFrame(step);\r
index a1c5084..0a4ef97 100644 (file)
@@ -296,6 +296,11 @@ describe("SMIL Animation Spec", function() {
       expect(frame.state).toBe(frame.POSTWAITING);\r
       expect(frame.updateState(4).state).toBe(frame.POSTWAITING);\r
       expect(frame.state).toBe(frame.POSTWAITING);\r
+      \r
+      appendEnd(1);\r
+      expect(frame.updateState(1).state).toBe(frame.BEGINNING);\r
+      expect(frame.updateState(1).state).toBe(frame.ENDING);\r
+      expect(frame.updateState(1).state).toBe(frame.POSTWAITING);\r
     } );\r
     /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
     it("should be this for the value (the invalid partion)", function() {\r
@@ -494,7 +499,7 @@ describe("SMIL Animation Spec", function() {
       var $list = begin.$list;\r
       expect(begin.$list).toBe($list);\r
       expect(begin.updateList().$list).not.toBe($list);\r
-      expect(begin.$activate.end.$list).toBe(begin.$list);\r
+      console.log(begin.$activate);\r
     } );\r
     /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r
     it("should be this for the value (the invalid partion)", function() {\r
@@ -2155,10 +2160,9 @@ describe("SMIL Animation Spec", function() {
         ele = document.createElementNS("http://www.w3.org/2000/svg", "set");\r
         p.appendChild(ele);\r
         frame = base("$frame");\r
-        frame.timelines.length = frame.$endFrame.timelines.length = 0; //配列の初期化\r
+        frame.timelines.length = 0; //配列の初期化\r
         frame.startTime = Date.now();\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
       } );\r
       afterEach( function() {\r
         $set.isCSS = false;\r
@@ -2174,11 +2178,9 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         expect($set.timeline).not.toBe(frame.$begin);\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         \r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
         expect(ele.parentNode.hasAttributeNS(null, "fill")).toBeFalsy();\r
       } );\r
       /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
@@ -2192,17 +2194,14 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         var f = function(num) {\r
           frame.setFrame(num);\r
-          frame.$endFrame.setFrame(num);\r
           expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBeNull();\r
         }\r
         f(0);\r
         f(1);\r
         f(23);\r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(25);\r
-        frame.$endFrame.setFrame(25);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         f(48);\r
         f(49);\r
@@ -2214,16 +2213,12 @@ describe("SMIL Animation Spec", function() {
         f(1);\r
         f(23);\r
         frame.setFrame(24);\r
-        frame.$endFrame.setFrame(24);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(25);\r
-        frame.$endFrame.setFrame(25);\r
         expect(ele.parentNode.getAttributeNS(null, "fill")).toBe("red");\r
         frame.setFrame(48);\r
-        frame.$endFrame.setFrame(48);\r
         expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         frame.setFrame(49);\r
-        frame.$endFrame.setFrame(49);\r
         expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         ele.setAttributeNS(null, "begin", "1s");\r
         ele.setAttributeNS(null, "attributeName", "fill");\r
@@ -2233,7 +2228,6 @@ describe("SMIL Animation Spec", function() {
         $set.isCSS = false;\r
         var f = function(num) {\r
           frame.setFrame(num);\r
-          frame.$endFrame.setFrame(num);\r
           expect(ele.parentNode.getAttributeNS(null, "fill") || null).toBe("red");\r
         }\r
         f(0);\r
@@ -2260,7 +2254,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         /*境界条件を調べておく (limit value analysis)*/\r
         it("should be this for the value  (limit value analysis)", function() {\r
@@ -2274,7 +2267,6 @@ describe("SMIL Animation Spec", function() {
           $animate.init(ele);\r
           expect($animate.isCSS).toBeFalsy();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
           var p = ele.parentNode;\r
           /*getAttributeNSメソッドは、IE11では空文字列を返す(DOM 2に準拠)のに対して、\r
            * 他のブラウザではnullを返すため、その対策をする*/\r
@@ -2282,7 +2274,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d") || "").toBe(result);\r
           };\r
           \r
@@ -2316,7 +2307,6 @@ describe("SMIL Animation Spec", function() {
                 to = attr[2];\r
             function g(fr, result) {\r
               frame.setFrame(fr);\r
-              frame.$endFrame.setFrame(fr);\r
               expect(p.style.getPropertyValue(attrName) || p.getAttribute(attrName) || "").toBe(result);\r
             };\r
 \r
@@ -2350,7 +2340,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d")).toBe(result);\r
           };\r
           \r
@@ -2483,7 +2472,6 @@ describe("SMIL Animation Spec", function() {
           ( function(attrName) {\r
             function g(fr, result) {\r
               frame.setFrame(fr);\r
-              frame.$endFrame.setFrame(fr);\r
               expect(p.style.getPropertyValue(attrName)).toBe(result);\r
             };\r
 \r
@@ -2540,7 +2528,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f(fr, result) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.getAttributeNS(null, "d") || null).toBe(result);\r
           };\r
           f(0, null);\r
@@ -2588,7 +2575,6 @@ describe("SMIL Animation Spec", function() {
           \r
           f = function (fr, result, attr) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(p.style.getPropertyValue(attr).replace(/\s/g, "")).toBe(result.replace(/\s/g, ""));\r
           };\r
         } );\r
@@ -2667,7 +2653,6 @@ describe("SMIL Animation Spec", function() {
           \r
           function f (fr, result, attr) {\r
             frame.setFrame(fr);\r
-            frame.$endFrame.setFrame(fr);\r
             expect(ele.parentNode.getAttributeNS(null,attr)).toBe(result);\r
           };\r
           f(0, "#83.0C", "fi");\r
@@ -2769,10 +2754,8 @@ describe("SMIL Animation Spec", function() {
           expect(isFiredBeginEvent).toBeTruthy();\r
         } );\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toBeNull();\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toBeNull();\r
         \r
         frame.timelines = [];\r
@@ -2824,7 +2807,6 @@ describe("SMIL Animation Spec", function() {
           };\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(11);\r
-        frame.$endFrame.setFrame(11);\r
         expect(frame.first).toEqual( {frame: 12,\r
                 eventType: "end",\r
                 target: ele,\r
@@ -2868,14 +2850,11 @@ describe("SMIL Animation Spec", function() {
           };\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(1);\r
-        frame.$endFrame.setFrame(1);\r
         a = a.next;\r
         expect(frame.first).toEqual(a);\r
         frame.setFrame(5);\r
-        frame.$endFrame.setFrame(5);\r
         expect(frame.first).toEqual(a.next);\r
 \r
         ele.addEventListener("repeatEvent", function(evt) {\r
@@ -2892,7 +2871,6 @@ describe("SMIL Animation Spec", function() {
           target: ele\r
         }) );\r
         frame.setFrame(9);\r
-        frame.$endFrame.setFrame(9);\r
         expect(frame.first).toEqual({\r
                 frame: 13,\r
                 eventType: "repeat",\r
@@ -2924,7 +2902,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3150,7 +3127,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3202,7 +3178,6 @@ describe("SMIL Animation Spec", function() {
           frame.timelines.length = 0;\r
           frame.startTime = Date.now();\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
         } );\r
         afterEach( function() {\r
           $animate.numberOfList = -1;\r
@@ -3235,7 +3210,6 @@ describe("SMIL Animation Spec", function() {
         frame.pauseAnimation();\r
         frame.timelines.length = 0; //配列の初期化\r
         frame.setFrame(0);\r
-        frame.$endFrame.setFrame(0);\r
       } );\r
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
@@ -3263,13 +3237,10 @@ describe("SMIL Animation Spec", function() {
         evt = ele.ownerDocument.createEvent("MouseEvents");\r
         evt.initMouseEvent("mousedown",true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, p);\r
         frame.setFrame(frame.currentFrame);\r
-        frame.$endFrame.setFrame(frame.currentFrame);\r
         expect($animate.isEnd).toBeFalsy();\r
         p.dispatchEvent(evt);\r
         frame.setFrame(frame.currentFrame + 1);\r
-        frame.$endFrame.setFrame(frame.currentFrame + 1);\r
         frame.setFrame(frame.currentFrame + 24);\r
-        frame.$endFrame.setFrame(frame.currentFrame + 24);\r
         expect(evt.target.getAttributeNS(null, "fill") || null).toBe("rgb(10, 10, 1)");\r
       } );\r
     } );\r
@@ -3283,7 +3254,6 @@ describe("SMIL Animation Spec", function() {
           frame = base("$frame");\r
           frame.timelines.length = 0; //配列の初期化\r
           frame.setFrame(0);\r
-          frame.$endFrame.setFrame(0);\r
           ele.setAttributeNS(null, "begin", "indefinite");\r
           ele.setAttributeNS(null, "dur", "1s");\r
           ele.setAttributeNS(null, "dur", "1s");\r