svnno****@sourc*****
svnno****@sourc*****
2010年 6月 26日 (土) 23:58:56 JST
Revision: 1912 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1912 Author: dhrname Date: 2010-06-26 23:58:56 +0900 (Sat, 26 Jun 2010) Log Message: ----------- Modified Paths: -------------- branches/06x/061/sie.js Modified: branches/06x/061/sie.js =================================================================== --- branches/06x/061/sie.js 2010-06-26 14:58:40 UTC (rev 1911) +++ branches/06x/061/sie.js 2010-06-26 14:58:56 UTC (rev 1912) @@ -974,7 +974,6 @@ var s = !!this._id[elementId] ? this._id[elementId] : null; return s; }; -var isMSIE = /*@cc_on!@*/false; /* #endif // _DOM_IDL_*/ @@ -1033,7 +1032,42 @@ }; /* #endif // _STYLESHEETS_IDL_ + */ /* + // File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/css.idl + + #ifndef _CSS_IDL_ + #define _CSS_IDL_ + + #include "dom.idl" + #include "stylesheets.idl" + #include "views.idl" + + #pragma prefix "dom.w3c.org" + module css + { + + typedef dom::DOMString DOMString; + typedef dom::Element Element; + typedef dom::DOMImplementation DOMImplementation; + + interface CSSRule; + interface CSSStyleSheet; + interface CSSStyleDeclaration; + interface CSSValue; + interface Counter; + interface Rect; + interface RGBColor; */ + /*CSSRuleList + *Arrayで代用 + function CSSRuleList { + readonly attribute unsigned long length; + CSSRule item(in unsigned long index); + }; + */ + /*CSSRule + *CSSのルールを表現する。基底クラスなので削除不可。 + */ function CSSRule() { this.cssText = ""; /*CSSStyleSheet*/ this.parentStyleSheet; @@ -1251,7 +1285,7 @@ }; function CSSValue() { - this.cssText; + this.cssText = ""; this.cssValueType = 0; return this; }; @@ -1459,8 +1493,8 @@ strokeMiterlimit : "4", strokeOpacity : "1", writingMode : "lr-tb", - fontFamily : "inline", - fontSize : "inline", + fontFamily : "serif", + fontSize : "12", fontSizeAdjust : "none", fontStretch : "normal", fontStyle : "normal", @@ -1732,6 +1766,7 @@ /* #endif // _CSS_IDL_ */ + //以下は例外処理のログをとるためのもの。開発者以外は削除すること function STLog(jou) { this.jo = jou; if (this.jo) { @@ -1797,7 +1832,7 @@ var evt = node.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent(type, true, true, node.ownerDocument.defaultView, 0); node.dispatchEvent(evt); - evt - null; + evt = null; }); } s = t = null; @@ -1866,24 +1901,24 @@ }; EventListener.prototype = { /*void*/ handleEvent : function( /*Event*/ evt) { -// try { - var ph = evt.eventPhase, cap = this._cap; - if (ph === Event.CAPTURING_PHASE) { //イベントフェーズが捕獲段階であることを示し - cap = cap ? false : true; //このオブジェクト(EventListenr)が捕獲フェーズを指定するならば、リスナーを作動させる。指定しなければ、作動しない。 +// try { + var ph = evt.eventPhase, cap = this._cap; + if (ph === Event.CAPTURING_PHASE) { //イベントフェーズが捕獲段階であることを示し + cap = cap ? false : true; //このオブジェクト(EventListenr)が捕獲フェーズを指定するならば、リスナーを作動させる。指定しなければ、作動しない。 + } + if (!cap && (evt.type === this._type)) { + this._listener(evt); + } + evt = ph = cap = null; + /* } catch (e) { + var evtt = evt.target.ownerDocument.createEvent("SVGEvents"); + evtt.target = evt.target; + evtt.initEvent("SVGError", true, false); + evt.target.dispatchEvent(evtt); + stlog.add(e, 200); + evtt = null; + };*/ } - if (!cap && (evt.type === this._type)) { - this._listener(evt); - } - evt = ph = cap = null; -/* } catch (e) { - var evtt = evt.target.ownerDocument.createEvent("SVGEvents"); - evtt.target = evt.target; - evtt.initEvent("SVGError", true, false); - evt.target.dispatchEvent(evtt); - stlog.add(e, 200); - evtt = null; - };*/ - } }; /*Eventクラス *イベントの雛形となる。プロパティもすべて含めて、必須 @@ -2067,7 +2102,6 @@ n.parentNode = this; /*ここから*/ var evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = n; evt.initMutationEvent("DOMNodeInserted", true, false, this, null, null, null, null); n.dispatchEvent(evt); /*以下のDOMNodeInsertedIntoDocumentイベントは、間接的、あるいは直接ノードが @@ -2075,7 +2109,6 @@ *このイベントは浮上しないことに注意を要する */ evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = n; evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); n.dispatchEvent(evt); if (!n.hasChildNodes()) { //子ノードがないので終了 @@ -2083,14 +2116,14 @@ } var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得 if (descend) { + 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; - evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); var tce = di._capter; //tceは登録しておいたリスナーのリスト for (var j=0,tcli=tce.length;j<tcli;++j){ if (tce[j]) { - tce[j].handleEvent(evtt); + tce[j].handleEvent(evt); } } j = tcli = di = null; @@ -2107,25 +2140,22 @@ } /*ここから*/ var evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = ele; /*以下のDOMNodeRemovedFromDocumentイベントは、間接的、あるいは直接ノードが *除去されたときに発火する。間接的な除去とは、サブツリーをいっぺんに除去する場合など。 *このイベントは浮上しないことに注意を要する */ evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null); - n.dispatchEvent(evt); + ele.dispatchEvent(evt); var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得 if (descend) { + evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null); for (var i=0,dli=descend.length;i<dli;++i) { var di = descend[i]; evt.target = di; - evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null); di.dispatchEvent(evt); di = null; } } - evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = ele; evt.initMutationEvent("DOMNodeRemoved", true, false, this, null, null, null, null); ele.dispatchEvent(evt); evt = descend = null; @@ -2147,9 +2177,8 @@ this.length = this.data.length; /*ここから*/ var evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = this.parentNode; evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); - ele.dispatchEvent(evt); + this.parentNode.dispatchEvent(evt); evt = arg = pd = null; /*ここまで追加*/ }; @@ -2161,9 +2190,8 @@ this.length = this.data.length; /*ここから*/ var evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = this.parentNode; evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); - ele.dispatchEvent(evt); + this.parentNode.dispatchEvent(evt); evt = arg = pd = null; /*ここまで追加*/ }; @@ -2178,26 +2206,13 @@ this.length = this.data.length; /*ここから*/ var evt = this.ownerDocument.createEvent("MutationEvents"); - evt.target = this.parentNode; evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); - ele.dispatchEvent(evt); + this.parentNode.dispatchEvent(evt); evt = pd = null; /*ここまで追加*/ }; // _EVENTS_IDL_ -//File: smil.idl - /* - #ifndef _SMIL_IDL_ - #define _SMIL_IDL_ - - #include "dom.idl" - - #pragma prefix "dom.w3c.org" - module smil - { - typedef dom::DOMString DOMString; - */ function ElementTimeControl(ele) { this.tar = ele; return this; @@ -2205,6 +2220,7 @@ ElementTimeControl.prototype = { /*void*/ beginElement : function() {}, /*void*/ endElement : function() {}, + /*void*/ beginElementAt : function(/*float*/ offset) {}, /*void*/ endElementAt : function(/*float*/ offset) {} }; @@ -2213,11 +2229,14 @@ /*readonly attribute long*/ this.detail; return this; }; - TiemEvent.counstructor = Event; + TimeEvent.counstructor = Event; TimeEvent.prototype = new Event(); /*void*/ TimeEvent.prototype.initTimeEvent = function(/*DOMString*/ typeArg, /*views::AbstractView*/ viewArg, /*long*/ detailArg) { + this.type = typeArg; + this.view = viewArg; + this.detail = detailArg; }; //#endif // _SMIL_IDL_ //これを頭に付けたら、内部処理用 @@ -2415,9 +2434,6 @@ if (!!tar[name]) { var tea = tar[name], tod = tar.ownerDocument.documentElement; if (tea instanceof SVGAnimatedLength) { - if (evt.attrChange === MutationEvent.ADDITION) { - tea.baseVal = tod.createSVGLength(); - } var n = evt.newValue.match(/\D+$/), type = SVGLength.SVG_LENGTHTYPE_NUMBER; if (!!n) { n = n[0]; @@ -2700,7 +2716,7 @@ function SVGAnimatedLength() { /*readonly SVGLength*/ this.animVal; - this.baseVal; + this.baseVal = new SVGLength(); return this; }; function SVGLengthList() { @@ -2959,10 +2975,14 @@ */ function SVGURIReference() { /*readonly SVGAnimatedString*/ this.href = new SVGAnimatedString(); - this._instance = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ + this._instance = this._text = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ this.addEventListener("DOMAttrModified", function(evt){ if (evt.relatedNode.namespaceURI === "http://www.w3.org/1999/xlink" && evt.attrName === "xlink:href") { evt.target.href.baseVal = evt.newValue; + /*_svgload_limitedを+1とすることで、 + *SVGLoadイベントは発火されなくなる。1を引く必要がある + */ + evt.target.ownerDocument.documentElement._svgload_limited++; } evt = null; }, false); @@ -3102,6 +3122,9 @@ function SVGSVGElement() { SVGElement.apply(this, arguments); this._tar = document.createElement("v:group"); + /*_svgload_limitedはSVGLoadイベントを発火させる判定基準。 + * Xlink言語が使われていない限り0であり、SVGLoadイベントが発火される*/ + this._svgload_limited = 0; /* SVGElement, SVGTests, SVGLangSpace, @@ -3359,8 +3382,10 @@ return; //強制終了させる } if (tar.nextSibling) { - tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); - } else { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ tar.parentNode._tar.appendChild(tar._tar); } evt.target.addEventListener("DOMAttrModified", function(evt){ @@ -3481,6 +3506,7 @@ var data = "src"; } xmlhttp.open("GET", objei.getAttribute(data), true); + objei.style.display = "none"; xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { @@ -3553,10 +3579,18 @@ var backdown = bt + viewHeight + 1; trstyle.clip = "rect(" +bt+ "px " +backright+ "px " +backdown+ "px " +bl+ "px)"; this._document = s; - var evt = s.createEvent("SVGEvents"); - evt.target = s.documentElement; - evt.initEvent("SVGLoad", false, false); - s.documentElement.dispatchEvent(evt); + if (!!s._svgload_limited) { + /*_svgload_limitedプロパティはXlink言語が使われていない限り、0である。 + *xlink:href属性が指定されるたびに+1となる。 + *0以外は、SVGLoadイベントが発火されない仕組みとなっている + */ + s._svgload_limited--; + if (s._svgload_limited < 0) { + var evt = s.createEvent("SVGEvents"); + evt.initEvent("SVGLoad", false, false); + s.documentElement.dispatchEvent(evt); + } + } s = evt = null; alert((new Date()).getTime() - dew.getTime()); if (thistar._next) { @@ -3809,7 +3843,7 @@ } else { var s = this.getItem(0); for (var i=1,nli=this.numberOfItems;i<nli;++i) { - s.setMatrix(this.getItem(i)) + s.setMatrix(this.getItem(i).matrix) } this.initialize(s); return s; @@ -4205,12 +4239,8 @@ } else if (dii === "a") { s = tar.createSVGPathSegArcRel(di[j+5], di[j+6], di[j], di[j+1], di[j+2], di[j+3], di[j+4]); j += 6; - } else if (dii === "Z") { + } else if (dii === "Z" || dii === "z") { s = tar.createSVGPathSegClosePath(); - break; - } else if (dii === "z") { - s = tar.createSVGPathSegClosePath(); - break; } else if (dii === "S") { s = tar.createSVGPathSegCurvetoCubicSmoothAbs(di[j+2], di[j+3], di[j], di[j+1]); j += 3; @@ -4242,12 +4272,11 @@ *変換をする処理。相対座標を絶対座標に変換して、M、L、Cコマンドに正規化していく */ var cx = 0, cy = 0; //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用) - var xn = 0, yn = 0; //subpath の始点の絶対座標を示す (SコマンドやTコマンドなどで使用) + var xn = 0, yn = 0; //T,tコマンドで仮想的な座標を算出するのに用いる + var startx = 0, starty = 0; //M,mコマンドにおける始点座標(Z,zコマンドで用いる) for (var j=0, tli=tlist.numberOfItems;j<tli;++j) { var ti = tlist.getItem(j), ts = ti.pathSegType, dii = ti.pathSegTypeAsLetter; if (ts === SVGPathSeg.PATHSEG_UNKNOWN) { - } else if (ts === SVGPathSeg.PATHSEG_CLOSEPATH) { - tnl.appendItem(ti); } else { var rx = cx, ry = cy; //rx, ryは前のセグメントの終了点 if (ts % 2 === 1) { //相対座標ならば @@ -4269,6 +4298,8 @@ continue; } } + startx = cx; + starty = cy; tnl.appendItem(ti); } else if (dii === "m") { if (j !== 0) { @@ -4278,6 +4309,8 @@ continue; } } + startx = cx; + starty = cy; tnl.appendItem(tar.createSVGPathSegMovetoAbs(cx, cy)); } else if (dii === "L") { tnl.appendItem(ti); @@ -4287,11 +4320,19 @@ tnl.appendItem(ti); } else if (dii === "c") { tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, ti.x1+rx, ti.y1+ry, ti.x2+rx, ti.y2+ry)); + } else if (dii === "z") { + cx = startx; + cy = starty; + tnl.appendItem(ti); } else if (dii === "Q") { + xn = 2*cx - ti.x1; + yn = 2*cy - ti.y1; //2次スプライン曲線は近似的な3次ベジェ曲線に変換している tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*ti.x1) / 3, (ry + 2*ti.y1) / 3, (2*ti.x1 + cx) / 3, (2*ti.y1 + cy) / 3)); } else if (dii === "q") { var x1 = ti.x1 + rx, y1 = ti.y1 + ry; + xn = 2*cx - x1; + yn = 2*cy - y1; tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3)); x1 = y1 = null; } else if (dii === "A" || dii === "a") { @@ -4357,8 +4398,8 @@ })(ti, cx, cy, rx, ry, tar, tnl); } else if (dii === "S") { if (j !== 0) { - var tg = tlist.getItem(j-1); - if (tg.pathSegTypeAsLetter === "C" || tg.pathSegTypeAsLetter === "c") { + var tg = tnl.getItem(tnl.numberOfItems-1); + if (tg.pathSegTypeAsLetter === "C") { var x1 = 2*tg.x - tg.x2; var y1 = 2*tg.y - tg.y2; tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, x1, y1, ti.x2, ti.y2)); @@ -4366,8 +4407,8 @@ } } else if (dii === "s") { if (j !== 0) { - var tg = tlist.getItem(j-1); - if (tg.pathSegTypeAsLetter === "C" || tg.pathSegTypeAsLetter === "c") { + var tg = tnl.getItem(tnl.numberOfItems-1); + if (tg.pathSegTypeAsLetter === "C") { var x1 = 2*tg.x - tg.x2; var y1 = 2*tg.y - tg.y2; tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, x1, y1, ti.x2+rx, ti.y2+ry)); @@ -4376,10 +4417,10 @@ } else if (dii === "T" || dii === "t") { if (j !== 0) { var tg = tlist.getItem(j-1); - if (tg.pathSegTypeAsLetter === "Q" || tg.pathSegTypeAsLetter === "q") { - var x1 = 2*tg.x - tg.x1; - var y1 = 2*tg.y - tg.y1; - tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3)); + if ("QqTt".indexOf(tg.pathSegTypeAsLetter) > -1) { + tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*xn) / 3, (ry + 2*yn) / 3, (2*xn + cx) / 3, (2*yn + cy) / 3)); + xn = 2*cx - xn; + yn = 2*cy - yn; } } } else if (dii === "H" || dii === "h") { @@ -4388,7 +4429,9 @@ tnl.appendItem(tar.createSVGPathSegLinetoAbs(rx, cy)); } } + ti = dii = ts = null; } + cx = cy = xn = yn = startx = starty = null; } evt = null; }, false); @@ -4400,7 +4443,11 @@ if (evt.eventPhase === Event.BUBBLING_PHASE) { return; //強制終了させる } - if (tar.parentNode._tar) { + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ tar.parentNode._tar.appendChild(tar._tar); } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ @@ -4621,7 +4668,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target; var rx = tar.hasAttributeNS(null, "rx"), ry = tar.hasAttributeNS(null, "ry"); @@ -4690,7 +4743,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target; var cx = tar.cx.baseVal.value, cy = tar.cy.baseVal.value, rx = ry = tar.r.baseVal.value; @@ -4742,7 +4801,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { 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; @@ -4794,7 +4859,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target; var list = ["m", tar.x1.baseVal.value, tar.y1.baseVal.value, "l", tar.x2.baseVal.value, tar.y2.baseVal.value]; @@ -4859,7 +4930,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target, tp = tar.points; //以下は、配列listそのものをCTMで座標変換していく処理 @@ -4916,7 +4993,13 @@ return; //強制終了させる } var tar = evt.target; - tar.parentNode._tar.appendChild(tar._tar); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(tar._tar); + } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target, tp = tar.points; //以下は、配列listそのものをCTMで座標変換していく処理 @@ -5223,7 +5306,13 @@ backr.filled = "false"; ttp.appendChild(backr); } - tar.parentNode._tar.appendChild(ttp); + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(ttp, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ + tar.parentNode._tar.appendChild(ttp); + } } tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) { var tar = evt.target, ti = tar.firstChild; @@ -5725,15 +5814,19 @@ if (evt.eventPhase === Event.BUBBLING_PHASE) { return; //強制終了させる } - if (tar.parentNode._tar) { + if (tar.nextSibling) { + if (!!tar.parentNode._tar && !!tar.nextSibling._tar) { + tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar); + } + } else if (!!tar.parentNode._tar){ tar.parentNode._tar.appendChild(tar._tar); - var txts = tar._tar.style; - txts.cursor = "hand"; - txts.left = "0px"; - txts.top = "0px"; - txts.textDecoration = "none"; - txts = null; } + var txts = tar._tar.style; + txts.cursor = "hand"; + txts.left = "0px"; + txts.top = "0px"; + txts.textDecoration = "none"; + txts = null; var t = tar.target.baseVal; var st = "replace"; if (t === "_blank") { @@ -5782,29 +5875,35 @@ evt = null; }, false); this.addEventListener("SVGLoad", function(evt){ - var tar = evt.target; - var evtt = this.ownerDocument.createEvent("MutationEvents"); - evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null); - tar.dispatchEvent(evt); - evtt = evt = tar = null; + var tar = evt.target, script = tar._text; + script = "(function(window, document){" +script; + script += "})(Document.prototype.defaultView, window._document)"; + /*_documentに該当する文書ノードをグローバル変数に入れておいて、後で渡しておく*/ + var tod = tar.ownerDocument; + window._document = tod; + eval(script); + tod._svgload_limited--; + if (tod.documentElement._svgload_limited < 0) { + evt = tod.createEvent("SVGEvents"); + evt.initEvent("SVGLoad", false, false); + tod.documentElement.dispatchEvent(evt); + } + tar = evt = script = null; }, false); this.addEventListener("DOMNodeInserted", function(evt){ var tar = evt.target; if (evt.eventPhase === Event.BUBBLING_PHASE) { if (tar.nodeType === Node.CDATA_SECTION_NODE) { + /*もし、CDATA宣言を用いて、ソースが書かれていれば、 + *それを_textプロパティに格納しておく + */ evt.currentTarget._text = tar.nodeValue; } - return; + } else if (evt.eventPhase === Event.AT_TARGET && !tar.hasAttribute("xlink:href")) { + var evtt = tar.ownerDocument.createEvent("SVGEvents"); + evtt.initEvent("SVGLoad", false, false); + evt.currentTarget.dispatchEvent(evtt); } - tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ - var tar = evt.target, script = tar._text; - script = "(function(window, document){" +script; - script += "})(Document.prototype.defaultView, window._document)"; - /*_documentに該当する文書ノードをグローバル変数に入れておいて、後で渡しておく*/ - window._document = tar.ownerDocument; - eval(script); - tar = evt = script = null; - }, false); tar = evt = null; }, false); return this; @@ -5834,7 +5933,16 @@ function SVGAnimationElement() { SVGElement.apply(this, arguments); /*readonly SVGElement*/ this.targetElement; + this._currentTime = 0; //smil::ElementTimeControl; + var s = new ElementTimeControl(this); + /*以下は関数のコピー + *これによって、ElementTimeControlの多重継承を模擬する + */ + this.beginElement = s.beginElement; + this.endElement = s.endElement; + this.beginElementAt = s.beginElementAt; + this.endElementAt = s.endElementAt; return this; }; SVGAnimationElement.constructor = SVGElement; @@ -5843,6 +5951,7 @@ /*float*/ SVGAnimationElement.prototype.getStartTime = function(){ }; /*float*/ SVGAnimationElement.prototype.getCurrentTime = function(){ + return (this._currentTime); }; /*float*/ SVGAnimationElement.prototype.getSimpleDuration = function(){ }; @@ -6117,18 +6226,21 @@ oba.setAttribute("id","_NAIBU_outline"); document.body.appendChild(oba); var ob = document.getElementsByTagName("object"), em = document.getElementsByTagName("embed"); - for (var i=0,s=[];i<ob.length;++i) { + var i = 0; + for (s=[];i<ob.length;++i) { s[s.length] = new GetSVGDocument(ob[i]); } - for (var i=0;i<em.length;++i) { + for (i=0;i<em.length;++i) { s[s.length] = new GetSVGDocument(em[i]); } - for (var i=0;i<s.length;++i) { + for (i=0;i<s.length;++i) { if (i < s.length-1) { s[i]._next = s[i+1] } } - s[0]._init(); //初期化作業を開始 + if (i > 0) { + s[0]._init(); //初期化作業を開始 + } s = null; } }) )