[Sie-announce] SIEコード [1912]

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2010年 6月 26日 (土) 23:58:56 JST


Revision: 1912
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1912
Author:   dhrname
Date:     2010-06-26 23:58:56 +0900 (Sat, 26 Jun 2010)

Log Message:
-----------


Modified Paths:
--------------
    branches/06x/061/sie.js

Modified: branches/06x/061/sie.js
===================================================================
--- branches/06x/061/sie.js	2010-06-26 14:58:40 UTC (rev 1911)
+++ branches/06x/061/sie.js	2010-06-26 14:58:56 UTC (rev 1912)
@@ -974,7 +974,6 @@
   var s = !!this._id[elementId] ? this._id[elementId] : null;
   return s;
 };
-var isMSIE = /*@cc_on!@*/false;
 
 /*
 #endif // _DOM_IDL_*/
@@ -1033,7 +1032,42 @@
  };
  /*
  #endif // _STYLESHEETS_IDL_
+ */ /*
+ // File: http://www.w3.org/TR/2000/REC-DOM-Level-2-Style-20001113/css.idl
+
+ #ifndef _CSS_IDL_
+ #define _CSS_IDL_
+
+ #include "dom.idl"
+ #include "stylesheets.idl"
+ #include "views.idl"
+
+ #pragma prefix "dom.w3c.org"
+ module css
+ {
+
+   typedef dom::DOMString DOMString;
+   typedef dom::Element Element;
+   typedef dom::DOMImplementation DOMImplementation;
+
+   interface CSSRule;
+   interface CSSStyleSheet;
+   interface CSSStyleDeclaration;
+   interface CSSValue;
+   interface Counter;
+   interface Rect;
+   interface RGBColor;
  */
+ /*CSSRuleList
+  *Arrayで代用
+ function CSSRuleList {
+     readonly attribute unsigned long    length;
+     CSSRule            item(in unsigned long index);
+   };
+ */
+ /*CSSRule
+  *CSSのルールを表現する。基底クラスなので削除不可。
+  */
  function CSSRule() {
    this.cssText = "";
  /*CSSStyleSheet*/ this.parentStyleSheet;
@@ -1251,7 +1285,7 @@
  };
 
  function CSSValue() {
-   this.cssText;
+   this.cssText = "";
    this.cssValueType = 0;
    return this;
  };
@@ -1459,8 +1493,8 @@
    strokeMiterlimit : "4",
    strokeOpacity : "1",
    writingMode : "lr-tb",
-   fontFamily : "inline",
-   fontSize : "inline",
+   fontFamily : "serif",
+   fontSize : "12",
    fontSizeAdjust : "none",
    fontStretch : "normal",
    fontStyle : "normal",
@@ -1732,6 +1766,7 @@
  /*
  #endif // _CSS_IDL_
  */
+  //以下は例外処理のログをとるためのもの。開発者以外は削除すること
  function STLog(jou) {
  this.jo = jou;
  if (this.jo) {
@@ -1797,7 +1832,7 @@
          var evt = node.ownerDocument.createEvent("MouseEvents");
          evt.initMouseEvent(type, true, true, node.ownerDocument.defaultView, 0);
          node.dispatchEvent(evt);
-         evt - null;
+         evt = null;
        });
      }
      s = t = null;
@@ -1866,24 +1901,24 @@
  };
  EventListener.prototype = {
  /*void*/ handleEvent : function( /*Event*/ evt) {
-// try {
-   var ph = evt.eventPhase, cap = this._cap;
-   if (ph === Event.CAPTURING_PHASE) { //イベントフェーズが捕獲段階であることを示し
-     cap = cap ? false : true;         //このオブジェクト(EventListenr)が捕獲フェーズを指定するならば、リスナーを作動させる。指定しなければ、作動しない。
+//     try {
+       var ph = evt.eventPhase, cap = this._cap;
+       if (ph === Event.CAPTURING_PHASE) { //イベントフェーズが捕獲段階であることを示し
+         cap = cap ? false : true;         //このオブジェクト(EventListenr)が捕獲フェーズを指定するならば、リスナーを作動させる。指定しなければ、作動しない。
+       }
+       if (!cap && (evt.type === this._type)) {
+         this._listener(evt);
+       }
+       evt = ph = cap = null;
+ /*    } catch (e) {
+       var evtt = evt.target.ownerDocument.createEvent("SVGEvents");
+       evtt.target = evt.target;
+       evtt.initEvent("SVGError", true, false);
+       evt.target.dispatchEvent(evtt);
+       stlog.add(e, 200);
+       evtt = null;
+     };*/
    }
-   if (!cap && (evt.type === this._type)) {
-     this._listener(evt);
-   }
-   evt = ph = cap = null;
-/*    } catch (e) {
-   var evtt = evt.target.ownerDocument.createEvent("SVGEvents");
-   evtt.target = evt.target;
-   evtt.initEvent("SVGError", true, false);
-   evt.target.dispatchEvent(evtt);
-   stlog.add(e, 200);
-   evtt = null;
- };*/
-   }
  };
  /*Eventクラス
   *イベントの雛形となる。プロパティもすべて含めて、必須
@@ -2067,7 +2102,6 @@
    n.parentNode = this;
    /*ここから*/
    var evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = n;
    evt.initMutationEvent("DOMNodeInserted", true, false, this, null, null, null, null);
    n.dispatchEvent(evt);
    /*以下のDOMNodeInsertedIntoDocumentイベントは、間接的、あるいは直接ノードが
@@ -2075,7 +2109,6 @@
     *このイベントは浮上しないことに注意を要する
     */
    evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = n;
    evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
    n.dispatchEvent(evt);
    if (!n.hasChildNodes()) {                       //子ノードがないので終了
@@ -2083,14 +2116,14 @@
    }
    var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得
    if (descend) {
+     evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
      for (var i=0,dli=descend.length;i<dli;++i) {
        var di = descend[i];
        evt.target = di;
-       evt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
        var tce = di._capter; //tceは登録しておいたリスナーのリスト
        for (var j=0,tcli=tce.length;j<tcli;++j){
          if (tce[j]) {
-           tce[j].handleEvent(evtt);
+           tce[j].handleEvent(evt);
          }
        }
        j = tcli = di = null;
@@ -2107,25 +2140,22 @@
    }
    /*ここから*/
    var evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = ele;
    /*以下のDOMNodeRemovedFromDocumentイベントは、間接的、あるいは直接ノードが
     *除去されたときに発火する。間接的な除去とは、サブツリーをいっぺんに除去する場合など。
     *このイベントは浮上しないことに注意を要する
     */
    evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null);
-   n.dispatchEvent(evt);
+   ele.dispatchEvent(evt);
    var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得
    if (descend) {
+     evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null);
      for (var i=0,dli=descend.length;i<dli;++i) {
        var di = descend[i];
        evt.target = di;
-       evt.initMutationEvent("DOMNodeRemovedFromDocument", false, false, null, null, null, null, null);
        di.dispatchEvent(evt);
        di = null;
      }
    }
-   evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = ele;
    evt.initMutationEvent("DOMNodeRemoved", true, false, this, null, null, null, null);
    ele.dispatchEvent(evt);
    evt = descend = null;
@@ -2147,9 +2177,8 @@
    this.length = this.data.length;
    /*ここから*/
    var evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = this.parentNode;
    evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null);
-   ele.dispatchEvent(evt);
+   this.parentNode.dispatchEvent(evt);
    evt = arg = pd = null;
    /*ここまで追加*/
  };
@@ -2161,9 +2190,8 @@
    this.length = this.data.length;
    /*ここから*/
    var evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = this.parentNode;
    evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null);
-   ele.dispatchEvent(evt);
+   this.parentNode.dispatchEvent(evt);
    evt = arg = pd = null;
    /*ここまで追加*/
  };
@@ -2178,26 +2206,13 @@
    this.length = this.data.length;
    /*ここから*/
    var evt = this.ownerDocument.createEvent("MutationEvents");
-   evt.target = this.parentNode;
    evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null);
-   ele.dispatchEvent(evt);
+   this.parentNode.dispatchEvent(evt);
    evt = pd = null;
    /*ここまで追加*/
  };
 
  // _EVENTS_IDL_
-//File: smil.idl
- /*
- #ifndef _SMIL_IDL_
- #define _SMIL_IDL_
-
- #include "dom.idl"
-
- #pragma prefix "dom.w3c.org"
- module smil
- {
-   typedef dom::DOMString DOMString;
- */
  function ElementTimeControl(ele) {
    this.tar = ele;
    return this;
@@ -2205,6 +2220,7 @@
  ElementTimeControl.prototype = {
    /*void*/  beginElement : function() {},
    /*void*/  endElement : function() {},
+   /*void*/  beginElementAt : function(/*float*/ offset) {},
    /*void*/  endElementAt : function(/*float*/ offset) {}
  };
 
@@ -2213,11 +2229,14 @@
    /*readonly attribute long*/             this.detail;
    return this;
  };
- TiemEvent.counstructor = Event;
+ TimeEvent.counstructor = Event;
  TimeEvent.prototype = new Event();
  /*void*/  TimeEvent.prototype.initTimeEvent = function(/*DOMString*/ typeArg, 
                                       /*views::AbstractView*/ viewArg, 
                                       /*long*/ detailArg) {
+   this.type = typeArg;
+   this.view = viewArg;
+   this.detail = detailArg;
  };
  //#endif // _SMIL_IDL_
  //これを頭に付けたら、内部処理用
@@ -2415,9 +2434,6 @@
        if (!!tar[name]) {
          var tea = tar[name], tod = tar.ownerDocument.documentElement;
          if (tea instanceof SVGAnimatedLength) {
-           if (evt.attrChange === MutationEvent.ADDITION) {
-             tea.baseVal = tod.createSVGLength();
-           }
            var n = evt.newValue.match(/\D+$/), type = SVGLength.SVG_LENGTHTYPE_NUMBER;
            if (!!n) {
              n = n[0];
@@ -2700,7 +2716,7 @@
 
  function SVGAnimatedLength() {
    /*readonly SVGLength*/ this.animVal;
-   this.baseVal;
+   this.baseVal = new SVGLength();
    return this;
  };
  function SVGLengthList() {
@@ -2959,10 +2975,14 @@
   */
  function SVGURIReference() {
    /*readonly SVGAnimatedString*/ this.href = new SVGAnimatedString();
-   this._instance = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ
+   this._instance = this._text = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ
    this.addEventListener("DOMAttrModified", function(evt){
      if (evt.relatedNode.namespaceURI === "http://www.w3.org/1999/xlink" && evt.attrName === "xlink:href") {
        evt.target.href.baseVal = evt.newValue;
+       /*_svgload_limitedを+1とすることで、
+        *SVGLoadイベントは発火されなくなる。1を引く必要がある
+        */
+       evt.target.ownerDocument.documentElement._svgload_limited++;
      }
      evt = null;
    }, false);
@@ -3102,6 +3122,9 @@
  function SVGSVGElement() {
    SVGElement.apply(this, arguments);
    this._tar = document.createElement("v:group");
+   /*_svgload_limitedはSVGLoadイベントを発火させる判定基準。
+    * Xlink言語が使われていない限り0であり、SVGLoadイベントが発火される*/
+   this._svgload_limited = 0;
  /*                SVGElement,
                  SVGTests,
                  SVGLangSpace,
@@ -3359,8 +3382,10 @@
        return; //強制終了させる
      }
      if (tar.nextSibling) {
-       tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
-     } else {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
        tar.parentNode._tar.appendChild(tar._tar);
      }
      evt.target.addEventListener("DOMAttrModified", function(evt){
@@ -3481,6 +3506,7 @@
      var data = "src";
    }
    xmlhttp.open("GET", objei.getAttribute(data), true);
+   objei.style.display = "none";
    xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState === 4  &&  xmlhttp.status === 200) {
@@ -3553,10 +3579,18 @@
        var backdown = bt + viewHeight + 1;
        trstyle.clip = "rect(" +bt+ "px " +backright+ "px " +backdown+ "px " +bl+ "px)";
        this._document = s;
-       var evt = s.createEvent("SVGEvents");
-       evt.target = s.documentElement;
-       evt.initEvent("SVGLoad", false, false);
-       s.documentElement.dispatchEvent(evt);
+       if (!!s._svgload_limited) {
+         /*_svgload_limitedプロパティはXlink言語が使われていない限り、0である。
+          *xlink:href属性が指定されるたびに+1となる。
+          *0以外は、SVGLoadイベントが発火されない仕組みとなっている
+          */
+         s._svgload_limited--;
+         if (s._svgload_limited < 0) {
+           var evt = s.createEvent("SVGEvents");
+           evt.initEvent("SVGLoad", false, false);
+           s.documentElement.dispatchEvent(evt);
+         }
+       }
        s = evt = null;
        alert((new Date()).getTime() - dew.getTime());
        if (thistar._next) {
@@ -3809,7 +3843,7 @@
    } else {
      var s = this.getItem(0);
      for (var i=1,nli=this.numberOfItems;i<nli;++i) {
-       s.setMatrix(this.getItem(i))
+       s.setMatrix(this.getItem(i).matrix)
      }
      this.initialize(s);
      return s;
@@ -4205,12 +4239,8 @@
            } else if (dii === "a") {
              s = tar.createSVGPathSegArcRel(di[j+5], di[j+6], di[j], di[j+1], di[j+2], di[j+3], di[j+4]);
              j += 6;
-           } else if (dii === "Z") {
+           } else if (dii === "Z" || dii === "z") {
              s = tar.createSVGPathSegClosePath();
-             break;
-           } else if (dii === "z") {
-             s = tar.createSVGPathSegClosePath();
-             break;
            } else if (dii === "S") {
              s = tar.createSVGPathSegCurvetoCubicSmoothAbs(di[j+2], di[j+3], di[j], di[j+1]);
              j += 3;
@@ -4242,12 +4272,11 @@
         *変換をする処理。相対座標を絶対座標に変換して、M、L、Cコマンドに正規化していく
         */
        var cx = 0, cy = 0; //現在セグメントの終了点の絶対座標を示す (相対座標を絶対座標に変換するときに使用)
-       var xn = 0, yn = 0; //subpath の始点の絶対座標を示す (SコマンドやTコマンドなどで使用)
+       var xn = 0, yn = 0; //T,tコマンドで仮想的な座標を算出するのに用いる
+       var startx = 0, starty = 0; //M,mコマンドにおける始点座標(Z,zコマンドで用いる)
        for (var j=0, tli=tlist.numberOfItems;j<tli;++j) {
          var ti = tlist.getItem(j), ts = ti.pathSegType, dii = ti.pathSegTypeAsLetter;
          if (ts === SVGPathSeg.PATHSEG_UNKNOWN) {
-         } else if (ts === SVGPathSeg.PATHSEG_CLOSEPATH) {
-           tnl.appendItem(ti);
          } else {
            var rx = cx, ry = cy; //rx, ryは前のセグメントの終了点
            if (ts % 2 === 1) {     //相対座標ならば
@@ -4269,6 +4298,8 @@
                  continue;
                }
              }
+             startx = cx;
+             starty = cy;
              tnl.appendItem(ti);
            } else if (dii === "m") {
              if (j !== 0) {
@@ -4278,6 +4309,8 @@
                  continue;
                }
              }
+             startx = cx;
+             starty = cy;
              tnl.appendItem(tar.createSVGPathSegMovetoAbs(cx, cy));
            } else if (dii === "L") {
              tnl.appendItem(ti);
@@ -4287,11 +4320,19 @@
              tnl.appendItem(ti);
            } else if (dii === "c") {
              tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, ti.x1+rx, ti.y1+ry, ti.x2+rx, ti.y2+ry));
+           } else if (dii === "z") {
+             cx = startx;
+             cy = starty;
+             tnl.appendItem(ti);
            } else if (dii === "Q") {
+             xn = 2*cx - ti.x1;
+             yn = 2*cy - ti.y1;
              //2次スプライン曲線は近似的な3次ベジェ曲線に変換している
              tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*ti.x1) / 3, (ry + 2*ti.y1) / 3, (2*ti.x1 + cx) / 3, (2*ti.y1 + cy) / 3));
            } else if (dii === "q") {
              var x1 = ti.x1 + rx, y1 = ti.y1 + ry;
+             xn = 2*cx - x1;
+             yn = 2*cy - y1;
              tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3));
              x1 = y1 = null;
            } else if (dii === "A" || dii === "a") {
@@ -4357,8 +4398,8 @@
              })(ti, cx, cy, rx, ry, tar, tnl);
            } else if (dii === "S") {
              if (j !== 0) {
-               var tg = tlist.getItem(j-1);
-               if (tg.pathSegTypeAsLetter === "C" || tg.pathSegTypeAsLetter === "c") {
+               var tg = tnl.getItem(tnl.numberOfItems-1);
+               if (tg.pathSegTypeAsLetter === "C") {
                  var x1 = 2*tg.x - tg.x2;
                  var y1 = 2*tg.y - tg.y2;
                  tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, x1, y1, ti.x2, ti.y2));
@@ -4366,8 +4407,8 @@
              }
            } else if (dii === "s") {
              if (j !== 0) {
-               var tg = tlist.getItem(j-1);
-               if (tg.pathSegTypeAsLetter === "C" || tg.pathSegTypeAsLetter === "c") {
+               var tg = tnl.getItem(tnl.numberOfItems-1);
+               if (tg.pathSegTypeAsLetter === "C") {
                  var x1 = 2*tg.x - tg.x2;
                  var y1 = 2*tg.y - tg.y2;
                  tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, x1, y1, ti.x2+rx, ti.y2+ry));
@@ -4376,10 +4417,10 @@
            } else if (dii === "T" || dii === "t") {
              if (j !== 0) {
                var tg = tlist.getItem(j-1);
-               if (tg.pathSegTypeAsLetter === "Q" || tg.pathSegTypeAsLetter === "q") {
-                 var x1 = 2*tg.x - tg.x1;
-                 var y1 = 2*tg.y - tg.y1;
-                 tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*x1) / 3, (ry + 2*y1) / 3, (2*x1 + cx) / 3, (2*y1 + cy) / 3));
+               if ("QqTt".indexOf(tg.pathSegTypeAsLetter) > -1) {
+                 tnl.appendItem(tar.createSVGPathSegCurvetoCubicAbs(cx, cy, (rx + 2*xn) / 3, (ry + 2*yn) / 3, (2*xn + cx) / 3, (2*yn + cy) / 3));
+                 xn = 2*cx - xn;
+                 yn = 2*cy - yn;
                }
              }
            } else if (dii === "H" || dii === "h") {
@@ -4388,7 +4429,9 @@
              tnl.appendItem(tar.createSVGPathSegLinetoAbs(rx, cy));
            }
          }
+         ti = dii = ts = null;
        }
+       cx = cy = xn = yn = startx = starty = null;
      }
      evt = null;
    }, false);
@@ -4400,7 +4443,11 @@
      if (evt.eventPhase === Event.BUBBLING_PHASE) {
        return; //強制終了させる
      }
-     if (tar.parentNode._tar) {
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
        tar.parentNode._tar.appendChild(tar._tar);
      }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
@@ -4621,7 +4668,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target;
        var rx = tar.hasAttributeNS(null, "rx"), ry = tar.hasAttributeNS(null, "ry");
@@ -4690,7 +4743,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target;
        var cx = tar.cx.baseVal.value, cy = tar.cy.baseVal.value, rx = ry = tar.r.baseVal.value;
@@ -4742,7 +4801,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target;
        var cx = tar.cx.baseVal.value, cy = tar.cy.baseVal.value, rx = tar.rx.baseVal.value, ry = tar.ry.baseVal.value;
@@ -4794,7 +4859,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target;
        var list = ["m", tar.x1.baseVal.value, tar.y1.baseVal.value, "l", tar.x2.baseVal.value, tar.y2.baseVal.value];
@@ -4859,7 +4930,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target, tp = tar.points;
        //以下は、配列listそのものをCTMで座標変換していく処理
@@ -4916,7 +4993,13 @@
        return; //強制終了させる
      }
      var tar = evt.target;
-     tar.parentNode._tar.appendChild(tar._tar);
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
+       tar.parentNode._tar.appendChild(tar._tar);
+     }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target, tp = tar.points;
        //以下は、配列listそのものをCTMで座標変換していく処理
@@ -5223,7 +5306,13 @@
          backr.filled = "false";
          ttp.appendChild(backr);
        }
-       tar.parentNode._tar.appendChild(ttp);
+       if (tar.nextSibling) {
+         if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+           tar.parentNode._tar.insertBefore(ttp, tar.nextSibling._tar);
+         }
+       } else if (!!tar.parentNode._tar){
+         tar.parentNode._tar.appendChild(ttp);
+       }
      }
      tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
        var tar = evt.target, ti = tar.firstChild;
@@ -5725,15 +5814,19 @@
      if (evt.eventPhase === Event.BUBBLING_PHASE) {
        return; //強制終了させる
      }
-     if (tar.parentNode._tar) {
+     if (tar.nextSibling) {
+       if (!!tar.parentNode._tar && !!tar.nextSibling._tar) {
+         tar.parentNode._tar.insertBefore(tar._tar, tar.nextSibling._tar);
+       }
+     } else if (!!tar.parentNode._tar){
        tar.parentNode._tar.appendChild(tar._tar);
-       var txts = tar._tar.style;
-       txts.cursor = "hand";
-       txts.left = "0px";
-       txts.top = "0px";
-       txts.textDecoration = "none";
-       txts = null;
      }
+     var txts = tar._tar.style;
+     txts.cursor = "hand";
+     txts.left = "0px";
+     txts.top = "0px";
+     txts.textDecoration = "none";
+     txts = null;
      var t = tar.target.baseVal;
      var st = "replace";
      if (t === "_blank") {
@@ -5782,29 +5875,35 @@
      evt = null;
    }, 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);
-     evtt = evt = tar = null;
+     var tar = evt.target, script = tar._text;
+     script = "(function(window, document){" +script;
+     script += "})(Document.prototype.defaultView, window._document)";
+     /*_documentに該当する文書ノードをグローバル変数に入れておいて、後で渡しておく*/
+     var tod = tar.ownerDocument;
+     window._document = tod;
+     eval(script);
+     tod._svgload_limited--;
+     if (tod.documentElement._svgload_limited < 0) {
+       evt = tod.createEvent("SVGEvents");
+       evt.initEvent("SVGLoad", false, false);
+       tod.documentElement.dispatchEvent(evt);
+     }
+     tar = evt = script = null;
    }, false);
    this.addEventListener("DOMNodeInserted", function(evt){
      var tar = evt.target;
      if (evt.eventPhase === Event.BUBBLING_PHASE) {
        if (tar.nodeType === Node.CDATA_SECTION_NODE) {
+         /*もし、CDATA宣言を用いて、ソースが書かれていれば、
+          *それを_textプロパティに格納しておく
+          */
          evt.currentTarget._text = tar.nodeValue;
        }
-       return;
+     } else if (evt.eventPhase === Event.AT_TARGET && !tar.hasAttribute("xlink:href")) {
+       var evtt = tar.ownerDocument.createEvent("SVGEvents");
+       evtt.initEvent("SVGLoad", false, false);
+       evt.currentTarget.dispatchEvent(evtt);
      }
-     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;
@@ -5834,7 +5933,16 @@
  function SVGAnimationElement() { 
    SVGElement.apply(this, arguments);
    /*readonly SVGElement*/ this.targetElement;
+   this._currentTime = 0;
    //smil::ElementTimeControl;
+   var s = new ElementTimeControl(this);
+   /*以下は関数のコピー
+    *これによって、ElementTimeControlの多重継承を模擬する
+    */
+   this.beginElement = s.beginElement;
+   this.endElement = s.endElement;
+   this.beginElementAt = s.beginElementAt;
+   this.endElementAt = s.endElementAt;
    return this;
  };
  SVGAnimationElement.constructor = SVGElement;
@@ -5843,6 +5951,7 @@
  /*float*/ SVGAnimationElement.prototype.getStartTime = function(){
  };
  /*float*/ SVGAnimationElement.prototype.getCurrentTime = function(){
+   return (this._currentTime);
  };
  /*float*/ SVGAnimationElement.prototype.getSimpleDuration = function(){
  };
@@ -6117,18 +6226,21 @@
      oba.setAttribute("id","_NAIBU_outline");
      document.body.appendChild(oba);
      var ob = document.getElementsByTagName("object"), em = document.getElementsByTagName("embed");
-     for (var i=0,s=[];i<ob.length;++i) {
+     var i = 0;
+     for (s=[];i<ob.length;++i) {
        s[s.length] = new GetSVGDocument(ob[i]);
      }
-     for (var i=0;i<em.length;++i) {
+     for (i=0;i<em.length;++i) {
        s[s.length] = new GetSVGDocument(em[i]);
      }
-     for (var i=0;i<s.length;++i) {
+     for (i=0;i<s.length;++i) {
        if (i < s.length-1) {
          s[i]._next = s[i+1]
        }
      }
-     s[0]._init(); //初期化作業を開始
+     if (i > 0) {
+       s[0]._init(); //初期化作業を開始
+     }
      s = null;
    }
  }) )




Sie-announce メーリングリストの案内
アーカイブの一覧に戻る