JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
5137e3f6159f194295be52d65697b4f4da4a758e
[ckeditor.git] / _source / core / plugins.js
1 /*\r
2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 /**\r
7  * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to\r
8  *              manage plugins registration and loading.\r
9  */\r
10 \r
11 /**\r
12  * Manages plugins registration and loading.\r
13  * @namespace\r
14  * @augments CKEDITOR.resourceManager\r
15  * @example\r
16  */\r
17 CKEDITOR.plugins = new CKEDITOR.resourceManager(\r
18         'plugins/', 'plugin' );\r
19 \r
20 // PACKAGER_RENAME( CKEDITOR.plugins )\r
21 \r
22 CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad )\r
23         {\r
24                 return function( name, callback, scope )\r
25                 {\r
26                         var allPlugins = {};\r
27 \r
28                         var loadPlugins = function( names )\r
29                         {\r
30                                 originalLoad.call( this, names, function( plugins )\r
31                                         {\r
32                                                 CKEDITOR.tools.extend( allPlugins, plugins );\r
33 \r
34                                                 var requiredPlugins = [];\r
35                                                 for ( var pluginName in plugins )\r
36                                                 {\r
37                                                         var plugin = plugins[ pluginName ],\r
38                                                                 requires = plugin && plugin.requires;\r
39 \r
40                                                         if ( requires )\r
41                                                         {\r
42                                                                 for ( var i = 0 ; i < requires.length ; i++ )\r
43                                                                 {\r
44                                                                         if ( !allPlugins[ requires[ i ] ] )\r
45                                                                                 requiredPlugins.push( requires[ i ] );\r
46                                                                 }\r
47                                                         }\r
48                                                 }\r
49 \r
50                                                 if ( requiredPlugins.length )\r
51                                                         loadPlugins.call( this, requiredPlugins );\r
52                                                 else\r
53                                                 {\r
54                                                         // Call the "onLoad" function for all plugins.\r
55                                                         for ( pluginName in allPlugins )\r
56                                                         {\r
57                                                                 plugin = allPlugins[ pluginName ];\r
58                                                                 if ( plugin.onLoad && !plugin.onLoad._called )\r
59                                                                 {\r
60                                                                         plugin.onLoad();\r
61                                                                         plugin.onLoad._called = 1;\r
62                                                                 }\r
63                                                         }\r
64 \r
65                                                         // Call the callback.\r
66                                                         if ( callback )\r
67                                                                 callback.call( scope || window, allPlugins );\r
68                                                 }\r
69                                         }\r
70                                         , this);\r
71 \r
72                         };\r
73 \r
74                         loadPlugins.call( this, name );\r
75                 };\r
76         });\r
77 \r
78 CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries )\r
79 {\r
80         var plugin = this.get( pluginName );\r
81         plugin.lang[ languageCode ] = languageEntries;\r
82 };\r