为KindEditor添加插入代码功能

关于插入代码

博客园吸引我的一个很重要的原因就是因为后台编辑器里的插入代码功能,之前在自己博客里使用的是wordpress,编辑器使用十分不便,只能插入blockquote来当作代码显示,但这样没有代码高亮功能。我们这里讲到的插入代码其实就是在代码外部包裹在<pre></pre>内部,我们知道<pre>标签具有保持原有格式的功能,再使用代码高亮js库SyntaxHighlighter就可以对页面中的代码进行高亮了。

我们现在要做的就是在KindEditor加入插入<pre>...</pre>代码的插件。

步骤一:外围工作

首先找到一个icon图片用于显示在编辑器上, 就是这张图片,然后把它合并在kindeditor的皮肤文件中default.gif。

然后在editor.css中增加pre样式:

pre{
    background:#f8f8f8;
    border:1px solid #ddd;
    padding:5px;
}

建立弹出层的code.html


步骤二:插件开发

kindeditor的开发是相对比较简单的,详细文档可以参考官方文档。我们这里是把代码直接写入kindeditor核心库中:

/**插入代码插件
 * 作者:walkingp
 * 主页:http://www.51obj.cn/  http://www.cnblogs.com/walkingp
 * Email:walkingp@126.com
 * 日期:2011-4-20
 */
 
KE.plugin['code'] = {
    click : function(id) {
        KE.util.selection(id);
        this.dialog = new KE.dialog({
            id : id,
            cmd : 'code',
            file : 'code.html',
            width : 500,
            height : 350,
            loadingMode : true,
            title : KE.lang['code'],
            yesButton : KE.lang['yes'],
            noButton : KE.lang['no']
        });
        this.dialog.show();
    },
    escape : function( value ) {
            return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/\'/g, ''');
    },
    check : function(id) {
        var dialogDoc = KE.util.getIframeDoc(this.dialog.iframe);
        var lang = KE.$('lang', dialogDoc).value;
        if (!lang) {
            alert(KE.lang['invalidLang']);
            return false;
        }
        return true;
    },
    exec : function(id) {
        var dialogDoc = KE.util.getIframeDoc(this.dialog.iframe);
        var lang = KE.$('lang', dialogDoc).value;
        var code = KE.$('code', dialogDoc).value;
        if (!this.check(id)) return false;
        KE.util.insertHtml(id, "<pre class=\"brush:" + lang + ";\">" + this.escape(code) + "</pre>");
        this.dialog.hide();
        KE.util.focus(id); 
    }
};

最后效果图:

完整代码打包下载

参考:http://www.dengguibao.cn/blog/56

posted @   walkingp  阅读(9786)  评论(9编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示