} else\r
if( X_Node_newByText ){\r
X_Node_newByText = false;\r
- this._text = v;\r
- this._xnodeType = 3;\r
- this._state = X_Node_State.DISPLAY_INLINE;\r
+ this._text = v;\r
+ this._xnodeType = 3;\r
+ this._state = X_Node_State.DISPLAY_INLINE;\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
- //if( !this || this.append !== X_Node_append ){\r
- // return new Node( v );\r
- //};\r
+\r
switch( X_Node_getType( v ) ){\r
case X_Node_TYPE.XNODE :\r
case X_Node_TYPE.XNODE_LIST :\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
- case X_Node_TYPE.WINDOW :\r
- case X_Node_TYPE.DOCUMENT :\r
- if( xnode = X_Node_getXNode( v ) ) return xnode;\r
- this._rawObject = v;\r
- this._xnodeType = 2;\r
- this._state = X_Node_State.DISPLAY_BLOCK;\r
break; */\r
default :\r
if( X_Node_none ) return X_Node_none;\r
\r
getChildAt : X_Node_getChildAt,\r
\r
+ numChildren : X_Node_length,\r
+ \r
firstChild : X_Node_firstChild,\r
\r
lastChild : X_Node_lastChild,\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.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
case X_Node_TYPE.XNODE_LIST :\r
return v;\r
case X_Node_TYPE.RAW_HTML :\r
- case X_Node_TYPE.IMAGE :\r
+ //case X_Node_TYPE.IMAGE :\r
// fake TextNode too.\r
if( X_UA_DOM.IE4 ){\r
uid = v.getAttribute( 'UID' );\r
};\r
};\r
\r
-\r
-X.Doc.create = Node.create = function( tag, opt_attrs, opt_css ){\r
- var list, i;\r
- switch( X_Node_getType( tag ) ){\r
- case X_Node_TYPE.STRING :\r
- X_Node_newByTag = true;\r
- return new Node( tag, opt_attrs, opt_css );\r
- case X_Node_TYPE.HTML_STRING :\r
- list = X_HtmlParser_parse( tag, true );\r
- for( i = list.length; 1 < i; ){\r
- list[ --i ].destroy();\r
- };\r
- return list[ 0 ];\r
- };\r
-};\r
-X.Doc.createText = Node.createText = function( text ){\r
- X_Node_newByText = true;\r
- return new Node( text );\r
-};\r
-\r
-\r
function X_Node_getRoot( xnode ){\r
return X_ViewPort_document;\r
//return X_Node_body._rawObject.documentElement ? node : node.ownerDocument || node.document;\r
};\r
// XMLかどうかを判別する\r
var X_Node_isXmlDocument =\r
- X_UA_DOM.IE4 ?\r
- X.emptyFunction :\r
- (function( root ){\r
- if( X.Type.isBoolean( root.isXML ) ) return root.isXML;\r
- return root.isXML = root._rawObject.createElement( 'p' ).tagName !== root._rawObject.createElement( 'P' ).tagName;\r
- }),\r
+ X_UA_DOM.IE4 ?\r
+ X.emptyFunction :\r
+ (function( root ){\r
+ if( X.Type.isBoolean( root.isXML ) ) return root.isXML;\r
+ return root.isXML = root._rawObject.createElement( 'p' ).tagName !== root._rawObject.createElement( 'P' ).tagName;\r
+ }),\r
X_Node_CHASHE = [],\r
X_Node_none = X_Node_CHASHE[ 0 ] = new Node(),\r
X_Node_html, // = X_Node_CHASHE[ 1 ] <html>\r
if( this._xnodeType !== 1 ) return;\r
if( !this._xnodes ) this._xnodes = [];\r
\r
- xnode = Node.create( tag, opt_attrs, opt_css );\r
+ xnode = X_Doc_create( tag, opt_attrs, opt_css );\r
\r
xnode.parent = this;\r
this._xnodes[ this._xnodes.length ] = xnode;\r
return xnode;\r
};\r
function X_Node_createAt( index, tag, opt_attrs, opt_css ){\r
- var xnode = Node.create( tag, opt_attrs, opt_css );\r
+ var xnode = X_Doc_create( tag, opt_attrs, opt_css );\r
this.appendAt( index, xnode );\r
return xnode;\r
};\r
return xnode;\r
};\r
function X_Node_createTextAt( index, text ){\r
- var xtext = Node.createText( text );\r
+ var xtext = X_Doc_createText( text );\r
this.appendAt( index, xtext );\r
return xtext;\r
};\r
return xnodes && 0 <= i && i < xnodes.length && xnodes[ i ];\r
};\r
\r
+function X_Node_length(){\r
+ var xnodes = this._xnodes;\r
+ return xnodes ? xnodes.length : 0;\r
+};\r
\r
/* --------------------------------------\r
* firstChild, lastChild\r
names = v.split( ' ' );\r
for( i = names.length; i; ){\r
name = names[ --i ];\r
- this.hassClass( name ) ? this.removeClass( name ) : this.addClass( name );\r
+ this.hasClass( name ) ? this.removeClass( name ) : this.addClass( name );\r
};\r
return this;\r
};\r
return html.join( _ );\r
};\r
\r
+/*\r
+ * null が来たら '', 数値等が来たら文字烈化\r
+ */\r
function X_Node_text( text ){\r
var xnodes, texts, i, l;\r
// setter\r
if( text !== undefined ){\r
+ if( text === null ) text = '';\r
+ text += '';\r
+ \r
if( this._xnodeType === 3 ){\r
if( this._text !== text ){\r
text ? ( this._text = text ) : delete this.text;\r
* HTML要素に対して name の関数を実行しその戻り値を返す。関数に渡す引数も任意に設定できる。\r
*/\r
function X_Node_call( name /*, opt_args... */ ){\r
- var raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this ),\r
- l = arguments.length - 1,\r
- func, args, params, i;\r
+ var l = arguments.length - 1,\r
+ raw, func, args, params, i;\r
+ \r
+ X_Node_updateTimerID && X_Node_startUpdate();\r
+ \r
+ raw = this._rawObject || X_UA_DOM.IE4 && X_Node__ie4getRawNode( this );\r
if( !raw ) return;\r
+ \r
func = raw[ name ];\r
if( X.Type.isFunction( func ) ){\r
if( l ){\r
if( !X_Node_updateTimerID ) X_Node_updateTimerID = X.Timer.requestFrame( X_Node_startUpdate );\r
};\r
\r
-function X_Node_startUpdate(){\r
+function X_Node_startUpdate( time ){\r
var removal, i, xnode, tmp;\r
\r
if( !X_Node_updateTimerID || X_ViewPort_readyState < X_TEMP.SYSTEM_EVENT_INIT ){\r
X.Timer.cancelFrame( X_Node_updateTimerID );\r
X_Node_updateTimerID = 0;\r
\r
-\r
- // このイベントでサイズを取ると無限ループに\r
- X_System._listeners && X_System._listeners[ X.Event.BEFORE_UPDATE ] && X_System.dispatch( X.Event.BEFORE_UPDATE );\r
+ if( time ){\r
+ // X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
+ X_System._listeners && X_System._listeners[ X.Event.BEFORE_UPDATE ] && X_System.dispatch( X.Event.BEFORE_UPDATE );\r
+ };\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
+ if( time ){\r
+ // X.Timer 経由でないと発火しない このイベントでサイズを取ると無限ループに\r
+ X_System._listeners && X_System._listeners[ X.Event.UPDATED ] && X_System.dispatch( X.Event.UPDATED ); \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
X_Node__afterActualCreate( xnodes[ i ] );\r
};\r
// src の onload があるので先ではないか?\r
- // ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
+ // TODO ie の str から要素を作る場合、srcだけ イベント設定後ではないか?\r
X_EventDispatcher_toggleAllEvents( that, true );// イベントの復帰\r
}) :\r
X_UA_DOM.IE4 ? (function( that ){\r
\r
var X_Node__actualRemove =\r
X_UA_DOM.W3C ?\r
+ // GPUレイヤーにいるうちは remove しない。-> GPU解除してから remove する\r
+ // Firefox34 では遭遇せず、Safari で何度かアニメーションしているうちに発生\r
( function( that, isChild ){\r
var xnodes = that._xnodes,\r
elm = that._rawObject,\r