fck.js

来自「国外很不错的一个开源OA系统Group-Office」· JavaScript 代码 · 共 860 行 · 第 1/2 页

JS
860
字号
		}		else		{			// Remove the references to the following elements, as the editing area			// IFRAME will be removed.			FCK.EditorWindow	= null ;			FCK.EditorDocument	= null ;			this.EditingArea.OnLoad = null ;			this.EditingArea.Start( html ) ;			// Enables the context menu in the textarea.			this.EditingArea.Textarea._FCKShowContextMenu = true ;			// Removes the enter key handler.			FCK.EnterKeyHandler = null ;			if ( resetIsDirty )				this.ResetIsDirty() ;			// Listen for keystroke events.			FCK.KeystrokeHandler.AttachToElement( this.EditingArea.Textarea ) ;			this.EditingArea.Textarea.focus() ;			FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;		}		if ( FCKBrowserInfo.IsGecko )			window.onresize() ;	},	// For the FocusManager	HasFocus : false,	// This collection is used by the browser specific implementations to tell	// wich named commands must be handled separately.	RedirectNamedCommands : new Object(),	ExecuteNamedCommand : function( commandName, commandParameter, noRedirect )	{		FCKUndo.SaveUndoStep() ;		if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null )			FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;		else		{			FCK.Focus() ;			FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;			FCK.Events.FireEvent( 'OnSelectionChange' ) ;		}		FCKUndo.SaveUndoStep() ;	},	GetNamedCommandState : function( commandName )	{		try		{			if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )				return FCK_TRISTATE_DISABLED ;			else				return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;		}		catch ( e )		{			return FCK_TRISTATE_OFF ;		}	},	GetNamedCommandValue : function( commandName )	{		var sValue = '' ;		var eState = FCK.GetNamedCommandState( commandName ) ;		if ( eState == FCK_TRISTATE_DISABLED )			return null ;		try		{			sValue = this.EditorDocument.queryCommandValue( commandName ) ;		}		catch(e) {}		return sValue ? sValue : '' ;	},	PasteFromWord : function()	{		FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;	},	Preview : function()	{		var iWidth	= FCKConfig.ScreenWidth * 0.8 ;		var iHeight	= FCKConfig.ScreenHeight * 0.7 ;		var iLeft	= ( FCKConfig.ScreenWidth - iWidth ) / 2 ;		var oWindow = window.open( '', null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;		var sHTML ;		if ( FCKConfig.FullPage )		{			if ( FCK.TempBaseTag.length > 0 )				sHTML = FCK.TempBaseTag + FCK.GetXHTML() ;			else				sHTML = FCK.GetXHTML() ;		}		else		{			sHTML =				FCKConfig.DocType +				'<html dir="' + FCKConfig.ContentLangDirection + '">' +				'<head>' +				FCK.TempBaseTag +				'<title>' + FCKLang.Preview + '</title>' +				_FCK_GetEditorAreaStyleTags() +				'</head><body>' +				FCK.GetXHTML() +				'</body></html>' ;		}		oWindow.document.write( sHTML );		oWindow.document.close();	},	SwitchEditMode : function( noUndo )	{		var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;		// Save the current IsDirty state, so we may restore it after the switch.		var bIsDirty = FCK.IsDirty() ;		var sHtml ;		// Update the HTML in the view output to show.		if ( bIsWysiwyg )		{			if ( !noUndo && FCKBrowserInfo.IsIE )				FCKUndo.SaveUndoStep() ;			sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ;			if ( sHtml == null )				return false ;		}		else			sHtml = this.EditingArea.Textarea.value ;		FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;		FCK.SetHTML( sHtml, !bIsDirty ) ;		// Set the Focus.		FCK.Focus() ;		// Update the toolbar (Running it directly causes IE to fail).		FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ;		return true ;	},	CreateElement : function( tag )	{		var e = FCK.EditorDocument.createElement( tag ) ;		return FCK.InsertElementAndGetIt( e ) ;	},	InsertElementAndGetIt : function( e )	{		e.setAttribute( 'FCKTempLabel', 'true' ) ;		this.InsertElement( e ) ;		var aEls = FCK.EditorDocument.getElementsByTagName( e.tagName ) ;		for ( var i = 0 ; i < aEls.length ; i++ )		{			if ( aEls[i].getAttribute( 'FCKTempLabel' ) )			{				aEls[i].removeAttribute( 'FCKTempLabel' ) ;				return aEls[i] ;			}		}		return null ;	}} ;FCK.Events	= new FCKEvents( FCK ) ;// GetHTML is Deprecated : returns the same value as GetXHTML.FCK.GetHTML	= FCK.GetXHTML ;// Replace all events attributes (like onclick).function _FCK_ProtectEvents_ReplaceTags( tagMatch ){	return tagMatch.replace( FCKRegexLib.EventAttributes, _FCK_ProtectEvents_ReplaceEvents ) ;}// Replace an event attribute with its respective __fckprotectedatt attribute.// The original event markup will be encoded and saved as the value of the new// attribute.function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName ){	return ' ' + attName + '_fckprotectedatt="' + eventMatch.ReplaceAll( [/&/g,/'/g,/"/g,/=/g,/</g,/>/g,/\r/g,/\n/g], ['&apos;','&#39;','&quot;','&#61;','&lt;','&gt;','&#10;','&#13;'] ) + '"' ;}function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal ){	return encodedOriginal.ReplaceAll( [/&#39;/g,/&quot;/g,/&#61;/g,/&lt;/g,/&gt;/g,/&#10;/g,/&#13;/g,/&apos;/g], ["'",'"','=','<','>','\r','\n','&'] ) ;}function _FCK_EditingArea_OnLoad(){	// Get the editor's window and document (DOM)	FCK.EditorWindow	= FCK.EditingArea.Window ;	FCK.EditorDocument	= FCK.EditingArea.Document ;	FCK.InitializeBehaviors() ;	// Create the enter key handler	if ( !FCKConfig.DisableEnterKeyHandler )		FCK.EnterKeyHandler = new FCKEnterKey( FCK.EditorWindow, FCKConfig.EnterMode, FCKConfig.ShiftEnterMode ) ;	// Listen for keystroke events.	FCK.KeystrokeHandler.AttachToElement( FCK.EditorDocument ) ;	if ( FCK._ForceResetIsDirty )		FCK.ResetIsDirty() ;	// This is a tricky thing for IE. In some cases, even if the cursor is	// blinking in the editing, the keystroke handler doesn't catch keyboard	// events. We must activate the editing area to make it work. (#142).	if ( FCKBrowserInfo.IsIE && FCK.HasFocus )		FCK.EditorDocument.body.setActive() ;	FCK.OnAfterSetHTML() ;	// Check if it is not a startup call, otherwise complete the startup.	if ( FCK.Status != FCK_STATUS_NOTLOADED )		return ;	FCK.SetStatus( FCK_STATUS_ACTIVE ) ;}function _FCK_GetEditorAreaStyleTags(){	var sTags = '' ;	var aCSSs = FCKConfig.EditorAreaCSS ;	for ( var i = 0 ; i < aCSSs.length ; i++ )		sTags += '<link href="' + aCSSs[i] + '" rel="stylesheet" type="text/css" />' ;	return sTags ;}function _FCK_KeystrokeHandler_OnKeystroke( keystroke, keystrokeValue ){	if ( FCK.Status != FCK_STATUS_COMPLETE )		return false ;	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )	{		if ( keystrokeValue == 'Paste' )			return !FCK.Events.FireEvent( 'OnPaste' ) ;	}	else	{		// In source mode, some actions must have their default behavior.		if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll' ) )			return false ;	}	// The return value indicates if the default behavior of the keystroke must	// be cancelled. Let's do that only if the Execute() call explicitelly returns "false".	var oCommand = FCK.Commands.GetCommand( keystrokeValue ) ;	return ( oCommand.Execute.apply( oCommand, FCKTools.ArgumentsToArray( arguments, 2 ) ) !== false ) ;}// Set the FCK.LinkedField reference to the field that will be used to post the// editor data.(function(){	// There is a bug on IE... getElementById returns any META tag that has the	// name set to the ID you are looking for. So the best way in to get the array	// by names and look for the correct one.	// As ASP.Net generates a ID that is different from the Name, we must also	// look for the field based on the ID (the first one is the ID).	var oDocument = window.parent.document ;	// Try to get the field using the ID.	var eLinkedField = oDocument.getElementById( FCK.Name ) ;	var i = 0;	while ( eLinkedField || i == 0 )	{		if ( eLinkedField && eLinkedField.tagName.toLowerCase().Equals( 'input', 'textarea' ) )		{			FCK.LinkedField = eLinkedField ;			break ;		}		eLinkedField = oDocument.getElementsByName( FCK.Name )[i++] ;	}})() ;var FCKTempBin ={	Elements : new Array(),	AddElement : function( element )	{		var iIndex = this.Elements.length ;		this.Elements[ iIndex ] = element ;		return iIndex ;	},	RemoveElement : function( index )	{		var e = this.Elements[ index ] ;		this.Elements[ index ] = null ;		return e ;	},	Reset : function()	{		var i = 0 ;		while ( i < this.Elements.length )			this.Elements[ i++ ] == null ;		this.Elements.length = 0 ;	}} ;// # Focus Manager: Manages the focus in the editor.var FCKFocusManager = FCK.FocusManager ={	IsLocked : false,	AddWindow : function( win, sendToEditingArea )	{		var oTarget ;		if ( FCKBrowserInfo.IsIE )			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;		else			oTarget = win.document ;		FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;		FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ;	},	RemoveWindow : function( win )	{		if ( FCKBrowserInfo.IsIE )			oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;		else			oTarget = win.document ;		FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ;		FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ;	},	Lock : function()	{		this.IsLocked = true ;	},	Unlock : function()	{		if ( this._HasPendingBlur )			FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;		this.IsLocked = false ;	},	_ResetTimer : function()	{		this._HasPendingBlur = false ;		if ( this._Timer )		{			window.clearTimeout( this._Timer ) ;			delete this._Timer ;		}	}} ;function FCKFocusManager_Win_OnBlur(){	if ( typeof(FCK) != 'undefined' && FCK.HasFocus )	{		FCKFocusManager._ResetTimer() ;		FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;	}}function FCKFocusManager_FireOnBlur(){	if ( FCKFocusManager.IsLocked )		FCKFocusManager._HasPendingBlur = true ;	else	{		FCK.HasFocus = false ;		FCK.Events.FireEvent( "OnBlur" ) ;	}}function FCKFocusManager_Win_OnFocus_Area(){	FCK.Focus() ;	FCKFocusManager_Win_OnFocus() ;}function FCKFocusManager_Win_OnFocus(){	FCKFocusManager._ResetTimer() ;	if ( !FCK.HasFocus && !FCKFocusManager.IsLocked )	{		FCK.HasFocus = true ;		FCK.Events.FireEvent( "OnFocus" ) ;	}}

⌨️ 快捷键说明

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