OSDN Git Service

switch要素の実装
authordhrname <dhrname@users.sourceforge.jp>
Thu, 9 May 2013 14:34:33 +0000 (23:34 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Thu, 9 May 2013 14:34:33 +0000 (23:34 +0900)
org/w3c/dom/svg.js

index c5d8027..c4b967e 100644 (file)
@@ -1656,8 +1656,38 @@ function SVGImageElement(_doc) {
 };\r
 SVGImageElement.prototype = Object._create(SVGElement);\r
 \r
-function SVGSwitchElement() {\r
+function SVGSwitchElement(_doc) {\r
   SVGElement.apply(this);\r
+  this._tar = _doc.createElement("v:group");\r
+  _doc = void 0;\r
+  this.addEventListener("DOMNodeInserted", function(evt){\r
+    var tar = evt.target;\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) {\r
+            /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
+            snext = tnext._tar;\r
+            break;\r
+          }\r
+          tnext = tnext.nextSibling;\r
+        }\r
+        spar.insertBefore(sar, snext);\r
+      }\r
+    }\r
+    tnext = sar = spar = snext = void 0;\r
+    tar.addEventListener("DOMNodeInsertedIntoDocument", tar._nodeInsertInto, false);\r
+    evt = tar = void 0;\r
+  }, false);\r
 };\r
 SVGSwitchElement.prototype = Object._create(SVGElement);\r
 \r
@@ -6308,9 +6338,30 @@ function SVGForeignObjectElement(_doc) /*:
   /*readonly SVGAnimatedLength*/ this.height = new sl();\r
   sl = void 0;\r
   this.addEventListener("DOMNodeInserted", function(evt){\r
-    if (evt.eventPhase === /*Event.AT_TARGET*/ 2) {\r
-      evt.target.parentNode._tar.appendChild(evt.target._tar)\r
+    var tar = evt.target;\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) {\r
+            /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
+            snext = tnext._tar;\r
+            break;\r
+          }\r
+          tnext = tnext.nextSibling;\r
+        }\r
+        spar.insertBefore(sar, snext);\r
+      }\r
     }\r
+    tnext = sar = spar = snext = evt = tar = void 0;\r
   }, false);\r
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){\r
     if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) {\r