OSDN Git Service

Version 0.6.158, fix X.Net.JSONP.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 22_XTreeBuilder.js
index 7daff08..8a6c74a 100644 (file)
@@ -22,26 +22,27 @@ if( X_UA[ 'MacIE' ] ){
                        //node.data = '';\r
                        l = X_TEMP._removalTextNodes.length;\r
                        if( parent ){\r
-                               //!l && X_Timer_once( 0, X_TEMP._timerRemove );\r
-                               //X_TEMP._removalTextNodes[ l ] = node;\r
-                               //var str=[],p;\r
-                               //for( p in node ){\r
-                               //      str[str.length] = p;\r
-                               //};\r
-                               //alert( str.join( ',' ) + parent.innerHTML );\r
-                               //node.nodeValue = '';\r
-                               //parent.replaceChild( document.createElement( 'span' ), node );\r
-                               //var e;\r
-                               //var f = document.createDocumentFragment();\r
-                               //f.appendChild( e = document.createElement( 'span' ) );\r
-                               //f.replaceChild( node, e );\r
-                               //e.appendChild( f );\r
-                               //parent.appendChild( e = document.createElement( 'span' ) );\r
-                               //e.appendChild( node );\r
-                               //parent.removeChild( e );\r
-                               //node.parentNode = null;\r
-                               //document.body.appendChild( node );\r
-                               //parent.replaceChild( document.createComment( '' ), node );\r
+                               /*\r
+                               !l && X_Timer_once( 0, X_TEMP._timerRemove );\r
+                               X_TEMP._removalTextNodes[ l ] = node;\r
+                               var str=[],p;\r
+                               for( p in node ){\r
+                                       str[str.length] = p;\r
+                               };\r
+                               alert( str.join( ',' ) + parent.innerHTML );\r
+                               node.nodeValue = '';\r
+                               parent.replaceChild( document.createElement( 'span' ), node );\r
+                               var e;\r
+                               var f = document.createDocumentFragment();\r
+                               f.appendChild( e = document.createElement( 'span' ) );\r
+                               f.replaceChild( node, e );\r
+                               e.appendChild( f );\r
+                               parent.appendChild( e = document.createElement( 'span' ) );\r
+                               e.appendChild( node );\r
+                               parent.removeChild( e );\r
+                               node.parentNode = null;\r
+                               document.body.appendChild( node );\r
+                               parent.replaceChild( document.createComment( '' ), node ); */\r
                                document.body.appendChild( node );\r
                                return;\r
                                if( parent.parentNode !== document.body ){\r
@@ -105,7 +106,8 @@ if( X_UA[ 'Opera7' ] ){
  * http://kojs.sukobuto.com/docs/visible-binding\r
  * IE6 には、「空の span エレメントに続く空白は無視される」という謎な癖があります。 \r
  */\r
-X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,\r
+\r
+X_TEMP._onPreInit =\r
        X_UA_DOM.W3C ?\r
 (function(){\r
        var r    = X_Node_body,\r
@@ -121,7 +123,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,
        // textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
        //X_UA[ 'MacIE' ] && alert( body.innerHTML );\r
        // cleanup tree \r
-       (function/*cleanUpTree*/( elm, skip, head ){\r
+       function cleanUpTree( elm, skip, head ){\r
                var nodes      = X_Object_cloneArray( elm.childNodes ),\r
                        i          = 0,\r
                        l          = nodes.length,\r
@@ -141,7 +143,7 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,
                                                continue;\r
                                        } else {\r
                                                // pre タグ以下はスペースの置換は行わない\r
-                                               node.childNodes && node.childNodes.length && /*cleanUpTree*/arguments.callee( node, skip || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ], head );\r
+                                               node.childNodes && node.childNodes.length && cleanUpTree( node, skip || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ], head );\r
                                        };\r
                                        textNode = null;\r
                                        break;\r
@@ -167,7 +169,9 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,
                                        //++count;\r
                        };\r
                };\r
-       })( X_UA[ 'MacIE' ] ? ( copy = body.cloneNode( true ) ) : body );\r
+       };\r
+\r
+       cleanUpTree( X_UA[ 'MacIE' ] ? ( copy = body.cloneNode( true ) ) : body );\r
 \r
        if( X_UA[ 'MacIE' ] ){\r
                document.write( html = copy.innerHTML );\r
@@ -189,28 +193,18 @@ X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT,
                };              \r
        };\r
        \r
-       body.appendChild( elmProgress = document.createElement( 'div' ) );\r
+       body.appendChild( X_TEMP.elmProgress = elmProgress = document.createElement( 'div' ) );\r
        elmProgress.style.cssText = 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;';\r
        elmProgress.setAttribute( 'style', 'position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;' );\r
        \r
-       X_HTMLParser_asyncParse( html, true )\r
-               [ 'listen' ]( X_EVENT_PROGRESS,\r
-                       function( e ){\r
-                               elmProgress.style.width = ( e[ 'percent' ] * 100 | 0 ) + '%';\r
-                       }\r
-               )\r
-               [ 'listenOnce' ]( X_EVENT_SUCCESS,\r
-                       function( e ){\r
-                               var xnodes = X_Node_body[ '_xnodes' ] = [], t;\r
-                               xnodes.push.apply( xnodes, e.xnodes );\r
-                               elmProgress.style.width = '100%';\r
+       X_TEMP._body = body;\r
        \r
-                               X_TEMP.asyncCreateTree( X_Node_body, body.childNodes, elmProgress );\r
-                       }\r
-               );\r
+       X_HTMLParser_asyncParse( html, true )\r
+               [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent )\r
+               [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent );\r
 \r
 }) :\r
-X_UA_DOM.IE4 ?\r
+// X_UA_DOM.IE4 ?\r
 (function(){\r
        var r    = X_Node_body,\r
                body = r[ '_rawObject' ],\r
@@ -218,7 +212,7 @@ X_UA_DOM.IE4 ?
                html;\r
 \r
        if( !X_TEMP.X_Dom_useBuilder ) return;\r
-\r
+       \r
        /*\r
         * http://support.microsoft.com/kb/812417/ja\r
         * PRB: outerHTML の HTML 要素のプロパティは、既定の属性は表示されません。\r
@@ -227,27 +221,39 @@ X_UA_DOM.IE4 ?
         */\r
        html = body.innerHTML;\r
        body.insertAdjacentHTML( 'BeforeEnd', '<div id="' + elmProgress + '" style="position:absolute;top:0;left:0;z-index:9999;width:0;height:0.5em;background:#00f;overflow:hidden;"></div>' );\r
-       elmProgress = document.all[ elmProgress ];\r
+       X_TEMP.elmProgress = document.all[ elmProgress ];\r
+       \r
+       X_TEMP._body = body;\r
        \r
        X_HTMLParser_asyncParse( html, true )\r
-               [ 'listen' ]( X_EVENT_PROGRESS,\r
-                       function( e ){\r
-                               elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
-                       }\r
-               )\r
-               [ 'listenOnce' ]( X_EVENT_SUCCESS,\r
-                       function( e ){\r
-                               var xnodes = X_Node_body[ '_xnodes' ] = [], t;\r
-                               xnodes.push.apply( xnodes, e.xnodes );\r
-                               elmProgress.style.width = '100%';\r
-                               \r
-                               X_TEMP.asyncCreateTree( X_Node_body, body.childNodes || body.children, elmProgress );\r
-                       }\r
-               );\r
-}) :\r
-(function(){\r
+               [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent )\r
+               [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent );\r
+});\r
+\r
+X_ViewPort[ 'listenOnce' ]( X_EVENT_PRE_INIT, X_TEMP._onPreInit );\r
+\r
+X_TEMP._handleEvent = function( e ){\r
+       var elmProgress = X_TEMP.elmProgress, xnodes;\r
        \r
-}) );\r
+       switch( e.type ){\r
+               case X_EVENT_PROGRESS :\r
+                       elmProgress.style.width = ( e.percent * 100 | 0 ) + '%';\r
+                       break;\r
+                       \r
+               case X_EVENT_SUCCESS :\r
+                       xnodes = X_Node_body[ '_xnodes' ] = [];\r
+                       \r
+                       xnodes.push.apply( xnodes, e.xnodes );\r
+                       elmProgress.style.width = '100%';\r
+                       \r
+                       X_TEMP.asyncCreateTree( X_Node_body, X_TEMP._body.childNodes || X_TEMP._body.children, elmProgress );\r
+                       \r
+                       delete X_TEMP._onPreInit;\r
+                       delete X_TEMP._body;\r
+                       delete X_TEMP.elmProgress;\r
+                       break;\r
+       };\r
+};\r
 \r
 X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){\r
        var xnodes      = async ? 0           : X_Object_cloneArray( parent[ '_xnodes' ] ),\r
@@ -311,6 +317,7 @@ X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){
        console.log( 'xtree 作成完了' );\r
        X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY );\r
        elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' );\r
+       \r
        delete X_TEMP.asyncCreateTree;\r
        delete X_TEMP.bindElementToXnode;\r
        delete X_TEMP.X_Dom_useBuilder;\r