ckeditor5-image-upload-base64
Version:
The development environment of CKEditor 5 – the best browser-based rich text editor.
63 lines (53 loc) • 1.95 kB
JavaScript
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module paragraph/insertparagraphcommand
*/
import Command from '@ckeditor/ckeditor5-core/src/command';
/**
* The insert paragraph command. It inserts a new paragraph at a specific
* {@link module:engine/model/position~Position document position}.
*
* // Insert a new paragraph before an element in the document.
* editor.execute( 'insertParagraph', {
* position: editor.model.createPositionBefore( element )
* } );
*
* If a paragraph is disallowed in the context of the specific position, the command
* will attempt to split position ancestors to find a place where it is possible
* to insert a paragraph.
*
* **Note**: This command moves the selection to the inserted paragraph.
*
* @extends module:core/command~Command
*/
export default class InsertParagraphCommand extends Command {
/**
* Executes the command.
*
* @param {Object} options Options for the executed command.
* @param {module:engine/model/position~Position} options.position The model position at which
* the new paragraph will be inserted.
* @fires execute
*/
execute( options ) {
const model = this.editor.model;
let position = options.position;
model.change( writer => {
const paragraph = writer.createElement( 'paragraph' );
if ( !model.schema.checkChild( position.parent, paragraph ) ) {
const allowedParent = model.schema.findAllowedParent( position, paragraph );
// It could be there's no ancestor limit that would allow paragraph.
// In theory, "paragraph" could be disallowed even in the "$root".
if ( !allowedParent ) {
return;
}
position = writer.split( position, allowedParent ).position;
}
model.insertContent( paragraph, position );
writer.setSelection( paragraph, 'in' );
} );
}
}