OSDN Git Service

Fix the bug of X.NodeAnime.
[pettanr/clientJs.git] / 0.6.x / js / 02_dom / 22_XTreeBuilder.js
index 8a6c74a..5a205c7 100644 (file)
@@ -41,11 +41,12 @@ if( X_UA[ 'MacIE' ] ){
                                e.appendChild( node );\r
                                parent.removeChild( e );\r
                                node.parentNode = null;\r
-                               document.body.appendChild( node );\r
+                               X_elmBody.appendChild( node );\r
                                parent.replaceChild( document.createComment( '' ), node ); */\r
-                               document.body.appendChild( node );\r
+                               X_elmBody.appendChild( node );\r
                                return;\r
-                               if( parent.parentNode !== document.body ){\r
+                               /*\r
+                               if( parent.parentNode !== X_elmBody ){\r
                                        var clone = parent.cloneNode( true );\r
                                        for( var i = 0, l = parent.childNodes.length; i < l; ++i ){\r
                                                if( parent.childNodes[ i ] !== node ){\r
@@ -61,7 +62,7 @@ if( X_UA[ 'MacIE' ] ){
                                        };\r
                                } else {\r
                                        // ignore\r
-                               };\r
+                               }; */\r
 \r
                        };\r
                        //if( !node.ownerDocument ) alert( 'no owner' );\r
@@ -111,7 +112,7 @@ X_TEMP._onPreInit =
        X_UA_DOM.W3C ?\r
 (function(){\r
        var r    = X_Node_body,\r
-               body = r[ '_rawObject' ],\r
+               body = X_elmBody,\r
                copy, i, l, node, html,\r
                elmProgress;\r
        \r
@@ -123,8 +124,8 @@ X_TEMP._onPreInit =
        // textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
        //X_UA[ 'MacIE' ] && alert( body.innerHTML );\r
        // cleanup tree \r
-       function cleanUpTree( elm, skip, head ){\r
-               var nodes      = X_Object_cloneArray( elm.childNodes ),\r
+       function cleanUpTree( elm, skip ){\r
+               var nodes      = X_Array_copy( elm.childNodes ),\r
                        i          = 0,\r
                        l          = nodes.length,\r
                        node, tag, textNode, content;\r
@@ -134,8 +135,7 @@ X_TEMP._onPreInit =
                                case 1 :\r
                                        tag = node.tagName.toUpperCase();\r
                                        if( X_Dom_DTD_MOVE_TO_HEAD[ tag ] ){\r
-                                               head = head || document.getElementsByTagName( 'head' )[ 0 ];\r
-                                               head.appendChild( node );\r
+                                               X_elmHead.appendChild( node );\r
                                                continue;\r
                                        } else\r
                                        if( X_TEMP._isCleanupTarget( node ) ){\r
@@ -143,7 +143,7 @@ X_TEMP._onPreInit =
                                                continue;\r
                                        } else {\r
                                                // pre タグ以下はスペースの置換は行わない\r
-                                               node.childNodes && node.childNodes.length && cleanUpTree( 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 ] );\r
                                        };\r
                                        textNode = null;\r
                                        break;\r
@@ -197,8 +197,6 @@ X_TEMP._onPreInit =
        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_TEMP._body = body;\r
-       \r
        X_HTMLParser_asyncParse( html, true )\r
                [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent )\r
                [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent );\r
@@ -223,8 +221,6 @@ X_TEMP._onPreInit =
        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
        X_TEMP.elmProgress = document.all[ elmProgress ];\r
        \r
-       X_TEMP._body = body;\r
-       \r
        X_HTMLParser_asyncParse( html, true )\r
                [ 'listen' ]( X_EVENT_PROGRESS, X_TEMP._handleEvent )\r
                [ 'listenOnce' ]( X_EVENT_SUCCESS, X_TEMP._handleEvent );\r
@@ -246,17 +242,16 @@ X_TEMP._handleEvent = function( e ){
                        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
+                       X_TEMP.asyncCreateTree( X_Node_body, X_elmBody.childNodes || X_elmBody.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
+       var xnodes      = async ? 0           : X_Array_copy( parent[ '_xnodes' ] ),\r
                l           = async ? 0           : xnodes.length,\r
                stack       = async ? async.stack : [],\r
                done        = async ? async.done  : 0,\r
@@ -266,7 +261,7 @@ X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){
                        xnodes : xnodes,\r
                        l      : l,\r
                        i      : 0,\r
-                       elems  : X_Object_cloneArray( elems ),\r
+                       elems  : X_Array_copy( elems ),\r
                        j      : 0,\r
                        xtext  : null,\r
                        flag   : 0\r
@@ -297,7 +292,7 @@ X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){
                                        continue;\r
                                };\r
                                \r
-                               if( startTime + 16 <= X_Timer_now() ){\r
+                               if( startTime + X_Timer_INTERVAL_TIME <= X_Timer_now() ){\r
                                        current.i = i;\r
                                        if( async ){\r
                                                async.current = i < l && current;\r
@@ -316,7 +311,13 @@ X_TEMP.asyncCreateTree = function( parent, elems, elmProgress, async ){
        // complete\r
        console.log( 'xtree 作成完了' );\r
        X_ViewPort[ 'asyncDispatch' ]( X_EVENT_XTREE_READY );\r
-       elmProgress.parentNode ? elmProgress.parentNode.removeChild( elmProgress ) : ( elmProgress.outerHTML = '' );\r
+       \r
+       if( X_UA[ 'IE' ] < 6 ){\r
+               // IE5.01 でビルド時間が短い時に removeChild を通るとエラー!\r
+               elmProgress.outerHTML = '';\r
+       } else {\r
+               elmProgress.parentNode.removeChild( elmProgress );\r
+       };\r
        \r
        delete X_TEMP.asyncCreateTree;\r
        delete X_TEMP.bindElementToXnode;\r
@@ -392,12 +393,12 @@ X_TEMP.bindElementToXnode =
                                                        \r
                                                        return {\r
                                                                me     : xnode,\r
-                                                               xnodes : X_Object_cloneArray( xnode[ '_xnodes' ] ),\r
+                                                               xnodes : X_Array_copy( xnode[ '_xnodes' ] ),\r
                                                                xtext  : null,\r
                                                                flag   : 0,\r
                                                                i      : 0,\r
                                                                l      : xnode[ '_xnodes' ].length,\r
-                                                               elems  : X_Object_cloneArray( elm.childNodes ),\r
+                                                               elems  : X_Array_copy( elm.childNodes ),\r
                                                                j      : 0,\r
                                                                skipCleanup : skipCleanup || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ]\r
                                                        };\r
@@ -531,12 +532,12 @@ X_TEMP.bindElementToXnode =
                                        if( xnode[ '_xnodes' ] && xnode[ '_xnodes' ].length ){\r
                                                return {\r
                                                        me     : xnode,\r
-                                                       xnodes : X_Object_cloneArray( xnode[ '_xnodes' ] ),\r
+                                                       xnodes : X_Array_copy( xnode[ '_xnodes' ] ),\r
                                                        xtext  : null,\r
                                                        flag   : 0,\r
                                                        i      : 0,\r
                                                        l      : xnode[ '_xnodes' ].length,\r
-                                                       elems  : X_Object_cloneArray( elm.children ),\r
+                                                       elems  : X_Array_copy( elm.children ),\r
                                                        j      : 0,\r
                                                        skipCleanup : skipCleanup || X_Dom_DTD_SKIP_CLEANUP_TAGS[ tag ]\r
                                                };\r