svnno****@sourc*****
svnno****@sourc*****
2011年 3月 22日 (火) 23:28:00 JST
Revision: 2500 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2500 Author: dhrname Date: 2011-03-22 23:28:00 +0900 (Tue, 22 Mar 2011) Log Message: ----------- eventモジュールに関して、var文を整理 Modified Paths: -------------- branches/07x/073/org/w3c/dom/events.js Modified: branches/07x/073/org/w3c/dom/events.js =================================================================== --- branches/07x/073/org/w3c/dom/events.js 2011-03-22 14:27:11 UTC (rev 2499) +++ branches/07x/073/org/w3c/dom/events.js 2011-03-22 14:28:00 UTC (rev 2500) @@ -111,19 +111,20 @@ /*void*/ Node.prototype.addEventListener = function( /*string*/ type, /*EventListener*/ listener, /*boolean*/ useCapture) { try{ this.removeEventListener(type, listener, useCapture); //いったん、(あれば)リスナーを離す。 - var s = new EventListener(useCapture, type, listener); //リスナーを作成 + var s = new EventListener(useCapture, type, listener), //リスナーを作成 + t = type.charAt(0), + node, evt; this._capter[this._capter.length] = s; //このノードにリスナーを登録しておく - var t = type.charAt(0); if (t !== "D" && t !== "S" && type !== "beginEvent" && type !== "endEvent" && type !== "repeatEvent") { //MouseEventsならば - var node = this; + node = this; node._tar.attachEvent("on" +type, function(){ - var evt = node.ownerDocument.createEvent("MouseEvents"); + evt = node.ownerDocument.createEvent("MouseEvents"); evt.initMouseEvent(type, true, true, node.ownerDocument.defaultView, 0); node.dispatchEvent(evt); evt = null; }); } - s = t = null; + s = t = node = null; }catch(e){ stlog.add(e, 122); } @@ -135,11 +136,17 @@ tce[i] = null; } } + i = tcli = tce = null; }; /*boolean*/ Node.prototype.dispatchEvent = function( /*Event*/ evt) { if (!evt.type || evt.type === "") { //Eventの型が設定されていないとき throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR); } + var te = this, + td = this.ownerDocument, + time, tob, + type = /*Event.CAPTURING_PHASE*/ 1, + tce; if (!this.ownerDocument._isLoaded) { /*以下では、画像の処理に時間がかかりそうな場合、処理落ちとして、遅延処理 *を行い、バッファリングにイベント送付処理をためていく作業となる @@ -150,11 +157,11 @@ if (!this.ownerDocument._limit_time_) { this.ownerDocument._limit_time_ = evt.timeStamp; } else { - var time = this.ownerDocument._limit_time_; + time = this.ownerDocument._limit_time_; if ((evt.timeStamp - time) > 1000) { if (this.ownerDocument.implementation._buffer_) { /*1秒を超えたらバッファにため込んで後で使う*/ - var tob = this.ownerDocument.implementation._buffer_; + tob = this.ownerDocument.implementation._buffer_; tob[tob.length] = this; tob[tob.length] = evt; } else { @@ -166,9 +173,7 @@ } evt.target = this; evt.eventPhase = 1;//Event.CAPTURING_PHASE - var te = this; //このノードからドキュメントノードにいたるまでの、DOMツリーのリストを作成しておく - var td = this.ownerDocument; td[/*Event.BUBBLING_PHASE*/ 3] = null; /*以下の処理では、documentElementのparentNodeが *Documentノードではなく、nullになっていることを前提としている。 @@ -184,20 +189,18 @@ /*最初に捕獲フェーズでDOMツリーを下っていき、イベントのターゲットについたら、 *そこで、浮上フェーズとして折り返すように、反復処理をおこなう。 */ - var type = /*Event.CAPTURING_PHASE*/ 1; while (td) { evt.currentTarget = td; if (td === this) { //イベントのターゲットに到着(折り返し地点) type = 2;//Event.AT_TARGET; } evt.eventPhase = type; - var tce = td._capter; //tceは登録しておいたリスナーのリスト + tce = td._capter; //tceは登録しておいたリスナーのリスト for (var j=0,tcli=tce.length;j<tcli;++j){ if (tce[j] && (evt.type === tce[j]._type)) { tce[j].handleEvent(evt); } } - j = tcli = null; if (evt._stop) { break; //stopPropagationメソッドが呼ばれたら、停止する } @@ -210,7 +213,7 @@ td = td[type]; } var ed = evt._default - evt = te = s = d = tce = n = td = type = null; + evt = te = tce = n = td = type = time = tob = j = tcli =null; return ed; }; @@ -400,7 +403,10 @@ }; /*Node*/ Node.prototype.insertBefore = function( /*Node*/ n, ref) { - var tp = this.parentNode; + var tp = this.parentNode, + rp, evt, + te = this, + s, descend, di; if (tp) { while (!tp) { //先祖をたどっていく if (tp === n) { //先祖要素が追加ノードならばエラー @@ -426,7 +432,7 @@ throw (new DOMException(DOMException.NOT_FOUND_ERR)); } this.childNodes.splice(ref._num,1,n,ref); //Arrayのspliceを利用して、リストにnノードを追加 - var rp = ref.previousSibling; + rp = ref.previousSibling; if (rp) { rp.nextSibling = n; } @@ -447,14 +453,13 @@ ch = null; } /*ここから*/ - var evt = this.ownerDocument.createEvent("MutationEvents"); + evt = this.ownerDocument.createEvent("MutationEvents"); evt.initMutationEvent("DOMNodeInserted", true, false, this, null, null, null, null); n.dispatchEvent(evt); /*以下のDOMNodeInsertedIntoDocumentイベントは、間接的、あるいは直接ノードが *挿入されたときに発火する。間接的な挿入とは、サブツリーを作っておいて、それをいっぺんに挿入する場合など。 *このイベントは浮上しないことに注意を要する */ - var te = this, s; do { s = te; te = te.parentNode; @@ -469,16 +474,17 @@ if (!n.hasChildNodes()) { //子ノードがないので終了 return n; } - var descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得 + descend = n.getElementsByTagNameNS("*", "*"); //全子孫要素を取得 if (descend) { for (var i=0,dli=descend.length;i<dli;++i) { - var di = descend[i]; + di = descend[i]; di.dispatchEvent(evt); di = null; } } evt = descend = null; /*ここまで追加*/ + tp = rp = te = s = di = null; return n; }; @@ -520,40 +526,43 @@ }; /*void*/ CharacterData.prototype.appendData = function( /*string*/ arg) { - var pd = this.data; + var pd = this.data, + evt; this.data += arg; this.length = this.data.length; /*ここから*/ - var evt = this.ownerDocument.createEvent("MutationEvents"); + evt = this.ownerDocument.createEvent("MutationEvents"); evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); this.parentNode.dispatchEvent(evt); evt = arg = pd = null; /*ここまで追加*/ }; /*void*/ CharacterData.prototype.insertData = function( /*long*/ offset, /*string*/ arg) { - var pd = this.data; - var pre = this.substring(0, offset - 1); //文字列を二つに分けた、前半部分 - var next = this.substring(offset, this.length - offset); //後半部分 + var pd = this.data, + pre = this.substring(0, offset - 1), //文字列を二つに分けた、前半部分 + next = this.substring(offset, this.length - offset), //後半部分 + evt; this.data = pre + this.data + next; this.length = this.data.length; /*ここから*/ - var evt = this.ownerDocument.createEvent("MutationEvents"); + evt = this.ownerDocument.createEvent("MutationEvents"); evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); this.parentNode.dispatchEvent(evt); - evt = arg = pd = null; + evt = arg = pd = pre = next = null; /*ここまで追加*/ }; /*void*/ CharacterData.prototype.deleteData = function( /*long*/ offset, /*long*/ count) { var pd = this.data; - var pre = this.substring(0, offset - 1); //残すべき前半部分 - var next = this.substring(offset + count, this.length - 1); //後半部分 + pre = this.substring(0, offset - 1), //残すべき前半部分 + next = this.substring(offset + count, this.length - 1), //後半部分 + evt; if (offset + count > this.length) { //offsetとcountの和が文字全体の長さを超える場合、offsetから最後までのを削除 next = ""; } this.data = pre + next; this.length = this.data.length; /*ここから*/ - var evt = this.ownerDocument.createEvent("MutationEvents"); + evt = this.ownerDocument.createEvent("MutationEvents"); evt.initMutationEvent("DOMCharacterDataModified", true, false, null, pd, this.data, null, null); this.parentNode.dispatchEvent(evt); evt = pd = null;