[Sie-announce] SIEコード [2349] dispatchEventメソッドにバッファリング処理を追加

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 1月 31日 (月) 23:28:37 JST


Revision: 2349
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=2349
Author:   dhrname
Date:     2011-01-31 23:28:36 +0900 (Mon, 31 Jan 2011)

Log Message:
-----------
dispatchEventメソッドにバッファリング処理を追加

Modified Paths:
--------------
    branches/06x/069/org/w3c/dom/events.js

Modified: branches/06x/069/org/w3c/dom/events.js
===================================================================
--- branches/06x/069/org/w3c/dom/events.js	2011-01-31 14:27:27 UTC (rev 2348)
+++ branches/06x/069/org/w3c/dom/events.js	2011-01-31 14:28:36 UTC (rev 2349)
@@ -140,31 +140,44 @@
   if (!evt.type || evt.type === "") { //Eventの型が設定されていないとき
     throw new EventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR);
   }
+  if (!this.ownerDocument._isLoaded) {
+    if (evt.type === "SVGLoad") {
+      this.ownerDocument._isLoaded = 1;
+    }
+    if (!this.ownerDocument._limit_time_) {
+      this.ownerDocument._limit_time_ = evt.timeStamp;
+    } else {
+      var time = this.ownerDocument._limit_time_;
+      if ((evt.timeStamp - time) > 1000) {
+        if (this.ownerDocument.implementation._buffer_) {
+          /*1秒を超えたらバッファにため込んで後で使う*/
+          var tob = this.ownerDocument.implementation._buffer_;
+          tob[tob.length] = this;
+          tob[tob.length] = evt;
+        } else {
+          this.ownerDocument.implementation._buffer_ = [];
+        }
+        return true;
+      }
+    }
+  }
   evt.target = this;
   evt.eventPhase = 1;//Event.CAPTURING_PHASE
   var te = this;
   //このノードからドキュメントノードにいたるまでの、DOMツリーのリストを作成しておく
   var td = this.ownerDocument;
   td[/*Event.BUBBLING_PHASE*/ 3] = null;
-  if (!te.parentNode) {
-    /*もし、親要素がなければ、
-     *ドキュメントから直接、イベントを発火させるようにする
-     */
-    td[/*Event.CAPTURING_PHASE*/ 1] = te;
-    te[/*Event.BUBBLING_PHASE*/ 3] = td;
-  } else {
-    /*以下の処理では、documentElementのparentNodeが
-     *Documentノードではなく、nullになっていることを前提としている。
-     *したがって、documentElementのparentNodeがもし、Documentノードのオブジェクトならば、以下を書き換えるべきである
-     */
-    while (te.parentNode) {
-      te.parentNode[/*Event.CAPTURING_PHASE*/ 1] = te;
-      te[/*Event.BUBBLING_PHASE*/ 3] = te.parentNode;
-      te = te.parentNode;
-    }
-    td[/*Event.CAPTURING_PHASE*/ 1] = te;
-    te[/*Event.BUBBLING_PHASE*/ 3] = td;
+  /*以下の処理では、documentElementのparentNodeが
+   *Documentノードではなく、nullになっていることを前提としている。
+   *したがって、documentElementのparentNodeがもし、Documentノードのオブジェクトならば、以下を書き換えるべきである
+   */
+  while (te.parentNode) {
+    te.parentNode[/*Event.CAPTURING_PHASE*/ 1] = te;
+    te[/*Event.BUBBLING_PHASE*/ 3] = te.parentNode;
+    te = te.parentNode;
   }
+  td[/*Event.CAPTURING_PHASE*/ 1] = te;
+  te[/*Event.BUBBLING_PHASE*/ 3] = td;
   /*最初に捕獲フェーズでDOMツリーを下っていき、イベントのターゲットについたら、
    *そこで、浮上フェーズとして折り返すように、反復処理をおこなう。
    */




Sie-announce メーリングリストの案内
Back to archive index