CKEditor自定义功能开发

发布于 2019-04-28

CKEditor自定义功能开发

CKEditor是一个非常受欢迎的富文本编辑器,问世至今走了十年,依然还是市场老大,经得起时间考验就是好程序。因为经常写一些技术博文,可能有些地方需要插入code标签,而默认Ckeditor不具备插入code标签功能,但它提供的拓展灵活程度让我感觉这就是那么容易。本文介绍给CKEditor添加一个插入code标签插件的实现方式。

一、下载程序,解压

下载地址:http://ckeditor.com/

如果你没有下载错的话,解压后的目录应该跟截图一致。

二、创建插件目录

截图画红线的目录plugins就是CKEditor插件目录,所有的插件都集合在里边,在里边创建一个code目录,作为插入code标签功能的插件目录。

三、编写插件程序

CKEditor插件的规则是在插件目录下创建一个plugin.js文件作为插件主程序处理文件,如果是复杂的插件可能会有N个js文件。

因为插入code标签这个功能非常简单,所以一个plugin.js就能搞定。

代码:

// 添加一个插件
CKEDITOR.plugins.add('code', {
    // 插件初始化
    init: function(editor) {
        // 添加code按钮
        editor.ui.addButton('code', {
            // 鼠标移到按钮提示文字
            label: 'code',
            // 命令
            command: 'code',
            // 图标(相对于插件本身目录下)
            icon: this.path + 'images/code.gif',
           
        });
    }
});

四、制作按钮图标

图标文件名与路径要对应你在plugin.js中设置好的,因为我在plugin.js中定义的图标位置是在images目录下的code.gif图标,所以把code.gif图片放到插件目录的images目录下。

五、修改config.js配置文件

打开config.js,打开config.js,添加一句

config.extraPlugins += (config.extraPlugins ? ',code' : 'code');

最终config.js代码如下:

/**
 * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
 * For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
 */
 
CKEDITOR.editorConfig = function( config ) {
    // Define changes to default configuration here.
    // For complete reference see:
    // https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html
    
    // The toolbar groups arrangement, optimized for two toolbar rows.
    config.toolbarGroups = [
        { name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },
        { name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },
        { name: 'links' },
        { name: 'insert' },
        { name: 'forms' },
        { name: 'tools' },
        { name: 'document',       groups: [ 'mode', 'document', 'doctools' ] },
        { name: 'others' },
        '/',
        { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
        { name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
        { name: 'styles' },
        { name: 'colors' },
        { name: 'about' }
    ];
    
    // 这句代码是添加的 
    config.extraPlugins += (config.extraPlugins ? ',code' : 'code');
 
    // Remove some buttons provided by the standard plugins, which are
    // not needed in the Standard(s) toolbar.
    config.removeButtons = 'Underline,Subscript,Superscript';
 
    // Set the most common block elements.
    config.format_tags = 'p;h1;h2;h3;pre';
 
    // Simplify the dialog windows.
    config.removeDialogTabs = 'image:advanced;link:advanced';
};

六、测试,看可以了不

使用浏览器打开创建的HTML页面

OK拉,按钮出来了。

七、添加点击事件

打开之前创建plugin.js文件,添加click事件,最终代码如下:

// 添加一个插件
CKEDITOR.plugins.add('code', {
    // 插件初始化
    init: function(editor) {
        // 添加code按钮
        editor.ui.addButton('code', {
            // 鼠标移到按钮提示文字
            label: 'code',
            // 命令
            command: 'code',
            // 图标(相对于插件本身目录下)
            icon: this.path + 'images/code.gif',
            // 添加点击事件   
            click: function() {
                // 获取选取的文本
                var selectText = editor.getSelection().getSelectedText();
                // 判断选取的文本是否为空
                // 如果为空就啥都不干
                if (selectText !== "") {
                    // 判断你是要干嘛?
                    // 你是要添加code标签呢?
                    // 还是你要取消code标签?
                    if (editor.getSelection().getStartElement().getName() !== "code") {
                        // 添加code标签
                        var insertHtml = "<code>" + selectText + ""; editor.insertHtml(insertHtml); 
                    } else { 
                        // 取消code标签 
                        editor.insertText(selectText); 
                    } 
                } 
            } 
        }); 
    } 
});

重新运行浏览器,随便输入一行字,选中几个,点击code按钮,亲,这下可以了吧!

八、code标签样式

虽然,按钮功能可以用了,但还有点郁闷,就是code标签的文本跟其它标签的文本看起来没差别,看不出来哪些已经添加code标签。

我们给code标签添加几个样式,让它与众不同。打开ckeditor目录下的contents.css

在结尾处添加code样式

code {
    background: #f1f1f1;
    color:#ff7f50;
    border-radius:2px;
    padding:0 2px;
    margin:0 2px;
}

保存,重新运行看下效果!

如果需要取消code标签的文字只需要选择已被添加code标签的文字,再点击code按钮就好!

喜欢 0
奋楫笃行,臻于至善!

相关文章

基于 canvas 一款非常酷炫的动态气泡背景实现方法

canvas 是 HTML5 新增的标签,利用它我们可以轻松实现图形的绘制。canvas 元素本身并没有绘制能力,它只是一个图形的容器,必须使用脚本(通常是 JavaScript)配合来完成绘图任务。...
阅读全文

基于 sketch.js 实现非常酷炫的鼠标点击特效

JavaScript 是浏览器端脚本语言,有许多非常实用的第三方 JS 类库,我们可以借助它来实现各种各样的特效,今天为大家分享一下基于 sketch.js 实现鼠标点击特效的方法。 实现方法 实现的...
阅读全文

网站夜间模式的实现思路与详细教程分享

网站夜间模式是怎样实现的? 整体思路 夜间模式开关按钮:用来手动切换夜间模式的,会存储cookie。 自动夜间模式:当cookie为空时,浏览器时间大于22点小于6点时会自动进入夜间模式,并存储coo...
阅读全文

pace.js 网页自动加载进度条 JavaScript 插件

我们在浏览网页的时候,经常会看到网站顶部有一个好看的加载进度条,我们可能会好奇它是怎样实现的。页面的加载进度百分比,有时候获取是比较麻烦的,当然也可以利用一些优秀的JavaScript插件来实现,今天...
阅读全文

Vue.js 开发环境搭建及实例运行简明教程

Vue和jQuery一样,是一个前端框架,如果你要问在过去的一年里,前端技术框架什么最火,那无疑就是前端三巨头:React、Angular和Vue。今天,我们就一起来简单了解一下什么是Vue,以及它的...
阅读全文

nofollow、noopener 和 noreferrer 的区别与联系

大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎,不要将该链接计入权重。因此多数情况下,我们可以将一些不想传递权重的链接进行nofllow处理,例如一些非本站的链接,不想传递权重,但是...
阅读全文

共 3 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注