ckeditor 表情包自定义

Posted dy blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ckeditor 表情包自定义相关的知识,希望对你有一定的参考价值。

定制CKEditor的表情

 

.cke_dialog_contents_body {
    overflow:auto;
    max-height: 500px;
}

.cke_dialog_contents_body * {
    max-height: 500px;
}

 

添加以上css到对应html dom里来解决溢出

 

技术分享
/*
 Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
*/
CKEDITOR.dialog.add("smiley",function(f){
    for(var e=f.config
        ,a=f.lang.smiley
        ,h=e.smiley_images
        ,g=e.smiley_columns||8
        ,k
        ,m=function(l){
            var c=l.data.getTarget(),b=c.getName();
            if("a"==b)c=c.getChild(0);
            else if("img"!=b)return;
            var b=c.getAttribute("cke_src")
            ,a=c.getAttribute("title")
            ,c=f.document.createElement("img",{
                attributes:{
                    src:b,
                    "data-cke-saved-src":b,
                    title:a,
                    alt:a,
                    width:c.$.width,
                    height:c.$.height
                }
            });
            f.insertElement(c);
            k.hide();
            l.data.preventDefault()
        }
        ,q=CKEDITOR.tools.addFunction(function(a,c){
            a=new CKEDITOR.dom.event(a);
            c=new CKEDITOR.dom.element(c);
            var b;
            b=a.getKeystroke();
            var d="rtl"==f.lang.dir;
            switch(b){
                case 38:
                if(b=c.getParent().getParent().getPrevious())
                    b=b.getChild([c.getParent().getIndex(),0]),b.focus();
                a.preventDefault();
                break;
                case 40:
                (b=c.getParent().getParent().getNext())&&(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();
                a.preventDefault();
                break;
                case 32:
                m({data:a});
                a.preventDefault();
                break;
                case d?37:39:
                if(b=c.getParent().getNext())
                    b=b.getChild(0),b.focus(),a.preventDefault(!0);
                else if(b=c.getParent().getParent().getNext())
                    (b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);
                break;
                case d?39:37:
                if(b=c.getParent().getPrevious())
                    b=b.getChild(0),b.focus(),a.preventDefault(!0);
                else if(b=c.getParent().getParent().getPrevious())
                    b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),
                    d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",
                    d=[
                        ‘\x3cdiv\x3e\x3cspan id\x3d"‘+d+‘" class\x3d"cke_voice_label"\x3e‘+a.options+"\x3c/span\x3e",‘\x3ctable role\x3d"listbox" aria-labelledby\x3d"‘+
                        d+‘" style\x3d"width:100%;height:100%;border-collapse:separate;" cellspacing\x3d"2" cellpadding\x3d"2"‘,
                        CKEDITOR.env.ie&&CKEDITOR.env.quirks?‘ style\x3d"position:absolute;"‘:"",
                        "\x3e\x3ctbody\x3e"
                    ],
                    n=h.length,
                    a=0;
                    a<n;
                    a++){
                        0===a%g&&d.push(‘\x3ctr role\x3d"presentation"\x3e‘);
                        var p="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();
                        d.push(‘\x3ctd class\x3d"cke_dark_background cke_centered" style\x3d"vertical-align: middle;" role\x3d"presentation"\x3e\x3ca href\x3d"javascript:void(0)" role\x3d"option"‘,
                        ‘ aria-posinset\x3d"‘+(a+1)+‘"‘,
                        ‘ aria-setsize\x3d"‘+n+‘"‘,
                        ‘ aria-labelledby\x3d"‘+p+‘"‘,
                        ‘ class\x3d"cke_smile cke_hand" tabindex\x3d"-1" onkeydown\x3d"CKEDITOR.tools.callFunction( ‘,
                        q,
                        ‘, event, this );"\x3e‘,‘\x3cimg class\x3d"cke_hand" title\x3d"‘,
                        e.smiley_descriptions[a],
                        ‘" cke_src\x3d"‘,
                        CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),
                        ‘" alt\x3d"‘,e.smiley_descriptions[a],
                        ‘"‘,
                        ‘ src\x3d"‘,
                        CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),
                        ‘"‘,
                        CKEDITOR.env.ie?" onload\x3d\"this.setAttribute(‘width‘, 2); this.removeAttribute(‘width‘);\" ":"",
                        ‘\x3e\x3cspan id\x3d"‘+p+‘" class\x3d"cke_voice_label"\x3e‘+e.smiley_descriptions[a]+"\x3c/span\x3e\x3c/a\x3e",
                        "\x3c/td\x3e");
                        a%g==g-1&&d.push("\x3c/tr\x3e")
                }
                if(a<g-1){
                    for(;a<g-1;a++)
                        d.push("\x3ctd\x3e\x3c/td\x3e");
                        d.push("\x3c/tr\x3e")
                    }
                    d.push("\x3c/tbody\x3e\x3c/table\x3e\x3c/div\x3e");
                    e={
                        type:"html",
                        id:"smileySelector",
                        html:d.join(""),
                        onLoad:function(a){
                            k=a.sender
                        },
                        focus:function(){
                            var a=this;setTimeout(function(){
                                a.getElement().getElementsByTag("a").getItem(0).focus()
                            },0)
                        },
                        onClick:m,
                        style:"width: 100%; border-collapse: separate;"
                    };
                return {
                    title:f.lang.smiley.title,
                    minWidth:270,
                    minHeight:120,
                    contents:[
                        {id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}
                    ],
                    buttons:[
                        CKEDITOR.dialog.cancelButton
                    ]
                }
            });
smiley.js

 

c=f.document.createElement("img",{
                attributes:{
                    src:b,
                    "data-cke-saved-src":b,
                    title:a,
                    alt:a,
                    width:c.$.width,
                    height:c.$.height
                }
            });
            f.insertElement(c);
这一段是添加表情到编辑器的代码,如果不想设置width和height可以直接去掉
 
                return {
                    title:f.lang.smiley.title,
                    minWidth:270,
                    minHeight:120,
                    contents:[
                        {id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}
                    ],
                    buttons:[
                        CKEDITOR.dialog.cancelButton
                    ]
                }

这一段是表情选择对话框配置,官方文档:

CKEDITOR.dialog.definition

 

以上是关于ckeditor 表情包自定义的主要内容,如果未能解决你的问题,请参考以下文章

打包/解包自定义对象的 HashMap 的最佳方法是啥?

如何将CKeditor编辑器的上传和thinkphp结合

转:织梦ckeditor添加自定义按钮,实现自定义样式

angularjs中的CKEditor自定义插件

Typo3/CKEditor:允许定义列表(dl、dt、dd)

视频转GIF小工具,原生javascript + gif.js + canvas,自定义制作表情包