[Sie-announce] SIEコード [1919] DOMNodeInsertedIntoDocumentイベントに関して、正常に動くように改良した

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 7月 2日 (金) 23:18:53 JST


Revision: 1919
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1919
Author:   dhrname
Date:     2010-07-02 23:18:53 +0900 (Fri, 02 Jul 2010)

Log Message:
-----------
DOMNodeInsertedIntoDocumentイベントに関して、正常に動くように改良した

Modified Paths:
--------------
    branches/06x/061/org/w3c/dom/events.js
    branches/06x/061/org/w3c/dom/svg.js

Modified: branches/06x/061/org/w3c/dom/events.js
===================================================================
--- branches/06x/061/org/w3c/dom/events.js	2010-07-02 14:18:13 UTC (rev 1918)
+++ branches/06x/061/org/w3c/dom/events.js	2010-07-02 14:18:53 UTC (rev 1919)
@@ -141,6 +141,7 @@
     throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
   }
   evt.target = this;
+  evt.eventPhase = 1;//Event.CAPTURING_PHASE
   var te = this, s = [];
   //配列sに、このノードからドキュメントノードにいたるまでの、DOMツリーのリストを作成しておく
   do {
@@ -410,14 +411,8 @@
     evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
     for (var i=0,dli=descend.length;i<dli;++i) {
       var di = descend[i];
-      evt.target = di;
-      var tce = di._capter; //tceは登録しておいたリスナーのリスト
-      for (var j=0,tcli=tce.length;j<tcli;++j){
-        if (tce[j]) {
-          tce[j].handleEvent(evt);
-        }
-      }
-      j = tcli = di = null;
+      di.dispatchEvent(evt);
+      di = null;
     }
   }
   evt = descend = null;

Modified: branches/06x/061/org/w3c/dom/svg.js
===================================================================
--- branches/06x/061/org/w3c/dom/svg.js	2010-07-02 14:18:13 UTC (rev 1918)
+++ branches/06x/061/org/w3c/dom/svg.js	2010-07-02 14:18:53 UTC (rev 1919)
@@ -808,6 +808,9 @@
       return; //強制終了させる
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target;
       /*xlink:href属性とxml:base属性を手がかりに、
        *ハイパーリンクのURIを決定する処理を行う
@@ -1039,12 +1042,14 @@
   }, false);  
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
     var tar = evt.target;
-    tar.getScreenCTM(); //this._tx, _tyプロパティを設定するために呼び出す
-    var ttps =  tar._tar.style;
-    ttps.marginLeft = tar._tx+ "px";
-    ttps.marginTop = tar._ty+ "px";
+    if (evt.eventPhase === Event.CAPTURING_PHASE) {
+      /*svg要素にまだ、挿入されていない要素については、描画を始めるべきではない。
+       *_isPassedがundefinedならば、まだ挿入されていないことになり、描画しないようにする
+       */
+      evt._isPassed = 1;
+    }
     evt = tar = null;
-  }, false);
+  }, true);
   return this;
 };
 SVGSVGElement.constructor = SVGElement;
@@ -1153,6 +1158,9 @@
   //text要素の位置調整に使うため、ここで、viewの移動量を記録しておく
   this._tx = tx;
   this._ty = ty;
+  var ttps =  this._tar.style;
+  ttps.marginLeft = tx+ "px";
+  ttps.marginTop = ty+ "px";
   var m = this.createSVGMatrix();
   m.a = xr;
   m.d = yr;
@@ -1413,7 +1421,7 @@
         thistar._next._init();
       } else {
         /*全要素の読み込みが終了した場合*/
-        NAIBU.xmlhttp = NAIBU.doc = null;
+        NAIBU.doc = null;
       }
     }
   };
@@ -1626,7 +1634,9 @@
   /*void*/ setRotate : function(/*float*/ angle, /*float*/ cx, /*float*/ cy ) {
     this.angle = angle;
     this.type = SVGTransform.SVG_TRANSFORM_ROTATE;
-    this.matrix = this.matrix.translate(cx, cy).rotate(angle).translate(-cx, -cy);
+    this.matrix = this.matrix.rotate(angle);
+    this.matrix.e = (1-this.matrix.a)*cx - this.matrix.c*cy;
+    this.matrix.f = -this.matrix.b*cx + (1-this.matrix.d)*cy;
   },
   /*void*/ setSkewX : function(/*float*/ angle ) {
     this.angle = angle;
@@ -2267,6 +2277,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
+      if (!!!evt._isPassed) {
+        return;
+      }
       /*以下の処理は、normalizedpathSegListとCTMに基づいて、
        *SVGのd属性をVMLに変換していく処理である。
        */
@@ -2492,6 +2505,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target;
       var rx = tar.hasAttributeNS(null, "rx"), ry = tar.hasAttributeNS(null, "ry");
       var x = tar.x.baseVal.value, y = tar.y.baseVal.value, xw = x + tar.width.baseVal.value, yh = y + tar.height.baseVal.value;
@@ -2567,6 +2583,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target;
       var cx = tar.cx.baseVal.value, cy = tar.cy.baseVal.value, rx = ry = tar.r.baseVal.value;
       var top = cy - ry, left = cx - rx, bottom = cy + ry, right = cx + rx;
@@ -2625,6 +2644,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target;
       var cx = tar.cx.baseVal.value, cy = tar.cy.baseVal.value, rx = tar.rx.baseVal.value, ry = tar.ry.baseVal.value;
       var top = cy - ry, left = cx - rx, bottom = cy + ry, right = cx + rx;
@@ -2683,6 +2705,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target;
       var list = ["m", tar.x1.baseVal.value, tar.y1.baseVal.value, "l", tar.x2.baseVal.value, tar.y2.baseVal.value];
       //以下は、配列listそのものをCTMで座標変換していく処理
@@ -2754,6 +2779,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target, tp = tar.points;
       //以下は、配列listそのものをCTMで座標変換していく処理
       var ctm = tar.getScreenCTM();
@@ -2817,6 +2845,9 @@
       tar.parentNode._tar.appendChild(tar._tar);
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target, tp = tar.points;
       //以下は、配列listそのものをCTMで座標変換していく処理
       var ctm = tar.getScreenCTM();
@@ -2874,6 +2905,9 @@
     }
     var tar = evt.target;
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target, ti = tar.firstChild, tp = tar.parentNode;
       tar._list = [];   //文字の位置を格納しておくリスト
       var x = 0, y = 0, n = 0; //現在のテキスト位置と順番
@@ -3131,6 +3165,9 @@
       }
     }
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+      if (!!!evt._isPassed) {
+        return;
+      }
       var tar = evt.target, ti = tar.firstChild;
       var style = tar.ownerDocument.defaultView.getComputedStyle(tar, null);
       var n = parseFloat(style.getPropertyValue("font-size")) * Math.sqrt(Math.abs(tar.getScreenCTM()._determinant()));
@@ -3345,6 +3382,9 @@
   /*readonly SVGAnimatedTransformList*/ this.gradientTransform = new SVGAnimatedTransformList();
   /*readonly SVGAnimatedEnumeration*/   this.spreadMethod = new SVGAnimatedEnumeration();
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+    if (!!!evt._isPassed) {
+      return;
+    }
     var grad = evt.target, ele = evt._tar, t = evt._style; //eleはv:fill要素やv:stroke要素のノード、tはラップした要素ノードのスタイルを収納
     if (!!!ele) { //まだ、path要素などが設定されていない場合
       return;
@@ -3396,6 +3436,9 @@
   /*readonly SVGAnimatedLength*/ this.x2 = new SVGAnimatedLength();
   /*readonly SVGAnimatedLength*/ this.y2 = new SVGAnimatedLength();
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+    if (!!!evt._isPassed) {
+      return;
+    }
       var grad = evt.target, ele = evt._tar, angle = 270;
       if (!!!ele) { //まだ、path要素などが設定されていない場合
         return;
@@ -3421,6 +3464,9 @@
   /*readonly SVGAnimatedLength*/ this.fx = new SVGAnimatedLength();
   /*readonly SVGAnimatedLength*/ this.fy = new SVGAnimatedLength();
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
+    if (!!!evt._isPassed) {
+      return;
+    }
     var grad = evt.target, ele = evt._tar, tar = evt._ttar; //eleはv:fill要素。tarはターゲットとになる要素
     if (!!!ele) { //まだ、path要素などが設定されていない場合
       return;
@@ -3652,6 +3698,9 @@
     tar = evt = null;
   }, false);
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
+    if (!!!evt._isPassed) {
+      return;
+    }
     var tar = evt.target;
     if (tar._tar) {
       var txts = tar._tar.style;




Sie-announce メーリングリストの案内
Back to archive index