From: dhrname Date: Thu, 9 May 2013 14:34:33 +0000 (+0900) Subject: switch要素の実装 X-Git-Tag: v16beta~301 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=9890500cb2a4bbd5c8f906ebd5f60d1993a19842;p=sie%2Fsie.git switch要素の実装 --- diff --git a/org/w3c/dom/svg.js b/org/w3c/dom/svg.js index c5d8027..c4b967e 100644 --- a/org/w3c/dom/svg.js +++ b/org/w3c/dom/svg.js @@ -1656,8 +1656,38 @@ function SVGImageElement(_doc) { }; SVGImageElement.prototype = Object._create(SVGElement); -function SVGSwitchElement() { +function SVGSwitchElement(_doc) { SVGElement.apply(this); + this._tar = _doc.createElement("v:group"); + _doc = void 0; + this.addEventListener("DOMNodeInserted", function(evt){ + var tar = evt.target; + if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { + return; //強制終了させる + } + var tnext = tar.nextSibling, + sar = tar._tar, + spar = tar.parentNode._tar, + snext = null; + if (sar && spar) { + if (!tnext) { + spar.appendChild(sar); + } else { + while(tnext) { + if (tnext._tar) { + /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ + snext = tnext._tar; + break; + } + tnext = tnext.nextSibling; + } + spar.insertBefore(sar, snext); + } + } + tnext = sar = spar = snext = void 0; + tar.addEventListener("DOMNodeInsertedIntoDocument", tar._nodeInsertInto, false); + evt = tar = void 0; + }, false); }; SVGSwitchElement.prototype = Object._create(SVGElement); @@ -6308,9 +6338,30 @@ function SVGForeignObjectElement(_doc) /*: /*readonly SVGAnimatedLength*/ this.height = new sl(); sl = void 0; this.addEventListener("DOMNodeInserted", function(evt){ - if (evt.eventPhase === /*Event.AT_TARGET*/ 2) { - evt.target.parentNode._tar.appendChild(evt.target._tar) + var tar = evt.target; + if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { + return; //強制終了させる + } + var tnext = tar.nextSibling, + sar = tar._tar, + spar = tar.parentNode._tar, + snext = null; + if (sar && spar) { + if (!tnext) { + spar.appendChild(sar); + } else { + while(tnext) { + if (tnext._tar) { + /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/ + snext = tnext._tar; + break; + } + tnext = tnext.nextSibling; + } + spar.insertBefore(sar, snext); + } } + tnext = sar = spar = snext = evt = tar = void 0; }, false); this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){ if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) {