Search code examples
jqueryckeditorjustify

CKeditor justify whole block to left/right/center


I'm trying to override default justify left/right/center in creditor 4 so they will justify whole text to left/right/center instead of every line separately. I've added code below into creditor.config.js and all works ok but I can't update/refresh new values in ckeditor. Looks like setData() does update ckeditor values but it executes in a loop, tried wrapping it in setTimout() but that doesn't change anything. Tried update element, setValue, setHtml...

CKEDITOR.on('instanceReady', function (ev) { ev.editor.on('selectionChange', function () { var text = ev.editor.getData(); text = text.replace(new RegExp('(class="rtecenter")|(class="rteleft") |(class="rteright")','g'),''); text = '<div class="rteleft">'+text+'</div>'; // ev.editor.setData(text); // ev.editor.element.setValue(text); // ev.editor.element.setHtml(text); }); });


Solution

  • Right, thanks! Got it working eventually, pretty simple... i.e. This is how to override 'justifycenter' command in CKEditor 4 :

    CKEDITOR.on('instanceReady', function (ev) {

        var editor = ev.editor;
        var overridecmd_justifycenter = new CKEDITOR.command(editor, {
            exec: function(editor){
                var ps = editor.document.$.getElementsByTagName("p");
                for (var i=0; i < ps.length; i++){
                    if(ps[i].className.indexOf("rtecenter") < 0) {
                        ps[i].className = "rtecenter";
                    }
                } 
            }
        });
    
        // Replace default button commands with overrides
        ev.editor.commands.justifycenter.exec = overridecmd_justifycenter.exec;
    

    });