@ckeditor/ckeditor5-image 40.0.0 → 40.1.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 (115) hide show
  1. package/LICENSE.md +3 -3
  2. package/build/image.js +1 -1
  3. package/package.json +3 -3
  4. package/src/augmentation.d.ts +56 -56
  5. package/src/augmentation.js +5 -5
  6. package/src/autoimage.d.ts +52 -52
  7. package/src/autoimage.js +132 -132
  8. package/src/image/converters.d.ts +66 -66
  9. package/src/image/converters.js +232 -232
  10. package/src/image/imageblockediting.d.ts +59 -58
  11. package/src/image/imageblockediting.js +153 -152
  12. package/src/image/imageediting.d.ts +30 -30
  13. package/src/image/imageediting.js +63 -63
  14. package/src/image/imageinlineediting.d.ts +60 -59
  15. package/src/image/imageinlineediting.js +177 -176
  16. package/src/image/imageloadobserver.d.ts +48 -48
  17. package/src/image/imageloadobserver.js +52 -52
  18. package/src/image/imageplaceholder.d.ts +39 -0
  19. package/src/image/imageplaceholder.js +113 -0
  20. package/src/image/imagetypecommand.d.ts +44 -44
  21. package/src/image/imagetypecommand.js +80 -80
  22. package/src/image/insertimagecommand.d.ts +66 -66
  23. package/src/image/insertimagecommand.js +120 -120
  24. package/src/image/replaceimagesourcecommand.d.ts +51 -34
  25. package/src/image/replaceimagesourcecommand.js +75 -44
  26. package/src/image/ui/utils.d.ts +25 -25
  27. package/src/image/ui/utils.js +44 -44
  28. package/src/image/utils.d.ts +64 -64
  29. package/src/image/utils.js +121 -121
  30. package/src/image.d.ts +34 -34
  31. package/src/image.js +38 -38
  32. package/src/imageblock.d.ts +33 -33
  33. package/src/imageblock.js +37 -37
  34. package/src/imagecaption/imagecaptionediting.d.ts +89 -89
  35. package/src/imagecaption/imagecaptionediting.js +225 -225
  36. package/src/imagecaption/imagecaptionui.d.ts +26 -26
  37. package/src/imagecaption/imagecaptionui.js +61 -61
  38. package/src/imagecaption/imagecaptionutils.d.ts +38 -38
  39. package/src/imagecaption/imagecaptionutils.js +62 -62
  40. package/src/imagecaption/toggleimagecaptioncommand.d.ts +66 -66
  41. package/src/imagecaption/toggleimagecaptioncommand.js +138 -138
  42. package/src/imagecaption.d.ts +26 -26
  43. package/src/imagecaption.js +30 -30
  44. package/src/imageconfig.d.ts +716 -713
  45. package/src/imageconfig.js +5 -5
  46. package/src/imageinline.d.ts +33 -33
  47. package/src/imageinline.js +37 -37
  48. package/src/imageinsert/imageinsertui.d.ts +44 -44
  49. package/src/imageinsert/imageinsertui.js +141 -141
  50. package/src/imageinsert/ui/imageinsertformrowview.d.ts +61 -61
  51. package/src/imageinsert/ui/imageinsertformrowview.js +54 -54
  52. package/src/imageinsert/ui/imageinsertpanelview.d.ts +106 -106
  53. package/src/imageinsert/ui/imageinsertpanelview.js +161 -161
  54. package/src/imageinsert/utils.d.ts +25 -25
  55. package/src/imageinsert/utils.js +58 -58
  56. package/src/imageinsert.d.ts +33 -33
  57. package/src/imageinsert.js +37 -37
  58. package/src/imageinsertviaurl.d.ts +30 -30
  59. package/src/imageinsertviaurl.js +34 -34
  60. package/src/imageresize/imageresizebuttons.d.ts +67 -67
  61. package/src/imageresize/imageresizebuttons.js +217 -217
  62. package/src/imageresize/imageresizeediting.d.ts +37 -37
  63. package/src/imageresize/imageresizeediting.js +165 -165
  64. package/src/imageresize/imageresizehandles.d.ts +31 -31
  65. package/src/imageresize/imageresizehandles.js +114 -114
  66. package/src/imageresize/resizeimagecommand.d.ts +42 -42
  67. package/src/imageresize/resizeimagecommand.js +63 -63
  68. package/src/imageresize.d.ts +27 -27
  69. package/src/imageresize.js +31 -31
  70. package/src/imagesizeattributes.d.ts +34 -34
  71. package/src/imagesizeattributes.js +142 -143
  72. package/src/imagestyle/converters.d.ts +24 -24
  73. package/src/imagestyle/converters.js +79 -79
  74. package/src/imagestyle/imagestylecommand.d.ts +68 -68
  75. package/src/imagestyle/imagestylecommand.js +107 -107
  76. package/src/imagestyle/imagestyleediting.d.ts +50 -50
  77. package/src/imagestyle/imagestyleediting.js +108 -108
  78. package/src/imagestyle/imagestyleui.d.ts +56 -56
  79. package/src/imagestyle/imagestyleui.js +192 -192
  80. package/src/imagestyle/utils.d.ts +101 -101
  81. package/src/imagestyle/utils.js +329 -329
  82. package/src/imagestyle.d.ts +32 -32
  83. package/src/imagestyle.js +36 -36
  84. package/src/imagetextalternative/imagetextalternativecommand.d.ts +34 -34
  85. package/src/imagetextalternative/imagetextalternativecommand.js +44 -44
  86. package/src/imagetextalternative/imagetextalternativeediting.d.ts +28 -28
  87. package/src/imagetextalternative/imagetextalternativeediting.js +35 -35
  88. package/src/imagetextalternative/imagetextalternativeui.d.ts +68 -68
  89. package/src/imagetextalternative/imagetextalternativeui.js +173 -173
  90. package/src/imagetextalternative/ui/textalternativeformview.d.ts +72 -72
  91. package/src/imagetextalternative/ui/textalternativeformview.js +121 -121
  92. package/src/imagetextalternative.d.ts +29 -29
  93. package/src/imagetextalternative.js +33 -33
  94. package/src/imagetoolbar.d.ts +35 -35
  95. package/src/imagetoolbar.js +57 -57
  96. package/src/imageupload/imageuploadediting.d.ts +111 -111
  97. package/src/imageupload/imageuploadediting.js +337 -337
  98. package/src/imageupload/imageuploadprogress.d.ts +42 -42
  99. package/src/imageupload/imageuploadprogress.js +211 -211
  100. package/src/imageupload/imageuploadui.d.ts +23 -23
  101. package/src/imageupload/imageuploadui.js +57 -57
  102. package/src/imageupload/uploadimagecommand.d.ts +60 -60
  103. package/src/imageupload/uploadimagecommand.js +100 -100
  104. package/src/imageupload/utils.d.ts +33 -33
  105. package/src/imageupload/utils.js +112 -112
  106. package/src/imageupload.d.ts +32 -32
  107. package/src/imageupload.js +36 -36
  108. package/src/imageutils.d.ts +125 -125
  109. package/src/imageutils.js +306 -306
  110. package/src/index.d.ts +48 -48
  111. package/src/index.js +39 -39
  112. package/src/pictureediting.d.ts +88 -88
  113. package/src/pictureediting.js +130 -130
  114. package/theme/imageplaceholder.css +10 -0
  115. package/build/image.js.map +0 -1
@@ -1,5 +1,5 @@
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
- export {};
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
+ export {};
@@ -1,33 +1,33 @@
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 image/imageinline
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { Widget } from 'ckeditor5/src/widget';
10
- import ImageTextAlternative from './imagetextalternative';
11
- import ImageInlineEditing from './image/imageinlineediting';
12
- import '../theme/image.css';
13
- /**
14
- * The image inline plugin.
15
- *
16
- * This is a "glue" plugin which loads the following plugins:
17
- *
18
- * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
19
- * * {@link module:image/imagetextalternative~ImageTextAlternative}.
20
- *
21
- * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
22
- * for more information.
23
- */
24
- export default class ImageInline extends Plugin {
25
- /**
26
- * @inheritDoc
27
- */
28
- static get requires(): readonly [typeof ImageInlineEditing, typeof Widget, typeof ImageTextAlternative];
29
- /**
30
- * @inheritDoc
31
- */
32
- static get pluginName(): "ImageInline";
33
- }
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 image/imageinline
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { Widget } from 'ckeditor5/src/widget';
10
+ import ImageTextAlternative from './imagetextalternative';
11
+ import ImageInlineEditing from './image/imageinlineediting';
12
+ import '../theme/image.css';
13
+ /**
14
+ * The image inline plugin.
15
+ *
16
+ * This is a "glue" plugin which loads the following plugins:
17
+ *
18
+ * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
19
+ * * {@link module:image/imagetextalternative~ImageTextAlternative}.
20
+ *
21
+ * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
22
+ * for more information.
23
+ */
24
+ export default class ImageInline extends Plugin {
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ static get requires(): readonly [typeof ImageInlineEditing, typeof Widget, typeof ImageTextAlternative];
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get pluginName(): "ImageInline";
33
+ }
@@ -1,37 +1,37 @@
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 image/imageinline
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { Widget } from 'ckeditor5/src/widget';
10
- import ImageTextAlternative from './imagetextalternative';
11
- import ImageInlineEditing from './image/imageinlineediting';
12
- import '../theme/image.css';
13
- /**
14
- * The image inline plugin.
15
- *
16
- * This is a "glue" plugin which loads the following plugins:
17
- *
18
- * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
19
- * * {@link module:image/imagetextalternative~ImageTextAlternative}.
20
- *
21
- * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
22
- * for more information.
23
- */
24
- export default class ImageInline extends Plugin {
25
- /**
26
- * @inheritDoc
27
- */
28
- static get requires() {
29
- return [ImageInlineEditing, Widget, ImageTextAlternative];
30
- }
31
- /**
32
- * @inheritDoc
33
- */
34
- static get pluginName() {
35
- return 'ImageInline';
36
- }
37
- }
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 image/imageinline
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { Widget } from 'ckeditor5/src/widget';
10
+ import ImageTextAlternative from './imagetextalternative';
11
+ import ImageInlineEditing from './image/imageinlineediting';
12
+ import '../theme/image.css';
13
+ /**
14
+ * The image inline plugin.
15
+ *
16
+ * This is a "glue" plugin which loads the following plugins:
17
+ *
18
+ * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
19
+ * * {@link module:image/imagetextalternative~ImageTextAlternative}.
20
+ *
21
+ * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
22
+ * for more information.
23
+ */
24
+ export default class ImageInline extends Plugin {
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ static get requires() {
29
+ return [ImageInlineEditing, Widget, ImageTextAlternative];
30
+ }
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ static get pluginName() {
35
+ return 'ImageInline';
36
+ }
37
+ }
@@ -1,44 +1,44 @@
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 image/imageinsert/imageinsertui
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { type DropdownView } from 'ckeditor5/src/ui';
10
- /**
11
- * The image insert dropdown plugin.
12
- *
13
- * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}
14
- * and {@glink features/images/images-inserting Insert images via source URL} documentation.
15
- *
16
- * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
17
- * and also the `imageInsert` dropdown as an alias for backward compatibility.
18
- */
19
- export default class ImageInsertUI extends Plugin {
20
- /**
21
- * @inheritDoc
22
- */
23
- static get pluginName(): "ImageInsertUI";
24
- /**
25
- * The dropdown view responsible for displaying the image insert UI.
26
- */
27
- dropdownView?: DropdownView;
28
- /**
29
- * @inheritDoc
30
- */
31
- init(): void;
32
- /**
33
- * Creates the dropdown view.
34
- *
35
- * @param locale The localization services instance.
36
- */
37
- private _createDropdownView;
38
- /**
39
- * Sets up the dropdown view.
40
- *
41
- * @param command An uploadImage or insertImage command.
42
- */
43
- private _setUpDropdown;
44
- }
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 image/imageinsert/imageinsertui
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { type DropdownView } from 'ckeditor5/src/ui';
10
+ /**
11
+ * The image insert dropdown plugin.
12
+ *
13
+ * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}
14
+ * and {@glink features/images/images-inserting Insert images via source URL} documentation.
15
+ *
16
+ * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
17
+ * and also the `imageInsert` dropdown as an alias for backward compatibility.
18
+ */
19
+ export default class ImageInsertUI extends Plugin {
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ static get pluginName(): "ImageInsertUI";
24
+ /**
25
+ * The dropdown view responsible for displaying the image insert UI.
26
+ */
27
+ dropdownView?: DropdownView;
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ init(): void;
32
+ /**
33
+ * Creates the dropdown view.
34
+ *
35
+ * @param locale The localization services instance.
36
+ */
37
+ private _createDropdownView;
38
+ /**
39
+ * Sets up the dropdown view.
40
+ *
41
+ * @param command An uploadImage or insertImage command.
42
+ */
43
+ private _setUpDropdown;
44
+ }
@@ -1,141 +1,141 @@
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 image/imageinsert/imageinsertui
7
- */
8
- import { Plugin, icons } from 'ckeditor5/src/core';
9
- import { SplitButtonView, createDropdown } from 'ckeditor5/src/ui';
10
- import ImageInsertPanelView from './ui/imageinsertpanelview';
11
- import { prepareIntegrations } from './utils';
12
- /**
13
- * The image insert dropdown plugin.
14
- *
15
- * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}
16
- * and {@glink features/images/images-inserting Insert images via source URL} documentation.
17
- *
18
- * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
19
- * and also the `imageInsert` dropdown as an alias for backward compatibility.
20
- */
21
- export default class ImageInsertUI extends Plugin {
22
- /**
23
- * @inheritDoc
24
- */
25
- static get pluginName() {
26
- return 'ImageInsertUI';
27
- }
28
- /**
29
- * @inheritDoc
30
- */
31
- init() {
32
- const editor = this.editor;
33
- const componentCreator = (locale) => {
34
- return this._createDropdownView(locale);
35
- };
36
- // Register `insertImage` dropdown and add `imageInsert` dropdown as an alias for backward compatibility.
37
- editor.ui.componentFactory.add('insertImage', componentCreator);
38
- editor.ui.componentFactory.add('imageInsert', componentCreator);
39
- }
40
- /**
41
- * Creates the dropdown view.
42
- *
43
- * @param locale The localization services instance.
44
- */
45
- _createDropdownView(locale) {
46
- const editor = this.editor;
47
- const t = locale.t;
48
- const uploadImageCommand = editor.commands.get('uploadImage');
49
- const insertImageCommand = editor.commands.get('insertImage');
50
- this.dropdownView = createDropdown(locale, uploadImageCommand ? SplitButtonView : undefined);
51
- const buttonView = this.dropdownView.buttonView;
52
- const panelView = this.dropdownView.panelView;
53
- buttonView.set({
54
- label: t('Insert image'),
55
- icon: icons.image,
56
- tooltip: true
57
- });
58
- panelView.extendTemplate({
59
- attributes: {
60
- class: 'ck-image-insert__panel'
61
- }
62
- });
63
- if (uploadImageCommand) {
64
- const splitButtonView = this.dropdownView.buttonView;
65
- // We are injecting custom button replacement to readonly field.
66
- splitButtonView.actionView = editor.ui.componentFactory.create('uploadImage');
67
- // After we replaced action button with `uploadImage` component,
68
- // we have lost a proper styling and some minor visual quirks have appeared.
69
- // Brining back original split button classes helps fix the button styling
70
- // See https://github.com/ckeditor/ckeditor5/issues/7986.
71
- splitButtonView.actionView.extendTemplate({
72
- attributes: {
73
- class: 'ck ck-button ck-splitbutton__action'
74
- }
75
- });
76
- }
77
- return this._setUpDropdown(uploadImageCommand || insertImageCommand);
78
- }
79
- /**
80
- * Sets up the dropdown view.
81
- *
82
- * @param command An uploadImage or insertImage command.
83
- */
84
- _setUpDropdown(command) {
85
- const editor = this.editor;
86
- const t = editor.t;
87
- const dropdownView = this.dropdownView;
88
- const panelView = dropdownView.panelView;
89
- const imageUtils = this.editor.plugins.get('ImageUtils');
90
- const replaceImageSourceCommand = editor.commands.get('replaceImageSource');
91
- let imageInsertView;
92
- dropdownView.bind('isEnabled').to(command);
93
- dropdownView.once('change:isOpen', () => {
94
- imageInsertView = new ImageInsertPanelView(editor.locale, prepareIntegrations(editor));
95
- imageInsertView.delegate('submit', 'cancel').to(dropdownView);
96
- panelView.children.add(imageInsertView);
97
- });
98
- dropdownView.on('change:isOpen', () => {
99
- const selectedElement = editor.model.document.selection.getSelectedElement();
100
- const insertButtonView = imageInsertView.insertButtonView;
101
- const insertImageViaUrlForm = imageInsertView.getIntegration('insertImageViaUrl');
102
- if (dropdownView.isOpen) {
103
- if (imageUtils.isImage(selectedElement)) {
104
- imageInsertView.imageURLInputValue = replaceImageSourceCommand.value;
105
- insertButtonView.label = t('Update');
106
- insertImageViaUrlForm.label = t('Update image URL');
107
- }
108
- else {
109
- imageInsertView.imageURLInputValue = '';
110
- insertButtonView.label = t('Insert');
111
- insertImageViaUrlForm.label = t('Insert image via URL');
112
- }
113
- }
114
- // Note: Use the low priority to make sure the following listener starts working after the
115
- // default action of the drop-down is executed (i.e. the panel showed up). Otherwise, the
116
- // invisible form/input cannot be focused/selected.
117
- }, { priority: 'low' });
118
- this.delegate('cancel').to(dropdownView);
119
- dropdownView.on('submit', () => {
120
- closePanel();
121
- onSubmit();
122
- });
123
- dropdownView.on('cancel', () => {
124
- closePanel();
125
- });
126
- function onSubmit() {
127
- const selectedElement = editor.model.document.selection.getSelectedElement();
128
- if (imageUtils.isImage(selectedElement)) {
129
- editor.execute('replaceImageSource', { source: imageInsertView.imageURLInputValue });
130
- }
131
- else {
132
- editor.execute('insertImage', { source: imageInsertView.imageURLInputValue });
133
- }
134
- }
135
- function closePanel() {
136
- editor.editing.view.focus();
137
- dropdownView.isOpen = false;
138
- }
139
- return dropdownView;
140
- }
141
- }
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 image/imageinsert/imageinsertui
7
+ */
8
+ import { Plugin, icons } from 'ckeditor5/src/core';
9
+ import { SplitButtonView, createDropdown } from 'ckeditor5/src/ui';
10
+ import ImageInsertPanelView from './ui/imageinsertpanelview';
11
+ import { prepareIntegrations } from './utils';
12
+ /**
13
+ * The image insert dropdown plugin.
14
+ *
15
+ * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}
16
+ * and {@glink features/images/images-inserting Insert images via source URL} documentation.
17
+ *
18
+ * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
19
+ * and also the `imageInsert` dropdown as an alias for backward compatibility.
20
+ */
21
+ export default class ImageInsertUI extends Plugin {
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ static get pluginName() {
26
+ return 'ImageInsertUI';
27
+ }
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ init() {
32
+ const editor = this.editor;
33
+ const componentCreator = (locale) => {
34
+ return this._createDropdownView(locale);
35
+ };
36
+ // Register `insertImage` dropdown and add `imageInsert` dropdown as an alias for backward compatibility.
37
+ editor.ui.componentFactory.add('insertImage', componentCreator);
38
+ editor.ui.componentFactory.add('imageInsert', componentCreator);
39
+ }
40
+ /**
41
+ * Creates the dropdown view.
42
+ *
43
+ * @param locale The localization services instance.
44
+ */
45
+ _createDropdownView(locale) {
46
+ const editor = this.editor;
47
+ const t = locale.t;
48
+ const uploadImageCommand = editor.commands.get('uploadImage');
49
+ const insertImageCommand = editor.commands.get('insertImage');
50
+ this.dropdownView = createDropdown(locale, uploadImageCommand ? SplitButtonView : undefined);
51
+ const buttonView = this.dropdownView.buttonView;
52
+ const panelView = this.dropdownView.panelView;
53
+ buttonView.set({
54
+ label: t('Insert image'),
55
+ icon: icons.image,
56
+ tooltip: true
57
+ });
58
+ panelView.extendTemplate({
59
+ attributes: {
60
+ class: 'ck-image-insert__panel'
61
+ }
62
+ });
63
+ if (uploadImageCommand) {
64
+ const splitButtonView = this.dropdownView.buttonView;
65
+ // We are injecting custom button replacement to readonly field.
66
+ splitButtonView.actionView = editor.ui.componentFactory.create('uploadImage');
67
+ // After we replaced action button with `uploadImage` component,
68
+ // we have lost a proper styling and some minor visual quirks have appeared.
69
+ // Brining back original split button classes helps fix the button styling
70
+ // See https://github.com/ckeditor/ckeditor5/issues/7986.
71
+ splitButtonView.actionView.extendTemplate({
72
+ attributes: {
73
+ class: 'ck ck-button ck-splitbutton__action'
74
+ }
75
+ });
76
+ }
77
+ return this._setUpDropdown(uploadImageCommand || insertImageCommand);
78
+ }
79
+ /**
80
+ * Sets up the dropdown view.
81
+ *
82
+ * @param command An uploadImage or insertImage command.
83
+ */
84
+ _setUpDropdown(command) {
85
+ const editor = this.editor;
86
+ const t = editor.t;
87
+ const dropdownView = this.dropdownView;
88
+ const panelView = dropdownView.panelView;
89
+ const imageUtils = this.editor.plugins.get('ImageUtils');
90
+ const replaceImageSourceCommand = editor.commands.get('replaceImageSource');
91
+ let imageInsertView;
92
+ dropdownView.bind('isEnabled').to(command);
93
+ dropdownView.once('change:isOpen', () => {
94
+ imageInsertView = new ImageInsertPanelView(editor.locale, prepareIntegrations(editor));
95
+ imageInsertView.delegate('submit', 'cancel').to(dropdownView);
96
+ panelView.children.add(imageInsertView);
97
+ });
98
+ dropdownView.on('change:isOpen', () => {
99
+ const selectedElement = editor.model.document.selection.getSelectedElement();
100
+ const insertButtonView = imageInsertView.insertButtonView;
101
+ const insertImageViaUrlForm = imageInsertView.getIntegration('insertImageViaUrl');
102
+ if (dropdownView.isOpen) {
103
+ if (imageUtils.isImage(selectedElement)) {
104
+ imageInsertView.imageURLInputValue = replaceImageSourceCommand.value;
105
+ insertButtonView.label = t('Update');
106
+ insertImageViaUrlForm.label = t('Update image URL');
107
+ }
108
+ else {
109
+ imageInsertView.imageURLInputValue = '';
110
+ insertButtonView.label = t('Insert');
111
+ insertImageViaUrlForm.label = t('Insert image via URL');
112
+ }
113
+ }
114
+ // Note: Use the low priority to make sure the following listener starts working after the
115
+ // default action of the drop-down is executed (i.e. the panel showed up). Otherwise, the
116
+ // invisible form/input cannot be focused/selected.
117
+ }, { priority: 'low' });
118
+ this.delegate('cancel').to(dropdownView);
119
+ dropdownView.on('submit', () => {
120
+ closePanel();
121
+ onSubmit();
122
+ });
123
+ dropdownView.on('cancel', () => {
124
+ closePanel();
125
+ });
126
+ function onSubmit() {
127
+ const selectedElement = editor.model.document.selection.getSelectedElement();
128
+ if (imageUtils.isImage(selectedElement)) {
129
+ editor.execute('replaceImageSource', { source: imageInsertView.imageURLInputValue });
130
+ }
131
+ else {
132
+ editor.execute('insertImage', { source: imageInsertView.imageURLInputValue });
133
+ }
134
+ }
135
+ function closePanel() {
136
+ editor.editing.view.focus();
137
+ dropdownView.isOpen = false;
138
+ }
139
+ return dropdownView;
140
+ }
141
+ }
@@ -1,61 +1,61 @@
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 image/imageinsert/ui/imageinsertformrowview
7
- */
8
- import type { Locale } from 'ckeditor5/src/utils';
9
- import { View, type ViewCollection, type LabelView } from 'ckeditor5/src/ui';
10
- import '../../../theme/imageinsertformrowview.css';
11
- /**
12
- * The class representing a single row in a complex form,
13
- * used by {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
14
- *
15
- * **Note**: For now this class is private. When more use cases appear (beyond `ckeditor5-table` and `ckeditor5-image`),
16
- * it will become a component in `ckeditor5-ui`.
17
- *
18
- * @private
19
- */
20
- export default class ImageUploadFormRowView extends View {
21
- /**
22
- * An additional CSS class added to the {@link #element}.
23
- *
24
- * @observable
25
- */
26
- class: string | null;
27
- /**
28
- * A collection of row items (buttons, dropdowns, etc.).
29
- */
30
- readonly children: ViewCollection;
31
- /**
32
- * The role property reflected by the `role` DOM attribute of the {@link #element}.
33
- *
34
- * **Note**: Used only when a `labelView` is passed to constructor `options`.
35
- *
36
- * @observable
37
- * @private
38
- */
39
- _role: string | null;
40
- /**
41
- * The ARIA property reflected by the `aria-labelledby` DOM attribute of the {@link #element}.
42
- *
43
- * **Note**: Used only when a `labelView` is passed to constructor `options`.
44
- *
45
- * @observable
46
- * @private
47
- */
48
- _ariaLabelledBy: string | null;
49
- /**
50
- * Creates an instance of the form row class.
51
- *
52
- * @param locale The locale instance.
53
- * @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
54
- * DOM attributes and gets described by the label.
55
- */
56
- constructor(locale: Locale, options?: {
57
- children?: Array<View>;
58
- class?: string;
59
- labelView?: LabelView;
60
- });
61
- }
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 image/imageinsert/ui/imageinsertformrowview
7
+ */
8
+ import type { Locale } from 'ckeditor5/src/utils';
9
+ import { View, type ViewCollection, type LabelView } from 'ckeditor5/src/ui';
10
+ import '../../../theme/imageinsertformrowview.css';
11
+ /**
12
+ * The class representing a single row in a complex form,
13
+ * used by {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
14
+ *
15
+ * **Note**: For now this class is private. When more use cases appear (beyond `ckeditor5-table` and `ckeditor5-image`),
16
+ * it will become a component in `ckeditor5-ui`.
17
+ *
18
+ * @private
19
+ */
20
+ export default class ImageUploadFormRowView extends View {
21
+ /**
22
+ * An additional CSS class added to the {@link #element}.
23
+ *
24
+ * @observable
25
+ */
26
+ class: string | null;
27
+ /**
28
+ * A collection of row items (buttons, dropdowns, etc.).
29
+ */
30
+ readonly children: ViewCollection;
31
+ /**
32
+ * The role property reflected by the `role` DOM attribute of the {@link #element}.
33
+ *
34
+ * **Note**: Used only when a `labelView` is passed to constructor `options`.
35
+ *
36
+ * @observable
37
+ * @private
38
+ */
39
+ _role: string | null;
40
+ /**
41
+ * The ARIA property reflected by the `aria-labelledby` DOM attribute of the {@link #element}.
42
+ *
43
+ * **Note**: Used only when a `labelView` is passed to constructor `options`.
44
+ *
45
+ * @observable
46
+ * @private
47
+ */
48
+ _ariaLabelledBy: string | null;
49
+ /**
50
+ * Creates an instance of the form row class.
51
+ *
52
+ * @param locale The locale instance.
53
+ * @param options.labelView When passed, the row gets the `group` and `aria-labelledby`
54
+ * DOM attributes and gets described by the label.
55
+ */
56
+ constructor(locale: Locale, options?: {
57
+ children?: Array<View>;
58
+ class?: string;
59
+ labelView?: LabelView;
60
+ });
61
+ }