@ckeditor/ckeditor5-enter
Version:
Enter feature for CKEditor 5.
80 lines (79 loc) • 2.71 kB
JavaScript
/**
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
*/
/**
* @module enter/shiftenter
*/
import { ShiftEnterCommand } from './shiftentercommand.js';
import { EnterObserver } from './enterobserver.js';
import { Plugin } from '@ckeditor/ckeditor5-core';
/**
* This plugin handles the <kbd>Shift</kbd>+<kbd>Enter</kbd> keystroke (soft line break) in the editor.
*
* See also the {@link module:enter/enter~Enter} plugin.
*
* For more information about this feature see the {@glink api/enter package page}.
*/
export class ShiftEnter extends Plugin {
/**
* @inheritDoc
*/
static get pluginName() {
return 'ShiftEnter';
}
/**
* @inheritDoc
*/
static get isOfficialPlugin() {
return true;
}
init() {
const editor = this.editor;
const schema = editor.model.schema;
const conversion = editor.conversion;
const view = editor.editing.view;
const viewDocument = view.document;
const t = this.editor.t;
// Configure the schema.
schema.register('softBreak', {
allowWhere: '$text',
isInline: true
});
// Configure converters.
conversion.for('upcast')
.elementToElement({
model: 'softBreak',
view: 'br'
});
conversion.for('downcast')
.elementToElement({
model: 'softBreak',
view: (modelElement, { writer }) => writer.createEmptyElement('br')
});
view.addObserver(EnterObserver);
editor.commands.add('shiftEnter', new ShiftEnterCommand(editor));
this.listenTo(viewDocument, 'enter', (evt, data) => {
// When not in composition, we handle the action, so prevent the default one.
// When in composition, it's the browser who modify the DOM (renderer is disabled).
if (!viewDocument.isComposing) {
data.preventDefault();
}
// The hard enter key is handled by the Enter plugin.
if (!data.isSoft) {
return;
}
editor.execute('shiftEnter');
view.scrollToTheSelection();
}, { priority: 'low' });
// Add the information about the keystroke to the accessibility database.
editor.accessibility.addKeystrokeInfos({
keystrokes: [
{
label: t('Insert a soft break (a <code><br></code> element)'),
keystroke: 'Shift+Enter'
}
]
});
}
}