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);