[Sie-announce] SIEコード [1611] Eventに関する整理とdispatchメソッドの修正

Zurück zum Archiv-Index

svnno****@sourc***** svnno****@sourc*****
2010年 1月 31日 (日) 21:27:29 JST


Revision: 1611
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1611
Author:   dhrname
Date:     2010-01-31 21:27:29 +0900 (Sun, 31 Jan 2010)

Log Message:
-----------
Eventに関する整理とdispatchメソッドの修正

Modified Paths:
--------------
    branches/DOM/org/w3c/core.js
    branches/DOM/org/w3c/dom/events.js

Modified: branches/DOM/org/w3c/core.js
===================================================================
--- branches/DOM/org/w3c/core.js	2010-01-29 12:22:03 UTC (rev 1610)
+++ branches/DOM/org/w3c/core.js	2010-01-31 12:27:29 UTC (rev 1611)
@@ -1087,38 +1087,6 @@
   var s = (typeof(this._id[elementId]) == "undefined") ? null : this._id[elementId];
   return s;
 };
-//以下はDOMで設計されていないことに気をつける
-Document.prototype._fireEvent = function(type, bubble, cancel) { //eventの発火
-  var evt = this.createEvent();
-  evt.initEvent(type,bubble,cancel);
-  evt.target = this[window.event.srcElement.uniqueID];
-  var p = evt.target, ch = [], n = 0; //chはノードリスト
-  while (!p) {
-    ch[n] = p;
-    n++; p = p.parentNode;
-  }
-  for (var i=0,chi=ch.length*2-1;i<chi;i++) {
-    evt.currentTarget = ch[i];
-    if (i == ch.length-1) {
-      evt.eventPhase = 2;
-    } else if (i > ch.length-1) {
-      evt.eventPhase = 3;
-    }
-    ch[i].dipatchEvent(evt);
-  }
-  if (typeof this._updateAfterEvent != "undefined") {
-    this.updateAfterEvent();
-    this._arr = null;
-    this._arr = [];
-  }
-  evt = null;
-}
-Document.prototype._updateAfterEvent = function() { //event終了時に強制描画
-  var tarr = this._arr;
-  for (var i=0,tarri=tarr.length;i<tarr;++i) {
-    tarr[i].set(this.w,this.h);
-  }
-}
 
 /*
 #endif // _DOM_IDL_*/

Modified: branches/DOM/org/w3c/dom/events.js
===================================================================
--- branches/DOM/org/w3c/dom/events.js	2010-01-29 12:22:03 UTC (rev 1610)
+++ branches/DOM/org/w3c/dom/events.js	2010-01-31 12:27:29 UTC (rev 1611)
@@ -109,11 +109,66 @@
   if (!evt.type || evt.type === "") { //Eventの型が設定されていないとき
     throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
   }
-  var tce = this._capter;
-  for (var i=0,tcli=tce.length;i<tcli;i++){
-    if (tce[i]) { tce[i].handleEvent(evt);}
+  if (this === evt.target) {
+    evt.eventPhase = Event.AT_TARGET;
   }
+  if (evt.eventPhase === Event.CAPTURING_PHASE) {
+    var cte = this.lastChild;
+    while(cte) {
+      cte.dispatch(evt);
+      if (evt.eventPhase === Event.AT_TARGET) {
+        cte = null;
+      } else {
+        cte = cte.previousSibling;
+      }
+    }
+  } else {
+    var tce = this._capter;
+    for (var i=0,tcli=tce.length;i<tcli;i++){
+      if (tce[i]) {
+        tce[i].handleEvent(evt);
+      }
+    }
+    if (this.parentNode) {
+      this.parentNode.dispatchEvent(evt);
+    }
+  }
 };
+Document.prototype.dispatchEvent = function( /*Event*/ evt) {
+  this.docuemntElement.dispatch(evt);
+}
+//以下はDOMで設計されていないことに気をつける
+Document.prototype._fireEvent = function(type, bubble, cancel) { //eventの発火
+  var evt = this.createEvent();
+  evt.initEvent(type,bubble,cancel);
+  evt.target = this[window.event.srcElement.uniqueID];
+  var p = evt.target, ch = [], n = 0; //chはノードリスト
+  while (!p) {
+    ch[n] = p;
+    n++; p = p.parentNode;
+  }
+  for (var i=0,chi=ch.length*2-1;i<chi;i++) {
+    evt.currentTarget = ch[i];
+    if (i == ch.length-1) {
+      evt.eventPhase = 2;
+    } else if (i > ch.length-1) {
+      evt.eventPhase = 3;
+    }
+    ch[i].dipatchEvent(evt);
+  }
+  if (typeof this._updateAfterEvent != "undefined") {
+    this.updateAfterEvent();
+    this._arr = null;
+    this._arr = [];
+  }
+  evt = null;
+}
+Document.prototype._updateAfterEvent = function() { //event終了時に強制描画
+  var tarr = this._arr;
+  for (var i=0,tarri=tarr.length;i<tarr;++i) {
+    tarr[i].set(this.w,this.h);
+  }
+}
 
 function EventListener(cap,type,listener) {
   this._cap = cap; this._type = type; this._listener = listener;
@@ -122,10 +177,10 @@
 EventListener.prototype = {
 /*void*/ handleEvent : function( /*Event*/ evt) {
     var ph = evt.eventPhase, cap = this._cap;
-    if (ph === 1) {   //イベント位相が捕獲段階であることを示し
+    if (ph === Event.CAPTURING_PHASE) {   //イベント位相が捕獲段階であることを示し
       cap = cap ? false : true;    //このオブジェクト(EventListenr)が捕獲を指定するならば、リスナーを作動させる。指定しなければ、作動しない。
     }
-    if (!cap && evt.type == this._type) { //
+    if (!cap && evt.type === this._type) { //
       this._listener(evt);
     }
   }




Sie-announce メーリングリストの案内
Zurück zum Archiv-Index