@ckeditor/ckeditor5-table 36.0.0 → 37.0.0-alpha.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.
Files changed (166) hide show
  1. package/build/table.js +1 -1
  2. package/package.json +34 -29
  3. package/src/commands/insertcolumncommand.d.ts +61 -0
  4. package/src/commands/insertcolumncommand.js +45 -60
  5. package/src/commands/insertrowcommand.d.ts +60 -0
  6. package/src/commands/insertrowcommand.js +44 -59
  7. package/src/commands/inserttablecommand.d.ts +50 -0
  8. package/src/commands/inserttablecommand.js +51 -68
  9. package/src/commands/mergecellcommand.d.ts +76 -0
  10. package/src/commands/mergecellcommand.js +169 -244
  11. package/src/commands/mergecellscommand.d.ts +33 -0
  12. package/src/commands/mergecellscommand.js +72 -101
  13. package/src/commands/removecolumncommand.d.ts +34 -0
  14. package/src/commands/removecolumncommand.js +88 -102
  15. package/src/commands/removerowcommand.d.ts +34 -0
  16. package/src/commands/removerowcommand.js +63 -80
  17. package/src/commands/selectcolumncommand.d.ts +38 -0
  18. package/src/commands/selectcolumncommand.js +41 -54
  19. package/src/commands/selectrowcommand.d.ts +38 -0
  20. package/src/commands/selectrowcommand.js +38 -48
  21. package/src/commands/setheadercolumncommand.d.ts +55 -0
  22. package/src/commands/setheadercolumncommand.js +48 -73
  23. package/src/commands/setheaderrowcommand.d.ts +58 -0
  24. package/src/commands/setheaderrowcommand.js +56 -85
  25. package/src/commands/splitcellcommand.d.ts +49 -0
  26. package/src/commands/splitcellcommand.js +35 -49
  27. package/src/converters/downcast.d.ts +63 -0
  28. package/src/converters/downcast.js +98 -130
  29. package/src/converters/table-caption-post-fixer.d.ts +20 -0
  30. package/src/converters/table-caption-post-fixer.js +36 -52
  31. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -0
  32. package/src/converters/table-cell-paragraph-post-fixer.js +88 -119
  33. package/src/converters/table-cell-refresh-handler.d.ts +18 -0
  34. package/src/converters/table-cell-refresh-handler.js +29 -48
  35. package/src/converters/table-headings-refresh-handler.d.ts +17 -0
  36. package/src/converters/table-headings-refresh-handler.js +35 -54
  37. package/src/converters/table-layout-post-fixer.d.ts +226 -0
  38. package/src/converters/table-layout-post-fixer.js +276 -313
  39. package/src/converters/tableproperties.d.ts +54 -0
  40. package/src/converters/tableproperties.js +136 -168
  41. package/src/converters/upcasttable.d.ts +49 -0
  42. package/src/converters/upcasttable.js +196 -251
  43. package/src/index.d.ts +29 -0
  44. package/src/index.js +0 -2
  45. package/src/plaintableoutput.d.ts +30 -0
  46. package/src/plaintableoutput.js +107 -135
  47. package/src/table.d.ts +38 -0
  48. package/src/table.js +12 -88
  49. package/src/tablecaption/tablecaptionediting.d.ts +68 -0
  50. package/src/tablecaption/tablecaptionediting.js +104 -135
  51. package/src/tablecaption/tablecaptionui.d.ts +26 -0
  52. package/src/tablecaption/tablecaptionui.js +42 -58
  53. package/src/tablecaption/toggletablecaptioncommand.d.ts +73 -0
  54. package/src/tablecaption/toggletablecaptioncommand.js +77 -92
  55. package/src/tablecaption/utils.d.ts +42 -0
  56. package/src/tablecaption/utils.js +35 -61
  57. package/src/tablecaption.d.ts +27 -0
  58. package/src/tablecaption.js +12 -19
  59. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +37 -0
  60. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +14 -20
  61. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +42 -0
  62. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +27 -37
  63. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +42 -0
  64. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +27 -37
  65. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +56 -0
  66. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +42 -53
  67. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +51 -0
  68. package/src/tablecellproperties/commands/tablecellheightcommand.js +29 -36
  69. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +37 -0
  70. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +14 -20
  71. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +56 -0
  72. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +42 -53
  73. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -0
  74. package/src/tablecellproperties/commands/tablecellpropertycommand.js +77 -122
  75. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +45 -0
  76. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +14 -20
  77. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +47 -0
  78. package/src/tablecellproperties/tablecellpropertiesediting.js +194 -236
  79. package/src/tablecellproperties/tablecellpropertiesui.d.ts +117 -0
  80. package/src/tablecellproperties/tablecellpropertiesui.js +303 -456
  81. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +227 -0
  82. package/src/tablecellproperties/ui/tablecellpropertiesview.js +509 -844
  83. package/src/tablecellproperties.d.ts +33 -0
  84. package/src/tablecellproperties.js +12 -98
  85. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +51 -0
  86. package/src/tablecellwidth/commands/tablecellwidthcommand.js +29 -35
  87. package/src/tablecellwidth/tablecellwidthediting.d.ts +34 -0
  88. package/src/tablecellwidth/tablecellwidthediting.js +26 -38
  89. package/src/tableclipboard.d.ts +68 -0
  90. package/src/tableclipboard.js +429 -568
  91. package/src/tablecolumnresize/constants.d.ts +20 -0
  92. package/src/tablecolumnresize/constants.js +0 -10
  93. package/src/tablecolumnresize/converters.d.ts +18 -0
  94. package/src/tablecolumnresize/converters.js +35 -119
  95. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +142 -0
  96. package/src/tablecolumnresize/tablecolumnresizeediting.js +545 -711
  97. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -0
  98. package/src/tablecolumnresize/tablewidthscommand.js +61 -0
  99. package/src/tablecolumnresize/utils.d.ts +141 -0
  100. package/src/tablecolumnresize/utils.js +256 -233
  101. package/src/tablecolumnresize.d.ts +29 -0
  102. package/src/tablecolumnresize.js +12 -19
  103. package/src/tableconfig.d.ts +341 -0
  104. package/src/tableconfig.js +5 -0
  105. package/src/tableediting.d.ts +102 -0
  106. package/src/tableediting.js +157 -176
  107. package/src/tablekeyboard.d.ts +68 -0
  108. package/src/tablekeyboard.js +261 -344
  109. package/src/tablemouse/mouseeventsobserver.d.ts +62 -0
  110. package/src/tablemouse/mouseeventsobserver.js +12 -49
  111. package/src/tablemouse.d.ts +51 -0
  112. package/src/tablemouse.js +154 -202
  113. package/src/tableproperties/commands/tablealignmentcommand.d.ts +37 -0
  114. package/src/tableproperties/commands/tablealignmentcommand.js +14 -20
  115. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +37 -0
  116. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +14 -20
  117. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +42 -0
  118. package/src/tableproperties/commands/tablebordercolorcommand.js +27 -37
  119. package/src/tableproperties/commands/tableborderstylecommand.d.ts +42 -0
  120. package/src/tableproperties/commands/tableborderstylecommand.js +27 -37
  121. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +56 -0
  122. package/src/tableproperties/commands/tableborderwidthcommand.js +42 -53
  123. package/src/tableproperties/commands/tableheightcommand.d.ts +51 -0
  124. package/src/tableproperties/commands/tableheightcommand.js +29 -33
  125. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -0
  126. package/src/tableproperties/commands/tablepropertycommand.js +68 -112
  127. package/src/tableproperties/commands/tablewidthcommand.d.ts +51 -0
  128. package/src/tableproperties/commands/tablewidthcommand.js +29 -33
  129. package/src/tableproperties/tablepropertiesediting.d.ts +45 -0
  130. package/src/tableproperties/tablepropertiesediting.js +164 -210
  131. package/src/tableproperties/tablepropertiesui.d.ts +119 -0
  132. package/src/tableproperties/tablepropertiesui.js +294 -439
  133. package/src/tableproperties/ui/tablepropertiesview.d.ts +203 -0
  134. package/src/tableproperties/ui/tablepropertiesview.js +427 -718
  135. package/src/tableproperties.d.ts +33 -0
  136. package/src/tableproperties.js +12 -95
  137. package/src/tableselection.d.ts +111 -0
  138. package/src/tableselection.js +279 -376
  139. package/src/tabletoolbar.d.ts +37 -0
  140. package/src/tabletoolbar.js +39 -92
  141. package/src/tableui.d.ts +58 -0
  142. package/src/tableui.js +281 -338
  143. package/src/tableutils.d.ts +453 -0
  144. package/src/tableutils.js +1015 -1229
  145. package/src/tablewalker.d.ts +323 -0
  146. package/src/tablewalker.js +308 -548
  147. package/src/ui/colorinputview.d.ts +143 -0
  148. package/src/ui/colorinputview.js +229 -366
  149. package/src/ui/formrowview.d.ts +61 -0
  150. package/src/ui/formrowview.js +38 -84
  151. package/src/ui/inserttableview.d.ts +77 -0
  152. package/src/ui/inserttableview.js +152 -242
  153. package/src/utils/common.d.ts +42 -0
  154. package/src/utils/common.js +33 -57
  155. package/src/utils/structure.d.ts +245 -0
  156. package/src/utils/structure.js +261 -379
  157. package/src/utils/table-properties.d.ts +67 -0
  158. package/src/utils/table-properties.js +60 -81
  159. package/src/utils/ui/contextualballoon.d.ts +34 -0
  160. package/src/utils/ui/contextualballoon.js +70 -89
  161. package/src/utils/ui/table-properties.d.ts +193 -0
  162. package/src/utils/ui/table-properties.js +259 -319
  163. package/src/utils/ui/widget.d.ts +16 -0
  164. package/src/utils/ui/widget.js +24 -46
  165. package/src/tablecolumnresize/tablecolumnwidthscommand.js +0 -55
  166. package/src/tablecolumnresize/tablewidthresizecommand.js +0 -65
@@ -2,152 +2,121 @@
2
2
  * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
-
6
5
  /**
7
6
  * @module table/tablecaption/tablecaptionediting
8
7
  */
9
-
10
8
  import { Plugin } from 'ckeditor5/src/core';
11
9
  import { Element, enablePlaceholder } from 'ckeditor5/src/engine';
12
10
  import { toWidgetEditable } from 'ckeditor5/src/widget';
13
-
14
11
  import injectTableCaptionPostFixer from '../converters/table-caption-post-fixer';
15
12
  import ToggleTableCaptionCommand from './toggletablecaptioncommand';
16
13
  import { isTable, matchTableCaptionViewElement } from './utils';
17
-
18
14
  /**
19
15
  * The table caption editing plugin.
20
- *
21
- * @extends module:core/plugin~Plugin
22
16
  */
23
17
  export default class TableCaptionEditing extends Plugin {
24
- /**
25
- * @inheritDoc
26
- */
27
- static get pluginName() {
28
- return 'TableCaptionEditing';
29
- }
30
-
31
- /**
32
- * @inheritDoc
33
- */
34
- constructor( editor ) {
35
- super( editor );
36
-
37
- /**
38
- * A map that keeps saved JSONified table captions and table model elements they are
39
- * associated with.
40
- *
41
- * To learn more about this system, see {@link #_saveCaption}.
42
- *
43
- * @member {WeakMap.<module:engine/model/element~Element,Object>}
44
- */
45
- this._savedCaptionsMap = new WeakMap();
46
- }
47
-
48
- /**
49
- * @inheritDoc
50
- */
51
- init() {
52
- const editor = this.editor;
53
- const schema = editor.model.schema;
54
- const view = editor.editing.view;
55
- const t = editor.t;
56
-
57
- if ( !schema.isRegistered( 'caption' ) ) {
58
- schema.register( 'caption', {
59
- allowIn: 'table',
60
- allowContentOf: '$block',
61
- isLimit: true
62
- } );
63
- } else {
64
- schema.extend( 'caption', {
65
- allowIn: 'table'
66
- } );
67
- }
68
-
69
- editor.commands.add( 'toggleTableCaption', new ToggleTableCaptionCommand( this.editor ) );
70
-
71
- // View -> model converter for the data pipeline.
72
- editor.conversion.for( 'upcast' ).elementToElement( {
73
- view: matchTableCaptionViewElement,
74
- model: 'caption'
75
- } );
76
-
77
- // Model -> view converter for the data pipeline.
78
- editor.conversion.for( 'dataDowncast' ).elementToElement( {
79
- model: 'caption',
80
- view: ( modelElement, { writer } ) => {
81
- if ( !isTable( modelElement.parent ) ) {
82
- return null;
83
- }
84
-
85
- return writer.createContainerElement( 'figcaption' );
86
- }
87
- } );
88
-
89
- // Model -> view converter for the editing pipeline.
90
- editor.conversion.for( 'editingDowncast' ).elementToElement( {
91
- model: 'caption',
92
- view: ( modelElement, { writer } ) => {
93
- if ( !isTable( modelElement.parent ) ) {
94
- return null;
95
- }
96
-
97
- const figcaptionElement = writer.createEditableElement( 'figcaption' );
98
- writer.setCustomProperty( 'tableCaption', true, figcaptionElement );
99
-
100
- enablePlaceholder( {
101
- view,
102
- element: figcaptionElement,
103
- text: t( 'Enter table caption' ),
104
- keepOnFocus: true
105
- } );
106
-
107
- return toWidgetEditable( figcaptionElement, writer );
108
- }
109
- } );
110
-
111
- injectTableCaptionPostFixer( editor.model );
112
- }
113
-
114
- /**
115
- * Returns the saved {@link module:engine/model/element~Element#toJSON JSONified} caption
116
- * of a table model element.
117
- *
118
- * See {@link #_saveCaption}.
119
- *
120
- * @protected
121
- * @param {module:engine/model/element~Element} tableModelElement The model element the
122
- * caption should be returned for.
123
- * @returns {module:engine/model/element~Element|null} The model caption element or `null` if there is none.
124
- */
125
- _getSavedCaption( tableModelElement ) {
126
- const jsonObject = this._savedCaptionsMap.get( tableModelElement );
127
-
128
- return jsonObject ? Element.fromJSON( jsonObject ) : null;
129
- }
130
-
131
- /**
132
- * Saves a {@link module:engine/model/element~Element#toJSON JSONified} caption for
133
- * a table element to allow restoring it in the future.
134
- *
135
- * A caption is saved every time it gets hidden. The
136
- * user should be able to restore it on demand.
137
- *
138
- * **Note**: The caption cannot be stored in the table model element attribute because,
139
- * for instance, when the model state propagates to collaborators, the attribute would get
140
- * lost (mainly because it does not convert to anything when the caption is hidden) and
141
- * the states of collaborators' models would de-synchronize causing numerous issues.
142
- *
143
- * See {@link #_getSavedCaption}.
144
- *
145
- * @protected
146
- * @param {module:engine/model/element~Element} tableModelElement The model element the
147
- * caption is saved for.
148
- * @param {module:engine/model/element~Element} caption The caption model element to be saved.
149
- */
150
- _saveCaption( tableModelElement, caption ) {
151
- this._savedCaptionsMap.set( tableModelElement, caption.toJSON() );
152
- }
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ static get pluginName() {
22
+ return 'TableCaptionEditing';
23
+ }
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ constructor(editor) {
28
+ super(editor);
29
+ this._savedCaptionsMap = new WeakMap();
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ init() {
35
+ const editor = this.editor;
36
+ const schema = editor.model.schema;
37
+ const view = editor.editing.view;
38
+ const t = editor.t;
39
+ if (!schema.isRegistered('caption')) {
40
+ schema.register('caption', {
41
+ allowIn: 'table',
42
+ allowContentOf: '$block',
43
+ isLimit: true
44
+ });
45
+ }
46
+ else {
47
+ schema.extend('caption', {
48
+ allowIn: 'table'
49
+ });
50
+ }
51
+ editor.commands.add('toggleTableCaption', new ToggleTableCaptionCommand(this.editor));
52
+ // View -> model converter for the data pipeline.
53
+ editor.conversion.for('upcast').elementToElement({
54
+ view: matchTableCaptionViewElement,
55
+ model: 'caption'
56
+ });
57
+ // Model -> view converter for the data pipeline.
58
+ editor.conversion.for('dataDowncast').elementToElement({
59
+ model: 'caption',
60
+ view: (modelElement, { writer }) => {
61
+ if (!isTable(modelElement.parent)) {
62
+ return null;
63
+ }
64
+ return writer.createContainerElement('figcaption');
65
+ }
66
+ });
67
+ // Model -> view converter for the editing pipeline.
68
+ editor.conversion.for('editingDowncast').elementToElement({
69
+ model: 'caption',
70
+ view: (modelElement, { writer }) => {
71
+ if (!isTable(modelElement.parent)) {
72
+ return null;
73
+ }
74
+ const figcaptionElement = writer.createEditableElement('figcaption');
75
+ writer.setCustomProperty('tableCaption', true, figcaptionElement);
76
+ enablePlaceholder({
77
+ view,
78
+ element: figcaptionElement,
79
+ text: t('Enter table caption'),
80
+ keepOnFocus: true
81
+ });
82
+ return toWidgetEditable(figcaptionElement, writer);
83
+ }
84
+ });
85
+ injectTableCaptionPostFixer(editor.model);
86
+ }
87
+ /**
88
+ * Returns the saved {@link module:engine/model/element~Element#toJSON JSONified} caption
89
+ * of a table model element.
90
+ *
91
+ * See {@link #_saveCaption}.
92
+ *
93
+ * @internal
94
+ * @param tableModelElement The model element the caption should be returned for.
95
+ * @returns The model caption element or `null` if there is none.
96
+ */
97
+ _getSavedCaption(tableModelElement) {
98
+ const jsonObject = this._savedCaptionsMap.get(tableModelElement);
99
+ return jsonObject ? Element.fromJSON(jsonObject) : null;
100
+ }
101
+ /**
102
+ * Saves a {@link module:engine/model/element~Element#toJSON JSONified} caption for
103
+ * a table element to allow restoring it in the future.
104
+ *
105
+ * A caption is saved every time it gets hidden. The
106
+ * user should be able to restore it on demand.
107
+ *
108
+ * **Note**: The caption cannot be stored in the table model element attribute because,
109
+ * for instance, when the model state propagates to collaborators, the attribute would get
110
+ * lost (mainly because it does not convert to anything when the caption is hidden) and
111
+ * the states of collaborators' models would de-synchronize causing numerous issues.
112
+ *
113
+ * See {@link #_getSavedCaption}.
114
+ *
115
+ * @internal
116
+ * @param tableModelElement The model element the caption is saved for.
117
+ * @param caption The caption model element to be saved.
118
+ */
119
+ _saveCaption(tableModelElement, caption) {
120
+ this._savedCaptionsMap.set(tableModelElement, caption.toJSON());
121
+ }
153
122
  }
@@ -0,0 +1,26 @@
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/tablecaption/tablecaptionui
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ /**
10
+ * The table caption UI plugin. It introduces the `'toggleTableCaption'` UI button.
11
+ */
12
+ export default class TableCaptionUI extends Plugin {
13
+ /**
14
+ * @inheritDoc
15
+ */
16
+ static get pluginName(): 'TableCaptionUI';
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ init(): void;
21
+ }
22
+ declare module '@ckeditor/ckeditor5-core' {
23
+ interface PluginsMap {
24
+ [TableCaptionUI.pluginName]: TableCaptionUI;
25
+ }
26
+ }
@@ -2,72 +2,56 @@
2
2
  * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
-
6
5
  /**
7
6
  * @module table/tablecaption/tablecaptionui
8
7
  */
9
-
10
8
  import { Plugin, icons } from 'ckeditor5/src/core';
11
9
  import { ButtonView } from 'ckeditor5/src/ui';
12
-
13
10
  import { getCaptionFromModelSelection } from './utils';
14
-
15
11
  /**
16
12
  * The table caption UI plugin. It introduces the `'toggleTableCaption'` UI button.
17
- *
18
- * @extends module:core/plugin~Plugin
19
13
  */
20
14
  export default class TableCaptionUI extends Plugin {
21
- /**
22
- * @inheritDoc
23
- */
24
- static get pluginName() {
25
- return 'TableCaptionUI';
26
- }
27
-
28
- /**
29
- * @inheritDoc
30
- */
31
- init() {
32
- const editor = this.editor;
33
- const editingView = editor.editing.view;
34
- const t = editor.t;
35
-
36
- editor.ui.componentFactory.add( 'toggleTableCaption', locale => {
37
- const command = editor.commands.get( 'toggleTableCaption' );
38
- const view = new ButtonView( locale );
39
-
40
- view.set( {
41
- icon: icons.caption,
42
- tooltip: true,
43
- isToggleable: true
44
- } );
45
-
46
- view.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );
47
- view.bind( 'label' ).to( command, 'value', value => value ? t( 'Toggle caption off' ) : t( 'Toggle caption on' ) );
48
-
49
- this.listenTo( view, 'execute', () => {
50
- editor.execute( 'toggleTableCaption', { focusCaptionOnShow: true } );
51
-
52
- // Scroll to the selection and highlight the caption if the caption showed up.
53
- if ( command.value ) {
54
- const modelCaptionElement = getCaptionFromModelSelection( editor.model.document.selection );
55
- const figcaptionElement = editor.editing.mapper.toViewElement( modelCaptionElement );
56
-
57
- if ( !figcaptionElement ) {
58
- return;
59
- }
60
-
61
- editingView.scrollToTheSelection();
62
- editingView.change( writer => {
63
- writer.addClass( 'table__caption_highlighted', figcaptionElement );
64
- } );
65
- }
66
-
67
- editor.editing.view.focus();
68
- } );
69
-
70
- return view;
71
- } );
72
- }
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static get pluginName() {
19
+ return 'TableCaptionUI';
20
+ }
21
+ /**
22
+ * @inheritDoc
23
+ */
24
+ init() {
25
+ const editor = this.editor;
26
+ const editingView = editor.editing.view;
27
+ const t = editor.t;
28
+ editor.ui.componentFactory.add('toggleTableCaption', locale => {
29
+ const command = editor.commands.get('toggleTableCaption');
30
+ const view = new ButtonView(locale);
31
+ view.set({
32
+ icon: icons.caption,
33
+ tooltip: true,
34
+ isToggleable: true
35
+ });
36
+ view.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');
37
+ view.bind('label').to(command, 'value', value => value ? t('Toggle caption off') : t('Toggle caption on'));
38
+ this.listenTo(view, 'execute', () => {
39
+ editor.execute('toggleTableCaption', { focusCaptionOnShow: true });
40
+ // Scroll to the selection and highlight the caption if the caption showed up.
41
+ if (command.value) {
42
+ const modelCaptionElement = getCaptionFromModelSelection(editor.model.document.selection);
43
+ const figcaptionElement = editor.editing.mapper.toViewElement(modelCaptionElement);
44
+ if (!figcaptionElement) {
45
+ return;
46
+ }
47
+ editingView.scrollToTheSelection();
48
+ editingView.change(writer => {
49
+ writer.addClass('table__caption_highlighted', figcaptionElement);
50
+ });
51
+ }
52
+ editor.editing.view.focus();
53
+ });
54
+ return view;
55
+ });
56
+ }
73
57
  }
@@ -0,0 +1,73 @@
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/tablecaption/toggletablecaptioncommand
7
+ */
8
+ import { Command } from 'ckeditor5/src/core';
9
+ /**
10
+ * The toggle table caption command.
11
+ *
12
+ * This command is registered by {@link module:table/tablecaption/tablecaptionediting~TableCaptionEditing} as the
13
+ * `'toggleTableCaption'` editor command.
14
+ *
15
+ * Executing this command:
16
+ *
17
+ * * either adds or removes the table caption of a selected table (depending on whether the caption is present or not),
18
+ * * removes the table caption if the selection is anchored in one.
19
+ *
20
+ * ```ts
21
+ * // Toggle the presence of the caption.
22
+ * editor.execute( 'toggleTableCaption' );
23
+ * ```
24
+ *
25
+ * **Note**: You can move the selection to the caption right away as it shows up upon executing this command by using
26
+ * the `focusCaptionOnShow` option:
27
+ *
28
+ * ```ts
29
+ * editor.execute( 'toggleTableCaption', { focusCaptionOnShow: true } );
30
+ * ```
31
+ */
32
+ export default class ToggleTableCaptionCommand extends Command {
33
+ value: boolean;
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ refresh(): void;
38
+ /**
39
+ * Executes the command.
40
+ *
41
+ * ```ts
42
+ * editor.execute( 'toggleTableCaption' );
43
+ * ```
44
+ *
45
+ * @param options Options for the executed command.
46
+ * @param options.focusCaptionOnShow When true and the caption shows up, the selection will be moved into it straight away.
47
+ * @fires execute
48
+ */
49
+ execute({ focusCaptionOnShow }?: {
50
+ focusCaptionOnShow?: boolean;
51
+ }): void;
52
+ /**
53
+ * Shows the table caption. Also:
54
+ *
55
+ * * it attempts to restore the caption content from the `TableCaptionEditing` caption registry,
56
+ * * it moves the selection to the caption right away, it the `focusCaptionOnShow` option was set.
57
+ *
58
+ * @param focusCaptionOnShow Default focus behavior when showing the caption.
59
+ */
60
+ private _showTableCaption;
61
+ /**
62
+ * Hides the caption of a selected table (or an table caption the selection is anchored to).
63
+ *
64
+ * The content of the caption is stored in the `TableCaptionEditing` caption registry to make this
65
+ * a reversible action.
66
+ */
67
+ private _hideTableCaption;
68
+ }
69
+ declare module '@ckeditor/ckeditor5-core' {
70
+ interface CommandsMap {
71
+ toggleTableCaption: ToggleTableCaptionCommand;
72
+ }
73
+ }