⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fck_editor.js

📁 一种Portal的实现源码
💻 JS
字号:
/*
 * FCKeditor - The text editor for internet
 * Copyright (C) 2003-2004 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 go to http://www.fredck.com/FCKeditor/ 
 * or contact fckeditor@fredck.com.
 *
 * fck_editor.js: Main script that initializes the editor.
 *
 * Authors:
 *   Frederico Caldeira Knabben (fckeditor@fredck.com)
 */

var STATE_STARTING		= 0 ;
var STATE_INITIALIZING	= 1 ;
var STATE_LOADING_DATA	= 2 ;
var STATE_RUNNING		= 3 ;

var eActualState = STATE_STARTING ;

function OnDocumentComplete()
{
	if ( eActualState == STATE_STARTING ) 
	{
		eActualState = STATE_INITIALIZING ;
		
		loadToolbarSet() ;
		loadToolbarSourceSet() ;
	}

	if ( eActualState == STATE_INITIALIZING && ! objContent.Busy)
	{
		objContent.ShowBorders = config.StartupShowBorders ;
		objContent.ShowDetails = config.StartupShowDetails ;
		
		setLinkedField() ;
	}
	
	if ( eActualState == STATE_LOADING_DATA && !objContent.Busy )
	{
		objContent.DOM.body.onpaste		= onPaste ;
		objContent.DOM.body.ondrop		= onDrop ;
		
		objContent.DOM.body.onkeydown = onKeyDown ;
		
		objContent.DOM.body.onfocus				= Styles ;
		objContent.DOM.body.onblur				= Styles;
		objContent.DOM.body.onpropertychange	= Styles;

		objContent.DOM.createStyleSheet(config.EditorAreaCSS) ;

		objContent.BaseURL = config.BaseUrl ;
	}
}

// Method: loadToolbarSet()
// Description: Loads a toobar buttons set from an array inside the Toolbar holder.
// Author: FredCK
function loadToolbarSet()
{
	var sToolBarSet = URLParams["Toolbar"] == null ? "Default" : URLParams["Toolbar"] ;

	// FredCK: Toobar holder (DIV)
	var oToolbarHolder = document.getElementById("divToolbar") ;

	var oToolbar = new TBToolbar() ;
	oToolbar.LoadButtonsSet( sToolBarSet ) ;
	oToolbarHolder.innerHTML = oToolbar.GetHTML() ;
}

function loadToolbarSourceSet()
{
	// FredCK: Toobar holder (DIV)
	var oToolbarHolder = document.getElementById("divToolbarSource") ;

	var oToolbar = new TBToolbar() ;
	oToolbar.LoadButtonsSet( "Source" ) ;
	oToolbarHolder.innerHTML = oToolbar.GetHTML() ;
}

function switchEditMode()
{
	var bSource = (trSource.style.display == "none") ;

	if (bSource) 
	{
		if ( config.EnableXHTML && config.EnableSourceXHTML )
			txtSource.value = getXhtml( objContent.DOM.body ) ;
		else
			txtSource.value = objContent.DOM.body.innerHTML ;
	}
	else
	{
		LoadHTML( txtSource.value ) ;
	}
		
	trEditor.style.display = bSource ? "none" : "inline" ;
	trSource.style.display = bSource ? "inline" : "none" ;

	events.fireEvent('onViewMode', bSource) ;
}

// Gets the actual HTML.
function getValue()
{
	var bWysiwyg = (trSource.style.display == "none") ;

	if (bWysiwyg) 
		return objContent.DOM.body.innerHTML ;
	else
		return txtSource.value ;
}

// setValue(): called from reset() to make a select list show the current font
// or style attributes
function selValue(el, str, text)
{
	//if (!RichEditor.txtView) return;      // Disabled in View Source mode
	for (var i = 0; i < el.length; i++) 
	{
		if (((text || !el[i].value) && el[i].text == str) || ((!text || el[i].value) && el[i].value == str)) 
		{
			el.selectedIndex = i;
			return;
		}
	}
	el.selectedIndex = 0;
}

function LoadHTML( html )
{
	eActualState = STATE_LOADING_DATA ;

	objContent.DocumentHTML = 
		'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' +
		'<html><head></head><body>' + html + '</body></html>' ;
	
//	// __tmpFCKRemove__ added and removed to solve DHTML component error when loading "<p><hr></p>"
//	objContent.DOM.body.innerHTML = "<div id=__tmpFCKRemove__>&nbsp;</div>" + html ;
//	objContent.DOM.getElementById('__tmpFCKRemove__').removeNode(true) ;
}

var oLinkedField = null ;
function setLinkedField()
{
	if (! URLParams['FieldName']) return ;
	
	var oFields = parent.document.getElementsByName(URLParams['FieldName']) ;
	
	for ( var i = 0 ; i < oFields.length ; i++ )
	{
		oLinkedField = oFields[i] ;
		if ( oLinkedField.tagName == "INPUT" ) break ;
	}
	
	if (! oLinkedField) return ;

	LoadHTML( oLinkedField.value ) ;
	
	var oForm = oLinkedField.form ;
	
	if (!oForm) return ;

	// Attaches the field update to the onsubmit event
	oForm.attachEvent("onsubmit", setFieldValue) ;
	
	// Attaches the field update to the submit method (IE doesn't fire onsubmit on this case)
	if (! oForm.updateFCKEditor) oForm.updateFCKEditor = new Array() ;
	oForm.updateFCKEditor[oForm.updateFCKEditor.length] = setFieldValue ;
	if (! oForm.originalSubmit)
	{
		oForm.originalSubmit = oForm.submit ;
		oForm.submit = function()
		{
			if (this.updateFCKEditor)
			{
				for (var i = 0 ; i < this.updateFCKEditor.length ; i++)
				{
					this.updateFCKEditor[i]() ;
				}
			}
			this.originalSubmit() ;
		}
	}
}

function setFieldValue()
{
	if (trSource.style.display != "none")
		switchEditMode() ;

	if (config.EnableXHTML)
		oLinkedField.value = getXhtml( objContent.DOM.body ) ;
	else
		oLinkedField.value = objContent.DOM.body.innerHTML ;
}

function onPaste()
{
	if (config.ForcePasteAsPlainText)
	{
		pastePlainText() ;	
		return false ;
	}
	else if (config.AutoDetectPasteFromWord && BrowserInfo.IsIE55OrMore)
	{
		var sHTML = GetClipboardHTML() ;
		var re = /<\w[^>]* class="?MsoNormal"?/gi ;
		if ( re.test( sHTML ) )
		{
			if ( config.ForceCleanPasteFromWord || confirm( lang["PasteWordConfirm"] ) )
			{
				cleanAndPaste( sHTML ) ;
				return false ;
			}
		}
	}
	else
		return true ;
}

function onDrop()
{
	if (config.ForcePasteAsPlainText)
	{
		var sText = HTMLEncode( objContent.DOM.parentWindow.event.dataTransfer.getData("Text") ) ;
		sText = sText.replace(/\n/g,'<BR>') ;
		insertHtml(sText) ;
		return false ;
	}
	else if (config.AutoDetectPasteFromWord && BrowserInfo.IsIE55OrMore)
	{
		// TODO
		// To find a way to get the HTML that is dropped, 
		// clean it and insert it into the document.
		return true ;
	}
	else
		return true ;
}

function onKeyDown()
{
	var oWindow = objContent.DOM.parentWindow ;
	
	if ( oWindow.event.ctrlKey || oWindow.event.altKey || oWindow.event.shiftKey ) 
	{
		oWindow.event.returnValue = true ;
		return ;
	}

	if ( oWindow.event.keyCode == 9 && config.TabSpaces > 0 )	// TAB
	{
		var sSpaces = "" ;
		for ( i = 0 ; i < config.TabSpaces ; i++ )
			sSpaces += "&nbsp;" ;
		insertHtml( sSpaces ) ;
		
		oWindow.event.returnValue = false ;
	}
	else if (  oWindow.event.keyCode == 13 && config.UseBROnCarriageReturn )	// ENTER
	{
		if ( objContent.DOM.queryCommandState( 'InsertOrderedList' ) || objContent.DOM.queryCommandState( 'InsertUnorderedList' ) )
		{
			oWindow.event.returnValue = true ;
			return ;
		}

		insertHtml("<br>&nbsp;") ;
			
		var oRange = objContent.DOM.selection.createRange() ;
		oRange.moveStart('character',-1) ;	
		oRange.select() ;
		objContent.DOM.selection.clear() ;
			
		oWindow.event.returnValue = false ;
	}
}

function Styles()
{
	var allForms = objContent.DOM.body.getElementsByTagName("FORM") ;
	for ( var a=0; a < allForms.length; a++) 
	{
		allForms[a].runtimeStyle.border		= "1px dotted #FF0000" ;
		allForms[a].runtimeStyle.padding	= "2px" ;
	}

	var allInputs = objContent.DOM.body.getElementsByTagName("INPUT");
	for ( var b=0; b < allInputs.length; b++) 
	{
		if (allInputs[b].type.toUpperCase() == "HIDDEN") 
		{
			allInputs[b].runtimeStyle.width				= "20px" ;
			allInputs[b].runtimeStyle.height			= "20px" ;
			allInputs[b].runtimeStyle.border			= "1px dotted #FF0000" ;
			allInputs[b].runtimeStyle.backgroundImage	= "url(" + config.BasePath + "images/editor/hidden.gif)" ;
			allInputs[b].runtimeStyle.fontSize			= "99px" ;
		}
	}
	
	// Anchors
	var allLinks = objContent.DOM.body.getElementsByTagName("A") ;
	for ( var i=0; i < allLinks.length; i++ ) 
	{
		if ( allLinks[i].name.length > 0 && allLinks[i].href.length == 0 ) 
		{
			allLinks[i].runtimeStyle.width				= "20px" ;
			allLinks[i].runtimeStyle.height				= "20px" ;
			allLinks[i].runtimeStyle.textIndent			= "20px" ;
			allLinks[i].runtimeStyle.backgroundRepeat	= "no-repeat" ;
			allLinks[i].runtimeStyle.backgroundImage	= "url(" + config.BasePath + "images/editor/anchor.gif)" ;
		}
	}

}

function dblClickAction()
{
  	// Gets the actual selection.
	var sel = objContent.DOM.selection.createRange() ;
	var oTag ;
	var sTagName ;
	if (objContent.DOM.selection.type != 'Text' && sel.length == 1)
	{
		oTag = sel.item(0) ;
		sTagName = oTag.tagName.toUpperCase() ;
	}
	
	// If over a link or anchor.
	if (checkDecCommand(DECMD_UNLINK) == OLE_TRISTATE_UNCHECKED)
	{
		if ( oTag && oTag.name.length > 0 && oTag.href.length == 0 )
			anchor() ;
		else
			dialogLink() ;
	}
	else if ( sTagName == "TABLE" )
		dialogTable() ;
	else if ( sTagName == "IMG" )
		dialogImage() ;
	else if ( sTagName == "INPUT" )
	{
		switch ( oTag.type )
		{
			case 'button' :
			case 'submit' :
			case 'reset' :
				button() ;
				break ;
			case 'checkbox' :
				checkbox() ;
				break ;
			case 'hidden' :
				hidden() ;
				break;
			case 'radio' :
				radio() ;
				break ;
			case 'image' :
				imageButton() ;
				break ;
			case 'password' :
			case 'text' :
				textfield() ;
				break ;
			case 'file' :
				break ;
		}
	}
	else if ( sTagName == "SELECT" )
		selectField() ;
	else if ( sTagName == "TEXTAREA" )
		textarea() ;
	else if ( sTagName == "FORM" )
		form() ;
	else
		return true ;

	return false ;
}

⌨️ 快捷键说明

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