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
*/ \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
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
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
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
};\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
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
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
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
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
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
};\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
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
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
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
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
/* --------------------------------------\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
};\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
};\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
};\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
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
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
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
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
};\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
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
\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
};\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
* 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
};\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
\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
} 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
// 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
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
};\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
};\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
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
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