@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
package/src/ui/formrowview.js
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
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/ui/formrowview
|
|
7
|
-
*/
|
|
8
|
-
import { View } from 'ckeditor5/src/ui';
|
|
9
|
-
import '../../theme/formrow.css';
|
|
10
|
-
/**
|
|
11
|
-
* The class representing a single row in a complex form,
|
|
12
|
-
* used by {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView}.
|
|
13
|
-
*
|
|
14
|
-
* **Note**: For now this class is private. When more use cases arrive (beyond ckeditor5-table),
|
|
15
|
-
* it will become a component in ckeditor5-ui.
|
|
16
|
-
*
|
|
17
|
-
* @internal
|
|
18
|
-
*/
|
|
19
|
-
export default class FormRowView extends View {
|
|
20
|
-
/**
|
|
21
|
-
* Creates an instance of the form row class.
|
|
22
|
-
*
|
|
23
|
-
* @param locale The locale instance.
|
|
24
|
-
* @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
|
|
25
|
-
* DOM attributes and gets described by the label.
|
|
26
|
-
*/
|
|
27
|
-
constructor(locale, options = {}) {
|
|
28
|
-
super(locale);
|
|
29
|
-
const bind = this.bindTemplate;
|
|
30
|
-
this.set('class', options.class || null);
|
|
31
|
-
this.children = this.createCollection();
|
|
32
|
-
if (options.children) {
|
|
33
|
-
options.children.forEach(child => this.children.add(child));
|
|
34
|
-
}
|
|
35
|
-
this.set('_role', null);
|
|
36
|
-
this.set('_ariaLabelledBy', null);
|
|
37
|
-
if (options.labelView) {
|
|
38
|
-
this.set({
|
|
39
|
-
_role: 'group',
|
|
40
|
-
_ariaLabelledBy: options.labelView.id
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
this.setTemplate({
|
|
44
|
-
tag: 'div',
|
|
45
|
-
attributes: {
|
|
46
|
-
class: [
|
|
47
|
-
'ck',
|
|
48
|
-
'ck-form__row',
|
|
49
|
-
bind.to('class')
|
|
50
|
-
],
|
|
51
|
-
role: bind.to('_role'),
|
|
52
|
-
'aria-labelledby': bind.to('_ariaLabelledBy')
|
|
53
|
-
},
|
|
54
|
-
children: this.children
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
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/ui/formrowview
|
|
7
|
+
*/
|
|
8
|
+
import { View } from 'ckeditor5/src/ui';
|
|
9
|
+
import '../../theme/formrow.css';
|
|
10
|
+
/**
|
|
11
|
+
* The class representing a single row in a complex form,
|
|
12
|
+
* used by {@link module:table/tablecellproperties/ui/tablecellpropertiesview~TableCellPropertiesView}.
|
|
13
|
+
*
|
|
14
|
+
* **Note**: For now this class is private. When more use cases arrive (beyond ckeditor5-table),
|
|
15
|
+
* it will become a component in ckeditor5-ui.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export default class FormRowView extends View {
|
|
20
|
+
/**
|
|
21
|
+
* Creates an instance of the form row class.
|
|
22
|
+
*
|
|
23
|
+
* @param locale The locale instance.
|
|
24
|
+
* @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
|
|
25
|
+
* DOM attributes and gets described by the label.
|
|
26
|
+
*/
|
|
27
|
+
constructor(locale, options = {}) {
|
|
28
|
+
super(locale);
|
|
29
|
+
const bind = this.bindTemplate;
|
|
30
|
+
this.set('class', options.class || null);
|
|
31
|
+
this.children = this.createCollection();
|
|
32
|
+
if (options.children) {
|
|
33
|
+
options.children.forEach(child => this.children.add(child));
|
|
34
|
+
}
|
|
35
|
+
this.set('_role', null);
|
|
36
|
+
this.set('_ariaLabelledBy', null);
|
|
37
|
+
if (options.labelView) {
|
|
38
|
+
this.set({
|
|
39
|
+
_role: 'group',
|
|
40
|
+
_ariaLabelledBy: options.labelView.id
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
this.setTemplate({
|
|
44
|
+
tag: 'div',
|
|
45
|
+
attributes: {
|
|
46
|
+
class: [
|
|
47
|
+
'ck',
|
|
48
|
+
'ck-form__row',
|
|
49
|
+
bind.to('class')
|
|
50
|
+
],
|
|
51
|
+
role: bind.to('_role'),
|
|
52
|
+
'aria-labelledby': bind.to('_ariaLabelledBy')
|
|
53
|
+
},
|
|
54
|
+
children: this.children
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,77 +1,77 @@
|
|
|
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/ui/inserttableview
|
|
7
|
-
*/
|
|
8
|
-
import { View, ButtonView, type ViewCollection } from 'ckeditor5/src/ui';
|
|
9
|
-
import { KeystrokeHandler, FocusTracker, type Locale } from 'ckeditor5/src/utils';
|
|
10
|
-
import './../../theme/inserttable.css';
|
|
11
|
-
/**
|
|
12
|
-
* The table size view.
|
|
13
|
-
*
|
|
14
|
-
* It renders a 10x10 grid to choose the inserted table size.
|
|
15
|
-
*/
|
|
16
|
-
export default class InsertTableView extends View {
|
|
17
|
-
/**
|
|
18
|
-
* A collection of table size box items.
|
|
19
|
-
*/
|
|
20
|
-
readonly items: ViewCollection<ButtonView>;
|
|
21
|
-
/**
|
|
22
|
-
* Listen to `keydown` events fired in this view's main element.
|
|
23
|
-
*/
|
|
24
|
-
readonly keystrokes: KeystrokeHandler;
|
|
25
|
-
/**
|
|
26
|
-
* Tracks information about the DOM focus in the grid.
|
|
27
|
-
*/
|
|
28
|
-
readonly focusTracker: FocusTracker;
|
|
29
|
-
/**
|
|
30
|
-
* The currently selected number of rows of the new table.
|
|
31
|
-
*
|
|
32
|
-
* @observable
|
|
33
|
-
*/
|
|
34
|
-
rows: number;
|
|
35
|
-
/**
|
|
36
|
-
* The currently selected number of columns of the new table.
|
|
37
|
-
*
|
|
38
|
-
* @observable
|
|
39
|
-
*/
|
|
40
|
-
columns: number;
|
|
41
|
-
/**
|
|
42
|
-
* The label text displayed under the boxes.
|
|
43
|
-
*
|
|
44
|
-
* @observable
|
|
45
|
-
*/
|
|
46
|
-
label: string;
|
|
47
|
-
/**
|
|
48
|
-
* @inheritDoc
|
|
49
|
-
*/
|
|
50
|
-
constructor(locale: Locale);
|
|
51
|
-
render(): void;
|
|
52
|
-
/**
|
|
53
|
-
* @inheritDoc
|
|
54
|
-
*/
|
|
55
|
-
focus(): void;
|
|
56
|
-
/**
|
|
57
|
-
* @inheritDoc
|
|
58
|
-
*/
|
|
59
|
-
focusLast(): void;
|
|
60
|
-
/**
|
|
61
|
-
* Highlights grid boxes depending on rows and columns selected.
|
|
62
|
-
*/
|
|
63
|
-
private _highlightGridBoxes;
|
|
64
|
-
/**
|
|
65
|
-
* Creates a new Button for the grid.
|
|
66
|
-
*
|
|
67
|
-
* @param locale The locale instance.
|
|
68
|
-
* @param row Row number.
|
|
69
|
-
* @param column Column number.
|
|
70
|
-
* @param label The grid button label.
|
|
71
|
-
*/
|
|
72
|
-
private _createGridButton;
|
|
73
|
-
/**
|
|
74
|
-
* @returns A view collection containing boxes to be placed in a table grid.
|
|
75
|
-
*/
|
|
76
|
-
private _createGridCollection;
|
|
77
|
-
}
|
|
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/ui/inserttableview
|
|
7
|
+
*/
|
|
8
|
+
import { View, ButtonView, type ViewCollection } from 'ckeditor5/src/ui';
|
|
9
|
+
import { KeystrokeHandler, FocusTracker, type Locale } from 'ckeditor5/src/utils';
|
|
10
|
+
import './../../theme/inserttable.css';
|
|
11
|
+
/**
|
|
12
|
+
* The table size view.
|
|
13
|
+
*
|
|
14
|
+
* It renders a 10x10 grid to choose the inserted table size.
|
|
15
|
+
*/
|
|
16
|
+
export default class InsertTableView extends View {
|
|
17
|
+
/**
|
|
18
|
+
* A collection of table size box items.
|
|
19
|
+
*/
|
|
20
|
+
readonly items: ViewCollection<ButtonView>;
|
|
21
|
+
/**
|
|
22
|
+
* Listen to `keydown` events fired in this view's main element.
|
|
23
|
+
*/
|
|
24
|
+
readonly keystrokes: KeystrokeHandler;
|
|
25
|
+
/**
|
|
26
|
+
* Tracks information about the DOM focus in the grid.
|
|
27
|
+
*/
|
|
28
|
+
readonly focusTracker: FocusTracker;
|
|
29
|
+
/**
|
|
30
|
+
* The currently selected number of rows of the new table.
|
|
31
|
+
*
|
|
32
|
+
* @observable
|
|
33
|
+
*/
|
|
34
|
+
rows: number;
|
|
35
|
+
/**
|
|
36
|
+
* The currently selected number of columns of the new table.
|
|
37
|
+
*
|
|
38
|
+
* @observable
|
|
39
|
+
*/
|
|
40
|
+
columns: number;
|
|
41
|
+
/**
|
|
42
|
+
* The label text displayed under the boxes.
|
|
43
|
+
*
|
|
44
|
+
* @observable
|
|
45
|
+
*/
|
|
46
|
+
label: string;
|
|
47
|
+
/**
|
|
48
|
+
* @inheritDoc
|
|
49
|
+
*/
|
|
50
|
+
constructor(locale: Locale);
|
|
51
|
+
render(): void;
|
|
52
|
+
/**
|
|
53
|
+
* @inheritDoc
|
|
54
|
+
*/
|
|
55
|
+
focus(): void;
|
|
56
|
+
/**
|
|
57
|
+
* @inheritDoc
|
|
58
|
+
*/
|
|
59
|
+
focusLast(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Highlights grid boxes depending on rows and columns selected.
|
|
62
|
+
*/
|
|
63
|
+
private _highlightGridBoxes;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a new Button for the grid.
|
|
66
|
+
*
|
|
67
|
+
* @param locale The locale instance.
|
|
68
|
+
* @param row Row number.
|
|
69
|
+
* @param column Column number.
|
|
70
|
+
* @param label The grid button label.
|
|
71
|
+
*/
|
|
72
|
+
private _createGridButton;
|
|
73
|
+
/**
|
|
74
|
+
* @returns A view collection containing boxes to be placed in a table grid.
|
|
75
|
+
*/
|
|
76
|
+
private _createGridCollection;
|
|
77
|
+
}
|
|
@@ -1,169 +1,169 @@
|
|
|
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/ui/inserttableview
|
|
7
|
-
*/
|
|
8
|
-
import { View, ButtonView, addKeyboardHandlingForGrid } from 'ckeditor5/src/ui';
|
|
9
|
-
import { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils';
|
|
10
|
-
import './../../theme/inserttable.css';
|
|
11
|
-
/**
|
|
12
|
-
* The table size view.
|
|
13
|
-
*
|
|
14
|
-
* It renders a 10x10 grid to choose the inserted table size.
|
|
15
|
-
*/
|
|
16
|
-
export default class InsertTableView extends View {
|
|
17
|
-
/**
|
|
18
|
-
* @inheritDoc
|
|
19
|
-
*/
|
|
20
|
-
constructor(locale) {
|
|
21
|
-
super(locale);
|
|
22
|
-
const bind = this.bindTemplate;
|
|
23
|
-
this.items = this._createGridCollection();
|
|
24
|
-
this.keystrokes = new KeystrokeHandler();
|
|
25
|
-
this.focusTracker = new FocusTracker();
|
|
26
|
-
this.set('rows', 0);
|
|
27
|
-
this.set('columns', 0);
|
|
28
|
-
this.bind('label').to(this, 'columns', this, 'rows', (columns, rows) => `${rows} × ${columns}`);
|
|
29
|
-
this.setTemplate({
|
|
30
|
-
tag: 'div',
|
|
31
|
-
attributes: {
|
|
32
|
-
class: ['ck']
|
|
33
|
-
},
|
|
34
|
-
children: [
|
|
35
|
-
{
|
|
36
|
-
tag: 'div',
|
|
37
|
-
attributes: {
|
|
38
|
-
class: ['ck-insert-table-dropdown__grid']
|
|
39
|
-
},
|
|
40
|
-
on: {
|
|
41
|
-
'mouseover@.ck-insert-table-dropdown-grid-box': bind.to('boxover')
|
|
42
|
-
},
|
|
43
|
-
children: this.items
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
tag: 'div',
|
|
47
|
-
attributes: {
|
|
48
|
-
class: [
|
|
49
|
-
'ck',
|
|
50
|
-
'ck-insert-table-dropdown__label'
|
|
51
|
-
],
|
|
52
|
-
'aria-hidden': true
|
|
53
|
-
},
|
|
54
|
-
children: [
|
|
55
|
-
{
|
|
56
|
-
text: bind.to('label')
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
],
|
|
61
|
-
on: {
|
|
62
|
-
mousedown: bind.to(evt => {
|
|
63
|
-
evt.preventDefault();
|
|
64
|
-
}),
|
|
65
|
-
click: bind.to(() => {
|
|
66
|
-
this.fire('execute');
|
|
67
|
-
})
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
// #rows and #columns are set via changes to #focusTracker on mouse over.
|
|
71
|
-
this.on('boxover', (evt, domEvt) => {
|
|
72
|
-
const { row, column } = domEvt.target.dataset;
|
|
73
|
-
this.items.get((parseInt(row, 10) - 1) * 10 + (parseInt(column, 10) - 1)).focus();
|
|
74
|
-
});
|
|
75
|
-
// This allows the #rows and #columns to be updated when:
|
|
76
|
-
// * the user navigates the grid using the keyboard,
|
|
77
|
-
// * the user moves the mouse over grid items.
|
|
78
|
-
this.focusTracker.on('change:focusedElement', (evt, name, focusedElement) => {
|
|
79
|
-
if (!focusedElement) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const { row, column } = focusedElement.dataset;
|
|
83
|
-
// As row & column indexes are zero-based transform it to number of selected rows & columns.
|
|
84
|
-
this.set({
|
|
85
|
-
rows: parseInt(row),
|
|
86
|
-
columns: parseInt(column)
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
this.on('change:columns', () => this._highlightGridBoxes());
|
|
90
|
-
this.on('change:rows', () => this._highlightGridBoxes());
|
|
91
|
-
}
|
|
92
|
-
render() {
|
|
93
|
-
super.render();
|
|
94
|
-
addKeyboardHandlingForGrid({
|
|
95
|
-
keystrokeHandler: this.keystrokes,
|
|
96
|
-
focusTracker: this.focusTracker,
|
|
97
|
-
gridItems: this.items,
|
|
98
|
-
numberOfColumns: 10,
|
|
99
|
-
uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
|
|
100
|
-
});
|
|
101
|
-
for (const item of this.items) {
|
|
102
|
-
this.focusTracker.add(item.element);
|
|
103
|
-
}
|
|
104
|
-
this.keystrokes.listenTo(this.element);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* @inheritDoc
|
|
108
|
-
*/
|
|
109
|
-
focus() {
|
|
110
|
-
this.items.get(0).focus();
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* @inheritDoc
|
|
114
|
-
*/
|
|
115
|
-
focusLast() {
|
|
116
|
-
this.items.get(0).focus();
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Highlights grid boxes depending on rows and columns selected.
|
|
120
|
-
*/
|
|
121
|
-
_highlightGridBoxes() {
|
|
122
|
-
const rows = this.rows;
|
|
123
|
-
const columns = this.columns;
|
|
124
|
-
this.items.map((boxView, index) => {
|
|
125
|
-
// Translate box index to the row & column index.
|
|
126
|
-
const itemRow = Math.floor(index / 10);
|
|
127
|
-
const itemColumn = index % 10;
|
|
128
|
-
// Grid box is highlighted when its row & column index belongs to selected number of rows & columns.
|
|
129
|
-
const isOn = itemRow < rows && itemColumn < columns;
|
|
130
|
-
boxView.set('isOn', isOn);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Creates a new Button for the grid.
|
|
135
|
-
*
|
|
136
|
-
* @param locale The locale instance.
|
|
137
|
-
* @param row Row number.
|
|
138
|
-
* @param column Column number.
|
|
139
|
-
* @param label The grid button label.
|
|
140
|
-
*/
|
|
141
|
-
_createGridButton(locale, row, column, label) {
|
|
142
|
-
const button = new ButtonView(locale);
|
|
143
|
-
button.set({
|
|
144
|
-
label,
|
|
145
|
-
class: 'ck-insert-table-dropdown-grid-box'
|
|
146
|
-
});
|
|
147
|
-
button.extendTemplate({
|
|
148
|
-
attributes: {
|
|
149
|
-
'data-row': row,
|
|
150
|
-
'data-column': column
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
return button;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* @returns A view collection containing boxes to be placed in a table grid.
|
|
157
|
-
*/
|
|
158
|
-
_createGridCollection() {
|
|
159
|
-
const boxes = [];
|
|
160
|
-
// Add grid boxes to table selection view.
|
|
161
|
-
for (let index = 0; index < 100; index++) {
|
|
162
|
-
const row = Math.floor(index / 10);
|
|
163
|
-
const column = index % 10;
|
|
164
|
-
const label = `${row + 1} × ${column + 1}`;
|
|
165
|
-
boxes.push(this._createGridButton(this.locale, row + 1, column + 1, label));
|
|
166
|
-
}
|
|
167
|
-
return this.createCollection(boxes);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
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/ui/inserttableview
|
|
7
|
+
*/
|
|
8
|
+
import { View, ButtonView, addKeyboardHandlingForGrid } from 'ckeditor5/src/ui';
|
|
9
|
+
import { KeystrokeHandler, FocusTracker } from 'ckeditor5/src/utils';
|
|
10
|
+
import './../../theme/inserttable.css';
|
|
11
|
+
/**
|
|
12
|
+
* The table size view.
|
|
13
|
+
*
|
|
14
|
+
* It renders a 10x10 grid to choose the inserted table size.
|
|
15
|
+
*/
|
|
16
|
+
export default class InsertTableView extends View {
|
|
17
|
+
/**
|
|
18
|
+
* @inheritDoc
|
|
19
|
+
*/
|
|
20
|
+
constructor(locale) {
|
|
21
|
+
super(locale);
|
|
22
|
+
const bind = this.bindTemplate;
|
|
23
|
+
this.items = this._createGridCollection();
|
|
24
|
+
this.keystrokes = new KeystrokeHandler();
|
|
25
|
+
this.focusTracker = new FocusTracker();
|
|
26
|
+
this.set('rows', 0);
|
|
27
|
+
this.set('columns', 0);
|
|
28
|
+
this.bind('label').to(this, 'columns', this, 'rows', (columns, rows) => `${rows} × ${columns}`);
|
|
29
|
+
this.setTemplate({
|
|
30
|
+
tag: 'div',
|
|
31
|
+
attributes: {
|
|
32
|
+
class: ['ck']
|
|
33
|
+
},
|
|
34
|
+
children: [
|
|
35
|
+
{
|
|
36
|
+
tag: 'div',
|
|
37
|
+
attributes: {
|
|
38
|
+
class: ['ck-insert-table-dropdown__grid']
|
|
39
|
+
},
|
|
40
|
+
on: {
|
|
41
|
+
'mouseover@.ck-insert-table-dropdown-grid-box': bind.to('boxover')
|
|
42
|
+
},
|
|
43
|
+
children: this.items
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
tag: 'div',
|
|
47
|
+
attributes: {
|
|
48
|
+
class: [
|
|
49
|
+
'ck',
|
|
50
|
+
'ck-insert-table-dropdown__label'
|
|
51
|
+
],
|
|
52
|
+
'aria-hidden': true
|
|
53
|
+
},
|
|
54
|
+
children: [
|
|
55
|
+
{
|
|
56
|
+
text: bind.to('label')
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
on: {
|
|
62
|
+
mousedown: bind.to(evt => {
|
|
63
|
+
evt.preventDefault();
|
|
64
|
+
}),
|
|
65
|
+
click: bind.to(() => {
|
|
66
|
+
this.fire('execute');
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// #rows and #columns are set via changes to #focusTracker on mouse over.
|
|
71
|
+
this.on('boxover', (evt, domEvt) => {
|
|
72
|
+
const { row, column } = domEvt.target.dataset;
|
|
73
|
+
this.items.get((parseInt(row, 10) - 1) * 10 + (parseInt(column, 10) - 1)).focus();
|
|
74
|
+
});
|
|
75
|
+
// This allows the #rows and #columns to be updated when:
|
|
76
|
+
// * the user navigates the grid using the keyboard,
|
|
77
|
+
// * the user moves the mouse over grid items.
|
|
78
|
+
this.focusTracker.on('change:focusedElement', (evt, name, focusedElement) => {
|
|
79
|
+
if (!focusedElement) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const { row, column } = focusedElement.dataset;
|
|
83
|
+
// As row & column indexes are zero-based transform it to number of selected rows & columns.
|
|
84
|
+
this.set({
|
|
85
|
+
rows: parseInt(row),
|
|
86
|
+
columns: parseInt(column)
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
this.on('change:columns', () => this._highlightGridBoxes());
|
|
90
|
+
this.on('change:rows', () => this._highlightGridBoxes());
|
|
91
|
+
}
|
|
92
|
+
render() {
|
|
93
|
+
super.render();
|
|
94
|
+
addKeyboardHandlingForGrid({
|
|
95
|
+
keystrokeHandler: this.keystrokes,
|
|
96
|
+
focusTracker: this.focusTracker,
|
|
97
|
+
gridItems: this.items,
|
|
98
|
+
numberOfColumns: 10,
|
|
99
|
+
uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
|
|
100
|
+
});
|
|
101
|
+
for (const item of this.items) {
|
|
102
|
+
this.focusTracker.add(item.element);
|
|
103
|
+
}
|
|
104
|
+
this.keystrokes.listenTo(this.element);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @inheritDoc
|
|
108
|
+
*/
|
|
109
|
+
focus() {
|
|
110
|
+
this.items.get(0).focus();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @inheritDoc
|
|
114
|
+
*/
|
|
115
|
+
focusLast() {
|
|
116
|
+
this.items.get(0).focus();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Highlights grid boxes depending on rows and columns selected.
|
|
120
|
+
*/
|
|
121
|
+
_highlightGridBoxes() {
|
|
122
|
+
const rows = this.rows;
|
|
123
|
+
const columns = this.columns;
|
|
124
|
+
this.items.map((boxView, index) => {
|
|
125
|
+
// Translate box index to the row & column index.
|
|
126
|
+
const itemRow = Math.floor(index / 10);
|
|
127
|
+
const itemColumn = index % 10;
|
|
128
|
+
// Grid box is highlighted when its row & column index belongs to selected number of rows & columns.
|
|
129
|
+
const isOn = itemRow < rows && itemColumn < columns;
|
|
130
|
+
boxView.set('isOn', isOn);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates a new Button for the grid.
|
|
135
|
+
*
|
|
136
|
+
* @param locale The locale instance.
|
|
137
|
+
* @param row Row number.
|
|
138
|
+
* @param column Column number.
|
|
139
|
+
* @param label The grid button label.
|
|
140
|
+
*/
|
|
141
|
+
_createGridButton(locale, row, column, label) {
|
|
142
|
+
const button = new ButtonView(locale);
|
|
143
|
+
button.set({
|
|
144
|
+
label,
|
|
145
|
+
class: 'ck-insert-table-dropdown-grid-box'
|
|
146
|
+
});
|
|
147
|
+
button.extendTemplate({
|
|
148
|
+
attributes: {
|
|
149
|
+
'data-row': row,
|
|
150
|
+
'data-column': column
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return button;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* @returns A view collection containing boxes to be placed in a table grid.
|
|
157
|
+
*/
|
|
158
|
+
_createGridCollection() {
|
|
159
|
+
const boxes = [];
|
|
160
|
+
// Add grid boxes to table selection view.
|
|
161
|
+
for (let index = 0; index < 100; index++) {
|
|
162
|
+
const row = Math.floor(index / 10);
|
|
163
|
+
const column = index % 10;
|
|
164
|
+
const label = `${row + 1} × ${column + 1}`;
|
|
165
|
+
boxes.push(this._createGridButton(this.locale, row + 1, column + 1, label));
|
|
166
|
+
}
|
|
167
|
+
return this.createCollection(boxes);
|
|
168
|
+
}
|
|
169
|
+
}
|