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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | $(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目录来写的,注意下...
对于这个插件其实没什么可以解释的了,照搬吧....
最后还有一点...我们的工具栏还是没有显示出来图标....
加入样式:
1 2 3 4 5 6 | .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留着吧,下一讲你就不用再费事了):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | .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 h 4 { 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 ;} |
关于图标大家海捞吧...
哎...做个好人吧,把需要的图标列一下,如果觉得不好,那么网上捞吧.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 用99元买的服务器搭一套CI/CD系统
· 如何在 .NET 中 使用 ANTLR4