OSDN Git Service

Version 0.6.104, fix X_shortcut & etc.
[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  * original\r
12  * LICENSE: MIT\r
13  * AUTHOR: uupaa.js@gmail.com\r
14  */\r
15 function X_Util_Image_getActualDimension( XnodeOrImageElemOrSrc ){\r
16         var xnode, img, remove, ret, run, memW, memH, w, h;\r
17 \r
18         if( X.Type.isString( XnodeOrImageElemOrSrc ) ){\r
19                 if( ret = X_Util_Image_actualSize[ X_URL_toAbsolutePath( XnodeOrImageElemOrSrc ) ] ) return ret;\r
20                 \r
21                 xnode = X_Node_systemNode.create(\r
22                         'img',\r
23                         {\r
24                                 src : XnodeOrImageElemOrSrc\r
25                         },\r
26                         {\r
27                                 position   : 'absolute'\r
28                         }\r
29                 );\r
30                 X_Node_startUpdate();\r
31                 img    = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode ) : xnode._rawObject;\r
32                 remove = true;\r
33         } else {\r
34                 if( XnodeOrImageElemOrSrc.constructor === X.Node ){\r
35                         xnode = XnodeOrImageElemOrSrc;\r
36                         img   = X_UA_DOM.IE4 ? X_Node__ie4getRawNode( xnode )._rawObject : xnode._rawObject;\r
37                 } else\r
38                 if( X.Type.isHTMLElement( XnodeOrImageElemOrSrc ) ){\r
39                         img = XnodeOrImageElemOrSrc;\r
40                 } else\r
41                 if( XnodeOrImageElemOrSrc.constructor === X.EventDispatcher && X.Type.isImage( XnodeOrImageElemOrSrc._rawObject ) ){\r
42                         xnode = XnodeOrImageElemOrSrc;\r
43                         img   = xnode._rawObject;\r
44                 } else {\r
45                         return;\r
46                 };\r
47                 if( ret = X_Util_Image_actualSize[ img.src ] ) return ret;\r
48         };\r
49 \r
50         // for Firefox, Safari, Google Chrome\r
51         if( img.naturalWidth ) return [ img.naturalWidth, img.naturalHeight ];\r
52 \r
53         if( 5 <= X_UA.IE ){// for IE\r
54                 run  = img.runtimeStyle;\r
55                 memW = run.width;\r
56                 memH = run.height;\r
57 \r
58                 // keep runtimeStyle\r
59                 run.width  = 'auto';\r
60                 // override\r
61                 run.height = 'auto';\r
62                 w = img.width;\r
63                 h = img.height;\r
64                 run.width  = memW;\r
65                 // restore\r
66                 run.height = memH;\r
67         } else {// for Opera and Other\r
68                 \r
69                 memW = w = img.width;\r
70                 memH = h = img.height;\r
71                 \r
72                 if( img.removeAttribute ){ // Safari1.3 の Image は removeAttribute がない\r
73                         // keep current style\r
74                         img.removeAttribute( 'width' );\r
75                         img.removeAttribute( 'height' );\r
76                         \r
77                         w = img.width;\r
78                         h = img.height;\r
79                         \r
80                         // restore\r
81                         img.width  = memW;\r
82                         img.height = memH;\r
83                 };\r
84         };\r
85         \r
86         ret = X_Util_Image_actualSize[ img.src ] = [ w, h ];\r
87         \r
88         remove && xnode.destroy();\r
89         \r
90         return ret;\r
91 };\r
92 \r
93 \r