KindEditor插件之代码高亮
前序:由于工作需要使用在线编辑器,找了几个对比了下KindEditor还是不错的,国产的.但文档还是不全,还好能参考官方插件,套出来一些插 件.本文章分为4个部分,分别介绍图片上传插件、代码高亮插件、引用文本以及附件插件的制作。网上大部分都是直接或改官方的JSP文件,连action都 没有用,太不专业了。在上传附件或图片的时候写action上传不了居然还将web.xml中的<url-pattern>/*< /url-pattern>换为:<url-pattern>*.action</url-pattern>这样以来势必 会影响到其他地方。本文主要讲解插件的详细制作过程以及问题的处理,均为结合Struts2的标准方式,绝无什么水货处理方式!
KindEditor官方:http://www.kindsoft.net/
KindEditor4.0测试版Demo:http://www.kindsoft.net/ke4/php/demo.php
注意:KindEditor官方4.0下月发布正式版,已经有了代码高亮、附件上传等插件,如果你能等的话就暂扫一下我的文章就可以了!!!
KindEditor插件之代码高亮
代码高亮这个功能对于我们这些个coder来说很有用处,所以我们写一个,怎么写?
1.先去别人的页面上盗取下来一个代码选择的页面,自己写也可以,就一个下拉框,一个文本域就完了.
我这里是盗用OSCHINA的:
1 <!doctype html>
2 <html>
3 <head>
4 <meta charset="utf-8"/>
5 <title>KindEditor</title>
6 </head>
7 <body style='background:#f0f0ee;font-size:9pt;'>
8 <table border="0" cellpadding="0" cellspacing="0">
9 <tr>
10 <td style='padding-bottom:10px;'>
11 <select id='ic_lang' name='lang'>
12
13 <option value=''>[选择编程语言]</option>
14 <option value='java'>Java</option>
15 <option value='cpp'>C/C++/Objective-C</option>
16 <option value='c#'>C#</option>
17 <option value='js'>JavaScript</option>
18 <option value='php'>PHP</option>
19
20 <option value='perl'>Perl</option>
21 <option value='python'>Python</option>
22 <option value='ruby'>Ruby</option>
23 <option value='html'>HTML</option>
24 <option value='xml'>XML</option>
25 <option value='css'>CSS</option>
26
27 <option value='vb'>ASP/Basic</option>
28 <option value='pascal'>Delphi/Pascal</option>
29 <option value='scala'>Scala</option>
30 <option value='groovy'>Groovy</option>
31 <option value='lua'>Lua</option>
32 <option value='sql'>SQL</option>
33
34 <option value='cpp'>Google Go</option>
35 <option value='as3'>Flash/ActionScript/Flex</option>
36 <option value='sliverlight'>WPF/SliverLight</option>
37 <option value='shell'>Shell/批处理</option>
38 </select>
39 以便系统进行正确的语法着色
40 </td>
41
42 </tr>
43 <tr>
44 <td>
45 <textarea name='source' id='ic_source' style='width:500px;height:200px;font-size:9pt;font-family:Courier New,Arial'></textarea>
46 </td>
47 </tr>
48 </table>
49 </body>
50 </html>
你直接用吧,什么都不用改.
放到哪里呢?我们放到js\plugins\code\insert_code.html这里js文件夹下有你的kindeditor.js
有了页面,我们还没有写调用它的代码....
继续,打开你的编辑器页面加入以下javascript:
$(document).ready(function(){ KE.lang['code'] = "插入程序代码或脚本"; KE.plugin['code'] = { click : function(id) { KE.util.selection(id); var dialog = new KE.dialog({ id : id, cmd : 'code', file : 'code/insert_code.html', width : 530, height : 300, title : KE.lang['code'], yesButton : KE.lang['yes'], noButton : KE.lang['no'] }); dialog.show(); }, check : function(id) { var dialogDoc = KE.util.getIframeDoc(KE.g[id].dialog); var lang = KE.$('ic_lang', dialogDoc).value; var source = KE.$('ic_source', dialogDoc).value; if(lang == ''){ alert('编程语言必须选择'); return false; } if(source == ''){ alert('请输入程序代码或者脚本'); return false; } return true; }, exec : function(id) { KE.util.select(id); var iframeDoc = KE.g[id].iframeDoc; var dialogDoc = KE.util.getIframeDoc(KE.g[id].dialog); if (!this.check(id)) return false; var lang = KE.$('ic_lang', dialogDoc).value; var source = KE.$('ic_source', dialogDoc).value; this.insert(id, lang, source); }, insert : function(id, lang,source) { var html = '<pre class="brush:' + lang + '; toolbar: true; auto-links: false;">'; html += html_encode(source); html += '</pre><br/>'; KE.util.insertHtml(id, html); KE.layout.hide(id); KE.util.focus(id); } };
(注意以上代码最后少了"});"复制的不给力...)
你可能会问这都是神马???
智商超过0的人基本都知道这大致做了什么.
我简单说明下KE.lang['code'] = "插入程序代码或脚本";就相当于定义常量而已.
点击工具栏中的定义插件就是那个click...我们用的是KindEditor自己带的弹出框,当然你用你自己喜欢的也可以.
注意file这个属性,它是相对plugin目录来写的,注意下...
对于这个插件其实没什么可以解释的了,照搬吧....
最后还有一点...我们的工具栏还是没有显示出来图标....
加入样式:
.ke-icon-code { background-image: url(images/code.gif); background-position: 0px 0px; width: 16px; height: 16px; }
好了,搞定???
其实是搞定了,只是没有高亮而已(什么话!做高亮不高亮还叫搞定了?插件确实完成了...)
我们只需要加入一个高亮javascript库即可.当然是选用SyntaxHighlighter插件喽!然后如下
<script type="text/javascript" src="js/syntax/brush.js"></script> <link type="text/css" rel="stylesheet" href="js/syntax/shCore.css"/> <link type="text/css" rel="stylesheet" href="js/syntax/shThemeDefault.css"/> <style> </style> <script type='text/javascript'> <!-- $(document).ready(function(){ SyntaxHighlighter.config.clipboardSwf = 'js/syntax/clipboard.swf'; SyntaxHighlighter.all(); }); //--> </script> <link rel="stylesheet" href="css/ke.css" type="text/css"/></head>
ke.css是神马???
在图片上传中我解释了,在这里我在说下,我们在编辑器中插入代码了,怎么所见即所得呢?就需要这个ke.css来做插入代码的样式
在这里我全列出来,自己则取修改吧(里面还包含引用文本插件的一些CSS留着吧,下一讲你就不用再费事了):
.TextContent { font-size: 10.5pt; } .TextContent p { line-height: 20px; margin-bottom: 20px; } .TextContent pre { -moz-border-bottom-colors: none; -moz-border-image: none; -moz-border-left-colors: none; -moz-border-right-colors: none; -moz-border-top-colors: none; background: none repeat scroll 0 0 #F6F6F6; border-color: #DDDDDD #DDDDDD #DDDDDD #6CE26C; border-style: solid; border-width: 1px 1px 1px 5px; font-family: Courier New,Arial; font-size: 9pt; margin: 10px 0; padding: 5px; } .TextContent blockquote { background: url("../images/blockquote.gif") no-repeat scroll left top #F4F5F7; border: 2px solid #EEEEEE; color: #006600; font-size: 9pt; margin: 15px 10px; padding: 5px 5px 5px 35px; } .TextContent img { max-width: 700px; } .ke-flash { border:1px solid #AAAAAA; background-image:url(./flash.gif); background-position:center center; background-repeat:no-repeat; width:100px; height:100px; } .ke-rm { border:1px solid #AAAAAA; background-image:url(./rm.gif); background-position:center center; background-repeat:no-repeat; width:100px; height:100px; } .ke-media { border:1px solid #AAAAAA; background-image:url(./media.gif); background-position:center center; background-repeat:no-repeat; width:100px; height:100px; } .ke-content { font-size: 10pt; } .ke-content pre { font-size:9pt; font-family:Courier New,Arial; border:1px solid #ddd; border-left:5px solid #6CE26C; background:#f6f6f6; padding:5px; } .ke-content p { margin: 0 0 15px 0; } .ke-content div.ref {border:1px solid #ddd;margin:0 0 10px 0;padding:2px;font-size:9pt;background:#ffe;} .ke-content div.ref h4 {margin:0;padding:1px 3px;background:#CC9966;color:#fff;font-size:9pt;font-weight:normal;} .ke-content div.ref .ref_body {margin:0;padding:2px;line-height:20px;color:#666;font-size:9pt;} .ke-content blockquote {margin:15px 10px;border:2px solid #eee;padding:5px 5px 5px 35px;background:#f4f5f7 url('../images/blockquote.gif') no-repeat left top;color:#060;font-size:9pt;}
关于图标大家海捞吧...
哎...做个好人吧,把需要的图标列一下,如果觉得不好,那么网上捞吧.