Ticket #1622: 1622.patch

File 1622.patch, 7.5 KB (added by designfu, 12 years ago)

Patch against FCKeditor/FCKpackager SVN

Line 
1Index: editor/_source/internals/fcktools_gecko.js
2===================================================================
3--- editor/_source/internals/fcktools_gecko.js  (revision 1092)
4+++ editor/_source/internals/fcktools_gecko.js  (working copy)
5@@ -38,12 +38,21 @@
6// Appends a CSS file to a document.
7FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
8{
9-       var e = documentElement.createElement( 'LINK' ) ;
10-       e.rel   = 'stylesheet' ;
11-       e.type  = 'text/css' ;
12-       e.href  = cssFileUrl ;
13-       documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
14-       return e ;
15+       var cssText = FCKCSSManager.GetCachedCSS( cssFileUrl ) ;
16+
17+       if ( cssText == null )
18+       {
19+               var e = documentElement.createElement( 'LINK' ) ;
20+               e.rel   = 'stylesheet' ;
21+               e.type  = 'text/css' ;
22+               e.href  = cssFileUrl ;
23+               documentElement.getElementsByTagName( "HEAD" )[0].appendChild( e ) ;
24+               return e ;
25+       }
26+       else
27+       {
28+               return FCKTools._AppendStyleString( documentElement, cssText ) ;
29+       }
30}
31
32// Appends a CSS style string to a document.
33Index: editor/_source/internals/fcktools_ie.js
34===================================================================
35--- editor/_source/internals/fcktools_ie.js     (revision 1092)
36+++ editor/_source/internals/fcktools_ie.js     (working copy)
37@@ -29,7 +29,16 @@
38// Appends one or more CSS files to a document.
39FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl )
40{
41-       return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
42+       var cssText = FCKCSSManager.GetCachedCSS( cssFileUrl );
43+
44+       if ( cssText )
45+       {
46+               return FCKTools._AppendStyleString( documentElement, cssText ) ;
47+       }
48+       else
49+       {
50+               return documentElement.createStyleSheet( cssFileUrl ).owningElement ;
51+       }
52}
53
54// Appends a CSS style string to a document.
55Index: editor/_source/internals/fckcssmanager.js
56===================================================================
57--- editor/_source/internals/fckcssmanager.js   (revision 0)
58+++ editor/_source/internals/fckcssmanager.js   (revision 0)
59@@ -0,0 +1,89 @@
60+/*
61+* FCKeditor - The text editor for Internet - http://www.fckeditor.net
62+* This file copyright (C) 2007 PBwiki, Inc.
63+*
64+* == BEGIN LICENSE ==
65+*
66+* Licensed under the terms of any of the following licenses at your
67+* choice:
68+*
69+*  - GNU General Public License Version 2 or later (the "GPL")
70+*    http://www.gnu.org/licenses/gpl.html
71+*
72+*  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
73+*    http://www.gnu.org/licenses/lgpl.html
74+*
75+*  - Mozilla Public License Version 1.1 or later (the "MPL")
76+*    http://www.mozilla.org/MPL/MPL-1.1.html
77+*
78+* == END LICENSE ==
79+*
80+*/
81+
82+var FCKCSSManager =
83+{
84+       CachedCSS : {},
85+
86+       AddCachedCSS : function( path, value )
87+       {
88+               FCKCSSManager.CachedCSS[ path ] = value ;
89+       },
90+
91+       _ProcessPath : function( path )
92+       {
93+               if ( !path )
94+                       return null ;
95+
96+               if ( path.substr( 0, FCKConfig.BasePath.length ) == FCKConfig.BasePath )
97+                       path = path.substr( FCKConfig.BasePath.length ).replace( /^\//, "" ) ;
98+
99+               return path;
100+       },
101+
102+       GetCachedCSS : function( path )
103+       {
104+               if ( !path )
105+                       return null ;
106+
107+               var relativePath = FCKCSSManager._ProcessPath( path ) ;
108+
109+               if ( !FCKCSSManager.CachedCSS[ relativePath ] )
110+                       return null ;
111+
112+               var cachedCSS = FCKCSSManager.CachedCSS[ relativePath ];
113+
114+               var pathPrefix = path.replace( /\/[^\/]+\.css$/i, "/" );
115+               pathPrefix.replace( /^[^\/]*$/, "" );
116+
117+               function pathReplace ( str, prefix, path, suffix, cache_path ) {
118+                       if ( path.match( /^http|^\// ) )
119+                               return "url(" + prefix + path + suffix + ")" ;
120+                       else
121+                               return "url(" + prefix + cache_path + path + suffix + ")" ;
122+               }
123+
124+               cachedCSS = cachedCSS.replace( /url *\(([ '"]*)(.*?)([ "']*)\)/g,
125+                       ( function( a, b, c, d, e, f, g) { return pathReplace( a, b, c, d, pathPrefix ) ; } ) );
126+
127+               return cachedCSS ;
128+       },
129+
130+       GetCSSInclude : function( path )
131+       {
132+               if ( !path )
133+                       return null ;
134+
135+               var cachedCSS = FCKCSSManager.GetCachedCSS( path ) ;
136+
137+               if ( !cachedCSS )
138+                       return( '<link href="' + path + '" type="text/css" rel="stylesheet" />' ) ;
139+
140+               return( '<sty' + 'le type="text/css">' + cachedCSS + '</st' + 'yle>' ) ;
141+       },
142+
143+       PrintCSSInclude : function( path )
144+       {
145+               document.write( FCKCSSManager.GetCSSInclude( path ) ) ;
146+       }
147+} ;
148+
149Index: editor/fckeditor.html
150===================================================================
151--- editor/fckeditor.html       (revision 1092)
152+++ editor/fckeditor.html       (working copy)
153@@ -43,7 +43,7 @@
154
155function LoadCss( url )
156{
157-       document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" />' ) ;
158+       FCKCSSManager.PrintCSSInclude( url ) ;
159}
160
161// Main editor scripts.
162@@ -147,6 +147,7 @@
163LoadScript( '_source/classes/fckmenublockpanel.js' ) ;
164LoadScript( '_source/classes/fckcontextmenu.js' ) ;
165LoadScript( '_source/internals/fck_contextmenu.js' ) ;
166+LoadScript( '_source/internals/fckcssmanager.js' ) ;
167LoadScript( '_source/classes/fckplugin.js' ) ;
168LoadScript( '_source/internals/fckplugins.js' ) ;
169
170Index: fckpackager.xml
171===================================================================
172--- fckpackager.xml     (revision 1092)
173+++ fckpackager.xml     (working copy)
174@@ -161,6 +161,15 @@
175
176                <File path="editor/_source/classes/fckplugin.js" />
177                <File path="editor/_source/internals/fckplugins.js" />
178+
179+               <File path="editor/_source/internals/fckcssmanager.js" />
180+               <File path="editor/skins/silver/fck_editor.css" />
181+               <File path="editor/css/fck_editorarea.css" />
182+               <File path="editor/css/fck_internal.css" />
183        </PackageFile>
184
185        <PackageFile path="editor/js/fckeditorcode_gecko.js">
186@@ -255,8 +264,18 @@
187                <File path="editor/_source/classes/fckcontextmenu.js" />
188                <File path="editor/_source/internals/fck_contextmenu.js" />
189
190+               <File path="editor/_source/internals/fckcssmanager.js" />
191+               <File path="editor/skins/silver/fck_editor.css" />
192+               <File path="editor/css/fck_showtableborders_gecko.css" />
193+               <File path="editor/css/fck_editorarea.css" />
194+               <File path="editor/css/fck_internal.css" />
195+
196                <File path="editor/_source/classes/fckplugin.js" />
197                <File path="editor/_source/internals/fckplugins.js" />
198        </PackageFile>
199
200</Package>
201Index: /home/chris/fckeditor/trunk/FCKpackager/trunk/fckpackager.php
202===================================================================
203--- /home/chris/fckeditor/trunk/FCKpackager/trunk/fckpackager.php       (revision 1090)
204+++ /home/chris/fckeditor/trunk/FCKpackager/trunk/fckpackager.php       (working copy)
205@@ -493,10 +493,21 @@
206                        echo '    Adding ' . basename( $file ) . "\n" ;
207
208                        // Compress (if needed) and process its contents.
209-                       if ( $this->CompactJavaScript )
210-                               $outputData .= FCKJavaScriptCompressor::Compress( FCKPreProcessor::Process( $data ), $this->ConstantsProcessor ) ;
211+                       if ( preg_match( '/\.js$/', $file ) )
212+                       {
213+                               if ( $this->CompactJavaScript )
214+                                       $outputData .= FCKJavaScriptCompressor::Compress( FCKPreProcessor::Process( $data ), $this->ConstantsProcessor ) ;
215+                               else
216+                                       $outputData .= FCKPreProcessor::Process( $data ) ;
217+                       }
218+                       else if ( preg_match( '/\.css$/', $file ) )
219+                       {
220+                               $outputData .= FCKCSSProcessor::Process( $data, $file ) ;
221+                       }
222                        else
223-                               $outputData .= FCKPreProcessor::Process( $data ) ;
224+                       {
225+                               echo "    Unknown file type, not added!\n";
226+                       }
227
228                        // Each file terminates with a CRLF, even if compressed.
229                        $outputData .= "\r\n" ;
230@@ -659,7 +670,19 @@
231?>
232<?php
233
234+class FCKCSSProcessor
235+{
236+       function FCKCSSProcessor( )
237+       { }
238
239+       // Intended to be static
240+       function Process( $data, $filename )
241+       {
242+               $def = "FCKCSSManager.AddCachedCSS(" . json_encode( str_replace( 'editor/', '', $filename ) )  . ",". json_encode( $data ) .");" ;
243+               return $inc . $def ;
244+       }
245+}
246+
247class FCKPreProcessor
248{
249        function FCKPreProcessor()
250@@ -873,4 +896,4 @@
251        }
252}
253
254-?>
255\ No newline at end of file
256+?>
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy