[Sie-announce] SIEコード [2549] GetSVGDocumentのwindowオブジェクトをNAIBUオブジェクトに変更

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 4月 2日 (土) 23:30:17 JST


Revision: 2549
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2549
Author:   dhrname
Date:     2011-04-02 23:30:17 +0900 (Sat, 02 Apr 2011)

Log Message:
-----------
GetSVGDocumentのwindowオブジェクトをNAIBUオブジェクトに変更

Modified Paths:
--------------
    branches/07x/074/org/w3c/dom/svg.js

Modified: branches/07x/074/org/w3c/dom/svg.js
===================================================================
--- branches/07x/074/org/w3c/dom/svg.js	2011-04-02 14:21:18 UTC (rev 2548)
+++ branches/07x/074/org/w3c/dom/svg.js	2011-04-02 14:30:17 UTC (rev 2549)
@@ -1640,7 +1640,9 @@
   return this;
 }
 function _ca_() {
-  window._that._ca();
+  if ((NAIBU._that.xmlhttp.readyState === 4)  &&  (NAIBU._that.xmlhttp.status === 200)) {
+    NAIBU._that._ca();
+  }
 };
  GetSVGDocument.prototype = {
   /*_initメソッド
@@ -1661,221 +1663,219 @@
     xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
     this.xmlhttp = xmlhttp;
     /*クロージャを利用しないことで、軽量化を計る*/
-    window._that = this;
+    NAIBU._that = this;
     xmlhttp.onreadystatechange = _ca_;
     xmlhttp.send(null);
     objei = data = null;
   },
   /*コール関数。全処理を担う*/
   _ca : function() {
-    if ((this.xmlhttp.readyState === 4)  &&  (this.xmlhttp.status === 200)) {
-      /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、
-       *ここでは、responseTextを用いる
+    /*responseXMLを使うと、時々、空のデータを返すことがあるため(原因は不明)、
+     *ここでは、responseTextを用いる
+     */
+    var dsd = new Date();
+    var str = this.xmlhttp.responseText,
+        objei = this._tar,
+        s = DOMImplementation.createDocument("http://www.w3.org/2000/svg", "svg"),
+        tar = s.documentElement,
+        tview = tar.viewport,
+        objw, objh, fi, n, attr, att,
+        sdt = tar._tar,
+        sp = document.createElement("div"),
+        dcp = document.createElement("v:group"),
+        backr = document.createElement("v:rect"),
+        style, fontSize, w, h, sw, sh, trstyle, tpstyle, backrs, viewWidth, viewHeight,
+        bfl, bft, bl, backright, backdown, text,
+        _parseFloat = parseFloat,
+        ndoc = NAIBU.doc;
+    ndoc.async = false;
+    /*下記のプロパティについては、Microsoftのサイトを参照
+     *ResolveExternals Property [Second-level DOM]
+     * http://msdn.microsoft.com/en-us/library/ms761375%28VS.85%29.aspx
+     *ValidateOnParse Property [Second-level DOM]
+     * http://msdn.microsoft.com/en-us/library/ms760286%28VS.85%29.asp
+     */
+    ndoc.validateOnParse = false;
+    ndoc.resolveExternals = false;
+    ndoc.preserveWhiteSpace = true;
+    ndoc.loadXML(str);
+    /*IE6-8のみで使えるupdateIntervalは、
+     *描画間隔の調整が可能。デフォルトは0。
+     *スクロール時にバグが起きるので、0に戻してやる必要がある。
+     */
+    screen.updateInterval = 999;
+    if (/&[^;]+;/.test(str)) {
+      /*以下の処理は、実体参照を使ったとき
+       *代替の処理を用いて、実体参照を処理するもの
        */
-      var dsd = new Date();
-      var str = this.xmlhttp.responseText,
-          objei = this._tar,
-          s = DOMImplementation.createDocument("http://www.w3.org/2000/svg", "svg"),
-          tar = s.documentElement,
-          tview = tar.viewport,
-          objw, objh, fi, n, attr, att,
-          sdt = tar._tar,
-          sp = document.createElement("div"),
-          dcp = document.createElement("v:group"),
-          backr = document.createElement("v:rect"),
-          style, fontSize, w, h, sw, sh, trstyle, tpstyle, backrs, viewWidth, viewHeight,
-          bfl, bft, bl, backright, backdown, text,
-          _parseFloat = parseFloat,
-          ndoc = NAIBU.doc;
-      ndoc.async = false;
-      /*下記のプロパティについては、Microsoftのサイトを参照
-       *ResolveExternals Property [Second-level DOM]
-       * http://msdn.microsoft.com/en-us/library/ms761375%28VS.85%29.aspx
-       *ValidateOnParse Property [Second-level DOM]
-       * http://msdn.microsoft.com/en-us/library/ms760286%28VS.85%29.asp
-       */
-      ndoc.validateOnParse = false;
-      ndoc.resolveExternals = false;
-      ndoc.preserveWhiteSpace = true;
-      ndoc.loadXML(str);
-      /*IE6-8のみで使えるupdateIntervalは、
-       *描画間隔の調整が可能。デフォルトは0。
-       *スクロール時にバグが起きるので、0に戻してやる必要がある。
-       */
-      screen.updateInterval = 999;
-      if (/&[^;]+;/.test(str)) {
-        /*以下の処理は、実体参照を使ったとき
-         *代替の処理を用いて、実体参照を処理するもの
-         */
-        var tmp = str;
-        var enti = (ndoc.doctype)? ndoc.doctype.entities: { length:0 };
-        for (var i=0; i<enti.length; i++) {
-        var map = enti.item(i);
-        var regex = new RegExp("&"+map.nodeName+";", "g");
-        tmp = tmp.replace(regex, map.firstChild.xml);
-        }
-        ndoc.loadXML(tmp);
-        tmp = null;
+      var tmp = str;
+      var enti = (ndoc.doctype)? ndoc.doctype.entities: { length:0 };
+      for (var i=0; i<enti.length; i++) {
+      var map = enti.item(i);
+      var regex = new RegExp("&"+map.nodeName+";", "g");
+      tmp = tmp.replace(regex, map.firstChild.xml);
       }
-      tview.top = 0;
-      tview.left = 0;
-      tview.width = objei.clientWidth;
-      tview.height = objei.clientHeight;
-      if (tview.height < 24) { //IEの標準モードではclientHeightプロパティの値が小さくなることがある
-        tview.height = screen.availHeight;
-      }
-      if (tar.viewport.height < 24) { //IEの標準モードではclientHeightプロパティの値が小さくなることがある
-        tar.viewport.height = screen.width;
-      }
-      objw = objei.getAttribute("width");
-      objh = objei.getAttribute("height");
-      if (objw) {
-        tar.setAttributeNS(null, "width", objw);
-      }
-      if (objh) {
-        tar.setAttributeNS(null, "height", objh);
-      }
-      fi = ndoc.documentElement.firstChild;
-      attr = ndoc.documentElement.attributes;
-      /*ルート要素のNamedNodeMapを検索する*/
-      for (var i=0,atli=attr.length;i<atli;++i) {
-        att = s.importNode(attr[i], false);
-        tar.setAttributeNodeNS(att);
-      }
-      str = attr = null;
-      dcp.style.width = tview.width+ "px";
-      dcp.style.height = tview.height+ "px";
-      dcp.coordsize = tview.width+ " " +tview.height;
-      sp.appendChild(dcp);
-      objei.parentNode.insertBefore(sp, objei);
-      dcp.appendChild(sdt);
-      while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
-        n = s.importNode(fi, true);
-        tar.appendChild(n);
-        fi = fi.nextSibling;
-      }
-      fi = null;
-      /*以下では、VMLの要素とHTMLのCSSのプロパティを用いて、背景を
-       *作り出す作業を行う。これは必須
+      ndoc.loadXML(tmp);
+      tmp = null;
+    }
+    tview.top = 0;
+    tview.left = 0;
+    tview.width = objei.clientWidth;
+    tview.height = objei.clientHeight;
+    if (tview.height < 24) { //IEの標準モードではclientHeightプロパティの値が小さくなることがある
+      tview.height = screen.availHeight;
+    }
+    if (tar.viewport.height < 24) { //IEの標準モードではclientHeightプロパティの値が小さくなることがある
+      tar.viewport.height = screen.width;
+    }
+    objw = objei.getAttribute("width");
+    objh = objei.getAttribute("height");
+    if (objw) {
+      tar.setAttributeNS(null, "width", objw);
+    }
+    if (objh) {
+      tar.setAttributeNS(null, "height", objh);
+    }
+    fi = ndoc.documentElement.firstChild;
+    attr = ndoc.documentElement.attributes;
+    /*ルート要素のNamedNodeMapを検索する*/
+    for (var i=0,atli=attr.length;i<atli;++i) {
+      att = s.importNode(attr[i], false);
+      tar.setAttributeNodeNS(att);
+    }
+    str = attr = null;
+    dcp.style.width = tview.width+ "px";
+    dcp.style.height = tview.height+ "px";
+    dcp.coordsize = tview.width+ " " +tview.height;
+    sp.appendChild(dcp);
+    objei.parentNode.insertBefore(sp, objei);
+    dcp.appendChild(sdt);
+    while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する
+      n = s.importNode(fi, true);
+      tar.appendChild(n);
+      fi = fi.nextSibling;
+    }
+    fi = null;
+    /*以下では、VMLの要素とHTMLのCSSのプロパティを用いて、背景を
+     *作り出す作業を行う。これは必須
+     */
+    style = tar.ownerDocument.defaultView.getComputedStyle(tar, "");
+    fontSize = _parseFloat(style.getPropertyValue("font-size"));
+    tar.x.baseVal._emToUnit(fontSize);
+    tar.y.baseVal._emToUnit(fontSize);
+    tar.width.baseVal._emToUnit(fontSize);
+    tar.height.baseVal._emToUnit(fontSize);
+    w = tview.width;
+    h = tview.height;
+    sw = tar.width.baseVal.value;
+    sh = tar.height.baseVal.value;
+    backr.style.position = "absolute";
+    backr.style.width = w+ "px";
+    backr.style.height = h+ "px";
+    backr.style.zIndex = -1;
+    backr.stroked = "false";
+    backr.filled = "false";
+    tar._tar.appendChild(backr);
+    trstyle = tar._tar.style;
+    tpstyle = objei.style;
+    trstyle.visibility = "visible";
+    trstyle.position = "absolute";
+    /*以下、画像を切り取り*/
+    trstyle.overflow = "hidden";
+    backrs = backr.currentStyle;
+    /*ウィンドウ枠の長さを決定する*/
+    viewWidth = w > sw ? sw : w;
+    viewHeight = h > sh ? sh : h;
+    bfl = _parseFloat(backrs.left);
+    bft = _parseFloat(backrs.top);
+    bl = -tar._tx;
+    bt = -tar._ty;
+    if (bfl !== 0 && !isNaN(bfl)) { //内部の図形にずれが生じたとき(isNaNはIE8でautoがデフォルト値のため)
+      bl = bfl;
+      dcp.style.left = -bl+ "px";
+    }
+    if (bft !== 0 && !isNaN(bfl)) {
+      bt = bft;
+      dcp.style.top = -bt+ "px";
+    }
+    backright = bl + viewWidth + 1;
+    backdown = bt + viewHeight + 1;
+    trstyle.clip = "rect(" +bt+ "px " +backright+ "px " +backdown+ "px " +bl+ "px)";
+    this._document = s;
+    if ("_svgload_limited" in s.documentElement) {
+      /*_svgload_limitedプロパティはXlink言語が使われていない限り、0である。
+       *xlink:href属性が指定されるたびに+1となる。
+       *0以外は、SVGLoadイベントが発火されない仕組みとなっている
+       *
+       *目的:
+       * Xlinkのリンク先のソースを読み込むまで、SVGLoadイベントを発火させないため
        */
-      style = tar.ownerDocument.defaultView.getComputedStyle(tar, "");
-      fontSize = _parseFloat(style.getPropertyValue("font-size"));
-      tar.x.baseVal._emToUnit(fontSize);
-      tar.y.baseVal._emToUnit(fontSize);
-      tar.width.baseVal._emToUnit(fontSize);
-      tar.height.baseVal._emToUnit(fontSize);
-      w = tview.width;
-      h = tview.height;
-      sw = tar.width.baseVal.value;
-      sh = tar.height.baseVal.value;
-      backr.style.position = "absolute";
-      backr.style.width = w+ "px";
-      backr.style.height = h+ "px";
-      backr.style.zIndex = -1;
-      backr.stroked = "false";
-      backr.filled = "false";
-      tar._tar.appendChild(backr);
-      trstyle = tar._tar.style;
-      tpstyle = objei.style;
-      trstyle.visibility = "visible";
-      trstyle.position = "absolute";
-      /*以下、画像を切り取り*/
-      trstyle.overflow = "hidden";
-      backrs = backr.currentStyle;
-      /*ウィンドウ枠の長さを決定する*/
-      viewWidth = w > sw ? sw : w;
-      viewHeight = h > sh ? sh : h;
-      bfl = _parseFloat(backrs.left);
-      bft = _parseFloat(backrs.top);
-      bl = -tar._tx;
-      bt = -tar._ty;
-      if (bfl !== 0 && !isNaN(bfl)) { //内部の図形にずれが生じたとき(isNaNはIE8でautoがデフォルト値のため)
-        bl = bfl;
-        dcp.style.left = -bl+ "px";
+      s.documentElement._svgload_limited--;
+      if (s.documentElement._svgload_limited < 0) {
+        var evt = s.createEvent("SVGEvents");
+        evt.initEvent("SVGLoad", false, false);
+        s.documentElement.dispatchEvent(evt);
       }
-      if (bft !== 0 && !isNaN(bfl)) {
-        bt = bft;
-        dcp.style.top = -bt+ "px";
+    }
+    //以下、テキストの位置を修正
+    text = s.documentElement._tar.getElementsByTagName("div");
+    for (var i=0,textli=text.length;i<textli;++i) {
+      var texti = text[i];
+      if (texti.firstChild.nodeName !== "shape") { //radialGradient用のdiv要素でないならば
+        var tis = texti.style;
+        tis.left = _parseFloat(tis.left) + bl + "px";
+        tis.top = _parseFloat(tis.top) + bt + "px";
+        tis = null;
       }
-      backright = bl + viewWidth + 1;
-      backdown = bt + viewHeight + 1;
-      trstyle.clip = "rect(" +bt+ "px " +backright+ "px " +backdown+ "px " +bl+ "px)";
-      this._document = s;
-      if ("_svgload_limited" in s.documentElement) {
-        /*_svgload_limitedプロパティはXlink言語が使われていない限り、0である。
-         *xlink:href属性が指定されるたびに+1となる。
-         *0以外は、SVGLoadイベントが発火されない仕組みとなっている
-         *
-         *目的:
-         * Xlinkのリンク先のソースを読み込むまで、SVGLoadイベントを発火させないため
-         */
-        s.documentElement._svgload_limited--;
-        if (s.documentElement._svgload_limited < 0) {
-          var evt = s.createEvent("SVGEvents");
-          evt.initEvent("SVGLoad", false, false);
-          s.documentElement.dispatchEvent(evt);
-        }
-      }
-      //以下、テキストの位置を修正
-      text = s.documentElement._tar.getElementsByTagName("div");
-      for (var i=0,textli=text.length;i<textli;++i) {
-        var texti = text[i];
-        if (texti.firstChild.nodeName !== "shape") { //radialGradient用のdiv要素でないならば
-          var tis = texti.style;
-          tis.left = _parseFloat(tis.left) + bl + "px";
-          tis.top = _parseFloat(tis.top) + bt + "px";
-          tis = null;
-        }
-      }
-      s.defaultView._cache = s.defaultView._cache_ele = null;
-      evt = objei = tar = tview = objw = objh = n = att = sdt = sp = dcp = backr = w = h = sw = sh = style = fontSize = null;
-      trstyle = tpstyle = backrs = viewWidth = viewHeight = text = bfl = bft = bl = bt = backdown = backright = null;
-      text = _parseFloat = null;
-      /*IEのメモリリーク対策として、空関数を入力*/
-      this.xmlhttp.onreadystatechange = NAIBU.emptyFunction;
-      alert(+(new Date()) - dsd.getTime())
-      if (this._next) {
+    }
+    s.defaultView._cache = s.defaultView._cache_ele = null;
+    evt = objei = tar = tview = objw = objh = n = att = sdt = sp = dcp = backr = w = h = sw = sh = style = fontSize = null;
+    trstyle = tpstyle = backrs = viewWidth = viewHeight = text = bfl = bft = bl = bt = backdown = backright = null;
+    text = _parseFloat = null;
+    /*IEのメモリリーク対策として、空関数を入力*/
+    this.xmlhttp.onreadystatechange = NAIBU.emptyFunction;
+    alert(+(new Date()) - dsd.getTime())
+    if (this._next) {
+      s = null;
+      this._next._init();
+    } else {
+      /*全要素の読み込みが終了した場合*/
+      if (s.implementation._buffer_) {
+        screen.updateInterval = 0;
+        /*以下はバッファリングにためておいた要素とイベントを、後から実行する*/
+        NAIBU._buff_num = 0;
+        NAIBU._buff = setInterval(function(){
+          var n = NAIBU._buff_num,
+              dbuf = DOMImplementation._buffer_,
+              dbufli = dbuf.length,
+              s, evt;
+          if (dbufli === 0) {
+            clearInterval(Event._buff);              
+          } else {
+            for (var i=0;i<50;++i) {
+              s = dbuf[n];
+              evt = dbuf[n+1];
+              s.dispatchEvent(evt);
+              n += 2;
+              s = evt = null;
+              if (n >= dbufli) {
+                clearInterval(NAIBU._buff);
+                DOMImplementation._buffer_ = null;
+                NAIBU.Time.start();
+                dbuf = n = dbufli = null;
+                return;
+              }
+            }
+            NAIBU._buff_num = n;
+          }
+          dbuf = n = dbufli = null;
+        }, 1);
         s = null;
-        this._next._init();
       } else {
-        /*全要素の読み込みが終了した場合*/
-        if (s.implementation._buffer_) {
-          screen.updateInterval = 0;
-          /*以下はバッファリングにためておいた要素とイベントを、後から実行する*/
-          NAIBU._buff_num = 0;
-          NAIBU._buff = setInterval(function(){
-            var n = NAIBU._buff_num,
-                dbuf = DOMImplementation._buffer_,
-                dbufli = dbuf.length,
-                s, evt;
-            if (dbufli === 0) {
-              clearInterval(Event._buff);              
-            } else {
-              for (var i=0;i<50;++i) {
-                s = dbuf[n];
-                evt = dbuf[n+1];
-                s.dispatchEvent(evt);
-                n += 2;
-                s = evt = null;
-                if (n >= dbufli) {
-                  clearInterval(NAIBU._buff);
-                  DOMImplementation._buffer_ = null;
-                  NAIBU.Time.start();
-                  dbuf = n = dbufli = null;
-                  return;
-                }
-              }
-              NAIBU._buff_num = n;
-            }
-            dbuf = n = dbufli = null;
-          }, 1);
-          s = null;
-        } else {
-          s = null;
-          NAIBU.Time.start();
-        }
-        delete NAIBU.doc;
+        s = null;
+        NAIBU.Time.start();
       }
+      delete NAIBU.doc;
     }
   },
   /*SVGDocument*/  getSVGDocument : function() {




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