svnno****@sourc*****
svnno****@sourc*****
2011年 9月 2日 (金) 21:19:32 JST
Revision: 2913
http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2913
Author: dhrname
Date: 2011-09-02 21:19:32 +0900 (Fri, 02 Sep 2011)
Log Message:
-----------
0.84 trunk
Modified Paths:
--------------
trunk/sie.js
Property Changed:
----------------
trunk/sie.js
Modified: trunk/sie.js
===================================================================
--- trunk/sie.js 2011-09-02 11:55:49 UTC (rev 2912)
+++ trunk/sie.js 2011-09-02 12:19:32 UTC (rev 2913)
@@ -985,6 +985,8 @@
var evt = node.ownerDocument.createEvent("MouseEvents");
evt.initMouseEvent(type, true, true, node.ownerDocument.defaultView, 0);
node.dispatchEvent(evt);
+ /*cancelBubbleプロパティについては、IEのMSDNなどを参照*/
+ node.ownerDocument._window.event.cancelBubble = true;
evt = null;
};
})(that)
@@ -995,7 +997,7 @@
/*void*/ Node.prototype.removeEventListener = function( /*string*/ type, /*EventListener*/ listener, /*boolean*/ useCapture) {
var tce = this._capter;
for (var i=0,tcli=tce.length;i<tcli;i++){
- if (tce[i].listener === listener) { //登録したリスナーと一致すれば
+ if (tce[i]._listener === listener) { //登録したリスナーと一致すれば
tce[i] = null;
}
}
@@ -1093,7 +1095,8 @@
EventListener.prototype = {
/*void*/ handleEvent : function( /*Event*/ evt) {
try {
- var ph = evt.eventPhase, cap = this._cap;
+ var ph = evt.eventPhase,
+ cap = this._cap;
if (ph === /*Event.CAPTURING_PHASE*/ 1) { //イベントフェーズが捕獲段階であることを示し
cap = cap ? false : true; //このオブジェクト(EventListenr)が捕獲フェーズを指定するならば、リスナーを作動させる。指定しなければ、作動しない。
}
@@ -1131,9 +1134,11 @@
this._stop = true;
},
/*void*/ preventDefault : function(){
- this._default = false;
- /*IEのみで使えるreturnValueプロパティ*/
- window.event.returnValue = false;
+ if (this.cancelable) {
+ this._default = false;
+ /*IEのみで使えるreturnValueプロパティ*/
+ this.target.ownerDocument._window.event.returnValue = false;
+ }
},
/*void*/ initEvent : function( /*string*/ eventTypeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg) {
this.type = eventTypeArg;
@@ -3265,7 +3270,7 @@
this._instance = null; //埋め込みの場合に、読み込んだDOMツリーを結び付けておくプロパティ
this._text = "";
this.addEventListener("DOMAttrModified", function(evt){
- if (evt.relatedNode.namespaceURI === "http://www.w3.org/1999/xlink" && evt.attrName === "xlink:href") {
+ 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を引く必要がある
@@ -3335,18 +3340,23 @@
ele = doc.getElementById(id);
tar._instance = ele;
ev = doc.createEvent("SVGEvents");
- ev.initEvent("SVGLoad", false, false);
+ ev.initEvent("S_Load", false, false);
tar.dispatchEvent(ev);
+ tar = xmlhttp = null;
} else if (uri.indexOf("data:") > -1) {
tar._tar.src = uri;
+ tar = xmlhttp = null;
} else if ((uri.indexOf("http:") > -1) || (uri.indexOf(".") === 0)){
if (tar.localName === "image") {
tar._tar.src = uri;
+ } else {
+ /*ここの_svgload_limitedは、リンクを読み込んだ後でSVGLoadイベントを実行させるという遅延処理で必要*/
+ tar.ownerDocument.documentElement._svgload_limited++;
}
xmlhttp.open("GET", uri, false);
xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xmlhttp.onreadystatechange = function() {
- if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
+ if ((xmlhttp.readyState === 4) && (xmlhttp.status === 200)) {
var type = xmlhttp.getResponseHeader('Content-Type') || "text",
doc, str, ele, ev;
if ((type.indexOf("text") > -1) || (type.indexOf("xml") > -1) || (type.indexOf("script") > -1)) { //ファイルがtext形式である場合
@@ -3376,19 +3386,31 @@
} else if (!!tar._tar) {
tar._tar.src = uri;
}
+ /*S_LoadイベントとはSIE独自のイベント。
+ *XLink言語によって、リンク先のコンテンツが読み込まれた時点で発火する
+ */
ev = tar.ownerDocument.createEvent("SVGEvents");
- ev.initEvent("SVGLoad", false, false);
+ ev.initEvent("S_Load", false, false);
tar.dispatchEvent(ev);
- type = doc = str = ev = null;
+ tar.ownerDocument.documentElement._svgload_limited--;
+ /*すべてのリンクが読み込みを終了した場合、SVGLoadイベントを発火*/
+ if (tar.ownerDocument.documentElement._svgload_limited < 0) {
+ ev = tar.ownerDocument.createEvent("SVGEvents");
+ ev.initEvent("SVGLoad", false, false);
+ tar.ownerDocument.documentElement.dispatchEvent(ev);
+ }
+ tar = type = doc = str = ev = null;
/*IEのメモリリーク対策として、空関数を入力*/
xmlhttp.onreadystatechange = NAIBU.emptyFunction;
+ xmlhttp = null;
}
};
xmlhttp.send(null);
}
}
+ tar.ownerDocument.documentElement._svgload_limited--;
}
- evt = tar = base = href = egbase = ep = b = lh = uri = xmlhttp = ui = id = doc = ele = ev = show= null;
+ evt = base = href = egbase = ep = b = lh = uri = ui = id = doc = ele = ev = show= null;
}, false);
tar = evt = null;
}, false);
@@ -3539,21 +3561,44 @@
evt = name = tv = ovb = par = tp = sa = mos = null;
}, false);
this.addEventListener("SVGLoad", function(evt){
+ /*以下のDOMAttrModifiedは浮上フェーズのときに、再描画をするように
+ *処理を書いたもの。属性が書き換わるたびに、再描画される
+ */
evt.target.addEventListener("DOMAttrModified", function(evt){
if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {
var tar = evt.target,
- evtt;
+ evtt;
if (tar.parentNode) {
evtt = tar.ownerDocument.createEvent("MutationEvents");
evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
evtt.target = tar;
- evtt.eventPhase = Event.AT_TARGET;
+ evtt.eventPhase = /*Event.AT_TARGET*/ 2;
var tce = tar._capter; //tceは登録しておいたリスナーのリスト
for (var j=0,tcli=tce.length;j<tcli;++j){
if (tce[j]) {
tce[j].handleEvent(evtt);
}
}
+ if (((tar.localName === "g") || (tar.localName === "a")) && (tar.namespaceURI === "http://www.w3.org/2000/svg")) {
+ tar._currentStyle = tar._cacheMatrix = null; //キャッシュを消去
+ if (tar.firstChild) {
+ var slist = tar.getElementsByTagNameNS("http://www.w3.org/2000/svg", "*");
+ for (var i=0,sli=slist.length;i<sli;++i) {
+ tar = slist[i];
+ tar._currentStyle = tar._cacheMatrix = null;
+ evtt = tar.ownerDocument.createEvent("MutationEvents");
+ evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
+ evtt.target = tar;
+ evtt.eventPhase = /*Event.AT_TARGET*/ 2;
+ var tce = tar._capter; //tceは登録しておいたリスナーのリスト
+ for (var j=0,tcli=tce.length;j<tcli;++j){
+ if (tce[j]) {
+ tce[j].handleEvent(evtt);
+ }
+ }
+ }
+ }
+ }
evtt = null;
}
tar = null;
@@ -3561,7 +3606,7 @@
evt = null;
}, false);
evt = null;
- }, true);
+ }, false);
return this;
};
SVGSVGElement.constructor = SVGElement;
@@ -3756,28 +3801,7 @@
} else if (!tnext && tpar._tar) {
tpar._tar.appendChild(tar._tar);
}
- tnext = tpar = isLast = null;
- tar.addEventListener("DOMAttrModified", function(evt){
- if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) {
- return; //強制終了させる
- }
- var tar = evt.target;
- var s = tar.getElementsByTagNameNS("http://www.w3.org/2000/svg", "*");
- if (s) {
- tar._currentStyle = tar._cacheMatrix = null; //キャッシュを消去
- var evtt = tar.ownerDocument.createEvent("MutationEvents");
- evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
- for (var i=0,sli=s.length;i<sli;++i) {
- var di = s[i];
- di._currentStyle = di._cacheMatrix = null;
- di.dispatchEvent(evtt);
- di = null;
- }
- evtt = null;
- }
- evt = tar = s = null;
- }, false);
- evt = tar = null;
+ tnext = tpar = isLast = evt = tar = null;
}, false);
return this;
};
@@ -3831,7 +3855,7 @@
}
evt.target.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", "embed");
}, false);
- this.addEventListener("SVGLoad", function(evt){
+ this.addEventListener("S_Load", function(evt){
var tar = evt.target,
style = tar.ownerDocument.defaultView.getComputedStyle(tar, ""),
fontSize = parseFloat(style.getPropertyValue("font-size")),
@@ -4014,19 +4038,19 @@
s = DOMImplementation.createDocument("http://www.w3.org/2000/svg", "svg"),
tar = s.documentElement,
tview = tar.viewport,
- objw, objh, fi, n, attr, att,
+ objw, objh, fi, n, attr, att, w, h,
sdt = tar._tar,
sp = _doc.createElement("div"),
dcp = _doc.createElement("v:group"),
backr = _doc.createElement("v:rect"),
- style, fontSize, sw, sh, trstyle, tpstyle, backrs,
+ style, fontSize, sw, sh, trstyle, tpstyle, backrs, viewWidth, viewHeight, backdown, backright,
bfl, bft, bl, text,
_parseFloat = parseFloat,
ndoc = NAIBU.doc,
oba = _doc.createElement("div"); //obaはradialGradient要素で使う
oba.setAttribute("id","_NAIBU_outline");
_doc.body.appendChild(oba);
- sp.style.margin = "-1px,-0px,0px,-1px"
+ sp.style.margin = "-1px,0px,0px,-1px"
if (ifcw) {
_doc.body.style.backgroundColor = objei.parentNode.currentStyle.backgroundColor;
}
@@ -4105,6 +4129,10 @@
fi = fi.nextSibling;
}
fi = null;
+ /*dom/event.jsのaddEventListenerメソッドなどで、iframe要素のwindowオブジェクトを利用する必要があるため、
+ *ドキュメントにそのオブジェクトを結び付けておく
+ */
+ s._window = ifcw;
/*以下では、VMLの要素とHTMLのCSSのプロパティを用いて、背景を
*作り出す作業を行う。これは必須
*/
@@ -4117,8 +4145,10 @@
sw = tar.width.baseVal.value;
sh = tar.height.baseVal.value;
backr.style.position = "absolute";
- backr.style.width = tview.width+ "px";
- backr.style.height = tview.height+ "px";
+ w = tview.width;
+ h = tview.height;
+ backr.style.width = w+ "px";
+ backr.style.height = h+ "px";
backr.style.zIndex = -1;
backr.stroked = "false";
backr.filled = "false";
@@ -4141,7 +4171,9 @@
bt = bft;
dcp.style.top = -bt+ "px";
}
- this._document = s;
+ backright = bl + viewWidth + 1;
+ backdown = bt + viewHeight + 1;
+ trstyle.clip = "rect(" +bt+ "px " +backright+ "px " +backdown+ "px " +bl+ "px)"; this._document = s;
if ("_svgload_limited" in s.documentElement) {
/*_svgload_limitedプロパティはXlink言語が使われていない限り、0である。
*xlink:href属性が指定されるたびに+1となる。
@@ -4170,7 +4202,7 @@
}
s.defaultView._cache = s.defaultView._cache_ele = null;
oba = _doc = evt = _doc = objei = tar = tview = objw = objh = n = att = sdt = sp = dcp = backr = sw = sh = style = fontSize = null;
- trstyle = tpstyle = backrs = text = texti = i = bfl = bft = bl = bt = text = _parseFloat = null;
+ trstyle = tpstyle = backrs = text = texti = i = bfl = bft = bl = bt = text = _parseFloat = w = h = viewWidth = viewHeight = backdown = backright = null;
/*IEのメモリリーク対策として、空関数を入力*/
this.xmlhttp.onreadystatechange = NAIBU.emptyFunction;
if (this._next) {
@@ -4250,7 +4282,7 @@
}
evt = null;
}, false);
- this.addEventListener("SVGLoad", function(evt){
+ this.addEventListener("S_Load", function(evt){
var tar = evt.target,
sheet = tar.sheet,
styleText = tar._text,
@@ -4275,7 +4307,6 @@
}
sheet.cssRules[sheet.cssRules.length] = scri;
}
- tod.documentElement._svgload_limited--;
tod.documentElement.addEventListener("DOMNodeInsertedIntoDocument", function(evt) {
var tar = evt.target,
doc = tar.ownerDocument,
@@ -4293,11 +4324,6 @@
}
tar = doc = rules = null;
}, true);
- if (tod.documentElement._svgload_limited < 0) {
- evt = tod.createEvent("SVGEvents");
- evt.initEvent("SVGLoad", false, false);
- tod.documentElement.dispatchEvent(evt);
- }
tar = evt = style = sheet = styleText = tod = i = rules = rli = null;
}, false);
this.addEventListener("DOMNodeInserted", function(evt){
@@ -4312,7 +4338,7 @@
var tar = evt.target;
if ((evt.eventPhase === Event.AT_TARGET) && !tar.getAttributeNodeNS("http://www.w3.org/1999/xlink", "xlink:href")) {
var evtt = tar.ownerDocument.createEvent("SVGEvents");
- evtt.initEvent("SVGLoad", false, false);
+ evtt.initEvent("S_Load", false, false);
evt.currentTarget.dispatchEvent(evtt);
}
tar = evt = null;
@@ -6770,14 +6796,8 @@
grad = ele = t = grad2 = href = stops = length = color = colors = opacity = null;
return;
}
- while (grad2 && !grad2.hasChildNodes()) { //stopを子要素に持つgradient要素を探す
- href = grad2.getAttributeNS("http://www.w3.org/1999/xlink", "href");
- if (href) {
- href.match(/#(.+)/);
- grad2 = grad2.ownerDocument.getElementById(RegExp.$1);
- } else {
- break;
- }
+ if (grad._instance) { //xlink言語で呼び出されたノードが_instanceに収納されているならば
+ grad2 = grad._instance;
}
stops = grad2.getElementsByTagNameNS("http://www.w3.org/2000/svg", "stop");
if (!stops) {
@@ -6806,6 +6826,10 @@
ele["o:opacity2"] = opacity[0]+ "";
/*SVGRadialGradientElementインターフェースで利用する*/
grad._color = color;
+ var gt = grad2.getAttributeNS(null, "gradientTransform");
+ if (gt) {
+ grad.setAttributeNS(null, "transform", gt);
+ }
grad = grad2 = ele = stops = length = color = colors = opacity = evt = t = href = stop = sstyle = ci = null;
}, false);
return this;
@@ -6890,10 +6914,6 @@
cx = cx*wid + nx; cy = cy*hei + ny; rx = r*wid; ry = r*hei;
nx = ny = wid = hei = null;
}
- var gt = grad.getAttributeNS(null, "gradientTransform");
- if (gt) {
- grad.setAttributeNS(null, "transform", gt);
- }
var matrix = tar.getScreenCTM().multiply(grad.getCTM());
el = cx - rx; et = cy - ry; er = cx + rx; eb = cy + ry;
var rrx = rx * 0.55228, rry = ry * 0.55228;
@@ -7109,26 +7129,11 @@
st = "new";
}
tar.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", st);
- tar.addEventListener("DOMAttrModified", function(evt){
- var tar = evt.target;
- var s = tar.getElementsByTagNameNS("http://www.w3.org/2000/svg", "*");
- if (s) {
- var evtt = tar.ownerDocument.createEvent("MutationEvents");
- evtt.initMutationEvent("DOMNodeInsertedIntoDocument", false, false, null, null, null, null, null);
- for (var i=0,sli=s.length;i<sli;++i) {
- var di = s[i];
- di.dispatchEvent(evtt);
- di = null;
- }
- evtt = null;
- }
- evt = tar = s = null;
- }, false);
tar = evt = null;
}, false);
this.addEventListener("DOMNodeInsertedIntoDocument", function(evt){
var tar = evt.target;
- if (!!tar._tar && (tar.nodeType === Node.ELEMENT_NODE)) {
+ if (!!tar._tar && (tar.nodeType === /*Node.ELEMENT_NODE*/ 1)) {
var txts = tar._tar.style;
txts.cursor = "hand";
txts.textDecoration = "none";
@@ -7170,19 +7175,13 @@
}
evt = null;
}, false);
- this.addEventListener("SVGLoad", function(evt){
+ this.addEventListener("S_Load", function(evt){
var tar = evt.target, script = tar._text;
var tod = tar.ownerDocument;
NAIBU._temp_doc = tod;
script = script.replace(/function\s+(\w+)/g, "$1 = function");
script = "(function(document){" +script+ "})(NAIBU._temp_doc);"
eval(script);
- tod.documentElement._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){
@@ -7197,7 +7196,7 @@
var tar = evt.target;
if (evt.eventPhase === Event.AT_TARGET && !tar.getAttributeNodeNS("http://www.w3.org/1999/xlink", "xlink:href")) {
var evtt = tar.ownerDocument.createEvent("SVGEvents");
- evtt.initEvent("SVGLoad", false, false);
+ evtt.initEvent("S_Load", false, false);
evt.currentTarget.dispatchEvent(evtt);
}
tar = evt = null;
@@ -8141,7 +8140,7 @@
evt.target.ownerDocument.documentElement._svgload_limited--
evt.target.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:show", "embed");
}, false);
- this.addEventListener("SVGLoad", function(evt){
+ this.addEventListener("S_Load", function(evt){
var tar = evt.target, tpp = tar.parentNode.parentNode.parentNode;
if (tpp.localName === "defs") {
tpp = tar.parentNode.parentNode; //tppをfont-face要素としておく
@@ -8547,42 +8546,32 @@
} else { //IE6-8ならば
var ob = _doc.getElementsByTagName("object"),
em = _doc.getElementsByTagName("embed"),
- i = 0,
s=[],
- ifr, obi, n;
- for (;ob[i];++i) {
- obi = ob[i];
- s[s.length] = new GetSVGDocument(obi);
- ifr = _doc.createElement("iframe");
- ifr.style.background = "black";
- n = obi.getAttribute("width");
- n && ifr.setAttribute("width", n);
- n = obi.getAttribute("height");
- n && ifr.setAttribute("height", n);
- ifr.marginWidth = ifr.marginHeight = "0px"; //このマージン設定がないと、全体がずれてしまう
- ifr.scrolling = "no";
- ifr.frameBorder = "0";
- /*iframe要素を使って、描画のプロセスを分離する
- *したがって、_docはdocumentとは別のオブジェクトとなる
- */
- obi.parentNode.insertBefore(ifr, obi);
- }
- for (i=0;em[i];++i) {
- obi = em[i];
- s[s.length] = new GetSVGDocument(obi);
- ifr = _doc.createElement("iframe");
- ifr.style.background = "black";
- n = obi.getAttribute("width");
- n && ifr.setAttribute("width", n);
- n = obi.getAttribute("height");
- n && ifr.setAttribute("height", n);
- ifr.marginWidth = ifr.marginHeight = "0px"; //このマージン設定がないと、全体がずれてしまう
- ifr.scrolling = "no";
- ifr.frameBorder = "0";
- obi.parentNode.insertBefore(ifr, obi);
- }
- ob = em = i = obi = ifr = null;
- for (i=0;i<s.length;++i) {
+ _search = function(_ob) {
+ var ifr, obi, n;
+ for (var i=0;_ob[i];++i) {
+ obi = _ob[i];
+ s[s.length] = new GetSVGDocument(obi);
+ ifr = _doc.createElement("iframe");
+ ifr.style.background = "black";
+ n = obi.getAttribute("width");
+ n && ifr.setAttribute("width", n);
+ n = obi.getAttribute("height");
+ n && ifr.setAttribute("height", n);
+ ifr.marginWidth = ifr.marginHeight = "0px"; //このマージン設定がないと、全体がずれてしまう
+ ifr.scrolling = "no";
+ ifr.frameBorder = "0";
+ /*iframe要素を使って、描画のプロセスを分離する
+ *したがって、_docはdocumentとは別のオブジェクトとなる
+ */
+ obi.parentNode.insertBefore(ifr, obi);
+ }
+ i = obi = ifr = _ob = null;
+ };
+ _search(ob);
+ _search(em);
+ ob = em = _search = null;
+ for (var i=0;i<s.length;++i) {
if (i < s.length-1) {
s[i]._next = s[i+1]
}
Property changes on: trunk/sie.js
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/04x/040/sie.js:812-829
/branches/04x/041/sie.js:891-923
/branches/04x/042/sie.js:927-967
/branches/04x/043/sie.js:969-1013
/branches/04x/044/sie.js:1015-1067
/branches/04x/045/sie.js:1069-1078
/branches/04x/046/sie.js:1080-1129
/branches/04x/047/sie.js:1131-1164
/branches/04x/048/sie.js:1166-1180
/branches/04x/sie.js:830-1181
/branches/05x/050/sie.js:1183-1201
/branches/05x/051/sie.js:1207-1323
/branches/05x/052/sie.js:1325-1352
/branches/05x/053/sie.js:1354-1400
/branches/05x/054/sie.js:1403-1422
/branches/05x/055/sie.js:1424-1454
/branches/05x/056/sie.js:1456-1491
/branches/05x/057/sie.js:1496-1523
/branches/05x/058/sie.js:1526-1590
/branches/05x/sie.js:1183-1594
/branches/06x/060/sie.js:1603-1850
/branches/06x/sie.js:1599-2355
/branches/07x/sie.js:2357-2748
/branches/08x/sie.js:2750-2883
+ /branches/04x/040/sie.js:812-829
/branches/04x/041/sie.js:891-923
/branches/04x/042/sie.js:927-967
/branches/04x/043/sie.js:969-1013
/branches/04x/044/sie.js:1015-1067
/branches/04x/045/sie.js:1069-1078
/branches/04x/046/sie.js:1080-1129
/branches/04x/047/sie.js:1131-1164
/branches/04x/048/sie.js:1166-1180
/branches/04x/sie.js:830-1181
/branches/05x/050/sie.js:1183-1201
/branches/05x/051/sie.js:1207-1323
/branches/05x/052/sie.js:1325-1352
/branches/05x/053/sie.js:1354-1400
/branches/05x/054/sie.js:1403-1422
/branches/05x/055/sie.js:1424-1454
/branches/05x/056/sie.js:1456-1491
/branches/05x/057/sie.js:1496-1523
/branches/05x/058/sie.js:1526-1590
/branches/05x/sie.js:1183-1594
/branches/06x/060/sie.js:1603-1850
/branches/06x/sie.js:1599-2355
/branches/07x/sie.js:2357-2748
/branches/08x/sie.js:2750-2912