fckeditor 代码语法高亮

先是IE:
1、遗留的问题:隐藏的源码和格式化后的代码有会有问题。
经上次研究的结果,两处的代码有可能不对,主要是HTML的特别代码,像代码里有标签<div>,JavaScript代码里有&alt等。这里的解决方法很简单:只要替换一下就可以了,不过要注意,在进行格式化之前就进行替换。因为隐藏的代码也是要替换的,最后取的时候也要替换回去,但是要反顺序。代码如下:


代码如下:

.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g,'>');

2、在FCKeditor里很多控件都有右键菜单可以修改其属性,代码高亮我也想增加一个!到FCKeditor官方网站找了一遍成功的增加了,代码如下(代码放在fckplugin.js):


代码如下:

// 添加右键菜单
FCK.ContextMenu.RegisterListener( {
AddItems : function( menu, tag, tagName )
{
if (!tag)
return;

var oDiv = tag;

// 循环的作用看一下代码就知道了,是为了选择高亮代码的最顶层元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

// under what circumstances do we display this option
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) )
{
FCKSelection.SelectNode( oDiv ) ;
// when the option is displayed, show a separator the command
menu.AddSeparator() ;
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ;
}
}}
);

3、试用了一下效果,发现双击修改时只能双击代码行数左边的灰色才能弹出修改。我觉得不大方便,如果双击代码处也可以弹出修改就方便多了!嘿嘿,答案是肯定的,之前的代码已经注册了DIV标签的双击事件,所以再注册一下格式化后的代码用到的SPAN和LI标签就可以了,代码如下(代码放在fckplugin.js):


代码如下:

// 添加双击事件
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 双击灰色栏
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 双击代码
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 双击代码区空白
// 添加双击事件
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, usingTag ) ; // 双击灰色栏
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'SPAN' ) ; // 双击代码
FCK.RegisterDoubleClickHandler( FCKHighLighter.OnDoubleClick, 'LI' ) ; // 双击代码区空白

4、再试一下,发现双击代码行数这里可以进行修改。但是双击代码就不行,拿不到隐藏的源码。原因是因为在代码里双击的不是顶层元素,那简单,修改一下双击的代码,取得顶层元素就OK了(代码放在fckplugin.js):


代码如下:

/ /双击事件处理代码
FCKHighLighter.OnDoubleClick = function( div ){
var oDiv = div;

// 循环的作用看一下代码就知道了,是为了选择高亮代码的最顶层元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

if(oDiv.tagName == usingTag && oDiv.className == usingFlag) {
FCKSelection.SelectNode( oDiv ) ;
FCKCommands.GetCommand( 'HighLighter' ).Execute() ;
}
}

5、把编辑转到源代码再转回来的时候发现高亮的代码已经不可以编辑了。研究之下发现是用于标识的属性没有了,因为这个标识的属性是非标准的HTML属性。这个也好办,反正顶层的class属性没用,就直接拿来用就可以了。这个简单,我就不给代码了。
IE里的修改算是完成了,而且比较完美。
再来FF:
  本人用系统,用软件都用得比较杂,有时候会用用FF,所以修改的东西一定要支持FF。再说,FCKeditor本身是兼容IE和FF的,增加的插件只支持IE有点说不过去。
1、首先试用了一下效果:发现已经可以插入,不过不可以修改。双击事件也有效,但也是不能修改。这个原因是因为FF跟IE不同,IE里可以把DIV标签直接选择,FF里不可以。所以要加一个单击的事件,让代码帮助FF选择顶层元素,原始代码是从FCKeditor的Placeholder插件里COPY过来的(代码放在fckplugin.js):


代码如下:

// 单击事件处理代码
FCKHighLighter._ClickListener = function( e )
{
var oDiv = e.target;

// 循环的作用看一下代码就知道了,是为了选择高亮代码的最顶层元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )
FCKSelection.SelectNode( oDiv ) ;
}

FCKHighLighter._SetupClickListener = function (){
if (FCKBrowserInfo.IsGecko)
FCK.EditorDocument.addEventListener( 'click', FCKHighLighter._ClickListener, true ) ;
}

// 添加单击事件
FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKHighLighter._SetupClickListener ) ;

// 添加右键菜单
FCK.ContextMenu.RegisterListener( {
AddItems : function( menu, tag, tagName )
{
if (!tag)
return;

var oDiv = tag;

// 循环的作用看一下代码就知道了,是为了选择高亮代码的最顶层元素
while (oDiv.parentNode){
if (oDiv.tagName == usingTag && oDiv.className == usingFlag)
break;
oDiv = oDiv.parentNode;
}

// under what circumstances do we display this option
if ( oDiv.tagName == usingTag && oDiv.className == usingFlag )//&& (tag._FCKHighLighter || tag.parentElement._FCKHighLighter) )
{
FCKSelection.SelectNode( oDiv ) ;
// when the option is displayed, show a separator the command
menu.AddSeparator() ;
// the command needs the registered command name, the title for the context menu, and the icon path
menu.AddItem( 'HighLighter', FCKLang['DlgSyntaxHighLighterProperty'], oHighLighterItem.IconPath ) ;
}
}}
);

注明:这个需要修改FCKeditor的核心代码,因为我发现在2.5.1版本在FF下不可以修改选择的元素,但是最新的2.6测试版就可以。所以需要修改_source\internals\fckselection_gecko.js文件里的GetSelectedElement函数,并且使用官方工具fckpackager.exe重新打包JavaScript代码,这个我有空再写一下。
  到这里已经差不多了,其中还有一些小问题没有说,例如:高亮的代码里可以直接修改(为标签增加一个contentEditable='false'就完了),JS代码兼容要使用parentNode不要使用parentElement等。
  本来想在添加代码的窗口也增加一个实时语法高亮的编辑器,不过上网找了一下用得比较多的CodePress和EditArea都存在一些BUG,特别是在IE7下,所以还是暂时不添加了。日后再修改。
  增加这个插件修改的容易比较多,如果你遇到什么问题可以留言,我会尽力为你解答。
  下一步再为FCKeditor增加一个在线上传图片的插件,这样在别处转载文章时就方便多了,点一下就可以自动上传所有图片,哈哈哈。。。

(0)

相关推荐

  • 2014最热门的JavaScript代码高亮插件推荐

    对于喜欢写技术博客的同学来说,一定对代码高亮组件非常熟悉.一款优秀的JavaScript代码高亮插件,将会帮助你渲染任何一种编程语言,包括一些关键字的着色,以及每行代码的缩进等.今天我们要来分享一些高性能的JavaScript代码高亮插件,这些JavaScript代码高亮插件将非常有效地帮你实现在网页上的代码编辑和展示. 1.SyntaxHighlighter – 最优秀的JavaScript代码高亮插件 SyntaxHighlighter 是一款完全基于JavaScript的代码高亮插件,Sy

  • 两种简单实现菜单高亮显示的JS类代码

    记得当年写静态页时,为了实现高亮都是在每个页面加不同的样式,呵.高亮显示我觉得对于web前端来说,是比较常用到的效果,正好此次又要用到,特地整理出我所写的两种高亮类. 其实思路很简单,第一种方法是通过遍历链接组的href值,通过indexOf判断href值是否被包含在浏览器当前url值中.此方法有一定局限,比如对于iframe内的菜单是不能这样判断的; 第二种方法适用范围更广一样,实现思路也比较简单,即通过判断点击,给点击项加载高亮样式. 第一种判断当前URL值高亮类代码: 复制代码 代码如下:

  • jQuery语法高亮插件支持各种程序源代码语法着色加亮

    1) highlightjs Highlight.js能够对页面中的各种程序源代码语法着色加亮.支持的语言包括: •Python •Ruby •Perl •PHP •XML •HTML •CSS •Django •Javascript •VBScript •Delphi •Java •C++ •RenderMan (RSL and RIB) •SQL •SmallTalk •Axapta •1C •Ini •Diff •DOS .bat •Bash 2) google-code-prettify

  • 高效的表格行背景隔行变色及选定高亮的JS代码

    这段JS放在head中 复制代码 代码如下: //点击当前选中行的时候设置当前行的颜色,同时恢复除当前行外的行的颜色及鼠标事件 function selectRow(target) { var sTable = document.getElementById("ServiceListTable") for(var i=1;i<sTable.rows.length;i++) //遍历除第一行外的所有行 { if (sTable.rows[i] != target) //判断是否当前

  • 用js查找法实现当前栏目的高亮显示的代码

    当前栏目高亮显示        JS判断当前URL对当前栏目高亮显示,重点是用到了indexOf来判断两个字符串中第一次出现的位置,如果没有出现就返回-1,出现就返回 其它,并与返回其它结果的那个字符串所在元素定义一个class. HTML 复制代码 代码如下: <div id="nav">   <ul>   <li><a href="http://www.jb51.net/html/list/index_127.htm" 

  • 2016年最热门的15 款代码语法高亮工具,美化你的代码

    前言: 代码高亮很有用,特别是在需要在网站或者blog中显示自己编写的代码的时候,或者给其他人查看或调试语法错误的时候.我们可以将代码高亮,以便阅读者可以十分方便的读取代码块,增加用户阅读代码的良好体验. 语法高亮是文本编辑器用来显示文本的,特别是源代码,根据不同的类别来用不同的颜色和字体显示.这个功能有助于编写结构化的语言,比如编程语言,标记语言,这些语言的语法错误显示是有区别的.语法高亮并不会影响文本自身的意义,而且能很好的符合人们的阅读习惯. 目前,有很多免费而且有用的代码高亮脚本.这些脚

  • tinyMCE插件开发之插入html,php,sql,js代码 并代码高亮显示

    下面就是我开发的过程. 首先,我的 tinyMCE版本是 Version: 3.2.7 (2009-09-22) .下载地址 http://www.jb51.net/codes/17198.htmltinyMCE插入代码,需要调用 tinyMCE的 tinyMCE.execCommand('mceInsertContent',false,value); 方法.其中参数无需改变,value 就是你要插入的内容, 比如我写了一个函数, 复制代码 代码如下: function InsertHTML(v

  • 分享15个美化代码的代码语法高亮工具

    本文作者是Gavin McLeod,一个被困在<电子世界争霸战>里的骨灰级Web极客.在文中列举了15个帮助开发者快速编码.优化代码的语法高亮工具,每个高亮工具都有其功能特色.(以下是编译内容) 开发者和顽固的代码极客深知Code Syntax Highlighter(以下简称"代码语法高亮工具")作为二级符号的一种形式,便于在一个结构化语言或标记语言里书写代码.有些代码高亮编辑器里融合了多个语法高亮功能,例如拼写检查.代码折叠.语法高亮工具可以在总体策略的使用上起到较大的

  • javascript 关键字高亮显示实现代码

    关键字高亮显示 我们是一个专业的收集各类脚本学习资料的网站,尽量修正错误打造精品脚本类学习网站,我们为大家游戏脚本资源,源码,软件,asp,php,javascript等编程资料,是网页制作,网络编程,网站建设人士的聚集场所. 提供最新的网络编程.脚本编程.网页制作.网页设计.网页特效,为站长与网络编程从业者提供学习资料. 脚本,vbscript,正则表达式,jquery,dos,bat,批处理,javascript,Photoshop,HTML,div+css,ASP,PHP,ASP.NET

  • 如何实现正则表达式的JavaScript的代码高亮

    今天想改一下JS的高亮的配色,憋了一下午憋出了这个这个正则表达式. 下面这老长老长了的玩意儿是个正则表达式,看到了别吓坏了. 复制代码 代码如下: /(\/\/.*|\/\*[\S\s]+?\*\/)|((["'])(?:\\.|[^\\\n])*?\3)|\b(break|continue|do|for|in|function|if|else|return|switch|this|throw|try|catch|finally|var|while|with|case|new|typeof|in

  • javascript网页关键字高亮代码

    //高亮网页关键字的javascript代码 var keys = [ ["脚本",http://www.jb51.net,"#ff0000"], ["小说",http://www.kanshule.com,"#00ff00"], ["念经","http://www.baidu.com","#0000ff"], ["工会","http:/

  • js兼容IE6,IE7菜单高亮显示效果代码

    兼容IE6,IE7菜单高亮显示 *{ font:12px tahoma; } #menu li{ list-style:none; width:88px; height:30px; float:left; background:#EFF1F5; text-align:center; margin:0; overflow:hidden; } #menu li a{ display:block; } #menu li a:link,#menu li a:visited{ text-decoratio

  • Javascript实现的CSS代码高亮显示

    相比JavaScript,CSS的语法就简单多了,主要是处理注释.字符串.CSS样式名称.CSS样式值.缩进和换行,具体详情请看代码. Javascript实现CSS代码高亮显示 body{ font-size:12px; line-height:1.8; font-family:'Courier New', Courier, monospace; } #area{ width:320px; height:120px; } body{ font-size:12px; line-height:1.

  • ASP语法高亮类代码

    此类高亮根据Editplus高亮来做的 复制代码 代码如下: Class Wyd_AspCodeHighLight  Private RegEx  Public Keyword,ObjectCommand,Strings,VBCode  Public KeyWordColor,ObjectCommandColor,StringsColor,Comment,CodeColor    Private Sub Class_Initialize()      Set RegEx = New RegExp

  • 用JS将搜索的关键字高亮显示实现代码

    用JS让文章内容指定的关键字加亮 是这样的.. 现在有这些关键字:美容,生活,购物当在文章里头出现这些关键字,就把它加亮显示.. 文章是生成静态页面的,而这些关键字是能随时更新的,所以我想用JS来实现...不知道怎样来实现这样的功能啊?特此求助 复制代码 代码如下: <script language="JavaScript">function highlight(key) { var key = key.split('|'); for (var i=0; i<key.

  • 高亮显示web页表格行的javascript代码

    本篇作为开发学习笔记之一. [文] 在web开发中经常遇到需要加亮鼠标指向的表格行的情况.首先说说一般的情况. ·简单尝试 CSS2中允许我们对HTML元素使用hover伪类,这极大的方便了对于表格的样式的控制. 我们从一个小例子开始: XHTML(只列出了表格部分,请自行补完页面,本例在Transational的DTD下通过): 复制代码 代码如下: <table class="datatable" cellspacing="0"> <thead

  • JavaScript版代码高亮

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>JavaScript版代码高亮</title><link href=&

随机推荐