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;