OSDN Git Service

fix XNode.text & X.Audio.Sprite & parse json of X.Net.XHR.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 08_XNodeSelector.js
index 2e065e8..793e166 100644 (file)
@@ -7,8 +7,8 @@
  * http://standards.mitsue.co.jp/resources/w3c/TR/css3-selectors/#nth-child-pseudo\r
  */\r
 \r
-X.Dom.Query = {\r
-       _PSEUDO    : {\r
+var\r
+       X_Node_Selector__PSEUDO    = {\r
                'nth-child'        : 9,\r
                'nth-last-child'   : 14,\r
                'nth-of-type'      : 11,\r
@@ -31,7 +31,7 @@ X.Dom.Query = {
                'first-of-type'    : 13\r
        },\r
        \r
-       _COMBINATOR : {\r
+       X_Node_Selector__COMBINATOR = {\r
                ''    : 0, // none\r
                ' '   : 1, // 子孫セレクタ\r
                '>'   : 2, // 子セレクタ\r
@@ -40,7 +40,7 @@ X.Dom.Query = {
                ','   : 5,\r
                '@'   : 6  // XML 用の拡張、属性ノードを辿る http://www.marguerite.jp/Nihongo/WWW/RefDOM/_Attr_interface.html\r
        },\r
-       _SELECTOR : {\r
+       X_Node_Selector__SELECTOR = {\r
                ''    : 0, // none\r
                tag   : 1,\r
                '#'   : 2,\r
@@ -52,24 +52,26 @@ X.Dom.Query = {
                root  : 8,\r
                link  : 9\r
        },\r
-       _OPERATORS : { '==' : 1, '!=': 2, '~=': 3, '^=': 4, '$=': 5, '*=': 6, '|=': 7 }, // '':0 は属性が存在するならtrue\r
+       X_Node_Selector__OPERATORS = { '==' : 1, '!=': 2, '~=': 3, '^=': 4, '$=': 5, '*=': 6, '|=': 7 }, // '':0 は属性が存在するならtrue\r
        // TODO { a : 1, A : 2, _ : 3,,, }\r
-       _ALPHABET  : 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789\\',\r
-       _NUMBER    : '+-0123456789'\r
-};\r
-                       \r
+       X_Node_Selector__ALPHABET  = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-0123456789\\',\r
+       X_Node_Selector__NUMBER    = '+-0123456789';\r
+\r
+// XMLWrapper のために今だけ外部に公開\r
+X_NodeSelector_parse = X_Node_Selector__parse;\r
+               \r
 /*\r
  * セレクタ文字列の解析、但し一挙に行わず、ひと塊づつ\r
  * 結合子 + 単体セレクタ( タグ,*,#,.,[],: )\r
  * ' ' 子孫セレクタ, '>' 直下,'+','~' の場合、tagName|* を返す\r
  * return [ 今回のパースで解析した終端位置, [ selector, ... ] ] error: return pointer\r
  */\r
-X.Dom.Query._parse = function( query, last ){\r
-       var COMBINATOR = X.Dom.Query._COMBINATOR,\r
-               SELECTOR   = X.Dom.Query._SELECTOR,\r
-               OPERATORS  = X.Dom.Query._OPERATORS,\r
-               ALPHABET   = X.Dom.Query._ALPHABET,\r
-               NUMBER     = X.Dom.Query._NUMBER,\r
+function X_Node_Selector__parse( query, last ){\r
+       var COMBINATOR = X_Node_Selector__COMBINATOR,\r
+               SELECTOR   = X_Node_Selector__SELECTOR,\r
+               OPERATORS  = X_Node_Selector__OPERATORS,\r
+               ALPHABET   = X_Node_Selector__ALPHABET,\r
+               NUMBER     = X_Node_Selector__NUMBER,\r
                result     = [],\r
                i          = -1,\r
                l          = query.length,\r
@@ -182,16 +184,22 @@ X.Dom.Query._parse = function( query, last ){
                                break;\r
                        default :\r
                };\r
+               \r
+               if( phase === 0xf ) return i;\r
+               \r
                //alert( chr + ' ' + phase + ' ' + selector + ' ' + name + ' ' + name1st )\r
                if( phase === 0xe ){\r
                        if( selector === 4 ){// :not\r
                                if( name === 'not' ){\r
-                                       if( not ) return i; // error\r
-                                       not      = true;\r
-                                       selector = 0;\r
-                                       phase    = 0x0;\r
-                                       name     = null;\r
-                                       continue;\r
+                                       if( not ){\r
+                                               return i; // error\r
+                                       } else {\r
+                                               not      = true;\r
+                                               selector = 0;\r
+                                               phase    = 0x0;\r
+                                               name     = null;                                        \r
+                                       };\r
+                                       //continue;\r
                                } else\r
                                if( name === 'lang' || name === 'contains' ){\r
                                        result = [ not ? 0 : combinator, selector, name, value ];\r
@@ -201,16 +209,16 @@ X.Dom.Query._parse = function( query, last ){
                                        result = [ not ? 0 : combinator, selector, name, a, b ];\r
                                        break;  \r
                                };\r
+                       } else {\r
+                               result =\r
+                                       combinator === 5 ?\r
+                                               5 :\r
+                                       selector === 5 ?\r
+                                               [ not ? 0 : combinator, selector, key, operator, value ] :\r
+                                               [ not ? 0 : combinator, selector, name.split( '\\' ).join( '' ) ];\r
+                               break;                          \r
                        };\r
-                       result =\r
-                               combinator === 5 ?\r
-                                       5 :\r
-                               selector === 5 ?\r
-                                       [ not ? 0 : combinator, selector, key, operator, value ] :\r
-                                       [ not ? 0 : combinator, selector, name.split( '\\' ).join( '' ) ];\r
-                       break;\r
-               } else\r
-               if( phase === 0xf ) return i;\r
+               };\r
 \r
                escape = chr === '\\' && !escape;\r
        };\r
@@ -220,16 +228,16 @@ X.Dom.Query._parse = function( query, last ){
 };\r
 \r
        // セレクター\r
-       X.Dom.find = X._shortcut = Node.prototype.find = X.Dom.NodeList.prototype.find = function( queryString ){\r
-               var HTML      = Node._html,\r
-                       scope     = this.constructor === X.Dom.NodeList && this.length ? this : [ this.constructor === Node ? this : Node._body ],\r
+       X.Doc.find = X_shortcutFunction = Node.prototype.find = X_NodeList.prototype.find = function ( queryString ){\r
+               var HTML      = X_Node_html,\r
+                       scope     = this.constructor === X_NodeList && this.length ? this : [ this.constructor === Node ? this : X_Node_body ],\r
                        parents   = scope, // 探索元の親要素 XNodeList の場合あり\r
                        // TODO { title : true,,, }\r
                        noLower   = 'title id name class for action archive background cite classid codebase data href longdesc profile src usemap',// + X_Dom_DTD_ATTR_VAL_IS_URI.join( ' ' ),\r
                        ARY_PUSH  = Array.prototype.push,\r
                        ret       = [], // 結果要素\r
-                       root      = X.Dom.Node.getRoot( scope[ 0 ] ),\r
-                       isXML     = !!X.Dom.Node.isXmlDocument( root ),\r
+                       root      = X_Node_getRoot( scope[ 0 ] ),\r
+                       isXML     = !!X_Node_isXmlDocument( root ),\r
                        isMulti   = 1 < scope.length,// 要素をマージする必要がある\r
                        isStart   = true,\r
                        _         = ' ',\r
@@ -259,7 +267,7 @@ X.Dom.Query._parse = function( query, last ){
                        \r
                        // 初期化処理\r
                        if( !parsed ){\r
-                               parsed = X.Dom.Query._parse( queryString );\r
+                               parsed = X_Node_Selector__parse( queryString );\r
                                \r
                                if( typeof parsed === 'number' ){\r
                                        // error\r
@@ -269,7 +277,7 @@ X.Dom.Query._parse = function( query, last ){
                                queryString = queryString.substr( parsed[ 0 ] );\r
                                parsed      = parsed[ 1 ];\r
                                \r
-                               //console.log( 'X.Dom.Query._parse ' + parsed );\r
+                               //console.log( 'X_Node_Selector__parse ' + parsed );\r
                                \r
                                if( parsed === 5 ){\r
                                        isMulti = true;\r
@@ -352,7 +360,7 @@ X.Dom.Query._parse = function( query, last ){
                                                //console.log( l + ' > ' + xnodes.length + ' tag:' + tagName );\r
                                                for( ; i < l; ++i ){\r
                                                        xnode = parents[ i ];\r
-                                                       xnode._xnodes && xnode._xnodes.length && X.Dom.Query._fetchElements( xnodes, xnode, isAll ? null : tagName );\r
+                                                       xnode._xnodes && xnode._xnodes.length && X_Node_Selector__fetchElements( xnodes, xnode, isAll ? null : tagName );\r
                                                };\r
                                                //console.log( l + ' >> ' + xnodes.length + ' tag:' + tagName );\r
                                        };\r
@@ -371,7 +379,7 @@ X.Dom.Query._parse = function( query, last ){
                                        filter = [ 'class', 3 /*'~='*/, name ]; break;\r
                                // :, 擬似クラス\r
                                case 4 :\r
-                                       if( !( filter = X.Dom.Query._filter[ name ] ) ){\r
+                                       if( !( filter = X_Node_Selector__filter[ name ] ) ){\r
                                                return [];\r
                                        };\r
                                        break;\r
@@ -427,7 +435,7 @@ X.Dom.Query._parse = function( query, last ){
                                        op  = filter[ 1 ];\r
                                        val = filter[ 2 ];\r
                                        \r
-                                       key = X_Node_Attr.renameForTag[ key ] || key;\r
+                                       key = X_Node_Attr_renameForTag[ key ] || key;\r
                                        \r
                                        // [class~='val']\r
                                        if( !isXML && key === 'class' && op === 3 ){\r
@@ -441,7 +449,7 @@ X.Dom.Query._parse = function( query, last ){
                                                // 諦めて、funcAttrを呼ぶ\r
                                                // flag_call  = ($.browser.safari && key === 'selected');\r
                                                // getAttributeを使わない\r
-                                               useName = X.UA.IE && key !== 'href' && key !== 'src';\r
+                                               useName = X_UA.IE && key !== 'href' && key !== 'src';\r
                                                toLower = !!val && !isXML && noLower.indexOf( key ) === -1; //!noLower.test(key);\r
                                                if( toLower ) val = val.toLowerCase();\r
                                                if( op === 3 ) val = _ + val + _;\r
@@ -455,7 +463,7 @@ X.Dom.Query._parse = function( query, last ){
                                                                //flag_call ?\r
                                                                //      funcAttr( elem, key ) :\r
                                                                //useName ?\r
-                                                               //      elem[ X_Node_Attr.renameForDOM[ key ] || key ] :\r
+                                                               //      elem[ X_Node_Attr_renameForDOM[ key ] || key ] :\r
                                                                //      elem.getAttribute( key, 2 );\r
                                                        flag = attr != null;// && ( !useName || attr !== '' );\r
                                                        if( flag && op ){\r
@@ -503,7 +511,7 @@ X.Dom.Query._parse = function( query, last ){
                if( isMulti ){\r
                        xnodes && xnodes.length && ARY_PUSH.apply( ret, xnodes );\r
                        l = ret.length;\r
-                       if( l < 2 ) return ret[ 0 ] || Node.none;\r
+                       if( l < 2 ) return ret[ 0 ] || X_Node_none;\r
                        \r
                        xnodes = [];\r
                        merge  = {};\r
@@ -515,14 +523,14 @@ X.Dom.Query._parse = function( query, last ){
                                        xnodes[ ++n ] = xnode;\r
                                };\r
                        };\r
-                       X.Dom.Query._sortElementOrder( ret = [], xnodes, hasRoot ? [ HTML ] : HTML._xnodes );\r
+                       X_Node_Selector__sortElementOrder( ret = [], xnodes, hasRoot ? [ HTML ] : HTML._xnodes );\r
                        xnodes = ret;\r
                };\r
 \r
-               return xnodes.length === 1 ? xnodes[ 0 ] : new X.Dom.NodeList( xnodes );\r
+               return xnodes.length === 1 ? xnodes[ 0 ] : new X_NodeList( xnodes );\r
        };\r
        \r
-       X.Dom.Query._sortElementOrder = function( newList, list, xnodes ){\r
+       function X_Node_Selector__sortElementOrder( newList, list, xnodes ){\r
                var l = xnodes.length,\r
                        i = 0,\r
                        j, child, _xnodes;\r
@@ -540,13 +548,13 @@ X.Dom.Query._parse = function( query, last ){
                                };\r
                                if( list.length === 0 ) return true;\r
                        };\r
-                       if( ( _xnodes = child._xnodes ) && X.Dom.Query._sortElementOrder( newList, list, _xnodes ) ){\r
+                       if( ( _xnodes = child._xnodes ) && X_Node_Selector__sortElementOrder( newList, list, _xnodes ) ){\r
                                return true;\r
                        };\r
                };\r
        };\r
        \r
-       X.Dom.Query._fetchElements = function( list, parent, tag ){\r
+       function X_Node_Selector__fetchElements( list, parent, tag ){\r
                var xnodes = parent._xnodes,\r
                        l      = xnodes.length,\r
                        i      = 0,\r
@@ -556,12 +564,12 @@ X.Dom.Query._parse = function( query, last ){
                        if( child._xnodeType === 1 ){\r
                                ( !tag || child._tag === tag ) && ( list[ list.length ] = child );\r
                                //console.log( parent._tag + ' > ' + child._tag + ' == ' + tag+ ' l:' + list.length );\r
-                               child._xnodes && child._xnodes.length && X.Dom.Query._fetchElements( list, child, tag );\r
+                               child._xnodes && child._xnodes.length && X_Node_Selector__fetchElements( list, child, tag );\r
                        };\r
                };\r
        };\r
 \r
-       X.Dom.Query._funcSelectorChild = function( type, flag_all, flags, xnodes ){\r
+       function X_Node_Selector__funcSelectorChild( type, flag_all, flags, xnodes ){\r
                var res      = [],\r
                        flag_not = flags.not,\r
                        i = 0, n = -1, xnode, node,\r
@@ -590,7 +598,7 @@ X.Dom.Query._parse = function( query, last ){
                };\r
                return res;\r
        };\r
-       X.Dom.Query._funcSelectorNth = function( pointer, sibling, flag_all, flags, xnodes, a, b ){\r
+       function X_Node_Selector__funcSelectorNth( pointer, sibling, flag_all, flags, xnodes, a, b ){\r
                var _data    = funcData,\r
                        res      = [],\r
                        checked  = {},\r
@@ -613,7 +621,7 @@ X.Dom.Query._parse = function( query, last ){
                };\r
                return res;\r
        };\r
-       X.Dom.Query._funcSelectorProp = function( prop, flag, flags, xnodes ){\r
+       function X_Node_Selector__funcSelectorProp( prop, flag, flags, xnodes ){\r
                var res = [],\r
                        flag_not = flag ? flags.not : !flags.not,\r
                        i = 0, n = -1, xnode;\r
@@ -623,7 +631,7 @@ X.Dom.Query._parse = function( query, last ){
                return res;\r
        };\r
 \r
-X.Dom.Query._filter = {\r
+var X_Node_Selector__filter = {\r
        root : function( elem ){\r
                return elem === ( elem.ownerDocument || elem.document ).documentElement;\r
        },\r
@@ -640,34 +648,34 @@ X.Dom.Query._filter = {
                }\r
        },\r
        'first-child' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( -1, true, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( -1, true, flags, xnodes ); }\r
        },\r
        'last-child' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( 1, true, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( 1, true, flags, xnodes ); }\r
        },\r
        'only-child' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( 0, true, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( 0, true, flags, xnodes ); }\r
        },\r
        'first-of-type' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( -1, false, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( -1, false, flags, xnodes ); }\r
        },\r
        'last-of-type' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( 1, false, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( 1, false, flags, xnodes ); }\r
        },\r
        'only-of-type' : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorChild( 0, false, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorChild( 0, false, flags, xnodes ); }\r
        },\r
        'nth-child' : {\r
-               m : function( flags, xnodes, a, b ){ return X.Dom.Query._funcSelectorNth( 'firstChild', 'nextNode', true, flags, xnodes, a, b ); }\r
+               m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'nextNode', true, flags, xnodes, a, b ); }\r
        },\r
        'nth-last-child' : {\r
-               m : function( flags, xnodes, a, b ){ return X.Dom.Query._funcSelectorNth( 'lastChild', 'prevNode', true, flags, xnodes, a, b ); }\r
+               m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prevNode', true, flags, xnodes, a, b ); }\r
        },\r
        'nth-of-type' : {\r
-               m : function( flags, xnodes, a, b ){ return X.Dom.Query._funcSelectorNth( 'firstChild', 'nextNode', false, flags, xnodes, a, b ); }\r
+               m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'firstChild', 'nextNode', false, flags, xnodes, a, b ); }\r
        },\r
        'nth-last-of-type' : {\r
-               m : function( flags, xnodes, a, b ){ return X.Dom.Query._funcSelectorNth( 'lastChild', 'prevNode', false, flags, xnodes, a, b ); }\r
+               m : function( flags, xnodes, a, b ){ return X_Node_Selector__funcSelectorNth( 'lastChild', 'prevNode', false, flags, xnodes, a, b ); }\r
        },\r
        empty : {\r
                m : function( flags, xnodes ){\r
@@ -723,13 +731,13 @@ X.Dom.Query._filter = {
                }\r
        },\r
        enabled : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorProp( 'disabled', false, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'disabled', false, flags, xnodes ); }\r
        },\r
        disabled : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorProp( 'disabled', true, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'disabled', true, flags, xnodes ); }\r
        },\r
        checked : {\r
-               m : function( flags, xnodes ){ return X.Dom.Query._funcSelectorProp( 'checked', true, flags, xnodes ); }\r
+               m : function( flags, xnodes ){ return X_Node_Selector__funcSelectorProp( 'checked', true, flags, xnodes ); }\r
        },\r
        contains : {\r
                m : function( flags, xnodes, arg ){\r
@@ -743,6 +751,3 @@ X.Dom.Query._filter = {
                }\r
        }\r
 };\r
-\r
-\r
-\r