UNPKG

@ckeditor/ckeditor5-table

Version:

Table feature for CKEditor 5.

70 lines (69 loc) 2.94 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module table/commands/inserttablecommand */ import { Command } from 'ckeditor5/src/core.js'; /** * The insert table command. * * The command is registered by {@link module:table/tableediting~TableEditing} as the `'insertTable'` editor command. * * To insert a table at the current selection, execute the command and specify the dimensions: * * ```ts * editor.execute( 'insertTable', { rows: 20, columns: 5 } ); * ``` */ export default class InsertTableCommand extends Command { /** * @inheritDoc */ refresh() { const model = this.editor.model; const selection = model.document.selection; const schema = model.schema; this.isEnabled = isAllowedInParent(selection, schema); } /** * Executes the command. * * Inserts a table with the given number of rows and columns into the editor. * * @param options.rows The number of rows to create in the inserted table. Default value is 2. * @param options.columns The number of columns to create in the inserted table. Default value is 2. * @param options.headingRows The number of heading rows. If not provided it will default to * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.rows`} table config. * @param options.headingColumns The number of heading columns. If not provided it will default to * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.columns`} table config. * @fires execute */ execute(options = {}) { const editor = this.editor; const model = editor.model; const tableUtils = editor.plugins.get('TableUtils'); const defaultRows = editor.config.get('table.defaultHeadings.rows'); const defaultColumns = editor.config.get('table.defaultHeadings.columns'); if (options.headingRows === undefined && defaultRows) { options.headingRows = defaultRows; } if (options.headingColumns === undefined && defaultColumns) { options.headingColumns = defaultColumns; } model.change(writer => { const table = tableUtils.createTable(writer, options); model.insertObject(table, null, null, { findOptimalPosition: 'auto' }); writer.setSelection(writer.createPositionAt(table.getNodeByPath([0, 0, 0]), 0)); }); } } /** * Checks if the table is allowed in the parent. */ function isAllowedInParent(selection, schema) { const positionParent = selection.getFirstPosition().parent; const validParent = positionParent === positionParent.root ? positionParent : positionParent.parent; return schema.checkChild(validParent, 'table'); }