OSDN Git Service

Add the initilize method to the object
authordhrname <dhrname@users.sourceforge.jp>
Wed, 1 Feb 2017 14:27:05 +0000 (23:27 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Wed, 1 Feb 2017 14:27:05 +0000 (23:27 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index 5542e26..4cfb228 100644 (file)
@@ -58,6 +58,17 @@ base("$frame").mix ( {
   pauseAnimation: function() {\r
     this.isPaused = true;\r
   },\r
+  \r
+  /*後述のinitilizeメソッドで使うオブジェクトリスト*/\r
+  objList: [],\r
+  \r
+  /*オブジェクトの初期化処理*/\r
+  initilize: function() {\r
+    var list = this.objList;\r
+    for (var i=0;i<list.length;++i) {\r
+      list[i].initilize();\r
+    }\r
+  },\r
 \r
   /*setFrame メソッド\r
    * フレーム数を数値num まで進めるか、戻す*/\r
@@ -1395,15 +1406,27 @@ base("$calcMode").up("$attribute").mix( {
    * getElementsByTagNameNSメソッドの返り値の入力を想定*/\r
   elementList: [],\r
   \r
+  /*何番目からelementListを処理しているかの数値*/\r
+  nubmerOfelemList: 0,\r
+  \r
   /*initilize メソッド\r
    * 要素リストを初期化させる\r
    * 初期化処理を分散させるために使う*/\r
   initilize: function() {\r
     var eles = this.elementList;\r
-    for (var i=0;i<eles.length;++i) {\r
+    if (!eles.length) {\r
+      return;\r
+    }\r
+    var length = this.nubmerOfelemList+30;\r
+    for (var i=length-30; i<eles.length; ++i) {\r
+      if (length <= i) {\r
+        /*もう初期化する必要がないので終了*/\r
+        return;\r
+      }\r
       this.up().init(eles.item(i));\r
     }\r
-    eles = void 0;\r
+    this.nubmerOfelemList += 30;\r
+    eles = length = void 0;\r
   },\r
    \r
   /*initメソッドで使われるアニメーション関数*/\r
@@ -2082,10 +2105,11 @@ base("$getDocument").mix ( function() {
     /*文書からアニメーション関連要素を取り出して、オブジェクトを初期化*/\r
     function getElement (svgDoc) {\r
         var $set = base("$calcMode").$attribute.$setElement,\r
-            $animate = $set.$animateElement;\r
+            $animate = $set.$animateElement,\r
+            frame = base("$frame");\r
         init($set, "set");\r
         init($animate, "animate");\r
-        init($animate, "animateColor");\r
+        init($animate.up(), "animateColor");\r
         init($animate.$animateTransformElement, "animateTransform");\r
         init($animate.$animateTransformElement.$motionElement, "animateMotion");\r
           /*リンクのハッシュ読み取りで、ハイパーリンクのイベント処理\r
@@ -2098,11 +2122,11 @@ base("$getDocument").mix ( function() {
              var hash = svgDoc.defaultView.location.hash.slice(1);\r
              svgDoc.getElementById(hash).beginElement();\r
            });\r
-  \r
         function init (obj, name) {\r
-          var eles = svgDoc.getElementsByTagNameNS(svgns, name)\r
-          for (var i=0;i<eles.length;++i) {\r
-            obj.up().init(eles.item(i));\r
+          /*あとでframe.initilizeメソッドで呼び出すために準備しておく*/\r
+          obj.elementList = svgDoc.getElementsByTagNameNS(svgns, name);\r
+          if (obj.elementList.length) {\r
+            frame.objList.push(obj);\r
           }\r
           eles = obj = void 0;\r
         };\r
@@ -2128,6 +2152,7 @@ base("$getDocument").mix ( function() {
             if (!this.isPaused) {\r
               frame++;\r
               try {\r
+                this.initilize();\r
                 this.setFrame(frame);\r
               } catch(e) {\r
               }\r
@@ -2142,6 +2167,7 @@ base("$getDocument").mix ( function() {
           var $f = base("$frame");\r
           return function () {\r
             frame++;\r
+            $f.initilize();\r
             $f.setFrame(frame);\r
           };\r
         })(-1), 1 );\r
index de0043c..6635576 100644 (file)
@@ -67,7 +67,9 @@ describe("SMIL Animation Spec", function() {
       expect(frame.isPaused).toBeFalsy();\r
       expect(frame.pauseAnimation()).toBeUndefined();\r
       expect(frame.isPaused).toBeTruthy();\r
-\r
+      \r
+      expect(frame.objList).toEqual([]);\r
+      expect(frame.initilize()).toBeUndefined();\r
     });\r
     /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
     it("should be this for the value (the valid partion)", function() {\r
@@ -2147,11 +2149,12 @@ describe("SMIL Animation Spec", function() {
         expect($set.isDefault).toBeFalsy();\r
         expect($set.attrNameSpace).toBeNull();\r
         expect($set.timeline).toBe(frame.$begin);\r
+        expect($set.nubmerOfelemList).toBe(0);\r
         \r
         expect($set.elementList.length).toBe(0);\r
         $set.initilize();\r
         $set.elementList = null;\r
-        expect( function() {$set.initilize()}).toThrow();\r
+        expect($set.initilize()).toBeUndefined();\r
       } );\r
       /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
       it("should be this for the value (the valid partion  )", function() {\r
@@ -2190,7 +2193,9 @@ describe("SMIL Animation Spec", function() {
         document.documentElement.appendChild(ele);\r
         $set.elementList = document.getElementsByTagNameNS("http://www.w3.org/2000/svg", "set");\r
         frame.timelines.length = 0;\r
+        var setinit = $set.initilize;\r
         $set.initilize();\r
+        expect($set.initilize).not.toBe(setinit);\r
         expect(frame.timelines.length).toBe($set.elementList.length);\r
       } );\r
       /*無効同値クラスを調べておく (Equivalence partitioning, the following is the invalid partion)*/\r