[Sie-announce] SIEコード [1720] ownerElementプロパティの関係で、setNamedItemNSではなく、setAttributeNodeNSメソッドを上書きする

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 3月 10日 (水) 23:46:05 JST


Revision: 1720
          http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1720
Author:   dhrname
Date:     2010-03-10 23:46:05 +0900 (Wed, 10 Mar 2010)

Log Message:
-----------
ownerElementプロパティの関係で、setNamedItemNSではなく、setAttributeNodeNSメソッドを上書きする

Modified Paths:
--------------
    branches/ufltima/dom/events.js

Modified: branches/ufltima/dom/events.js
===================================================================
--- branches/ufltima/dom/events.js	2010-03-10 14:36:58 UTC (rev 1719)
+++ branches/ufltima/dom/events.js	2010-03-10 14:46:05 UTC (rev 1720)
@@ -277,36 +277,28 @@
 /*unsigned short*/  MutationEvent.ADDITION      = 2;
 /*unsigned short*/  MutationEvent.REMOVAL       = 3;
 
-/*MutationEventsの発動のために、setNamedItemNSを上書きする。ファイル統合やmakeの際は、
+/*MutationEventsの発動のために、setAttributeNodeNSを上書きする。ファイル統合やmakeの際は、
  *重複するのでコアモジュールのメソッドは削除する。モジュールテストを行うために、
  *このような形式をとることにする。なお、追加部分には区別を付けるために、前後にコメントを挿入する。
  */
-/*Node*/ NamedNodeMap.prototype.setNamedItemNS = function(/*Node*/ arg) {
-  var tgans = this.getNamedItemNS(arg.namespaceURI, arg.localName);
+/*Attr*/ Element.prototype.setAttributeNodeNS = function( /*Attr*/ newAttr){
+  if (newAttr.ownerDocument !== this.ownerDocument) { //所属ドキュメントが違う場合
+    throw (new DOMException(DOMException.WRONG_DOCUMENT_ERR));
+  }
+  var s = this.attributes.setNamedItemNS(newAttr);
+  newAttr.ownerElement = this;
   /*ここから*/
-  var evt = arg.ownerDocument.createEvent("MutationEvents");
-  /*ここまで追加*/
-  if (tgans) {                          //ノードがすでにあるならば、
-    var s = this[this._num];
-    this[this._num] = arg;
-    /*ここから*/
-    evt.initMutationEvent("DOMAttrModified", true, false, arg, null, arg.nodeName, arg.nodeName, MutationEvent.MODIFICATION);
-    arg.ownerElement.dispatchEvent(evt); //このとき、MutationEventsが発動
-    /*ここまで追加*/
-    return s;
+  var evt = this.ownerDocument.createEvent("MutationEvents");
+  if (!s) { //ノードがすでにあるならば
+    evt.initMutationEvent("DOMAttrModified", true, false, newAttr, null, newAttr.nodeName, newAttr.nodeName, MutationEvent.MODIFICATION);
+    this.dispatchEvent(evt); //このとき、MutationEventsが発動
   } else {
-    if ( arg.ownerElement !== void 0) { //ノードがもはや別の要素で使われている
-      throw (new DOMException(DOMException.INUSE_ATTRIBUTE_ERR));
-    }
-    this[this.length] = arg;            //新たに、argを項目として追加する
-    this.length +=  1;
-    /*ここから*/
-    evt.initMutationEvent("DOMAttrModified", true, false, arg, null, arg.nodeName, arg.nodeName, MutationEvent.ADDITION);
-    arg.ownerElement.dispatchEvent(evt);
-    /*ここまで追加*/
-    return null;
+    evt.initMutationEvent("DOMAttrModified", true, false, newAttr, null, newAttr.nodeName, newAttr.nodeName, MutationEvent.ADDITION);
+    this.dispatchEvent(evt);
   }
   evt = null;
+  /*ここまで追加*/
+  return s;
 };
 
 /*Node*/ Node.prototype.insertBefore = function( /*Node*/ n, ref) {




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