[TemporaryStorage] add files required for SDK build
[samples/web/TemporaryStorage.git] / tizen-web-ui-fw / latest / js / src / widgets / components / imageloader.js
1 \r
2 /* ***************************************************************************\r
3  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a\r
6  * copy of this software and associated documentation files (the "Software"),\r
7  * to deal in the Software without restriction, including without limitation\r
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
9  * and/or sell copies of the Software, and to permit persons to whom the\r
10  * Software is furnished to do so, subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in\r
13  * all copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\r
21  * DEALINGS IN THE SOFTWARE.\r
22  * ***************************************************************************\r
23  *\r
24  * Authors: Hyunsook Park <hyunsook.park@samsung.com>\r
25  *                      Wonseop Kim <wonseop.kim@samsung.com>\r
26 */\r
27 \r
28 ( function ( $, window, document, undefined ) {\r
29         var _canvas, _context;\r
30 \r
31         function initCanvas() {\r
32                 if (_context) {\r
33                         return;\r
34                 }\r
35                 _canvas = document.createElement( 'canvas' );\r
36                 _context = _canvas.getContext( '2d' );\r
37         }\r
38 \r
39         function fileSystemErrorMessage( e ) {\r
40                 var FileError = window.FileError,\r
41                         msg = '';\r
42                 switch ( e.code ) {\r
43                 case FileError.QUOTA_EXCEEDED_ERR:\r
44                         msg = 'QUOTA_EXCEEDED_ERR';\r
45                         break;\r
46                 case FileError.NOT_FOUND_ERR:\r
47                         msg = 'NOT_FOUND_ERR';\r
48                         break;\r
49                 case FileError.SECURITY_ERR:\r
50                         msg = 'SECURITY_ERR';\r
51                         break;\r
52                 case FileError.INVALID_MODIFICATION_ERR:\r
53                         msg = 'INVALID_MODIFICATION_ERR';\r
54                         break;\r
55                 case FileError.INVALID_STATE_ERR:\r
56                         msg = 'INVALID_STATE_ERR';\r
57                         break;\r
58                 default:\r
59                         msg = 'Unknown Error';\r
60                         break;\r
61                 }\r
62                 return msg;\r
63         }\r
64 \r
65         function getInternalURLFromURL( url ) {\r
66                 var internalURL = url.replace( /\//gi, "_" );\r
67                 return internalURL;\r
68         }\r
69 \r
70         function resize( imagewidth, imageheight, thumbwidth, thumbheight, fit ) {\r
71                 var w = 0, h = 0, x = 0, y = 0,\r
72                         widthratio = imagewidth / thumbwidth,\r
73                         heightratio = imageheight / thumbheight,\r
74                         maxratio = Math.max( widthratio, heightratio );\r
75 \r
76                 if ( fit ) {\r
77                         w = thumbwidth;\r
78                         h = thumbheight;\r
79                 } else {\r
80                         if ( maxratio > 1 ) {\r
81                                 w = imagewidth / maxratio;\r
82                                 h = imageheight / maxratio;\r
83                         } else {\r
84                                 w = imagewidth;\r
85                                 h = imageheight;\r
86                         }\r
87                         x = ( thumbwidth - w ) / 2;\r
88                         y = ( thumbheight - h ) / 2;\r
89                 }\r
90 \r
91                 return { w: w, h: h, x: x, y: y };\r
92         }\r
93 \r
94         function getThumbnail( img, thumbwidth, thumbheight, fit ) {\r
95                 var dimensions, url;\r
96                 initCanvas();\r
97                 _canvas.width = thumbwidth;\r
98                 _canvas.height = thumbheight;\r
99                 dimensions = resize( img.width, img.height, thumbwidth, thumbheight, fit );\r
100                 _context.fillStyle = "#000000";\r
101                 _context.fillRect ( 0, 0, thumbwidth, thumbheight );\r
102                 _context.drawImage( img, dimensions.x, dimensions.y, dimensions.w, dimensions.h );\r
103                 url = _canvas.toDataURL();\r
104                 return url;\r
105         }\r
106 \r
107         $.imageloader = {\r
108                 _grantedBytes: 1024 * 1024,\r
109                 getThumbnail: function ( url, _callback ) {\r
110                         var internalURL, canvasDataURI;\r
111                         function errorHandler( e ) {\r
112                                 var msg = fileSystemErrorMessage( e );\r
113                                 if ( _callback ) {\r
114                                         _callback( ( msg === "NOT_FOUND_ERR" ) ? msg : null );\r
115                                 }\r
116                         }\r
117 \r
118                         internalURL = getInternalURLFromURL( url );\r
119                         try {\r
120                                 canvasDataURI = localStorage.getItem( internalURL );\r
121                                 if ( _callback ) {\r
122                                         _callback( ( canvasDataURI === null ) ? "NOT_FOUND_ERR" : canvasDataURI );\r
123                                 }\r
124                         } catch ( e ) {\r
125                                 if ( _callback ) {\r
126                                         _callback( ( e.type === "non_object_property_load" ) ? "NOT_FOUND_ERR" : null );\r
127                                 }\r
128                         }\r
129                 },\r
130 \r
131                 setThumbnail: function ( url, _callback, thumbWidth, thumbHeight, fit ) {\r
132                         var image, internalURL, canvasDataURI;\r
133                         function errorHandler( e ) {\r
134                                 var msg = fileSystemErrorMessage( e );\r
135                                 if ( _callback ) {\r
136                                         _callback( ( msg === "NOT_FOUND_ERR" ) ? msg : null );\r
137                                 }\r
138                         }\r
139 \r
140                         thumbWidth = thumbWidth || 128;\r
141                         thumbHeight = thumbHeight || 128;\r
142                         fit = fit || true;\r
143                         image = new Image();\r
144                         image.onload = function () {\r
145                                 internalURL = getInternalURLFromURL( url );\r
146                                 canvasDataURI = getThumbnail( this, thumbWidth, thumbHeight, fit );\r
147                                 try {\r
148                                         localStorage.setItem( internalURL, canvasDataURI );\r
149                                         if ( _callback ) {\r
150                                                 _callback( canvasDataURI );\r
151                                         }\r
152                                 } catch ( e ) {\r
153                                         if ( _callback ) {\r
154                                                 _callback( ( e.type === "non_object_property_load" ) ? "NOT_FOUND_ERR" : null );\r
155                                         }\r
156                                 }\r
157                         };\r
158                         image.src = url;\r
159                 },\r
160 \r
161                 removeThumbnail: function ( url ) {\r
162                         var internalURL;\r
163                         function errorHandler( e ) {\r
164                                 fileSystemErrorMessage( e );\r
165                         }\r
166 \r
167                         internalURL = getInternalURLFromURL( url );\r
168                         try {\r
169                                 localStorage.removeItem( internalURL );\r
170                         } catch ( e ) {\r
171                                 throw e;\r
172                         }\r
173                 }\r
174         };\r
175 \r
176 } ( jQuery, window, document ) );\r
177 \r