OSDN Git Service

Version 0.6.122, add xnode._flags & fix X.Util.NinjaIframe.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 20 Jan 2015 08:18:56 +0000 (17:18 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 20 Jan 2015 08:18:56 +0000 (17:18 +0900)
0.6.x/js/02_dom/02_XNode.js
0.6.x/js/02_dom/04_XBoxModel.js
0.6.x/js/02_dom/05_XNodeAttr.js
0.6.x/js/02_dom/06_XNodeCSS.js
0.6.x/js/02_dom/10_XNodeAnime.js
0.6.x/js/02_dom/22_XTreeBuilder.js
0.6.x/js/05_util/01_XNinjaIframe.js

index b7bbf6f..d66de3f 100644 (file)
@@ -1,33 +1,50 @@
 var \r
-       X_Node_Dirty = {\r
-               CLEAN            :  0,\r
-               CHILD_IS_DIRTY   :  1,\r
-               ID               :  2, // width, height, x, y\r
-               CONTENT          :  4, // width, height, x, y textNode の内容\r
-               CLASSNAME        :  8, // X_Node_CSS_getCharSize, width, height, x, y\r
-               ATTR             : 16, // X_Node_CSS_getCharSize, width, height, x, y\r
-               CSS              : 32, // X_Node_CSS_getCharSize, width, height, x, y\r
-               IE_FILTER        : X_UA.IE < 9 && !X_UA.MacIE ? 64 : 0,\r
-               UNKNOWN_TAG_FIX  : 128,\r
-               IE4_TEXTNODE_FIX : 256\r
-       },\r
        \r
        X_Node_State = {\r
-               DESTROYED          : 0,\r
-               EXIST              : 1, // XNODE_EXIDT, ELEMENT_EXIST\r
-               BELONG_TREE        : 2, // HAS_PARENT, HAS_PARENT_ACTUAL, BELONG_TREE, BELONG_TREE_ACTUAL\r
-               DISPLAY_NONE       : 4, // VISIVILITY_HIDDEN(opacity0), DISPALY_NONE\r
-               DISPLAY_BLOCK      : 8, // remove\r
-               DISPLAY_INLINE     : 16,// remove\r
-               POSITION_ABSOLUTE  : 32,\r
-               OVERFLOW_HIDDEN    : 64,\r
-               HAS_WIDTH_LENGTH   : 128,\r
-               HAS_WIDTH_PERCENT  : 256,\r
-               HAS_HEIGHT_LENGTH  : 512,\r
-               HAS_HEIGHT_PERCENT : 1024,\r
-               IE4_ONLY_TEXT      : 2048,\r
-               IE5_DISPLAY_NONE_FIX : !X_UA.MacIE && X_UA.IE5 ? 4096 : 0 // filterがかかっていると不可? MacIE5.2- は ?\r
+               DESTROYED              : 0,\r
+               EXIST                  : 1,\r
+               IN_TREE                : 2,\r
+               \r
+               ELM_EXIST              : 2 <<  1,\r
+               ELM_IN_TREE            : 2 <<  2,\r
+               \r
+               IS_TEXTNODE            : 2 <<  3,\r
+               \r
+               STYLE_IS_DISPLAY_NONE  : 2 <<  4, // display:none               \r
+               STYLE_IS_HIDDEN        : 2 <<  5, // visibility:hidden opacity:0\r
+               STYLE_IS_POS_ABSOLUTE  : 2 <<  6, // position:absolute\r
+               STYLE_IS_NO_OVERFLOW   : 2 <<  7, // overflow:hidden\r
+               STYLE_IS_WIDTH_LENGTH  : 2 <<  8, // width  : width() のための commitUpdate が不要\r
+               STYLE_IS_WIDTH_PCT     : 2 <<  9, // width  : width() のための commitUpdate が不要かもしれない。(親で LENGTH が指定されているなら)\r
+               STYLE_IS_HEIGHT_LENGTH : 2 << 10, // height :\r
+               STYLE_IS_HEIGHT_PCT    : 2 << 11, // height :\r
+               STYLE_IS_FONT_LENGTH   : 2 << 12, // fontSize :\r
+               STYLE_IS_FONT_PCT      : 2 << 13, // fontSize :\r
+               \r
+               IE4_ONLY_TEXT          : 2 << 14,\r
+               IE5_DISPLAY_NONE_FIX   : X_UA.IE5 && X_UA.ActiveX ? 2 << 15 : 0, // filterがかかっていると不可ってことかも? MacIE5.2- は ?\r
+               UNKNOWN_TAG_FIX        : 2 << 16,\r
+               IE4_TEXTNODE_FIX       : 2 << 17,\r
+               \r
+               DIRTY_CHILD            : 2 << 18, // 使っていない\r
+               DIRTY_CONTENT          : 2 << 19, // width, height, x, y textNode の内容\r
+               DIRTY_ID               : 2 << 20, // width, height, x, y\r
+               DIRTY_CLASSNAME        : 2 << 21, // X_Node_CSS_getCharSize, width, height, x, y\r
+               DIRTY_ATTR             : 2 << 22, // X_Node_CSS_getCharSize, width, height, x, y\r
+               DIRTY_CSS              : 2 << 23, // X_Node_CSS_getCharSize, width, height, x, y\r
+               DIRTY_IE_FILTER        : X_UA.IE < 10 && X_UA.ActiveX ? 2 << 24 : 0, // \r
+               \r
+               GPU_WAITING            : 2 << 25, // 1:子のGPU解除待\r
+               GPU_RESERVED           : 2 << 26, // 2:GPU予約\r
+               GPU_NOW                : 2 << 25 | 2 << 26, // 3:GPU now!()\r
+               GPU_RELEASE_RESERVED   : 2 << 27  // 4:GPU解除予約\r
        },\r
+\r
+       X_Node_DIRTY_MASK = \r
+               X_Node_State.DIRTY_CHILD | X_Node_State.DIRTY_CONTENT | X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME |\r
+               X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER,\r
+\r
+       X_Node_DIRTY_MASK_RESET = ( ( 2 << 29 ) - 1 ) ^ X_Node_DIRTY_MASK,\r
        \r
        X_Node_TYPE = {\r
                XNODE       : 1,\r
@@ -58,37 +75,36 @@ var
  */    \r
        Node = X.Node = X.EventDispatcher.inherits(\r
        'XDomNode',\r
-       X.Class.POOL_OBJECT,\r
+       X.Class.POOL_OBJECT, // X.Class.FINAL\r
        {\r
                _uid       : 0,\r
-               _state     : 0,\r
-               _dirty     : 0,\r
+               _flags     : X_Node_State.DESTROYED,\r
                \r
                _isNew     : false, // state にまとめる\r
-               \r
+               _root      : null, // xnode が文書ツリーに属しているか?はこれを見る -> state               \r
+               _xnodeType : 0,    // state へ\r
+                               \r
                _rawObject : null,\r
                _rect      : null, // \r
                \r
-               _root      : null, // xnode が文書ツリーに属しているか?はこれを見る -> state\r
                parent     : null, // remove された枝も親子構造は維持している。\r
-               _xnodes    : null,\r
-       \r
-               _xnodeType : 0,\r
-               _tag       : null,\r
+               _xnodes    : null, // Array.<Node>\r
+\r
+               _tag       : '',\r
                _text      : null,\r
                _id        : null,\r
                _className : '',\r
 \r
                _attrs     : null, // see X_Node_Attr\r
                _newAttrs  : null,\r
-               _attrText  : '', // X_Node_Attr_objToAttrText が必要な場合は false が入っている\r
+               _attrText  : '',   // X_Node_Attr_objToAttrText が必要な場合は false が入っている\r
                \r
                _css       : null, // see X_Node_CSS\r
-               _cssText   : null,\r
+               _cssText   : null, // String | null\r
                \r
                _fontSize  : 0,\r
                \r
-               _anime     : null,\r
+               _anime     : null, // Hash see X_Node_Anime\r
                \r
        /*\r
         * TODO Node の継承ができない!\r
@@ -100,7 +116,7 @@ var
                                X_Node_newByTag = false;\r
                                this._tag       = v.toUpperCase();\r
                                this._xnodeType = 1;\r
-                               this._state     = X_Node_State.DISPLAY_INLINE; // TODO\r
+                               this._flags     |= X_Node_State.EXIST;\r
                                arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
                                css = arguments[ 2 ];\r
                                css && this[ X.Type.isString( css ) ? 'cssText' : 'css' ]( css );\r
@@ -109,7 +125,7 @@ var
                                X_Node_newByText = false;\r
                                this._text       = v;\r
                                this._xnodeType  = 3;\r
-                               this._state      = X_Node_State.DISPLAY_INLINE;\r
+                               this._flags      |= X_Node_State.EXIST | X_Node_State.IS_TEXTNODE;\r
                        } else {\r
                                if( 1 < arguments.length ) return new X_NodeList( arguments );\r
                                if( X.Type.isArray( v ) && v.length ) return new X_NodeList( v );\r
@@ -118,20 +134,25 @@ var
                                        case X_Node_TYPE.XNODE :\r
                                        case X_Node_TYPE.XNODE_LIST :\r
                                                return v;\r
+\r
                                        case X_Node_TYPE.RAW_HTML :\r
                                                if( xnode = X_Node_getXNode( v ) ) return xnode;\r
                                                // v.parentNode || v.parentElement : dom1 || dom0\r
                                                this.parent     = ( parent = v.parentNode || v.parentElement ) && parent.tagName /* ie7- */ && X_Node_getXNode( parent );\r
-                                               if( this.parent && this.parent._root ) this._root = this.parent._root;\r
+                                               if( this.parent && this.parent._root ){\r
+                                                       this._root = this.parent._root;\r
+                                                       this._flags |= X_Node_State.IN_TREE | X_Node_State.ELM_IN_TREE;\r
+                                               };\r
                                                this._rawObject = v;\r
                                                this._xnodeType = 1;\r
-                                               this._state     = X_Node_State.DISPLAY_BLOCK; // TODO\r
+                                               this._flags     |= X_Node_State.EXIST | X_Node_State.ELM_EXIST;\r
                                                this._tag       = v.tagName.toUpperCase();\r
                                                this._id        = v.id;\r
                                                this._className = v.className;\r
                                                this.cssText( v.style.cssText );\r
-                                               // X_Node_Dirty.CSS を落とす\r
-                                               this._dirty = 0;\r
+                                               // X_Node_State.DIRTY_CSS を落とす\r
+                                               //this._flags = 0;\r
+                                               this._flags &= X_Node_DIRTY_MASK_RESET;\r
                                                // TODO attr の回収は不可能、、、\r
                                                if( X_UA_DOM.IE4 ){\r
                                                        v.setAttribute( 'UID', '' + uid );\r
@@ -140,29 +161,24 @@ var
                                                };\r
                                                // childNodes...\r
                                                break;\r
+\r
                                        case X_Node_TYPE.RAW_TEXT :\r
                                                if( xnode = X_Node_getXNode( v ) ) return xnode;\r
                                                this.parent     = X_Node_getXNode( v.parentNode );\r
                                                if( this.parent && this.parent._root ) this._root = this.parent._root;\r
                                                this._rawObject = v;\r
                                                this._xnodeType = 3;\r
-                                               this._state     = X_Node_State.DISPLAY_INLINE;\r
+                                               this._flags     |= X_Node_State.EXIST | X_Node_State.IS_TEXTNODE;\r
                                                this._text      = v.data;\r
                                                v.UID = uid;\r
                                                break;\r
+\r
                                        case X_Node_TYPE.HTML_STRING :\r
                                        case X_Node_TYPE.STRING :\r
                                                if( xnodes = X_HtmlParser_parse( v, true ) && 1 < xnodes.length ) return new X_NodeList( xnodes );\r
                                                if( xnodes.length ) return xnodes[ 0 ];\r
                                                return X_Node_none;\r
-                                       /*\r
-                                       case X_Node_TYPE.IMAGE :\r
-                                               if( xnode = X_Node_getXNode( v ) ) return xnode;\r
-                                               this._rawObject = v;\r
-                                               this._xnodeType = 4;\r
-                                               v.UID           = uid;\r
-                                               this._state     = X_Node_State.EXIST;\r
-                                               break; */\r
+\r
                                        default :\r
                                                if( X_Node_none ) return X_Node_none;\r
                                                return;\r
@@ -248,11 +264,9 @@ function X_Node_getType( v ){
        if( v.constructor === X_NodeList ) return X_Node_TYPE.XNODE_LIST;\r
        if( X.Type.isHTMLElement( v ) ) return X_Node_TYPE.RAW_HTML;\r
        if( v.nodeType === 3 ) return X_Node_TYPE.RAW_TEXT;\r
-       //if( X.Type.isImage( v ) ) return X_Node_TYPE.IMAGE;\r
        if( X.Type.isString( v ) ){\r
                return '<' === v.charAt( 0 ) && v.charAt( v.length - 1 ) === '>' ? X_Node_TYPE.HTML_STRING : X_Node_TYPE.STRING;\r
        };\r
-       //if( v.nodeType === 11 ) return X_Node_TYPE.DOC_FRAG;\r
        return 0;\r
 };\r
 function X_Node_getXNode( v ){\r
@@ -262,7 +276,6 @@ function X_Node_getXNode( v ){
                case X_Node_TYPE.XNODE_LIST :\r
                        return v;\r
                case X_Node_TYPE.RAW_HTML :\r
-               //case X_Node_TYPE.IMAGE :\r
                        // fake TextNode too.\r
                        if( X_UA_DOM.IE4 ){\r
                                uid = v.getAttribute( 'UID' );\r
@@ -300,6 +313,12 @@ var X_Node_isXmlDocument =
        X_Node_body, // = X_Node_CHASHE[ 3 ] <body>\r
        X_Node_systemNode, // = X_Node_CHASHE[ ? ]\r
        X_Node_fontSizeNode,\r
+/*\r
+ * remove :\r
+ *  X_Node_reserveRemoval = [] に追加。commitUpdate で remove\r
+ * add :\r
+ *  X_Node_reserveRemoval にいたら消す, new_parent._xnodes に挿入\r
+ */\r
        X_Node_reserveRemoval = [];\r
 \r
 \r
@@ -414,19 +433,8 @@ function X_Node_append( v ){
                        if( v._xnodeType !== 1 && v._xnodeType !== 3 ) return this;\r
                        // 親の xnodes から v を消す\r
                        if( v.parent ){\r
-                               //if( X_UA_DOM.W3C ){\r
-                               //      v.parent._xnodes.splice( v.parent._xnodes.indexOf( v ), 1 );\r
-                               //} else\r
-                               //if( X_UA_DOM.IE4 ){\r
-                                       v.remove();\r
-                               //} else {\r
-                                       \r
-                               //};\r
-                       };// else\r
-                       //if( ( i = X_Node_reserveRemoval.indexOf( v ) ) !== -1 ){\r
-                       //      if( !this._state ) alert( 'xnode already destroyed!' );\r
-                       //      X_Node_reserveRemoval.splice( i, 1 );\r
-                       //};\r
+                               v.remove();\r
+                       };\r
                        break;\r
                default :\r
                        return this;\r
@@ -478,19 +486,8 @@ function X_Node_appendAt( start, v ){
                        if( v._xnodeType !== 1 && v._xnodeType !== 3 ) return this;\r
                        // 親の xnodes から v を消す\r
                        if( v.parent ){\r
-                               //if( X_UA_DOM.W3C ){\r
-                               //      v.parent._xnodes.splice( v.parent._xnodes.indexOf( v ), 1 );\r
-                               //} else\r
-                               //if( X_UA_DOM.IE4 ){\r
-                                       v.remove();\r
-                               //} else {\r
-                                       \r
-                               //};\r
-                       };// else\r
-                       //if( ( i = X_Node_reserveRemoval.indexOf( v ) ) !== -1 ){\r
-                       //      if( !this._state ) alert( 'xnode already destroyed!' );\r
-                       //      X_Node_reserveRemoval.splice( i, 1 );\r
-                       //};\r
+                               v.remove();\r
+                       };\r
                        break;\r
                default :\r
                        return this;\r
@@ -622,14 +619,14 @@ function X_Node_empty(){
 };\r
 \r
 /* --------------------------------------\r
- *  destory\r
+ *  TODO destory -> kill\r
  */\r
 // Node._destroyChildFlag = false; // TODO\r
 \r
 function X_Node_destroy( isChild ){\r
        var xnodes = this._xnodes, i, elm;\r
        \r
-       if( !this._state ) return;\r
+       if( !this._flags ) return;\r
        \r
        elm = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
        \r
@@ -641,7 +638,7 @@ function X_Node_destroy( isChild ){
        elm && this._listeners && this.unlisten(); // イベントの退避\r
 \r
        delete X_Node_CHASHE[ this._uid ];\r
-       delete this._state;\r
+       delete this._flags;\r
        \r
        if( this._root ){\r
                !isChild && this.remove();\r
@@ -732,7 +729,7 @@ function X_Node_className( v ){
                if( this._className === v ) return this;\r
                v ? ( this._className = v ) : delete this._className;\r
        };\r
-       this._dirty |= X_Node_Dirty.CLASSNAME;\r
+       this._flags |= X_Node_State.DIRTY_CLASSNAME;\r
        this._root && X_Node_reserveUpdate();\r
        return this;\r
 };\r
@@ -815,7 +812,7 @@ function X_Node_html( html ){
                return this._text;\r
        };\r
        \r
-       if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X_Node_CSS_objToCssText( this ) ) ){\r
+       if( this._flags & X_Node_State.DIRTY_CSS && !( this._cssText = X_Node_CSS_objToCssText( this ) ) ){\r
                delete this._cssText;\r
        };\r
        html = !X_Node_outerXNode ? [] : [\r
@@ -853,7 +850,7 @@ function X_Node_text( text ){
                        if( this._text !== text ){\r
                                text ? ( this._text = text ) : delete this.text;\r
                                this._root && X_Node_reserveUpdate();\r
-                               this._dirty |= X_Node_Dirty.CONTENT;\r
+                               this._flags |= X_Node_State.DIRTY_CONTENT;\r
                        };\r
                        return this;\r
                };\r
@@ -940,17 +937,7 @@ function X_Node_each( func /*, opt_args */ ){
 /* --------------------------------------\r
  *  Async commit update\r
  * \r
- * state:\r
- *  0 : no_rawObject\r
- *  1 : no_parent\r
- *  2 : no_root\r
- *  3 : dirty\r
- *  4 : clean\r
- * \r
- * remove :\r
- * root._reserveRemoval = [] に追加。commitUpdate で remove して state は not_added\r
- * add :\r
- * root._reserveRemoval にいたら消す, new_parent._xnodes に挿入 steta は not_added にして commitUpdate を待つ\r
+ * TODO Timer や DOM イベントの呼び出しの最後に、まだ一度も commitUpdate していないなら commitUpdate してしまう。\r
  */\r
        \r
 function X_Node_reserveUpdate(){\r
@@ -958,7 +945,7 @@ function X_Node_reserveUpdate(){
 };\r
 \r
 function X_Node_startUpdate( time ){\r
-       var removal, i, xnode, tmp;\r
+       var removal, i, xnode;\r
        \r
        if( !X_Node_updateTimerID || X_ViewPort_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
                return;\r
@@ -973,26 +960,22 @@ function X_Node_startUpdate( time ){
        };\r
 \r
        removal = X_Node_reserveRemoval;\r
-       \r
-       //tmp = X_Node_body._rawObject.style.visibility;\r
-       //this._rawObject.style.visibility = 'hidden';\r
-\r
-       //console.log( '_actualRemove().' );\r
 \r
        if( i = removal.length ){\r
                for( ; i; ){\r
                        xnode = removal[ --i ];\r
                        X_Node__actualRemove( xnode );\r
-                       !X_Node_body._state && xnode.kill();\r
+                       !X_Node_body._flags && xnode.kill();\r
                };\r
                removal.length = 0;\r
        };\r
-\r
-       //console.log( 'start _startUpdate().' );\r
-\r
-       /* X_Node_html._dirty ? */ X_Node__commitUpdate( X_Node_html ); /* : X_Node__commitUpdate( X_Node_body ); */;\r
        \r
-       //console.log( 'end of _startUpdate().' );\r
+       if( X_Node_html._flags & X_Node_DIRTY_MASK ){\r
+               X_Node__commitUpdate( X_Node_html );\r
+       } else {\r
+               X_Node__commitUpdate( X_Node_head );\r
+               X_Node__commitUpdate( X_Node_body );\r
+       };\r
        \r
        if( time ){\r
                // X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
@@ -1000,7 +983,6 @@ function X_Node_startUpdate( time ){
        };\r
        \r
        X_ViewPort._listeners && X_ViewPort._listeners[ X.Event.AFTER_UPDATE ] && X_ViewPort.asyncDispatch( X.Event.AFTER_UPDATE );\r
-       //this._rawObject.style.visibility = tmp;\r
 };\r
 \r
 var X_Node__commitUpdate =\r
@@ -1009,8 +991,7 @@ var X_Node__commitUpdate =
                        var elm = that._rawObject,\r
                                xnodes, l, i, frg, next, k, v;\r
 \r
-                       if( that._state & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
-                               //alert( that._tag + ' ' + !!elm );\r
+                       if( that._flags & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
                                // filter の効いている要素だけdisplay:none が無視される模様。filter を切ればよい?\r
                                // 親が、display:none の場合は?\r
                                elm && elm.parentNode && X_Node__actualRemove( that );\r
@@ -1026,22 +1007,21 @@ var X_Node__commitUpdate =
                                return elm || that._rawObject;\r
                        } else\r
                        if( ( xnodes = that._xnodes ) && ( l = xnodes.length ) ) {\r
-                               \r
-                               /*if( elm.childNodes.length !== l && ( frg = X_Node_useDocumentFragment ) ){\r
-                                       for( i = 0; i < l; ++i ){\r
-                                               frg.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
-                                       };\r
-                                       elm.appendChild( frg );\r
-                               } else {*/\r
-                                       for( ; l; ){\r
-                                               next = X_Node__commitUpdate( xnodes[ --l ], elm, next );\r
-                                       };\r
-                               //};\r
+                               for( ; l; ){\r
+                                       next = X_Node__commitUpdate( xnodes[ --l ], elm, next );\r
+                               };\r
                        };\r
 \r
                        delete that._fontSize;\r
-                       that._dirty && X_Node__updateRawNode( that, elm );\r
-                       if( that._state & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
+\r
+                       if( that._flags & X_Node_DIRTY_MASK ){\r
+                               X_Node__updateRawNode( that, elm );\r
+                       } else\r
+                       if( X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
+                               // TODO 親要素への変更で display:none が変わる場合もあるのでここで調べる\r
+                       };\r
+                       \r
+                       if( that._flags & X_Node_State.IE5_DISPLAY_NONE_FIX ){\r
                                return nextElement;\r
                        };\r
                        return elm;\r
@@ -1062,7 +1042,7 @@ var X_Node__commitUpdate =
                        xnodes = that._xnodes;\r
                        l      = xnodes ? xnodes.length : 0;\r
                        \r
-                       if( that._dirty & X_Node_Dirty.IE4_TEXTNODE_FIX || ( that._state & X_Node_State.IE4_ONLY_TEXT && ( l !== 1 || xnodes[ 0 ]._xnodeType !== 3 ) ) ){ // 1 < l && elm.children.length === 0\r
+                       if( that._flags & X_Node_State.IE4_TEXTNODE_FIX || ( that._flags & X_Node_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 ] = X_Node__actualCreate( xnodes[ i ] );\r
@@ -1071,13 +1051,15 @@ var X_Node__commitUpdate =
                                for( i = 0; i < l; ++i ){\r
                                        X_Node__afterActualCreate( xnodes[ i ] );\r
                                };\r
-                               that._state &= ~X_Node_State.IE4_ONLY_TEXT;\r
+                               that._flags &= ~X_Node_State.IE4_ONLY_TEXT;\r
                        } else\r
-                       if( that._state & X_Node_State.IE4_ONLY_TEXT ){ // textNode が swap した場合の検出は、_root で行う\r
+                       if( that._flags & X_Node_State.IE4_ONLY_TEXT ){ // textNode が swap した場合の検出は、_root で行う\r
                                text = xnodes[ 0 ];\r
-                               if( text._dirty || !text._root ){\r
+                               //if( text._flags || !text._root ){\r
+                               if( text._flags & X_Node_State.DIRTY_CONTENT || !text._root ){\r
                                        elm.innerHTML = text._text;\r
-                                       delete text._dirty;\r
+                                       //delete text._flags;\r
+                                       text._flags &= X_Node_DIRTY_MASK_RESET;\r
                                        text._root = that._root;                                        \r
                                };\r
                        } else\r
@@ -1088,45 +1070,52 @@ var X_Node__commitUpdate =
                        };\r
                        \r
                        delete that._fontSize;\r
-                       that._dirty && X_Node__updateRawNode( that, elm );\r
+                       //that._flags && X_Node__updateRawNode( that, elm );\r
+                       that._flags & X_Node_DIRTY_MASK && X_Node__updateRawNode( that, elm );\r
                        return elm;\r
                }) :\r
                (function(){});\r
 \r
+/*\r
+ * TODO IE5 は filter-fix があるため、親から変更を適用し、自信の display:none を調べる\r
+ * GPU レイヤーするブラウザは、子要素から変更を当てていく?\r
+ */\r
 var X_Node__updateRawNode =\r
        X_UA_DOM.W3C ?\r
                ( function( that, elm ){\r
                        var attrs, rename, k, v;\r
 \r
                        // textNode\r
-                       if( that._dirty & X_Node_Dirty.CONTENT ){\r
+                       if( !that._tag ){\r
                                elm.data = X_String_chrReferanceTo( that._text );\r
-                               delete that._dirty;\r
+                               //delete that._flags;\r
+                               that._flags &= X_Node_DIRTY_MASK_RESET;\r
                                return;\r
                        };\r
                        // id\r
-                       if( that._dirty & X_Node_Dirty.ID ){\r
+                       if( that._flags & X_Node_State.DIRTY_ID ){\r
                                that._id ? ( elm.id = that._id ) : ( elm.id && elm.removeAttribute( 'id' ) );           \r
                        };\r
                        // className\r
-                       if( that._dirty & X_Node_Dirty.CLASSNAME ){\r
+                       if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
                                that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-?                         \r
 \r
                                // ie5 only\r
+                               // TODO 親へのクラス・id指定で display : none になるケースもある\r
                                if( X_Node_State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
                                        X_Node__actualRemove( that );\r
-                                       that._state |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
+                                       that._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX;\r
                                        return;\r
                                };\r
                        };\r
                        \r
-                       if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
+                       if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
                                elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
                        };\r
                        \r
                        // attr\r
                        // TODO display:none の場合、更新をスキップ\r
-                       if( that._dirty & X_Node_Dirty.ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
+                       if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
                                rename = X_Node_Attr_renameForDOM;\r
                                \r
                                // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
@@ -1137,7 +1126,7 @@ var X_Node__updateRawNode =
                                                elm.appendChild( document.createTextNode( v || '' ) );\r
                                };\r
                                // http://outcloud.blogspot.jp/2010/09/iframe.html\r
-                               // この問題は firefox3.6 で確認\r
+                               // この問題は firefox3.6 で確認\r
                                if( X_UA.Gecko && that._tag === 'IFRAME' && ( ( v = attrs[ 'src' ] ) || X_Object_inObject( 'src', attrs ) ) ){\r
                                        elm.contentWindow.location.replace = elm.src = v || '';\r
                                        delete attrs[ 'src' ];\r
@@ -1155,7 +1144,7 @@ var X_Node__updateRawNode =
                        \r
                        // style\r
                        // TODO display:none の場合、更新をスキップ\r
-                       if( that._dirty & X_Node_Dirty.CSS ){\r
+                       if( that._flags & X_Node_State.DIRTY_CSS ){\r
                                if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
                                        X_UA.Opera78 || X_UA.NN6 ?\r
                                                elm.setAttribute( 'style', that._cssText ) : // opera8用\r
@@ -1167,16 +1156,18 @@ var X_Node__updateRawNode =
                                };\r
                        };\r
                        \r
-                       delete that._dirty;\r
+                       //delete that._flags;\r
+                       that._flags &= X_Node_DIRTY_MASK_RESET;\r
                }) :\r
        X_UA_DOM.IE4 ? \r
                ( function( that, elm ){\r
                        var attrs, rename, k, v;\r
 \r
                        // fake textNode\r
-                       if( that._dirty & X_Node_Dirty.CONTENT ){\r
+                       if( !that._tag ){\r
                                elm.innerText = that._text;\r
-                               delete that._dirty;\r
+                               //delete that._flags;\r
+                               that._flags &= X_Node_DIRTY_MASK_RESET;\r
                                return;\r
                        };\r
                        \r
@@ -1185,14 +1176,14 @@ var X_Node__updateRawNode =
                 * title、className、id、lang、language には setAttribute でなく、element.id で直接読み書きできる\r
                 */     \r
                        // id\r
-                       if( that._dirty & X_Node_Dirty.CONTENT ) elm.setAttribute( 'id', that._id || ( 'ie4uid' + xnode._uid ) );\r
+                       if( that._flags & X_Node_State.DIRTY_ID ) elm.setAttribute( 'id', that._id || ( 'ie4uid' + xnode._uid ) );\r
 \r
                        // className\r
-                       if( that._dirty & X_Node_Dirty.CLASSNAME ){\r
+                       if( that._flags & X_Node_State.DIRTY_CLASSNAME ){\r
                                that._className ? ( elm.className = that._className ) : elm.removeAttribute( 'class' );\r
                        };\r
                        // style\r
-                       if( that._dirty & X_Node_Dirty.CSS ){\r
+                       if( that._flags & X_Node_State.DIRTY_CSS ){\r
                                if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
                                        elm.style.cssText = that._cssText;\r
                                } else {\r
@@ -1202,25 +1193,24 @@ var X_Node__updateRawNode =
                                };\r
                        };\r
                        \r
-                       if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
+                       if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
                                that._rawObject.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
                        };\r
                        \r
                        // attr\r
-                       if( that._dirty & X_Node_Dirty.ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
+                       if( that._flags & X_Node_State.DIRTY_ATTR && ( attrs = that._newAttrs || that._attrs ) ){\r
                                rename = X_Node_Attr_renameForDOM;\r
                                for( k in attrs ){\r
                                        //if( X_EMPTY_OBJECT[ k ] ) continue;\r
                                        ( v = attrs[ k ] ) === undefined ?\r
                                                elm.removeAttribute( rename[ k ] || k ) :\r
-                                       //that._tag === 'TEXTAREA' && k === 'value' ?\r
-                                       //      ( elm.innerText = v ) :\r
                                                elm.setAttribute( rename[ k ] || k, X_Node_Attr_noValue[ k ] ? k : v );\r
                                };\r
                                delete that._newAttrs;\r
                        };\r
                        \r
-                       delete that._dirty;\r
+                       //delete that._flags;\r
+                       that._flags &= X_Node_DIRTY_MASK_RESET;\r
                }) :\r
                (function(){});\r
 \r
@@ -1248,12 +1238,13 @@ var X_Node__actualCreate =
                \r
                if( that._xnodeType === 3 ){\r
                        if( elm ) return elm;\r
-                       delete that._dirty;\r
+                       //delete that._flags;\r
+                       that._flags &= X_Node_DIRTY_MASK_RESET;\r
                        return that._rawObject = document.createTextNode( X_String_chrReferanceTo( that._text ) );\r
                };\r
                \r
                if( !elm ){\r
-                       if( that._dirty & X_Node_Dirty.CSS && !( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
+                       if( that._flags & X_Node_State.DIRTY_CSS && !( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
                                delete that._cssText;\r
                        };\r
                        that._isNew = true;\r
@@ -1291,7 +1282,7 @@ var X_Node__actualCreate =
                } else {\r
                        if( that._rawObject && !isChild ) X_Node__actualRemove( that, true );\r
                        \r
-                       if( that._dirty & X_Node_Dirty.CSS && !( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
+                       if( that._flags & X_Node_State.DIRTY_CSS && !( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
                                delete that._cssText;\r
                        };\r
                        \r
@@ -1308,7 +1299,7 @@ var X_Node__actualCreate =
                                        // only textnode\r
                                        html[ n ] = xnodes[ 0 ]._text;\r
                                        ++n;\r
-                                       that._state |= X_Node_State.IE4_ONLY_TEXT;\r
+                                       that._flags |= X_Node_State.IE4_ONLY_TEXT;\r
                                } else {\r
                                        for( i = 0; i < l; ++i ){\r
                                                html[ n ] = X_Node__actualCreate( xnodes[ i ], true );\r
@@ -1332,7 +1323,8 @@ var X_Node__afterActualCreate =
                that._root  = that.parent._root;\r
                \r
                if( that._xnodeType === 3 ){\r
-                       that._dirty && X_Node__updateRawNode( that, elm );\r
+                       // that._flags && X_Node__updateRawNode( that, elm );\r
+                       that._flags & X_Node_DIRTY_MASK && X_Node__updateRawNode( that, elm );\r
                        return that;\r
                };\r
                        \r
@@ -1352,18 +1344,19 @@ var X_Node__afterActualCreate =
                        };\r
                        \r
                        if( X_Node_strictElmCreation ){\r
-                               if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
+                               if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
                                        elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
                                };\r
-                               delete that._dirty;\r
+                               //delete that._flags;\r
+                               that._flags &= X_Node_DIRTY_MASK_RESET;\r
                        } else {\r
                                elm.UID = that._uid;\r
                                that._newAttrs = that._attrs;\r
-                               that._dirty = X_Node_Dirty.ID | X_Node_Dirty.CLASSNAME | X_Node_Dirty.CSS | X_Node_Dirty.ATTR | X_Node_Dirty.IE_FILTER;\r
+                               that._flags |= X_Node_State.DIRTY_ID | X_Node_State.DIRTY_CLASSNAME | X_Node_State.DIRTY_ATTR | X_Node_State.DIRTY_CSS | X_Node_State.DIRTY_IE_FILTER;\r
                                X_Node__updateRawNode( that, elm );\r
                                \r
                                // http://outcloud.blogspot.jp/2010/09/iframe.html\r
-                               // この問題は firefox3.6 で確認\r
+                               // この問題は firefox3.6 で確認\r
                                if( X_UA.Gecko && that._tag === 'IFRAME' ){\r
                                        if( !that._attrs[ 'src' ] ){\r
                                                elm.contentWindow.location.replace = elm.src = 'about:blank'; \r
@@ -1379,10 +1372,11 @@ var X_Node__afterActualCreate =
                        };\r
                        // 親要素の updateRawNode 前に子要素の updateRawNode を行う\r
                        // 親要素が GPU レイヤーに転送されるケースがあるので、先に子要素の変更を済ませる\r
-                       that._dirty && X_Node__updateRawNode( that, elm );\r
+                       //that._flags && X_Node__updateRawNode( that, elm );\r
+                       that._flags & X_Node_DIRTY_MASK && X_Node__updateRawNode( that, elm );\r
                };      \r
 \r
-               // src の onload があるので先ではないか?\r
+               // src の onload があるので先ではないか?\r
                // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
                X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
        }) :\r
@@ -1397,11 +1391,11 @@ var X_Node__afterActualCreate =
                                X_Node__afterActualCreate( xnodes[ --i ] );\r
                        };\r
                };\r
-               // textarea への value の適用はここで\r
-               if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
+               if( that._flags & X_Node_State.DIRTY_IE_FILTER ){\r
                        X_Node__ie4getRawNode( that ).style.filter = X_Node_CSS_objToIEFilterText( that );;\r
                };\r
-               delete that._dirty;\r
+               //delete that._flags;\r
+               that._flags &= X_Node_DIRTY_MASK_RESET;\r
                X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
        }) :\r
        (function(){});\r
@@ -1424,7 +1418,7 @@ var X_Node__actualRemove =
                        if( !elm ) return;\r
                        that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
                        if( !X_UA.MacIE ){\r
-                               // elm.parentNode.tagName for ie7 -> that.state & BELONG_TREE_ACTUAL\r
+                               // elm.parentNode.tagName for ie7 -> that.state & ELM_IN_TREE\r
                                !isChild && elm.parentNode && elm.parentNode.tagName && elm.parentNode.removeChild( elm );\r
                        } else {\r
                                !isChild && elm.parentNode && elm.parentNode.tagName && X_TEMP._fixed_remove( elm, that );\r
index edddde6..4dc8d66 100644 (file)
@@ -73,7 +73,7 @@ Node.prototype.width = function(){
                console.log( 'xnode.width() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'width' );\r
                return this._rawObject.offsetWidth;\r
@@ -95,7 +95,7 @@ Node.prototype.height = function(){
                console.log( 'xnode.height() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'height' );\r
                return this._rawObject.offsetHeight;\r
@@ -117,7 +117,7 @@ Node.prototype.clientWidth = function(){
                console.log( 'xnode.width() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'width' );\r
                return this._rawObject.clientWidth;\r
@@ -139,7 +139,7 @@ Node.prototype.clientHeight = function(){
                console.log( 'xnode.height() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'height' );\r
                return this._rawObject.clientHeight;\r
@@ -161,7 +161,7 @@ Node.prototype.scrollWidth = function(){
                console.log( 'xnode.width() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'width' );\r
                return this._rawObject.scrollWidth;\r
@@ -183,7 +183,7 @@ Node.prototype.scrollHeight = function(){
                console.log( 'xnode.height() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'height' );\r
                return this._rawObject.scrollHeight;\r
@@ -205,7 +205,7 @@ Node.prototype.scrollLeft = function(){
                console.log( 'xnode.scrollLeft() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'width' );\r
                return this._rawObject.scrollLeft;\r
@@ -227,7 +227,7 @@ Node.prototype.scrollTop = function(){
                console.log( 'xnode.scrollTop() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'width' );\r
                return this._rawObject.scrollTop;\r
@@ -257,7 +257,7 @@ Node.prototype.x = function(){
                console.log( 'xnode.x() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'left' );\r
                // this.css( X_Node_CSS_Unit.px, 'translateX' );\r
@@ -280,7 +280,7 @@ Node.prototype.y = function(){
                console.log( 'xnode.y() : not belong tree.' );\r
                return 0;\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return 0;\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return 0;\r
        if( X_UA_DOM.W3C ){\r
                // this.css( X_Node_CSS_Unit.px, 'top' );\r
                // this.css( X_Node_CSS_Unit.px, 'transisitonY' );\r
@@ -305,7 +305,7 @@ Node.prototype.offset = function( /* xnodeParent */ ){
                console.log( 'xnode.offset() : not belong tree.' );\r
                return { x : 0, y : 0 };\r
        };\r
-       if( this._state & X_Node_State.DISPLAY_NONE ) return { x : 0, y : 0 };\r
+       if( this._flags & X_Node_State.STYLE_IS_DISPLAY_NONE ) return { x : 0, y : 0 };\r
        \r
        if( X.Doc.body === this || X.Doc.html === this ){\r
                return { x : 0, y : 0 };\r
index 8b1237a..a4669c8 100644 (file)
@@ -113,7 +113,7 @@ Node.prototype.attr = function( nameOrObj /* v */ ){
                };\r
                if( f ){\r
                        this._attrText = false;\r
-                       this._dirty |= X_Node_Dirty.ATTR;\r
+                       this._flags |= X_Node_State.DIRTY_ATTR;\r
                        this._root && X_Node_reserveUpdate();\r
                };\r
                return this;\r
@@ -122,7 +122,7 @@ Node.prototype.attr = function( nameOrObj /* v */ ){
                // setter\r
                if( X_Node_Attr_setAttr( this, attrs || ( this._attrs = {} ), this._newAttrs || ( this._newAttrs = {} ), nameOrObj, arguments[ 1 ] ) === true ){\r
                        this._attrText = false;\r
-                       this._dirty |= X_Node_Dirty.ATTR;\r
+                       this._flags |= X_Node_State.DIRTY_ATTR;\r
                        this._root && X_Node_reserveUpdate();\r
                };\r
                return this;\r
@@ -138,6 +138,8 @@ Node.prototype.attr = function( nameOrObj /* v */ ){
                        case 'tag' :\r
                        case 'tagName' :\r
                                return this._tag;\r
+                       case 'nodeType' :\r
+                               return this._tag ? 1 : 3;\r
                        case 'style' :\r
                        case 'cssText' :\r
                                return this.cssText();\r
@@ -186,7 +188,7 @@ function X_Node_Attr_setAttr( that, attrs, newAttrs, name, v ){
                        // TODO unique の check\r
                        if( v !== that._id ){\r
                                that._id = v;\r
-                               that._dirty |= X_Node_Dirty.ID;\r
+                               that._flags |= X_Node_State.DIRTY_ID;\r
                                that._root && X_Node_reserveUpdate();\r
                        };\r
                        return; \r
index 13e5450..09c399b 100644 (file)
@@ -394,7 +394,7 @@ function X_Node_CSS_objToIEFilterText( that, opt_css ){
 
 function X_Node_CSS_onAfterUpdateForIEFilterFix(){
        if( this._root ){ // 要素があり、要素がツリーに属している
-               this._dirty |= X_Node_Dirty.IE_FILTER;
+               this._flags |= X_Node_State.DIRTY_IE_FILTER;
                X_Node_reserveUpdate();
        };
 };
@@ -497,16 +497,16 @@ Node.prototype.css = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){
                        if( plain[ p ] ) continue;
                        
                        if( ieFix && ieFix[ p ] ){
-                               this._dirty |= X_Node_Dirty.IE_FILTER;
+                               this._flags |= X_Node_State.DIRTY_IE_FILTER;
                        };
                        v = nameOrObj[ p ];
                        v || v === 0 ? css[ camelize( p ) ] = v : delete css[ camelize( p ) ];
                        if( p === 'display' ){
-                               v === 'none' ? ( this._state |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
-                               v === 'none' ? ( this._state |= X_Node_State.DISPLAY_NONE ) : ( this._state &= ~X_Node_State.DISPLAY_NONE );
+                               v === 'none' ? ( this._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
+                               v === 'none' ? ( this._flags |= X_Node_State.STYLE_IS_DISPLAY_NONE ) : ( this._flags &= ~X_Node_State.STYLE_IS_DISPLAY_NONE );
                        };
                };
-               this._dirty |= X_Node_Dirty.CSS;
+               this._flags |= X_Node_State.DIRTY_CSS;
                this.parent && X_Node_reserveUpdate();
                delete this._cssText;
                return this;
@@ -518,7 +518,7 @@ Node.prototype.css = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){
                v    = args[ 1 ];
                if( css[ name ] === v ) return this;
                if( X_Node_CSS_FILTER_FIX_PROPS && X_Node_CSS_FILTER_FIX_PROPS[ name ] ){
-                       this._dirty |= X_Node_Dirty.IE_FILTER;
+                       this._flags |= X_Node_State.DIRTY_IE_FILTER;
                };
                if( !v && v !== 0 ){
                        delete css[ name ];
@@ -526,12 +526,12 @@ Node.prototype.css = function( nameOrObj /* orUnitID, valuOrUnitOrName */ ){
                        css[ name ] = v;
                };
                delete this._cssText;
-               this._dirty |= X_Node_Dirty.CSS;
+               this._flags |= X_Node_State.DIRTY_CSS;
                if( name === 'display' ){
-                       v === 'none' ? ( this._state |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
-                       v === 'none' ? ( this._state |= X_Node_State.DISPLAY_NONE ) : ( this._state &= ~X_Node_State.DISPLAY_NONE );
+                       v === 'none' ? ( this._flags |= X_Node_State.IE5_DISPLAY_NONE_FIX ) : ( this._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX );
+                       v === 'none' ? ( this._flags |= X_Node_State.STYLE_IS_DISPLAY_NONE ) : ( this._flags &= ~X_Node_State.STYLE_IS_DISPLAY_NONE );
                };
-               // parent でなく this._root! でなくて this._state & in tree
+               // TODO this._flags & in tree
                this.parent && X_Node_reserveUpdate();
                return this;
        };
@@ -546,15 +546,15 @@ Node.prototype.cssText = function( v ){
        var obj, i, l, attr, name;
        if( v === '' ){
                delete this._css;
-               this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
-               this._dirty |= X_Node_Dirty.CSS;
+               this._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
+               this._flags |= X_Node_State.DIRTY_CSS;
                this.parent && X_Node_reserveUpdate();
                delete this._cssText;
                return this;
        } else
        if( X.Type.isString( v ) ){
                delete this._css;
-               this._state &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
+               this._flags &= ~X_Node_State.IE5_DISPLAY_NONE_FIX;
                obj = {};
                v   = v.split( ';' ); // TODO content ";" などにも対応
                for( i = 0, l = v.length; i < l; ++i ){
@@ -564,7 +564,7 @@ Node.prototype.cssText = function( v ){
                return this.css( obj );
        };
        // getter
-       if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X_Node_CSS_objToCssText( this ) ) ){
+       if( this._flags & X_Node_State.DIRTY_CSS && !( this._cssText = X_Node_CSS_objToCssText( this ) ) ){
                delete this._cssText;
        };
        return this._cssText;
index 9a1dc75..03c3853 100644 (file)
@@ -66,7 +66,8 @@ var X_Node_ANIMATIONS            = [],
        /* Opera mobile で  translateZ(0) が有効だと XY が 0 0 になる */\r
        /* GPUレイヤーにいる間に要素のコンテンツを変更をすると transitionend が動かなくなるっぽい Mac safari と firefox, 手当てが済むまでここは常に false */\r
        X_Node_Anime_translateZ      = X_Node_CSS_VENDER_PREFIX[ 'perspective' ] && !X_UA.OperaMobile && !X_UA.OperaTablet ? ' translateZ(0)' : '',\r
-       X_Node_Anime_hasTransition   = !!X_Node_CSS_VENDER_PREFIX[ 'transitionDelay' ] && !X_UA.Opera, // Opera12(XP,8.1) 切った方がスムース\r
+       /* Opera12(XP,8.1) 切った方がスムース, win Safari3 で、たまに動作が止まってしまう、、、 */\r
+       X_Node_Anime_hasTransition   = !!X_Node_CSS_VENDER_PREFIX[ 'transitionDelay' ] && !X_UA.Opera && !( X_UA.Webkit <= 528.16 ),\r
        X_Node_Anime_transitionProps = X_Node_Anime_hasTransform ? X_Node_CSS_VENDER_PREFIX[ 'transform' ] : 'left,top',\r
        // transitionEnd イベント中に要素の更新( X_Node_startUpdate() )ができるか?\r
        // iOS3+4 では可能、iOS6.1.5 で不可。TODO iOS5 及び他の環境で調査。ダメな場合、anime.html が正しく描画されない。\r
index caf6555..a422d9d 100644 (file)
@@ -368,7 +368,7 @@ X_TEMP.bindElementToXnode =
                                                        xnode._tag = tag;\r
                                                //};\r
                                                xnode._root   = parent._root;\r
-                                               xnode._dirty  = 0;\r
+                                               xnode._flags &= X_Node_DIRTY_MASK_RESET;\r
                                                elm.UID       = xnode._uid;\r
                                                current.xtext = null;\r
                                                \r
@@ -419,7 +419,7 @@ X_TEMP.bindElementToXnode =
                                \r
                                ++current.j;\r
                                xnode._rawObject = elm;\r
-                               xnode._dirty     = 0;\r
+                               xnode._flags    &= X_Node_DIRTY_MASK_RESET;\r
                                xnode._text      = elm.data; // 正確\r
                                xnode._root      = parent._root;\r
                                if( !skipCleanup ){\r
@@ -501,7 +501,7 @@ X_TEMP.bindElementToXnode =
                                        ++current.j;\r
                                        \r
                                        xnode._rawObject = elm;\r
-                                       xnode._dirty     = 0;\r
+                                       xnode._flags    &= X_Node_DIRTY_MASK_RESET;\r
                                        xnode._root      = parent._root;\r
                                        //xnode._tag     = X_Dom_DTD_TAG_FIX[ tag ] || tag;\r
                                        if( X_TEMP._isCleanupTarget( elm ) ){ //!xnode.hasClass( 'skip-cleanup' ) && ( X_Dom_DTD_CLEANUP_TAGS[ tag ] || xnode.hasClass( 'cleanup-target' ) ) ){\r
@@ -545,7 +545,7 @@ X_TEMP.bindElementToXnode =
                        };\r
                \r
                        // textNode がある\r
-                       ( current.flag & 6 ) && ( parent._dirty |= X_Node_Dirty.IE4_TEXTNODE_FIX );\r
+                       ( current.flag & 6 ) && ( parent._flags |= X_Node_State.IE4_TEXTNODE_FIX );\r
                });\r
 \r
 console.log( 'X.Dom.Builder' );\r
index 85ae252..6be609a 100644 (file)
@@ -96,7 +96,7 @@ X.Util.NinjaIframe = X.EventDispatcher.inherits(
                        this._ready = false;\r
                        \r
                        if( !this._iwin ){\r
-                               this._contentHTML = opt_html;\r
+                               this._contentHTML = opt_contentHTML;\r
                                return this;\r
                        };\r
                        \r
@@ -106,9 +106,9 @@ X.Util.NinjaIframe = X.EventDispatcher.inherits(
                                this._iwin.location.reload();\r
                        };\r
                        \r
-                       if( !opt_html ) return this;\r
+                       if( !opt_contentHTML ) return this;\r
                        \r
-                       this._contentHTML = opt_html;\r
+                       this._contentHTML = opt_contentHTML;\r
                        X_UA.IE < 9 || X_Util_NinjaIframe_writeToIframe( this );\r
                        \r
                        return this;\r