@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,42 +1,42 @@
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/imageupload/imageuploadprogress
7
- */
8
- import { type Editor, Plugin } from 'ckeditor5/src/core';
9
- import '../../theme/imageuploadprogress.css';
10
- import '../../theme/imageuploadicon.css';
11
- import '../../theme/imageuploadloader.css';
12
- /**
13
- * The image upload progress plugin.
14
- * It shows a placeholder when the image is read from the disk and a progress bar while the image is uploading.
15
- */
16
- export default class ImageUploadProgress extends Plugin {
17
- /**
18
- * @inheritDoc
19
- */
20
- static get pluginName(): "ImageUploadProgress";
21
- /**
22
- * The image placeholder that is displayed before real image data can be accessed.
23
- *
24
- * For the record, this image is a 1x1 px GIF with an aspect ratio set by CSS.
25
- */
26
- private placeholder;
27
- /**
28
- * @inheritDoc
29
- */
30
- constructor(editor: Editor);
31
- /**
32
- * @inheritDoc
33
- */
34
- init(): void;
35
- /**
36
- * This method is called each time the image `uploadStatus` attribute is changed.
37
- *
38
- * @param evt An object containing information about the fired event.
39
- * @param data Additional information about the change.
40
- */
41
- private uploadStatusChange;
42
- }
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/imageupload/imageuploadprogress
7
+ */
8
+ import { type Editor, Plugin } from 'ckeditor5/src/core';
9
+ import '../../theme/imageuploadprogress.css';
10
+ import '../../theme/imageuploadicon.css';
11
+ import '../../theme/imageuploadloader.css';
12
+ /**
13
+ * The image upload progress plugin.
14
+ * It shows a placeholder when the image is read from the disk and a progress bar while the image is uploading.
15
+ */
16
+ export default class ImageUploadProgress extends Plugin {
17
+ /**
18
+ * @inheritDoc
19
+ */
20
+ static get pluginName(): "ImageUploadProgress";
21
+ /**
22
+ * The image placeholder that is displayed before real image data can be accessed.
23
+ *
24
+ * For the record, this image is a 1x1 px GIF with an aspect ratio set by CSS.
25
+ */
26
+ private placeholder;
27
+ /**
28
+ * @inheritDoc
29
+ */
30
+ constructor(editor: Editor);
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ init(): void;
35
+ /**
36
+ * This method is called each time the image `uploadStatus` attribute is changed.
37
+ *
38
+ * @param evt An object containing information about the fired event.
39
+ * @param data Additional information about the change.
40
+ */
41
+ private uploadStatusChange;
42
+ }
@@ -1,211 +1,211 @@
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/imageupload/imageuploadprogress
7
- */
8
- /* globals setTimeout */
9
- import { Plugin } from 'ckeditor5/src/core';
10
- import { FileRepository } from 'ckeditor5/src/upload';
11
- import '../../theme/imageuploadprogress.css';
12
- import '../../theme/imageuploadicon.css';
13
- import '../../theme/imageuploadloader.css';
14
- /**
15
- * The image upload progress plugin.
16
- * It shows a placeholder when the image is read from the disk and a progress bar while the image is uploading.
17
- */
18
- export default class ImageUploadProgress extends Plugin {
19
- /**
20
- * @inheritDoc
21
- */
22
- static get pluginName() {
23
- return 'ImageUploadProgress';
24
- }
25
- /**
26
- * @inheritDoc
27
- */
28
- constructor(editor) {
29
- super(editor);
30
- /**
31
- * This method is called each time the image `uploadStatus` attribute is changed.
32
- *
33
- * @param evt An object containing information about the fired event.
34
- * @param data Additional information about the change.
35
- */
36
- this.uploadStatusChange = (evt, data, conversionApi) => {
37
- const editor = this.editor;
38
- const modelImage = data.item;
39
- const uploadId = modelImage.getAttribute('uploadId');
40
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
41
- return;
42
- }
43
- const imageUtils = editor.plugins.get('ImageUtils');
44
- const fileRepository = editor.plugins.get(FileRepository);
45
- const status = uploadId ? data.attributeNewValue : null;
46
- const placeholder = this.placeholder;
47
- const viewFigure = editor.editing.mapper.toViewElement(modelImage);
48
- const viewWriter = conversionApi.writer;
49
- if (status == 'reading') {
50
- // Start "appearing" effect and show placeholder with infinite progress bar on the top
51
- // while image is read from disk.
52
- _startAppearEffect(viewFigure, viewWriter);
53
- _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);
54
- return;
55
- }
56
- // Show progress bar on the top of the image when image is uploading.
57
- if (status == 'uploading') {
58
- const loader = fileRepository.loaders.get(uploadId);
59
- // Start appear effect if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.
60
- _startAppearEffect(viewFigure, viewWriter);
61
- if (!loader) {
62
- // There is no loader associated with uploadId - this means that image came from external changes.
63
- // In such cases we still want to show the placeholder until image is fully uploaded.
64
- // Show placeholder if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.
65
- _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);
66
- }
67
- else {
68
- // Hide placeholder and initialize progress bar showing upload progress.
69
- _hidePlaceholder(viewFigure, viewWriter);
70
- _showProgressBar(viewFigure, viewWriter, loader, editor.editing.view);
71
- _displayLocalImage(imageUtils, viewFigure, viewWriter, loader);
72
- }
73
- return;
74
- }
75
- if (status == 'complete' && fileRepository.loaders.get(uploadId)) {
76
- _showCompleteIcon(viewFigure, viewWriter, editor.editing.view);
77
- }
78
- // Clean up.
79
- _hideProgressBar(viewFigure, viewWriter);
80
- _hidePlaceholder(viewFigure, viewWriter);
81
- _stopAppearEffect(viewFigure, viewWriter);
82
- };
83
- this.placeholder = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
84
- }
85
- /**
86
- * @inheritDoc
87
- */
88
- init() {
89
- const editor = this.editor;
90
- // Upload status change - update image's view according to that status.
91
- if (editor.plugins.has('ImageBlockEditing')) {
92
- editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageBlock', this.uploadStatusChange);
93
- }
94
- if (editor.plugins.has('ImageInlineEditing')) {
95
- editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageInline', this.uploadStatusChange);
96
- }
97
- }
98
- }
99
- /**
100
- * Adds ck-appear class to the image figure if one is not already applied.
101
- */
102
- function _startAppearEffect(viewFigure, writer) {
103
- if (!viewFigure.hasClass('ck-appear')) {
104
- writer.addClass('ck-appear', viewFigure);
105
- }
106
- }
107
- /**
108
- * Removes ck-appear class to the image figure if one is not already removed.
109
- */
110
- function _stopAppearEffect(viewFigure, writer) {
111
- writer.removeClass('ck-appear', viewFigure);
112
- }
113
- /**
114
- * Shows placeholder together with infinite progress bar on given image figure.
115
- */
116
- function _showPlaceholder(imageUtils, placeholder, viewFigure, writer) {
117
- if (!viewFigure.hasClass('ck-image-upload-placeholder')) {
118
- writer.addClass('ck-image-upload-placeholder', viewFigure);
119
- }
120
- const viewImg = imageUtils.findViewImgElement(viewFigure);
121
- if (viewImg.getAttribute('src') !== placeholder) {
122
- writer.setAttribute('src', placeholder, viewImg);
123
- }
124
- if (!_getUIElement(viewFigure, 'placeholder')) {
125
- writer.insert(writer.createPositionAfter(viewImg), _createPlaceholder(writer));
126
- }
127
- }
128
- /**
129
- * Removes placeholder together with infinite progress bar on given image figure.
130
- */
131
- function _hidePlaceholder(viewFigure, writer) {
132
- if (viewFigure.hasClass('ck-image-upload-placeholder')) {
133
- writer.removeClass('ck-image-upload-placeholder', viewFigure);
134
- }
135
- _removeUIElement(viewFigure, writer, 'placeholder');
136
- }
137
- /**
138
- * Shows progress bar displaying upload progress.
139
- * Attaches it to the file loader to update when upload percentace is changed.
140
- */
141
- function _showProgressBar(viewFigure, writer, loader, view) {
142
- const progressBar = _createProgressBar(writer);
143
- writer.insert(writer.createPositionAt(viewFigure, 'end'), progressBar);
144
- // Update progress bar width when uploadedPercent is changed.
145
- loader.on('change:uploadedPercent', (evt, name, value) => {
146
- view.change(writer => {
147
- writer.setStyle('width', value + '%', progressBar);
148
- });
149
- });
150
- }
151
- /**
152
- * Hides upload progress bar.
153
- */
154
- function _hideProgressBar(viewFigure, writer) {
155
- _removeUIElement(viewFigure, writer, 'progressBar');
156
- }
157
- /**
158
- * Shows complete icon and hides after a certain amount of time.
159
- */
160
- function _showCompleteIcon(viewFigure, writer, view) {
161
- const completeIcon = writer.createUIElement('div', { class: 'ck-image-upload-complete-icon' });
162
- writer.insert(writer.createPositionAt(viewFigure, 'end'), completeIcon);
163
- setTimeout(() => {
164
- view.change(writer => writer.remove(writer.createRangeOn(completeIcon)));
165
- }, 3000);
166
- }
167
- /**
168
- * Create progress bar element using {@link module:engine/view/uielement~UIElement}.
169
- */
170
- function _createProgressBar(writer) {
171
- const progressBar = writer.createUIElement('div', { class: 'ck-progress-bar' });
172
- writer.setCustomProperty('progressBar', true, progressBar);
173
- return progressBar;
174
- }
175
- /**
176
- * Create placeholder element using {@link module:engine/view/uielement~UIElement}.
177
- */
178
- function _createPlaceholder(writer) {
179
- const placeholder = writer.createUIElement('div', { class: 'ck-upload-placeholder-loader' });
180
- writer.setCustomProperty('placeholder', true, placeholder);
181
- return placeholder;
182
- }
183
- /**
184
- * Returns {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.
185
- * Returns `undefined` if element is not found.
186
- */
187
- function _getUIElement(imageFigure, uniqueProperty) {
188
- for (const child of imageFigure.getChildren()) {
189
- if (child.getCustomProperty(uniqueProperty)) {
190
- return child;
191
- }
192
- }
193
- }
194
- /**
195
- * Removes {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.
196
- */
197
- function _removeUIElement(viewFigure, writer, uniqueProperty) {
198
- const element = _getUIElement(viewFigure, uniqueProperty);
199
- if (element) {
200
- writer.remove(writer.createRangeOn(element));
201
- }
202
- }
203
- /**
204
- * Displays local data from file loader.
205
- */
206
- function _displayLocalImage(imageUtils, viewFigure, writer, loader) {
207
- if (loader.data) {
208
- const viewImg = imageUtils.findViewImgElement(viewFigure);
209
- writer.setAttribute('src', loader.data, viewImg);
210
- }
211
- }
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/imageupload/imageuploadprogress
7
+ */
8
+ /* globals setTimeout */
9
+ import { Plugin } from 'ckeditor5/src/core';
10
+ import { FileRepository } from 'ckeditor5/src/upload';
11
+ import '../../theme/imageuploadprogress.css';
12
+ import '../../theme/imageuploadicon.css';
13
+ import '../../theme/imageuploadloader.css';
14
+ /**
15
+ * The image upload progress plugin.
16
+ * It shows a placeholder when the image is read from the disk and a progress bar while the image is uploading.
17
+ */
18
+ export default class ImageUploadProgress extends Plugin {
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ static get pluginName() {
23
+ return 'ImageUploadProgress';
24
+ }
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ constructor(editor) {
29
+ super(editor);
30
+ /**
31
+ * This method is called each time the image `uploadStatus` attribute is changed.
32
+ *
33
+ * @param evt An object containing information about the fired event.
34
+ * @param data Additional information about the change.
35
+ */
36
+ this.uploadStatusChange = (evt, data, conversionApi) => {
37
+ const editor = this.editor;
38
+ const modelImage = data.item;
39
+ const uploadId = modelImage.getAttribute('uploadId');
40
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
41
+ return;
42
+ }
43
+ const imageUtils = editor.plugins.get('ImageUtils');
44
+ const fileRepository = editor.plugins.get(FileRepository);
45
+ const status = uploadId ? data.attributeNewValue : null;
46
+ const placeholder = this.placeholder;
47
+ const viewFigure = editor.editing.mapper.toViewElement(modelImage);
48
+ const viewWriter = conversionApi.writer;
49
+ if (status == 'reading') {
50
+ // Start "appearing" effect and show placeholder with infinite progress bar on the top
51
+ // while image is read from disk.
52
+ _startAppearEffect(viewFigure, viewWriter);
53
+ _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);
54
+ return;
55
+ }
56
+ // Show progress bar on the top of the image when image is uploading.
57
+ if (status == 'uploading') {
58
+ const loader = fileRepository.loaders.get(uploadId);
59
+ // Start appear effect if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.
60
+ _startAppearEffect(viewFigure, viewWriter);
61
+ if (!loader) {
62
+ // There is no loader associated with uploadId - this means that image came from external changes.
63
+ // In such cases we still want to show the placeholder until image is fully uploaded.
64
+ // Show placeholder if needed - see https://github.com/ckeditor/ckeditor5-image/issues/191.
65
+ _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);
66
+ }
67
+ else {
68
+ // Hide placeholder and initialize progress bar showing upload progress.
69
+ _hidePlaceholder(viewFigure, viewWriter);
70
+ _showProgressBar(viewFigure, viewWriter, loader, editor.editing.view);
71
+ _displayLocalImage(imageUtils, viewFigure, viewWriter, loader);
72
+ }
73
+ return;
74
+ }
75
+ if (status == 'complete' && fileRepository.loaders.get(uploadId)) {
76
+ _showCompleteIcon(viewFigure, viewWriter, editor.editing.view);
77
+ }
78
+ // Clean up.
79
+ _hideProgressBar(viewFigure, viewWriter);
80
+ _hidePlaceholder(viewFigure, viewWriter);
81
+ _stopAppearEffect(viewFigure, viewWriter);
82
+ };
83
+ this.placeholder = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
84
+ }
85
+ /**
86
+ * @inheritDoc
87
+ */
88
+ init() {
89
+ const editor = this.editor;
90
+ // Upload status change - update image's view according to that status.
91
+ if (editor.plugins.has('ImageBlockEditing')) {
92
+ editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageBlock', this.uploadStatusChange);
93
+ }
94
+ if (editor.plugins.has('ImageInlineEditing')) {
95
+ editor.editing.downcastDispatcher.on('attribute:uploadStatus:imageInline', this.uploadStatusChange);
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Adds ck-appear class to the image figure if one is not already applied.
101
+ */
102
+ function _startAppearEffect(viewFigure, writer) {
103
+ if (!viewFigure.hasClass('ck-appear')) {
104
+ writer.addClass('ck-appear', viewFigure);
105
+ }
106
+ }
107
+ /**
108
+ * Removes ck-appear class to the image figure if one is not already removed.
109
+ */
110
+ function _stopAppearEffect(viewFigure, writer) {
111
+ writer.removeClass('ck-appear', viewFigure);
112
+ }
113
+ /**
114
+ * Shows placeholder together with infinite progress bar on given image figure.
115
+ */
116
+ function _showPlaceholder(imageUtils, placeholder, viewFigure, writer) {
117
+ if (!viewFigure.hasClass('ck-image-upload-placeholder')) {
118
+ writer.addClass('ck-image-upload-placeholder', viewFigure);
119
+ }
120
+ const viewImg = imageUtils.findViewImgElement(viewFigure);
121
+ if (viewImg.getAttribute('src') !== placeholder) {
122
+ writer.setAttribute('src', placeholder, viewImg);
123
+ }
124
+ if (!_getUIElement(viewFigure, 'placeholder')) {
125
+ writer.insert(writer.createPositionAfter(viewImg), _createPlaceholder(writer));
126
+ }
127
+ }
128
+ /**
129
+ * Removes placeholder together with infinite progress bar on given image figure.
130
+ */
131
+ function _hidePlaceholder(viewFigure, writer) {
132
+ if (viewFigure.hasClass('ck-image-upload-placeholder')) {
133
+ writer.removeClass('ck-image-upload-placeholder', viewFigure);
134
+ }
135
+ _removeUIElement(viewFigure, writer, 'placeholder');
136
+ }
137
+ /**
138
+ * Shows progress bar displaying upload progress.
139
+ * Attaches it to the file loader to update when upload percentace is changed.
140
+ */
141
+ function _showProgressBar(viewFigure, writer, loader, view) {
142
+ const progressBar = _createProgressBar(writer);
143
+ writer.insert(writer.createPositionAt(viewFigure, 'end'), progressBar);
144
+ // Update progress bar width when uploadedPercent is changed.
145
+ loader.on('change:uploadedPercent', (evt, name, value) => {
146
+ view.change(writer => {
147
+ writer.setStyle('width', value + '%', progressBar);
148
+ });
149
+ });
150
+ }
151
+ /**
152
+ * Hides upload progress bar.
153
+ */
154
+ function _hideProgressBar(viewFigure, writer) {
155
+ _removeUIElement(viewFigure, writer, 'progressBar');
156
+ }
157
+ /**
158
+ * Shows complete icon and hides after a certain amount of time.
159
+ */
160
+ function _showCompleteIcon(viewFigure, writer, view) {
161
+ const completeIcon = writer.createUIElement('div', { class: 'ck-image-upload-complete-icon' });
162
+ writer.insert(writer.createPositionAt(viewFigure, 'end'), completeIcon);
163
+ setTimeout(() => {
164
+ view.change(writer => writer.remove(writer.createRangeOn(completeIcon)));
165
+ }, 3000);
166
+ }
167
+ /**
168
+ * Create progress bar element using {@link module:engine/view/uielement~UIElement}.
169
+ */
170
+ function _createProgressBar(writer) {
171
+ const progressBar = writer.createUIElement('div', { class: 'ck-progress-bar' });
172
+ writer.setCustomProperty('progressBar', true, progressBar);
173
+ return progressBar;
174
+ }
175
+ /**
176
+ * Create placeholder element using {@link module:engine/view/uielement~UIElement}.
177
+ */
178
+ function _createPlaceholder(writer) {
179
+ const placeholder = writer.createUIElement('div', { class: 'ck-upload-placeholder-loader' });
180
+ writer.setCustomProperty('placeholder', true, placeholder);
181
+ return placeholder;
182
+ }
183
+ /**
184
+ * Returns {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.
185
+ * Returns `undefined` if element is not found.
186
+ */
187
+ function _getUIElement(imageFigure, uniqueProperty) {
188
+ for (const child of imageFigure.getChildren()) {
189
+ if (child.getCustomProperty(uniqueProperty)) {
190
+ return child;
191
+ }
192
+ }
193
+ }
194
+ /**
195
+ * Removes {@link module:engine/view/uielement~UIElement} of given unique property from image figure element.
196
+ */
197
+ function _removeUIElement(viewFigure, writer, uniqueProperty) {
198
+ const element = _getUIElement(viewFigure, uniqueProperty);
199
+ if (element) {
200
+ writer.remove(writer.createRangeOn(element));
201
+ }
202
+ }
203
+ /**
204
+ * Displays local data from file loader.
205
+ */
206
+ function _displayLocalImage(imageUtils, viewFigure, writer, loader) {
207
+ if (loader.data) {
208
+ const viewImg = imageUtils.findViewImgElement(viewFigure);
209
+ writer.setAttribute('src', loader.data, viewImg);
210
+ }
211
+ }
@@ -1,23 +1,23 @@
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
- import { Plugin } from 'ckeditor5/src/core';
6
- /**
7
- * The image upload button plugin.
8
- *
9
- * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature} documentation.
10
- *
11
- * Adds the `'uploadImage'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
12
- * and also the `imageUpload` button as an alias for backward compatibility.
13
- */
14
- export default class ImageUploadUI extends Plugin {
15
- /**
16
- * @inheritDoc
17
- */
18
- static get pluginName(): "ImageUploadUI";
19
- /**
20
- * @inheritDoc
21
- */
22
- init(): void;
23
- }
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
+ import { Plugin } from 'ckeditor5/src/core';
6
+ /**
7
+ * The image upload button plugin.
8
+ *
9
+ * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature} documentation.
10
+ *
11
+ * Adds the `'uploadImage'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
12
+ * and also the `imageUpload` button as an alias for backward compatibility.
13
+ */
14
+ export default class ImageUploadUI extends Plugin {
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static get pluginName(): "ImageUploadUI";
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ init(): void;
23
+ }