JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1
[ckeditor.git] / _source / core / skins.js
index 22ff5fc..2876e55 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -20,11 +20,20 @@ CKEDITOR.skins = (function()
        var preloaded = {};\r
        var 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
@@ -33,6 +42,18 @@ CKEDITOR.skins = (function()
                        }\r
                };\r
 \r
+               function fixCSSTextRelativePath( cssStyleText, baseUrl )\r
+               {\r
+                       return cssStyleText.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,\r
+                                       function( match, opener, path, closer )\r
+                                       {\r
+                                               if ( /^\/|^\w?:/.test( path ) )\r
+                                                       return match;\r
+                                               else\r
+                                                       return 'url(' + baseUrl + opener +  path + closer + ')';\r
+                                       } );\r
+               }\r
+\r
                // Check if we need to preload images from it.\r
                if ( !preloaded[ skinName ] )\r
                {\r
@@ -43,7 +64,7 @@ CKEDITOR.skins = (function()
                                CKEDITOR.imageCacher.load( preload, function()\r
                                        {\r
                                                preloaded[ skinName ] = 1;\r
-                                               loadedPart( skinName, part, callback );\r
+                                               loadPart( editor, skinName, part, callback );\r
                                        } );\r
                                return;\r
                        }\r
@@ -96,10 +117,23 @@ CKEDITOR.skins = (function()
                        // Load the "css" pieces.\r
                        if ( !cssIsLoaded )\r
                        {\r
-                               appendSkinPath( part.css );\r
+                               var cssPart = part.css;\r
+\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
-                               for ( var c = 0 ; c < part.css.length ; c++ )\r
-                                       CKEDITOR.document.appendStyleSheet( part.css[ c ] );\r
+                               part.css = cssPart;\r
 \r
                                cssIsLoaded = 1;\r
                        }\r
@@ -156,29 +190,13 @@ CKEDITOR.skins = (function()
                                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
                                                {\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