@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,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,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
- /**
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 ImageInsertUI from './imageinsert/imageinsertui';
13
+ import '../theme/image.css';
14
+ /**
15
+ * The image inline plugin.
16
+ *
17
+ * This is a "glue" plugin which loads the following plugins:
18
+ *
19
+ * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
20
+ * * {@link module:image/imagetextalternative~ImageTextAlternative}.
21
+ *
22
+ * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
23
+ * for more information.
24
+ */
25
+ export default class ImageInline extends Plugin {
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires(): readonly [typeof ImageInlineEditing, typeof Widget, typeof ImageTextAlternative, typeof ImageInsertUI];
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ static get pluginName(): "ImageInline";
34
+ }
@@ -1,37 +1,38 @@
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 ImageInsertUI from './imageinsert/imageinsertui';
13
+ import '../theme/image.css';
14
+ /**
15
+ * The image inline plugin.
16
+ *
17
+ * This is a "glue" plugin which loads the following plugins:
18
+ *
19
+ * * {@link module:image/image/imageinlineediting~ImageInlineEditing},
20
+ * * {@link module:image/imagetextalternative~ImageTextAlternative}.
21
+ *
22
+ * Usually, it is used in conjunction with other plugins from this package. See the {@glink api/image package page}
23
+ * for more information.
24
+ */
25
+ export default class ImageInline extends Plugin {
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires() {
30
+ return [ImageInlineEditing, Widget, ImageTextAlternative, ImageInsertUI];
31
+ }
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ static get pluginName() {
36
+ return 'ImageInline';
37
+ }
38
+ }
@@ -1,44 +1,72 @@
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, type Editor } from 'ckeditor5/src/core';
9
+ import { type Observable } from 'ckeditor5/src/utils';
10
+ import { type ButtonView, type DropdownView, type FocusableView } from 'ckeditor5/src/ui';
11
+ import ImageUtils from '../imageutils';
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(): "ImageInsertUI";
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires(): readonly [typeof ImageUtils];
30
+ /**
31
+ * The dropdown view responsible for displaying the image insert UI.
32
+ */
33
+ dropdownView?: DropdownView;
34
+ /**
35
+ * Observable property used to alter labels while some image is selected and when it is not.
36
+ *
37
+ * @observable
38
+ */
39
+ isImageSelected: boolean;
40
+ /**
41
+ * Registered integrations map.
42
+ */
43
+ private _integrations;
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ constructor(editor: Editor);
48
+ /**
49
+ * @inheritDoc
50
+ */
51
+ init(): void;
52
+ /**
53
+ * Registers the insert image dropdown integration.
54
+ */
55
+ registerIntegration({ name, observable, buttonViewCreator, formViewCreator, requiresForm }: {
56
+ name: string;
57
+ observable: Observable & {
58
+ isEnabled: boolean;
59
+ };
60
+ buttonViewCreator: (isOnlyOne: boolean) => ButtonView;
61
+ formViewCreator: (isOnlyOne: boolean) => FocusableView;
62
+ requiresForm?: boolean;
63
+ }): void;
64
+ /**
65
+ * Creates the toolbar component.
66
+ */
67
+ private _createToolbarComponent;
68
+ /**
69
+ * Validates the integrations list.
70
+ */
71
+ private _prepareIntegrations;
72
+ }
@@ -1,141 +1,174 @@
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 } from 'ckeditor5/src/core';
9
+ import { logWarning } from 'ckeditor5/src/utils';
10
+ import { createDropdown, SplitButtonView } from 'ckeditor5/src/ui';
11
+ import ImageInsertFormView from './ui/imageinsertformview';
12
+ import ImageUtils from '../imageutils';
13
+ /**
14
+ * The image insert dropdown plugin.
15
+ *
16
+ * For a detailed overview, check the {@glink features/images/image-upload/image-upload Image upload feature}
17
+ * and {@glink features/images/images-inserting Insert images via source URL} documentation.
18
+ *
19
+ * Adds the `'insertImage'` dropdown to the {@link module:ui/componentfactory~ComponentFactory UI component factory}
20
+ * and also the `imageInsert` dropdown as an alias for backward compatibility.
21
+ */
22
+ export default class ImageInsertUI extends Plugin {
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ static get pluginName() {
27
+ return 'ImageInsertUI';
28
+ }
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get requires() {
33
+ return [ImageUtils];
34
+ }
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ constructor(editor) {
39
+ super(editor);
40
+ /**
41
+ * Registered integrations map.
42
+ */
43
+ this._integrations = new Map();
44
+ editor.config.define('image.insert.integrations', [
45
+ 'upload',
46
+ 'assetManager',
47
+ 'url'
48
+ ]);
49
+ }
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ init() {
54
+ const editor = this.editor;
55
+ const selection = editor.model.document.selection;
56
+ const imageUtils = editor.plugins.get('ImageUtils');
57
+ this.set('isImageSelected', false);
58
+ this.listenTo(editor.model.document, 'change', () => {
59
+ this.isImageSelected = imageUtils.isImage(selection.getSelectedElement());
60
+ });
61
+ const componentCreator = (locale) => this._createToolbarComponent(locale);
62
+ // Register `insertImage` dropdown and add `imageInsert` dropdown as an alias for backward compatibility.
63
+ editor.ui.componentFactory.add('insertImage', componentCreator);
64
+ editor.ui.componentFactory.add('imageInsert', componentCreator);
65
+ }
66
+ /**
67
+ * Registers the insert image dropdown integration.
68
+ */
69
+ registerIntegration({ name, observable, buttonViewCreator, formViewCreator, requiresForm }) {
70
+ if (this._integrations.has(name)) {
71
+ /**
72
+ * There are two insert-image integrations registered with the same name.
73
+ *
74
+ * Make sure that you do not load multiple asset manager plugins.
75
+ *
76
+ * @error image-insert-integration-exists
77
+ */
78
+ logWarning('image-insert-integration-exists', { name });
79
+ }
80
+ this._integrations.set(name, {
81
+ observable,
82
+ buttonViewCreator,
83
+ formViewCreator,
84
+ requiresForm: !!requiresForm
85
+ });
86
+ }
87
+ /**
88
+ * Creates the toolbar component.
89
+ */
90
+ _createToolbarComponent(locale) {
91
+ const editor = this.editor;
92
+ const t = locale.t;
93
+ const integrations = this._prepareIntegrations();
94
+ if (!integrations.length) {
95
+ return null;
96
+ }
97
+ let dropdownButton;
98
+ const firstIntegration = integrations[0];
99
+ if (integrations.length == 1) {
100
+ // Do not use dropdown for a single integration button (integration that does not require form view).
101
+ if (!firstIntegration.requiresForm) {
102
+ return firstIntegration.buttonViewCreator(true);
103
+ }
104
+ dropdownButton = firstIntegration.buttonViewCreator(true);
105
+ }
106
+ else {
107
+ const actionButton = firstIntegration.buttonViewCreator(false);
108
+ dropdownButton = new SplitButtonView(locale, actionButton);
109
+ dropdownButton.tooltip = true;
110
+ dropdownButton.bind('label').to(this, 'isImageSelected', isImageSelected => isImageSelected ?
111
+ t('Replace image') :
112
+ t('Insert image'));
113
+ }
114
+ const dropdownView = this.dropdownView = createDropdown(locale, dropdownButton);
115
+ const observables = integrations.map(({ observable }) => observable);
116
+ dropdownView.bind('isEnabled').toMany(observables, 'isEnabled', (...isEnabled) => (isEnabled.some(isEnabled => isEnabled)));
117
+ dropdownView.once('change:isOpen', () => {
118
+ const integrationViews = integrations.map(({ formViewCreator }) => formViewCreator(integrations.length == 1));
119
+ const imageInsertFormView = new ImageInsertFormView(editor.locale, integrationViews);
120
+ dropdownView.panelView.children.add(imageInsertFormView);
121
+ });
122
+ return dropdownView;
123
+ }
124
+ /**
125
+ * Validates the integrations list.
126
+ */
127
+ _prepareIntegrations() {
128
+ const editor = this.editor;
129
+ const items = editor.config.get('image.insert.integrations');
130
+ const result = [];
131
+ if (!items.length) {
132
+ /**
133
+ * The insert image feature requires a list of integrations to be provided in the editor configuration.
134
+ *
135
+ * The default list of integrations is `upload`, `assetManager`, `url`. Those integrations are included
136
+ * in the insert image dropdown if the given feature plugin is loaded. You should omit the `integrations`
137
+ * configuration key to use the default set or provide a selected list of integrations that should be used.
138
+ *
139
+ * @error image-insert-integrations-not-specified
140
+ */
141
+ logWarning('image-insert-integrations-not-specified');
142
+ return result;
143
+ }
144
+ for (const item of items) {
145
+ if (!this._integrations.has(item)) {
146
+ if (!['upload', 'assetManager', 'url'].includes(item)) {
147
+ /**
148
+ * The specified insert image integration name is unknown or the providing plugin is not loaded in the editor.
149
+ *
150
+ * @error image-insert-unknown-integration
151
+ */
152
+ logWarning('image-insert-unknown-integration', { item });
153
+ }
154
+ continue;
155
+ }
156
+ result.push(this._integrations.get(item));
157
+ }
158
+ if (!result.length) {
159
+ /**
160
+ * The image insert feature requires integrations to be registered by separate features.
161
+ *
162
+ * The `insertImage` toolbar button requires integrations to be registered by other features.
163
+ * For example {@link module:image/imageupload~ImageUpload ImageUpload},
164
+ * {@link module:image/imageinsert~ImageInsert ImageInsert},
165
+ * {@link module:image/imageinsertviaurl~ImageInsertViaUrl ImageInsertViaUrl},
166
+ * {@link module:ckbox/ckbox~CKBox CKBox}
167
+ *
168
+ * @error image-insert-integrations-not-registered
169
+ */
170
+ logWarning('image-insert-integrations-not-registered');
171
+ }
172
+ return result;
173
+ }
174
+ }
@@ -0,0 +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/imageinsertviaurlui
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import ImageInsertUI from './imageinsertui';
10
+ /**
11
+ * The image insert via URL plugin (UI part).
12
+ *
13
+ * For a detailed overview, check the {@glink features/images/images-inserting
14
+ * Insert images via source URL} documentation.
15
+ *
16
+ * This plugin registers the {@link module:image/imageinsert/imageinsertui~ImageInsertUI} integration for `url`.
17
+ */
18
+ export default class ImageInsertViaUrlUI extends Plugin {
19
+ private _imageInsertUI;
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ static get pluginName(): "ImageInsertViaUrlUI";
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ static get requires(): readonly [typeof ImageInsertUI];
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ init(): void;
32
+ /**
33
+ * Creates the view displayed in the dropdown.
34
+ */
35
+ private _createInsertUrlView;
36
+ /**
37
+ * Creates the toolbar button.
38
+ */
39
+ private _createInsertUrlButton;
40
+ /**
41
+ * Closes the dropdown.
42
+ */
43
+ private _closePanel;
44
+ }