[Sie-announce] SIEコード [2969] a要素でSVGファイルにリンクしたとき、target属性が_selfであっても置換できるように修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 10月 2日 (日) 20:07:36 JST


Revision: 2969
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2969
Author:   dhrname
Date:     2011-10-02 20:07:35 +0900 (Sun, 02 Oct 2011)

Log Message:
-----------
a要素でSVGファイルにリンクしたとき、target属性が_selfであっても置換できるように修正

Modified Paths:
--------------
    branches/08x/086/org/w3c/dom/svg.js

Modified: branches/08x/086/org/w3c/dom/svg.js
===================================================================
--- branches/08x/086/org/w3c/dom/svg.js	2011-09-28 13:11:49 UTC (rev 2968)
+++ branches/08x/086/org/w3c/dom/svg.js	2011-10-02 11:07:35 UTC (rev 2969)
@@ -1744,6 +1744,7 @@
         _parseFloat = parseFloat,
         ndoc = NAIBU.doc,
           oba = _doc.createElement("div"); //obaはradialGradient要素で使う
+    s._iframe = ifr;                     //_iframeプロパティはSVGAElementでリンク置換のときに扱う
     oba.setAttribute("id","_NAIBU_outline");
     _doc.body.appendChild(oba);
     sp.style.margin = "-1px,0px,0px,-1px"
@@ -4894,19 +4895,33 @@
     var tar = evt.target;
     if (tar.href.baseVal.indexOf(".svg") !== -1) { //もし、リンク先がSVGファイルならば
       var sd = document.body,
-          ob;
+          ob, nd;
+      sd.lastChild.innerHTML = "<object data='" +tar.href.baseVal.split("#")[0]+ "' width='" +screen.width+ "' height='" +screen.height+ "' type='image/svg+xml'></object>";
+      if (tar.target.baseVal === "_self") {
+        nd = tar.ownerDocument._iframe;
+        nd.parentNode.insertBefore(sd.lastChild.firstChild, nd);
+        ob = nd.nextSibling;
+        if (ob && (ob.tagName === "OBJECT")) {
+          nd.previousSibling.setAttribute("width", ob.getAttribute("width"));
+          nd.previousSibling.setAttribute("height", ob.getAttribute("height"));
+          nd.parentNode.removeChild(ob);
+        }
+        ob = NAIBU._search([nd.previousSibling]);
+        nd.parentNode.removeChild(nd);
+      } else {
+        sd.appendChild(sd.lastChild.firstChild);
+        while (sd.firstChild !== sd.lastChild) {     //オブジェクト要素以外を除去
+          sd.removeChild(sd.firstChild);
+        }
+        ob = NAIBU._search([sd.lastChild]);
+      }
       NAIBU.doc = new ActiveXObject("MSXML2.DomDocument");
-      sd.lastChild.innerHTML = "<object data='" +tar.href.baseVal.split("#")[0]+ "' width='" +screen.width+ "' height='" +screen.height+ "' type='image/svg+xml'></object>";
-      sd.appendChild(sd.lastChild.firstChild)
       evt.preventDefault();
-      while (sd.firstChild !== sd.lastChild) {     //オブジェクト要素以外を除去
-        sd.removeChild(sd.firstChild);
-      }
-      ob = NAIBU._search([sd.lastChild]);
       ob._next = {_init: function () {
         document.title = ob.getSVGDocument().title;
       }};
       ob._init();
+      sd = ob = nd = void 0;
     }
   }, false);
   SVGURIReference.apply(this, arguments);




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