svnno****@sourc*****
svnno****@sourc*****
2010年 5月 11日 (火) 23:36:17 JST
Revision: 1818
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1818
Author: dhrname
Date: 2010-05-11 23:36:17 +0900 (Tue, 11 May 2010)
Log Message:
-----------
SVGURIReferenceとSVGAElementオブジェクトの実装と修正
Modified Paths:
--------------
branches/ufltima/dom/svg.js
Modified: branches/ufltima/dom/svg.js
===================================================================
--- branches/ufltima/dom/svg.js 2010-05-11 10:27:43 UTC (rev 1817)
+++ branches/ufltima/dom/svg.js 2010-05-11 14:36:17 UTC (rev 1818)
@@ -764,46 +764,48 @@
function SVGURIReference() {
/*readonly SVGAnimatedString*/ this.href = new SVGAnimatedString();
this.addEventListener("DOMAttrModified", function(evt){
- this.href.baseVal = evt.newValue;
+ if (evt.relatedNode.namespaceURI === "http://www.w3.org/1999/xlink" && evt.attrName === "xlink:href") {
+ evt.target.href.baseVal = evt.newValue;
+ }
+ evt = null;
}, false);
this.addEventListener("DOMNodeInserted", function(evt){
var tar = evt.target;
if (evt.eventPhase === Event.BUBBLING_PHASE) {
return; //強制終了させる
}
- if (tar.href.baseVal !== "") { //xlink:href属性が指定されたとき
- var base, href = tar.href.baseVal;
- var egbase = tar.xmlbase;
- if (!egbase) {
- var ep = tar.parentNode, b = null;
- while(!b && ep) {
- b = ep.xmlbase;
- if (b) {
- break;
+ tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
+ var tar = evt.target;
+ if (tar.href.baseVal !== "") { //xlink:href属性が指定されたとき
+ var base, href = tar.href.baseVal;
+ var egbase = tar.xmlbase;
+ if (!egbase) {
+ var ep = tar.parentNode, b = null;
+ while(!b && ep) {
+ b = ep.xmlbase;
+ ep = ep.parentNode;
}
- ep = ep.parentNode;
- }
- base = b;
- if (!b) { //xml:baseの指定がなければ
- if (href.indexOf("#") !== 0) { //href属性において#が一番につかない場合
- var lh = location.href;
- base = lh.replace(/\/[^\/]+?$/,"/"); //URIの最後尾にあるファイル名は消す。例: /n/sie.js -> /n/
- } else{
- base = location.href;
+ base = b;
+ if (!b) { //xml:baseの指定がなければ
+ if (href.indexOf("#") !== 0) { //href属性において#が一番につかない場合
+ var lh = location.href;
+ base = lh.replace(/\/[^\/]+?$/, "/"); //URIの最後尾にあるファイル名は消す。例: /n/sie.js -> /n/
+ } else{
+ base = location.href;
+ }
}
+ } else{
+ base = egbase;
}
- } else{
- base = egbase;
+ if (href.indexOf(":") === -1) {
+ tar.xmlbase = base;
+ } else{
+ tar.xmlbase = "";
+ }
+ tar.href.baseVal = href;
}
- if (href.indexOf(":") === -1) {
- tar.xmlbase = base;
- } else{
- tar.xmlbase = "";
- }
- tar.href.baseVal = href;
- }
- tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
}, false);
+ tar = evt = null;
}, false);
return this;
};
@@ -1225,7 +1227,7 @@
var obje = document.getElementsByTagName("object");
for (var i=0, objli=1;i<objli;++i) {
var objei = {style:{}};//obje[i];
- xmlhttp.open("GET", "../svggen/text-text-01-b.svg", true);//objei.getAttribute("data"), true);
+ xmlhttp.open("GET", "../svggen/linking-a-01-b.svg", true);//objei.getAttribute("data"), true);
xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
@@ -2116,7 +2118,9 @@
if (evt.eventPhase === Event.BUBBLING_PHASE) {
return; //強制終了させる
}
- tar.parentNode._tar.appendChild(tar._tar);
+ if (tar.parentNode._tar) {
+ tar.parentNode._tar.appendChild(tar._tar);
+ }
tar.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
/*以下の処理は、normalizedpathSegListとCTMに基づいて、
*SVGのd属性をVMLに変換していく処理である。
@@ -3392,8 +3396,30 @@
function SVGAElement() {
SVGElement.apply(this, arguments);
+ this._tar = document.createElement("a");
/*readonly SVGAnimatedString*/ this.target = new SVGAnimatedString();
SVGURIReference.apply(this, arguments);
+ this.addEventListener("DOMAttrModified", function(evt){
+ if (evt.attrName === "target") {
+ evt.target.target.baseVal = evt.newValue;
+ }
+ }, false);
+ this.addEventListener("DOMNodeInserted", function(evt){
+ if (evt.eventPhase === Event.BUBBLING_PHASE) {
+ return; //強制終了させる
+ }
+ var tar = evt.target;
+ if (tar.parentNode._tar) {
+ tar.parentNode._tar.appendChild(tar._tar);
+ }
+ var t = tar.target.baseVal;
+ var st = "replace";
+ if (t === "_blank") {
+ st = "new";
+ }
+ tar.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", st)
+ tar = evt = null;
+ }, false);
return this;
};
SVGAElement.constructor = SVGElement;