@ckeditor/ckeditor5-table 0.0.0-nightly-next-20260127.0 → 0.0.0-nightly-20260128.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 +82 -0
- package/lang/translations/af.po +332 -0
- package/lang/translations/ar.po +332 -0
- package/lang/translations/ast.po +332 -0
- package/lang/translations/az.po +332 -0
- package/lang/translations/be.po +332 -0
- package/lang/translations/bg.po +332 -0
- package/lang/translations/bn.po +334 -0
- package/lang/translations/bs.po +332 -0
- package/lang/translations/ca.po +332 -0
- package/lang/translations/cs.po +332 -0
- package/lang/translations/da.po +332 -0
- package/lang/translations/de-ch.po +332 -0
- package/lang/translations/de.po +332 -0
- package/lang/translations/el.po +332 -0
- package/lang/translations/en-au.po +332 -0
- package/lang/translations/en-gb.po +332 -0
- package/lang/translations/en.po +332 -0
- package/lang/translations/eo.po +332 -0
- package/lang/translations/es-co.po +332 -0
- package/lang/translations/es.po +332 -0
- package/lang/translations/et.po +332 -0
- package/lang/translations/eu.po +332 -0
- package/lang/translations/fa.po +332 -0
- package/lang/translations/fi.po +332 -0
- package/lang/translations/fr.po +332 -0
- package/lang/translations/gl.po +332 -0
- package/lang/translations/gu.po +332 -0
- package/lang/translations/he.po +332 -0
- package/lang/translations/hi.po +332 -0
- package/lang/translations/hr.po +332 -0
- package/lang/translations/hu.po +332 -0
- package/lang/translations/hy.po +332 -0
- package/lang/translations/id.po +332 -0
- package/lang/translations/it.po +332 -0
- package/lang/translations/ja.po +332 -0
- package/lang/translations/jv.po +332 -0
- package/lang/translations/kk.po +332 -0
- package/lang/translations/km.po +332 -0
- package/lang/translations/kn.po +332 -0
- package/lang/translations/ko.po +332 -0
- package/lang/translations/ku.po +332 -0
- package/lang/translations/lt.po +332 -0
- package/lang/translations/lv.po +332 -0
- package/lang/translations/ms.po +332 -0
- package/lang/translations/nb.po +332 -0
- package/lang/translations/ne.po +332 -0
- package/lang/translations/nl.po +332 -0
- package/lang/translations/no.po +332 -0
- package/lang/translations/oc.po +332 -0
- package/lang/translations/pl.po +332 -0
- package/lang/translations/pt-br.po +332 -0
- package/lang/translations/pt.po +332 -0
- package/lang/translations/ro.po +332 -0
- package/lang/translations/ru.po +332 -0
- package/lang/translations/si.po +332 -0
- package/lang/translations/sk.po +332 -0
- package/lang/translations/sl.po +332 -0
- package/lang/translations/sq.po +332 -0
- package/lang/translations/sr-latn.po +332 -0
- package/lang/translations/sr.po +332 -0
- package/lang/translations/sv.po +332 -0
- package/lang/translations/th.po +332 -0
- package/lang/translations/ti.po +332 -0
- package/lang/translations/tk.po +332 -0
- package/lang/translations/tr.po +332 -0
- package/lang/translations/tt.po +332 -0
- package/lang/translations/ug.po +332 -0
- package/lang/translations/uk.po +332 -0
- package/lang/translations/ur.po +332 -0
- package/lang/translations/uz.po +332 -0
- package/lang/translations/vi.po +332 -0
- package/lang/translations/zh-cn.po +332 -0
- package/lang/translations/zh.po +332 -0
- package/package.json +49 -26
- package/{dist → src}/augmentation.d.ts +15 -0
- package/src/augmentation.js +5 -0
- package/{dist → src}/commands/insertcolumncommand.d.ts +1 -1
- package/src/commands/insertcolumncommand.js +71 -0
- package/{dist → src}/commands/insertrowcommand.d.ts +1 -1
- package/src/commands/insertrowcommand.js +70 -0
- package/{dist → src}/commands/inserttablecommand.d.ts +1 -1
- package/src/commands/inserttablecommand.js +69 -0
- package/{dist → src}/commands/inserttablelayoutcommand.d.ts +1 -1
- package/src/commands/inserttablelayoutcommand.js +65 -0
- package/{dist → src}/commands/mergecellcommand.d.ts +3 -3
- package/src/commands/mergecellcommand.js +206 -0
- package/{dist → src}/commands/mergecellscommand.d.ts +1 -1
- package/src/commands/mergecellscommand.js +94 -0
- package/{dist → src}/commands/removecolumncommand.d.ts +1 -1
- package/src/commands/removecolumncommand.js +109 -0
- package/{dist → src}/commands/removerowcommand.d.ts +1 -1
- package/src/commands/removerowcommand.js +82 -0
- package/{dist → src}/commands/selectcolumncommand.d.ts +1 -1
- package/src/commands/selectcolumncommand.js +60 -0
- package/{dist → src}/commands/selectrowcommand.d.ts +1 -1
- package/src/commands/selectrowcommand.js +56 -0
- package/{dist → src}/commands/setheadercolumncommand.d.ts +1 -1
- package/src/commands/setheadercolumncommand.js +76 -0
- package/{dist → src}/commands/setheaderrowcommand.d.ts +1 -1
- package/src/commands/setheaderrowcommand.js +83 -0
- package/{dist → src}/commands/splitcellcommand.d.ts +1 -1
- package/src/commands/splitcellcommand.js +58 -0
- package/{dist → src}/converters/downcast.d.ts +2 -2
- package/src/converters/downcast.js +298 -0
- package/{dist → src}/converters/table-caption-post-fixer.d.ts +1 -1
- package/src/converters/table-caption-post-fixer.js +55 -0
- package/{dist → src}/converters/table-cell-paragraph-post-fixer.d.ts +1 -1
- package/src/converters/table-cell-paragraph-post-fixer.js +109 -0
- package/{dist → src}/converters/table-cell-refresh-handler.d.ts +1 -1
- package/src/converters/table-cell-refresh-handler.js +47 -0
- package/{dist → src}/converters/table-headings-refresh-handler.d.ts +1 -1
- package/src/converters/table-headings-refresh-handler.js +51 -0
- package/{dist → src}/converters/table-layout-post-fixer.d.ts +1 -1
- package/src/converters/table-layout-post-fixer.js +369 -0
- package/{dist → src}/converters/tableproperties.d.ts +2 -2
- package/src/converters/tableproperties.js +444 -0
- package/{dist → src}/converters/upcasttable.d.ts +1 -1
- package/src/converters/upcasttable.js +385 -0
- package/{dist → src}/index.d.ts +5 -2
- package/src/index.js +98 -0
- package/{dist → src}/plaintableoutput.d.ts +1 -1
- package/src/plaintableoutput.js +49 -0
- package/{dist → src}/table.d.ts +2 -2
- package/src/table.js +50 -0
- package/{dist → src}/tablecaption/tablecaptionediting.d.ts +2 -2
- package/src/tablecaption/tablecaptionediting.js +136 -0
- package/{dist → src}/tablecaption/tablecaptionui.d.ts +1 -1
- package/src/tablecaption/tablecaptionui.js +64 -0
- package/{dist → src}/tablecaption/toggletablecaptioncommand.d.ts +1 -1
- package/src/tablecaption/toggletablecaptioncommand.js +105 -0
- package/{dist → src}/tablecaption/utils.d.ts +1 -1
- package/src/tablecaption/utils.js +61 -0
- package/{dist → src}/tablecaption.d.ts +1 -1
- package/src/tablecaption.js +34 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +1 -1
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +2 -2
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderstylecommand.d.ts +2 -2
- package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -0
- package/{dist → src}/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +2 -2
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellheightcommand.d.ts +1 -1
- package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -0
- package/{dist → src}/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +1 -1
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpaddingcommand.d.ts +2 -2
- package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -0
- package/{dist → src}/tablecellproperties/commands/tablecellpropertycommand.d.ts +2 -2
- package/src/tablecellproperties/commands/tablecellpropertycommand.js +138 -0
- package/{dist → src}/tablecellproperties/commands/tablecelltypecommand.d.ts +6 -2
- package/src/tablecellproperties/commands/tablecelltypecommand.js +167 -0
- package/{dist → src}/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +1 -1
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesediting.d.ts +1 -1
- package/src/tablecellproperties/tablecellpropertiesediting.js +412 -0
- package/{dist → src}/tablecellproperties/tablecellpropertiesui.d.ts +2 -2
- 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 -11
- package/src/tablecellproperties/ui/tablecellpropertiesviewexperimental.js +744 -0
- package/{dist → src}/tablecellproperties.d.ts +1 -1
- package/src/tablecellproperties.js +40 -0
- package/{dist → src}/tablecellwidth/commands/tablecellwidthcommand.d.ts +1 -1
- package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -0
- package/{dist → src}/tablecellwidth/tablecellwidthediting.d.ts +1 -1
- package/src/tablecellwidth/tablecellwidthediting.js +53 -0
- package/{dist → src}/tableclipboard.d.ts +3 -3
- package/src/tableclipboard.js +500 -0
- package/src/tablecolumnresize/constants.js +33 -0
- package/{dist → src}/tablecolumnresize/converters.d.ts +1 -1
- package/src/tablecolumnresize/converters.js +62 -0
- package/{dist → src}/tablecolumnresize/tablecolumnresizeediting.d.ts +2 -2
- package/src/tablecolumnresize/tablecolumnresizeediting.js +734 -0
- package/{dist → src}/tablecolumnresize/tablewidthscommand.d.ts +2 -2
- package/src/tablecolumnresize/tablewidthscommand.js +61 -0
- package/{dist → src}/tablecolumnresize/utils.d.ts +2 -2
- package/src/tablecolumnresize/utils.js +370 -0
- package/{dist → src}/tablecolumnresize.d.ts +1 -1
- package/src/tablecolumnresize.js +36 -0
- package/{dist → src}/tableconfig.d.ts +6 -26
- package/src/tableconfig.js +5 -0
- package/{dist → src}/tableediting.d.ts +3 -3
- package/src/tableediting.js +246 -0
- package/{dist → src}/tablekeyboard.d.ts +3 -3
- package/src/tablekeyboard.js +273 -0
- package/{dist → src}/tablelayout/commands/tabletypecommand.d.ts +1 -1
- package/src/tablelayout/commands/tabletypecommand.js +68 -0
- package/{dist → src}/tablelayout/tablelayoutediting.d.ts +1 -1
- package/src/tablelayout/tablelayoutediting.js +295 -0
- package/{dist → src}/tablelayout/tablelayoutui.d.ts +1 -1
- package/src/tablelayout/tablelayoutui.js +196 -0
- package/{dist → src}/tablelayout.d.ts +1 -1
- package/src/tablelayout.js +37 -0
- package/{dist → src}/tablemouse/mouseeventsobserver.d.ts +1 -1
- package/src/tablemouse/mouseeventsobserver.js +34 -0
- package/{dist → src}/tablemouse.d.ts +1 -1
- package/src/tablemouse.js +178 -0
- package/{dist → src}/tableproperties/commands/tablealignmentcommand.d.ts +1 -1
- package/src/tableproperties/commands/tablealignmentcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebackgroundcolorcommand.d.ts +1 -1
- package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -0
- package/{dist → src}/tableproperties/commands/tablebordercolorcommand.d.ts +2 -2
- package/src/tableproperties/commands/tablebordercolorcommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderstylecommand.d.ts +2 -2
- package/src/tableproperties/commands/tableborderstylecommand.js +44 -0
- package/{dist → src}/tableproperties/commands/tableborderwidthcommand.d.ts +2 -2
- package/src/tableproperties/commands/tableborderwidthcommand.js +64 -0
- package/{dist → src}/tableproperties/commands/tableheightcommand.d.ts +1 -1
- package/src/tableproperties/commands/tableheightcommand.js +54 -0
- package/{dist → src}/tableproperties/commands/tablepropertycommand.d.ts +2 -2
- package/src/tableproperties/commands/tablepropertycommand.js +103 -0
- package/{dist → src}/tableproperties/commands/tablewidthcommand.d.ts +1 -1
- package/src/tableproperties/commands/tablewidthcommand.js +54 -0
- package/{dist → src}/tableproperties/tablepropertiesediting.d.ts +1 -1
- package/src/tableproperties/tablepropertiesediting.js +546 -0
- package/{dist → src}/tableproperties/tablepropertiesui.d.ts +2 -2
- 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 -10
- 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 -1
- package/src/tableproperties.js +40 -0
- package/{dist → src}/tableselection.d.ts +2 -2
- package/src/tableselection.js +323 -0
- package/{dist → src}/tabletoolbar.d.ts +2 -2
- package/src/tabletoolbar.js +63 -0
- package/{dist → src}/tableui.d.ts +1 -1
- package/src/tableui.js +335 -0
- package/{dist → src}/tableutils.d.ts +2 -2
- package/src/tableutils.js +1282 -0
- package/{dist → src}/tablewalker.d.ts +1 -1
- package/src/tablewalker.js +489 -0
- package/{dist → src}/ui/colorinputview.d.ts +2 -2
- package/src/ui/colorinputview.js +305 -0
- package/{dist → src}/ui/inserttableview.d.ts +2 -2
- package/src/ui/inserttableview.js +192 -0
- package/{dist → src}/utils/common.d.ts +2 -2
- package/src/utils/common.js +118 -0
- package/{dist → src}/utils/structure.d.ts +1 -1
- package/src/utils/structure.js +452 -0
- package/{dist → src}/utils/table-properties.d.ts +1 -1
- package/src/utils/table-properties.js +121 -0
- package/{dist → src}/utils/ui/contextualballoon.d.ts +2 -2
- package/src/utils/ui/contextualballoon.js +111 -0
- package/{dist → src}/utils/ui/table-properties.d.ts +2 -2
- 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 -1
- package/src/utils/ui/widget.js +56 -0
- package/theme/colorinput.css +39 -0
- package/theme/formrow-experimental.css +15 -0
- package/theme/formrow.css +13 -0
- package/theme/inserttable.css +10 -0
- package/theme/table.css +144 -0
- package/theme/tablecaption.css +66 -0
- package/theme/tablecellproperties-experimental.css +4 -0
- package/theme/tablecellproperties.css +28 -0
- package/theme/tablecolumnresize.css +62 -0
- package/theme/tableediting.css +10 -0
- package/theme/tableform-experimental.css +61 -0
- package/theme/tableform.css +64 -0
- package/theme/tablelayout.css +74 -0
- package/theme/tableproperties-experimental.css +78 -0
- package/theme/tableproperties.css +18 -0
- package/theme/tableselection.css +10 -0
- package/dist/tablecellproperties/tablecellpropertiesutils.d.ts +0 -18
- /package/{dist → src}/tablecolumnresize/constants.d.ts +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
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/tableproperties/commands/tablewidthcommand
|
|
7
|
+
*/
|
|
8
|
+
import { TablePropertyCommand } from './tablepropertycommand.js';
|
|
9
|
+
import { addDefaultUnitToNumericValue } from '../../utils/table-properties.js';
|
|
10
|
+
/**
|
|
11
|
+
* The table width command.
|
|
12
|
+
*
|
|
13
|
+
* The command is registered by the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing} as
|
|
14
|
+
* the `'tableWidth'` editor command.
|
|
15
|
+
*
|
|
16
|
+
* To change the width of the selected table, execute the command:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* editor.execute( 'tableWidth', {
|
|
20
|
+
* value: '400px'
|
|
21
|
+
* } );
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* **Note**: This command adds the default `'px'` unit to numeric values. Executing:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* editor.execute( 'tableWidth', {
|
|
28
|
+
* value: '50'
|
|
29
|
+
* } );
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* will set the `width` attribute to `'50px'` in the model.
|
|
33
|
+
*/
|
|
34
|
+
export class TableWidthCommand extends TablePropertyCommand {
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new `TableWidthCommand` instance.
|
|
37
|
+
*
|
|
38
|
+
* @param editor An editor in which this command will be used.
|
|
39
|
+
* @param defaultValue The default value of the attribute.
|
|
40
|
+
*/
|
|
41
|
+
constructor(editor, defaultValue) {
|
|
42
|
+
super(editor, 'tableWidth', defaultValue);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @inheritDoc
|
|
46
|
+
*/
|
|
47
|
+
_getValueToSet(value) {
|
|
48
|
+
value = addDefaultUnitToNumericValue(value, 'px');
|
|
49
|
+
if (value === this._defaultValue) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module table/tableproperties/tablepropertiesediting
|
|
7
7
|
*/
|
|
8
|
-
import { Plugin } from '
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core.js';
|
|
9
9
|
import { TableEditing } from '../tableediting.js';
|
|
10
10
|
/**
|
|
11
11
|
* The table properties editing feature.
|
|
@@ -0,0 +1,546 @@
|
|
|
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/tableproperties/tablepropertiesediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core.js';
|
|
9
|
+
import { addBackgroundStylesRules, addBorderStylesRules, addMarginStylesRules } from 'ckeditor5/src/engine.js';
|
|
10
|
+
import { first } from 'ckeditor5/src/utils.js';
|
|
11
|
+
import { TableEditing } from '../tableediting.js';
|
|
12
|
+
import { downcastAttributeToStyle, downcastTableAttribute, getDefaultValueAdjusted, upcastBorderStyles, upcastStyleToAttribute, upcastTableAlignmentConfig, DEFAULT_TABLE_ALIGNMENT_OPTIONS } from '../converters/tableproperties.js';
|
|
13
|
+
import { TableBackgroundColorCommand } from './commands/tablebackgroundcolorcommand.js';
|
|
14
|
+
import { TableBorderColorCommand } from './commands/tablebordercolorcommand.js';
|
|
15
|
+
import { TableBorderStyleCommand } from './commands/tableborderstylecommand.js';
|
|
16
|
+
import { TableBorderWidthCommand } from './commands/tableborderwidthcommand.js';
|
|
17
|
+
import { TableWidthCommand } from './commands/tablewidthcommand.js';
|
|
18
|
+
import { TableHeightCommand } from './commands/tableheightcommand.js';
|
|
19
|
+
import { TableAlignmentCommand } from './commands/tablealignmentcommand.js';
|
|
20
|
+
import { getNormalizedDefaultTableProperties } from '../utils/table-properties.js';
|
|
21
|
+
import { getViewTableFromWrapper } from '../utils/structure.js';
|
|
22
|
+
/**
|
|
23
|
+
* The table properties editing feature.
|
|
24
|
+
*
|
|
25
|
+
* Introduces table's model attributes and their conversion:
|
|
26
|
+
*
|
|
27
|
+
* - border: `tableBorderStyle`, `tableBorderColor` and `tableBorderWidth`
|
|
28
|
+
* - background color: `tableBackgroundColor`
|
|
29
|
+
* - horizontal alignment: `tableAlignment`
|
|
30
|
+
* - width & height: `tableWidth` & `tableHeight`
|
|
31
|
+
*
|
|
32
|
+
* It also registers commands used to manipulate the above attributes:
|
|
33
|
+
*
|
|
34
|
+
* - border: `'tableBorderStyle'`, `'tableBorderColor'` and `'tableBorderWidth'` commands
|
|
35
|
+
* - background color: `'tableBackgroundColor'`
|
|
36
|
+
* - horizontal alignment: `'tableAlignment'`
|
|
37
|
+
* - width & height: `'tableWidth'` & `'tableHeight'`
|
|
38
|
+
*/
|
|
39
|
+
export class TablePropertiesEditing extends Plugin {
|
|
40
|
+
/**
|
|
41
|
+
* @inheritDoc
|
|
42
|
+
*/
|
|
43
|
+
static get pluginName() {
|
|
44
|
+
return 'TablePropertiesEditing';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @inheritDoc
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
static get licenseFeatureCode() {
|
|
51
|
+
return 'TCP';
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @inheritDoc
|
|
55
|
+
*/
|
|
56
|
+
static get isOfficialPlugin() {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @inheritDoc
|
|
61
|
+
*/
|
|
62
|
+
static get isPremiumPlugin() {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @inheritDoc
|
|
67
|
+
*/
|
|
68
|
+
static get requires() {
|
|
69
|
+
return [TableEditing];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @inheritDoc
|
|
73
|
+
*/
|
|
74
|
+
init() {
|
|
75
|
+
const editor = this.editor;
|
|
76
|
+
const schema = editor.model.schema;
|
|
77
|
+
const conversion = editor.conversion;
|
|
78
|
+
editor.config.define('table.tableProperties.defaultProperties', {});
|
|
79
|
+
const defaultTableProperties = getNormalizedDefaultTableProperties(editor.config.get('table.tableProperties.defaultProperties'), {
|
|
80
|
+
includeAlignmentProperty: true
|
|
81
|
+
});
|
|
82
|
+
const useInlineStyles = editor.config.get('table.tableProperties.alignment.useInlineStyles') !== false;
|
|
83
|
+
editor.data.addStyleProcessorRules(addMarginStylesRules);
|
|
84
|
+
editor.data.addStyleProcessorRules(addBorderStylesRules);
|
|
85
|
+
enableBorderProperties(editor, {
|
|
86
|
+
color: defaultTableProperties.borderColor,
|
|
87
|
+
style: defaultTableProperties.borderStyle,
|
|
88
|
+
width: defaultTableProperties.borderWidth
|
|
89
|
+
});
|
|
90
|
+
editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
|
|
91
|
+
editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
|
|
92
|
+
editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
|
|
93
|
+
if (editor.config.get('experimentalFlags.useExtendedTableBlockAlignment')) {
|
|
94
|
+
enableExtendedAlignmentProperty(schema, conversion, defaultTableProperties.alignment, useInlineStyles);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
|
|
98
|
+
}
|
|
99
|
+
editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
|
|
100
|
+
enableTableToFigureProperty(schema, conversion, {
|
|
101
|
+
modelAttribute: 'tableWidth',
|
|
102
|
+
styleName: 'width',
|
|
103
|
+
attributeName: 'width',
|
|
104
|
+
attributeType: 'length',
|
|
105
|
+
defaultValue: defaultTableProperties.width
|
|
106
|
+
});
|
|
107
|
+
editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
|
|
108
|
+
enableTableToFigureProperty(schema, conversion, {
|
|
109
|
+
modelAttribute: 'tableHeight',
|
|
110
|
+
styleName: 'height',
|
|
111
|
+
attributeName: 'height',
|
|
112
|
+
attributeType: 'length',
|
|
113
|
+
defaultValue: defaultTableProperties.height
|
|
114
|
+
});
|
|
115
|
+
editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
|
|
116
|
+
editor.data.addStyleProcessorRules(addBackgroundStylesRules);
|
|
117
|
+
enableProperty(schema, conversion, {
|
|
118
|
+
modelAttribute: 'tableBackgroundColor',
|
|
119
|
+
styleName: 'background-color',
|
|
120
|
+
attributeName: 'bgcolor',
|
|
121
|
+
attributeType: 'color',
|
|
122
|
+
defaultValue: defaultTableProperties.backgroundColor
|
|
123
|
+
});
|
|
124
|
+
editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
|
|
125
|
+
if (editor.config.get('experimentalFlags.useExtendedTableBlockAlignment')) {
|
|
126
|
+
const viewDoc = editor.editing.view.document;
|
|
127
|
+
// Adjust clipboard output to wrap tables in divs if needed (for alignment).
|
|
128
|
+
this.listenTo(viewDoc, 'clipboardOutput', (evt, data) => {
|
|
129
|
+
editor.editing.view.change(writer => {
|
|
130
|
+
for (const { item } of writer.createRangeIn(data.content)) {
|
|
131
|
+
wrapInDivIfNeeded(item, writer);
|
|
132
|
+
}
|
|
133
|
+
data.dataTransfer.setData('text/html', this.editor.data.htmlProcessor.toData(data.content));
|
|
134
|
+
});
|
|
135
|
+
}, { priority: 'lowest' });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Checks whether the view element is a table and if it needs to be wrapped in a div for alignment purposes.
|
|
141
|
+
* If so, it wraps it in a div and inserts it into the data content.
|
|
142
|
+
*/
|
|
143
|
+
function wrapInDivIfNeeded(viewItem, writer) {
|
|
144
|
+
if (!viewItem.is('element', 'table')) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const alignAttribute = viewItem.getAttribute('align');
|
|
148
|
+
const floatAttribute = viewItem.getStyle('float');
|
|
149
|
+
const marginLeft = viewItem.getStyle('margin-left');
|
|
150
|
+
const marginRight = viewItem.getStyle('margin-right');
|
|
151
|
+
if (
|
|
152
|
+
// Align center.
|
|
153
|
+
(alignAttribute && alignAttribute === 'center') ||
|
|
154
|
+
// Align right with text wrapping.
|
|
155
|
+
(floatAttribute && floatAttribute === 'right' && alignAttribute && alignAttribute === 'right')) {
|
|
156
|
+
insertWrapperWithAlignment(writer, alignAttribute, viewItem);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Align right with no text wrapping.
|
|
160
|
+
if (floatAttribute === undefined && marginLeft === 'auto' && marginRight === '0') {
|
|
161
|
+
insertWrapperWithAlignment(writer, 'right', viewItem);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function insertWrapperWithAlignment(writer, align, table) {
|
|
165
|
+
const position = writer.createPositionBefore(table);
|
|
166
|
+
const wrapper = writer.createContainerElement('div', { align }, table);
|
|
167
|
+
writer.insert(position, wrapper);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
|
|
171
|
+
*
|
|
172
|
+
* @param defaultBorder The default border values.
|
|
173
|
+
* @param defaultBorder.color The default `tableBorderColor` value.
|
|
174
|
+
* @param defaultBorder.style The default `tableBorderStyle` value.
|
|
175
|
+
* @param defaultBorder.width The default `tableBorderWidth` value.
|
|
176
|
+
*/
|
|
177
|
+
function enableBorderProperties(editor, defaultBorder) {
|
|
178
|
+
const { conversion } = editor;
|
|
179
|
+
const { schema } = editor.model;
|
|
180
|
+
const modelAttributes = {
|
|
181
|
+
width: 'tableBorderWidth',
|
|
182
|
+
color: 'tableBorderColor',
|
|
183
|
+
style: 'tableBorderStyle'
|
|
184
|
+
};
|
|
185
|
+
schema.extend('table', {
|
|
186
|
+
allowAttributes: Object.values(modelAttributes)
|
|
187
|
+
});
|
|
188
|
+
for (const modelAttribute of Object.values(modelAttributes)) {
|
|
189
|
+
schema.setAttributeProperties(modelAttribute, { isFormatting: true });
|
|
190
|
+
}
|
|
191
|
+
upcastBorderStyles(editor, 'table', modelAttributes, defaultBorder);
|
|
192
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
|
|
193
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
|
|
194
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Enables the extended block`'alignment'` attribute for table.
|
|
198
|
+
*
|
|
199
|
+
* @param defaultValue The default alignment value.
|
|
200
|
+
*/
|
|
201
|
+
function enableExtendedAlignmentProperty(schema, conversion, defaultValue, useInlineStyles) {
|
|
202
|
+
schema.extend('table', {
|
|
203
|
+
allowAttributes: ['tableAlignment']
|
|
204
|
+
});
|
|
205
|
+
schema.setAttributeProperties('tableAlignment', { isFormatting: true });
|
|
206
|
+
conversion.for('downcast')
|
|
207
|
+
.attributeToAttribute({
|
|
208
|
+
model: {
|
|
209
|
+
name: 'table',
|
|
210
|
+
key: 'tableAlignment',
|
|
211
|
+
values: ['left', 'center', 'right', 'blockLeft', 'blockRight']
|
|
212
|
+
},
|
|
213
|
+
view: {
|
|
214
|
+
left: useInlineStyles ? {
|
|
215
|
+
key: 'style',
|
|
216
|
+
value: {
|
|
217
|
+
float: 'left',
|
|
218
|
+
'margin-right': 'var(--ck-content-table-style-spacing, 1.5em)'
|
|
219
|
+
}
|
|
220
|
+
} : {
|
|
221
|
+
key: 'class',
|
|
222
|
+
value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.left.className
|
|
223
|
+
},
|
|
224
|
+
right: useInlineStyles ? {
|
|
225
|
+
key: 'style',
|
|
226
|
+
value: {
|
|
227
|
+
float: 'right',
|
|
228
|
+
'margin-left': 'var(--ck-content-table-style-spacing, 1.5em)'
|
|
229
|
+
}
|
|
230
|
+
} : {
|
|
231
|
+
key: 'class',
|
|
232
|
+
value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.right.className
|
|
233
|
+
},
|
|
234
|
+
center: useInlineStyles ? {
|
|
235
|
+
key: 'style',
|
|
236
|
+
value: {
|
|
237
|
+
'margin-left': 'auto',
|
|
238
|
+
'margin-right': 'auto'
|
|
239
|
+
}
|
|
240
|
+
} : {
|
|
241
|
+
key: 'class',
|
|
242
|
+
value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.center.className
|
|
243
|
+
},
|
|
244
|
+
blockLeft: useInlineStyles ? {
|
|
245
|
+
key: 'style',
|
|
246
|
+
value: {
|
|
247
|
+
'margin-left': '0',
|
|
248
|
+
'margin-right': 'auto'
|
|
249
|
+
}
|
|
250
|
+
} : {
|
|
251
|
+
key: 'class',
|
|
252
|
+
value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockLeft.className
|
|
253
|
+
},
|
|
254
|
+
blockRight: useInlineStyles ? {
|
|
255
|
+
key: 'style',
|
|
256
|
+
value: {
|
|
257
|
+
'margin-left': 'auto',
|
|
258
|
+
'margin-right': '0'
|
|
259
|
+
}
|
|
260
|
+
} : {
|
|
261
|
+
key: 'class',
|
|
262
|
+
value: DEFAULT_TABLE_ALIGNMENT_OPTIONS.blockRight.className
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
converterPriority: 'high'
|
|
266
|
+
});
|
|
267
|
+
/**
|
|
268
|
+
* Enables upcasting of the `tableAlignment` attribute.
|
|
269
|
+
*/
|
|
270
|
+
upcastTableAlignmentConfig.forEach(config => {
|
|
271
|
+
conversion.for('upcast').attributeToAttribute({
|
|
272
|
+
view: config.view,
|
|
273
|
+
model: {
|
|
274
|
+
key: 'tableAlignment',
|
|
275
|
+
value: (viewElement, conversionApi, data) => {
|
|
276
|
+
if (isNonTableFigureElement(viewElement)) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
|
|
280
|
+
const align = config.getAlign(viewElement);
|
|
281
|
+
const consumables = config.getConsumables(viewElement);
|
|
282
|
+
conversionApi.consumable.consume(viewElement, consumables);
|
|
283
|
+
if (align !== localDefaultValue) {
|
|
284
|
+
return align;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
conversion.for('upcast').add(upcastTableAlignedDiv(defaultValue));
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Enables the `'alignment'` attribute for table.
|
|
294
|
+
*
|
|
295
|
+
* @param defaultValue The default alignment value.
|
|
296
|
+
*/
|
|
297
|
+
function enableAlignmentProperty(schema, conversion, defaultValue) {
|
|
298
|
+
const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
|
|
299
|
+
const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
|
|
300
|
+
schema.extend('table', {
|
|
301
|
+
allowAttributes: ['tableAlignment']
|
|
302
|
+
});
|
|
303
|
+
schema.setAttributeProperties('tableAlignment', { isFormatting: true });
|
|
304
|
+
conversion.for('downcast')
|
|
305
|
+
.attributeToAttribute({
|
|
306
|
+
model: {
|
|
307
|
+
name: 'table',
|
|
308
|
+
key: 'tableAlignment',
|
|
309
|
+
values: ['left', 'center', 'right']
|
|
310
|
+
},
|
|
311
|
+
view: {
|
|
312
|
+
left: {
|
|
313
|
+
key: 'style',
|
|
314
|
+
value: {
|
|
315
|
+
float: 'left'
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
right: {
|
|
319
|
+
key: 'style',
|
|
320
|
+
value: {
|
|
321
|
+
float: 'right'
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
center: (alignment, conversionApi, data) => {
|
|
325
|
+
const value = data.item.getAttribute('tableType') !== 'layout' ? {
|
|
326
|
+
// Model: `alignment:center` => CSS: `float:none`.
|
|
327
|
+
float: 'none'
|
|
328
|
+
} : {
|
|
329
|
+
'margin-left': 'auto',
|
|
330
|
+
'margin-right': 'auto'
|
|
331
|
+
};
|
|
332
|
+
return {
|
|
333
|
+
key: 'style',
|
|
334
|
+
value
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
converterPriority: 'high'
|
|
339
|
+
});
|
|
340
|
+
conversion.for('upcast')
|
|
341
|
+
// Support for the `float:*;` CSS definition for the table alignment.
|
|
342
|
+
.attributeToAttribute({
|
|
343
|
+
view: {
|
|
344
|
+
name: /^(table|figure)$/,
|
|
345
|
+
styles: {
|
|
346
|
+
float: FLOAT_VALUES_REG_EXP
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
model: {
|
|
350
|
+
key: 'tableAlignment',
|
|
351
|
+
value: (viewElement, conversionApi, data) => {
|
|
352
|
+
// Ignore other figure elements.
|
|
353
|
+
if (viewElement.name == 'figure' && !viewElement.hasClass('table')) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
|
|
357
|
+
let align = viewElement.getStyle('float');
|
|
358
|
+
// CSS: `float:none` => Model: `alignment:center`.
|
|
359
|
+
if (align === 'none') {
|
|
360
|
+
align = 'center';
|
|
361
|
+
}
|
|
362
|
+
if (align !== localDefaultValue) {
|
|
363
|
+
return align;
|
|
364
|
+
}
|
|
365
|
+
// Consume the style even if not applied to the element so it won't be processed by other converters.
|
|
366
|
+
conversionApi.consumable.consume(viewElement, { styles: 'float' });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
})
|
|
370
|
+
// Support for the `margin-left:auto; margin-right:auto;` CSS definition for the table alignment.
|
|
371
|
+
.attributeToAttribute({
|
|
372
|
+
view: {
|
|
373
|
+
name: /^(table|figure)$/,
|
|
374
|
+
styles: {
|
|
375
|
+
'margin-left': 'auto',
|
|
376
|
+
'margin-right': 'auto'
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
model: {
|
|
380
|
+
key: 'tableAlignment',
|
|
381
|
+
value: (viewElement, conversionApi, data) => {
|
|
382
|
+
// Ignore other figure elements.
|
|
383
|
+
if (viewElement.name == 'figure' && !viewElement.hasClass('table')) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
|
|
387
|
+
const align = 'center';
|
|
388
|
+
if (align !== localDefaultValue) {
|
|
389
|
+
return align;
|
|
390
|
+
}
|
|
391
|
+
// Consume the styles even if not applied to the element so it won't be processed by other converters.
|
|
392
|
+
conversionApi.consumable.consume(viewElement, { styles: ['margin-left', 'margin-right'] });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
})
|
|
396
|
+
// Support for the `align` attribute as the backward compatibility while pasting from other sources.
|
|
397
|
+
.attributeToAttribute({
|
|
398
|
+
view: {
|
|
399
|
+
name: 'table',
|
|
400
|
+
attributes: {
|
|
401
|
+
align: ALIGN_VALUES_REG_EXP
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
model: {
|
|
405
|
+
key: 'tableAlignment',
|
|
406
|
+
value: (viewElement, conversionApi, data) => {
|
|
407
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
|
|
408
|
+
const align = viewElement.getAttribute('align');
|
|
409
|
+
if (align !== localDefaultValue) {
|
|
410
|
+
return align;
|
|
411
|
+
}
|
|
412
|
+
// Consume the attribute even if not applied to the element so it won't be processed by other converters.
|
|
413
|
+
conversionApi.consumable.consume(viewElement, { attributes: 'align' });
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Returns a function that converts the table view representation:
|
|
420
|
+
*
|
|
421
|
+
* ```html
|
|
422
|
+
* <div align="right"><table>...</table></div>
|
|
423
|
+
* <!-- or -->
|
|
424
|
+
* <div align="center"><table>...</table></div>
|
|
425
|
+
* <!-- or -->
|
|
426
|
+
* <div align="left"><table>...</table></div>
|
|
427
|
+
* ```
|
|
428
|
+
*
|
|
429
|
+
* to the model representation:
|
|
430
|
+
*
|
|
431
|
+
* ```xml
|
|
432
|
+
* <table tableAlignment="right|center|left"></table>
|
|
433
|
+
* ```
|
|
434
|
+
*
|
|
435
|
+
* @internal
|
|
436
|
+
*/
|
|
437
|
+
function upcastTableAlignedDiv(defaultValue) {
|
|
438
|
+
return (dispatcher) => {
|
|
439
|
+
dispatcher.on('element:div', (evt, data, conversionApi) => {
|
|
440
|
+
// Do not convert if this is not a "table wrapped in div with align attribute".
|
|
441
|
+
if (!conversionApi.consumable.test(data.viewItem, { name: true, attributes: 'align' })) {
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
// Find a table element inside the div element.
|
|
445
|
+
const viewTable = getViewTableFromWrapper(data.viewItem);
|
|
446
|
+
// Do not convert if table element is absent or was already converted.
|
|
447
|
+
if (!viewTable || !conversionApi.consumable.test(viewTable, { name: true })) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
// Consume the div to prevent other converters from processing it again.
|
|
451
|
+
conversionApi.consumable.consume(data.viewItem, { name: true, attributes: 'align' });
|
|
452
|
+
// Convert view table to model table.
|
|
453
|
+
const conversionResult = conversionApi.convertItem(viewTable, data.modelCursor);
|
|
454
|
+
// Get table element from conversion result.
|
|
455
|
+
const modelTable = first(conversionResult.modelRange.getItems());
|
|
456
|
+
// When table wasn't successfully converted then finish conversion.
|
|
457
|
+
if (!modelTable || !modelTable.is('element', 'table')) {
|
|
458
|
+
// Revert consumed div so other features can convert it.
|
|
459
|
+
conversionApi.consumable.revert(data.viewItem, { name: true, attributes: 'align' });
|
|
460
|
+
// If anyway some table content was converted, we have to pass the model range and cursor.
|
|
461
|
+
if (conversionResult.modelRange && !conversionResult.modelRange.isCollapsed) {
|
|
462
|
+
data.modelRange = conversionResult.modelRange;
|
|
463
|
+
data.modelCursor = conversionResult.modelCursor;
|
|
464
|
+
}
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
const alignAttributeFromDiv = data.viewItem.getAttribute('align');
|
|
468
|
+
const alignAttributeFromTable = viewTable.getAttribute('align');
|
|
469
|
+
const localDefaultValue = getDefaultValueAdjusted(defaultValue, '', data);
|
|
470
|
+
const align = convertToTableAlignment(alignAttributeFromDiv, alignAttributeFromTable, localDefaultValue);
|
|
471
|
+
if (align) {
|
|
472
|
+
conversionApi.writer.setAttribute('tableAlignment', align, modelTable);
|
|
473
|
+
}
|
|
474
|
+
conversionApi.convertChildren(data.viewItem, conversionApi.writer.createPositionAt(modelTable, 'end'));
|
|
475
|
+
conversionApi.updateConversionResult(modelTable, data);
|
|
476
|
+
});
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Converts div `align` and table `align` attributes to the model `tableAlignment` attribute.
|
|
481
|
+
*
|
|
482
|
+
* @param divAlign The value of the div `align` attribute.
|
|
483
|
+
* @param tableAlign The value of the table `align` attribute.
|
|
484
|
+
* @param defaultValue The default alignment value.
|
|
485
|
+
* @returns The model `tableAlignment` value or `undefined` if no conversion is needed.
|
|
486
|
+
*/
|
|
487
|
+
function convertToTableAlignment(divAlign, tableAlign, defaultValue) {
|
|
488
|
+
if (divAlign) {
|
|
489
|
+
switch (divAlign) {
|
|
490
|
+
case 'right':
|
|
491
|
+
if (tableAlign === 'right') {
|
|
492
|
+
return 'right';
|
|
493
|
+
}
|
|
494
|
+
else if (tableAlign === 'left') {
|
|
495
|
+
return 'left';
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
return 'blockRight';
|
|
499
|
+
}
|
|
500
|
+
case 'center':
|
|
501
|
+
return 'center';
|
|
502
|
+
case 'left':
|
|
503
|
+
return tableAlign === undefined ? 'blockLeft' : 'left';
|
|
504
|
+
default:
|
|
505
|
+
return defaultValue;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return undefined;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Enables conversion for an attribute for simple view-model mappings.
|
|
512
|
+
*
|
|
513
|
+
* @param options.defaultValue The default value for the specified `modelAttribute`.
|
|
514
|
+
*/
|
|
515
|
+
function enableProperty(schema, conversion, options) {
|
|
516
|
+
const { modelAttribute } = options;
|
|
517
|
+
schema.extend('table', {
|
|
518
|
+
allowAttributes: [modelAttribute]
|
|
519
|
+
});
|
|
520
|
+
schema.setAttributeProperties(modelAttribute, { isFormatting: true });
|
|
521
|
+
upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
|
|
522
|
+
downcastTableAttribute(conversion, options);
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Enables conversion for an attribute for simple view (figure) to model (table) mappings.
|
|
526
|
+
*/
|
|
527
|
+
function enableTableToFigureProperty(schema, conversion, options) {
|
|
528
|
+
const { modelAttribute } = options;
|
|
529
|
+
schema.extend('table', {
|
|
530
|
+
allowAttributes: [modelAttribute]
|
|
531
|
+
});
|
|
532
|
+
schema.setAttributeProperties(modelAttribute, { isFormatting: true });
|
|
533
|
+
upcastStyleToAttribute(conversion, {
|
|
534
|
+
viewElement: /^(table|figure)$/,
|
|
535
|
+
shouldUpcast: (viewElement) => !(viewElement.name == 'table' && viewElement.parent.name == 'figure' ||
|
|
536
|
+
viewElement.name == 'figure' && !viewElement.hasClass('table')),
|
|
537
|
+
...options
|
|
538
|
+
});
|
|
539
|
+
downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Checks whether a given figure element should be ignored when upcasting table properties.
|
|
543
|
+
*/
|
|
544
|
+
function isNonTableFigureElement(viewElement) {
|
|
545
|
+
return viewElement.name == 'figure' && !viewElement.hasClass('table');
|
|
546
|
+
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module table/tableproperties/tablepropertiesui
|
|
7
7
|
*/
|
|
8
|
-
import { Plugin, type Editor } from '
|
|
9
|
-
import { ButtonView, ContextualBalloon } from '
|
|
8
|
+
import { Plugin, type Editor } from 'ckeditor5/src/core.js';
|
|
9
|
+
import { ButtonView, ContextualBalloon } from 'ckeditor5/src/ui.js';
|
|
10
10
|
import { TablePropertiesView } from './ui/tablepropertiesview.js';
|
|
11
11
|
/**
|
|
12
12
|
* The table properties UI plugin. It introduces the `'tableProperties'` button
|