CKEditor 5 Tab键缩进插件

时间:2022-06-01 17:37:42

CKEditor 5提供了IndentBlock可以用来做缩进,只需要在创建编辑器的添加IndentBlock即可。

import Indent from '@ckeditor/ckeditor5-indent/src/indent';
import IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock';

ClassicEditor
    .create( document.querySelector( '#editor' ), {
        plugins: [ Indent, IndentBlock, ... ],
        toolbar: {
            items: [ 'heading', '|', 'outdent', 'indent', '|', 'bulletedList', 'numberedList', '|', 'undo', 'redo' ]
        }
    } )
    .then( ... )
    .catch( ... );

但是在编辑器不能通过Tab键或Shift+Tab键进行缩进。需要我们自定义插件。

插件代码:

import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export default class IndentBlockTabObserver extends Plugin {
    static get pluginName() {
        return 'IndentBlockTabObserver';
    }
    constructor(editor) {
        super(editor);
    }
    init() {
        const editor = this.editor;
        editor.keystrokes.set( 'Tab', ( data, cancel ) => {
            const command = editor.commands.get( 'indentBlock' );
            if ( command.isEnabled ) {
                command.execute();
                cancel();
            }
        } );
   
        editor.keystrokes.set( 'Shift+Tab', ( data, cancel ) => {
            const command = editor.commands.get( 'outdentBlock' );
            if ( command.isEnabled ) {
                command.execute();
                cancel();
            }
        } );
    }
}

注意:这个插件依赖于IndentBlock插件