论坛首页 Web前端技术论坛

AJAX一统天下之Rich Editor整合篇

浏览 42136 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-02-06  
不是切换链接。是FCKEditor中的"代码"这个按钮,这个按钮显然不是FCKEditor自带的,而是robbin他们改造了FCKEditor之后增加进去的。我现在就是需要王FCKEditor中增加一个自定义的按钮。
0 请登录后投票
   发表时间:2007-02-07  
KFCEditor loading太慢,想知道一些优化加速技巧
0 请登录后投票
   发表时间:2007-02-07  
macrochen 写道
jackhlp 写道
嗯,FCKeditor确实不错,可以说是在线编辑器中最好的了,我前段时间也在看它,也错了一个像javaeye现在这样的一个插件,感觉很不错,呵呵

希望更多的朋友总结一些使用FCKEditor的经验,呵呵。


我最近一直在用FCKEditor ,感觉还不错.不知道LZ要哪方面的经验呢?

FCKEditor写的很完美,我试图修改了好多次都没有修改成功.

不知道可有人知道用Fckeditor实现如下效果:

  开始写内容时就自动保存所写内容,实现Ajax,当提交时自动删除保存的内容

期待中....................
0 请登录后投票
   发表时间:2007-02-07  
zexunlee 写道
不是切换链接。是FCKEditor中的"代码"这个按钮,这个按钮显然不是FCKEditor自带的,而是robbin他们改造了FCKEditor之后增加进去的。我现在就是需要王FCKEditor中增加一个自定义的按钮。


源码 这个按钮不能随意开放,高手写段js代码就可以产生攻击.
0 请登录后投票
   发表时间:2007-02-07  
ahut9923 写道
zexunlee 写道
不是切换链接。是FCKEditor中的"代码"这个按钮,这个按钮显然不是FCKEditor自带的,而是robbin他们改造了FCKEditor之后增加进去的。我现在就是需要王FCKEditor中增加一个自定义的按钮。


源码 这个按钮不能随意开放,高手写段js代码就可以产生攻击.


不是希望开放代码,而是能不能提示一下,从哪个地方入手来进行修改,加入自定义的按钮。
0 请登录后投票
   发表时间:2007-02-07  
ahut9923 写道
macrochen 写道
jackhlp 写道
嗯,FCKeditor确实不错,可以说是在线编辑器中最好的了,我前段时间也在看它,也错了一个像javaeye现在这样的一个插件,感觉很不错,呵呵

希望更多的朋友总结一些使用FCKEditor的经验,呵呵。


我最近一直在用FCKEditor ,感觉还不错.不知道LZ要哪方面的经验呢?

FCKEditor写的很完美,我试图修改了好多次都没有修改成功.

不知道可有人知道用Fckeditor实现如下效果:

  开始写内容时就自动保存所写内容,实现Ajax,当提交时自动删除保存的内容

期待中....................


见过别人写的AUTOSAVE,功能如你所述的,但需要与SERVER交叉,做起多用户来麻烦占资源。
所以我觉得用COOKIE可以做
0 请登录后投票
   发表时间:2007-02-08  
sp42 写道
KFCEditor loading太慢,想知道一些优化加速技巧

慢主要是toolbar,所以可以针对toolbar根据需要进行裁剪
如果不需要使用国际化,则只保留中文,具体做法可以google,网上有很多
0 请登录后投票
   发表时间:2007-02-08  
zexunlee 写道
不是切换链接。是FCKEditor中的"代码"这个按钮,这个按钮显然不是FCKEditor自带的,而是robbin他们改造了FCKEditor之后增加进去的。我现在就是需要王FCKEditor中增加一个自定义的按钮。

这个功能可以参考image, flash以及table那几个toolbar item的做法来实现,基本原理无非是打开一个dialog,然后输入一些内容,点击“确定”按钮,将输入的内容添加到editor相应的位置。
在_source\internals\fcktoolbaritems.js文件中,我们可以看到如下代码:
case 'Image'			: oItem = new FCKToolbarButton( 'Image'			, FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ;

因此我们可以参照其做法,添加自己的toolbar item。
在创建toolbar item的js文件_source\internals\fcktoolbarbutton.js文件里面我们会找到下面的代码:
FCKToolbarButton.prototype.Click = function()
{
	var oToolbarButton = this._ToolbarButton || this ;
	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
}

然后在_source\internals\fckcommands.js找到GetCommand函数,里面包含了创建image的相关command创建过程:
case 'Image'		: oCommand = new FCKDialogCommand( 'Image'		, FCKLang.DlgImgTitle			, 'dialog/fck_image.html'		, 450, 400 ) ; break ;

因此我们要创建自己的dialog,也需要在dilaog目录下面创建一个fck_xxx.html的模版文件,参照image的dialog,其主要工作就是如何在点击确定的时候将输入的内容加入到editor中指定的位置,这里我们可以参考editor\dialog\fck_image\fck_image.js文件的代码:
//#### The OK button was hit.
function Ok()
{
	if ( GetE('txtUrl').value.length == 0 )
	{
		window.parent.SetSelectedTab( 'Info' ) ;
		GetE('txtUrl').focus() ;

		alert( FCKLang.DlgImgAlertUrl ) ;

		return false ;
	}

	var bHasImage = ( oImage != null ) ;

	if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
	{
		if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
			oImage = null ;
	}
	else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
	{
		if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
			oImage = null ;
	}
	
	if ( !bHasImage )
	{
		if ( bImageButton )
		{
			oImage = FCK.EditorDocument.createElement( 'INPUT' ) ;
			oImage.type = 'image' ;
			oImage = FCK.InsertElementAndGetIt( oImage ) ;
		}
		else
			oImage = FCK.CreateElement( 'IMG' ) ;
	}
	else
		oEditor.FCKUndo.SaveUndoStep() ;
	
	UpdateImage( oImage ) ;

	var sLnkUrl = GetE('txtLnkUrl').value.trim() ;

	if ( sLnkUrl.length == 0 )
	{
		if ( oLink )
			FCK.ExecuteNamedCommand( 'Unlink' ) ;
	}
	else
	{
		if ( oLink )	// Modifying an existent link.
			oLink.href = sLnkUrl ;
		else			// Creating a new link.
		{
			if ( !bHasImage )
				oEditor.FCKSelection.SelectNode( oImage ) ;

			oLink = oEditor.FCK.CreateLink( sLnkUrl ) ;

			if ( !bHasImage )
			{
				oEditor.FCKSelection.SelectNode( oLink ) ;
				oEditor.FCKSelection.Collapse( false ) ;
			}
		}

		SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
		SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
	}

	return true ;
}
0 请登录后投票
   发表时间:2007-02-08  
macrochen 写道
zexunlee 写道
不是切换链接。是FCKEditor中的"代码"这个按钮,这个按钮显然不是FCKEditor自带的,而是robbin他们改造了FCKEditor之后增加进去的。我现在就是需要王FCKEditor中增加一个自定义的按钮。

这个功能可以参考image, flash以及table那几个toolbar item的做法来实现,基本原理无非是打开一个dialog,然后输入一些内容,点击“确定”按钮,将输入的内容添加到editor相应的位置。
在_source\internals\fcktoolbaritems.js文件中,我们可以看到如下代码:
case 'Image'			: oItem = new FCKToolbarButton( 'Image'			, FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ;

因此我们可以参照其做法,添加自己的toolbar item。
在创建toolbar item的js文件_source\internals\fcktoolbarbutton.js文件里面我们会找到下面的代码:
FCKToolbarButton.prototype.Click = function()
{
	var oToolbarButton = this._ToolbarButton || this ;
	FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
}

然后在_source\internals\fckcommands.js找到GetCommand函数,里面包含了创建image的相关command创建过程:
case 'Image'		: oCommand = new FCKDialogCommand( 'Image'		, FCKLang.DlgImgTitle			, 'dialog/fck_image.html'		, 450, 400 ) ; break ;

因此我们要创建自己的dialog,也需要在dilaog目录下面创建一个fck_xxx.html的模版文件,参照image的dialog,其主要工作就是如何在点击确定的时候将输入的内容加入到editor中指定的位置,这里我们可以参考editor\dialog\fck_image\fck_image.js文件的代码:
//#### The OK button was hit.
function Ok()
{
	if ( GetE('txtUrl').value.length == 0 )
	{
		window.parent.SetSelectedTab( 'Info' ) ;
		GetE('txtUrl').focus() ;

		alert( FCKLang.DlgImgAlertUrl ) ;

		return false ;
	}

	var bHasImage = ( oImage != null ) ;

	if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
	{
		if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
			oImage = null ;
	}
	else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
	{
		if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
			oImage = null ;
	}
	
	if ( !bHasImage )
	{
		if ( bImageButton )
		{
			oImage = FCK.EditorDocument.createElement( 'INPUT' ) ;
			oImage.type = 'image' ;
			oImage = FCK.InsertElementAndGetIt( oImage ) ;
		}
		else
			oImage = FCK.CreateElement( 'IMG' ) ;
	}
	else
		oEditor.FCKUndo.SaveUndoStep() ;
	
	UpdateImage( oImage ) ;

	var sLnkUrl = GetE('txtLnkUrl').value.trim() ;

	if ( sLnkUrl.length == 0 )
	{
		if ( oLink )
			FCK.ExecuteNamedCommand( 'Unlink' ) ;
	}
	else
	{
		if ( oLink )	// Modifying an existent link.
			oLink.href = sLnkUrl ;
		else			// Creating a new link.
		{
			if ( !bHasImage )
				oEditor.FCKSelection.SelectNode( oImage ) ;

			oLink = oEditor.FCK.CreateLink( sLnkUrl ) ;

			if ( !bHasImage )
			{
				oEditor.FCKSelection.SelectNode( oLink ) ;
				oEditor.FCKSelection.Collapse( false ) ;
			}
		}

		SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
		SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
	}

	return true ;
}



多谢楼主,受益非浅。多交流。
0 请登录后投票
   发表时间:2007-02-10  
对于使用fck,发现JavaEye有点偷懒哈,居然连中文字体都没有加一个
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics