CHILD_IS_DIRTY : 1,\r
ID : 2, // width, height, x, y\r
CONTENT : 4, // width, height, x, y textNode の内容\r
- CLASSNAME : 8, // _getCharSize, width, height, x, y\r
- ATTR : 16, // _getCharSize, width, height, x, y\r
- CSS : 32, // _getCharSize, width, height, x, y\r
- IE_FILTER : X.UA.IE < 9 && !X.UA.MacIE ? 64 : 0,\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,\r
- BELONG_TREE : 2,\r
- DISPLAY_NONE : 4,\r
- DISPLAY_BLOCK : 8,\r
- DISPLAY_INLINE : 16,\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_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
+ IE5_DISPLAY_NONE_FIX : !X_UA.MacIE && X_UA.IE5 ? 4096 : 0 // filterがかかっていると不可? MacIE5.2- は ?\r
},\r
\r
X_Node_TYPE = {\r
IMAGE : 10\r
},\r
\r
- X_Node_strictElmCreation = !X.UA.MacIE && X.UA.IE5678,// && !X.UA.MacIE;\r
+ X_Node_strictElmCreation = !X_UA.MacIE && X_UA.IE5678,// && !X_UA.MacIE;\r
\r
- X_Node_useDocumentFragment = document.createDocumentFragment && ( !X.UA.IE || 5.5 <= X.UA.IE ) && document.createDocumentFragment(),\r
+ X_Node_useDocumentFragment = document.createDocumentFragment && ( !X_UA.IE || 5.5 <= X_UA.IE ) && document.createDocumentFragment(),\r
\r
- X_Node_newByTag = false,\r
+ X_Node_newByTag = false,\r
\r
- X_Node_newByText = false,\r
+ X_Node_newByText = false,\r
\r
- X_Node_outerXNode = null,\r
+ X_Node_outerXNode = null,\r
+ \r
+ X_Node_updateTimerID = 0,\r
/*\r
* Node( rawElement | rawTextnode | htmlString | textString )\r
*/ \r
_rawObject : null,\r
_rect : null, // \r
\r
- _root : null, // xnode が文書ツリーに属しているか?はこれを見る\r
+ _root : null, // xnode が文書ツリーに属しているか?はこれを見る -> state\r
parent : null, // remove された枝も親子構造は維持している。\r
_xnodes : null,\r
\r
var css, xnodes, xnode, parent, uid = X_Node_CHASHE.length;\r
\r
if( X_Node_newByTag ){\r
- X_Node_newByTag = false;\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._state = X_Node_State.DISPLAY_INLINE; // TODO\r
arguments[ 1 ] && this.attr( arguments[ 1 ] );\r
css = arguments[ 2 ];\r
css && this[ X.Type.isString( css ) ? 'cssText' : 'css' ]( css );\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
- this._root = this.parent ? this.parent._root : null;\r
+ if( this.parent && this.parent._root ) this._root = this.parent._root;\r
this._rawObject = v;\r
this._xnodeType = 1;\r
- this._state = X_Node_State.DISPLAY_BLOCK; // todo\r
+ this._state = X_Node_State.DISPLAY_BLOCK; // TODO\r
this._tag = v.tagName.toUpperCase();\r
this._id = v.id;\r
this._className = v.className;\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
- this._root = this.parent ? this.parent._root : null;\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
};\r
return v.UID && X_Node_CHASHE[ v.UID ];\r
case X_Node_TYPE.WINDOW :\r
- return X.ViewPort;\r
+ return X_ViewPort;\r
case X_Node_TYPE.DOCUMENT :\r
return X_ViewPort_document;\r
case X_Node_TYPE.RAW_TEXT :\r
return this._text;\r
};\r
\r
- if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X_Node_CSS_objToCssText( this._css ) ) ){\r
+ if( this._dirty & X_Node_Dirty.CSS && !( this._cssText = X_Node_CSS_objToCssText( this ) ) ){\r
delete this._cssText;\r
};\r
html = !X_Node_outerXNode ? [] : [\r
*/\r
\r
function X_Node_reserveUpdate(){\r
- var root = X_Node_body;\r
- if( root && !root._updateTimerID ) root._updateTimerID = X.Timer.requestFrame( X_Node_startUpdate );\r
+ if( !X_Node_updateTimerID ) X_Node_updateTimerID = X.Timer.requestFrame( X_Node_startUpdate );\r
};\r
\r
function X_Node_startUpdate(){\r
var removal, i, xnode, tmp;\r
- if( X_ViewPort_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
- return;\r
- };\r
- if( X_Node_body._updateTimerID ){\r
- X.Timer.cancelFrame( X_Node_body._updateTimerID );\r
- X_Node_body._updateTimerID = 0;\r
- } else {\r
+ \r
+ if( !X_Node_updateTimerID || X_ViewPort_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
return;\r
};\r
+\r
+ X.Timer.cancelFrame( X_Node_updateTimerID );\r
+ X_Node_updateTimerID = 0;\r
+\r
+\r
// このイベントでサイズを取ると無限ループに\r
- // X_ViewPort._listeners && X_ViewPort._listeners[ X.Event.BEFORE_UPDATE ] && X_ViewPort.dispatch( X.Dom.Event.BEFORE_UPDATE );\r
+ X_System._listeners && X_System._listeners[ X.Event.BEFORE_UPDATE ] && X_System.dispatch( X.Event.BEFORE_UPDATE );\r
\r
removal = X_Node_reserveRemoval;\r
\r
\r
//console.log( 'end of _startUpdate().' );\r
\r
+ X_System._listeners && X_System._listeners[ X.Event.UPDATED ] && X_System.dispatch( X.Event.UPDATED );\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
frg.appendChild( X_Node__actualCreate( xnodes[ i ], true ) );\r
};\r
elm.appendChild( frg );\r
- for( i = 0; i < l; ++i ){\r
- X_Node__actualCreate( xnodes[ i ], true );\r
- };\r
} else {*/\r
for( ; l; ){\r
next = X_Node__commitUpdate( xnodes[ --l ], elm, next );\r
};\r
// className\r
if( that._dirty & X_Node_Dirty.CLASSNAME ){\r
- that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X.UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
+ that._className ? ( elm.className = that._className ) : ( elm.className && elm.removeAttribute( X_UA.IE5678 ? 'className' : 'class' ) ); // className は ie7-? \r
\r
// ie5 only\r
if( X_Node_State.IE5_DISPLAY_NONE_FIX && elm.currentStyle.display === 'none' ){\r
return;\r
};\r
};\r
+ \r
// style\r
// TODO display:none の場合、更新をスキップ\r
if( that._dirty & X_Node_Dirty.CSS ){\r
- if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that._css ) ) ){\r
- X.UA.Opera78 || X.UA.NN6 ?\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
( elm.style.cssText = that._cssText );\r
} else {\r
};\r
\r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
- elm.style.filter = X_Node_CSS_SPECIAL_FIX( that._css );\r
+ elm.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
rename = X_Node_Attr_renameForDOM;\r
for( k in attrs ){\r
- if( !X.UA.MacIE && ( X.UA.IE5 || X.UA.IE55 ) ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
+ if( !X_UA.MacIE && ( X_UA.IE5 || X_UA.IE55 ) ){ // IETester 5.5 ではエラーが出なかった.MultipulIE5.5 ではエラーが出たので\r
if( that._tag === 'TEXTAREA' && k === 'value' ){\r
elm.firstChild ?\r
( elm.firstChild.data = attrs[ k ] ) :\r
};\r
// style\r
if( that._dirty & X_Node_Dirty.CSS ){\r
- if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that._css ) ) ){\r
+ if( that._cssText !== null || ( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
elm.style.cssText = that._cssText;\r
} else {\r
elm.style.cssText = '';\r
};\r
\r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
- that._rawObject.style.filter = X_Node_CSS_SPECIAL_FIX( that._css );\r
+ that._rawObject.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
};\r
\r
// attr\r
for( k in attrs ){\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 ); // TODO X_Node_Attr_noValue[ k ] ? k : v\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
\r
if( !elm ){\r
- if( that._dirty & X_Node_Dirty.CSS && !( that._cssText = X_Node_CSS_objToCssText( that._css ) ) ){\r
+ if( that._dirty & X_Node_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._css ) ) ){\r
+ if( that._dirty & X_Node_Dirty.CSS && !( that._cssText = X_Node_CSS_objToCssText( that ) ) ){\r
delete that._cssText;\r
};\r
\r
};\r
if( X_Node_strictElmCreation ){\r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
- elm.style.filter = X_Node_CSS_SPECIAL_FIX( that._css );\r
+ elm.style.filter = X_Node_CSS_objToIEFilterText( that );;\r
};\r
delete that._dirty;\r
} else {\r
};\r
// textarea への value の適用はここで\r
if( that._dirty & X_Node_Dirty.IE_FILTER ){\r
- X_Node__ie4getRawNode( that ).style.filter = X_Node_CSS_SPECIAL_FIX( that._css );\r
+ X_Node__ie4getRawNode( that ).style.filter = X_Node_CSS_objToIEFilterText( that );;\r
};\r
delete that._dirty;\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
};\r
\r
if( !elm ) return;\r
- that._xnodeType === 1 && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
- // elm.parentNode.tagName for ie7\r
- if( !X.UA.MacIE ){\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
!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
};\r
\r
if( !elm ) return;\r
- that._xnodeType === 1 && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
+ that._listeners && X_EventDispatcher_toggleAllEvents( that, false );// イベントの退避\r
\r
if( X_Node_Attr_HAS_VALUE[ that._tag ] && ( !that._newAttrs || !X_Object_inObject( 'value', that._newAttrs ) ) ){\r
that._attrs.value = elm.value;\r
delete that._rawObject;\r
}) :\r
(function(){});\r
+\r
+X_ViewPort.listenOnce( X.Event.UNLOAD, X_Node__actualRemove, [ X_Node_html, true ] );\r
+\r