@ckeditor/ckeditor5-table 0.0.0-nightly-next-20260108.0 → 0.0.0-nightly-20260109.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/table.js +5 -0
- package/build/translations/af.js +1 -0
- package/build/translations/ar.js +1 -0
- package/build/translations/ast.js +1 -0
- package/build/translations/az.js +1 -0
- package/build/translations/be.js +1 -0
- package/build/translations/bg.js +1 -0
- package/build/translations/bn.js +1 -0
- package/build/translations/bs.js +1 -0
- package/build/translations/ca.js +1 -0
- package/build/translations/cs.js +1 -0
- package/build/translations/da.js +1 -0
- package/build/translations/de-ch.js +1 -0
- package/build/translations/de.js +1 -0
- package/build/translations/el.js +1 -0
- package/build/translations/en-au.js +1 -0
- package/build/translations/en-gb.js +1 -0
- package/build/translations/eo.js +1 -0
- package/build/translations/es-co.js +1 -0
- package/build/translations/es.js +1 -0
- package/build/translations/et.js +1 -0
- package/build/translations/eu.js +1 -0
- package/build/translations/fa.js +1 -0
- package/build/translations/fi.js +1 -0
- package/build/translations/fr.js +1 -0
- package/build/translations/gl.js +1 -0
- package/build/translations/gu.js +1 -0
- package/build/translations/he.js +1 -0
- package/build/translations/hi.js +1 -0
- package/build/translations/hr.js +1 -0
- package/build/translations/hu.js +1 -0
- package/build/translations/hy.js +1 -0
- package/build/translations/id.js +1 -0
- package/build/translations/it.js +1 -0
- package/build/translations/ja.js +1 -0
- package/build/translations/jv.js +1 -0
- package/build/translations/kk.js +1 -0
- package/build/translations/km.js +1 -0
- package/build/translations/kn.js +1 -0
- package/build/translations/ko.js +1 -0
- package/build/translations/ku.js +1 -0
- package/build/translations/lt.js +1 -0
- package/build/translations/lv.js +1 -0
- package/build/translations/ms.js +1 -0
- package/build/translations/nb.js +1 -0
- package/build/translations/ne.js +1 -0
- package/build/translations/nl.js +1 -0
- package/build/translations/no.js +1 -0
- package/build/translations/oc.js +1 -0
- package/build/translations/pl.js +1 -0
- package/build/translations/pt-br.js +1 -0
- package/build/translations/pt.js +1 -0
- package/build/translations/ro.js +1 -0
- package/build/translations/ru.js +1 -0
- package/build/translations/si.js +1 -0
- package/build/translations/sk.js +1 -0
- package/build/translations/sl.js +1 -0
- package/build/translations/sq.js +1 -0
- package/build/translations/sr-latn.js +1 -0
- package/build/translations/sr.js +1 -0
- package/build/translations/sv.js +1 -0
- package/build/translations/th.js +1 -0
- package/build/translations/ti.js +1 -0
- package/build/translations/tk.js +1 -0
- package/build/translations/tr.js +1 -0
- package/build/translations/tt.js +1 -0
- package/build/translations/ug.js +1 -0
- package/build/translations/uk.js +1 -0
- package/build/translations/ur.js +1 -0
- package/build/translations/uz.js +1 -0
- package/build/translations/vi.js +1 -0
- package/build/translations/zh-cn.js +1 -0
- package/build/translations/zh.js +1 -0
- package/ckeditor5-metadata.json +7 -16
- package/dist/index-content.css +30 -30
- package/dist/index-editor.css +170 -104
- package/dist/index.css +237 -147
- package/dist/index.css.map +1 -1
- package/dist/index.js +2433 -448
- package/dist/index.js.map +1 -1
- package/lang/contexts.json +4 -2
- package/package.json +35 -25
- package/{dist → src}/augmentation.d.ts +15 -4
- package/src/augmentation.js +5 -0
- package/{dist → src}/commands/insertcolumncommand.d.ts +1 -5
- package/src/commands/insertcolumncommand.js +71 -0
- package/{dist → src}/commands/insertrowcommand.d.ts +1 -5
- package/src/commands/insertrowcommand.js +70 -0
- package/{dist → src}/commands/inserttablecommand.d.ts +1 -5
- package/src/commands/inserttablecommand.js +69 -0
- package/{dist → src}/commands/inserttablelayoutcommand.d.ts +1 -5
- package/src/commands/inserttablelayoutcommand.js +65 -0
- package/{dist → src}/commands/mergecellcommand.d.ts +3 -7
- package/src/commands/mergecellcommand.js +206 -0
- package/{dist → src}/commands/mergecellscommand.d.ts +1 -5
- package/src/commands/mergecellscommand.js +94 -0
- package/{dist → src}/commands/removecolumncommand.d.ts +1 -5
- package/src/commands/removecolumncommand.js +109 -0
- package/{dist → src}/commands/removerowcommand.d.ts +1 -5
- package/src/commands/removerowcommand.js +82 -0
- package/{dist → src}/commands/selectcolumncommand.d.ts +1 -5
- package/src/commands/selectcolumncommand.js +60 -0
- package/{dist → src}/commands/selectrowcommand.d.ts +1 -5
- package/src/commands/selectrowcommand.js +56 -0
- package/{dist → src}/commands/setheadercolumncommand.d.ts +1 -5
- package/src/commands/setheadercolumncommand.js +76 -0
- package/{dist → src}/commands/setheaderrowcommand.d.ts +1 -5
- package/src/commands/setheaderrowcommand.js +83 -0
- package/{dist → src}/commands/splitcellcommand.d.ts +1 -5
- package/src/commands/splitcellcommand.js +58 -0
- package/{dist → src}/converters/downcast.d.ts +2 -6
- package/src/converters/downcast.js +298 -0
- package/{dist → src}/converters/table-caption-post-fixer.d.ts +1 -5
- package/src/converters/table-caption-post-fixer.js +55 -0
- package/{dist → src}/converters/table-cell-paragraph-post-fixer.d.ts +1 -5
- package/src/converters/table-cell-paragraph-post-fixer.js +109 -0
- package/{dist → src}/converters/table-cell-refresh-handler.d.ts +1 -5
- package/src/converters/table-cell-refresh-handler.js +47 -0
- package/{dist → src}/converters/table-headings-refresh-handler.d.ts +1 -5
- package/src/converters/table-headings-refresh-handler.js +51 -0
- package/{dist → src}/converters/table-layout-post-fixer.d.ts +1 -5
- package/src/converters/table-layout-post-fixer.js +369 -0
- package/{dist → src}/converters/tableproperties.d.ts +2 -6
- package/src/converters/tableproperties.js +444 -0
- package/{dist → src}/converters/upcasttable.d.ts +1 -5
- package/src/converters/upcasttable.js +385 -0
- package/{dist → src}/index.d.ts +5 -6
- package/src/index.js +98 -0
- package/{dist → src}/plaintableoutput.d.ts +1 -5
- package/src/plaintableoutput.js +49 -0
- package/{dist → src}/table.d.ts +2 -6
- package/src/table.js +50 -0
- package/{dist → src}/tablecaption/tablecaptionediting.d.ts +2 -6
- package/src/tablecaption/tablecaptionediting.js +136 -0
- package/{dist → src}/tablecaption/tablecaptionui.d.ts +1 -5
- package/src/tablecaption/tablecaptionui.js +64 -0
- package/{dist → src}/tablecaption/toggletablecaptioncommand.d.ts +1 -5
- package/src/tablecaption/toggletablecaptioncommand.js +105 -0
- package/{dist → src}/tablecaption/utils.d.ts +1 -5
- package/src/tablecaption/utils.js +61 -0
- package/{dist → src}/tablecaption.d.ts +1 -5
- package/src/tablecaption.js +34 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -0
- package/{dist → src}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -6
- package/src/tablecellproperties/commands/tablecellpropertycommand.js +138 -0
- package/{dist → src}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -6
- package/src/tablecellproperties/commands/tablecelltypecommand.js +167 -0
- package/{dist → src}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -5
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -5
- package/src/tablecellproperties/tablecellpropertiesediting.js +412 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesui.d.ts +2 -6
- package/src/tablecellproperties/tablecellpropertiesui.js +385 -0
- package/src/tablecellproperties/tablecellpropertiesuiexperimental.d.ts +128 -0
- package/src/tablecellproperties/tablecellpropertiesuiexperimental.js +408 -0
- package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +229 -0
- package/src/tablecellproperties/ui/tablecellpropertiesview.js +612 -0
- package/{dist/tablecellproperties/ui/tablecellpropertiesview.d.ts → src/tablecellproperties/ui/tablecellpropertiesviewexperimental.d.ts} +12 -15
- package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +744 -0
- package/{dist → src}/tablecellproperties.d.ts +1 -5
- package/src/tablecellproperties.js +40 -0
- package/{dist → src}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -5
- package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -0
- package/{dist → src}/tablecellwidth/tablecellwidthediting.d.ts +1 -5
- package/src/tablecellwidth/tablecellwidthediting.js +53 -0
- package/{dist → src}/tableclipboard.d.ts +3 -7
- package/src/tableclipboard.js +500 -0
- package/{dist → src}/tablecolumnresize/constants.d.ts +0 -4
- package/src/tablecolumnresize/constants.js +33 -0
- package/{dist → src}/tablecolumnresize/converters.d.ts +1 -5
- package/src/tablecolumnresize/converters.js +62 -0
- package/{dist → src}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -6
- package/src/tablecolumnresize/tablecolumnresizeediting.js +729 -0
- package/{dist → src}/tablecolumnresize/tablewidthscommand.d.ts +2 -6
- package/src/tablecolumnresize/tablewidthscommand.js +61 -0
- package/{dist → src}/tablecolumnresize/utils.d.ts +2 -6
- package/src/tablecolumnresize/utils.js +370 -0
- package/{dist → src}/tablecolumnresize.d.ts +1 -5
- package/src/tablecolumnresize.js +36 -0
- package/{dist → src}/tableconfig.d.ts +6 -30
- package/src/tableconfig.js +5 -0
- package/{dist → src}/tableediting.d.ts +2 -6
- package/src/tableediting.js +246 -0
- package/{dist → src}/tablekeyboard.d.ts +3 -7
- package/src/tablekeyboard.js +273 -0
- package/{dist → src}/tablelayout/commands/tabletypecommand.d.ts +1 -5
- package/src/tablelayout/commands/tabletypecommand.js +68 -0
- package/{dist → src}/tablelayout/tablelayoutediting.d.ts +1 -5
- package/src/tablelayout/tablelayoutediting.js +295 -0
- package/{dist → src}/tablelayout/tablelayoutui.d.ts +1 -5
- package/src/tablelayout/tablelayoutui.js +196 -0
- package/{dist → src}/tablelayout.d.ts +1 -5
- package/src/tablelayout.js +37 -0
- package/{dist → src}/tablemouse/mouseeventsobserver.d.ts +1 -5
- package/src/tablemouse/mouseeventsobserver.js +34 -0
- package/{dist → src}/tablemouse.d.ts +1 -5
- package/src/tablemouse.js +178 -0
- package/{dist → src}/tableproperties/commands/tablealignmentcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablealignmentcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -6
- package/src/tableproperties/commands/tablebordercolorcommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderstylecommand.d.ts +2 -6
- package/src/tableproperties/commands/tableborderstylecommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -6
- package/src/tableproperties/commands/tableborderwidthcommand.js +64 -0
- package/{dist → src}/tableproperties/commands/tableheightcommand.d.ts +1 -5
- package/src/tableproperties/commands/tableheightcommand.js +54 -0
- package/{dist → src}/tableproperties/commands/tablepropertycommand.d.ts +2 -6
- package/src/tableproperties/commands/tablepropertycommand.js +103 -0
- package/{dist → src}/tableproperties/commands/tablewidthcommand.d.ts +1 -5
- package/src/tableproperties/commands/tablewidthcommand.js +54 -0
- package/{dist → src}/tableproperties/tablepropertiesediting.d.ts +1 -5
- package/src/tableproperties/tablepropertiesediting.js +546 -0
- package/{dist → src}/tableproperties/tablepropertiesui.d.ts +2 -6
- package/src/tableproperties/tablepropertiesui.js +374 -0
- package/src/tableproperties/tablepropertiesuiexperimental.d.ts +136 -0
- package/src/tableproperties/tablepropertiesuiexperimental.js +375 -0
- package/{dist → src}/tableproperties/ui/tablepropertiesview.d.ts +2 -14
- package/src/tableproperties/ui/tablepropertiesview.js +520 -0
- package/src/tableproperties/ui/tablepropertiesviewexperimental.d.ts +216 -0
- package/src/tableproperties/ui/tablepropertiesviewexperimental.js +544 -0
- package/{dist → src}/tableproperties.d.ts +1 -5
- package/src/tableproperties.js +40 -0
- package/{dist → src}/tableselection.d.ts +2 -6
- package/src/tableselection.js +323 -0
- package/{dist → src}/tabletoolbar.d.ts +2 -6
- package/src/tabletoolbar.js +63 -0
- package/{dist → src}/tableui.d.ts +1 -5
- package/src/tableui.js +335 -0
- package/{dist → src}/tableutils.d.ts +2 -6
- package/src/tableutils.js +1282 -0
- package/{dist → src}/tablewalker.d.ts +1 -5
- package/src/tablewalker.js +489 -0
- package/{dist → src}/ui/colorinputview.d.ts +2 -6
- package/src/ui/colorinputview.js +305 -0
- package/{dist → src}/ui/inserttableview.d.ts +2 -6
- package/src/ui/inserttableview.js +192 -0
- package/{dist → src}/utils/common.d.ts +2 -6
- package/src/utils/common.js +118 -0
- package/{dist → src}/utils/structure.d.ts +1 -5
- package/src/utils/structure.js +452 -0
- package/{dist → src}/utils/table-properties.d.ts +1 -5
- package/src/utils/table-properties.js +121 -0
- package/{dist → src}/utils/ui/contextualballoon.d.ts +2 -6
- package/src/utils/ui/contextualballoon.js +111 -0
- package/{dist → src}/utils/ui/table-properties.d.ts +2 -6
- package/src/utils/ui/table-properties.js +390 -0
- package/src/utils/ui/table-propertiesexperimental.d.ts +215 -0
- package/src/utils/ui/table-propertiesexperimental.js +391 -0
- package/{dist → src}/utils/ui/widget.d.ts +1 -5
- package/src/utils/ui/widget.js +56 -0
- package/theme/formrow-experimental.css +15 -0
- package/theme/formrow.css +0 -2
- package/theme/tablecellproperties-experimental.css +4 -0
- package/theme/tableform-experimental.css +61 -0
- package/theme/tableform.css +5 -1
- package/theme/tableproperties-experimental.css +78 -0
- package/theme/tableproperties.css +0 -60
- package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +0 -22
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
import { TableCellPropertyCommand } from './tablecellpropertycommand.js';
|
|
6
|
+
/**
|
|
7
|
+
* The table cell vertical alignment command.
|
|
8
|
+
*
|
|
9
|
+
* The command is registered by the {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing} as
|
|
10
|
+
* the `'tableCellVerticalAlignment'` editor command.
|
|
11
|
+
*
|
|
12
|
+
* To change the vertical text alignment of selected cells, execute the command:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* editor.execute( 'tableCellVerticalAlignment', {
|
|
16
|
+
* value: 'top'
|
|
17
|
+
* } );
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* The following values, corresponding to the
|
|
21
|
+
* [`vertical-align` CSS attribute](https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align), are allowed:
|
|
22
|
+
*
|
|
23
|
+
* * `'top'`
|
|
24
|
+
* * `'bottom'`
|
|
25
|
+
*
|
|
26
|
+
* The `'middle'` value is the default one so there is no need to set it.
|
|
27
|
+
*/
|
|
28
|
+
export class TableCellVerticalAlignmentCommand extends TableCellPropertyCommand {
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new `TableCellVerticalAlignmentCommand` instance.
|
|
31
|
+
*
|
|
32
|
+
* @param editor An editor in which this command will be used.
|
|
33
|
+
* @param defaultValue The default value for the "alignment" attribute.
|
|
34
|
+
*/
|
|
35
|
+
constructor(editor, defaultValue) {
|
|
36
|
+
super(editor, 'tableCellVerticalAlignment', defaultValue);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -2,11 +2,7 @@
|
|
|
2
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
8
|
-
*/
|
|
9
|
-
import { Plugin } from '@ckeditor/ckeditor5-core';
|
|
5
|
+
import { Plugin } from 'ckeditor5/src/core.js';
|
|
10
6
|
import { TableEditing } from './../tableediting.js';
|
|
11
7
|
import { TableCellWidthEditing } from '../tablecellwidth/tablecellwidthediting.js';
|
|
12
8
|
/**
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tablecellproperties/tablecellpropertiesediting
|
|
7
|
+
*/
|
|
8
|
+
import { priorities } from 'ckeditor5/src/utils.js';
|
|
9
|
+
import { Plugin } from 'ckeditor5/src/core.js';
|
|
10
|
+
import { addBorderStylesRules, addPaddingStylesRules, addBackgroundStylesRules } from 'ckeditor5/src/engine.js';
|
|
11
|
+
import { downcastAttributeToStyle, getDefaultValueAdjusted, upcastBorderStyles } from '../converters/tableproperties.js';
|
|
12
|
+
import { TableEditing } from './../tableediting.js';
|
|
13
|
+
import { TableCellWidthEditing } from '../tablecellwidth/tablecellwidthediting.js';
|
|
14
|
+
import { TableCellPaddingCommand } from './commands/tablecellpaddingcommand.js';
|
|
15
|
+
import { TableCellHeightCommand } from './commands/tablecellheightcommand.js';
|
|
16
|
+
import { TableCellBackgroundColorCommand } from './commands/tablecellbackgroundcolorcommand.js';
|
|
17
|
+
import { TableCellVerticalAlignmentCommand } from './commands/tablecellverticalalignmentcommand.js';
|
|
18
|
+
import { TableCellHorizontalAlignmentCommand } from './commands/tablecellhorizontalalignmentcommand.js';
|
|
19
|
+
import { TableCellBorderStyleCommand } from './commands/tablecellborderstylecommand.js';
|
|
20
|
+
import { TableCellBorderColorCommand } from './commands/tablecellbordercolorcommand.js';
|
|
21
|
+
import { TableCellBorderWidthCommand } from './commands/tablecellborderwidthcommand.js';
|
|
22
|
+
import { TableCellTypeCommand, updateTablesHeadingAttributes } from './commands/tablecelltypecommand.js';
|
|
23
|
+
import { getNormalizedDefaultCellProperties } from '../utils/table-properties.js';
|
|
24
|
+
import { enableProperty } from '../utils/common.js';
|
|
25
|
+
import { TableUtils } from '../tableutils.js';
|
|
26
|
+
import { TableWalker } from '../tablewalker.js';
|
|
27
|
+
const VALIGN_VALUES_REG_EXP = /^(top|middle|bottom)$/;
|
|
28
|
+
const ALIGN_VALUES_REG_EXP = /^(left|center|right|justify)$/;
|
|
29
|
+
/**
|
|
30
|
+
* The table cell properties editing feature.
|
|
31
|
+
*
|
|
32
|
+
* Introduces table cell model attributes and their conversion:
|
|
33
|
+
*
|
|
34
|
+
* - border: `tableCellBorderStyle`, `tableCellBorderColor` and `tableCellBorderWidth`
|
|
35
|
+
* - background color: `tableCellBackgroundColor`
|
|
36
|
+
* - cell padding: `tableCellPadding`
|
|
37
|
+
* - horizontal and vertical alignment: `tableCellHorizontalAlignment`, `tableCellVerticalAlignment`
|
|
38
|
+
* - cell width and height: `tableCellWidth`, `tableCellHeight`
|
|
39
|
+
*
|
|
40
|
+
* It also registers commands used to manipulate the above attributes:
|
|
41
|
+
*
|
|
42
|
+
* - border: the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` commands
|
|
43
|
+
* - background color: the `'tableCellBackgroundColor'` command
|
|
44
|
+
* - cell padding: the `'tableCellPadding'` command
|
|
45
|
+
* - horizontal and vertical alignment: the `'tableCellHorizontalAlignment'` and `'tableCellVerticalAlignment'` commands
|
|
46
|
+
* - width and height: the `'tableCellWidth'` and `'tableCellHeight'` commands
|
|
47
|
+
*/
|
|
48
|
+
export class TableCellPropertiesEditing extends Plugin {
|
|
49
|
+
/**
|
|
50
|
+
* @inheritDoc
|
|
51
|
+
*/
|
|
52
|
+
static get pluginName() {
|
|
53
|
+
return 'TableCellPropertiesEditing';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @inheritDoc
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
static get licenseFeatureCode() {
|
|
60
|
+
return 'TCP';
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @inheritDoc
|
|
64
|
+
*/
|
|
65
|
+
static get isOfficialPlugin() {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @inheritDoc
|
|
70
|
+
*/
|
|
71
|
+
static get isPremiumPlugin() {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @inheritDoc
|
|
76
|
+
*/
|
|
77
|
+
static get requires() {
|
|
78
|
+
return [TableEditing, TableCellWidthEditing];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @inheritDoc
|
|
82
|
+
*/
|
|
83
|
+
init() {
|
|
84
|
+
const editor = this.editor;
|
|
85
|
+
const schema = editor.model.schema;
|
|
86
|
+
const conversion = editor.conversion;
|
|
87
|
+
editor.config.define('table.tableCellProperties.defaultProperties', {});
|
|
88
|
+
const defaultTableCellProperties = getNormalizedDefaultCellProperties(editor.config.get('table.tableCellProperties.defaultProperties'), {
|
|
89
|
+
includeVerticalAlignmentProperty: true,
|
|
90
|
+
includeHorizontalAlignmentProperty: true,
|
|
91
|
+
includePaddingProperty: true,
|
|
92
|
+
isRightToLeftContent: editor.locale.contentLanguageDirection === 'rtl'
|
|
93
|
+
});
|
|
94
|
+
editor.data.addStyleProcessorRules(addBorderStylesRules);
|
|
95
|
+
enableBorderProperties(editor, {
|
|
96
|
+
color: defaultTableCellProperties.borderColor,
|
|
97
|
+
style: defaultTableCellProperties.borderStyle,
|
|
98
|
+
width: defaultTableCellProperties.borderWidth
|
|
99
|
+
});
|
|
100
|
+
editor.commands.add('tableCellBorderStyle', new TableCellBorderStyleCommand(editor, defaultTableCellProperties.borderStyle));
|
|
101
|
+
editor.commands.add('tableCellBorderColor', new TableCellBorderColorCommand(editor, defaultTableCellProperties.borderColor));
|
|
102
|
+
editor.commands.add('tableCellBorderWidth', new TableCellBorderWidthCommand(editor, defaultTableCellProperties.borderWidth));
|
|
103
|
+
enableProperty(schema, conversion, {
|
|
104
|
+
modelAttribute: 'tableCellHeight',
|
|
105
|
+
styleName: 'height',
|
|
106
|
+
attributeName: 'height',
|
|
107
|
+
attributeType: 'length',
|
|
108
|
+
defaultValue: defaultTableCellProperties.height
|
|
109
|
+
});
|
|
110
|
+
editor.commands.add('tableCellHeight', new TableCellHeightCommand(editor, defaultTableCellProperties.height));
|
|
111
|
+
editor.data.addStyleProcessorRules(addPaddingStylesRules);
|
|
112
|
+
enableProperty(schema, conversion, {
|
|
113
|
+
modelAttribute: 'tableCellPadding',
|
|
114
|
+
styleName: 'padding',
|
|
115
|
+
reduceBoxSides: true,
|
|
116
|
+
defaultValue: defaultTableCellProperties.padding
|
|
117
|
+
});
|
|
118
|
+
editor.commands.add('tableCellPadding', new TableCellPaddingCommand(editor, defaultTableCellProperties.padding));
|
|
119
|
+
editor.data.addStyleProcessorRules(addBackgroundStylesRules);
|
|
120
|
+
enableProperty(schema, conversion, {
|
|
121
|
+
modelAttribute: 'tableCellBackgroundColor',
|
|
122
|
+
styleName: 'background-color',
|
|
123
|
+
attributeName: 'bgcolor',
|
|
124
|
+
attributeType: 'color',
|
|
125
|
+
defaultValue: defaultTableCellProperties.backgroundColor
|
|
126
|
+
});
|
|
127
|
+
editor.commands.add('tableCellBackgroundColor', new TableCellBackgroundColorCommand(editor, defaultTableCellProperties.backgroundColor));
|
|
128
|
+
enableHorizontalAlignmentProperty(schema, conversion, defaultTableCellProperties.horizontalAlignment);
|
|
129
|
+
editor.commands.add('tableCellHorizontalAlignment', new TableCellHorizontalAlignmentCommand(editor, defaultTableCellProperties.horizontalAlignment));
|
|
130
|
+
enableVerticalAlignmentProperty(schema, conversion, defaultTableCellProperties.verticalAlignment);
|
|
131
|
+
editor.commands.add('tableCellVerticalAlignment', new TableCellVerticalAlignmentCommand(editor, defaultTableCellProperties.verticalAlignment));
|
|
132
|
+
if (editor.config.get('experimentalFlags.tableCellTypeSupport')) {
|
|
133
|
+
enableCellTypeProperty(editor);
|
|
134
|
+
editor.commands.add('tableCellType', new TableCellTypeCommand(editor));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Enables the `'tableCellBorderStyle'`, `'tableCellBorderColor'` and `'tableCellBorderWidth'` attributes for table cells.
|
|
140
|
+
*
|
|
141
|
+
* @param editor The editor instance.
|
|
142
|
+
* @param defaultBorder The default border values.
|
|
143
|
+
* @param defaultBorder.color The default `tableCellBorderColor` value.
|
|
144
|
+
* @param defaultBorder.style The default `tableCellBorderStyle` value.
|
|
145
|
+
* @param defaultBorder.width The default `tableCellBorderWidth` value.
|
|
146
|
+
*/
|
|
147
|
+
function enableBorderProperties(editor, defaultBorder) {
|
|
148
|
+
const { conversion } = editor;
|
|
149
|
+
const { schema } = editor.model;
|
|
150
|
+
const modelAttributes = {
|
|
151
|
+
width: 'tableCellBorderWidth',
|
|
152
|
+
color: 'tableCellBorderColor',
|
|
153
|
+
style: 'tableCellBorderStyle'
|
|
154
|
+
};
|
|
155
|
+
schema.extend('tableCell', {
|
|
156
|
+
allowAttributes: Object.values(modelAttributes)
|
|
157
|
+
});
|
|
158
|
+
for (const modelAttribute of Object.values(modelAttributes)) {
|
|
159
|
+
schema.setAttributeProperties(modelAttribute, { isFormatting: true });
|
|
160
|
+
}
|
|
161
|
+
upcastBorderStyles(editor, 'td', modelAttributes, defaultBorder);
|
|
162
|
+
upcastBorderStyles(editor, 'th', modelAttributes, defaultBorder);
|
|
163
|
+
downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.style, styleName: 'border-style' });
|
|
164
|
+
downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.color, styleName: 'border-color' });
|
|
165
|
+
downcastAttributeToStyle(conversion, { modelElement: 'tableCell', modelAttribute: modelAttributes.width, styleName: 'border-width' });
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Enables the `'tableCellHorizontalAlignment'` attribute for table cells.
|
|
169
|
+
*
|
|
170
|
+
* @param defaultValue The default horizontal alignment value.
|
|
171
|
+
*/
|
|
172
|
+
function enableHorizontalAlignmentProperty(schema, conversion, defaultValue) {
|
|
173
|
+
schema.extend('tableCell', {
|
|
174
|
+
allowAttributes: ['tableCellHorizontalAlignment']
|
|
175
|
+
});
|
|
176
|
+
schema.setAttributeProperties('tableCellHorizontalAlignment', { isFormatting: true });
|
|
177
|
+
conversion.for('downcast')
|
|
178
|
+
.attributeToAttribute({
|
|
179
|
+
model: {
|
|
180
|
+
name: 'tableCell',
|
|
181
|
+
key: 'tableCellHorizontalAlignment'
|
|
182
|
+
},
|
|
183
|
+
view: alignment => ({
|
|
184
|
+
key: 'style',
|
|
185
|
+
value: {
|
|
186
|
+
'text-align': alignment
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
});
|
|
190
|
+
conversion.for('upcast')
|
|
191
|
+
// Support for the `text-align:*;` CSS definition for the table cell alignment.
|
|
192
|
+
.attributeToAttribute({
|
|
193
|
+
view: {
|
|
194
|
+
name: /^(td|th)$/,
|
|
195
|
+
styles: {
|
|
196
|
+
'text-align': ALIGN_VALUES_REG_EXP
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
model: {
|
|
200
|
+
key: 'tableCellHorizontalAlignment',
|
|
201
|
+
value: (viewElement, conversionApi, data) => {
|
|
202
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'left', data);
|
|
203
|
+
const align = viewElement.getStyle('text-align');
|
|
204
|
+
if (align !== localDefaultValue) {
|
|
205
|
+
return align;
|
|
206
|
+
}
|
|
207
|
+
// Consume the style even if not applied to the element so it won't be processed by other converters.
|
|
208
|
+
conversionApi.consumable.consume(viewElement, { styles: 'text-align' });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
// Support for the `align` attribute as the backward compatibility while pasting from other sources.
|
|
213
|
+
.attributeToAttribute({
|
|
214
|
+
view: {
|
|
215
|
+
name: /^(td|th)$/,
|
|
216
|
+
attributes: {
|
|
217
|
+
align: ALIGN_VALUES_REG_EXP
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
model: {
|
|
221
|
+
key: 'tableCellHorizontalAlignment',
|
|
222
|
+
value: (viewElement, conversionApi, data) => {
|
|
223
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'left', data);
|
|
224
|
+
const align = viewElement.getAttribute('align');
|
|
225
|
+
if (align !== localDefaultValue) {
|
|
226
|
+
return align;
|
|
227
|
+
}
|
|
228
|
+
// Consume the style even if not applied to the element so it won't be processed by other converters.
|
|
229
|
+
conversionApi.consumable.consume(viewElement, { attributes: 'align' });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Enables the `'verticalAlignment'` attribute for table cells.
|
|
236
|
+
*
|
|
237
|
+
* @param defaultValue The default vertical alignment value.
|
|
238
|
+
*/
|
|
239
|
+
function enableVerticalAlignmentProperty(schema, conversion, defaultValue) {
|
|
240
|
+
schema.extend('tableCell', {
|
|
241
|
+
allowAttributes: ['tableCellVerticalAlignment']
|
|
242
|
+
});
|
|
243
|
+
schema.setAttributeProperties('tableCellVerticalAlignment', { isFormatting: true });
|
|
244
|
+
conversion.for('downcast')
|
|
245
|
+
.attributeToAttribute({
|
|
246
|
+
model: {
|
|
247
|
+
name: 'tableCell',
|
|
248
|
+
key: 'tableCellVerticalAlignment'
|
|
249
|
+
},
|
|
250
|
+
view: alignment => ({
|
|
251
|
+
key: 'style',
|
|
252
|
+
value: {
|
|
253
|
+
'vertical-align': alignment
|
|
254
|
+
}
|
|
255
|
+
})
|
|
256
|
+
});
|
|
257
|
+
conversion.for('upcast')
|
|
258
|
+
// Support for the `vertical-align:*;` CSS definition for the table cell alignment.
|
|
259
|
+
.attributeToAttribute({
|
|
260
|
+
view: {
|
|
261
|
+
name: /^(td|th)$/,
|
|
262
|
+
styles: {
|
|
263
|
+
'vertical-align': VALIGN_VALUES_REG_EXP
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
model: {
|
|
267
|
+
key: 'tableCellVerticalAlignment',
|
|
268
|
+
value: (viewElement, conversionApi, data) => {
|
|
269
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'middle', data);
|
|
270
|
+
const align = viewElement.getStyle('vertical-align');
|
|
271
|
+
if (align !== localDefaultValue) {
|
|
272
|
+
return align;
|
|
273
|
+
}
|
|
274
|
+
// Consume the style even if not applied to the element so it won't be processed by other converters.
|
|
275
|
+
conversionApi.consumable.consume(viewElement, { styles: 'vertical-align' });
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
})
|
|
279
|
+
// Support for the `align` attribute as the backward compatibility while pasting from other sources.
|
|
280
|
+
.attributeToAttribute({
|
|
281
|
+
view: {
|
|
282
|
+
name: /^(td|th)$/,
|
|
283
|
+
attributes: {
|
|
284
|
+
valign: VALIGN_VALUES_REG_EXP
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
model: {
|
|
288
|
+
key: 'tableCellVerticalAlignment',
|
|
289
|
+
value: (viewElement, conversionApi, data) => {
|
|
290
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, 'middle', data);
|
|
291
|
+
const valign = viewElement.getAttribute('valign');
|
|
292
|
+
if (valign !== localDefaultValue) {
|
|
293
|
+
return valign;
|
|
294
|
+
}
|
|
295
|
+
// Consume the attribute even if not applied to the element so it won't be processed by other converters.
|
|
296
|
+
conversionApi.consumable.consume(viewElement, { attributes: 'valign' });
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Enables the `tableCellType` attribute for table cells.
|
|
303
|
+
*/
|
|
304
|
+
function enableCellTypeProperty(editor) {
|
|
305
|
+
const { model, conversion, editing } = editor;
|
|
306
|
+
const { schema } = model;
|
|
307
|
+
const tableUtils = editor.plugins.get(TableUtils);
|
|
308
|
+
schema.extend('tableCell', {
|
|
309
|
+
allowAttributes: ['tableCellType']
|
|
310
|
+
});
|
|
311
|
+
schema.setAttributeProperties('tableCellType', {
|
|
312
|
+
isFormatting: true
|
|
313
|
+
});
|
|
314
|
+
// Do not allow setting `tableCellType` in layout tables.
|
|
315
|
+
schema.addAttributeCheck(context => {
|
|
316
|
+
const nearestTable = Array.from(context).reverse().find(item => item.name === 'table');
|
|
317
|
+
if (nearestTable?.getAttribute('tableType') === 'layout') {
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
}, 'tableCellType');
|
|
321
|
+
// Upcast conversion for td/th elements.
|
|
322
|
+
conversion.for('upcast').add(dispatcher => {
|
|
323
|
+
dispatcher.on('element:th', (evt, data, conversionApi) => {
|
|
324
|
+
const { writer } = conversionApi;
|
|
325
|
+
const { modelRange } = data;
|
|
326
|
+
const modelElement = modelRange?.start.nodeAfter;
|
|
327
|
+
if (modelElement?.is('element', 'tableCell')) {
|
|
328
|
+
writer.setAttribute('tableCellType', 'header', modelElement);
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
// Table type is examined after all other cell converters, on low priority, so
|
|
332
|
+
// we double check if there is any `th` left in the table. If so, the table is converted to a content table.
|
|
333
|
+
dispatcher.on('element:table', (evt, data, conversionApi) => {
|
|
334
|
+
const { writer } = conversionApi;
|
|
335
|
+
const { modelRange } = data;
|
|
336
|
+
const modelElement = modelRange?.start.nodeAfter;
|
|
337
|
+
if (modelElement?.is('element', 'table') && modelElement.getAttribute('tableType') === 'layout') {
|
|
338
|
+
for (const { cell } of new TableWalker(modelElement)) {
|
|
339
|
+
if (cell.getAttribute('tableCellType') === 'header') {
|
|
340
|
+
writer.setAttribute('tableType', 'content', modelElement);
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}, { priority: priorities.low - 1 });
|
|
346
|
+
});
|
|
347
|
+
// Registers a post-fixer that ensures the `headingRows` and `headingColumns` attributes
|
|
348
|
+
// are consistent with the `tableCellType` attribute of the cells. `tableCellType` has priority
|
|
349
|
+
// over `headingRows` and `headingColumns` and we use it to adjust the heading sections of the table.
|
|
350
|
+
model.document.registerPostFixer(writer => {
|
|
351
|
+
// 1. Collect all tables that need to be checked.
|
|
352
|
+
const changes = model.document.differ.getChanges();
|
|
353
|
+
const tablesToCheck = new Set();
|
|
354
|
+
for (const change of changes) {
|
|
355
|
+
// Check if headingRows or headingColumns changed.
|
|
356
|
+
if (change.type === 'attribute' && (change.attributeKey === 'headingRows' || change.attributeKey === 'headingColumns')) {
|
|
357
|
+
const table = change.range.start.nodeAfter;
|
|
358
|
+
if (table?.is('element', 'table') && table.root.rootName !== '$graveyard') {
|
|
359
|
+
tablesToCheck.add(table);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// Check if tableCellType changed.
|
|
363
|
+
if (change.type === 'attribute' && change.attributeKey === 'tableCellType') {
|
|
364
|
+
const cell = change.range.start.nodeAfter;
|
|
365
|
+
if (cell?.is('element', 'tableCell') && cell.root.rootName !== '$graveyard') {
|
|
366
|
+
const table = cell.findAncestor('table');
|
|
367
|
+
if (table) {
|
|
368
|
+
tablesToCheck.add(table);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Check if new headers were inserted.
|
|
373
|
+
if (change.type === 'insert' && change.position.nodeAfter) {
|
|
374
|
+
for (const { item } of model.createRangeOn(change.position.nodeAfter)) {
|
|
375
|
+
if (item.is('element', 'tableCell') &&
|
|
376
|
+
item.getAttribute('tableCellType') &&
|
|
377
|
+
item.root.rootName !== '$graveyard') {
|
|
378
|
+
const table = item.findAncestor('table');
|
|
379
|
+
if (table) {
|
|
380
|
+
tablesToCheck.add(table);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// 2. Update the attributes of the collected tables.
|
|
387
|
+
return updateTablesHeadingAttributes(tableUtils, writer, tablesToCheck);
|
|
388
|
+
});
|
|
389
|
+
// Refresh the table cells in the editing view when their `tableCellType` attribute changes.
|
|
390
|
+
model.document.on('change:data', () => {
|
|
391
|
+
const { differ } = model.document;
|
|
392
|
+
const cellsToReconvert = new Set();
|
|
393
|
+
for (const change of differ.getChanges()) {
|
|
394
|
+
// If the `tableCellType` attribute changed, the entire cell needs to be re-rendered.
|
|
395
|
+
if (change.type === 'attribute' && change.attributeKey === 'tableCellType') {
|
|
396
|
+
const tableCell = change.range.start.nodeAfter;
|
|
397
|
+
if (tableCell.is('element', 'tableCell')) {
|
|
398
|
+
cellsToReconvert.add(tableCell);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// Reconvert table cells that had their `tableCellType` attribute changed.
|
|
403
|
+
for (const tableCell of cellsToReconvert) {
|
|
404
|
+
const viewElement = editing.mapper.toViewElement(tableCell);
|
|
405
|
+
const cellType = tableCell.getAttribute('tableCellType');
|
|
406
|
+
const expectedElementName = cellType === 'header' ? 'th' : 'td';
|
|
407
|
+
if (viewElement?.name !== expectedElementName) {
|
|
408
|
+
editing.reconvertItem(tableCell);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
4
|
-
*/
|
|
5
1
|
/**
|
|
6
2
|
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
3
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
|
|
@@ -9,8 +5,8 @@
|
|
|
9
5
|
/**
|
|
10
6
|
* @module table/tablecellproperties/tablecellpropertiesui
|
|
11
7
|
*/
|
|
12
|
-
import { Plugin, type Editor } from '
|
|
13
|
-
import { ContextualBalloon } from '
|
|
8
|
+
import { Plugin, type Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import { ContextualBalloon } from 'ckeditor5/src/ui.js';
|
|
14
10
|
import { TableCellPropertiesView } from './ui/tablecellpropertiesview.js';
|
|
15
11
|
/**
|
|
16
12
|
* The table cell properties UI plugin. It introduces the `'tableCellProperties'` button
|