Your IP : 216.73.216.79


Current Path : /var/www/html/learn/node_modules/@ckeditor/ckeditor5-paragraph/src/
Upload File :
Current File : /var/www/html/learn/node_modules/@ckeditor/ckeditor5-paragraph/src/insertparagraphcommand.js

/**
 * @license Copyright (c) 2003-2021, 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' );
		} );
	}
}