@ckeditor/ckeditor5-table 40.0.0 → 40.2.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/CHANGELOG.md +15 -15
- package/LICENSE.md +3 -3
- package/build/table.js +1 -1
- package/build/translations/fi.js +1 -1
- package/lang/translations/fi.po +3 -3
- package/package.json +2 -2
- package/src/augmentation.d.ts +76 -76
- package/src/augmentation.js +5 -5
- package/src/commands/insertcolumncommand.d.ts +55 -55
- package/src/commands/insertcolumncommand.js +67 -67
- package/src/commands/insertrowcommand.d.ts +54 -54
- package/src/commands/insertrowcommand.js +66 -66
- package/src/commands/inserttablecommand.d.ts +44 -44
- package/src/commands/inserttablecommand.js +69 -69
- package/src/commands/mergecellcommand.d.ts +68 -68
- package/src/commands/mergecellcommand.js +198 -198
- package/src/commands/mergecellscommand.d.ts +28 -28
- package/src/commands/mergecellscommand.js +94 -94
- package/src/commands/removecolumncommand.d.ts +29 -29
- package/src/commands/removecolumncommand.js +109 -109
- package/src/commands/removerowcommand.d.ts +29 -29
- package/src/commands/removerowcommand.js +82 -82
- package/src/commands/selectcolumncommand.d.ts +33 -33
- package/src/commands/selectcolumncommand.js +60 -60
- package/src/commands/selectrowcommand.d.ts +33 -33
- package/src/commands/selectrowcommand.js +56 -56
- package/src/commands/setheadercolumncommand.d.ts +50 -50
- package/src/commands/setheadercolumncommand.js +71 -71
- package/src/commands/setheaderrowcommand.d.ts +53 -53
- package/src/commands/setheaderrowcommand.js +79 -79
- package/src/commands/splitcellcommand.d.ts +43 -43
- package/src/commands/splitcellcommand.js +54 -54
- package/src/converters/downcast.d.ts +63 -63
- package/src/converters/downcast.js +146 -146
- package/src/converters/table-caption-post-fixer.d.ts +20 -20
- package/src/converters/table-caption-post-fixer.js +53 -53
- package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -32
- package/src/converters/table-cell-paragraph-post-fixer.js +107 -107
- package/src/converters/table-cell-refresh-handler.d.ts +18 -18
- package/src/converters/table-cell-refresh-handler.js +45 -45
- package/src/converters/table-headings-refresh-handler.d.ts +17 -17
- package/src/converters/table-headings-refresh-handler.js +49 -49
- package/src/converters/table-layout-post-fixer.d.ts +226 -226
- package/src/converters/table-layout-post-fixer.js +367 -367
- package/src/converters/tableproperties.d.ts +54 -54
- package/src/converters/tableproperties.js +159 -159
- package/src/converters/upcasttable.d.ts +49 -49
- package/src/converters/upcasttable.js +243 -243
- package/src/index.d.ts +60 -60
- package/src/index.js +30 -30
- package/src/plaintableoutput.d.ts +26 -26
- package/src/plaintableoutput.js +123 -123
- package/src/table.d.ts +40 -40
- package/src/table.js +44 -44
- package/src/tablecaption/tablecaptionediting.d.ts +63 -63
- package/src/tablecaption/tablecaptionediting.js +122 -122
- package/src/tablecaption/tablecaptionui.d.ts +21 -21
- package/src/tablecaption/tablecaptionui.js +57 -57
- package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -68
- package/src/tablecaption/toggletablecaptioncommand.js +105 -104
- package/src/tablecaption/utils.d.ts +38 -42
- package/src/tablecaption/utils.js +57 -67
- package/src/tablecaption.d.ts +24 -24
- package/src/tablecaption.js +28 -28
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -32
- package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +30 -30
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -37
- package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +44 -44
- package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -37
- package/src/tablecellproperties/commands/tablecellborderstylecommand.js +44 -44
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -51
- package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +64 -64
- package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -46
- package/src/tablecellproperties/commands/tablecellheightcommand.js +51 -51
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -32
- package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +30 -30
- package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -51
- package/src/tablecellproperties/commands/tablecellpaddingcommand.js +64 -64
- package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -62
- package/src/tablecellproperties/commands/tablecellpropertycommand.js +92 -92
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -40
- package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +38 -38
- package/src/tablecellproperties/tablecellpropertiesediting.d.ts +43 -43
- package/src/tablecellproperties/tablecellpropertiesediting.js +241 -241
- package/src/tablecellproperties/tablecellpropertiesui.d.ts +112 -112
- package/src/tablecellproperties/tablecellpropertiesui.js +330 -330
- package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +228 -228
- package/src/tablecellproperties/ui/tablecellpropertiesview.js +548 -548
- package/src/tablecellproperties.d.ts +30 -30
- package/src/tablecellproperties.js +34 -34
- package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -46
- package/src/tablecellwidth/commands/tablecellwidthcommand.js +51 -51
- package/src/tablecellwidth/tablecellwidthediting.d.ts +29 -29
- package/src/tablecellwidth/tablecellwidthediting.js +45 -45
- package/src/tableclipboard.d.ts +65 -65
- package/src/tableclipboard.js +450 -450
- package/src/tablecolumnresize/constants.d.ts +20 -20
- package/src/tablecolumnresize/constants.js +20 -20
- package/src/tablecolumnresize/converters.d.ts +18 -18
- package/src/tablecolumnresize/converters.js +46 -46
- package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +139 -139
- package/src/tablecolumnresize/tablecolumnresizeediting.js +583 -583
- package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -38
- package/src/tablecolumnresize/tablewidthscommand.js +61 -61
- package/src/tablecolumnresize/utils.d.ts +148 -148
- package/src/tablecolumnresize/utils.js +358 -358
- package/src/tablecolumnresize.d.ts +26 -26
- package/src/tablecolumnresize.js +30 -30
- package/src/tableconfig.d.ts +343 -343
- package/src/tableconfig.js +5 -5
- package/src/tableediting.d.ts +98 -98
- package/src/tableediting.js +191 -191
- package/src/tablekeyboard.d.ts +68 -68
- package/src/tablekeyboard.js +279 -279
- package/src/tablemouse/mouseeventsobserver.d.ts +62 -62
- package/src/tablemouse/mouseeventsobserver.js +35 -35
- package/src/tablemouse.d.ts +48 -48
- package/src/tablemouse.js +172 -172
- package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -32
- package/src/tableproperties/commands/tablealignmentcommand.js +30 -30
- package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -32
- package/src/tableproperties/commands/tablebackgroundcolorcommand.js +30 -30
- package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -37
- package/src/tableproperties/commands/tablebordercolorcommand.js +44 -44
- package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -37
- package/src/tableproperties/commands/tableborderstylecommand.js +44 -44
- package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -51
- package/src/tableproperties/commands/tableborderwidthcommand.js +64 -64
- package/src/tableproperties/commands/tableheightcommand.d.ts +46 -46
- package/src/tableproperties/commands/tableheightcommand.js +54 -54
- package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -61
- package/src/tableproperties/commands/tablepropertycommand.js +81 -80
- package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -46
- package/src/tableproperties/commands/tablewidthcommand.js +54 -54
- package/src/tableproperties/tablepropertiesediting.d.ts +40 -40
- package/src/tableproperties/tablepropertiesediting.js +206 -206
- package/src/tableproperties/tablepropertiesui.d.ts +114 -114
- package/src/tableproperties/tablepropertiesui.js +321 -321
- package/src/tableproperties/ui/tablepropertiesview.d.ts +207 -207
- package/src/tableproperties/ui/tablepropertiesview.js +466 -466
- package/src/tableproperties.d.ts +30 -30
- package/src/tableproperties.js +34 -34
- package/src/tableselection.d.ts +107 -107
- package/src/tableselection.js +297 -297
- package/src/tabletoolbar.d.ts +32 -32
- package/src/tabletoolbar.js +57 -57
- package/src/tableui.d.ts +53 -53
- package/src/tableui.js +309 -309
- package/src/tableutils.d.ts +448 -448
- package/src/tableutils.js +1055 -1055
- package/src/tablewalker.d.ts +362 -362
- package/src/tablewalker.js +393 -393
- package/src/ui/colorinputview.d.ts +140 -140
- package/src/ui/colorinputview.js +271 -271
- package/src/ui/formrowview.d.ts +61 -61
- package/src/ui/formrowview.js +57 -57
- package/src/ui/inserttableview.d.ts +77 -77
- package/src/ui/inserttableview.js +169 -169
- package/src/utils/common.d.ts +46 -42
- package/src/utils/common.js +68 -57
- package/src/utils/structure.d.ts +245 -245
- package/src/utils/structure.js +426 -426
- package/src/utils/table-properties.d.ts +67 -67
- package/src/utils/table-properties.js +86 -86
- package/src/utils/ui/contextualballoon.d.ts +34 -34
- package/src/utils/ui/contextualballoon.js +110 -106
- package/src/utils/ui/table-properties.d.ts +195 -195
- package/src/utils/ui/table-properties.js +362 -362
- package/src/utils/ui/widget.d.ts +20 -16
- package/src/utils/ui/widget.js +48 -38
- package/build/table.js.map +0 -1
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* @module table/tableproperties/tablepropertiesediting
|
|
7
|
-
*/
|
|
8
|
-
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine';
|
|
10
|
-
import TableEditing from '../tableediting';
|
|
11
|
-
import { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties';
|
|
12
|
-
import TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand';
|
|
13
|
-
import TableBorderColorCommand from './commands/tablebordercolorcommand';
|
|
14
|
-
import TableBorderStyleCommand from './commands/tableborderstylecommand';
|
|
15
|
-
import TableBorderWidthCommand from './commands/tableborderwidthcommand';
|
|
16
|
-
import TableWidthCommand from './commands/tablewidthcommand';
|
|
17
|
-
import TableHeightCommand from './commands/tableheightcommand';
|
|
18
|
-
import TableAlignmentCommand from './commands/tablealignmentcommand';
|
|
19
|
-
import { getNormalizedDefaultProperties } from '../utils/table-properties';
|
|
20
|
-
const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
|
|
21
|
-
const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
|
|
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 default class TablePropertiesEditing extends Plugin {
|
|
40
|
-
/**
|
|
41
|
-
* @inheritDoc
|
|
42
|
-
*/
|
|
43
|
-
static get pluginName() {
|
|
44
|
-
return 'TablePropertiesEditing';
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @inheritDoc
|
|
48
|
-
*/
|
|
49
|
-
static get requires() {
|
|
50
|
-
return [TableEditing];
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @inheritDoc
|
|
54
|
-
*/
|
|
55
|
-
init() {
|
|
56
|
-
const editor = this.editor;
|
|
57
|
-
const schema = editor.model.schema;
|
|
58
|
-
const conversion = editor.conversion;
|
|
59
|
-
editor.config.define('table.tableProperties.defaultProperties', {});
|
|
60
|
-
const defaultTableProperties = getNormalizedDefaultProperties(editor.config.get('table.tableProperties.defaultProperties'), {
|
|
61
|
-
includeAlignmentProperty: true
|
|
62
|
-
});
|
|
63
|
-
editor.data.addStyleProcessorRules(addBorderRules);
|
|
64
|
-
enableBorderProperties(schema, conversion, {
|
|
65
|
-
color: defaultTableProperties.borderColor,
|
|
66
|
-
style: defaultTableProperties.borderStyle,
|
|
67
|
-
width: defaultTableProperties.borderWidth
|
|
68
|
-
});
|
|
69
|
-
editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
|
|
70
|
-
editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
|
|
71
|
-
editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
|
|
72
|
-
enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
|
|
73
|
-
editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
|
|
74
|
-
enableTableToFigureProperty(schema, conversion, {
|
|
75
|
-
modelAttribute: 'tableWidth',
|
|
76
|
-
styleName: 'width',
|
|
77
|
-
defaultValue: defaultTableProperties.width
|
|
78
|
-
});
|
|
79
|
-
editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
|
|
80
|
-
enableTableToFigureProperty(schema, conversion, {
|
|
81
|
-
modelAttribute: 'tableHeight',
|
|
82
|
-
styleName: 'height',
|
|
83
|
-
defaultValue: defaultTableProperties.height
|
|
84
|
-
});
|
|
85
|
-
editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
|
|
86
|
-
editor.data.addStyleProcessorRules(addBackgroundRules);
|
|
87
|
-
enableProperty(schema, conversion, {
|
|
88
|
-
modelAttribute: 'tableBackgroundColor',
|
|
89
|
-
styleName: 'background-color',
|
|
90
|
-
defaultValue: defaultTableProperties.backgroundColor
|
|
91
|
-
});
|
|
92
|
-
editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
|
|
97
|
-
*
|
|
98
|
-
* @param defaultBorder The default border values.
|
|
99
|
-
* @param defaultBorder.color The default `tableBorderColor` value.
|
|
100
|
-
* @param defaultBorder.style The default `tableBorderStyle` value.
|
|
101
|
-
* @param defaultBorder.width The default `tableBorderWidth` value.
|
|
102
|
-
*/
|
|
103
|
-
function enableBorderProperties(schema, conversion, defaultBorder) {
|
|
104
|
-
const modelAttributes = {
|
|
105
|
-
width: 'tableBorderWidth',
|
|
106
|
-
color: 'tableBorderColor',
|
|
107
|
-
style: 'tableBorderStyle'
|
|
108
|
-
};
|
|
109
|
-
schema.extend('table', {
|
|
110
|
-
allowAttributes: Object.values(modelAttributes)
|
|
111
|
-
});
|
|
112
|
-
upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);
|
|
113
|
-
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
|
|
114
|
-
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
|
|
115
|
-
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Enables the `'alignment'` attribute for table.
|
|
119
|
-
*
|
|
120
|
-
* @param defaultValue The default alignment value.
|
|
121
|
-
*/
|
|
122
|
-
function enableAlignmentProperty(schema, conversion, defaultValue) {
|
|
123
|
-
schema.extend('table', {
|
|
124
|
-
allowAttributes: ['tableAlignment']
|
|
125
|
-
});
|
|
126
|
-
conversion.for('downcast')
|
|
127
|
-
.attributeToAttribute({
|
|
128
|
-
model: {
|
|
129
|
-
name: 'table',
|
|
130
|
-
key: 'tableAlignment'
|
|
131
|
-
},
|
|
132
|
-
view: alignment => ({
|
|
133
|
-
key: 'style',
|
|
134
|
-
value: {
|
|
135
|
-
// Model: `alignment:center` => CSS: `float:none`.
|
|
136
|
-
float: alignment === 'center' ? 'none' : alignment
|
|
137
|
-
}
|
|
138
|
-
}),
|
|
139
|
-
converterPriority: 'high'
|
|
140
|
-
});
|
|
141
|
-
conversion.for('upcast')
|
|
142
|
-
// Support for the `float:*;` CSS definition for the table alignment.
|
|
143
|
-
.attributeToAttribute({
|
|
144
|
-
view: {
|
|
145
|
-
name: /^(table|figure)$/,
|
|
146
|
-
styles: {
|
|
147
|
-
float: FLOAT_VALUES_REG_EXP
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
model: {
|
|
151
|
-
key: 'tableAlignment',
|
|
152
|
-
value: (viewElement) => {
|
|
153
|
-
let align = viewElement.getStyle('float');
|
|
154
|
-
// CSS: `float:none` => Model: `alignment:center`.
|
|
155
|
-
if (align === 'none') {
|
|
156
|
-
align = 'center';
|
|
157
|
-
}
|
|
158
|
-
return align === defaultValue ? null : align;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
})
|
|
162
|
-
// Support for the `align` attribute as the backward compatibility while pasting from other sources.
|
|
163
|
-
.attributeToAttribute({
|
|
164
|
-
view: {
|
|
165
|
-
attributes: {
|
|
166
|
-
align: ALIGN_VALUES_REG_EXP
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
model: {
|
|
170
|
-
name: 'table',
|
|
171
|
-
key: 'tableAlignment',
|
|
172
|
-
value: (viewElement) => {
|
|
173
|
-
const align = viewElement.getAttribute('align');
|
|
174
|
-
return align === defaultValue ? null : align;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Enables conversion for an attribute for simple view-model mappings.
|
|
181
|
-
*
|
|
182
|
-
* @param options.defaultValue The default value for the specified `modelAttribute`.
|
|
183
|
-
*/
|
|
184
|
-
function enableProperty(schema, conversion, options) {
|
|
185
|
-
const { modelAttribute } = options;
|
|
186
|
-
schema.extend('table', {
|
|
187
|
-
allowAttributes: [modelAttribute]
|
|
188
|
-
});
|
|
189
|
-
upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
|
|
190
|
-
downcastTableAttribute(conversion, options);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Enables conversion for an attribute for simple view (figure) to model (table) mappings.
|
|
194
|
-
*/
|
|
195
|
-
function enableTableToFigureProperty(schema, conversion, options) {
|
|
196
|
-
const { modelAttribute } = options;
|
|
197
|
-
schema.extend('table', {
|
|
198
|
-
allowAttributes: [modelAttribute]
|
|
199
|
-
});
|
|
200
|
-
upcastStyleToAttribute(conversion, {
|
|
201
|
-
viewElement: /^(table|figure)$/,
|
|
202
|
-
shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),
|
|
203
|
-
...options
|
|
204
|
-
});
|
|
205
|
-
downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
|
|
206
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tableproperties/tablepropertiesediting
|
|
7
|
+
*/
|
|
8
|
+
import { Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import { addBackgroundRules, addBorderRules } from 'ckeditor5/src/engine';
|
|
10
|
+
import TableEditing from '../tableediting';
|
|
11
|
+
import { downcastAttributeToStyle, downcastTableAttribute, upcastBorderStyles, upcastStyleToAttribute } from '../converters/tableproperties';
|
|
12
|
+
import TableBackgroundColorCommand from './commands/tablebackgroundcolorcommand';
|
|
13
|
+
import TableBorderColorCommand from './commands/tablebordercolorcommand';
|
|
14
|
+
import TableBorderStyleCommand from './commands/tableborderstylecommand';
|
|
15
|
+
import TableBorderWidthCommand from './commands/tableborderwidthcommand';
|
|
16
|
+
import TableWidthCommand from './commands/tablewidthcommand';
|
|
17
|
+
import TableHeightCommand from './commands/tableheightcommand';
|
|
18
|
+
import TableAlignmentCommand from './commands/tablealignmentcommand';
|
|
19
|
+
import { getNormalizedDefaultProperties } from '../utils/table-properties';
|
|
20
|
+
const ALIGN_VALUES_REG_EXP = /^(left|center|right)$/;
|
|
21
|
+
const FLOAT_VALUES_REG_EXP = /^(left|none|right)$/;
|
|
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 default class TablePropertiesEditing extends Plugin {
|
|
40
|
+
/**
|
|
41
|
+
* @inheritDoc
|
|
42
|
+
*/
|
|
43
|
+
static get pluginName() {
|
|
44
|
+
return 'TablePropertiesEditing';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @inheritDoc
|
|
48
|
+
*/
|
|
49
|
+
static get requires() {
|
|
50
|
+
return [TableEditing];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @inheritDoc
|
|
54
|
+
*/
|
|
55
|
+
init() {
|
|
56
|
+
const editor = this.editor;
|
|
57
|
+
const schema = editor.model.schema;
|
|
58
|
+
const conversion = editor.conversion;
|
|
59
|
+
editor.config.define('table.tableProperties.defaultProperties', {});
|
|
60
|
+
const defaultTableProperties = getNormalizedDefaultProperties(editor.config.get('table.tableProperties.defaultProperties'), {
|
|
61
|
+
includeAlignmentProperty: true
|
|
62
|
+
});
|
|
63
|
+
editor.data.addStyleProcessorRules(addBorderRules);
|
|
64
|
+
enableBorderProperties(schema, conversion, {
|
|
65
|
+
color: defaultTableProperties.borderColor,
|
|
66
|
+
style: defaultTableProperties.borderStyle,
|
|
67
|
+
width: defaultTableProperties.borderWidth
|
|
68
|
+
});
|
|
69
|
+
editor.commands.add('tableBorderColor', new TableBorderColorCommand(editor, defaultTableProperties.borderColor));
|
|
70
|
+
editor.commands.add('tableBorderStyle', new TableBorderStyleCommand(editor, defaultTableProperties.borderStyle));
|
|
71
|
+
editor.commands.add('tableBorderWidth', new TableBorderWidthCommand(editor, defaultTableProperties.borderWidth));
|
|
72
|
+
enableAlignmentProperty(schema, conversion, defaultTableProperties.alignment);
|
|
73
|
+
editor.commands.add('tableAlignment', new TableAlignmentCommand(editor, defaultTableProperties.alignment));
|
|
74
|
+
enableTableToFigureProperty(schema, conversion, {
|
|
75
|
+
modelAttribute: 'tableWidth',
|
|
76
|
+
styleName: 'width',
|
|
77
|
+
defaultValue: defaultTableProperties.width
|
|
78
|
+
});
|
|
79
|
+
editor.commands.add('tableWidth', new TableWidthCommand(editor, defaultTableProperties.width));
|
|
80
|
+
enableTableToFigureProperty(schema, conversion, {
|
|
81
|
+
modelAttribute: 'tableHeight',
|
|
82
|
+
styleName: 'height',
|
|
83
|
+
defaultValue: defaultTableProperties.height
|
|
84
|
+
});
|
|
85
|
+
editor.commands.add('tableHeight', new TableHeightCommand(editor, defaultTableProperties.height));
|
|
86
|
+
editor.data.addStyleProcessorRules(addBackgroundRules);
|
|
87
|
+
enableProperty(schema, conversion, {
|
|
88
|
+
modelAttribute: 'tableBackgroundColor',
|
|
89
|
+
styleName: 'background-color',
|
|
90
|
+
defaultValue: defaultTableProperties.backgroundColor
|
|
91
|
+
});
|
|
92
|
+
editor.commands.add('tableBackgroundColor', new TableBackgroundColorCommand(editor, defaultTableProperties.backgroundColor));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Enables `tableBorderStyle'`, `tableBorderColor'` and `tableBorderWidth'` attributes for table.
|
|
97
|
+
*
|
|
98
|
+
* @param defaultBorder The default border values.
|
|
99
|
+
* @param defaultBorder.color The default `tableBorderColor` value.
|
|
100
|
+
* @param defaultBorder.style The default `tableBorderStyle` value.
|
|
101
|
+
* @param defaultBorder.width The default `tableBorderWidth` value.
|
|
102
|
+
*/
|
|
103
|
+
function enableBorderProperties(schema, conversion, defaultBorder) {
|
|
104
|
+
const modelAttributes = {
|
|
105
|
+
width: 'tableBorderWidth',
|
|
106
|
+
color: 'tableBorderColor',
|
|
107
|
+
style: 'tableBorderStyle'
|
|
108
|
+
};
|
|
109
|
+
schema.extend('table', {
|
|
110
|
+
allowAttributes: Object.values(modelAttributes)
|
|
111
|
+
});
|
|
112
|
+
upcastBorderStyles(conversion, 'table', modelAttributes, defaultBorder);
|
|
113
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.color, styleName: 'border-color' });
|
|
114
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.style, styleName: 'border-style' });
|
|
115
|
+
downcastTableAttribute(conversion, { modelAttribute: modelAttributes.width, styleName: 'border-width' });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Enables the `'alignment'` attribute for table.
|
|
119
|
+
*
|
|
120
|
+
* @param defaultValue The default alignment value.
|
|
121
|
+
*/
|
|
122
|
+
function enableAlignmentProperty(schema, conversion, defaultValue) {
|
|
123
|
+
schema.extend('table', {
|
|
124
|
+
allowAttributes: ['tableAlignment']
|
|
125
|
+
});
|
|
126
|
+
conversion.for('downcast')
|
|
127
|
+
.attributeToAttribute({
|
|
128
|
+
model: {
|
|
129
|
+
name: 'table',
|
|
130
|
+
key: 'tableAlignment'
|
|
131
|
+
},
|
|
132
|
+
view: alignment => ({
|
|
133
|
+
key: 'style',
|
|
134
|
+
value: {
|
|
135
|
+
// Model: `alignment:center` => CSS: `float:none`.
|
|
136
|
+
float: alignment === 'center' ? 'none' : alignment
|
|
137
|
+
}
|
|
138
|
+
}),
|
|
139
|
+
converterPriority: 'high'
|
|
140
|
+
});
|
|
141
|
+
conversion.for('upcast')
|
|
142
|
+
// Support for the `float:*;` CSS definition for the table alignment.
|
|
143
|
+
.attributeToAttribute({
|
|
144
|
+
view: {
|
|
145
|
+
name: /^(table|figure)$/,
|
|
146
|
+
styles: {
|
|
147
|
+
float: FLOAT_VALUES_REG_EXP
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
model: {
|
|
151
|
+
key: 'tableAlignment',
|
|
152
|
+
value: (viewElement) => {
|
|
153
|
+
let align = viewElement.getStyle('float');
|
|
154
|
+
// CSS: `float:none` => Model: `alignment:center`.
|
|
155
|
+
if (align === 'none') {
|
|
156
|
+
align = 'center';
|
|
157
|
+
}
|
|
158
|
+
return align === defaultValue ? null : align;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
// Support for the `align` attribute as the backward compatibility while pasting from other sources.
|
|
163
|
+
.attributeToAttribute({
|
|
164
|
+
view: {
|
|
165
|
+
attributes: {
|
|
166
|
+
align: ALIGN_VALUES_REG_EXP
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
model: {
|
|
170
|
+
name: 'table',
|
|
171
|
+
key: 'tableAlignment',
|
|
172
|
+
value: (viewElement) => {
|
|
173
|
+
const align = viewElement.getAttribute('align');
|
|
174
|
+
return align === defaultValue ? null : align;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Enables conversion for an attribute for simple view-model mappings.
|
|
181
|
+
*
|
|
182
|
+
* @param options.defaultValue The default value for the specified `modelAttribute`.
|
|
183
|
+
*/
|
|
184
|
+
function enableProperty(schema, conversion, options) {
|
|
185
|
+
const { modelAttribute } = options;
|
|
186
|
+
schema.extend('table', {
|
|
187
|
+
allowAttributes: [modelAttribute]
|
|
188
|
+
});
|
|
189
|
+
upcastStyleToAttribute(conversion, { viewElement: 'table', ...options });
|
|
190
|
+
downcastTableAttribute(conversion, options);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Enables conversion for an attribute for simple view (figure) to model (table) mappings.
|
|
194
|
+
*/
|
|
195
|
+
function enableTableToFigureProperty(schema, conversion, options) {
|
|
196
|
+
const { modelAttribute } = options;
|
|
197
|
+
schema.extend('table', {
|
|
198
|
+
allowAttributes: [modelAttribute]
|
|
199
|
+
});
|
|
200
|
+
upcastStyleToAttribute(conversion, {
|
|
201
|
+
viewElement: /^(table|figure)$/,
|
|
202
|
+
shouldUpcast: (element) => !(element.name == 'table' && element.parent.name == 'figure'),
|
|
203
|
+
...options
|
|
204
|
+
});
|
|
205
|
+
downcastAttributeToStyle(conversion, { modelElement: 'table', ...options });
|
|
206
|
+
}
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
-
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* @module table/tableproperties/tablepropertiesui
|
|
7
|
-
*/
|
|
8
|
-
import { type Editor, Plugin } from 'ckeditor5/src/core';
|
|
9
|
-
import { ContextualBalloon } from 'ckeditor5/src/ui';
|
|
10
|
-
import TablePropertiesView from './ui/tablepropertiesview';
|
|
11
|
-
/**
|
|
12
|
-
* The table properties UI plugin. It introduces the `'tableProperties'` button
|
|
13
|
-
* that opens a form allowing to specify visual styling of an entire table.
|
|
14
|
-
*
|
|
15
|
-
* It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
|
|
16
|
-
*/
|
|
17
|
-
export default class TablePropertiesUI extends Plugin {
|
|
18
|
-
/**
|
|
19
|
-
* The default table properties.
|
|
20
|
-
*/
|
|
21
|
-
private _defaultTableProperties;
|
|
22
|
-
/**
|
|
23
|
-
* The contextual balloon plugin instance.
|
|
24
|
-
*/
|
|
25
|
-
private _balloon;
|
|
26
|
-
/**
|
|
27
|
-
* The properties form view displayed inside the balloon.
|
|
28
|
-
*/
|
|
29
|
-
view: TablePropertiesView | null;
|
|
30
|
-
/**
|
|
31
|
-
* The batch used to undo all changes made by the form (which are live, as the user types)
|
|
32
|
-
* when "Cancel" was pressed. Each time the view is shown, a new batch is created.
|
|
33
|
-
*/
|
|
34
|
-
private _undoStepBatch?;
|
|
35
|
-
/**
|
|
36
|
-
* Flag used to indicate whether view is ready to execute update commands
|
|
37
|
-
* (it finished loading initial data).
|
|
38
|
-
*/
|
|
39
|
-
private _isReady?;
|
|
40
|
-
/**
|
|
41
|
-
* @inheritDoc
|
|
42
|
-
*/
|
|
43
|
-
static get requires(): readonly [typeof ContextualBalloon];
|
|
44
|
-
/**
|
|
45
|
-
* @inheritDoc
|
|
46
|
-
*/
|
|
47
|
-
static get pluginName(): "TablePropertiesUI";
|
|
48
|
-
/**
|
|
49
|
-
* @inheritDoc
|
|
50
|
-
*/
|
|
51
|
-
constructor(editor: Editor);
|
|
52
|
-
/**
|
|
53
|
-
* @inheritDoc
|
|
54
|
-
*/
|
|
55
|
-
init(): void;
|
|
56
|
-
/**
|
|
57
|
-
* @inheritDoc
|
|
58
|
-
*/
|
|
59
|
-
destroy(): void;
|
|
60
|
-
/**
|
|
61
|
-
* Creates the {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView} instance.
|
|
62
|
-
*
|
|
63
|
-
* @returns The table properties form view instance.
|
|
64
|
-
*/
|
|
65
|
-
private _createPropertiesView;
|
|
66
|
-
/**
|
|
67
|
-
* In this method the "editor data -> UI" binding is happening.
|
|
68
|
-
*
|
|
69
|
-
* When executed, this method obtains selected table property values from various table commands
|
|
70
|
-
* and passes them to the {@link #view}.
|
|
71
|
-
*
|
|
72
|
-
* This way, the UI stays up–to–date with the editor data.
|
|
73
|
-
*/
|
|
74
|
-
private _fillViewFormFromCommandValues;
|
|
75
|
-
/**
|
|
76
|
-
* Shows the {@link #view} in the {@link #_balloon}.
|
|
77
|
-
*
|
|
78
|
-
* **Note**: Each time a view is shown, the new {@link #_undoStepBatch} is created that contains
|
|
79
|
-
* all changes made to the document when the view is visible, allowing a single undo step
|
|
80
|
-
* for all of them.
|
|
81
|
-
*/
|
|
82
|
-
protected _showView(): void;
|
|
83
|
-
/**
|
|
84
|
-
* Removes the {@link #view} from the {@link #_balloon}.
|
|
85
|
-
*/
|
|
86
|
-
protected _hideView(): void;
|
|
87
|
-
/**
|
|
88
|
-
* Repositions the {@link #_balloon} or hides the {@link #view} if a table is no longer selected.
|
|
89
|
-
*/
|
|
90
|
-
protected _updateView(): void;
|
|
91
|
-
/**
|
|
92
|
-
* Returns `true` when the {@link #view} is the visible in the {@link #_balloon}.
|
|
93
|
-
*/
|
|
94
|
-
private get _isViewVisible();
|
|
95
|
-
/**
|
|
96
|
-
* Returns `true` when the {@link #view} is in the {@link #_balloon}.
|
|
97
|
-
*/
|
|
98
|
-
private get _isViewInBalloon();
|
|
99
|
-
/**
|
|
100
|
-
* Creates a callback that when executed upon {@link #view view's} property change
|
|
101
|
-
* executes a related editor command with the new property value.
|
|
102
|
-
*
|
|
103
|
-
* If new value will be set to the default value, the command will not be executed.
|
|
104
|
-
*
|
|
105
|
-
* @param commandName The command that will be executed.
|
|
106
|
-
*/
|
|
107
|
-
private _getPropertyChangeCallback;
|
|
108
|
-
/**
|
|
109
|
-
* Creates a callback that when executed upon {@link #view view's} property change:
|
|
110
|
-
* * executes a related editor command with the new property value if the value is valid,
|
|
111
|
-
* * or sets the error text next to the invalid field, if the value did not pass the validation.
|
|
112
|
-
*/
|
|
113
|
-
private _getValidatedPropertyChangeCallback;
|
|
114
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @module table/tableproperties/tablepropertiesui
|
|
7
|
+
*/
|
|
8
|
+
import { type Editor, Plugin } from 'ckeditor5/src/core';
|
|
9
|
+
import { ContextualBalloon } from 'ckeditor5/src/ui';
|
|
10
|
+
import TablePropertiesView from './ui/tablepropertiesview';
|
|
11
|
+
/**
|
|
12
|
+
* The table properties UI plugin. It introduces the `'tableProperties'` button
|
|
13
|
+
* that opens a form allowing to specify visual styling of an entire table.
|
|
14
|
+
*
|
|
15
|
+
* It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
|
|
16
|
+
*/
|
|
17
|
+
export default class TablePropertiesUI extends Plugin {
|
|
18
|
+
/**
|
|
19
|
+
* The default table properties.
|
|
20
|
+
*/
|
|
21
|
+
private _defaultTableProperties;
|
|
22
|
+
/**
|
|
23
|
+
* The contextual balloon plugin instance.
|
|
24
|
+
*/
|
|
25
|
+
private _balloon;
|
|
26
|
+
/**
|
|
27
|
+
* The properties form view displayed inside the balloon.
|
|
28
|
+
*/
|
|
29
|
+
view: TablePropertiesView | null;
|
|
30
|
+
/**
|
|
31
|
+
* The batch used to undo all changes made by the form (which are live, as the user types)
|
|
32
|
+
* when "Cancel" was pressed. Each time the view is shown, a new batch is created.
|
|
33
|
+
*/
|
|
34
|
+
private _undoStepBatch?;
|
|
35
|
+
/**
|
|
36
|
+
* Flag used to indicate whether view is ready to execute update commands
|
|
37
|
+
* (it finished loading initial data).
|
|
38
|
+
*/
|
|
39
|
+
private _isReady?;
|
|
40
|
+
/**
|
|
41
|
+
* @inheritDoc
|
|
42
|
+
*/
|
|
43
|
+
static get requires(): readonly [typeof ContextualBalloon];
|
|
44
|
+
/**
|
|
45
|
+
* @inheritDoc
|
|
46
|
+
*/
|
|
47
|
+
static get pluginName(): "TablePropertiesUI";
|
|
48
|
+
/**
|
|
49
|
+
* @inheritDoc
|
|
50
|
+
*/
|
|
51
|
+
constructor(editor: Editor);
|
|
52
|
+
/**
|
|
53
|
+
* @inheritDoc
|
|
54
|
+
*/
|
|
55
|
+
init(): void;
|
|
56
|
+
/**
|
|
57
|
+
* @inheritDoc
|
|
58
|
+
*/
|
|
59
|
+
destroy(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Creates the {@link module:table/tableproperties/ui/tablepropertiesview~TablePropertiesView} instance.
|
|
62
|
+
*
|
|
63
|
+
* @returns The table properties form view instance.
|
|
64
|
+
*/
|
|
65
|
+
private _createPropertiesView;
|
|
66
|
+
/**
|
|
67
|
+
* In this method the "editor data -> UI" binding is happening.
|
|
68
|
+
*
|
|
69
|
+
* When executed, this method obtains selected table property values from various table commands
|
|
70
|
+
* and passes them to the {@link #view}.
|
|
71
|
+
*
|
|
72
|
+
* This way, the UI stays up–to–date with the editor data.
|
|
73
|
+
*/
|
|
74
|
+
private _fillViewFormFromCommandValues;
|
|
75
|
+
/**
|
|
76
|
+
* Shows the {@link #view} in the {@link #_balloon}.
|
|
77
|
+
*
|
|
78
|
+
* **Note**: Each time a view is shown, the new {@link #_undoStepBatch} is created that contains
|
|
79
|
+
* all changes made to the document when the view is visible, allowing a single undo step
|
|
80
|
+
* for all of them.
|
|
81
|
+
*/
|
|
82
|
+
protected _showView(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Removes the {@link #view} from the {@link #_balloon}.
|
|
85
|
+
*/
|
|
86
|
+
protected _hideView(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Repositions the {@link #_balloon} or hides the {@link #view} if a table is no longer selected.
|
|
89
|
+
*/
|
|
90
|
+
protected _updateView(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Returns `true` when the {@link #view} is the visible in the {@link #_balloon}.
|
|
93
|
+
*/
|
|
94
|
+
private get _isViewVisible();
|
|
95
|
+
/**
|
|
96
|
+
* Returns `true` when the {@link #view} is in the {@link #_balloon}.
|
|
97
|
+
*/
|
|
98
|
+
private get _isViewInBalloon();
|
|
99
|
+
/**
|
|
100
|
+
* Creates a callback that when executed upon {@link #view view's} property change
|
|
101
|
+
* executes a related editor command with the new property value.
|
|
102
|
+
*
|
|
103
|
+
* If new value will be set to the default value, the command will not be executed.
|
|
104
|
+
*
|
|
105
|
+
* @param commandName The command that will be executed.
|
|
106
|
+
*/
|
|
107
|
+
private _getPropertyChangeCallback;
|
|
108
|
+
/**
|
|
109
|
+
* Creates a callback that when executed upon {@link #view view's} property change:
|
|
110
|
+
* * executes a related editor command with the new property value if the value is valid,
|
|
111
|
+
* * or sets the error text next to the invalid field, if the value did not pass the validation.
|
|
112
|
+
*/
|
|
113
|
+
private _getValidatedPropertyChangeCallback;
|
|
114
|
+
}
|