JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.2
[ckeditor.git] / _source / core / imagecacher.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 (function()\r
7 {\r
8         var loaded = {};\r
9 \r
10         var loadImage = function( image, callback )\r
11         {\r
12                 var doCallback = function()\r
13                         {\r
14                                 img.removeAllListeners();\r
15                                 loaded[ image ] = 1;\r
16                                 callback();\r
17                         };\r
18 \r
19                 var img = new CKEDITOR.dom.element( 'img' );\r
20                 img.on( 'load', doCallback );\r
21                 img.on( 'error', doCallback );\r
22                 img.setAttribute( 'src', image );\r
23         };\r
24 \r
25         /**\r
26          * @namespace Load images into the browser cache.\r
27          */\r
28         CKEDITOR.imageCacher =\r
29         {\r
30                 /**\r
31                  * Loads one or more images.\r
32                  * @param {Array} images The URLs of the images to be loaded.\r
33                  * @param {Function} [callback] A function to be called once all images\r
34                  *              are loaded.\r
35                  * @return {CKEDITOR.event} An event object which fires the 'loaded'\r
36                  *              event when all images are completely loaded. Additionally, the\r
37                  *              "finished" property is set after the "loaded" event call.\r
38                  * @example\r
39                  * var loader = CKEDITOR.imageCacher.load( [ '/image1.png', 'image2.png' ] );\r
40                  * if ( !loader.finished )\r
41                  * {\r
42                  *     loader.on( 'load', function()\r
43                  *         {\r
44                  *             alert( 'All images are loaded' );\r
45                  *         });\r
46                  * }\r
47                  */\r
48                 load : function( images, callback )\r
49                 {\r
50                         var pendingCount = images.length;\r
51 \r
52                         var event = new CKEDITOR.event;\r
53                         event.on( 'loaded', function()\r
54                                 {\r
55                                         event.finished = 1;\r
56                                 });\r
57 \r
58                         if ( callback )\r
59                                 event.on( 'loaded', callback );\r
60 \r
61                         var checkPending = function()\r
62                                 {\r
63                                         if ( --pendingCount === 0 )\r
64                                                 event.fire( 'loaded' );\r
65                                 };\r
66 \r
67                         for ( var i = 0 ; i < images.length ; i++ )\r
68                         {\r
69                                 var image = images[ i ];\r
70 \r
71                                 if ( loaded[ image ] )\r
72                                         checkPending();\r
73                                 else\r
74                                         loadImage( image, checkPending );\r
75                         }\r
76 \r
77                         return event;\r
78                 }\r
79         };\r
80 })();\r