]>
git.immae.eu Git - perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git/blob - sources/core/loader.js
dc02511217c43e4d016df21f1bffff4c2d494797
2 * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
7 * @fileOverview Defines the {@link CKEDITOR.loader} objects, which is used to
8 * load core scripts and their dependencies from _source.
11 if ( typeof CKEDITOR
== 'undefined' )
12 CKEDITOR
= {}; // jshint ignore:line
14 if ( !CKEDITOR
.loader
) {
16 * Load core scripts and their dependencies from _source.
21 CKEDITOR
.loader
= ( function() {
22 // Table of script names and their dependencies.
25 'config', 'creators/inline', 'creators/themedui', 'editable', 'ckeditor', 'plugins',
26 'scriptloader', 'style', 'tools',
27 // The following are entries that we want to force loading at the end to avoid dependence recursion.
28 'dom/comment', 'dom/elementpath', 'dom/text', 'dom/rangelist', 'skin'
31 'ckeditor_basic', 'log', 'dom', 'dtd', 'dom/document', 'dom/element', 'dom/iterator', 'editor', 'event',
32 'htmldataprocessor', 'htmlparser', 'htmlparser/element', 'htmlparser/fragment', 'htmlparser/filter',
33 'htmlparser/basicwriter', 'template', 'tools'
36 'ckeditor_basic': [ 'editor_basic', 'env', 'event' ],
38 'config': [ 'ckeditor_base' ],
40 'dom/comment': [ 'dom/node' ],
41 'dom/document': [ 'dom/node', 'dom/window' ],
42 'dom/documentfragment': [ 'dom/element' ],
43 'dom/element': [ 'dom', 'dom/document', 'dom/domobject', 'dom/node', 'dom/nodelist', 'tools' ],
44 'dom/elementpath': [ 'dom/element' ],
46 'dom/iterator': [ 'dom/range' ],
47 'dom/node': [ 'dom/domobject', 'tools' ],
48 'dom/nodelist': [ 'dom/node' ],
49 'dom/domobject': [ 'dom/event' ],
50 'dom/range': [ 'dom/document', 'dom/documentfragment', 'dom/element', 'dom/walker' ],
51 'dom/rangelist': [ 'dom/range' ],
52 'dom/text': [ 'dom/node', 'dom/domobject' ],
53 'dom/walker': [ 'dom/node' ],
54 'dom/window': [ 'dom/domobject' ],
56 'editable': [ 'editor', 'tools' ],
58 'command', 'config', 'editor_basic', 'filter', 'focusmanager', 'keystrokehandler', 'lang',
59 'plugins', 'tools', 'ui'
61 'editor_basic': [ 'event' ],
64 'filter': [ 'dtd', 'tools' ],
66 'htmldataprocessor': [ 'htmlparser', 'htmlparser/basicwriter', 'htmlparser/fragment', 'htmlparser/filter' ],
68 'htmlparser/comment': [ 'htmlparser', 'htmlparser/node' ],
69 'htmlparser/element': [ 'htmlparser', 'htmlparser/fragment', 'htmlparser/node' ],
70 'htmlparser/fragment': [ 'htmlparser', 'htmlparser/comment', 'htmlparser/text', 'htmlparser/cdata' ],
71 'htmlparser/text': [ 'htmlparser', 'htmlparser/node' ],
72 'htmlparser/cdata': [ 'htmlparser', 'htmlparser/node' ],
73 'htmlparser/filter': [ 'htmlparser' ],
74 'htmlparser/basicwriter': [ 'htmlparser' ],
75 'htmlparser/node': [ 'htmlparser' ],
76 'keystrokehandler': [ 'event' ],
78 'log': [ 'ckeditor_basic' ],
79 'plugins': [ 'resourcemanager' ],
80 'resourcemanager': [ 'scriptloader', 'tools' ],
81 'scriptloader': [ 'dom/element', 'env' ],
82 'selection': [ 'dom/range', 'dom/walker' ],
84 'style': [ 'selection' ],
88 'creators/themedui': [],
92 // The production implementation contains a fixed timestamp generated by the releaser.
93 var timestamp
= '%TIMESTAMP%';
94 // The development implementation contains a current timestamp. // %REMOVE_LINE%
95 timestamp
= ( CKEDITOR
&& CKEDITOR
.timestamp
) || ( new Date() ).valueOf(); // %REMOVE_LINE%
97 var getUrl = function( resource
) {
98 if ( CKEDITOR
&& CKEDITOR
.getUrl
)
99 return CKEDITOR
.getUrl( resource
);
101 return CKEDITOR
.basePath
+ resource
+ ( resource
.indexOf( '?' ) >= 0 ? '&' : '?' ) + 't=' + timestamp
;
104 var pendingLoad
= [];
108 * The list of loaded scripts in their loading order.
110 * // Alert the loaded script names.
111 * alert( CKEDITOR.loader.loadedScripts );
115 * Table of script names and their dependencies.
124 loadPending: function() {
125 var scriptName
= pendingLoad
.shift();
130 var scriptSrc
= getUrl( 'core/' + scriptName
+ '.js' );
132 var script
= document
.createElement( 'script' );
133 script
.type
= 'text/javascript';
134 script
.src
= scriptSrc
;
136 function onScriptLoaded() {
137 // Append this script to the list of loaded scripts.
138 CKEDITOR
.loader
.loadedScripts
.push( scriptName
);
141 CKEDITOR
.loader
.loadPending();
144 // We must guarantee the execution order of the scripts, so we
145 // need to load them one by one. (http://dev.ckeditor.com/ticket/4145)
146 // The following if/else block has been taken from the scriptloader core code.
147 if ( typeof script
.onreadystatechange
!== 'undefined' ) {
149 script
.onreadystatechange = function() {
150 if ( script
.readyState
== 'loaded' || script
.readyState
== 'complete' ) {
151 script
.onreadystatechange
= null;
157 script
.onload = function() {
158 // Some browsers, such as Safari, may call the onLoad function
159 // immediately. Which will break the loading sequence. (http://dev.ckeditor.com/ticket/3661)
160 setTimeout( function() {
161 onScriptLoaded( scriptName
);
166 document
.body
.appendChild( script
);
170 * Loads a specific script, including its dependencies. This is not a
171 * synchronous loading, which means that the code to be loaded will
172 * not necessarily be available after this call.
174 * CKEDITOR.loader.load( 'dom/element' );
176 * @param {String} scriptName
177 * @param {Boolean} [defer=false]
180 load: function( scriptName
, defer
) {
181 // Check if the script has already been loaded.
182 if ( ( 's:' + scriptName
) in this.loadedScripts
)
185 // Get the script dependencies list.
186 var dependencies
= scripts
[ scriptName
];
188 throw 'The script name"' + scriptName
+ '" is not defined.';
190 // Mark the script as loaded, even before really loading it, to
191 // avoid cross references recursion.
192 // Prepend script name with 's:' to avoid conflict with Array's methods.
193 this.loadedScripts
[ 's:' + scriptName
] = true;
195 // Load all dependencies first.
196 for ( var i
= 0; i
< dependencies
.length
; i
++ )
197 this.load( dependencies
[ i
], true );
199 var scriptSrc
= getUrl( 'core/' + scriptName
+ '.js' );
201 // Append the <script> element to the DOM.
202 // If the page is fully loaded, we can't use document.write
203 // but if the script is run while the body is loading then it's safe to use it
204 // Unfortunately, Firefox <3.6 doesn't support document.readyState, so it won't get this improvement
205 if ( document
.body
&& ( !document
.readyState
|| document
.readyState
== 'complete' ) ) {
206 pendingLoad
.push( scriptName
);
211 // Append this script to the list of loaded scripts.
212 this.loadedScripts
.push( scriptName
);
214 document
.write( '<script src="' + scriptSrc
+ '" type="text/javascript"><\/script>' );
221 // Check if any script has been defined for autoload.
222 if ( CKEDITOR
._autoLoad
) {
223 CKEDITOR
.loader
.load( CKEDITOR
._autoLoad
);
224 delete CKEDITOR
._autoLoad
;