fcktoolbarset.js

来自「国外很不错的一个开源OA系统Group-Office」· JavaScript 代码 · 共 358 行

JS
358
字号
/* * FCKeditor - The text editor for Internet - http://www.fckeditor.net * Copyright (C) 2003-2007 Frederico Caldeira Knabben * * == BEGIN LICENSE == * * Licensed under the terms of any of the following licenses at your * choice: * *  - GNU General Public License Version 2 or later (the "GPL") *    http://www.gnu.org/licenses/gpl.html * *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL") *    http://www.gnu.org/licenses/lgpl.html * *  - Mozilla Public License Version 1.1 or later (the "MPL") *    http://www.mozilla.org/MPL/MPL-1.1.html * * == END LICENSE == * * Defines the FCKToolbarSet object that is used to load and draw the * toolbar. */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.			oToolbarSet = eToolbarTarget.__FCKToolbarSet ;			if ( oToolbarSet )				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() ;	else		this.Collapse() ;	// Enable/disable the collapse handler	eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;	if ( FCKConfig.ToolbarCanCollapse )		eCollapseHandle.style.display = '' ;	else		targetDocument.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 ) ;	else		this.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 j = 0 ; j < aItems.length ; j++ )			aItems[j].Disable() ;	}}FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance ){	var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;	for ( var i = 0 ; i < aItems.length ; i++ )		aItems[i].RefreshState() ;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?