{\r
typedef dom::DOMString DOMString;\r
*/\r
+/*ElementTimeControlはSVGAnimationElementに統合させる。\r
+ *というのは、多重継承が難しいため\r
+ */\r
\r
function TimeEvent() {\r
Event.apply(this);\r
};\r
SVGElement.prototype = Object._create(Element);\r
\r
+/*_inserted__メソッド\r
+ * VMLの挿入をするための、内部処理のメソッド\r
+ */\r
+SVGElement.prototype._inserted__ = function(tar) {\r
+ var tnext = tar.nextSibling,\r
+ sar = tar._tar,\r
+ spar = tar.parentNode._tar,\r
+ snext = null;\r
+ if (sar && spar) {\r
+ if (!tnext) {\r
+ spar.appendChild(sar);\r
+ } else {\r
+ while(tnext) {\r
+ if (tnext._tar && tnext._tar.parentNode) {\r
+ /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
+ snext = tnext._tar;\r
+ break;\r
+ }\r
+ tnext = tnext.nextSibling;\r
+ }\r
+ snext && (spar = snext.parentNode);\r
+ spar.insertBefore(sar, snext);\r
+ }\r
+ }\r
+ tnext = sar = spar = snext = void 0;\r
+};\r
+\r
/*関数スコープを避けるため、グローバルスコープでevalさせる関数*/\r
NAIBU.eval = function(code) {\r
var doc = document,\r
*/\r
/*SVGMatrix*/ this.getCTM = function() {\r
var s, m;\r
- if (!!this._cacheMatrix) { //キャッシュがあれば\r
+ if (this._cacheMatrix) { //キャッシュがあれば\r
s = this._cacheMatrix;\r
} else {\r
m = this.transform.baseVal.consolidate();\r
if (!this.parentNode) {\r
return null;\r
}\r
- var view = this.nearestViewportElement || this.ownerDocument.documentElement;\r
- var s = view.getScreenCTM().multiply(this.getCTM());\r
- view = null;\r
- return s;\r
+ return ((this.nearestViewportElement || this.ownerDocument.documentElement)\r
+ .getScreenCTM().multiply(this.getCTM()));\r
};\r
\r
/*getTransformToElementメソッド\r
css::DocumentCSS {*/\r
/*以下のx,y,width,heightプロパティは\r
*それぞれ、svg要素の同名属性に対応。たとえば、xならば、x属性に対応している\r
- *1000というのは、W3Cで触れていないため、独自の初期値を採用\r
*/\r
var slen = SVGAnimatedLength;\r
/*readonly SVGAnimatedLength*/ this.x = new slen();\r
}\r
evt = name = tv = ovb = par = tp = sa = mos = void 0;\r
}, false);\r
+ this.addEventListener("DOMNodeInserted", function(evt){\r
+ if (evt.eventPhase === /*Event.AT_TARGET*/ 2) {\r
+ var tar = evt.target;\r
+ tar.addEventListener("DOMNodeInserted", function(evt){\r
+ if (evt.eventPhase === 1) {\r
+ evt.target.nearestViewportElement = tar;\r
+ }\r
+ }, true);\r
+ /*getCTMメソッドの再定義で、viewBox属性やx,y属性などに対応*/\r
+ tar._getCTM = tar.getCTM;\r
+ tar.getCTM = function() {\r
+ if (!this._cacheMatrix) {\r
+ var m = this.getScreenCTM(),\r
+ style = this.ownerDocument.defaultView.getComputedStyle(this, ""),\r
+ fontSize = parseFloat(style.getPropertyValue("font-size"));\r
+ this.x.baseVal._emToUnit(fontSize);\r
+ this.y.baseVal._emToUnit(fontSize);\r
+ m = m.translate(this.x.baseVal.value, this.y.baseVal.value);\r
+ this._cacheMatrix = this._getCTM().multiply(m);\r
+ }\r
+ return (this._cacheMatrix);\r
+ };\r
+ tar._inserted__(tar);\r
+ evt = tar.ownerDocument.createEvent("SVGEvents");\r
+ evt.initEvent("SVGLoad", false, false);\r
+ tar.dispatchEvent(evt);\r
+ evt = void 0;\r
+ }\r
+ }, false);\r
this.addEventListener("SVGLoad", function(evt){\r
/*以下のDOMAttrModifiedは浮上フェーズのときに、再描画をするように\r
*処理を書いたもの。属性が書き換わるたびに、再描画される\r
if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
return; //強制終了させる\r
}\r
- var tnext = tar.nextSibling,\r
- sar = tar._tar,\r
- spar = tar.parentNode._tar,\r
- snext = null;\r
- if (sar && spar) {\r
- if (!tnext) {\r
- spar.appendChild(sar);\r
- } else {\r
- while(tnext) {\r
- if (tnext._tar && tnext._tar.parentNode) {\r
- /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
- snext = tnext._tar;\r
- break;\r
- }\r
- tnext = tnext.nextSibling;\r
- }\r
- snext && (spar = snext.parentNode);\r
- spar.insertBefore(sar, snext);\r
- }\r
- }\r
- tnext = sar = spar = snext = evt = tar = void 0;\r
+ tar._inserted__(tar);\r
+ evt = tar = void 0;\r
}, false);\r
};\r
SVGSwitchElement.prototype = Object._create(SVGElement);\r
if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
return; //強制終了させる\r
}\r
- var tar = evt.target,\r
- tnext = tar.nextSibling,\r
- sar = tar._tar,\r
- spar = tar.parentNode._tar,\r
- snext = null;\r
- if (sar && spar) {\r
- if (!tnext) {\r
- spar.appendChild(sar);\r
- } else {\r
- while(tnext) {\r
- if (tnext._tar && tnext._tar.parentNode) {\r
- /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
- snext = tnext._tar;\r
- break;\r
- }\r
- tnext = tnext.nextSibling;\r
- }\r
- snext && (spar = snext.parentNode);\r
- spar.insertBefore(sar, snext);\r
- }\r
- }\r
- tnext = sar = spar = snext = void 0;\r
+ var tar = evt.target;\r
+ tar._inserted__(tar);\r
tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {\r
var tar = evt.target,\r
tp = tar.points,\r
list.splice(2, 0, "l");\r
var dat = "m" + list.join(" ") + xclose,\r
ele = tar._tar,\r
- vi = tar.ownerDocument.documentElement;\r
+ vi = tar.ownerDocument.documentElement,\r
w = vi.width.baseVal.value,\r
h = vi.height.baseVal.value;\r
//VMLに結び付けていく\r
if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
return; //強制終了させる\r
}\r
- var tnext = tar.nextSibling,\r
- sar = tar._tar,\r
- spar = tar.parentNode._tar,\r
- snext = null;\r
- if (sar && spar) {\r
- if (!tnext) {\r
- spar.appendChild(sar);\r
- } else {\r
- while(tnext) {\r
- if (tnext._tar && tnext._tar.parentNode) {\r
- /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
- snext = tnext._tar;\r
- break;\r
- }\r
- tnext = tnext.nextSibling;\r
- }\r
- snext && (spar = snext.parentNode);\r
- spar.insertBefore(sar, snext);\r
- }\r
- }\r
+ tar._inserted__(tar);\r
tar.addEventListener("DOMNodeInsertedIntoDocument", SVGImageElement.prototype._imageo, false);\r
- tnext = sar = spar = snext = evt = tar = void 0;\r
+ evt = tar = void 0;\r
}, false);\r
this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){\r
if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) {\r