| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /**
- * @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' );
- } );
- }
- }
|