@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,64 +1,64 @@
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/utils
7
- */
8
- import type { DocumentSelection, MatcherPattern, Schema, Selection, ViewContainerElement, DowncastWriter, ViewElement } from 'ckeditor5/src/engine';
9
- import type { Editor } from 'ckeditor5/src/core';
10
- /**
11
- * Creates a view element representing the inline image.
12
- *
13
- * ```html
14
- * <span class="image-inline"><img></img></span>
15
- * ```
16
- *
17
- * Note that `alt` and `src` attributes are converted separately, so they are not included.
18
- *
19
- * @internal
20
- */
21
- export declare function createInlineImageViewElement(writer: DowncastWriter): ViewContainerElement;
22
- /**
23
- * Creates a view element representing the block image.
24
- *
25
- * ```html
26
- * <figure class="image"><img></img></figure>
27
- * ```
28
- *
29
- * Note that `alt` and `src` attributes are converted separately, so they are not included.
30
- *
31
- * @internal
32
- */
33
- export declare function createBlockImageViewElement(writer: DowncastWriter): ViewContainerElement;
34
- /**
35
- * A function returning a `MatcherPattern` for a particular type of View images.
36
- *
37
- * @internal
38
- * @param matchImageType The type of created image.
39
- */
40
- export declare function getImgViewElementMatcher(editor: Editor, matchImageType: 'imageBlock' | 'imageInline'): MatcherPattern;
41
- /**
42
- * Considering the current model selection, it returns the name of the model image element
43
- * (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
44
- * image was inserted (also: uploaded, dropped, pasted) at that selection.
45
- *
46
- * The assumption is that inserting images into empty blocks or on other block widgets should
47
- * produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
48
- * that already contain some text.
49
- *
50
- * @internal
51
- */
52
- export declare function determineImageTypeForInsertionAtSelection(schema: Schema, selection: Selection | DocumentSelection): 'imageBlock' | 'imageInline';
53
- /**
54
- * Returns parsed value of the size, but only if it contains unit: px.
55
- */
56
- export declare function getSizeValueIfInPx(size: string | undefined): number | null;
57
- /**
58
- * Returns true if both styles (width and height) are set.
59
- *
60
- * If both image styles: width & height are set, they will override the image width & height attributes in the
61
- * browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.
62
- * That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.
63
- */
64
- export declare function widthAndHeightStylesAreBothSet(viewElement: ViewElement): boolean;
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/utils
7
+ */
8
+ import type { DocumentSelection, MatcherPattern, Schema, Selection, ViewContainerElement, DowncastWriter, ViewElement } from 'ckeditor5/src/engine';
9
+ import type { Editor } from 'ckeditor5/src/core';
10
+ /**
11
+ * Creates a view element representing the inline image.
12
+ *
13
+ * ```html
14
+ * <span class="image-inline"><img></img></span>
15
+ * ```
16
+ *
17
+ * Note that `alt` and `src` attributes are converted separately, so they are not included.
18
+ *
19
+ * @internal
20
+ */
21
+ export declare function createInlineImageViewElement(writer: DowncastWriter): ViewContainerElement;
22
+ /**
23
+ * Creates a view element representing the block image.
24
+ *
25
+ * ```html
26
+ * <figure class="image"><img></img></figure>
27
+ * ```
28
+ *
29
+ * Note that `alt` and `src` attributes are converted separately, so they are not included.
30
+ *
31
+ * @internal
32
+ */
33
+ export declare function createBlockImageViewElement(writer: DowncastWriter): ViewContainerElement;
34
+ /**
35
+ * A function returning a `MatcherPattern` for a particular type of View images.
36
+ *
37
+ * @internal
38
+ * @param matchImageType The type of created image.
39
+ */
40
+ export declare function getImgViewElementMatcher(editor: Editor, matchImageType: 'imageBlock' | 'imageInline'): MatcherPattern;
41
+ /**
42
+ * Considering the current model selection, it returns the name of the model image element
43
+ * (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
44
+ * image was inserted (also: uploaded, dropped, pasted) at that selection.
45
+ *
46
+ * The assumption is that inserting images into empty blocks or on other block widgets should
47
+ * produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
48
+ * that already contain some text.
49
+ *
50
+ * @internal
51
+ */
52
+ export declare function determineImageTypeForInsertionAtSelection(schema: Schema, selection: Selection | DocumentSelection): 'imageBlock' | 'imageInline';
53
+ /**
54
+ * Returns parsed value of the size, but only if it contains unit: px.
55
+ */
56
+ export declare function getSizeValueIfInPx(size: string | undefined): number | null;
57
+ /**
58
+ * Returns true if both styles (width and height) are set.
59
+ *
60
+ * If both image styles: width & height are set, they will override the image width & height attributes in the
61
+ * browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.
62
+ * That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.
63
+ */
64
+ export declare function widthAndHeightStylesAreBothSet(viewElement: ViewElement): boolean;
@@ -1,121 +1,121 @@
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 { first } from 'ckeditor5/src/utils';
6
- /**
7
- * Creates a view element representing the inline image.
8
- *
9
- * ```html
10
- * <span class="image-inline"><img></img></span>
11
- * ```
12
- *
13
- * Note that `alt` and `src` attributes are converted separately, so they are not included.
14
- *
15
- * @internal
16
- */
17
- export function createInlineImageViewElement(writer) {
18
- return writer.createContainerElement('span', { class: 'image-inline' }, writer.createEmptyElement('img'));
19
- }
20
- /**
21
- * Creates a view element representing the block image.
22
- *
23
- * ```html
24
- * <figure class="image"><img></img></figure>
25
- * ```
26
- *
27
- * Note that `alt` and `src` attributes are converted separately, so they are not included.
28
- *
29
- * @internal
30
- */
31
- export function createBlockImageViewElement(writer) {
32
- return writer.createContainerElement('figure', { class: 'image' }, [
33
- writer.createEmptyElement('img'),
34
- writer.createSlot('children')
35
- ]);
36
- }
37
- /**
38
- * A function returning a `MatcherPattern` for a particular type of View images.
39
- *
40
- * @internal
41
- * @param matchImageType The type of created image.
42
- */
43
- export function getImgViewElementMatcher(editor, matchImageType) {
44
- const imageUtils = editor.plugins.get('ImageUtils');
45
- const areBothImagePluginsLoaded = editor.plugins.has('ImageInlineEditing') && editor.plugins.has('ImageBlockEditing');
46
- return element => {
47
- // Check if the matched view element is an <img>.
48
- if (!imageUtils.isInlineImageView(element)) {
49
- return null;
50
- }
51
- // If just one of the plugins is loaded (block or inline), it will match all kinds of images.
52
- if (!areBothImagePluginsLoaded) {
53
- return getPositiveMatchPattern(element);
54
- }
55
- // The <img> can be standalone, wrapped in <figure>...</figure> (ImageBlock plugin) or
56
- // wrapped in <figure><a>...</a></figure> (LinkImage plugin).
57
- const imageType = element.getStyle('display') == 'block' || element.findAncestor(imageUtils.isBlockImageView) ?
58
- 'imageBlock' :
59
- 'imageInline';
60
- if (imageType !== matchImageType) {
61
- return null;
62
- }
63
- return getPositiveMatchPattern(element);
64
- };
65
- function getPositiveMatchPattern(element) {
66
- const pattern = {
67
- name: true
68
- };
69
- // This will trigger src consumption (See https://github.com/ckeditor/ckeditor5/issues/11530).
70
- if (element.hasAttribute('src')) {
71
- pattern.attributes = ['src'];
72
- }
73
- return pattern;
74
- }
75
- }
76
- /**
77
- * Considering the current model selection, it returns the name of the model image element
78
- * (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
79
- * image was inserted (also: uploaded, dropped, pasted) at that selection.
80
- *
81
- * The assumption is that inserting images into empty blocks or on other block widgets should
82
- * produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
83
- * that already contain some text.
84
- *
85
- * @internal
86
- */
87
- export function determineImageTypeForInsertionAtSelection(schema, selection) {
88
- const firstBlock = first(selection.getSelectedBlocks());
89
- // Insert a block image if the selection is not in/on block elements or it's on a block widget.
90
- if (!firstBlock || schema.isObject(firstBlock)) {
91
- return 'imageBlock';
92
- }
93
- // A block image should also be inserted into an empty block element
94
- // (that is not an empty list item so the list won't get split).
95
- if (firstBlock.isEmpty && firstBlock.name != 'listItem') {
96
- return 'imageBlock';
97
- }
98
- // Otherwise insert an inline image.
99
- return 'imageInline';
100
- }
101
- /**
102
- * Returns parsed value of the size, but only if it contains unit: px.
103
- */
104
- export function getSizeValueIfInPx(size) {
105
- if (size && size.endsWith('px')) {
106
- return parseInt(size);
107
- }
108
- return null;
109
- }
110
- /**
111
- * Returns true if both styles (width and height) are set.
112
- *
113
- * If both image styles: width & height are set, they will override the image width & height attributes in the
114
- * browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.
115
- * That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.
116
- */
117
- export function widthAndHeightStylesAreBothSet(viewElement) {
118
- const widthStyle = getSizeValueIfInPx(viewElement.getStyle('width'));
119
- const heightStyle = getSizeValueIfInPx(viewElement.getStyle('height'));
120
- return !!(widthStyle && heightStyle);
121
- }
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 { first } from 'ckeditor5/src/utils';
6
+ /**
7
+ * Creates a view element representing the inline image.
8
+ *
9
+ * ```html
10
+ * <span class="image-inline"><img></img></span>
11
+ * ```
12
+ *
13
+ * Note that `alt` and `src` attributes are converted separately, so they are not included.
14
+ *
15
+ * @internal
16
+ */
17
+ export function createInlineImageViewElement(writer) {
18
+ return writer.createContainerElement('span', { class: 'image-inline' }, writer.createEmptyElement('img'));
19
+ }
20
+ /**
21
+ * Creates a view element representing the block image.
22
+ *
23
+ * ```html
24
+ * <figure class="image"><img></img></figure>
25
+ * ```
26
+ *
27
+ * Note that `alt` and `src` attributes are converted separately, so they are not included.
28
+ *
29
+ * @internal
30
+ */
31
+ export function createBlockImageViewElement(writer) {
32
+ return writer.createContainerElement('figure', { class: 'image' }, [
33
+ writer.createEmptyElement('img'),
34
+ writer.createSlot('children')
35
+ ]);
36
+ }
37
+ /**
38
+ * A function returning a `MatcherPattern` for a particular type of View images.
39
+ *
40
+ * @internal
41
+ * @param matchImageType The type of created image.
42
+ */
43
+ export function getImgViewElementMatcher(editor, matchImageType) {
44
+ const imageUtils = editor.plugins.get('ImageUtils');
45
+ const areBothImagePluginsLoaded = editor.plugins.has('ImageInlineEditing') && editor.plugins.has('ImageBlockEditing');
46
+ return element => {
47
+ // Check if the matched view element is an <img>.
48
+ if (!imageUtils.isInlineImageView(element)) {
49
+ return null;
50
+ }
51
+ // If just one of the plugins is loaded (block or inline), it will match all kinds of images.
52
+ if (!areBothImagePluginsLoaded) {
53
+ return getPositiveMatchPattern(element);
54
+ }
55
+ // The <img> can be standalone, wrapped in <figure>...</figure> (ImageBlock plugin) or
56
+ // wrapped in <figure><a>...</a></figure> (LinkImage plugin).
57
+ const imageType = element.getStyle('display') == 'block' || element.findAncestor(imageUtils.isBlockImageView) ?
58
+ 'imageBlock' :
59
+ 'imageInline';
60
+ if (imageType !== matchImageType) {
61
+ return null;
62
+ }
63
+ return getPositiveMatchPattern(element);
64
+ };
65
+ function getPositiveMatchPattern(element) {
66
+ const pattern = {
67
+ name: true
68
+ };
69
+ // This will trigger src consumption (See https://github.com/ckeditor/ckeditor5/issues/11530).
70
+ if (element.hasAttribute('src')) {
71
+ pattern.attributes = ['src'];
72
+ }
73
+ return pattern;
74
+ }
75
+ }
76
+ /**
77
+ * Considering the current model selection, it returns the name of the model image element
78
+ * (`'imageBlock'` or `'imageInline'`) that will make most sense from the UX perspective if a new
79
+ * image was inserted (also: uploaded, dropped, pasted) at that selection.
80
+ *
81
+ * The assumption is that inserting images into empty blocks or on other block widgets should
82
+ * produce block images. Inline images should be inserted in other cases, e.g. in paragraphs
83
+ * that already contain some text.
84
+ *
85
+ * @internal
86
+ */
87
+ export function determineImageTypeForInsertionAtSelection(schema, selection) {
88
+ const firstBlock = first(selection.getSelectedBlocks());
89
+ // Insert a block image if the selection is not in/on block elements or it's on a block widget.
90
+ if (!firstBlock || schema.isObject(firstBlock)) {
91
+ return 'imageBlock';
92
+ }
93
+ // A block image should also be inserted into an empty block element
94
+ // (that is not an empty list item so the list won't get split).
95
+ if (firstBlock.isEmpty && firstBlock.name != 'listItem') {
96
+ return 'imageBlock';
97
+ }
98
+ // Otherwise insert an inline image.
99
+ return 'imageInline';
100
+ }
101
+ /**
102
+ * Returns parsed value of the size, but only if it contains unit: px.
103
+ */
104
+ export function getSizeValueIfInPx(size) {
105
+ if (size && size.endsWith('px')) {
106
+ return parseInt(size);
107
+ }
108
+ return null;
109
+ }
110
+ /**
111
+ * Returns true if both styles (width and height) are set.
112
+ *
113
+ * If both image styles: width & height are set, they will override the image width & height attributes in the
114
+ * browser. In this case, the image looks the same as if these styles were applied to attributes instead of styles.
115
+ * That's why we can upcast these styles to width & height attributes instead of resizedWidth and resizedHeight.
116
+ */
117
+ export function widthAndHeightStylesAreBothSet(viewElement) {
118
+ const widthStyle = getSizeValueIfInPx(viewElement.getStyle('width'));
119
+ const heightStyle = getSizeValueIfInPx(viewElement.getStyle('height'));
120
+ return !!(widthStyle && heightStyle);
121
+ }
package/src/image.d.ts CHANGED
@@ -1,34 +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/image
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import ImageBlock from './imageblock';
10
- import ImageInline from './imageinline';
11
- import '../theme/image.css';
12
- /**
13
- * The image plugin.
14
- *
15
- * For a detailed overview, check the {@glink features/images/images-overview image feature} documentation.
16
- *
17
- * This is a "glue" plugin which loads the following plugins:
18
- *
19
- * * {@link module:image/imageblock~ImageBlock},
20
- * * {@link module:image/imageinline~ImageInline},
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 Image extends Plugin {
26
- /**
27
- * @inheritDoc
28
- */
29
- static get requires(): readonly [typeof ImageBlock, typeof ImageInline];
30
- /**
31
- * @inheritDoc
32
- */
33
- static get pluginName(): "Image";
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/image
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import ImageBlock from './imageblock';
10
+ import ImageInline from './imageinline';
11
+ import '../theme/image.css';
12
+ /**
13
+ * The image plugin.
14
+ *
15
+ * For a detailed overview, check the {@glink features/images/images-overview image feature} documentation.
16
+ *
17
+ * This is a "glue" plugin which loads the following plugins:
18
+ *
19
+ * * {@link module:image/imageblock~ImageBlock},
20
+ * * {@link module:image/imageinline~ImageInline},
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 Image extends Plugin {
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires(): readonly [typeof ImageBlock, typeof ImageInline];
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ static get pluginName(): "Image";
34
+ }
package/src/image.js CHANGED
@@ -1,38 +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/image
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import ImageBlock from './imageblock';
10
- import ImageInline from './imageinline';
11
- import '../theme/image.css';
12
- /**
13
- * The image plugin.
14
- *
15
- * For a detailed overview, check the {@glink features/images/images-overview image feature} documentation.
16
- *
17
- * This is a "glue" plugin which loads the following plugins:
18
- *
19
- * * {@link module:image/imageblock~ImageBlock},
20
- * * {@link module:image/imageinline~ImageInline},
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 Image extends Plugin {
26
- /**
27
- * @inheritDoc
28
- */
29
- static get requires() {
30
- return [ImageBlock, ImageInline];
31
- }
32
- /**
33
- * @inheritDoc
34
- */
35
- static get pluginName() {
36
- return 'Image';
37
- }
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/image
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import ImageBlock from './imageblock';
10
+ import ImageInline from './imageinline';
11
+ import '../theme/image.css';
12
+ /**
13
+ * The image plugin.
14
+ *
15
+ * For a detailed overview, check the {@glink features/images/images-overview image feature} documentation.
16
+ *
17
+ * This is a "glue" plugin which loads the following plugins:
18
+ *
19
+ * * {@link module:image/imageblock~ImageBlock},
20
+ * * {@link module:image/imageinline~ImageInline},
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 Image extends Plugin {
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires() {
30
+ return [ImageBlock, ImageInline];
31
+ }
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ static get pluginName() {
36
+ return 'Image';
37
+ }
38
+ }
@@ -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/imageblock
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { Widget } from 'ckeditor5/src/widget';
10
- import ImageTextAlternative from './imagetextalternative';
11
- import ImageBlockEditing from './image/imageblockediting';
12
- import '../theme/image.css';
13
- /**
14
- * The image block plugin.
15
- *
16
- * This is a "glue" plugin which loads the following plugins:
17
- *
18
- * * {@link module:image/image/imageblockediting~ImageBlockEditing},
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 ImageBlock extends Plugin {
25
- /**
26
- * @inheritDoc
27
- */
28
- static get requires(): readonly [typeof ImageBlockEditing, typeof Widget, typeof ImageTextAlternative];
29
- /**
30
- * @inheritDoc
31
- */
32
- static get pluginName(): "ImageBlock";
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/imageblock
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { Widget } from 'ckeditor5/src/widget';
10
+ import ImageTextAlternative from './imagetextalternative';
11
+ import ImageBlockEditing from './image/imageblockediting';
12
+ import ImageInsertUI from './imageinsert/imageinsertui';
13
+ import '../theme/image.css';
14
+ /**
15
+ * The image block plugin.
16
+ *
17
+ * This is a "glue" plugin which loads the following plugins:
18
+ *
19
+ * * {@link module:image/image/imageblockediting~ImageBlockEditing},
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 ImageBlock extends Plugin {
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get requires(): readonly [typeof ImageBlockEditing, typeof Widget, typeof ImageTextAlternative, typeof ImageInsertUI];
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ static get pluginName(): "ImageBlock";
34
+ }