OSDN Git Service

polyline, polygon要素の変数の修正
authordhrname <dhrname@users.sourceforge.jp>
Tue, 8 Oct 2013 14:30:04 +0000 (23:30 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Tue, 8 Oct 2013 14:30:04 +0000 (23:30 +0900)
org/sie-uncompressed.js
org/w3c/dom/svg.js

index 21b2528..bc76eb0 100644 (file)
@@ -2318,6 +2318,9 @@ module smil
 {\r
   typedef dom::DOMString DOMString;\r
 */\r
+/*ElementTimeControlはSVGAnimationElementに統合させる。\r
+ *というのは、多重継承が難しいため\r
+ */\r
 \r
 function TimeEvent() {\r
   Event.apply(this);\r
@@ -2573,6 +2576,33 @@ function SVGElement() {
 };\r
 SVGElement.prototype = Object._create(Element);\r
 \r
+/*_inserted__メソッド\r
+ * VMLの挿入をするための、内部処理のメソッド\r
+ */\r
+SVGElement.prototype._inserted__ = function(tar) {\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 && tnext._tar.parentNode) {\r
+          /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
+          snext = tnext._tar;\r
+          break;\r
+        }\r
+        tnext = tnext.nextSibling;\r
+      }\r
+      snext && (spar = snext.parentNode);\r
+      spar.insertBefore(sar, snext);\r
+    }\r
+  }\r
+  tnext = sar = spar = snext = void 0;\r
+};\r
+\r
 /*関数スコープを避けるため、グローバルスコープでevalさせる関数*/\r
 NAIBU.eval = function(code) {\r
   var doc = document,\r
@@ -2655,7 +2685,7 @@ NAIBU.eval = function(code) {
    */\r
   /*SVGMatrix*/   this.getCTM = function() {\r
     var s, m;\r
-    if (!!this._cacheMatrix) { //キャッシュがあれば\r
+    if (this._cacheMatrix) { //キャッシュがあれば\r
       s = this._cacheMatrix;\r
     } else {\r
       m = this.transform.baseVal.consolidate();\r
@@ -2679,10 +2709,8 @@ NAIBU.eval = function(code) {
     if (!this.parentNode) {\r
       return null;\r
     }\r
-    var view = this.nearestViewportElement || this.ownerDocument.documentElement;\r
-    var s = view.getScreenCTM().multiply(this.getCTM());\r
-    view = null;\r
-    return s;\r
+    return ((this.nearestViewportElement || this.ownerDocument.documentElement)\r
+        .getScreenCTM().multiply(this.getCTM()));\r
   };\r
 \r
   /*getTransformToElementメソッド\r
@@ -3443,7 +3471,6 @@ function SVGSVGElement(_doc) {
                 css::DocumentCSS {*/\r
   /*以下のx,y,width,heightプロパティは\r
    *それぞれ、svg要素の同名属性に対応。たとえば、xならば、x属性に対応している\r
-   *1000というのは、W3Cで触れていないため、独自の初期値を採用\r
    */\r
   var slen = SVGAnimatedLength;\r
   /*readonly SVGAnimatedLength*/ this.x      = new slen();\r
@@ -3540,6 +3567,35 @@ function SVGSVGElement(_doc) {
     }\r
     evt = name = tv = ovb = par = tp = sa = mos = void 0;\r
   }, false);\r
+  this.addEventListener("DOMNodeInserted", function(evt){\r
+    if (evt.eventPhase === /*Event.AT_TARGET*/ 2) {\r
+      var tar = evt.target;\r
+      tar.addEventListener("DOMNodeInserted", function(evt){\r
+        if (evt.eventPhase === 1) {\r
+          evt.target.nearestViewportElement = tar;\r
+        }\r
+      }, true);\r
+      /*getCTMメソッドの再定義で、viewBox属性やx,y属性などに対応*/\r
+      tar._getCTM = tar.getCTM;\r
+      tar.getCTM = function() {\r
+        if (!this._cacheMatrix) {\r
+          var m = this.getScreenCTM(),\r
+              style = this.ownerDocument.defaultView.getComputedStyle(this, ""),\r
+              fontSize = parseFloat(style.getPropertyValue("font-size"));\r
+          this.x.baseVal._emToUnit(fontSize);\r
+          this.y.baseVal._emToUnit(fontSize);\r
+          m = m.translate(this.x.baseVal.value, this.y.baseVal.value);\r
+          this._cacheMatrix = this._getCTM().multiply(m);\r
+        }\r
+        return (this._cacheMatrix);\r
+      };\r
+      tar._inserted__(tar);\r
+      evt = tar.ownerDocument.createEvent("SVGEvents");\r
+      evt.initEvent("SVGLoad", false, false);\r
+      tar.dispatchEvent(evt);\r
+      evt = void 0;\r
+    }\r
+  }, false);\r
   this.addEventListener("SVGLoad", function(evt){\r
     /*以下のDOMAttrModifiedは浮上フェーズのときに、再描画をするように\r
      *処理を書いたもの。属性が書き換わるたびに、再描画される\r
@@ -3942,27 +3998,8 @@ function SVGSwitchElement(_doc) {
     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 && tnext._tar.parentNode) {\r
-            /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
-            snext = tnext._tar;\r
-            break;\r
-          }\r
-          tnext = tnext.nextSibling;\r
-        }\r
-        snext && (spar = snext.parentNode);\r
-        spar.insertBefore(sar, snext);\r
-      }\r
-    }\r
-    tnext = sar = spar = snext = evt = tar = void 0;\r
+    tar._inserted__(tar);\r
+    evt = tar = void 0;\r
   }, false);\r
 };\r
 SVGSwitchElement.prototype = Object._create(SVGElement);\r
@@ -6041,28 +6078,8 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) {
     if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {\r
       return; //強制終了させる\r
     }\r
-    var tar = evt.target,\r
-        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 && tnext._tar.parentNode) {\r
-            /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
-            snext = tnext._tar;\r
-            break;\r
-          }\r
-          tnext = tnext.nextSibling;\r
-        }\r
-        snext && (spar = snext.parentNode);\r
-        spar.insertBefore(sar, snext);\r
-      }\r
-    }\r
-    tnext = sar = spar = snext = void 0;\r
+    var tar = evt.target;\r
+    tar._inserted__(tar);\r
     tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {\r
       var tar = evt.target,\r
           tp = tar.points,\r
@@ -6079,7 +6096,7 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) {
       list.splice(2, 0, "l");\r
       var dat = "m" + list.join(" ") + xclose,\r
           ele = tar._tar,\r
-          vi = tar.ownerDocument.documentElement;\r
+          vi = tar.ownerDocument.documentElement,\r
           w = vi.width.baseVal.value,\r
           h = vi.height.baseVal.value;\r
       //VMLに結び付けていく\r
@@ -8678,28 +8695,9 @@ function SVGForeignObjectElement(_doc) /*:
     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 && tnext._tar.parentNode) {\r
-            /*use要素や実体参照は_tarプロパティをもっていないので、無視する*/\r
-            snext = tnext._tar;\r
-            break;\r
-          }\r
-          tnext = tnext.nextSibling;\r
-        }\r
-        snext && (spar = snext.parentNode);\r
-        spar.insertBefore(sar, snext);\r
-      }\r
-    }\r
+    tar._inserted__(tar);\r
     tar.addEventListener("DOMNodeInsertedIntoDocument", SVGImageElement.prototype._imageo, false);\r
-    tnext = sar = spar = snext = evt = tar = void 0;\r
+    evt = tar = void 0;\r
   }, false);\r
   this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){\r
     if(evt.eventPhase === /*Event.CAPTURING_PHASE*/ 1) {\r
index 3fcac8d..b13b935 100644 (file)
@@ -3811,7 +3811,7 @@ NAIBU._GenericSVGPolyElement = function (_doc, xclose) {
       list.splice(2, 0, "l");\r
       var dat = "m" + list.join(" ") + xclose,\r
           ele = tar._tar,\r
-          vi = tar.ownerDocument.documentElement;\r
+          vi = tar.ownerDocument.documentElement,\r
           w = vi.width.baseVal.value,\r
           h = vi.height.baseVal.value;\r
       //VMLに結び付けていく\r