svnno****@sourc*****
svnno****@sourc*****
2011年 6月 12日 (日) 19:58:48 JST
Revision: 2769 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2769 Author: dhrname Date: 2011-06-12 19:58:48 +0900 (Sun, 12 Jun 2011) Log Message: ----------- グローバルオブジェクトのdocumentをローカルにしておいて軽量化 Modified Paths: -------------- branches/08x/080/org/w3c/core.js branches/08x/080/org/w3c/dom/svg.js Modified: branches/08x/080/org/w3c/core.js =================================================================== --- branches/08x/080/org/w3c/core.js 2011-06-12 09:55:23 UTC (rev 2768) +++ branches/08x/080/org/w3c/core.js 2011-06-12 10:58:48 UTC (rev 2769) @@ -958,7 +958,7 @@ } } if (isSpecified) { - ele = new (ti[namespaceURI][localName]); + ele = new (ti[namespaceURI][localName])(this._document_); } else { ele = new Element(); } @@ -970,6 +970,7 @@ ti = namespaceURI = qualifiedName = prefix = localName = isSpecified = null; return ele; }; +Document.prototype._document_ = document /*createAttributeNSメソッド *属性ノードを作る。setAttributeNSで使うため、削除不可 */ Modified: branches/08x/080/org/w3c/dom/svg.js =================================================================== --- branches/08x/080/org/w3c/dom/svg.js 2011-06-12 09:55:23 UTC (rev 2768) +++ branches/08x/080/org/w3c/dom/svg.js 2011-06-12 10:58:48 UTC (rev 2769) @@ -1124,9 +1124,10 @@ /*SVGSVGElement *svg要素をあらわすオブジェクト */ -function SVGSVGElement() { +function SVGSVGElement(_doc) { SVGElement.apply(this, arguments); - this._tar = document.createElement("v:group"); + this._tar = _doc.createElement("v:group"); + _doc = null; /*_svgload_limitedはSVGLoadイベントを発火させる判定基準。 * Xlink言語が使われていない限り0であり、SVGLoadイベントが発火される*/ this._svgload_limited = 0; @@ -1423,9 +1424,10 @@ SVGViewSpec.constructor = SVGFitToViewBox; SVGViewSpec.prototype = new SVGFitToViewBox(); -function SVGGElement() { +function SVGGElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:group"); + this._tar = _doc.createElement("v:group"); + _doc = null; /*以下の処理は、この子要素ノードがDOMツリーに追加されて初めて、 *描画が開始されることを示す。つまり、appendChildで挿入されない限り、描画をしない。 */ @@ -1578,9 +1580,10 @@ /*SVGElementInstance*/ SVGElementInstanceList.prototype.item = function(/*unsigned long*/ index ) { return (this[index]); } -function SVGImageElement() { +function SVGImageElement(_doc) { SVGElement.apply(this, arguments); - this._tar = document.createElement("v:image"); + this._tar = _doc.createElement("v:image"); + _doc = null; //以下は、与えられた属性の値に対応する /*readonly SVGAnimatedLength*/ this.x = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.y = new SVGAnimatedLength(); @@ -1901,7 +1904,7 @@ /*SVGStyleElement *style要素をあらわすオブジェクト */ -function SVGStyleElement() { +function SVGStyleElement(_doc) { SVGElement.apply(this); LinkStyle.apply(this); /*LinkStyleに関しては、以下の仕様を参照のこと。なお、これはSVG DOMでは継承されていないので要注意。 @@ -1929,13 +1932,13 @@ sheet = tar.sheet, styleText = tar._text, tod = tar.ownerDocument, - style = document.createElement("style"), + style = _doc.createElement("style"), ri, rsc, scri, rsi; NAIBU._temp_doc = tod; sheet = tod.styleSheets[tod.styleSheets.length] = DOMImplementation.createCSSStyleSheet(tar.title, tar.media); sheet.ownerNode = tar; /*以下は、IEのCSSパーサを使って、スタイルシートのルールを実装していく*/ - document.documentElement.firstChild.appendChild(style); + _doc.documentElement.firstChild.appendChild(style); style.styleSheet.cssText = styleText; for (var i=0, rules=style.styleSheet.rules, rli=rules.length;i<rli;++i) { ri = rules[i]; @@ -2479,6 +2482,7 @@ *処理を行う。SVGPaintインターフェースをも用いる */ var tod = tar.ownerDocument, + _doc = tod._document_, el = tar._tar, style = tod.defaultView.getComputedStyle(tar, ""), fill = style.getPropertyCSSValue("fill"), @@ -2599,10 +2603,10 @@ } else if (disp && !disp._isDefault && (disp.indexOf("inline-block") === -1)) { el.style.display = "inline-block"; } - tod = el = fill = stroke = sp = fp = style = cursor = tar = matrix = vis = disp = num = null; + tod = _doc = el = fill = stroke = sp = fp = style = cursor = tar = matrix = vis = disp = num = null; }; -function SVGPathElement() { +function SVGPathElement(_doc) { SVGElement.apply(this); this._tar = _doc.createElement("v:shape"); //interface SVGAnimatedPathData @@ -3269,9 +3273,10 @@ NAIBU.SVGPathElement = SVGPathElement; //IE8では、SVGPathElementはローカル変数 })(document, parseInt, Math); -function SVGRectElement() { +function SVGRectElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); + _doc = null; /*readonly SVGAnimatedLength*/ this.x = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.y = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.width = new SVGAnimatedLength(); @@ -3369,9 +3374,9 @@ SVGRectElement.constructor = SVGElement; SVGRectElement.prototype = new SVGElement(); -function SVGCircleElement() { +function SVGCircleElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); /*readonly SVGAnimatedLength*/ this.cx = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.cy = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.r = new SVGAnimatedLength(); @@ -3445,9 +3450,10 @@ SVGCircleElement.constructor = SVGElement; SVGCircleElement.prototype = new SVGElement(); -function SVGEllipseElement() { +function SVGEllipseElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); + _doc = null; /*readonly SVGAnimatedLength*/ this.cx = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.cy = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.rx = new SVGAnimatedLength(); @@ -3523,9 +3529,10 @@ SVGEllipseElement.constructor = SVGElement; SVGEllipseElement.prototype = new SVGElement(); -function SVGLineElement() { +function SVGLineElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); + _doc = null; /*readonly SVGAnimatedLength*/ this.x1 = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.y1 = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.x2 = new SVGAnimatedLength(); @@ -3591,9 +3598,10 @@ SVGLineElement.constructor = SVGElement; SVGLineElement.prototype = new SVGElement(); -function SVGPolylineElement() { +function SVGPolylineElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); + _doc = null; //interface SVGAnimatedPoints /*readonly SVGPointList*/ this.animatedPoints = this.points = new SVGPointList(); this.addEventListener("DOMAttrModified", function(evt){ @@ -3669,9 +3677,10 @@ SVGPolylineElement.constructor = SVGElement; SVGPolylineElement.prototype = new SVGElement(); -function SVGPolygonElement() { +function SVGPolygonElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("v:shape"); + this._tar = _doc.createElement("v:shape"); + _doc = null; //interface SVGAnimatedPoints /*readonly SVGPointList*/ this.animatedPoints = this.points = new SVGPointList(); this.addEventListener("DOMAttrModified", function(evt){ @@ -3751,7 +3760,7 @@ SVGPolygonElement.constructor = SVGElement; SVGPolygonElement.prototype = new SVGElement(); -function SVGTextContentElement() { +function SVGTextContentElement(_doc) { SVGElement.apply(this); this._list = null; //文字の位置を格納しておくリストのキャッシュ this._length = 0; //全文字数 @@ -3776,13 +3785,13 @@ tar.data = data; data = data.split(''); for (var i=0, tdli=data.length;i<tdli;++i) { - var d = document.createElement("div"), dstyle = d.style; + var d = _doc.createElement("div"), dstyle = d.style; dstyle.position = "absolute"; dstyle.marginLeft = dstyle.marginRight = dstyle.marginTop = "0px"; dstyle.paddingTop = dstyle.paddingLeft = "0px"; dstyle.whiteSpace = "nowrap"; dstyle.textIndent = "0px"; - d.appendChild(document.createTextNode(data[i])); + d.appendChild(_doc.createTextNode(data[i])); tar._tars[tar._tars.length] = d; } data = null; @@ -4012,8 +4021,8 @@ }; -function SVGTextPositioningElement() { - SVGTextContentElement.apply(this); +function SVGTextPositioningElement(_doc) { + SVGTextContentElement.apply(this, arguments); /*readonly SVGAnimatedLengthList*/ this.x = new SVGAnimatedLengthList(); /*readonly SVGAnimatedLengthList*/ this.y = new SVGAnimatedLengthList(); /*readonly SVGAnimatedLengthList*/ this.dx = new SVGAnimatedLengthList(); @@ -4083,9 +4092,9 @@ SVGTextPositioningElement.constructor = SVGTextContentElement; SVGTextPositioningElement.prototype = new SVGTextContentElement(); -function SVGTextElement() { - SVGTextPositioningElement.apply(this); - this._tar = document.createElement("v:group"); +function SVGTextElement(_doc) { + SVGTextPositioningElement.apply(this, arguments); + this._tar = _doc.createElement("v:group"); this.addEventListener("DOMNodeInserted", function(evt){ if (evt.eventPhase === /*Event.BUBBLING_PHASE*/ 3) { return; //強制終了させる @@ -4196,7 +4205,7 @@ isRect = false; } if (!isRect) { - var backr = document.createElement("v:rect"); + var backr = _doc.createElement("v:rect"); var backrs = backr.style; //ずれを修正するためのもの backrs.width = "1px"; backrs.height = "1px"; @@ -4479,7 +4488,7 @@ SVGLinearGradientElement.constructor = SVGGradientElement; SVGLinearGradientElement.prototype = new SVGGradientElement(); -function SVGRadialGradientElement() { +function SVGRadialGradientElement(_doc) { SVGGradientElement.apply(this); /*readonly SVGAnimatedLength*/ this.cx = new SVGAnimatedLength(); /*readonly SVGAnimatedLength*/ this.cy = new SVGAnimatedLength(); @@ -4545,8 +4554,8 @@ p = pmt = null; } var ellipse = list.join(" "); - var outline = document.getElementById("_NAIBU_outline"); - var background = document.createElement("div"), bstyle = background.style; + var outline = _doc.getElementById("_NAIBU_outline"); + var background = _doc.createElement("div"), bstyle = background.style; bstyle.position = "absolute"; bstyle.display = "inline-block"; var w = vi.width, h = vi.height; @@ -4698,9 +4707,10 @@ SVGCursorElement.constructor = SVGElement; SVGCursorElement.prototype = new SVGElement(); -function SVGAElement() { +function SVGAElement(_doc) { SVGElement.apply(this); - this._tar = document.createElement("a"); + this._tar = _doc.createElement("a"); + _doc = null; /*readonly SVGAnimatedString*/ this.target = new SVGAnimatedString(); this.addEventListener("DOMAttrModified", function(evt){ var tar = evt.target; @@ -5885,7 +5895,7 @@ if (isMSIE) { var rand = "n" +Math.random(); ti._tar.firstChild.setAttribute("id", rand); - var titf = document.getElementById(rand); + var titf = ti.ownerDocument._document_.getElementById(rand); /*IEのみ、font-sizeは自動で調整されている(つまり、DOMからよびだされた)ものを使った方がよい*/ fontSize = parseFloat(titf.currentStyle.fontSize); fe = fontSize / em;