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) {