OSDN Git Service

Version 0.6.47, fix for IE5 & Opera7.x.
authoritozyun <itozyun@user.sourceforge.jp>
Wed, 11 Jun 2014 11:14:35 +0000 (20:14 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Wed, 11 Jun 2014 11:14:35 +0000 (20:14 +0900)
0.6.x/js/core/00_X.js
0.6.x/js/core/01_XUa.js
0.6.x/js/core/05_XTimer.js
0.6.x/js/dom/10_XDom.js
0.6.x/js/dom/11_XDomNode.js
0.6.x/js/dom/12_XDomEvent.js
0.6.x/js/dom/14_XDomAttr.js
0.6.x/js/dom/15_XDomStyle.js
0.6.x/js/dom/18_XDomQuery.js
0.6.x/js/dom/22_XDomBuilder.js

index 72023b5..d29d88c 100644 (file)
@@ -19,7 +19,8 @@ X.inHead = (function( s ){
        if( !s.length ) return false; // Safari1.3 312.8 でerror\r
        s = s[ s.length - 1 ];\r
        // Dom0 || Dom1\r
-       return ( s.parentElement || s.parentNode ).tagName.toLowerCase() === 'head';\r
+       s = s.parentElement || s.parentNode || s;// s is for opera7.11\r
+       return s.tagName.toLowerCase() === 'head';// opera7.23 s.tagName is 'HTML'\r
 })( document.scripts || document.getElementsByTagName && document.getElementsByTagName( 'script' ) || document.all && document.all.tags( 'script' ) );\r
 \r
 X.parse = function( v ){\r
@@ -34,7 +35,7 @@ X.parse = function( v ){
                        case 'true'      : return true;\r
                        case 'false'     : return false;\r
                        case 'Infinity'  : return Number.POSITIVE_INFINITY;\r
-                       case '-Infinity' : return Number.NEGATIVE_INFINITY;     \r
+                       case '-Infinity' : return Number.NEGATIVE_INFINITY;\r
                        case 'undefined' : return;\r
                };\r
                _v = v.split( ' ' ).join( '' );\r
index 4d7e44b..3c374ae 100644 (file)
@@ -15,6 +15,7 @@ X.UA = (function( n, undefined ){
                        i !== -1 ? parseFloat( dua.substr( i + 6 ) ) : 0,\r
                        j !== -1 ? parseFloat( dua.substr( j + 8 ) ) : 0,\r
                        tv );\r
+               acme.Opera7 = acme.Opera < 8;\r
                acme.OperaMini   = 0 < dua.indexOf("Opera Mini");\r
                acme.OperaMobile = 0 < dua.indexOf("Opera Mobi");\r
                acme.OperaTablet = 0 < dua.indexOf("Opera Tablet");\r
@@ -23,11 +24,11 @@ X.UA = (function( n, undefined ){
        \r
        // Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\r
        if( document.all ){\r
-               acme.ActiveX = !!window[ 'ActiveXObject' ];\r
-               acme.IE = parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
-               acme.MacIE = !!dav.indexOf( 'Mac_PowerPC' ) || !!dav.indexOf( 'Mac_PPC' ) || !!dav.indexOf( 'Mac_68K' );\r
+               acme.ActiveX  = !!window[ 'ActiveXObject' ];\r
+               acme.IE       = document.documentMode || parseFloat(dav.split("MSIE ")[1]) || parseFloat(dua.split("rv:")[1]) || 0;\r
+               acme.MacIE    = dav.indexOf( 'Mac_PowerPC' ) !== -1 || dav.indexOf( 'Mac_PPC' ) !== -1 || dav.indexOf( 'Mac_68K' ) !== -1;\r
                acme.IEMobile = dua.toLowerCase().indexOf( 'iemobile' ) !== -1 ||\r
-                                               dua.toLowerCase().indexOf( 'windows phone' ) !== -1;            \r
+                                               dua.toLowerCase().indexOf( 'windows phone' ) !== -1;\r
                return acme;\r
        };\r
        \r
@@ -94,18 +95,6 @@ X.UA = (function( n, undefined ){
        \r
        return acme;\r
 })( navigator );\r
-/* ie5 でerror...\r
-X.inObject = X.UA.IE && X.UA.IE < 5 ? // TODO JScript で判定\r
-       (function( name, obj ){\r
-               var p;\r
-               if( obj[ name ] ) return true;\r
-               name += ''; // 数値も許可\r
-               for( p in obj ){\r
-                       if( p === name ) return true;\r
-               };\r
-               return false;\r
-       }) :\r
-       new Function( 'a,b', 'return a in b' ); \r
 \r
 // Safari 3.1 未満は開発コンソールがない!\r
 // http://shimax.cocolog-nifty.com/search/2006/09/safarijavascrip_c54d.html\r
@@ -121,4 +110,16 @@ if( X.UA.Safari && X.UA.WebKit < 525.13 ){
 if( X.UA.IE && X.UA.IE < 7 ){ // error @ NN7.2\r
        // bonus: hotfix for IE6 SP1 (bug KB823727)\r
        document.execCommand && document.execCommand( 'BackgroundImageCache', false, true );\r
-};*/\r
+};\r
+\r
+X.inObject = X.UA.IE && X.UA.IE < 5.5 ? // TODO JScript で判定\r
+       (function( name, obj ){\r
+               var p;\r
+               if( obj[ name ] ) return true;\r
+               name += ''; // 数値も許可\r
+               for( p in obj ){\r
+                       if( p === name ) return true;\r
+               };\r
+               return false;\r
+       }) :\r
+       new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror\r
index 1dc1673..19e9ee0 100644 (file)
@@ -25,6 +25,7 @@ X.Timer = {
        timerId        : 0,\r
        endTime        : 0, // iOS\r
        next           : 0,\r
+       busy           : false, // for Opera7\r
 \r
        REQUEST_FRAME_LIST : [],\r
        requestID : 0,\r
@@ -34,6 +35,13 @@ X.Timer = {
                        list = X.Timer.TICKET_LIST,\r
                        i    = list.length,\r
                        q, f, c;\r
+               \r
+               if( X.Timer.busy ){\r
+                       alert( 'busy!' );\r
+               };\r
+               \r
+               X.Timer.busy = true;\r
+               \r
            for( ; i; ){\r
                q = list[ --i ];\r
                        if( 0 < ( q.l -= next ) ) continue;\r
@@ -49,7 +57,8 @@ X.Timer = {
                        q.l = q.t;\r
            };\r
            X.Timer.timerId = 0;\r
-           X.Timer._update();\r
+           X.Timer.busy = false;\r
+           X.Timer._update();  \r
        },\r
        _update : function(){\r
                var list = X.Timer.TICKET_LIST,\r
@@ -88,7 +97,7 @@ X.Timer = {
        add : function( time, opt_count, args1, args2, args3 ){\r
                var list = X.Timer.TICKET_LIST;\r
                time = time < X.Timer.INTERVAL_TIME ? 1 : ( time / X.Timer.INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
-\r
+               \r
                if( typeof opt_count !== 'number' ){\r
                        args3 = args2;\r
                        args2 = args1;\r
@@ -103,7 +112,7 @@ X.Timer = {
                        f : X.Callback.create( args1, args2, args3 ),\r
                        u : ++X.Timer.uid\r
                };\r
-           X.Timer._update();\r
+           !X.Timer.busy && X.Timer._update();\r
            return X.Timer.uid;\r
        },\r
        once : function( time, args1, args2, args3 ){\r
@@ -121,7 +130,7 @@ X.Timer = {
                                list.splice( i, 1 );\r
                                f = q.f;\r
                                f.kill && f.kill();\r
-                               ( /* q[ INDEX_COUNT ] <= next  || */ l === 1 ) && X.Timer._update();\r
+                               !X.Timer.busy && ( /* q[ INDEX_COUNT ] <= next  || */ l === 1 ) && X.Timer._update();\r
                                //q.length = 0;\r
                                break;\r
                        };\r
index 7ed9121..e39e4eb 100644 (file)
@@ -91,7 +91,7 @@ X.Dom = X.Class._override(
                        \r
                        X.Dom.listenOnce( X.Dom.Event.DOM_BUILDER_COMPLETE, function(){\r
                                X.Dom.readyState = X.Dom.Event.DOM_INIT;\r
-                               \r
+                               //X.UA.Opera7 && alert( 'bc' );\r
                                Node.root.appendAt( 0,\r
                                        Node._systemNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ),\r
                                        Node._fontSizeNode = Node.create( 'div', { 'class' : 'hidden-system-node' } ).cssText( 'line-height:1;height:1em;' ).text( 'X' )\r
@@ -132,11 +132,11 @@ X.Dom = X.Class._override(
                                Node._document.listen( 'webkitvisibilitychange', X.Dom );\r
                        } else\r
                        if( X.UA.iOS && window[ 'onpageshow' ] !== undefined ) {\r
-                               Node._window.listen('pageshow', X.Dom );\r
-                               Node._window.listen('pagehide', X.Dom );\r
+                               Node._window.listen( 'pageshow', X.Dom )\r
+                                                       .listen( 'pagehide', X.Dom );   \r
                        } else {\r
-                               Node._window.listen('focus', X.Dom );\r
-                               Node._window.listen('blur', X.Dom );\r
+                               Node._window.listen( 'focus', X.Dom )\r
+                                                       .listen( 'blur', X.Dom );\r
                        };\r
 \r
                        return X.Callback.UN_LISTEN;\r
index 86c75db..bff2627 100644 (file)
@@ -33,7 +33,7 @@ X.Dom._strictElmCreation = X.UA.IE && X.UA.IE < 9;// && !X.UA.MacIE;
 /*\r
  * Node( rawElement | rawTextnode | htmlString | textString )\r
  */\r
-//;(function( window, document, undeifned ){\r
+\r
 X.Dom.Node = X.EventDispatcher.inherits(\r
        'XDomNode',\r
        X.Class.POOL_OBJECT,\r
@@ -57,7 +57,7 @@ X.Dom.Node = X.EventDispatcher.inherits(
 \r
                _attrs     : null, // X.Dom.Attr\r
                _newAttrs  : null,\r
-               _attrText  : ' ', // X.Dom.Attr.objToAttrText が必要な場合は false が入っている\r
+               _attrText  : '', // X.Dom.Attr.objToAttrText が必要な場合は false が入っている\r
                \r
                _css       : null, // X.Dom.Style\r
                _cssText   : null,\r
@@ -167,7 +167,7 @@ Node.IS_WINDOW      = 8;
 Node.IS_DOCUMENT    = 9;\r
 Node.IS_IMAGE       = 10;\r
 \r
-Node._useDocumentFragment = document.createDocumentFragment && ( !X.UA.IE || 6 <= X.UA.IE ) && document.createDocumentFragment();\r
+Node._useDocumentFragment = document.createDocumentFragment && ( !X.UA.IE || 5.5 <= X.UA.IE ) && document.createDocumentFragment();\r
 \r
 Node._getType = function( v ){\r
        if( v === '' ) return Node.IS_STRING;\r
@@ -753,7 +753,7 @@ Node.prototype.html = function( html ){
                '<', this._tag,\r
                this._id ? ' id="' + this._id + q : _,\r
                this._className ? ' class="' + this._className + q : _,\r
-               this._attrText || ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ),\r
+               this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
                this._cssText ? ' style="' + this._cssText + q : _,\r
        '>' ];\r
        \r
@@ -843,7 +843,7 @@ Node.prototype._startUpdate = function(){
        \r
        tmp = this._rawNode.style.visibility;\r
        //this._rawNode.style.visibility = 'hidden';\r
-       \r
+\r
        if( i = removal.length ){\r
                for( ; i; ){\r
                        xnode = removal[ --i ];\r
@@ -852,7 +852,7 @@ Node.prototype._startUpdate = function(){
                };\r
                removal.length = 0;\r
        };\r
-       \r
+\r
        Node._html._dirty ? Node._html._commitUpdate() : this._commitUpdate();\r
        \r
        X.Dom._listeners && X.Dom._listeners[ X.Dom.Event.AFTER_UPDATE ] && X.Dom.asyncDispatch( 0, { type : X.Dom.Event.AFTER_UPDATE } );\r
@@ -963,30 +963,22 @@ Node.prototype._updateRawNode =
                        };\r
                        // id\r
                        if( this._dirty & X.Dom.Dirty.ID ){\r
-                               //if( X.UA.IE && X.UA.IE < 7 ){\r
-                                       this._id ? ( elm.id = this._id ) : ( elm.id && elm.removeAttribute( 'id' ) );           \r
-                               //} else {\r
-                               //      this._id ? ( elm.id = this._id ) : elm.removeAttribute( 'id' );                                 \r
-                               //};\r
+                               this._id ? ( elm.id = this._id ) : ( elm.id && elm.removeAttribute( 'id' ) );           \r
                        };\r
                        // className\r
                        if( this._dirty & X.Dom.Dirty.CLASSNAME ){\r
-                               //if( X.UA.IE && X.UA.IE < 8 ){\r
-                                       //elm.className = this._className;\r
+                               this._className ? ( elm.className = this._className ) : ( elm.className && elm.removeAttribute( 'class' ) );                                    \r
 \r
-                               //} else {\r
-                                       this._className ? ( elm.className = this._className ) : ( elm.className && elm.removeAttribute( 'class' ) );                                    \r
-                               //};\r
-                                       // ie5 only\r
-                                       if( X.Dom.State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
-                                               this._actualRemove();\r
-                                               this._state |= X.Dom.State.IE5_DISPLAY_NONE_FIX;\r
-                                               return;\r
-                                       };\r
+                               // ie5 only\r
+                               if( X.Dom.State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
+                                       this._actualRemove();\r
+                                       this._state |= X.Dom.State.IE5_DISPLAY_NONE_FIX;\r
+                                       return;\r
+                               };\r
                        };\r
                        // style\r
                        if( this._dirty & X.Dom.Dirty.CSS ){\r
-                               if( this._cssText || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
+                               if( this._cssText !== null || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
                                        X.UA.Opera && X.UA.Opera < 9 ?\r
                                                elm.setAttribute( 'style', this._cssText ) : // opera8用\r
                                                ( elm.style.cssText = this._cssText );\r
@@ -1047,7 +1039,7 @@ Node.prototype._updateRawNode =
                        };\r
                        // style\r
                        if( this._dirty & X.Dom.Dirty.CSS ){\r
-                               if( this._cssText || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
+                               if( this._cssText !== null || ( this._cssText = X.Dom.Style.objToCssText( this._css ) ) ){\r
                                        elm.style.cssText = this._cssText;\r
                                } else {\r
                                        elm.style.cssText = '';\r
@@ -1115,7 +1107,7 @@ Node.prototype._actualCreate =
                                                        ' UID="', this._uid, '"',\r
                                                        this._id ? ' id="' + this._id + '"' : '',\r
                                                        this._className ? ' class="' + this._className + '"' : '',\r
-                                                       this._attrText || ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ),\r
+                                                       this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
                                                        this._cssText ? ' style="' + this._cssText + '"' : '',\r
                                                '>' ].join( '' ) ) :\r
                                        document.createElement( this._tag );\r
@@ -1149,7 +1141,7 @@ Node.prototype._actualCreate =
                        html = [\r
                                '<', this._tag, ' id=', ( this._id || ( 'ie4uid' + uid ) ), ' UID="', uid, '"',\r
                                this._className ? ' class="' + this._className + '"' : '',\r
-                               this._attrText || ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ),\r
+                               this._attrText === false ? ( this._attrText = X.Dom.Attr.objToAttrText( this._attrs ) ) : this._attrText,\r
                                this._cssText ? ' style="' + this._cssText + '"' : '',\r
                        '>' ];\r
                        \r
@@ -1179,7 +1171,9 @@ Node.prototype._actualCreate =
 Node.prototype._afterActualCreate =\r
        X.Dom.DOM_W3C ? (function(){\r
                var elm = this._rawNode, xnodes, l, attrs, k, i;\r
-               \r
+               if( !this.parent ){\r
+                       alert( 'afterActualCreate : ' + this._tag );\r
+               };\r
                this._root  = this.parent._root;\r
                \r
                if( this._xnodeType === 3 ){\r
@@ -1196,10 +1190,6 @@ Node.prototype._afterActualCreate =
                                        elm.appendChild( xnodes[ i ]._actualCreate( true ) );\r
                                };\r
                        };\r
-                       //if( X.UA.IE && X.UA.IE < 5.5 ){\r
-                       //      this._dirty = X.Dom.Dirty.CSS | X.Dom.Dirty.IE_FILTER;\r
-                       //      this._updateRawNode( elm );\r
-                       //} else\r
                        if( !X.Dom._strictElmCreation ){\r
                                elm.UID = this._uid;\r
                                this._newAttrs = this._attrs;\r
@@ -1261,7 +1251,11 @@ Node.prototype._actualRemove =
                        if( !elm ) return;\r
                        this._xnodeType === 1 && this._migrateEvent();// イベントの退避\r
                        // elm.parentNode.tagName for ie7\r
-                       !isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
+                       //if( !X.UA.Opera7 ){\r
+                               !isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
+                       //} else {\r
+                       //      !isChild && elm.parentNode && X.Dom._o7_remove( elm );\r
+                       //};\r
                }) :\r
        X.Dom.DOM_IE4 ?\r
                ( function( isChild ){\r
@@ -1286,10 +1280,4 @@ Node.prototype._actualRemove =
                        delete this._rawNode;\r
                }) :\r
                (function(){});\r
-       \r
-       \r
-//})( window, document );\r
-\r
-\r
-\r
 \r
index b29f3f8..10d79c3 100644 (file)
@@ -217,6 +217,17 @@ X.Dom.Node.prototype._addEvent =
                                raw.addEventListener( type, this._handleEvent, false );\r
                        };\r
                }) :\r
+       X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
+               (function( type ){\r
+                       var raw = this._rawNode;\r
+                       if( !raw ) return;\r
+                       this._handleEvent = this._handleEvent || X.Callback.create( this );\r
+                       if( raw === window ){\r
+                               raw[ 'on' + type ] = this._handleEvent;\r
+                       } else {\r
+                               raw.addEventListener( type, this._handleEvent, false );\r
+                       };\r
+               }) :\r
        X.Dom.EVENT_W3C ?\r
                (function( type ){\r
                        this._rawNode && this._rawNode.addEventListener( X.Dom.Event.Rename[ type ] || type, this, false );\r
@@ -261,6 +272,21 @@ X.Dom.Node.prototype._removeEvent =
                                delete this._handleEvent;\r
                        };\r
                }) :\r
+       X.Dom.EVENT_W3C && X.UA.Opera7 ?\r
+               (function( type ){\r
+                       var raw = this._rawNode;\r
+                       if( !raw ) return;\r
+                       \r
+                       if( raw === window ){\r
+                               raw[ 'on' + type ] = null;\r
+                       } else {\r
+                               raw.removeEventListener( type, this._handleEvent, false );\r
+                       };\r
+                       if( !this._listeners ){\r
+                               X.Callback._correct( this._handleEvent );\r
+                               delete this._handleEvent;\r
+                       };\r
+               }) :\r
        X.Dom.EVENT_W3C ?\r
                (function( type ){\r
                        var elm = this._rawNode;\r
@@ -379,11 +405,9 @@ if( X.UA.WebKit || ( X.UA.Safari && X.UA.Safari < 3 ) ){ // sniff
                if( 'loaded|complete'.indexOf( document.readyState ) !== -1 ) return X.Dom._init();\r
        });\r
 };\r
-       /* for other browsers */\r
-       Node._window.listenOnce( 'load', X.Dom._init ); \r
-\r
-\r
 \r
+/* for other browsers */\r
+Node._window.listenOnce( 'load', X.Dom._init );\r
 \r
 //\r
 X.Dom.listenOnce( X.Dom.Event.XDOM_READY, function(e){\r
index 175eedf..a0009ff 100644 (file)
@@ -56,6 +56,7 @@ X.Dom.Attr = {
        objToAttrText : function( obj ){\r
                var noValue = X.Dom.Attr.noValue,\r
                        attrs = [ '' ], n = 0, p, v;\r
+               if( !obj ) return ''; // Opera7\r
                for( p in obj ){\r
                        v = obj[ p ];\r
                        if( p === 'value' ){\r
@@ -63,7 +64,7 @@ X.Dom.Attr = {
                        };\r
                        attrs[ ++n ] = noValue[ p ] ? p : [ p, '="', v, '"' ].join( '' );\r
                };\r
-               return 0 < n ? attrs.join( ' ' ) : ' ';\r
+               return 0 < n ? attrs.join( ' ' ) : '';\r
        }\r
 };\r
 \r
index d67caa4..62f57fd 100644 (file)
@@ -120,6 +120,7 @@ _GRNERAL
                        SPECIAL_FIX   = me.SPECIAL_FIX,
                        n             = -1,
                        p, name, sp;
+               if( !obj ) return ''; // Opera7.5 未満?
                for( p in obj ){
                        name = uncamelize( p );
                        if( FIX_PROP[ name ] ){
index 12d3d75..7dc8d9c 100644 (file)
@@ -227,7 +227,7 @@ X.Dom.Query._parse = function( query, last ){
 \r
                /*@+debug[*/\r
                if( X.Dom.readyState < X.Dom.Event.XDOM_READY ){\r
-                       alert( 'not ready! X.Dom.listen( X.Dom.Event.XDOM_READY, callback )' );\r
+                       alert( 'not ready! use X.Dom.listenOnce( X.Dom.Event.XDOM_READY, callback )' );\r
                        return;\r
                };\r
                /*]@+debug*/\r
index b33b2ec..6061808 100644 (file)
@@ -1,6 +1,22 @@
 \r
 X.Dom._useBuilder = true;\r
 \r
+X.Dom._isCleanupTarget = function( elm ){\r
+       var cname = ' ' + elm.className + ' ',\r
+               tag   = ( elm.tagName || '' ).toUpperCase();\r
+       return cname.indexOf( ' skip-cleanup ' ) === -1 &&\r
+               ( X.Dom.cleanupTagNames[ tag ] || 0 < cname.indexOf( ' cleanup-target ' ) );\r
+};\r
+\r
+X.Dom._o7_remove = function( node ){\r
+       var parent   = node.parentNode;\r
+       if( node.nodeType === 1 || node.nodeType === 3 ){\r
+               parent && parent.removeChild( node );\r
+       } else {\r
+               node.data = '';\r
+       };\r
+};\r
+\r
 /* --------------------------------------\r
  *  通常のwebページに対して使用する場合、dom ready で dom tree を写し取るために使う.\r
  *  完全にワンページアプリで<body/>が空な場合、このコードはビルドに含める必要はない\r
@@ -19,7 +35,7 @@ X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,
                elmProgress;\r
        // TODO\r
        // textarea の内容を控えて、消す。xnode tree 構築後に復帰。でないと、html パースでこける\r
-       \r
+\r
        // cleanup tree \r
        X.UA.MacIE || (function/*cleanUpTree*/( elm, skip, head ){\r
                var nodes      = X.copyArray( elm.childNodes ),\r
@@ -47,7 +63,7 @@ X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,
                                        break;\r
                                case 3 :\r
                                        content = skip ? node.data : X.Dom.cleanupWhiteSpace( node.data );\r
-                                       //console.log( 'Delete space ' + node.data.length + ' => ' + content.length );\r
+                                       //console.log( 'Delete space ' + node.data.length + ' => ' + content.length );                          \r
                                        if( !textNode && content !== ' ' && content.length ){\r
                                                node.data = content;\r
                                                textNode  = node;\r
@@ -59,12 +75,16 @@ X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,
                                        // ブロック要素直下のスペースだけは削除??\r
                                default :\r
                                        //console.log( 'Remove type: ' + node.nodeType + ' value: ' + node.nodeValue );\r
-                                       elm.removeChild( node );\r
+                                       if( !X.UA.Opera7 ){\r
+                                               elm.removeChild( node );\r
+                                       } else {\r
+                                               X.Dom._o7_remove( node );\r
+                                       };\r
                                        //++count;\r
                        };\r
                };\r
        })( body );\r
-       \r
+\r
        // body の属性値の取得\r
        html = body.innerHTML;\r
        \r
@@ -81,7 +101,8 @@ X.Dom.listenOnce( X.Dom.Event.DOM_PRE_INIT,
                .listenOnce( X.Event.SUCCESS, function( e ){\r
                        var xnodes = Node.root._xnodes = [], t;\r
                        xnodes.push.apply( xnodes, e.xnodes );\r
-                       \r
+                       elmProgress.style.width = '100%';\r
+\r
                        X.Dom._asyncCreateTree( Node.root, body.childNodes, elmProgress );\r
                } );\r
 \r
@@ -113,6 +134,7 @@ X.Dom.DOM_IE4 ?
                        function( e ){\r
                                var xnodes = Node.root._xnodes = [], t;\r
                                xnodes.push.apply( xnodes, e.xnodes );\r
+                               elmProgress.style.width = '100%';\r
                                \r
                                X.Dom._asyncCreateTree( Node.root, body.childNodes || body.children, elmProgress );\r
                        }\r
@@ -139,6 +161,7 @@ X.Dom._asyncCreateTree = function ( parent, elems, elmProgress, async ){
                        flag   : 0\r
                },\r
                xnode, i, dive;\r
+       //alert( 'X.Dom._asyncCreateTree' );\r
        while( current || ( current = stack.pop() ) ){\r
                i = current.i;\r
                l = current.l;\r
@@ -169,6 +192,7 @@ X.Dom._asyncCreateTree = function ( parent, elems, elmProgress, async ){
                                                async.current = i < l && current;\r
                                                async.done    = done;\r
                                        };\r
+                                       //alert( 'koko?' );\r
                                        X.Timer.once( 0, X.Dom._asyncCreateTree, [ null, null, elmProgress, async || { stack : stack, current : i < l && current, done : done } ] );\r
                                        // progress\r
                                        elmProgress.style.width = ( ( 1 - done / Node._chashe.length ) * 100 | 0 ) + '%';\r
@@ -202,20 +226,29 @@ X.Dom._bindElementToXnode =
                                elm = elems[ current.j ];\r
                                tag = elm.tagName && elm.tagName.toUpperCase();\r
                                if( ( elm.nodeType !== 1 && elm.nodeType !== 3 ) || tag === '!' || ( tag && tag.charAt( 0 ) === '/' ) ){\r
-                                       elm.parentNode.removeChild( elm );\r
+                                       if( !X.UA.Opera7 ){\r
+                                               elm.parentNode.removeChild( elm );\r
+                                       } else {\r
+                                               X.Dom._o7_remove( elm );\r
+                                       };\r
                                        continue;\r
                                };\r
                \r
                                if( xnode._xnodeType === 1 ){\r
                                        if( elm.nodeType === 3 ){\r
-                                               //if( !( text = elm.data ) || ( text = X.Dom.cleanupWhiteSpace( text ) ) === ' ' ){\r
-                                               //      elm.parentNode.removeChild( elm );\r
-                                               //      continue;\r
-                                               //};\r
-                                               alert( '[' +parent._tag + '>' +xnode._tag + '] !== ' + elm.nodeType + '\n' + elm.data );\r
+                                               if( !( text = elm.data ) || ( text = X.Dom.cleanupWhiteSpace( text ) ) === ' ' ){\r
+                                                       //alert( text.charCodeAt( 0 ) );\r
+                                                       if( !X.UA.Opera7 ){\r
+                                                               elm.parentNode.removeChild( elm );\r
+                                                       } else {\r
+                                                               X.Dom._o7_remove( elm );\r
+                                                       };\r
+                                                       continue;\r
+                                               };\r
+                                               alert( '1:[' +parent._tag + '>' +xnode._tag + '] !== ' + elm.nodeType + '\n' + ( elm.data ) );\r
                                        } else\r
                                        if( xnode._tag !== tag ){\r
-                                               alert( '[' +parent._tag + '>' +xnode._tag + ' ' + (xnode._xnodes ? xnode._xnodes.length : '' ) + '] !== ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + '\n' + elm.outerHTML );\r
+                                               alert( '2:[' +parent._tag + '>' +xnode._tag + ' len:' + (xnode._xnodes ? xnode._xnodes.length : '' ) + '] !== ' + tag + ' ' + (elm.childNodes ? elm.childNodes.length : '' ) + '\n' + elm.outerHTML );\r
                                        } else {\r
                                                xnode._rawNode = elm;\r
                                                //if( ( doc = elm.ownerDocument || elm.document ) && ( doc.createElement( 'p' ).tagName === doc.createElement( 'P' ).tagName ) ){\r