[Sie-announce] SIEコード [1876] SVGScriptElementの実装開始

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 6月 2日 (水) 23:40:23 JST


Revision: 1876
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1876
Author:   dhrname
Date:     2010-06-02 23:40:23 +0900 (Wed, 02 Jun 2010)

Log Message:
-----------
SVGScriptElementの実装開始

Modified Paths:
--------------
    branches/06x/061/org/w3c/dom/svg.js

Modified: branches/06x/061/org/w3c/dom/svg.js
===================================================================
--- branches/06x/061/org/w3c/dom/svg.js	2010-06-02 14:40:02 UTC (rev 1875)
+++ branches/06x/061/org/w3c/dom/svg.js	2010-06-02 14:40:23 UTC (rev 1876)
@@ -869,23 +869,31 @@
                   /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、
                    *ここでは、responseTextを用いる
                    */
-                   var doc = new ActiveXObject("MSXML2.DomDocument");
-                   str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");
-                   doc.loadXML(str);
-                   if (id) {
-                     var ele = doc.getElementById(id);
-                   } else {
-                     var ele = doc.documentElement;
-                   }
-                   tar._instance = tar.ownerDocument.importNode(ele);
-                   var ev = tar.ownerDocument.createEvent("SVGEvents");
-                   ev.initEvent("SVGLoad", false, false);
-                   ev.target = tar;
-                   tar.dispacthEvent(ev);
-                   ev = null;
+                  /*script要素とstyle要素は、
+                   *_textプロパティに読み込んだテキストを格納しておく
+                   *それら以外は、_instanceプロパティにDOMツリーを格納しておく
+                   */
+                  if (tar.localName !== "script" && tar.localName !== "style") {
+                    var doc = new ActiveXObject("MSXML2.DomDocument");
+                    str = xmlhttp.responseText.replace(/!DOCTYPE/,"!--").replace(/(dtd">|\]>)/,"-->");
+                    doc.loadXML(str);
+                    if (id) {
+                      var ele = doc.getElementById(id);
+                    } else {
+                      var ele = doc.documentElement;
+                    }
+                    tar._instance = tar.ownerDocument.importNode(ele);
+                  } else {
+                    tar._text = xmlhttp.responseText;
+                  }
                 } else {
                   tar._tar.src = uri;
                 }
+                var ev = tar.ownerDocument.createEvent("SVGEvents");
+                ev.initEvent("SVGLoad", false, false);
+                ev.target = tar;
+                tar.dispacthEvent(ev);
+                ev = null;
               }
             }
           }
@@ -3567,9 +3575,39 @@
 SVGViewElement.prototype = new SVGElement();
 
 function SVGScriptElement() { 
-  SVGElement.apply(this, arguments);
+  SVGElement.apply(this);
   /*DOMString*/ this.type;
   SVGURIReference.apply(this, arguments);
+  this.addEventListener("DOMAttrModified", function(evt){
+    if (evt.attrName === "type") {
+      evt.target.type = evt.newValue;
+    }
+  }, 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);      
+  }, false);
+  this.addEventListener("DOMNodeInserted", function(evt){
+    var tar = evt.target;
+    if (evt.eventPhase === Event.BUBBLING_PHASE) {
+      if (tar.nodeType === Node.CDATA_SECTION_NODE) {
+        evt.currentTarget._text = tar.nodeValue;
+      }
+      return;
+    }
+    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;
 };
 SVGScriptElement.constructor = SVGElement;




Sie-announce メーリングリストの案内
Back to archive index