@ckeditor/ckeditor5-table 36.0.1 → 37.0.0-alpha.1

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 (170) hide show
  1. package/README.md +1 -1
  2. package/build/table.js +1 -1
  3. package/ckeditor5-metadata.json +6 -6
  4. package/package.json +34 -29
  5. package/src/augmentation.d.ts +76 -0
  6. package/src/augmentation.js +5 -0
  7. package/src/commands/insertcolumncommand.d.ts +55 -0
  8. package/src/commands/insertcolumncommand.js +45 -60
  9. package/src/commands/insertrowcommand.d.ts +54 -0
  10. package/src/commands/insertrowcommand.js +44 -59
  11. package/src/commands/inserttablecommand.d.ts +44 -0
  12. package/src/commands/inserttablecommand.js +50 -68
  13. package/src/commands/mergecellcommand.d.ts +68 -0
  14. package/src/commands/mergecellcommand.js +169 -244
  15. package/src/commands/mergecellscommand.d.ts +28 -0
  16. package/src/commands/mergecellscommand.js +72 -101
  17. package/src/commands/removecolumncommand.d.ts +29 -0
  18. package/src/commands/removecolumncommand.js +88 -102
  19. package/src/commands/removerowcommand.d.ts +29 -0
  20. package/src/commands/removerowcommand.js +63 -80
  21. package/src/commands/selectcolumncommand.d.ts +33 -0
  22. package/src/commands/selectcolumncommand.js +41 -54
  23. package/src/commands/selectrowcommand.d.ts +33 -0
  24. package/src/commands/selectrowcommand.js +38 -48
  25. package/src/commands/setheadercolumncommand.d.ts +50 -0
  26. package/src/commands/setheadercolumncommand.js +48 -73
  27. package/src/commands/setheaderrowcommand.d.ts +53 -0
  28. package/src/commands/setheaderrowcommand.js +56 -85
  29. package/src/commands/splitcellcommand.d.ts +43 -0
  30. package/src/commands/splitcellcommand.js +35 -49
  31. package/src/converters/downcast.d.ts +63 -0
  32. package/src/converters/downcast.js +98 -130
  33. package/src/converters/table-caption-post-fixer.d.ts +20 -0
  34. package/src/converters/table-caption-post-fixer.js +36 -52
  35. package/src/converters/table-cell-paragraph-post-fixer.d.ts +32 -0
  36. package/src/converters/table-cell-paragraph-post-fixer.js +88 -119
  37. package/src/converters/table-cell-refresh-handler.d.ts +18 -0
  38. package/src/converters/table-cell-refresh-handler.js +29 -48
  39. package/src/converters/table-headings-refresh-handler.d.ts +17 -0
  40. package/src/converters/table-headings-refresh-handler.js +35 -54
  41. package/src/converters/table-layout-post-fixer.d.ts +226 -0
  42. package/src/converters/table-layout-post-fixer.js +276 -313
  43. package/src/converters/tableproperties.d.ts +54 -0
  44. package/src/converters/tableproperties.js +136 -168
  45. package/src/converters/upcasttable.d.ts +49 -0
  46. package/src/converters/upcasttable.js +199 -251
  47. package/src/index.d.ts +60 -0
  48. package/src/index.js +1 -2
  49. package/src/plaintableoutput.d.ts +25 -0
  50. package/src/plaintableoutput.js +107 -135
  51. package/src/table.d.ts +33 -0
  52. package/src/table.js +12 -88
  53. package/src/tablecaption/tablecaptionediting.d.ts +63 -0
  54. package/src/tablecaption/tablecaptionediting.js +104 -135
  55. package/src/tablecaption/tablecaptionui.d.ts +21 -0
  56. package/src/tablecaption/tablecaptionui.js +42 -58
  57. package/src/tablecaption/toggletablecaptioncommand.d.ts +68 -0
  58. package/src/tablecaption/toggletablecaptioncommand.js +77 -92
  59. package/src/tablecaption/utils.d.ts +42 -0
  60. package/src/tablecaption/utils.js +35 -61
  61. package/src/tablecaption.d.ts +22 -0
  62. package/src/tablecaption.js +12 -19
  63. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.d.ts +32 -0
  64. package/src/tablecellproperties/commands/tablecellbackgroundcolorcommand.js +14 -20
  65. package/src/tablecellproperties/commands/tablecellbordercolorcommand.d.ts +37 -0
  66. package/src/tablecellproperties/commands/tablecellbordercolorcommand.js +27 -37
  67. package/src/tablecellproperties/commands/tablecellborderstylecommand.d.ts +37 -0
  68. package/src/tablecellproperties/commands/tablecellborderstylecommand.js +27 -37
  69. package/src/tablecellproperties/commands/tablecellborderwidthcommand.d.ts +51 -0
  70. package/src/tablecellproperties/commands/tablecellborderwidthcommand.js +42 -53
  71. package/src/tablecellproperties/commands/tablecellheightcommand.d.ts +46 -0
  72. package/src/tablecellproperties/commands/tablecellheightcommand.js +29 -36
  73. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.d.ts +32 -0
  74. package/src/tablecellproperties/commands/tablecellhorizontalalignmentcommand.js +14 -20
  75. package/src/tablecellproperties/commands/tablecellpaddingcommand.d.ts +51 -0
  76. package/src/tablecellproperties/commands/tablecellpaddingcommand.js +42 -53
  77. package/src/tablecellproperties/commands/tablecellpropertycommand.d.ts +62 -0
  78. package/src/tablecellproperties/commands/tablecellpropertycommand.js +77 -122
  79. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.d.ts +40 -0
  80. package/src/tablecellproperties/commands/tablecellverticalalignmentcommand.js +14 -20
  81. package/src/tablecellproperties/tablecellpropertiesediting.d.ts +41 -0
  82. package/src/tablecellproperties/tablecellpropertiesediting.js +193 -236
  83. package/src/tablecellproperties/tablecellpropertiesui.d.ts +111 -0
  84. package/src/tablecellproperties/tablecellpropertiesui.js +302 -456
  85. package/src/tablecellproperties/ui/tablecellpropertiesview.d.ts +227 -0
  86. package/src/tablecellproperties/ui/tablecellpropertiesview.js +509 -844
  87. package/src/tablecellproperties.d.ts +28 -0
  88. package/src/tablecellproperties.js +12 -98
  89. package/src/tablecellwidth/commands/tablecellwidthcommand.d.ts +46 -0
  90. package/src/tablecellwidth/commands/tablecellwidthcommand.js +29 -35
  91. package/src/tablecellwidth/tablecellwidthediting.d.ts +28 -0
  92. package/src/tablecellwidth/tablecellwidthediting.js +25 -38
  93. package/src/tableclipboard.d.ts +63 -0
  94. package/src/tableclipboard.js +429 -568
  95. package/src/tablecolumnresize/constants.d.ts +20 -0
  96. package/src/tablecolumnresize/constants.js +0 -10
  97. package/src/tablecolumnresize/converters.d.ts +18 -0
  98. package/src/tablecolumnresize/converters.js +35 -119
  99. package/src/tablecolumnresize/tablecolumnresizeediting.d.ts +137 -0
  100. package/src/tablecolumnresize/tablecolumnresizeediting.js +545 -711
  101. package/src/tablecolumnresize/tablewidthscommand.d.ts +38 -0
  102. package/src/tablecolumnresize/tablewidthscommand.js +61 -0
  103. package/src/tablecolumnresize/utils.d.ts +141 -0
  104. package/src/tablecolumnresize/utils.js +256 -233
  105. package/src/tablecolumnresize.d.ts +24 -0
  106. package/src/tablecolumnresize.js +12 -19
  107. package/src/tableconfig.d.ts +331 -0
  108. package/src/tableconfig.js +5 -0
  109. package/src/tableediting.d.ts +97 -0
  110. package/src/tableediting.js +157 -176
  111. package/src/tablekeyboard.d.ts +63 -0
  112. package/src/tablekeyboard.js +261 -344
  113. package/src/tablemouse/mouseeventsobserver.d.ts +62 -0
  114. package/src/tablemouse/mouseeventsobserver.js +13 -50
  115. package/src/tablemouse.d.ts +46 -0
  116. package/src/tablemouse.js +154 -202
  117. package/src/tableproperties/commands/tablealignmentcommand.d.ts +32 -0
  118. package/src/tableproperties/commands/tablealignmentcommand.js +14 -20
  119. package/src/tableproperties/commands/tablebackgroundcolorcommand.d.ts +32 -0
  120. package/src/tableproperties/commands/tablebackgroundcolorcommand.js +14 -20
  121. package/src/tableproperties/commands/tablebordercolorcommand.d.ts +37 -0
  122. package/src/tableproperties/commands/tablebordercolorcommand.js +27 -37
  123. package/src/tableproperties/commands/tableborderstylecommand.d.ts +37 -0
  124. package/src/tableproperties/commands/tableborderstylecommand.js +27 -37
  125. package/src/tableproperties/commands/tableborderwidthcommand.d.ts +51 -0
  126. package/src/tableproperties/commands/tableborderwidthcommand.js +42 -53
  127. package/src/tableproperties/commands/tableheightcommand.d.ts +46 -0
  128. package/src/tableproperties/commands/tableheightcommand.js +29 -33
  129. package/src/tableproperties/commands/tablepropertycommand.d.ts +61 -0
  130. package/src/tableproperties/commands/tablepropertycommand.js +68 -112
  131. package/src/tableproperties/commands/tablewidthcommand.d.ts +46 -0
  132. package/src/tableproperties/commands/tablewidthcommand.js +29 -33
  133. package/src/tableproperties/tablepropertiesediting.d.ts +39 -0
  134. package/src/tableproperties/tablepropertiesediting.js +163 -210
  135. package/src/tableproperties/tablepropertiesui.d.ts +113 -0
  136. package/src/tableproperties/tablepropertiesui.js +293 -439
  137. package/src/tableproperties/ui/tablepropertiesview.d.ts +203 -0
  138. package/src/tableproperties/ui/tablepropertiesview.js +427 -718
  139. package/src/tableproperties.d.ts +28 -0
  140. package/src/tableproperties.js +12 -95
  141. package/src/tableselection.d.ts +106 -0
  142. package/src/tableselection.js +279 -376
  143. package/src/tabletoolbar.d.ts +31 -0
  144. package/src/tabletoolbar.js +38 -92
  145. package/src/tableui.d.ts +53 -0
  146. package/src/tableui.js +281 -338
  147. package/src/tableutils.d.ts +448 -0
  148. package/src/tableutils.js +1015 -1229
  149. package/src/tablewalker.d.ts +323 -0
  150. package/src/tablewalker.js +308 -548
  151. package/src/ui/colorinputview.d.ts +143 -0
  152. package/src/ui/colorinputview.js +229 -366
  153. package/src/ui/formrowview.d.ts +61 -0
  154. package/src/ui/formrowview.js +38 -84
  155. package/src/ui/inserttableview.d.ts +77 -0
  156. package/src/ui/inserttableview.js +152 -242
  157. package/src/utils/common.d.ts +42 -0
  158. package/src/utils/common.js +33 -57
  159. package/src/utils/structure.d.ts +245 -0
  160. package/src/utils/structure.js +261 -379
  161. package/src/utils/table-properties.d.ts +67 -0
  162. package/src/utils/table-properties.js +60 -81
  163. package/src/utils/ui/contextualballoon.d.ts +34 -0
  164. package/src/utils/ui/contextualballoon.js +70 -89
  165. package/src/utils/ui/table-properties.d.ts +193 -0
  166. package/src/utils/ui/table-properties.js +259 -319
  167. package/src/utils/ui/widget.d.ts +16 -0
  168. package/src/utils/ui/widget.js +24 -46
  169. package/src/tablecolumnresize/tablecolumnwidthscommand.js +0 -55
  170. 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,21 @@
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
+ }
@@ -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,68 @@
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
+ }
@@ -2,15 +2,11 @@
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/toggletablecaptioncommand
8
7
  */
9
-
10
8
  import { Command } from 'ckeditor5/src/core';
11
-
12
9
  import { getCaptionFromTableModelElement, getSelectionAffectedTable } from './utils';
13
-
14
10
  /**
15
11
  * The toggle table caption command.
16
12
  *
@@ -22,98 +18,87 @@ import { getCaptionFromTableModelElement, getSelectionAffectedTable } from './ut
22
18
  * * either adds or removes the table caption of a selected table (depending on whether the caption is present or not),
23
19
  * * removes the table caption if the selection is anchored in one.
24
20
  *
25
- * // Toggle the presence of the caption.
26
- * editor.execute( 'toggleTableCaption' );
21
+ * ```ts
22
+ * // Toggle the presence of the caption.
23
+ * editor.execute( 'toggleTableCaption' );
24
+ * ```
27
25
  *
28
26
  * **Note**: You can move the selection to the caption right away as it shows up upon executing this command by using
29
27
  * the `focusCaptionOnShow` option:
30
28
  *
31
- * editor.execute( 'toggleTableCaption', { focusCaptionOnShow: true } );
32
- *
33
- * @extends module:core/command~Command
29
+ * ```ts
30
+ * editor.execute( 'toggleTableCaption', { focusCaptionOnShow: true } );
31
+ * ```
34
32
  */
35
33
  export default class ToggleTableCaptionCommand extends Command {
36
- /**
37
- * @inheritDoc
38
- */
39
- refresh() {
40
- const editor = this.editor;
41
- const tableElement = getSelectionAffectedTable( editor.model.document.selection );
42
-
43
- this.isEnabled = !!tableElement;
44
-
45
- if ( !this.isEnabled ) {
46
- this.value = false;
47
- } else {
48
- this.value = !!getCaptionFromTableModelElement( tableElement );
49
- }
50
- }
51
-
52
- /**
53
- * Executes the command.
54
- *
55
- * editor.execute( 'toggleTableCaption' );
56
- *
57
- * @param {Object} [options] Options for the executed command.
58
- * @param {String} [options.focusCaptionOnShow] When true and the caption shows up, the selection will be moved into it straight away.
59
- * @fires execute
60
- */
61
- execute( options = {} ) {
62
- const { focusCaptionOnShow } = options;
63
-
64
- this.editor.model.change( writer => {
65
- if ( this.value ) {
66
- this._hideTableCaption( writer );
67
- } else {
68
- this._showTableCaption( writer, focusCaptionOnShow );
69
- }
70
- } );
71
- }
72
-
73
- /**
74
- * Shows the table caption. Also:
75
- *
76
- * * it attempts to restore the caption content from the `TableCaptionEditing` caption registry,
77
- * * it moves the selection to the caption right away, it the `focusCaptionOnShow` option was set.
78
- *
79
- * @private
80
- * @param {module:engine/model/writer~Writer} writer
81
- * @param {Boolean} focusCaptionOnShow Default focus behavior when showing the caption.
82
- */
83
- _showTableCaption( writer, focusCaptionOnShow ) {
84
- const model = this.editor.model;
85
- const tableElement = getSelectionAffectedTable( model.document.selection );
86
- const tableCaptionEditing = this.editor.plugins.get( 'TableCaptionEditing' );
87
- const savedCaptionElement = tableCaptionEditing._getSavedCaption( tableElement );
88
-
89
- // Try restoring the caption from the TableCaptionEditing plugin storage.
90
- const newCaptionElement = savedCaptionElement || writer.createElement( 'caption' );
91
-
92
- model.insertContent( newCaptionElement, tableElement, 'end' );
93
-
94
- if ( focusCaptionOnShow ) {
95
- writer.setSelection( newCaptionElement, 'in' );
96
- }
97
- }
98
-
99
- /**
100
- * Hides the caption of a selected table (or an table caption the selection is anchored to).
101
- *
102
- * The content of the caption is stored in the `TableCaptionEditing` caption registry to make this
103
- * a reversible action.
104
- *
105
- * @private
106
- * @param {module:engine/model/writer~Writer} writer
107
- */
108
- _hideTableCaption( writer ) {
109
- const model = this.editor.model;
110
- const tableElement = getSelectionAffectedTable( model.document.selection );
111
- const tableCaptionEditing = this.editor.plugins.get( 'TableCaptionEditing' );
112
- const captionElement = getCaptionFromTableModelElement( tableElement );
113
-
114
- // Store the caption content so it can be restored quickly if the user changes their mind.
115
- tableCaptionEditing._saveCaption( tableElement, captionElement );
116
-
117
- model.deleteContent( writer.createSelection( captionElement, 'on' ) );
118
- }
34
+ /**
35
+ * @inheritDoc
36
+ */
37
+ refresh() {
38
+ const editor = this.editor;
39
+ const tableElement = getSelectionAffectedTable(editor.model.document.selection);
40
+ this.isEnabled = !!tableElement;
41
+ if (!this.isEnabled) {
42
+ this.value = false;
43
+ }
44
+ else {
45
+ this.value = !!getCaptionFromTableModelElement(tableElement);
46
+ }
47
+ }
48
+ /**
49
+ * Executes the command.
50
+ *
51
+ * ```ts
52
+ * editor.execute( 'toggleTableCaption' );
53
+ * ```
54
+ *
55
+ * @param options Options for the executed command.
56
+ * @param options.focusCaptionOnShow When true and the caption shows up, the selection will be moved into it straight away.
57
+ * @fires execute
58
+ */
59
+ execute({ focusCaptionOnShow = false } = {}) {
60
+ this.editor.model.change(writer => {
61
+ if (this.value) {
62
+ this._hideTableCaption(writer);
63
+ }
64
+ else {
65
+ this._showTableCaption(writer, focusCaptionOnShow);
66
+ }
67
+ });
68
+ }
69
+ /**
70
+ * Shows the table caption. Also:
71
+ *
72
+ * * it attempts to restore the caption content from the `TableCaptionEditing` caption registry,
73
+ * * it moves the selection to the caption right away, it the `focusCaptionOnShow` option was set.
74
+ *
75
+ * @param focusCaptionOnShow Default focus behavior when showing the caption.
76
+ */
77
+ _showTableCaption(writer, focusCaptionOnShow) {
78
+ const model = this.editor.model;
79
+ const tableElement = getSelectionAffectedTable(model.document.selection);
80
+ const tableCaptionEditing = this.editor.plugins.get('TableCaptionEditing');
81
+ const savedCaptionElement = tableCaptionEditing._getSavedCaption(tableElement);
82
+ // Try restoring the caption from the TableCaptionEditing plugin storage.
83
+ const newCaptionElement = savedCaptionElement || writer.createElement('caption');
84
+ model.insertContent(newCaptionElement, tableElement, 'end');
85
+ if (focusCaptionOnShow) {
86
+ writer.setSelection(newCaptionElement, 'in');
87
+ }
88
+ }
89
+ /**
90
+ * Hides the caption of a selected table (or an table caption the selection is anchored to).
91
+ *
92
+ * The content of the caption is stored in the `TableCaptionEditing` caption registry to make this
93
+ * a reversible action.
94
+ */
95
+ _hideTableCaption(writer) {
96
+ const model = this.editor.model;
97
+ const tableElement = getSelectionAffectedTable(model.document.selection);
98
+ const tableCaptionEditing = this.editor.plugins.get('TableCaptionEditing');
99
+ const captionElement = getCaptionFromTableModelElement(tableElement);
100
+ // Store the caption content so it can be restored quickly if the user changes their mind.
101
+ tableCaptionEditing._saveCaption(tableElement, captionElement);
102
+ model.deleteContent(writer.createSelection(captionElement, 'on'));
103
+ }
119
104
  }