@ckeditor/ckeditor5-image 40.0.0 → 40.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/CHANGELOG.md +25 -25
  2. package/LICENSE.md +3 -3
  3. package/build/image.js +2 -2
  4. package/build/translations/ar.js +1 -1
  5. package/build/translations/ast.js +1 -1
  6. package/build/translations/az.js +1 -1
  7. package/build/translations/bg.js +1 -1
  8. package/build/translations/bn.js +1 -1
  9. package/build/translations/bs.js +1 -1
  10. package/build/translations/ca.js +1 -1
  11. package/build/translations/cs.js +1 -1
  12. package/build/translations/da.js +1 -1
  13. package/build/translations/de-ch.js +1 -1
  14. package/build/translations/de.js +1 -1
  15. package/build/translations/el.js +1 -1
  16. package/build/translations/en-au.js +1 -1
  17. package/build/translations/en-gb.js +1 -1
  18. package/build/translations/eo.js +1 -1
  19. package/build/translations/es.js +1 -1
  20. package/build/translations/et.js +1 -1
  21. package/build/translations/eu.js +1 -1
  22. package/build/translations/fa.js +1 -1
  23. package/build/translations/fi.js +1 -1
  24. package/build/translations/fr.js +1 -1
  25. package/build/translations/gl.js +1 -1
  26. package/build/translations/he.js +1 -1
  27. package/build/translations/hi.js +1 -1
  28. package/build/translations/hr.js +1 -1
  29. package/build/translations/hu.js +1 -1
  30. package/build/translations/id.js +1 -1
  31. package/build/translations/it.js +1 -1
  32. package/build/translations/ja.js +1 -1
  33. package/build/translations/jv.js +1 -1
  34. package/build/translations/km.js +1 -1
  35. package/build/translations/kn.js +1 -1
  36. package/build/translations/ko.js +1 -1
  37. package/build/translations/ku.js +1 -1
  38. package/build/translations/lt.js +1 -1
  39. package/build/translations/lv.js +1 -1
  40. package/build/translations/ms.js +1 -1
  41. package/build/translations/nb.js +1 -1
  42. package/build/translations/ne.js +1 -1
  43. package/build/translations/nl.js +1 -1
  44. package/build/translations/no.js +1 -1
  45. package/build/translations/pl.js +1 -1
  46. package/build/translations/pt-br.js +1 -1
  47. package/build/translations/pt.js +1 -1
  48. package/build/translations/ro.js +1 -1
  49. package/build/translations/ru.js +1 -1
  50. package/build/translations/si.js +1 -1
  51. package/build/translations/sk.js +1 -1
  52. package/build/translations/sq.js +1 -1
  53. package/build/translations/sr-latn.js +1 -1
  54. package/build/translations/sr.js +1 -1
  55. package/build/translations/sv.js +1 -1
  56. package/build/translations/th.js +1 -1
  57. package/build/translations/tk.js +1 -1
  58. package/build/translations/tr.js +1 -1
  59. package/build/translations/tt.js +1 -1
  60. package/build/translations/ug.js +1 -1
  61. package/build/translations/uk.js +1 -1
  62. package/build/translations/ur.js +1 -1
  63. package/build/translations/uz.js +1 -1
  64. package/build/translations/vi.js +1 -1
  65. package/build/translations/zh-cn.js +1 -1
  66. package/build/translations/zh.js +1 -1
  67. package/ckeditor5-metadata.json +3 -3
  68. package/lang/contexts.json +5 -0
  69. package/lang/translations/ar.po +20 -0
  70. package/lang/translations/ast.po +20 -0
  71. package/lang/translations/az.po +20 -0
  72. package/lang/translations/bg.po +20 -0
  73. package/lang/translations/bn.po +20 -0
  74. package/lang/translations/bs.po +20 -0
  75. package/lang/translations/ca.po +20 -0
  76. package/lang/translations/cs.po +20 -0
  77. package/lang/translations/da.po +20 -0
  78. package/lang/translations/de-ch.po +20 -0
  79. package/lang/translations/de.po +20 -0
  80. package/lang/translations/el.po +20 -0
  81. package/lang/translations/en-au.po +20 -0
  82. package/lang/translations/en-gb.po +20 -0
  83. package/lang/translations/en.po +20 -0
  84. package/lang/translations/eo.po +20 -0
  85. package/lang/translations/es.po +20 -0
  86. package/lang/translations/et.po +20 -0
  87. package/lang/translations/eu.po +20 -0
  88. package/lang/translations/fa.po +20 -0
  89. package/lang/translations/fi.po +20 -0
  90. package/lang/translations/fr.po +20 -0
  91. package/lang/translations/gl.po +20 -0
  92. package/lang/translations/he.po +20 -0
  93. package/lang/translations/hi.po +20 -0
  94. package/lang/translations/hr.po +20 -0
  95. package/lang/translations/hu.po +20 -0
  96. package/lang/translations/id.po +20 -0
  97. package/lang/translations/it.po +20 -0
  98. package/lang/translations/ja.po +20 -0
  99. package/lang/translations/jv.po +20 -0
  100. package/lang/translations/km.po +20 -0
  101. package/lang/translations/kn.po +20 -0
  102. package/lang/translations/ko.po +20 -0
  103. package/lang/translations/ku.po +20 -0
  104. package/lang/translations/lt.po +20 -0
  105. package/lang/translations/lv.po +20 -0
  106. package/lang/translations/ms.po +20 -0
  107. package/lang/translations/nb.po +20 -0
  108. package/lang/translations/ne.po +20 -0
  109. package/lang/translations/nl.po +20 -0
  110. package/lang/translations/no.po +20 -0
  111. package/lang/translations/pl.po +20 -0
  112. package/lang/translations/pt-br.po +20 -0
  113. package/lang/translations/pt.po +20 -0
  114. package/lang/translations/ro.po +20 -0
  115. package/lang/translations/ru.po +20 -0
  116. package/lang/translations/si.po +20 -0
  117. package/lang/translations/sk.po +20 -0
  118. package/lang/translations/sq.po +20 -0
  119. package/lang/translations/sr-latn.po +20 -0
  120. package/lang/translations/sr.po +20 -0
  121. package/lang/translations/sv.po +20 -0
  122. package/lang/translations/th.po +20 -0
  123. package/lang/translations/tk.po +20 -0
  124. package/lang/translations/tr.po +20 -0
  125. package/lang/translations/tt.po +20 -0
  126. package/lang/translations/ug.po +21 -1
  127. package/lang/translations/uk.po +20 -0
  128. package/lang/translations/ur.po +20 -0
  129. package/lang/translations/uz.po +20 -0
  130. package/lang/translations/vi.po +20 -0
  131. package/lang/translations/zh-cn.po +20 -0
  132. package/lang/translations/zh.po +20 -0
  133. package/package.json +3 -3
  134. package/src/augmentation.d.ts +56 -56
  135. package/src/augmentation.js +5 -5
  136. package/src/autoimage.d.ts +52 -52
  137. package/src/autoimage.js +132 -132
  138. package/src/image/converters.d.ts +66 -66
  139. package/src/image/converters.js +232 -232
  140. package/src/image/imageblockediting.d.ts +59 -58
  141. package/src/image/imageblockediting.js +153 -152
  142. package/src/image/imageediting.d.ts +30 -30
  143. package/src/image/imageediting.js +63 -63
  144. package/src/image/imageinlineediting.d.ts +60 -59
  145. package/src/image/imageinlineediting.js +177 -176
  146. package/src/image/imageloadobserver.d.ts +48 -48
  147. package/src/image/imageloadobserver.js +52 -52
  148. package/src/image/imageplaceholder.d.ts +39 -0
  149. package/src/image/imageplaceholder.js +113 -0
  150. package/src/image/imagetypecommand.d.ts +44 -44
  151. package/src/image/imagetypecommand.js +80 -80
  152. package/src/image/insertimagecommand.d.ts +66 -66
  153. package/src/image/insertimagecommand.js +120 -120
  154. package/src/image/replaceimagesourcecommand.d.ts +51 -34
  155. package/src/image/replaceimagesourcecommand.js +75 -44
  156. package/src/image/ui/utils.d.ts +25 -25
  157. package/src/image/ui/utils.js +44 -44
  158. package/src/image/utils.d.ts +64 -64
  159. package/src/image/utils.js +121 -121
  160. package/src/image.d.ts +34 -34
  161. package/src/image.js +38 -38
  162. package/src/imageblock.d.ts +34 -33
  163. package/src/imageblock.js +38 -37
  164. package/src/imagecaption/imagecaptionediting.d.ts +89 -89
  165. package/src/imagecaption/imagecaptionediting.js +225 -225
  166. package/src/imagecaption/imagecaptionui.d.ts +26 -26
  167. package/src/imagecaption/imagecaptionui.js +61 -61
  168. package/src/imagecaption/imagecaptionutils.d.ts +38 -38
  169. package/src/imagecaption/imagecaptionutils.js +62 -62
  170. package/src/imagecaption/toggleimagecaptioncommand.d.ts +66 -66
  171. package/src/imagecaption/toggleimagecaptioncommand.js +138 -138
  172. package/src/imagecaption.d.ts +26 -26
  173. package/src/imagecaption.js +30 -30
  174. package/src/imageconfig.d.ts +712 -713
  175. package/src/imageconfig.js +5 -5
  176. package/src/imageinline.d.ts +34 -33
  177. package/src/imageinline.js +38 -37
  178. package/src/imageinsert/imageinsertui.d.ts +72 -44
  179. package/src/imageinsert/imageinsertui.js +174 -141
  180. package/src/imageinsert/imageinsertviaurlui.d.ts +44 -0
  181. package/src/imageinsert/imageinsertviaurlui.js +122 -0
  182. package/src/imageinsert/ui/imageinsertformview.d.ts +56 -0
  183. package/src/imageinsert/ui/imageinsertformview.js +112 -0
  184. package/src/imageinsert/ui/imageinserturlview.d.ts +107 -0
  185. package/src/imageinsert/ui/imageinserturlview.js +156 -0
  186. package/src/imageinsert.d.ts +33 -33
  187. package/src/imageinsert.js +37 -37
  188. package/src/imageinsertviaurl.d.ts +31 -30
  189. package/src/imageinsertviaurl.js +35 -34
  190. package/src/imageresize/imageresizebuttons.d.ts +67 -67
  191. package/src/imageresize/imageresizebuttons.js +217 -217
  192. package/src/imageresize/imageresizeediting.d.ts +37 -37
  193. package/src/imageresize/imageresizeediting.js +165 -165
  194. package/src/imageresize/imageresizehandles.d.ts +31 -31
  195. package/src/imageresize/imageresizehandles.js +114 -114
  196. package/src/imageresize/resizeimagecommand.d.ts +42 -42
  197. package/src/imageresize/resizeimagecommand.js +63 -63
  198. package/src/imageresize.d.ts +27 -27
  199. package/src/imageresize.js +31 -31
  200. package/src/imagesizeattributes.d.ts +34 -34
  201. package/src/imagesizeattributes.js +142 -143
  202. package/src/imagestyle/converters.d.ts +24 -24
  203. package/src/imagestyle/converters.js +79 -79
  204. package/src/imagestyle/imagestylecommand.d.ts +68 -68
  205. package/src/imagestyle/imagestylecommand.js +107 -107
  206. package/src/imagestyle/imagestyleediting.d.ts +50 -50
  207. package/src/imagestyle/imagestyleediting.js +108 -108
  208. package/src/imagestyle/imagestyleui.d.ts +56 -56
  209. package/src/imagestyle/imagestyleui.js +192 -192
  210. package/src/imagestyle/utils.d.ts +101 -101
  211. package/src/imagestyle/utils.js +329 -329
  212. package/src/imagestyle.d.ts +32 -32
  213. package/src/imagestyle.js +36 -36
  214. package/src/imagetextalternative/imagetextalternativecommand.d.ts +34 -34
  215. package/src/imagetextalternative/imagetextalternativecommand.js +44 -44
  216. package/src/imagetextalternative/imagetextalternativeediting.d.ts +28 -28
  217. package/src/imagetextalternative/imagetextalternativeediting.js +35 -35
  218. package/src/imagetextalternative/imagetextalternativeui.d.ts +68 -68
  219. package/src/imagetextalternative/imagetextalternativeui.js +173 -173
  220. package/src/imagetextalternative/ui/textalternativeformview.d.ts +90 -72
  221. package/src/imagetextalternative/ui/textalternativeformview.js +121 -121
  222. package/src/imagetextalternative.d.ts +29 -29
  223. package/src/imagetextalternative.js +33 -33
  224. package/src/imagetoolbar.d.ts +35 -35
  225. package/src/imagetoolbar.js +57 -57
  226. package/src/imageupload/imageuploadediting.d.ts +111 -111
  227. package/src/imageupload/imageuploadediting.js +337 -337
  228. package/src/imageupload/imageuploadprogress.d.ts +42 -42
  229. package/src/imageupload/imageuploadprogress.js +211 -211
  230. package/src/imageupload/imageuploadui.d.ts +23 -23
  231. package/src/imageupload/imageuploadui.js +81 -57
  232. package/src/imageupload/uploadimagecommand.d.ts +60 -60
  233. package/src/imageupload/uploadimagecommand.js +100 -100
  234. package/src/imageupload/utils.d.ts +33 -33
  235. package/src/imageupload/utils.js +112 -112
  236. package/src/imageupload.d.ts +32 -32
  237. package/src/imageupload.js +36 -36
  238. package/src/imageutils.d.ts +125 -125
  239. package/src/imageutils.js +306 -306
  240. package/src/index.d.ts +48 -48
  241. package/src/index.js +39 -39
  242. package/src/pictureediting.d.ts +88 -88
  243. package/src/pictureediting.js +130 -130
  244. package/theme/imageinsert.css +5 -17
  245. package/theme/imageplaceholder.css +10 -0
  246. package/build/image.js.map +0 -1
  247. package/src/imageinsert/ui/imageinsertformrowview.d.ts +0 -61
  248. package/src/imageinsert/ui/imageinsertformrowview.js +0 -54
  249. package/src/imageinsert/ui/imageinsertpanelview.d.ts +0 -106
  250. package/src/imageinsert/ui/imageinsertpanelview.js +0 -161
  251. package/src/imageinsert/utils.d.ts +0 -25
  252. package/src/imageinsert/utils.js +0 -58
  253. package/theme/imageinsertformrowview.css +0 -36
@@ -1,120 +1,120 @@
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/image/insertimagecommand
7
- */
8
- import { Command } from 'ckeditor5/src/core';
9
- import { logWarning, toArray } from 'ckeditor5/src/utils';
10
- /**
11
- * Insert image command.
12
- *
13
- * The command is registered by the {@link module:image/image/imageediting~ImageEditing} plugin as `insertImage`
14
- * and it is also available via aliased `imageInsert` name.
15
- *
16
- * In order to insert an image at the current selection position
17
- * (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
18
- * execute the command and specify the image source:
19
- *
20
- * ```ts
21
- * editor.execute( 'insertImage', { source: 'http://url.to.the/image' } );
22
- * ```
23
- *
24
- * It is also possible to insert multiple images at once:
25
- *
26
- * ```ts
27
- * editor.execute( 'insertImage', {
28
- * source: [
29
- * 'path/to/image.jpg',
30
- * 'path/to/other-image.jpg'
31
- * ]
32
- * } );
33
- * ```
34
- *
35
- * If you want to take the full control over the process, you can specify individual model attributes:
36
- *
37
- * ```ts
38
- * editor.execute( 'insertImage', {
39
- * source: [
40
- * { src: 'path/to/image.jpg', alt: 'First alt text' },
41
- * { src: 'path/to/other-image.jpg', alt: 'Second alt text', customAttribute: 'My attribute value' }
42
- * ]
43
- * } );
44
- * ```
45
- */
46
- export default class InsertImageCommand extends Command {
47
- /**
48
- * @inheritDoc
49
- */
50
- constructor(editor) {
51
- super(editor);
52
- const configImageInsertType = editor.config.get('image.insert.type');
53
- if (!editor.plugins.has('ImageBlockEditing')) {
54
- if (configImageInsertType === 'block') {
55
- /**
56
- * The {@link module:image/imageblock~ImageBlock} plugin must be enabled to allow inserting block images. See
57
- * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
58
- *
59
- * @error image-block-plugin-required
60
- */
61
- logWarning('image-block-plugin-required');
62
- }
63
- }
64
- if (!editor.plugins.has('ImageInlineEditing')) {
65
- if (configImageInsertType === 'inline') {
66
- /**
67
- * The {@link module:image/imageinline~ImageInline} plugin must be enabled to allow inserting inline images. See
68
- * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
69
- *
70
- * @error image-inline-plugin-required
71
- */
72
- logWarning('image-inline-plugin-required');
73
- }
74
- }
75
- }
76
- /**
77
- * @inheritDoc
78
- */
79
- refresh() {
80
- const imageUtils = this.editor.plugins.get('ImageUtils');
81
- this.isEnabled = imageUtils.isImageAllowed();
82
- }
83
- /**
84
- * Executes the command.
85
- *
86
- * @fires execute
87
- * @param options Options for the executed command.
88
- * @param options.source The image source or an array of image sources to insert.
89
- * See the documentation of the command to learn more about accepted formats.
90
- */
91
- execute(options) {
92
- const sourceDefinitions = toArray(options.source);
93
- const selection = this.editor.model.document.selection;
94
- const imageUtils = this.editor.plugins.get('ImageUtils');
95
- // In case of multiple images, each image (starting from the 2nd) will be inserted at a position that
96
- // follows the previous one. That will move the selection and, to stay on the safe side and make sure
97
- // all images inherit the same selection attributes, they are collected beforehand.
98
- //
99
- // Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
100
- // not split that link but preserves its continuity.
101
- //
102
- // Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
103
- const selectionAttributes = Object.fromEntries(selection.getAttributes());
104
- sourceDefinitions.forEach((sourceDefinition, index) => {
105
- const selectedElement = selection.getSelectedElement();
106
- if (typeof sourceDefinition === 'string') {
107
- sourceDefinition = { src: sourceDefinition };
108
- }
109
- // Inserting of an inline image replace the selected element and make a selection on the inserted image.
110
- // Therefore inserting multiple inline images requires creating position after each element.
111
- if (index && selectedElement && imageUtils.isImage(selectedElement)) {
112
- const position = this.editor.model.createPositionAfter(selectedElement);
113
- imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position);
114
- }
115
- else {
116
- imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes });
117
- }
118
- });
119
- }
120
- }
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/image/insertimagecommand
7
+ */
8
+ import { Command } from 'ckeditor5/src/core';
9
+ import { logWarning, toArray } from 'ckeditor5/src/utils';
10
+ /**
11
+ * Insert image command.
12
+ *
13
+ * The command is registered by the {@link module:image/image/imageediting~ImageEditing} plugin as `insertImage`
14
+ * and it is also available via aliased `imageInsert` name.
15
+ *
16
+ * In order to insert an image at the current selection position
17
+ * (according to the {@link module:widget/utils~findOptimalInsertionRange} algorithm),
18
+ * execute the command and specify the image source:
19
+ *
20
+ * ```ts
21
+ * editor.execute( 'insertImage', { source: 'http://url.to.the/image' } );
22
+ * ```
23
+ *
24
+ * It is also possible to insert multiple images at once:
25
+ *
26
+ * ```ts
27
+ * editor.execute( 'insertImage', {
28
+ * source: [
29
+ * 'path/to/image.jpg',
30
+ * 'path/to/other-image.jpg'
31
+ * ]
32
+ * } );
33
+ * ```
34
+ *
35
+ * If you want to take the full control over the process, you can specify individual model attributes:
36
+ *
37
+ * ```ts
38
+ * editor.execute( 'insertImage', {
39
+ * source: [
40
+ * { src: 'path/to/image.jpg', alt: 'First alt text' },
41
+ * { src: 'path/to/other-image.jpg', alt: 'Second alt text', customAttribute: 'My attribute value' }
42
+ * ]
43
+ * } );
44
+ * ```
45
+ */
46
+ export default class InsertImageCommand extends Command {
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ constructor(editor) {
51
+ super(editor);
52
+ const configImageInsertType = editor.config.get('image.insert.type');
53
+ if (!editor.plugins.has('ImageBlockEditing')) {
54
+ if (configImageInsertType === 'block') {
55
+ /**
56
+ * The {@link module:image/imageblock~ImageBlock} plugin must be enabled to allow inserting block images. See
57
+ * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
58
+ *
59
+ * @error image-block-plugin-required
60
+ */
61
+ logWarning('image-block-plugin-required');
62
+ }
63
+ }
64
+ if (!editor.plugins.has('ImageInlineEditing')) {
65
+ if (configImageInsertType === 'inline') {
66
+ /**
67
+ * The {@link module:image/imageinline~ImageInline} plugin must be enabled to allow inserting inline images. See
68
+ * {@link module:image/imageconfig~ImageInsertConfig#type} to learn more.
69
+ *
70
+ * @error image-inline-plugin-required
71
+ */
72
+ logWarning('image-inline-plugin-required');
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * @inheritDoc
78
+ */
79
+ refresh() {
80
+ const imageUtils = this.editor.plugins.get('ImageUtils');
81
+ this.isEnabled = imageUtils.isImageAllowed();
82
+ }
83
+ /**
84
+ * Executes the command.
85
+ *
86
+ * @fires execute
87
+ * @param options Options for the executed command.
88
+ * @param options.source The image source or an array of image sources to insert.
89
+ * See the documentation of the command to learn more about accepted formats.
90
+ */
91
+ execute(options) {
92
+ const sourceDefinitions = toArray(options.source);
93
+ const selection = this.editor.model.document.selection;
94
+ const imageUtils = this.editor.plugins.get('ImageUtils');
95
+ // In case of multiple images, each image (starting from the 2nd) will be inserted at a position that
96
+ // follows the previous one. That will move the selection and, to stay on the safe side and make sure
97
+ // all images inherit the same selection attributes, they are collected beforehand.
98
+ //
99
+ // Applying these attributes ensures, for instance, that inserting an (inline) image into a link does
100
+ // not split that link but preserves its continuity.
101
+ //
102
+ // Note: Selection attributes that do not make sense for images will be filtered out by insertImage() anyway.
103
+ const selectionAttributes = Object.fromEntries(selection.getAttributes());
104
+ sourceDefinitions.forEach((sourceDefinition, index) => {
105
+ const selectedElement = selection.getSelectedElement();
106
+ if (typeof sourceDefinition === 'string') {
107
+ sourceDefinition = { src: sourceDefinition };
108
+ }
109
+ // Inserting of an inline image replace the selected element and make a selection on the inserted image.
110
+ // Therefore inserting multiple inline images requires creating position after each element.
111
+ if (index && selectedElement && imageUtils.isImage(selectedElement)) {
112
+ const position = this.editor.model.createPositionAfter(selectedElement);
113
+ imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position);
114
+ }
115
+ else {
116
+ imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes });
117
+ }
118
+ });
119
+ }
120
+ }
@@ -1,34 +1,51 @@
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 { Command } from 'ckeditor5/src/core';
6
- /**
7
- * @module image/image/replaceimagesourcecommand
8
- */
9
- /**
10
- * Replace image source command.
11
- *
12
- * Changes image source to the one provided. Can be executed as follows:
13
- *
14
- * ```ts
15
- * editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
16
- * ```
17
- */
18
- export default class ReplaceImageSourceCommand extends Command {
19
- value: string | null;
20
- /**
21
- * @inheritDoc
22
- */
23
- refresh(): void;
24
- /**
25
- * Executes the command.
26
- *
27
- * @fires execute
28
- * @param options Options for the executed command.
29
- * @param options.source The image source to replace.
30
- */
31
- execute(options: {
32
- source: string;
33
- }): void;
34
- }
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 { Command, type Editor } from 'ckeditor5/src/core';
6
+ import type { Writer, Element } from 'ckeditor5/src/engine';
7
+ /**
8
+ * @module image/image/replaceimagesourcecommand
9
+ */
10
+ /**
11
+ * Replace image source command.
12
+ *
13
+ * Changes image source to the one provided. Can be executed as follows:
14
+ *
15
+ * ```ts
16
+ * editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
17
+ * ```
18
+ */
19
+ export default class ReplaceImageSourceCommand extends Command {
20
+ value: string | null;
21
+ constructor(editor: Editor);
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ refresh(): void;
26
+ /**
27
+ * Executes the command.
28
+ *
29
+ * @fires execute
30
+ * @param options Options for the executed command.
31
+ * @param options.source The image source to replace.
32
+ */
33
+ execute(options: {
34
+ source: string;
35
+ }): void;
36
+ /**
37
+ * Cleanup image attributes that are not relevant to the new source.
38
+ *
39
+ * Removed attributes are: 'srcset', 'sizes', 'sources', 'width', 'height', 'alt'.
40
+ *
41
+ * This method is decorated, to allow custom cleanup logic.
42
+ * For example, to remove 'myImageId' attribute after 'src' has changed:
43
+ *
44
+ * ```ts
45
+ * replaceImageSourceCommand.on( 'cleanupImage', ( eventInfo, [ writer, image ] ) => {
46
+ * writer.removeAttribute( 'myImageId', image );
47
+ * } );
48
+ * ```
49
+ */
50
+ cleanupImage(writer: Writer, image: Element): void;
51
+ }
@@ -1,44 +1,75 @@
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 { Command } from 'ckeditor5/src/core';
6
- /**
7
- * @module image/image/replaceimagesourcecommand
8
- */
9
- /**
10
- * Replace image source command.
11
- *
12
- * Changes image source to the one provided. Can be executed as follows:
13
- *
14
- * ```ts
15
- * editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
16
- * ```
17
- */
18
- export default class ReplaceImageSourceCommand extends Command {
19
- /**
20
- * @inheritDoc
21
- */
22
- refresh() {
23
- const editor = this.editor;
24
- const imageUtils = editor.plugins.get('ImageUtils');
25
- const element = this.editor.model.document.selection.getSelectedElement();
26
- this.isEnabled = imageUtils.isImage(element);
27
- this.value = this.isEnabled ? element.getAttribute('src') : null;
28
- }
29
- /**
30
- * Executes the command.
31
- *
32
- * @fires execute
33
- * @param options Options for the executed command.
34
- * @param options.source The image source to replace.
35
- */
36
- execute(options) {
37
- const image = this.editor.model.document.selection.getSelectedElement();
38
- this.editor.model.change(writer => {
39
- writer.setAttribute('src', options.source, image);
40
- writer.removeAttribute('srcset', image);
41
- writer.removeAttribute('sizes', image);
42
- });
43
- }
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
+ import { Command } from 'ckeditor5/src/core';
6
+ /**
7
+ * @module image/image/replaceimagesourcecommand
8
+ */
9
+ /**
10
+ * Replace image source command.
11
+ *
12
+ * Changes image source to the one provided. Can be executed as follows:
13
+ *
14
+ * ```ts
15
+ * editor.execute( 'replaceImageSource', { source: 'http://url.to.the/image' } );
16
+ * ```
17
+ */
18
+ export default class ReplaceImageSourceCommand extends Command {
19
+ constructor(editor) {
20
+ super(editor);
21
+ this.decorate('cleanupImage');
22
+ }
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ refresh() {
27
+ const editor = this.editor;
28
+ const imageUtils = editor.plugins.get('ImageUtils');
29
+ const element = this.editor.model.document.selection.getSelectedElement();
30
+ this.isEnabled = imageUtils.isImage(element);
31
+ this.value = this.isEnabled ? element.getAttribute('src') : null;
32
+ }
33
+ /**
34
+ * Executes the command.
35
+ *
36
+ * @fires execute
37
+ * @param options Options for the executed command.
38
+ * @param options.source The image source to replace.
39
+ */
40
+ execute(options) {
41
+ const image = this.editor.model.document.selection.getSelectedElement();
42
+ const imageUtils = this.editor.plugins.get('ImageUtils');
43
+ this.editor.model.change(writer => {
44
+ writer.setAttribute('src', options.source, image);
45
+ this.cleanupImage(writer, image);
46
+ imageUtils.setImageNaturalSizeAttributes(image);
47
+ });
48
+ }
49
+ /**
50
+ * Cleanup image attributes that are not relevant to the new source.
51
+ *
52
+ * Removed attributes are: 'srcset', 'sizes', 'sources', 'width', 'height', 'alt'.
53
+ *
54
+ * This method is decorated, to allow custom cleanup logic.
55
+ * For example, to remove 'myImageId' attribute after 'src' has changed:
56
+ *
57
+ * ```ts
58
+ * replaceImageSourceCommand.on( 'cleanupImage', ( eventInfo, [ writer, image ] ) => {
59
+ * writer.removeAttribute( 'myImageId', image );
60
+ * } );
61
+ * ```
62
+ */
63
+ cleanupImage(writer, image) {
64
+ writer.removeAttribute('srcset', image);
65
+ writer.removeAttribute('sizes', image);
66
+ /**
67
+ * In case responsive images some attributes should be cleaned up.
68
+ * Check: https://github.com/ckeditor/ckeditor5/issues/15093
69
+ */
70
+ writer.removeAttribute('sources', image);
71
+ writer.removeAttribute('width', image);
72
+ writer.removeAttribute('height', image);
73
+ writer.removeAttribute('alt', image);
74
+ }
75
+ }
@@ -1,25 +1,25 @@
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/image/ui/utils
7
- */
8
- import type { PositionOptions } from 'ckeditor5/src/utils';
9
- import type { Editor } from 'ckeditor5/src/core';
10
- /**
11
- * A helper utility that positions the
12
- * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
13
- * with respect to the image in the editor content, if one is selected.
14
- *
15
- * @param editor The editor instance.
16
- */
17
- export declare function repositionContextualBalloon(editor: Editor): void;
18
- /**
19
- * Returns the positioning options that control the geometry of the
20
- * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
21
- * to the selected element in the editor content.
22
- *
23
- * @param editor The editor instance.
24
- */
25
- export declare function getBalloonPositionData(editor: Editor): Partial<PositionOptions>;
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/image/ui/utils
7
+ */
8
+ import type { PositionOptions } from 'ckeditor5/src/utils';
9
+ import type { Editor } from 'ckeditor5/src/core';
10
+ /**
11
+ * A helper utility that positions the
12
+ * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
13
+ * with respect to the image in the editor content, if one is selected.
14
+ *
15
+ * @param editor The editor instance.
16
+ */
17
+ export declare function repositionContextualBalloon(editor: Editor): void;
18
+ /**
19
+ * Returns the positioning options that control the geometry of the
20
+ * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
21
+ * to the selected element in the editor content.
22
+ *
23
+ * @param editor The editor instance.
24
+ */
25
+ export declare function getBalloonPositionData(editor: Editor): Partial<PositionOptions>;
@@ -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
- import { BalloonPanelView } from 'ckeditor5/src/ui';
6
- /**
7
- * A helper utility that positions the
8
- * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
9
- * with respect to the image in the editor content, if one is selected.
10
- *
11
- * @param editor The editor instance.
12
- */
13
- export function repositionContextualBalloon(editor) {
14
- const balloon = editor.plugins.get('ContextualBalloon');
15
- const imageUtils = editor.plugins.get('ImageUtils');
16
- if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {
17
- const position = getBalloonPositionData(editor);
18
- balloon.updatePosition(position);
19
- }
20
- }
21
- /**
22
- * Returns the positioning options that control the geometry of the
23
- * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
24
- * to the selected element in the editor content.
25
- *
26
- * @param editor The editor instance.
27
- */
28
- export function getBalloonPositionData(editor) {
29
- const editingView = editor.editing.view;
30
- const defaultPositions = BalloonPanelView.defaultPositions;
31
- const imageUtils = editor.plugins.get('ImageUtils');
32
- return {
33
- target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),
34
- positions: [
35
- defaultPositions.northArrowSouth,
36
- defaultPositions.northArrowSouthWest,
37
- defaultPositions.northArrowSouthEast,
38
- defaultPositions.southArrowNorth,
39
- defaultPositions.southArrowNorthWest,
40
- defaultPositions.southArrowNorthEast,
41
- defaultPositions.viewportStickyNorth
42
- ]
43
- };
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
+ import { BalloonPanelView } from 'ckeditor5/src/ui';
6
+ /**
7
+ * A helper utility that positions the
8
+ * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} instance
9
+ * with respect to the image in the editor content, if one is selected.
10
+ *
11
+ * @param editor The editor instance.
12
+ */
13
+ export function repositionContextualBalloon(editor) {
14
+ const balloon = editor.plugins.get('ContextualBalloon');
15
+ const imageUtils = editor.plugins.get('ImageUtils');
16
+ if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {
17
+ const position = getBalloonPositionData(editor);
18
+ balloon.updatePosition(position);
19
+ }
20
+ }
21
+ /**
22
+ * Returns the positioning options that control the geometry of the
23
+ * {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon} with respect
24
+ * to the selected element in the editor content.
25
+ *
26
+ * @param editor The editor instance.
27
+ */
28
+ export function getBalloonPositionData(editor) {
29
+ const editingView = editor.editing.view;
30
+ const defaultPositions = BalloonPanelView.defaultPositions;
31
+ const imageUtils = editor.plugins.get('ImageUtils');
32
+ return {
33
+ target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),
34
+ positions: [
35
+ defaultPositions.northArrowSouth,
36
+ defaultPositions.northArrowSouthWest,
37
+ defaultPositions.northArrowSouthEast,
38
+ defaultPositions.southArrowNorth,
39
+ defaultPositions.southArrowNorthWest,
40
+ defaultPositions.southArrowNorthEast,
41
+ defaultPositions.viewportStickyNorth
42
+ ]
43
+ };
44
+ }