X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F05_util%2F04_XXML.js;h=38fcaf3cfbe284c911f9ccaae174920e378d79da;hb=9e04e2a1221a92960a74e550bc3fd809caf3cd1c;hp=6ef1908f5a0415d63dc40119ad6466f1b9600753;hpb=3d352d8bf476ab57cc333e8d02d0e6ea5efa69b7;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/05_util/04_XXML.js b/0.6.x/js/05_util/04_XXML.js index 6ef1908..38fcaf3 100644 --- a/0.6.x/js/05_util/04_XXML.js +++ b/0.6.x/js/05_util/04_XXML.js @@ -1,11 +1,13 @@ /* * XMLWrapper_find 周りの オリジナルコードに関する情報 * Original code by pettanR team - * - http://sourceforge.jp/projects/pettanr/scm/git/clientJs/blobs/master/0.6.x/js/01_dom/18_XDomQuery.js + * - https://osdn.jp/projects/pettanr/scm/git/clientJs/blobs/master/0.6.x/js/02_dom/08_XNodeSelector.js * and * Original code by ofk ( kQuery, ksk ) * - http://d.hatena.ne.jp/ofk/comment/20090106/1231258010 * - http://d.hatena.ne.jp/ofk/20090111/1231668170 + * + * TODO X.Class で作り、kill を強要する */ X[ 'XML' ] = XMLWrapper; @@ -21,11 +23,19 @@ function XMLWrapper( xml ){ this._rawXML = xml; }; -XMLWrapper.prototype.length = 1; -XMLWrapper.prototype[ 'has' ] = XMLWrapper_has; -XMLWrapper.prototype[ 'get' ] = XMLWrapper_get; -XMLWrapper.prototype[ 'val' ] = XMLWrapper_val; -XMLWrapper.prototype[ 'find' ] = XMLWrapper_find; +XMLWrapper.prototype.length = 1; +XMLWrapper.prototype[ 'parent' ] = XMLWrapper_parent; +XMLWrapper.prototype[ 'has' ] = XMLWrapper_has; +XMLWrapper.prototype[ 'get' ] = XMLWrapper_get; +XMLWrapper.prototype[ 'val' ] = XMLWrapper_val; +XMLWrapper.prototype[ 'find' ] = XMLWrapper_find; + +function XMLWrapper_parent(){ + if( this.length === 1 ) return this._rawXML && this._rawXML.parentNode ? new XMLWrapper( this._rawXML.parentNode ) : null; + if( this.length === 0 ) return null; + + return this[ 0 ].parentNode ? ( new XMLWrapper( this[ 0 ].parentNode ) ) : null; +}; function XMLWrapper_has( queryString ){ return !!this.find( queryString ).length; @@ -43,7 +53,7 @@ function XMLWrapper_get( index ){ }; function XMLWrapper_val( queryString, type ){ - var attr_textContent = X_UA[ 'IE' ] < 9 || X_UA[ 'Opera' ] ? 'innerText' : X_UA[ 'IE9' ] ? 'text' : 'textContent', + var //attr_textContent = X_UA[ 'IE' ] < 9 || X_UA[ 'Opera' ] ? 'innerText' : X_UA[ 'IE9' ] ? 'text' : 'textContent', wrapper, xml, v; switch( queryString ){ @@ -53,7 +63,7 @@ function XMLWrapper_val( queryString, type ){ case 'string' : case undefined : type = queryString; - queryString = undefined; + queryString = 0; }; wrapper = queryString ? this.find( queryString ) : this; @@ -79,9 +89,9 @@ function XMLWrapper_val( queryString, type ){ case 'number' : return parseFloat( v ); case 'int' : - return parseInt( v ); + return parseFloat( v ) | 0; case 'boolean' : - return v && v !== '0' && v !== 'false' && v !== 'null' && v !== 'undefined' && v !== 'NaN'; + return !!X_String_parse( v ); //case 'string' : //default : }; @@ -315,7 +325,7 @@ function XMLWrapper_val( queryString, type ){ for( i = 0, n = -1, l = xmlList.length; i < l; ++i ){ xml = xmlList[ i ]; - attr = elem.getAttribute( key, 2 ); + attr = xml.getAttribute( key, 2 ); flag = attr != null;// && ( !useName || attr !== '' ); if( flag && op ){ //if( toLower ) attr = attr.toLowerCase(); @@ -467,7 +477,7 @@ function XMLWrapper_val( queryString, type ){ for( ; xnode = xmlList[ i ]; ++i ){ uid = xnode._uid; tmp = checked[ uid ]; - if( tmp === void 0 ){ + if( tmp === undefined ){ for( c = 0, node = xnode.parentNode[ pointer ], tagName = flag_all || xnode.tagName; node; node = node[ sibling ] ){ if( node.nodeType === 1 && ( flag_all || tagName === node.tagName ) ){ ++c; @@ -480,6 +490,7 @@ function XMLWrapper_val( queryString, type ){ }; return res; }; + /* function XMLWrapper_funcSelectorProp( prop, flag, flags, xmlList ){ var res = [], flag_not = flag ? flags.not : !flags.not, @@ -488,7 +499,7 @@ function XMLWrapper_val( queryString, type ){ if( xnode.getAttributeNode( prop ) ^ flag_not ) res[ ++n ] = xnode; }; return res; - }; + }; */ var XMLWrapper_filter = { 'first-child' : { @@ -521,7 +532,7 @@ var XMLWrapper_filter = { 'nth-last-of-type' : { m : function( flags, xmlList, a, b ){ return XMLWrapper_funcSelectorNth( 'lastChild', 'previousSibling', false, flags, xmlList, a, b ); } }, - empty : { + 'empty' : { m : function( flags, xmlList ){ var res = [], flag_not = flags.not, @@ -529,7 +540,7 @@ var XMLWrapper_filter = { for( ; xnode = xmlList[i]; ++i ){ tmp = true; for( node = xnode.firstChild; node; node = node.nextSibling ){ - if( node.nodeType === 1 || ( node.nodeType === 3 && node._text ) ){ + if( node.nodeType === 1 || ( node.nodeType === 3 && node.nodeValue ) ){ tmp = false; break; }; @@ -539,19 +550,18 @@ var XMLWrapper_filter = { return res; } }, - contains : { + 'contains' : { m : function( flags, xmlList, arg ){ var res = [], flag_not = flags.not, - i = 0, n = -1, xnode, text = '', - // kquery - attr_textContent = X_UA[ 'IE' ] < 9 || X_UA[ 'Opera' ] ? 'innerText' : X_UA[ 'IE9' ] ? 'text' : 'textContent'; + i = 0, n = -1, xnode, text = ''; + for( ; xnode = xmlList[ i ]; ++i ){ switch( xnode.nodeType ){ case 1 : - text = xml.nodeType === 1 ? xml.innerText || xml.text || xml.textContent : xml.nodeValue;// xnode[ attr_textContent ]; + text = xml.nodeType === 1 ? xml.innerText || xml.text || xml.textContent : xml.nodeValue; break; - case 2 : + //case 2 : case 3 : text = xnode.nodeValue; break; @@ -574,9 +584,10 @@ function XMLListWrapper( xmlList ){ var XMLListWrapper_0 = new XMLListWrapper(); -XMLListWrapper.prototype.length = 0; -XMLListWrapper.prototype._wraps = null; -XMLListWrapper.prototype[ 'has' ] = XMLWrapper_has; -XMLListWrapper.prototype[ 'get' ] = XMLWrapper_get; -XMLListWrapper.prototype[ 'val' ] = XMLWrapper_val; -XMLListWrapper.prototype[ 'find' ] = XMLWrapper_find; +XMLListWrapper.prototype.length = 0; +XMLListWrapper.prototype._wraps = null; +XMLListWrapper.prototype[ 'parent' ] = XMLWrapper_parent; +XMLListWrapper.prototype[ 'has' ] = XMLWrapper_has; +XMLListWrapper.prototype[ 'get' ] = XMLWrapper_get; +XMLListWrapper.prototype[ 'val' ] = XMLWrapper_val; +XMLListWrapper.prototype[ 'find' ] = XMLWrapper_find;