OSDN Git Service

SVGForeignElementの実装開始
authordhrname <dhrname@users.sourceforge.jp>
Mon, 6 May 2013 10:53:56 +0000 (19:53 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Mon, 6 May 2013 10:53:56 +0000 (19:53 +0900)
org/w3c/dom/svg.js

index c3bb08e..1354650 100644 (file)
@@ -6291,14 +6291,15 @@ function SVGDefinitionSrcElement() {
 };\r
 SVGDefinitionSrcElement.prototype = Object._create(SVGElement);\r
 \r
-function SVGForeignObjectElement() /*: \r
+function SVGForeignObjectElement(_doc) /*: \r
                 SVGElement,\r
                 SVGTests,\r
                 SVGLangSpace,\r
                 SVGExternalResourcesRequired,\r
                 SVGStylable,\r
                 SVGTransformable,\r
-                events::EventTarget*/ { \r
+                events::EventTarget*/ {\r
+  this._tar = _doc.createElement("div");\r
   SVGElement.apply(this);\r
   var sl = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.x = new sl();\r
@@ -6306,6 +6307,37 @@ function SVGForeignObjectElement() /*:
   /*readonly SVGAnimatedLength*/ this.width = new sl();\r
   /*readonly SVGAnimatedLength*/ this.height = new sl();\r
   sl = void 0;\r
+  this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){\r
+    if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) {\r
+      var tar = evt.target;\r
+      if ((evt.nodeType === /*Node.ELEMENT_NODE*/ 1)\r
+             && !tar._tar && tar.namespaceURI ==="http://www.w3.org/1999/xhtml") {\r
+        tar._tar = _doc.createElement(tar.localName);\r
+      } else if ((evt.nodeType === /*Node.TEXT_NODE*/ 3) && !tar._tar) {\r
+        tar._tar = _doc.createTextNode(tar.data);\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
+    }\r
+  }, true);\r
 };\r
 SVGForeignObjectElement.prototype = Object._create(SVGElement);\r
 \r