Rev 1372 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/** FCKeditor - The text editor for internet* Copyright (C) 2003-2006 Frederico Caldeira Knabben** Licensed under the terms of the GNU Lesser General Public License:* http://www.opensource.org/licenses/lgpl-license.php** For further information visit:* http://www.fckeditor.net/** "Support Open Source software. What about a donation today?"** File Name: fcktoolbarset.js* Defines the FCKToolbarSet object that is used to load and draw the* toolbar.** File Authors:* Frederico Caldeira Knabben (fredck@fckeditor.net)*/function FCKToolbarSet_Create( overhideLocation ){var oToolbarSet ;var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;switch ( sLocation ){case 'In' :document.getElementById( 'xToolbarRow' ).style.display = '' ;oToolbarSet = new FCKToolbarSet( document ) ;break ;// case 'OutTop' :// Not supported.default :FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;var eToolbarTarget ;// Out:[TargetWindow]([TargetId])var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;if ( oOutMatch ){eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;}else{// Out:[TargetId]oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;if ( oOutMatch )eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;}if ( !eToolbarTarget ){alert( 'Invalid value for "ToolbarLocation"' ) ;return this._Init( 'In' ) ;}// If it is a shared toolbar, it may be already available in the target element.if ( oToolbarSet = eToolbarTarget.__FCKToolbarSet )break ;// Create the IFRAME that will hold the toolbar inside the target element.var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;eToolbarIFrame.frameBorder = 0 ;eToolbarIFrame.width = '100%' ;eToolbarIFrame.height = '10' ;eToolbarTarget.appendChild( eToolbarIFrame ) ;eToolbarIFrame.unselectable = 'on' ;// Write the basic HTML for the toolbar (copy from the editor main page).var eTargetDocument = eToolbarIFrame.contentWindow.document ;eTargetDocument.open() ;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>' ) ;eTargetDocument.close() ;eTargetDocument.oncontextmenu = FCKTools.CancelEvent ;// Load external resources (must be done here, otherwise Firefox will not// have the document DOM ready to be used right away.FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinPath + 'fck_editor.css' ) ;oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;oToolbarSet._IFrame = eToolbarIFrame ;if ( FCK.IECleanup )FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;}oToolbarSet.CurrentInstance = FCK ;FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;return oToolbarSet ;}function FCK_OnBlur( editorInstance ){var eToolbarSet = editorInstance.ToolbarSet ;if ( eToolbarSet.CurrentInstance == editorInstance )eToolbarSet.Disable() ;}function FCK_OnFocus( editorInstance ){var oToolbarset = editorInstance.ToolbarSet ;var oInstance = editorInstance || FCK ;// Unregister the toolbar window from the current instance.oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;// Set the new current instance.oToolbarset.CurrentInstance = oInstance ;// Register the toolbar window in the current instance.oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;oToolbarset.Enable() ;}function FCKToolbarSet_Cleanup(){this._TargetElement = null ;this._IFrame = null ;}function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet = null ;}var FCKToolbarSet = function( targetDocument ){this._Document = targetDocument ;// Get the element that will hold the elements structure.this._TargetElement = targetDocument.getElementById( 'xToolbar' ) ;// Setup the expand and collapse handlers.var eExpandHandle = targetDocument.getElementById( 'xExpandHandle' ) ;var eCollapseHandle = targetDocument.getElementById( 'xCollapseHandle' ) ;eExpandHandle.title = FCKLang.ToolbarExpand ;eExpandHandle.onclick = FCKToolbarSet_Expand_OnClick ;eCollapseHandle.title = FCKLang.ToolbarCollapse ;eCollapseHandle.onclick = FCKToolbarSet_Collapse_OnClick ;// Set the toolbar state at startup.if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )this.Expand() ;elsethis.Collapse() ;// Enable/disable the collapse handlereCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;if ( FCKConfig.ToolbarCanCollapse )eCollapseHandle.style.display = '' ;elsetargetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;// Set the default properties.this.Toolbars = new Array() ;this.IsLoaded = false ;if ( FCK.IECleanup )FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;}function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand() ;}function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse() ;}FCKToolbarSet.prototype.Expand = function(){this._ChangeVisibility( false ) ;}FCKToolbarSet.prototype.Collapse = function(){this._ChangeVisibility( true ) ;}FCKToolbarSet.prototype._ChangeVisibility = function( collapse ){this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;if ( FCKBrowserInfo.IsGecko ){// I had to use "setTimeout" because Gecko was not responding in a right// way when calling window.onresize() directly.FCKTools.RunFunction( window.onresize ) ;}}FCKToolbarSet.prototype.Load = function( toolbarSetName ){this.Name = toolbarSetName ;this.Items = new Array() ;// Reset the array of toolbat items that are active only on WYSIWYG mode.this.ItemsWysiwygOnly = new Array() ;// Reset the array of toolbar items that are sensitive to the cursor position.this.ItemsContextSensitive = new Array() ;// Cleanup the target element.this._TargetElement.innerHTML = '' ;var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;if ( !ToolbarSet ){alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;return ;}this.Toolbars = new Array() ;for ( var x = 0 ; x < ToolbarSet.length ; x++ ){var oToolbarItems = ToolbarSet[x] ;var oToolbar ;if ( typeof( oToolbarItems ) == 'string' ){if ( oToolbarItems == '/' )oToolbar = new FCKToolbarBreak() ;}else{oToolbar = new FCKToolbar() ;for ( var j = 0 ; j < oToolbarItems.length ; j++ ){var sItem = oToolbarItems[j] ;if ( sItem == '-')oToolbar.AddSeparator() ;else{var oItem = FCKToolbarItems.GetItem( sItem ) ;if ( oItem ){oToolbar.AddItem( oItem ) ;this.Items.push( oItem ) ;if ( !oItem.SourceView )this.ItemsWysiwygOnly.push( oItem ) ;if ( oItem.ContextSensitive )this.ItemsContextSensitive.push( oItem ) ;}}}// oToolbar.AddTerminator() ;}oToolbar.Create( this._TargetElement ) ;this.Toolbars[ this.Toolbars.length ] = oToolbar ;}FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;if ( FCK.Status != FCK_STATUS_COMPLETE )FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;elsethis.RefreshModeState() ;this.IsLoaded = true ;this.IsEnabled = true ;FCKTools.RunFunction( this.OnLoad ) ;}FCKToolbarSet.prototype.Enable = function(){if ( this.IsEnabled )return ;this.IsEnabled = true ;var aItems = this.Items ;for ( var i = 0 ; i < aItems.length ; i++ )aItems[i].RefreshState() ;}FCKToolbarSet.prototype.Disable = function(){if ( !this.IsEnabled )return ;this.IsEnabled = false ;var aItems = this.Items ;for ( var i = 0 ; i < aItems.length ; i++ )aItems[i].Disable() ;}FCKToolbarSet.prototype.RefreshModeState = function( editorInstance ){if ( FCK.Status != FCK_STATUS_COMPLETE )return ;var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;var aItems = oToolbarSet.ItemsWysiwygOnly ;if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ){// Enable all buttons that are available on WYSIWYG mode only.for ( var i = 0 ; i < aItems.length ; i++ )aItems[i].Enable() ;// Refresh the buttons state.oToolbarSet.RefreshItemsState( editorInstance ) ;}else{// Refresh the buttons state.oToolbarSet.RefreshItemsState( editorInstance ) ;// Disable all buttons that are available on WYSIWYG mode only.for ( var i = 0 ; i < aItems.length ; i++ )aItems[i].Disable() ;}}FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance ){var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;for ( var i = 0 ; i < aItems.length ; i++ )aItems[i].RefreshState() ;}