javascript - 如何借助自定义图标将自定义链接应用于 CKEditor 中的现有文本

标签 javascript

我在 CKEditor 上工作,想在工具栏上添加一个新图标,然后我想在单击新添加的图标时打开一个对话框。单击后应打开一个框,其中将显示数据库中的链接。 当我单击对话框中的任何链接时,该链接应应用于所选文本

最佳答案

最近在做这类需求。这正是您所需要的。 按照以下步骤操作:

第 1 步。在 CKEditor 的插件文件夹中创建一个名为“trackinglink”的文件夹,然后在“trackinglink”文件夹中创建一个文件 plugin.js 并将所有代码粘贴到其中。

                // Just an PHP Addon that not need JavaScript include.
            var htmlLinkData = '';
            var trackingEditor;
            var dialogObj;
            var setArrow='arrow-right';
            var baseurl;
            CKEDITOR.plugins.add( 'trackinglink', {
                init: function( editor ) {
                    trackingEditor = editor;
                    // Register the "simpleLinkDialog" command, which opens the "simpleLinkDialog" dialog.
                    editor.ui.addButton( 'TrackingLink', {
                        label: 'Insert TrackingLink',
                        command: 'execTrackLink',
                        icon: this.path + 'icons/trackinglink.png'
                    });

                    CKEDITOR.dialog.add( "insertTrackingLinkModal", function( editor )
                    {
                        return {
                            title : 'Pick a tracking link for this certificate',
                            minWidth : 400,
                            minHeight : 200,
                            contents :
                            [
                                {
                                    id : 'general',
                                    label : 'Settings',
                                    elements :
                                    [
                                        // UI elements of the Settings tab.
                                        {
                                            type: 'html',
                                            html: htmlLinkData
                                        }
                                    ]
                                }
                            ],
                            buttons: []
                        };
                    });
                    var isopen = true;
                    var isclose = true;
                    var linkId;
                    editor.addCommand( 'openTrackLinkModal',  new CKEDITOR.dialogCommand( 'insertTrackingLinkModal' ));
                    editor.addCommand( 'execTrackLink', {
                        exec: function( editor ) {

                            var linkData = {};
                            var trackingLink='';
                            var user_id = angular.element(document.getElementsByClassName('edited_text')).scope().getUserId();
                            baseurl = angular.element(document.getElementsByClassName('edited_text')).scope().getBaseUrl();
                            var course_id = angular.element(document.getElementsByClassName('edited_text')).scope().course_id;
                            $.ajax({
                                type: 'POST',
                                url: baseurl + 'load_controller/getUserCourseShareLinkForCkeditor',
                                dataType: 'JSON',
                                data: { user_id: user_id},
                                success: function(response) {
                                    for(i in response)
                                    {
                                        if(response[i].id == course_id) continue;

                                        if(linkData[response[i].id] == undefined) {
                                            linkData[response[i].id] = {name:response[i].name, links:[]};
                                        }
                                        linkData[response[i].id].links.push(response[i]);
                                    }
                                    for(val in linkData){
                                         var tLinks='';
                                         for(lval in linkData[val].links){
                                            tLinks = tLinks + 
                                                     "<li class='level1'>"+
                                                        "<a href=\"javascript:;\" onclick=\"selectLink('"+linkData[val].links[lval].link+"');\""+ 
                                                        " title=\""+ linkData[val].links[lval].link +"\">"+
                                                        linkData[val].links[lval].link_name+"</a></li>";
                                         }
                                        isopen = true;
                                        isclose = true;
                                        linkId = 'link'+val;
                                        trackingLink += "<div id='"+linkId+"' onclick=\"managelinks('"+linkId+"');\" class='coursepanel coursepanel-default'>"+
                                                            "<div class='coursepanel-heading'>"+linkData[val].name+"</div>"+
                                                            "<div class='setarrow'></div>"+
                                                            "<div class='course-child'><ul class='tree'>"+tLinks+"</ul></div>"+
                                                        "</div>";
                                    }
                                    htmlLinkData = "<div class='linklist'>"+trackingLink+"</div>";
                                    editor.execCommand('openTrackLinkModal');
                                }
                            });
                        }
                    });
                }
            });
            function managelinks(linkId){
                var parentID = document.getElementById(linkId);
                var setArrow = parentID.getElementsByClassName('setarrow');
                var subs = parentID.getElementsByClassName('course-child');
                var correctIsVisible = subs[0].offsetHeight;

                if(correctIsVisible>0){
                    subs[0].style.display = 'none';
                    setArrow[0].style.backgroundImage= "url('images/arrow-right.png')";
                }
                else{
                    subs[0].style.display = 'block';
                    setArrow[0].style.backgroundImage= "url('images/arrow-down.png')";
                }
            }
            function selectLink(link){
                    var selectedText = trackingEditor.getSelection().getNative();
                    trackingEditor.insertHtml("<a href=\""+link+"\" target=\"_blank\">" + selectedText + "</a>");
                    CKEDITOR.dialog.getCurrent().hide();
                }

第 2 步。从 CKEditor 打开 config.js 文件。 第 3 步。添加“config.extraPlugins = 'trackinglink';”。 第 4 步。在收费栏选项上添加“TrackingLink”文本。 第 5 步。对于第 3 步和第 4 步,从屏幕截图中获取帮助。

config.extraPlugins 链接:

enter image description here

enter image description here

关于javascript - 如何借助自定义图标将自定义链接应用于 CKEditor 中的现有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252297/

相关文章:

javascript - 限制 td 之间的空间

javascript - Visual Studio 灯光开关 HTML : How do I place static text on a Browse screen

javascript - 如何动态更改 HTML 标签的 CSS 类?

javascript - PhoneGap 游戏、canvas 和慢 javascript

javascript - JS自执行闭包: what happens when IIFEs inside have conflicting declarations?

asp.net - 如何捕获提交表单响应 "different domain"?

javascript - 首次对返回 Observable 的方法进行 Angular Testing

javascript - 使用 jQuery 上传文件在 IE 中不起作用

javascript - 水平条形图的 Chart.js 中 x 轴上的自定义标签/固定范围?

javascript - 引用 JS 对象中的内部变量