/*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
CKEDITOR.skins = (function()\r
{\r
// Holds the list of loaded skins.\r
- var loaded = {};\r
- var preloaded = {};\r
- var paths = {};\r
+ var loaded = {},\r
+ paths = {};\r
\r
- var loadedPart = function( skinName, part, callback )\r
+ var loadPart = function( editor, skinName, part, callback )\r
{\r
// Get the skin definition.\r
var skinDefinition = loaded[ skinName ];\r
\r
+ if ( !editor.skin )\r
+ {\r
+ editor.skin = skinDefinition;\r
+\r
+ // Trigger init function if any.\r
+ if ( skinDefinition.init )\r
+ skinDefinition.init( editor );\r
+ }\r
+\r
var appendSkinPath = function( fileNames )\r
{\r
for ( var n = 0 ; n < fileNames.length ; n++ )\r
}\r
};\r
\r
- // Check if we need to preload images from it.\r
- if ( !preloaded[ skinName ] )\r
+ function fixCSSTextRelativePath( cssStyleText, baseUrl )\r
{\r
- var preload = skinDefinition.preload;\r
- if ( preload && preload.length > 0 )\r
- {\r
- appendSkinPath( preload );\r
- CKEDITOR.imageCacher.load( preload, function()\r
+ return cssStyleText.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,\r
+ function( match, opener, path, closer )\r
{\r
- preloaded[ skinName ] = 1;\r
- loadedPart( skinName, part, callback );\r
+ if ( /^\/|^\w?:/.test( path ) )\r
+ return match;\r
+ else\r
+ return 'url(' + baseUrl + opener + path + closer + ')';\r
} );\r
- return;\r
- }\r
-\r
- // Mark it as preloaded.\r
- preloaded[ skinName ] = 1;\r
}\r
\r
// Get the part definition.\r
\r
// Check whether the "css" and "js" properties have been defined\r
// for that part.\r
- var cssIsLoaded = !part.css || !part.css.length;\r
- var jsIsLoaded = !part.js || !part.js.length;\r
+ var cssIsLoaded = !part.css || !part.css.length,\r
+ jsIsLoaded = !part.js || !part.js.length;\r
\r
// This is the function that will trigger the callback calls on\r
// load.\r
// Load the "css" pieces.\r
if ( !cssIsLoaded )\r
{\r
- appendSkinPath( part.css );\r
+ var cssPart = part.css;\r
\r
- for ( var c = 0 ; c < part.css.length ; c++ )\r
- CKEDITOR.document.appendStyleSheet( part.css[ c ] );\r
+ if ( CKEDITOR.tools.isArray( cssPart ) )\r
+ {\r
+ appendSkinPath( cssPart );\r
+ for ( var c = 0 ; c < cssPart.length ; c++ )\r
+ CKEDITOR.document.appendStyleSheet( cssPart[ c ] );\r
+ }\r
+ else\r
+ {\r
+ cssPart = fixCSSTextRelativePath(\r
+ cssPart, CKEDITOR.getUrl( paths[ skinName ] ) );\r
+ // Processing Inline CSS part.\r
+ CKEDITOR.document.appendStyleText( cssPart );\r
+ }\r
+\r
+ part.css = cssPart;\r
\r
cssIsLoaded = 1;\r
}\r
skinPath = editor.skinPath;\r
\r
if ( loaded[ skinName ] )\r
- {\r
- loadedPart( skinName, skinPart, callback );\r
-\r
- // Get the skin definition.\r
- var skinDefinition = loaded[ skinName ];\r
-\r
- // Trigger init function if any.\r
- if ( skinDefinition.init )\r
- skinDefinition.init( editor );\r
- }\r
+ loadPart( editor, skinName, skinPart, callback );\r
else\r
{\r
paths[ skinName ] = skinPath;\r
- CKEDITOR.scriptLoader.load( skinPath + 'skin.js', function()\r
+ CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( skinPath + 'skin.js' ), function()\r
{\r
- loadedPart( skinName, skinPart, callback );\r
-\r
- // Get the skin definition.\r
- var skinDefinition = loaded[ skinName ];\r
-\r
- // Trigger init function if any.\r
- if ( skinDefinition.init )\r
- skinDefinition.init( editor );\r
+ loadPart( editor, skinName, skinPart, callback );\r
});\r
}\r
}\r