* \r
* Opera7 では毎回 image を作る必要あり、src が異なればOK?\r
*/\r
+\r
+X_TEMP.X_NET_Image_init = function(){\r
+\r
+delete X_TEMP.X_NET_Image_init;\r
+\r
X_NET_ImageWrapper = X_Class_override(\r
!X_Net_Image_isElement ? X_EventDispatcher( X_Net_Image_image ) : Node( X_Net_Image_image ),\r
{\r
\r
load : function( data ){\r
this._busy = true;\r
- this.abspath = X.URL.toAbsolutePath( data.url );\r
- this.delay = data.delay || 100;\r
- this.timeout = data.timeout || 5000;\r
+ this.abspath = X_URL_toAbsolutePath( data[ 'url' ] );\r
+ this.delay = data[ 'delay' ] || 100;\r
+ this.timeout = data[ 'timeout' ] || 5000;\r
\r
this[ '_rawObject' ].src = this.abspath;\r
\r
if( X_UA[ 'Opera7' ] && this[ '_rawObject' ].complete ){\r
this[ 'asyncDispatch' ]( 'load' );\r
} else {\r
- this.timerID = X_Timer_add( this.delay, 0, this, this._detect );\r
- };\r
- },\r
- \r
- handleEvent : function( e ){\r
- var size;\r
- switch( e.type ){\r
- case 'error' :\r
- //case 'abort' : // TODO ??\r
- if( this.finish ) return;\r
- this._busy = false;\r
- this.finish = true;\r
- this.timerID && X_Timer_remove( this.timerID );\r
- this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );\r
- break;\r
- case 'load' :\r
- // if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
- // if( timer ) return; // これがあると safari3.2 で駄目、、、\r
- this._busy = false;\r
- this.finish = true;\r
- this.timerID && X_Timer_remove( this.timerID );\r
- if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){\r
- this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
- return;\r
- };\r
- size = X.Util.Image.getActualDimension( !X_Net_Image_isElement ? this.abspath : this );\r
- this.timerID = this[ 'asyncDispatch' ]( {\r
- type : X_EVENT_SUCCESS,\r
- src : this.abspath,\r
- w : size[ 0 ],\r
- h : size[ 1 ]\r
- // TODO feedback net speed\r
- // time , this[ '_rawObject' ].fileSize\r
- } );\r
- break;\r
- case X_EVENT_KILL_INSTANCE :\r
- this.reset();\r
- !X_Net_Image_hasImage && this[ 'kill' ](); // if xnode\r
- break;\r
- };\r
- },\r
- \r
- _detect : function(){\r
- if( this.finish ) return;\r
- if( this[ '_rawObject' ] && this[ '_rawObject' ].complete ){\r
- this._busy = false;\r
- this.finish = true;\r
- if( this[ '_rawObject' ].width ) return;\r
- X_Timer_remove( this.timerID );\r
- this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
- } else\r
- if( this.timeout < ( this.tick += this.delay ) ){\r
- this._busy = false;\r
- this.finish = true;\r
- X_Timer_remove( this.timerID );\r
- this.timerID = this[ 'asyncDispatch' ]( X_EVENT_TIMEOUT );\r
+ this.timerID = X_Timer_add( this.delay, 0, this, X_NET_Image_detect );\r
};\r
},\r
\r
// this[ '_rawObject' ].src = '';\r
this._busy = false;\r
this.finish = true;\r
- this[ 'asyncDispatch' ]( X_EVENT_CANCELED );\r
},\r
\r
reset : function(){\r
}\r
);\r
\r
-X_NET_ImageWrapper[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ] );\r
+X_NET_ImageWrapper[ 'listen' ]( [ 'load', 'error' /*, 'abort'*/, X_EVENT_KILL_INSTANCE ], X_NET_Image_handleEvent );\r
+\r
+return X_NET_ImageWrapper;\r
+\r
+};\r
+\r
+function X_NET_Image_detect(){\r
+ if( this.finish ) return;\r
+ if( this[ '_rawObject' ] && this[ '_rawObject' ].complete ){\r
+ this._busy = false;\r
+ this.finish = true;\r
+ if( this[ '_rawObject' ].width ) return;\r
+ X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
+ } else\r
+ if( this.timeout < ( this.tick += this.delay ) ){\r
+ this._busy = false;\r
+ this.finish = true;\r
+ X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_TIMEOUT );\r
+ };\r
+};\r
+\r
+function X_NET_Image_handleEvent( e ){\r
+ var size;\r
+ \r
+ switch( e.type ){\r
+ case 'error' :\r
+ //case 'abort' : // TODO ??\r
+ if( this.finish ) return;\r
+ this._busy = false;\r
+ this.finish = true;\r
+ this.timerID && X_Timer_remove( this.timerID );\r
+ this.timerID = this[ 'asyncDispatch' ]( /*e.type === 'error' ?*/ X_EVENT_ERROR /*: X_EVENT_CANCELED*/ );\r
+ break;\r
+\r
+ case 'load' :\r
+ // if( finish === true ) return; // これがあると firefox3.6 で駄目、、、\r
+ // if( timer ) return; // これがあると safari3.2 で駄目、、、\r
+ this._busy = false;\r
+ this.finish = true;\r
+ this.timerID && X_Timer_remove( this.timerID );\r
+ if( X_UA[ 'Opera' ] && !this[ '_rawObject' ].complete ){\r
+ this.timerID = this[ 'asyncDispatch' ]( X_EVENT_ERROR );\r
+ return;\r
+ };\r
+\r
+ size = X_Util_Image_getActualDimension( !X_Net_Image_isElement ? this.abspath : this );\r
+ this.timerID = this[ 'asyncDispatch' ]( {\r
+ type : X_EVENT_SUCCESS,\r
+ src : this.abspath,\r
+ w : size[ 0 ],\r
+ h : size[ 1 ]\r
+ // TODO feedback net speed\r
+ // time , this[ '_rawObject' ].fileSize\r
+ } );\r
+ break;\r
+\r
+ case X_EVENT_KILL_INSTANCE :\r
+ this.reset();\r
+ !X_Net_Image_hasImage && this[ 'kill' ](); // if xnode\r
+ break;\r
+ };\r
+};\r
+\r
\r
// X_Net_Image_isElement && X_NET_ImageWrapper[ 'appendAt' ]( X.X_Node_systemNode );\r