source: trunk/expressoMail1_2/js/fckeditor/editor/_source/internals/fcktoolbarset.js @ 389

Revision 389, 9.3 KB checked in by niltonneto, 16 years ago (diff)

Ver Tickets no Trac #286 e #287.
Inclusão de template de assinatura padrão.
Assinatura também disponível em formato de texto rico.
Inclusão da biblioteca FCKEditor.

  • Property svn:executable set to *
Line 
1/*
2 * FCKeditor - The text editor for internet
3 * Copyright (C) 2003-2006 Frederico Caldeira Knabben
4 *
5 * Licensed under the terms of the GNU Lesser General Public License:
6 *              http://www.opensource.org/licenses/lgpl-license.php
7 *
8 * For further information visit:
9 *              http://www.fckeditor.net/
10 *
11 * "Support Open Source software. What about a donation today?"
12 *
13 * File Name: fcktoolbarset.js
14 *      Defines the FCKToolbarSet object that is used to load and draw the
15 *      toolbar.
16 *
17 * File Authors:
18 *              Frederico Caldeira Knabben (fredck@fckeditor.net)
19 */
20
21function FCKToolbarSet_Create( overhideLocation )
22{
23        var oToolbarSet ;
24       
25        var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;
26        switch ( sLocation )
27        {
28                case 'In' :
29                                document.getElementById( 'xToolbarRow' ).style.display = '' ;
30                                oToolbarSet = new FCKToolbarSet( document ) ;
31                        break ;
32                       
33//              case 'OutTop' :
34                        // Not supported.
35                       
36                default :
37                        FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;
38                        FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;
39
40                        var eToolbarTarget ;
41                       
42                        // Out:[TargetWindow]([TargetId])
43                        var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;
44                        if ( oOutMatch )
45                        {
46                                eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;
47                        }
48                        else
49                        {
50                                // Out:[TargetId]
51                                oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;
52                                if ( oOutMatch )
53                                        eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;
54                        }
55                       
56                        if ( !eToolbarTarget )
57                        {
58                                alert( 'Invalid value for "ToolbarLocation"' ) ;
59                                return this._Init( 'In' ) ;
60                        }
61                       
62                        // If it is a shared toolbar, it may be already available in the target element.
63                        if ( oToolbarSet = eToolbarTarget.__FCKToolbarSet )
64                                break ;
65
66                        // Create the IFRAME that will hold the toolbar inside the target element.
67                        var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;
68                        eToolbarIFrame.frameBorder = 0 ;
69                        eToolbarIFrame.width = '100%' ;
70                        eToolbarIFrame.height = '10' ;
71                        eToolbarTarget.appendChild( eToolbarIFrame ) ;
72                        eToolbarIFrame.unselectable = 'on' ;
73                       
74                        // Write the basic HTML for the toolbar (copy from the editor main page).
75                        var eTargetDocument = eToolbarIFrame.contentWindow.document ;
76                        eTargetDocument.open() ;
77                        eTargetDocument.write( '<html><head><script type="text/javascript"> window.onload = window.onresize = function() { window.frameElement.height = document.body.scrollHeight ; } </script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;
78                        eTargetDocument.close() ;
79                       
80                        eTargetDocument.oncontextmenu = FCKTools.CancelEvent ;
81
82                        // Load external resources (must be done here, otherwise Firefox will not
83                        // have the document DOM ready to be used right away.
84                        FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinPath + 'fck_editor.css' ) ;
85                       
86                        oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;
87                        oToolbarSet._IFrame = eToolbarIFrame ;
88
89                        if ( FCK.IECleanup )
90                                FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;
91        }
92       
93        oToolbarSet.CurrentInstance = FCK ;
94
95        FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;
96
97        return oToolbarSet ;
98}
99
100function FCK_OnBlur( editorInstance )
101{
102        var eToolbarSet = editorInstance.ToolbarSet ;
103       
104        if ( eToolbarSet.CurrentInstance == editorInstance )
105                eToolbarSet.Disable() ;
106}
107
108function FCK_OnFocus( editorInstance )
109{
110        var oToolbarset = editorInstance.ToolbarSet ;
111        var oInstance = editorInstance || FCK ;
112       
113        // Unregister the toolbar window from the current instance.
114        oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;
115       
116        // Set the new current instance.
117        oToolbarset.CurrentInstance = oInstance ;
118       
119        // Register the toolbar window in the current instance.
120        oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;
121
122        oToolbarset.Enable() ;
123}
124
125function FCKToolbarSet_Cleanup()
126{
127        this._TargetElement = null ;
128        this._IFrame = null ;
129}
130
131function FCKToolbarSet_Target_Cleanup()
132{
133        this.__FCKToolbarSet = null ;
134}
135
136var FCKToolbarSet = function( targetDocument )
137{
138        this._Document = targetDocument ;
139
140        // Get the element that will hold the elements structure.
141        this._TargetElement     = targetDocument.getElementById( 'xToolbar' ) ;
142       
143        // Setup the expand and collapse handlers.
144        var eExpandHandle       = targetDocument.getElementById( 'xExpandHandle' ) ;
145        var eCollapseHandle     = targetDocument.getElementById( 'xCollapseHandle' ) ;
146
147        eExpandHandle.title             = FCKLang.ToolbarExpand ;
148        eExpandHandle.onclick   = FCKToolbarSet_Expand_OnClick ;
149       
150        eCollapseHandle.title   = FCKLang.ToolbarCollapse ;
151        eCollapseHandle.onclick = FCKToolbarSet_Collapse_OnClick ;
152
153        // Set the toolbar state at startup.
154        if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
155                this.Expand() ;
156        else
157                this.Collapse() ;
158
159        // Enable/disable the collapse handler
160        eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
161
162        if ( FCKConfig.ToolbarCanCollapse )
163                eCollapseHandle.style.display = '' ;
164        else
165                targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;
166               
167        // Set the default properties.
168        this.Toolbars = new Array() ;
169        this.IsLoaded = false ;
170
171        if ( FCK.IECleanup )
172                FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;
173}
174
175function FCKToolbarSet_Expand_OnClick()
176{
177        FCK.ToolbarSet.Expand() ;
178}
179
180function FCKToolbarSet_Collapse_OnClick()
181{
182        FCK.ToolbarSet.Collapse() ;
183}
184
185FCKToolbarSet.prototype.Expand = function()
186{
187        this._ChangeVisibility( false ) ;
188}
189
190FCKToolbarSet.prototype.Collapse = function()
191{
192        this._ChangeVisibility( true ) ;
193}
194
195FCKToolbarSet.prototype._ChangeVisibility = function( collapse )
196{
197        this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;
198        this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;
199       
200        if ( FCKBrowserInfo.IsGecko )
201        {
202                // I had to use "setTimeout" because Gecko was not responding in a right
203                // way when calling window.onresize() directly.
204                FCKTools.RunFunction( window.onresize ) ;
205        }
206}
207
208FCKToolbarSet.prototype.Load = function( toolbarSetName )
209{
210        this.Name = toolbarSetName ;
211
212        this.Items = new Array() ;
213       
214        // Reset the array of toolbat items that are active only on WYSIWYG mode.
215        this.ItemsWysiwygOnly = new Array() ;
216
217        // Reset the array of toolbar items that are sensitive to the cursor position.
218        this.ItemsContextSensitive = new Array() ;
219       
220        // Cleanup the target element.
221        this._TargetElement.innerHTML = '' ;
222       
223        var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
224       
225        if ( !ToolbarSet )
226        {
227                alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;
228                return ;
229        }
230       
231        this.Toolbars = new Array() ;
232       
233        for ( var x = 0 ; x < ToolbarSet.length ; x++ )
234        {
235                var oToolbarItems = ToolbarSet[x] ;
236               
237                var oToolbar ;
238               
239                if ( typeof( oToolbarItems ) == 'string' )
240                {
241                        if ( oToolbarItems == '/' )
242                                oToolbar = new FCKToolbarBreak() ;
243                }
244                else
245                {
246                        oToolbar = new FCKToolbar() ;
247                       
248                        for ( var j = 0 ; j < oToolbarItems.length ; j++ )
249                        {
250                                var sItem = oToolbarItems[j] ;
251                               
252                                if ( sItem == '-')
253                                        oToolbar.AddSeparator() ;
254                                else
255                                {
256                                        var oItem = FCKToolbarItems.GetItem( sItem ) ;
257                                        if ( oItem )
258                                        {
259                                                oToolbar.AddItem( oItem ) ;
260
261                                                this.Items.push( oItem ) ;
262
263                                                if ( !oItem.SourceView )
264                                                        this.ItemsWysiwygOnly.push( oItem ) ;
265                                               
266                                                if ( oItem.ContextSensitive )
267                                                        this.ItemsContextSensitive.push( oItem ) ;
268                                        }
269                                }
270                        }
271                       
272                        // oToolbar.AddTerminator() ;
273                }
274               
275                oToolbar.Create( this._TargetElement ) ;
276
277                this.Toolbars[ this.Toolbars.length ] = oToolbar ;
278        }
279       
280        FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;
281
282        if ( FCK.Status != FCK_STATUS_COMPLETE )
283                FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;
284        else
285                this.RefreshModeState() ;
286
287        this.IsLoaded = true ;
288        this.IsEnabled = true ;
289
290        FCKTools.RunFunction( this.OnLoad ) ;
291}
292
293FCKToolbarSet.prototype.Enable = function()
294{
295        if ( this.IsEnabled )
296                return ;
297
298        this.IsEnabled = true ;
299
300        var aItems = this.Items ;
301        for ( var i = 0 ; i < aItems.length ; i++ )
302                aItems[i].RefreshState() ;
303}
304
305FCKToolbarSet.prototype.Disable = function()
306{
307        if ( !this.IsEnabled )
308                return ;
309
310        this.IsEnabled = false ;
311
312        var aItems = this.Items ;
313        for ( var i = 0 ; i < aItems.length ; i++ )
314                aItems[i].Disable() ;
315}
316
317FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )
318{
319        if ( FCK.Status != FCK_STATUS_COMPLETE )
320                return ;
321
322        var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;
323        var aItems = oToolbarSet.ItemsWysiwygOnly ;
324       
325        if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
326        {
327                // Enable all buttons that are available on WYSIWYG mode only.
328                for ( var i = 0 ; i < aItems.length ; i++ )
329                        aItems[i].Enable() ;
330
331                // Refresh the buttons state.
332                oToolbarSet.RefreshItemsState( editorInstance ) ;
333        }
334        else
335        {
336                // Refresh the buttons state.
337                oToolbarSet.RefreshItemsState( editorInstance ) ;
338
339                // Disable all buttons that are available on WYSIWYG mode only.
340                for ( var i = 0 ; i < aItems.length ; i++ )
341                        aItems[i].Disable() ;
342        }       
343}
344
345FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )
346{
347       
348        var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;
349       
350        for ( var i = 0 ; i < aItems.length ; i++ )
351                aItems[i].RefreshState() ;
352}
Note: See TracBrowser for help on using the repository browser.