svnno****@sourc*****
svnno****@sourc*****
2010年 2月 3日 (水) 20:25:57 JST
Revision: 1628 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1628 Author: dhrname Date: 2010-02-03 20:25:57 +0900 (Wed, 03 Feb 2010) Log Message: ----------- NamedNodeMapのsetNamedItemNSメソッドを上書き追加 Modified Paths: -------------- branches/ufltima/dom/events.js Modified: branches/ufltima/dom/events.js =================================================================== --- branches/ufltima/dom/events.js 2010-02-03 11:24:37 UTC (rev 1627) +++ branches/ufltima/dom/events.js 2010-02-03 11:25:57 UTC (rev 1628) @@ -111,7 +111,7 @@ evt.target = this; var te = this, s = []; do { - s.unshift(te); + s[s.length] = te; te = te.parentNode; } while (te); if (this === evt.target) { @@ -232,19 +232,42 @@ /*unsigned short*/ this.attrChange; return this; }; -/*void*/ MutationEvent.prototype.initMutationEvent = function(/*string*/ typeArg, /*boolean*/ canBubbleArg, /*boolean*/ cancelableArg, /*Node*/ relatedNodeArg, /*string*/ prevValueArg, /*string*/ newValueArg, /*string*/ attrNameArg, /*unsigned short*/ attrChangeArg) { - this.initEvent( typeArg, canBubbleArg, cancelableArg); +MutationEvent.prototype = new Event(); +MutationEvent.constructor = Event; +/*void*/ MutationEvent.prototype.initMutationEvent = function(/*string*/ typeArg, /*boolean*/ canBubbleArg, + /*boolean*/ cancelableArg, /*Node*/ relatedNodeArg, /*string*/ prevValueArg, /*string*/ newValueArg, + /*string*/ attrNameArg, /*unsigned short*/ attrChangeArg) { + this.initEvent(typeArg, canBubbleArg, cancelableArg); this.relatedNode = relatedNodeArg; this.prevValue = prevValueArg; this.newValue = newValueArg; this.attrName = attrNameArg; - this.attrChange = attrChangeArg + this.attrChange = attrChangeArg; }; -MutationEvent.prototype = new Event(); -MutationEvent.constructor = Event; // attrChangeType /*unsigned short*/ MutationEvent.MODIFICATION = 1; /*unsigned short*/ MutationEvent.ADDITION = 2; /*unsigned short*/ MutationEvent.REMOVAL = 3; +/*MutationEventsの発動のために、setNamedItemNSを上書きする。ファイル統合やmakeの際は、重複するのでコアモジュールのメソッドは削除する*/ +/*Node*/ NamedNodeMap.prototype.setNamedItemNS = function(/*Node*/ arg) { + var tgans = this.getNamedItemNS(arg.namespaceURI, arg.localName); + var evt = this.ownerDocument.createEvent("MutationEvents"); + if (tgans) { //ノードがすでにあるならば、 + var s = this[this._num]; + this[this._num] = node; + evt.initMutationEvent("DOMAttrModified", true, true, node, null, node.nodeName, node.nodeName, MutationEvent.MODIFICATION); + node.ownerElement.dispatchEvent(evt); + return s; + } 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, true, node, null, node.nodeName, node.nodeName, MutationEvent.ADDITION); + node.ownerElement.dispatchEvent(evt); + return null; + } +}; // _EVENTS_IDL_