OSDN Git Service

Version 0.6.134, add comments for closure compiler.
[pettanr/clientJs.git] / 0.6.x / js / 05_util / 03_XUtilImage.js
1 \r
2 var X_Util_Image_actualSize = {};\r
3 \r
4 X[ 'Util' ][ 'Image' ] = {      \r
5         'getActualDimension' : X_Util_Image_getActualDimension\r
6         \r
7         // Alpha Image, data uri ong ...\r
8 };\r
9 \r
10 /*\r
11  * Opacity不可 NetFront3.4\r
12  */\r
13 \r
14 /*\r
15  * original\r
16  * LICENSE: MIT\r
17  * AUTHOR: uupaa.js@gmail.com\r
18  */\r
19 function X_Util_Image_getActualDimension( XnodeOrImageElemOrSrc ){\r
20         var xnode, img, remove, ret, run, memW, memH, w, h;\r
21 \r
22         if( X_Type_isString( XnodeOrImageElemOrSrc ) ){\r
23                 if( ret = X_Util_Image_actualSize[ X_URL_toAbsolutePath( XnodeOrImageElemOrSrc ) ] ) return ret;\r
24                 \r
25                 xnode = X_Node_systemNode[ 'create' ](\r
26                         'img',\r
27                         {\r
28                                 src : XnodeOrImageElemOrSrc\r
29                         },\r
30                         {\r
31                                 position   : 'absolute'\r
32                         }\r
33                 );\r
34                 X_Node_startUpdate();\r
35                 img    = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode[ '_rawObject' ];\r
36                 remove = true;\r
37         } else {\r
38                 if( XnodeOrImageElemOrSrc.constructor === X.Node ){\r
39                         xnode = XnodeOrImageElemOrSrc;\r
40                         img   = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )[ '_rawObject' ] : xnode[ '_rawObject' ];\r
41                 } else\r
42                 if( X_Type_isHTMLElement( XnodeOrImageElemOrSrc ) ){\r
43                         img = XnodeOrImageElemOrSrc;\r
44                 } else\r
45                 if( XnodeOrImageElemOrSrc.constructor === X_EventDispatcher && X_Type_isImage( XnodeOrImageElemOrSrc[ '_rawObject' ] ) ){\r
46                         xnode = XnodeOrImageElemOrSrc;\r
47                         img   = xnode[ '_rawObject' ];\r
48                 } else {\r
49                         return;\r
50                 };\r
51                 if( ret = X_Util_Image_actualSize[ img.src ] ) return ret;\r
52         };\r
53 \r
54         // for Firefox, Safari, Google Chrome\r
55         if( img.naturalWidth ) return [ img.naturalWidth, img.naturalHeight ];\r
56 \r
57         if( 5 <= X_UA[ 'IE' ] ){// for IE\r
58                 run  = img.runtimeStyle;\r
59                 memW = run.width;\r
60                 memH = run.height;\r
61 \r
62                 // keep runtimeStyle\r
63                 run.width  = 'auto';\r
64                 // override\r
65                 run.height = 'auto';\r
66                 w = img.width;\r
67                 h = img.height;\r
68                 run.width  = memW;\r
69                 // restore\r
70                 run.height = memH;\r
71         } else {// for Opera and Other\r
72                 \r
73                 memW = w = img.width;\r
74                 memH = h = img.height;\r
75                 \r
76                 if( img.removeAttribute ){ // Safari1.3 の Image は removeAttribute がない\r
77                         // keep current style\r
78                         img.removeAttribute( 'width' );\r
79                         img.removeAttribute( 'height' );\r
80                         \r
81                         w = img.width;\r
82                         h = img.height;\r
83                         \r
84                         // restore\r
85                         img.width  = memW;\r
86                         img.height = memH;\r
87                 };\r
88         };\r
89         \r
90         ret = X_Util_Image_actualSize[ img.src ] = [ w, h ];\r
91         \r
92         remove && xnode.destroy();\r
93         \r
94         return ret;\r
95 };\r
96 \r
97 \r