OSDN Git Service

Version 0.6.23, remove AbstractBox(AbstractDisplayContainer), working ie-filter-fix.
[pettanr/clientJs.git] / 0.6.x / js / dom / 11_XDomNode.js
index 04d2cc7..775796d 100644 (file)
@@ -6,7 +6,8 @@ X.Dom.Dirty = {
        CLASSNAME        :  4, // _getCharSize, width, height, x, y\r
        CSS              :  8, // _getCharSize, width, height, x, y\r
        ATTR             : 16,  // _getCharSize, width, height, x, y\r
-       IE4_TEXTNODE_FIX : 32\r
+       IE_FILTER        : X.UA.IE && X.UA.IE < 9 ? 32 : 0,\r
+       IE4_TEXTNODE_FIX : 64\r
 };\r
 \r
 /*\r
@@ -104,7 +105,6 @@ X.Dom.Node = X.EventDispatcher.inherits(
                                                this._className = v.className;\r
                                                this.cssText( v.style.cssText );\r
                                                // X.Dom.Dirty.CSS を落とす\r
-                                               this._dirty    &= ~X.Dom.Dirty.CSS;\r
                                                this._dirty = 0;\r
                                                // attr の回収は不可能、、、\r
                                                if( X.UA.IE && X.UA.IE < 5 ){\r
@@ -858,7 +858,7 @@ Node.prototype._commitUpdate =
                        xnodes = this._xnodes;\r
                        l      = xnodes ? xnodes.length : 0;\r
                        \r
-                       if( this._dirty & X.Dom.Dirty.IE4_TEXTNODE_FIX || ( this._state & X.Dom.State.IE4_ONLY_TEXT && ( l !== 1 || xnodes[ 0 ]._xnodeType !== 3 ) ) ){\r
+                       if( this._dirty & X.Dom.Dirty.IE4_TEXTNODE_FIX || ( this._state & X.Dom.State.IE4_ONLY_TEXT && ( l !== 1 || xnodes[ 0 ]._xnodeType !== 3 ) ) ){ // 1 < l && elm.children.length === 0\r
                                html = [];\r
                                for( i = 0; i < l; ++i ){\r
                                        html[ i ] = xnodes[ i ]._actualCreate();\r
@@ -887,11 +887,10 @@ Node.prototype._commitUpdate =
                }) :\r
                (function(){});\r
 \r
-\r
 Node.prototype._updateRawNode =\r
        document.getElementById ?\r
                ( function( elm ){\r
-                       var attrs, k, v;\r
+                       var attrs, rename, k, v;\r
 \r
                        // textNode\r
                        if( this._dirty & X.Dom.Dirty.CONTENT ){\r
@@ -912,12 +911,18 @@ Node.prototype._updateRawNode =
                                        delete this._cssText;\r
                                };\r
                        };\r
+                       \r
+                       if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+                               this._rawNode.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
+                       };\r
+                       \r
                        // attr\r
                        if( this._dirty & X.Dom.Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
+                               rename = X.Dom.Attr.renameForDOM;\r
                                for( k in attrs ){\r
                                        ( v = attrs[ k ] ) === undefined ?\r
-                                               elm.removeAttribute( k ) :\r
-                                               ( elm[ k ] = v );\r
+                                               elm.removeAttribute( rename[ k ] || k ) :\r
+                                               ( elm[ rename[ k ] || k ] = v );\r
                                };\r
                                delete this._newAttrs;\r
                        };\r
@@ -926,17 +931,22 @@ Node.prototype._updateRawNode =
                }) :\r
        document.all ? \r
                ( function( elm ){\r
-                       var attrs, k, v;\r
+                       var attrs, rename, k, v;\r
 \r
                        // fake textNode\r
                        if( this._dirty & X.Dom.Dirty.CONTENT ){\r
-                               elm.innerHTML = this._text;\r
+                               elm.innerText = this._text;\r
                                delete this._dirty;\r
                                return;\r
                        };\r
-                               \r
+                       \r
+               /*\r
+                * http://www.tohoho-web.com/js/element.htm\r
+                * title、className、id、lang、language には setAttribute でなく、element.id で直接読み書きできる\r
+                */     \r
                        // id\r
-                       if( this._dirty & X.Dom.Dirty.CONTENT ) elm.setAttribute( 'id', this._id );\r
+                       if( this._dirty & X.Dom.Dirty.CONTENT ) elm.setAttribute( 'id', this._id || ( 'ie4uid' + xnode._uid ) );\r
+\r
                        // className\r
                        if( this._dirty & X.Dom.Dirty.CLASSNAME ) elm.className = this._className;\r
                        // style\r
@@ -948,13 +958,18 @@ Node.prototype._updateRawNode =
                                        delete this._cssText;\r
                                };\r
                        };\r
+                       \r
+                       if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+                               this._rawNode.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
+                       };\r
+                       \r
                        // attr\r
                        if( this._dirty & X.Dom.Dirty.ATTR && ( attrs = this._newAttrs || this._attrs ) ){\r
+                               rename = X.Dom.Attr.renameForDOM;\r
                                for( k in attrs ){\r
                                        ( v = attrs[ k ] ) === undefined ?\r
-                                               elm.removeAttribute( k ) :\r
-                                               elm.setAttribute( k, v );\r
-                                       delete attrs[ k ];\r
+                                               elm.removeAttribute( rename[ k ] || k ) :\r
+                                               elm.setAttribute( rename[ k ] || k, v );\r
                                };\r
                                delete this._newAttrs;\r
                        };\r
@@ -1064,7 +1079,6 @@ Node.prototype._actualCreate =
                        \r
                        delete this._newAttrs;\r
                };\r
-               delete this._dirty;\r
                \r
                return html.join( '' );\r
        }) :\r
@@ -1093,8 +1107,12 @@ Node.prototype._afterActualCreate =
                        if( !X.UA.IE || 8 < X.UA.IE ){\r
                                elm.UID = this._uid;\r
                                this._newAttrs = this._attrs;\r
-                               this._dirty = X.Dom.Dirty.ID | X.Dom.Dirty.CLASSNAME | X.Dom.Dirty.CSS | X.Dom.Dirty.ATTR;\r
+                               this._dirty = X.Dom.Dirty.ID | X.Dom.Dirty.CLASSNAME | X.Dom.Dirty.CSS | X.Dom.Dirty.ATTR | X.Dom.Dirty.IE_FILTER;\r
                                this._updateRawNode( elm );\r
+                       } else\r
+                       if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+                               elm.style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
+                               delete this._dirty;\r
                        };\r
                        this._restoreEvent();// イベントの復帰\r
                        delete this._isNew;\r
@@ -1107,6 +1125,7 @@ Node.prototype._afterActualCreate =
                                xnodes[ i ]._afterActualCreate();\r
                        };\r
                };\r
+               \r
                return this;\r
        }) :\r
        document.all ? (function(){\r
@@ -1120,6 +1139,10 @@ Node.prototype._afterActualCreate =
                                xnodes[ --i ]._afterActualCreate();\r
                        };\r
                };\r
+               if( this._dirty & X.Dom.Dirty.IE_FILTER ){\r
+                       this._ie4getRawNode().style.filter = X.Dom.Style.SPECIAL_FIX( this._css );\r
+               };\r
+               delete this._dirty;\r
                return this._restoreEvent();// イベントの復帰\r
        }) :\r
        (function(){});\r