@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,143 +1,142 @@
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/imagesizeattributes
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import ImageUtils from './imageutils';
10
- import { widthAndHeightStylesAreBothSet, getSizeValueIfInPx } from './image/utils';
11
- /**
12
- * This plugin enables `width` and `height` attributes in inline and block image elements.
13
- */
14
- export default class ImageSizeAttributes extends Plugin {
15
- /**
16
- * @inheritDoc
17
- */
18
- static get requires() {
19
- return [ImageUtils];
20
- }
21
- /**
22
- * @inheritDoc
23
- */
24
- static get pluginName() {
25
- return 'ImageSizeAttributes';
26
- }
27
- /**
28
- * @inheritDoc
29
- */
30
- afterInit() {
31
- this._registerSchema();
32
- this._registerConverters('imageBlock');
33
- this._registerConverters('imageInline');
34
- }
35
- /**
36
- * Registers the `width` and `height` attributes for inline and block images.
37
- */
38
- _registerSchema() {
39
- if (this.editor.plugins.has('ImageBlockEditing')) {
40
- this.editor.model.schema.extend('imageBlock', { allowAttributes: ['width', 'height'] });
41
- }
42
- if (this.editor.plugins.has('ImageInlineEditing')) {
43
- this.editor.model.schema.extend('imageInline', { allowAttributes: ['width', 'height'] });
44
- }
45
- }
46
- /**
47
- * Registers converters for `width` and `height` attributes.
48
- */
49
- _registerConverters(imageType) {
50
- const editor = this.editor;
51
- const imageUtils = editor.plugins.get('ImageUtils');
52
- const viewElementName = imageType === 'imageBlock' ? 'figure' : 'img';
53
- editor.conversion.for('upcast')
54
- .attributeToAttribute({
55
- view: {
56
- name: viewElementName,
57
- styles: {
58
- width: /.+/
59
- }
60
- },
61
- model: {
62
- key: 'width',
63
- value: (viewElement) => {
64
- if (widthAndHeightStylesAreBothSet(viewElement)) {
65
- return getSizeValueIfInPx(viewElement.getStyle('width'));
66
- }
67
- return null;
68
- }
69
- }
70
- })
71
- .attributeToAttribute({
72
- view: {
73
- name: viewElementName,
74
- key: 'width'
75
- },
76
- model: 'width'
77
- })
78
- .attributeToAttribute({
79
- view: {
80
- name: viewElementName,
81
- styles: {
82
- height: /.+/
83
- }
84
- },
85
- model: {
86
- key: 'height',
87
- value: (viewElement) => {
88
- if (widthAndHeightStylesAreBothSet(viewElement)) {
89
- return getSizeValueIfInPx(viewElement.getStyle('height'));
90
- }
91
- return null;
92
- }
93
- }
94
- })
95
- .attributeToAttribute({
96
- view: {
97
- name: viewElementName,
98
- key: 'height'
99
- },
100
- model: 'height'
101
- });
102
- // Dedicated converters to propagate attributes to the <img> element.
103
- editor.conversion.for('editingDowncast').add(dispatcher => {
104
- attachDowncastConverter(dispatcher, 'width', 'width', true);
105
- attachDowncastConverter(dispatcher, 'height', 'height', true);
106
- });
107
- editor.conversion.for('dataDowncast').add(dispatcher => {
108
- attachDowncastConverter(dispatcher, 'width', 'width', false);
109
- attachDowncastConverter(dispatcher, 'height', 'height', false);
110
- });
111
- function attachDowncastConverter(dispatcher, modelAttributeName, viewAttributeName, setRatioForInlineImage) {
112
- dispatcher.on(`attribute:${modelAttributeName}:${imageType}`, (evt, data, conversionApi) => {
113
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
114
- return;
115
- }
116
- const viewWriter = conversionApi.writer;
117
- const viewElement = conversionApi.mapper.toViewElement(data.item);
118
- const img = imageUtils.findViewImgElement(viewElement);
119
- if (data.attributeNewValue !== null) {
120
- viewWriter.setAttribute(viewAttributeName, data.attributeNewValue, img);
121
- }
122
- else {
123
- viewWriter.removeAttribute(viewAttributeName, img);
124
- }
125
- // Do not set aspect-ratio for pictures. See https://github.com/ckeditor/ckeditor5/issues/14579.
126
- if (data.item.hasAttribute('sources')) {
127
- return;
128
- }
129
- const isResized = data.item.hasAttribute('resizedWidth');
130
- // Do not set aspect ratio for inline images which are not resized (data pipeline).
131
- if (imageType === 'imageInline' && !isResized && !setRatioForInlineImage) {
132
- return;
133
- }
134
- const width = data.item.getAttribute('width');
135
- const height = data.item.getAttribute('height');
136
- const aspectRatio = img.getStyle('aspect-ratio');
137
- if (width && height && !aspectRatio) {
138
- viewWriter.setStyle('aspect-ratio', `${width}/${height}`, img);
139
- }
140
- });
141
- }
142
- }
143
- }
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/imagesizeattributes
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import ImageUtils from './imageutils';
10
+ import { widthAndHeightStylesAreBothSet, getSizeValueIfInPx } from './image/utils';
11
+ /**
12
+ * This plugin enables `width` and `height` attributes in inline and block image elements.
13
+ */
14
+ export default class ImageSizeAttributes extends Plugin {
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static get requires() {
19
+ return [ImageUtils];
20
+ }
21
+ /**
22
+ * @inheritDoc
23
+ */
24
+ static get pluginName() {
25
+ return 'ImageSizeAttributes';
26
+ }
27
+ /**
28
+ * @inheritDoc
29
+ */
30
+ afterInit() {
31
+ this._registerSchema();
32
+ this._registerConverters('imageBlock');
33
+ this._registerConverters('imageInline');
34
+ }
35
+ /**
36
+ * Registers the `width` and `height` attributes for inline and block images.
37
+ */
38
+ _registerSchema() {
39
+ if (this.editor.plugins.has('ImageBlockEditing')) {
40
+ this.editor.model.schema.extend('imageBlock', { allowAttributes: ['width', 'height'] });
41
+ }
42
+ if (this.editor.plugins.has('ImageInlineEditing')) {
43
+ this.editor.model.schema.extend('imageInline', { allowAttributes: ['width', 'height'] });
44
+ }
45
+ }
46
+ /**
47
+ * Registers converters for `width` and `height` attributes.
48
+ */
49
+ _registerConverters(imageType) {
50
+ const editor = this.editor;
51
+ const imageUtils = editor.plugins.get('ImageUtils');
52
+ const viewElementName = imageType === 'imageBlock' ? 'figure' : 'img';
53
+ editor.conversion.for('upcast')
54
+ .attributeToAttribute({
55
+ view: {
56
+ name: viewElementName,
57
+ styles: {
58
+ width: /.+/
59
+ }
60
+ },
61
+ model: {
62
+ key: 'width',
63
+ value: (viewElement) => {
64
+ if (widthAndHeightStylesAreBothSet(viewElement)) {
65
+ return getSizeValueIfInPx(viewElement.getStyle('width'));
66
+ }
67
+ return null;
68
+ }
69
+ }
70
+ })
71
+ .attributeToAttribute({
72
+ view: {
73
+ name: viewElementName,
74
+ key: 'width'
75
+ },
76
+ model: 'width'
77
+ })
78
+ .attributeToAttribute({
79
+ view: {
80
+ name: viewElementName,
81
+ styles: {
82
+ height: /.+/
83
+ }
84
+ },
85
+ model: {
86
+ key: 'height',
87
+ value: (viewElement) => {
88
+ if (widthAndHeightStylesAreBothSet(viewElement)) {
89
+ return getSizeValueIfInPx(viewElement.getStyle('height'));
90
+ }
91
+ return null;
92
+ }
93
+ }
94
+ })
95
+ .attributeToAttribute({
96
+ view: {
97
+ name: viewElementName,
98
+ key: 'height'
99
+ },
100
+ model: 'height'
101
+ });
102
+ // Dedicated converters to propagate attributes to the <img> element.
103
+ editor.conversion.for('editingDowncast').add(dispatcher => {
104
+ attachDowncastConverter(dispatcher, 'width', 'width', true);
105
+ attachDowncastConverter(dispatcher, 'height', 'height', true);
106
+ });
107
+ editor.conversion.for('dataDowncast').add(dispatcher => {
108
+ attachDowncastConverter(dispatcher, 'width', 'width', false);
109
+ attachDowncastConverter(dispatcher, 'height', 'height', false);
110
+ });
111
+ function attachDowncastConverter(dispatcher, modelAttributeName, viewAttributeName, setRatioForInlineImage) {
112
+ dispatcher.on(`attribute:${modelAttributeName}:${imageType}`, (evt, data, conversionApi) => {
113
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
114
+ return;
115
+ }
116
+ const viewWriter = conversionApi.writer;
117
+ const viewElement = conversionApi.mapper.toViewElement(data.item);
118
+ const img = imageUtils.findViewImgElement(viewElement);
119
+ if (data.attributeNewValue !== null) {
120
+ viewWriter.setAttribute(viewAttributeName, data.attributeNewValue, img);
121
+ }
122
+ else {
123
+ viewWriter.removeAttribute(viewAttributeName, img);
124
+ }
125
+ // Do not set aspect-ratio for pictures. See https://github.com/ckeditor/ckeditor5/issues/14579.
126
+ if (data.item.hasAttribute('sources')) {
127
+ return;
128
+ }
129
+ const isResized = data.item.hasAttribute('resizedWidth');
130
+ // Do not set aspect ratio for inline images which are not resized (data pipeline).
131
+ if (imageType === 'imageInline' && !isResized && !setRatioForInlineImage) {
132
+ return;
133
+ }
134
+ const width = data.item.getAttribute('width');
135
+ const height = data.item.getAttribute('height');
136
+ if (width && height) {
137
+ viewWriter.setStyle('aspect-ratio', `${width}/${height}`, img);
138
+ }
139
+ });
140
+ }
141
+ }
142
+ }
@@ -1,24 +1,24 @@
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 type { DowncastAttributeEvent, UpcastElementEvent } from 'ckeditor5/src/engine';
6
- import { type GetCallback } from 'ckeditor5/src/utils';
7
- import type { ImageStyleOptionDefinition } from '../imageconfig';
8
- /**
9
- * @module image/imagestyle/converters
10
- */
11
- /**
12
- * Returns a converter for the `imageStyle` attribute. It can be used for adding, changing and removing the attribute.
13
- *
14
- * @param styles An array containing available image style options.
15
- * @returns A model-to-view attribute converter.
16
- */
17
- export declare function modelToViewStyleAttribute(styles: Array<ImageStyleOptionDefinition>): GetCallback<DowncastAttributeEvent>;
18
- /**
19
- * Returns a view-to-model converter converting image CSS classes to a proper value in the model.
20
- *
21
- * @param styles Image style options for which the converter is created.
22
- * @returns A view-to-model converter.
23
- */
24
- export declare function viewToModelStyleAttribute(styles: Array<ImageStyleOptionDefinition>): GetCallback<UpcastElementEvent>;
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 type { DowncastAttributeEvent, UpcastElementEvent } from 'ckeditor5/src/engine';
6
+ import { type GetCallback } from 'ckeditor5/src/utils';
7
+ import type { ImageStyleOptionDefinition } from '../imageconfig';
8
+ /**
9
+ * @module image/imagestyle/converters
10
+ */
11
+ /**
12
+ * Returns a converter for the `imageStyle` attribute. It can be used for adding, changing and removing the attribute.
13
+ *
14
+ * @param styles An array containing available image style options.
15
+ * @returns A model-to-view attribute converter.
16
+ */
17
+ export declare function modelToViewStyleAttribute(styles: Array<ImageStyleOptionDefinition>): GetCallback<DowncastAttributeEvent>;
18
+ /**
19
+ * Returns a view-to-model converter converting image CSS classes to a proper value in the model.
20
+ *
21
+ * @param styles Image style options for which the converter is created.
22
+ * @returns A view-to-model converter.
23
+ */
24
+ export declare function viewToModelStyleAttribute(styles: Array<ImageStyleOptionDefinition>): GetCallback<UpcastElementEvent>;
@@ -1,79 +1,79 @@
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
- * @module image/imagestyle/converters
8
- */
9
- /**
10
- * Returns a converter for the `imageStyle` attribute. It can be used for adding, changing and removing the attribute.
11
- *
12
- * @param styles An array containing available image style options.
13
- * @returns A model-to-view attribute converter.
14
- */
15
- export function modelToViewStyleAttribute(styles) {
16
- return (evt, data, conversionApi) => {
17
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
18
- return;
19
- }
20
- // Check if there is class name associated with given value.
21
- const newStyle = getStyleDefinitionByName(data.attributeNewValue, styles);
22
- const oldStyle = getStyleDefinitionByName(data.attributeOldValue, styles);
23
- const viewElement = conversionApi.mapper.toViewElement(data.item);
24
- const viewWriter = conversionApi.writer;
25
- if (oldStyle) {
26
- viewWriter.removeClass(oldStyle.className, viewElement);
27
- }
28
- if (newStyle) {
29
- viewWriter.addClass(newStyle.className, viewElement);
30
- }
31
- };
32
- }
33
- /**
34
- * Returns a view-to-model converter converting image CSS classes to a proper value in the model.
35
- *
36
- * @param styles Image style options for which the converter is created.
37
- * @returns A view-to-model converter.
38
- */
39
- export function viewToModelStyleAttribute(styles) {
40
- // Convert only non–default styles.
41
- const nonDefaultStyles = {
42
- imageInline: styles.filter(style => !style.isDefault && style.modelElements.includes('imageInline')),
43
- imageBlock: styles.filter(style => !style.isDefault && style.modelElements.includes('imageBlock'))
44
- };
45
- return (evt, data, conversionApi) => {
46
- if (!data.modelRange) {
47
- return;
48
- }
49
- const viewElement = data.viewItem;
50
- const modelImageElement = first(data.modelRange.getItems());
51
- // Run this converter only if an image has been found in the model.
52
- // In some cases it may not be found (for example if we run this on a figure with different type than image).
53
- if (!modelImageElement) {
54
- return;
55
- }
56
- // ...and the `imageStyle` attribute is allowed for that element, otherwise stop conversion early.
57
- if (!conversionApi.schema.checkAttribute(modelImageElement, 'imageStyle')) {
58
- return;
59
- }
60
- // Convert styles one by one.
61
- for (const style of nonDefaultStyles[modelImageElement.name]) {
62
- // Try to consume class corresponding with the style.
63
- if (conversionApi.consumable.consume(viewElement, { classes: style.className })) {
64
- // And convert this style to model attribute.
65
- conversionApi.writer.setAttribute('imageStyle', style.name, modelImageElement);
66
- }
67
- }
68
- };
69
- }
70
- /**
71
- * Returns the style with a given `name` from an array of styles.
72
- */
73
- function getStyleDefinitionByName(name, styles) {
74
- for (const style of styles) {
75
- if (style.name === name) {
76
- return style;
77
- }
78
- }
79
- }
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
+ * @module image/imagestyle/converters
8
+ */
9
+ /**
10
+ * Returns a converter for the `imageStyle` attribute. It can be used for adding, changing and removing the attribute.
11
+ *
12
+ * @param styles An array containing available image style options.
13
+ * @returns A model-to-view attribute converter.
14
+ */
15
+ export function modelToViewStyleAttribute(styles) {
16
+ return (evt, data, conversionApi) => {
17
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
18
+ return;
19
+ }
20
+ // Check if there is class name associated with given value.
21
+ const newStyle = getStyleDefinitionByName(data.attributeNewValue, styles);
22
+ const oldStyle = getStyleDefinitionByName(data.attributeOldValue, styles);
23
+ const viewElement = conversionApi.mapper.toViewElement(data.item);
24
+ const viewWriter = conversionApi.writer;
25
+ if (oldStyle) {
26
+ viewWriter.removeClass(oldStyle.className, viewElement);
27
+ }
28
+ if (newStyle) {
29
+ viewWriter.addClass(newStyle.className, viewElement);
30
+ }
31
+ };
32
+ }
33
+ /**
34
+ * Returns a view-to-model converter converting image CSS classes to a proper value in the model.
35
+ *
36
+ * @param styles Image style options for which the converter is created.
37
+ * @returns A view-to-model converter.
38
+ */
39
+ export function viewToModelStyleAttribute(styles) {
40
+ // Convert only non–default styles.
41
+ const nonDefaultStyles = {
42
+ imageInline: styles.filter(style => !style.isDefault && style.modelElements.includes('imageInline')),
43
+ imageBlock: styles.filter(style => !style.isDefault && style.modelElements.includes('imageBlock'))
44
+ };
45
+ return (evt, data, conversionApi) => {
46
+ if (!data.modelRange) {
47
+ return;
48
+ }
49
+ const viewElement = data.viewItem;
50
+ const modelImageElement = first(data.modelRange.getItems());
51
+ // Run this converter only if an image has been found in the model.
52
+ // In some cases it may not be found (for example if we run this on a figure with different type than image).
53
+ if (!modelImageElement) {
54
+ return;
55
+ }
56
+ // ...and the `imageStyle` attribute is allowed for that element, otherwise stop conversion early.
57
+ if (!conversionApi.schema.checkAttribute(modelImageElement, 'imageStyle')) {
58
+ return;
59
+ }
60
+ // Convert styles one by one.
61
+ for (const style of nonDefaultStyles[modelImageElement.name]) {
62
+ // Try to consume class corresponding with the style.
63
+ if (conversionApi.consumable.consume(viewElement, { classes: style.className })) {
64
+ // And convert this style to model attribute.
65
+ conversionApi.writer.setAttribute('imageStyle', style.name, modelImageElement);
66
+ }
67
+ }
68
+ };
69
+ }
70
+ /**
71
+ * Returns the style with a given `name` from an array of styles.
72
+ */
73
+ function getStyleDefinitionByName(name, styles) {
74
+ for (const style of styles) {
75
+ if (style.name === name) {
76
+ return style;
77
+ }
78
+ }
79
+ }
@@ -1,68 +1,68 @@
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/imagestyle/imagestylecommand
7
- */
8
- import type { Element } from 'ckeditor5/src/engine';
9
- import { Command, type Editor } from 'ckeditor5/src/core';
10
- import type { ImageStyleOptionDefinition } from '../imageconfig';
11
- /**
12
- * The image style command. It is used to apply {@link module:image/imageconfig~ImageStyleConfig#options image style option}
13
- * to a selected image.
14
- *
15
- * **Note**: Executing this command may change the image model element if the desired style requires an image of a different
16
- * type. See {@link module:image/imagestyle/imagestylecommand~ImageStyleCommand#execute} to learn more.
17
- */
18
- export default class ImageStyleCommand extends Command {
19
- /**
20
- * An object containing names of default style options for the inline and block images.
21
- * If there is no default style option for the given image type in the configuration,
22
- * the name will be `false`.
23
- */
24
- private _defaultStyles;
25
- /**
26
- * The styles handled by this command.
27
- */
28
- private _styles;
29
- /**
30
- * Creates an instance of the image style command. When executed, the command applies one of
31
- * {@link module:image/imageconfig~ImageStyleConfig#options style options} to the currently selected image.
32
- *
33
- * @param editor The editor instance.
34
- * @param styles The style options that this command supports.
35
- */
36
- constructor(editor: Editor, styles: Array<ImageStyleOptionDefinition>);
37
- /**
38
- * @inheritDoc
39
- */
40
- refresh(): void;
41
- /**
42
- * Executes the command and applies the style to the currently selected image:
43
- *
44
- * ```ts
45
- * editor.execute( 'imageStyle', { value: 'side' } );
46
- * ```
47
- *
48
- * **Note**: Executing this command may change the image model element if the desired style requires an image
49
- * of a different type. Learn more about {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements model element}
50
- * configuration for the style option.
51
- *
52
- * @param options.value The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).
53
- * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
54
- * The default is `true`.
55
- * @fires execute
56
- */
57
- execute(options?: {
58
- value?: string;
59
- setImageSizes?: boolean;
60
- }): void;
61
- /**
62
- * Returns `true` if requested style change would trigger the image type change.
63
- *
64
- * @param requestedStyle The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).
65
- * @param imageElement The image model element.
66
- */
67
- shouldConvertImageType(requestedStyle: string, imageElement: Element): boolean;
68
- }
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/imagestyle/imagestylecommand
7
+ */
8
+ import type { Element } from 'ckeditor5/src/engine';
9
+ import { Command, type Editor } from 'ckeditor5/src/core';
10
+ import type { ImageStyleOptionDefinition } from '../imageconfig';
11
+ /**
12
+ * The image style command. It is used to apply {@link module:image/imageconfig~ImageStyleConfig#options image style option}
13
+ * to a selected image.
14
+ *
15
+ * **Note**: Executing this command may change the image model element if the desired style requires an image of a different
16
+ * type. See {@link module:image/imagestyle/imagestylecommand~ImageStyleCommand#execute} to learn more.
17
+ */
18
+ export default class ImageStyleCommand extends Command {
19
+ /**
20
+ * An object containing names of default style options for the inline and block images.
21
+ * If there is no default style option for the given image type in the configuration,
22
+ * the name will be `false`.
23
+ */
24
+ private _defaultStyles;
25
+ /**
26
+ * The styles handled by this command.
27
+ */
28
+ private _styles;
29
+ /**
30
+ * Creates an instance of the image style command. When executed, the command applies one of
31
+ * {@link module:image/imageconfig~ImageStyleConfig#options style options} to the currently selected image.
32
+ *
33
+ * @param editor The editor instance.
34
+ * @param styles The style options that this command supports.
35
+ */
36
+ constructor(editor: Editor, styles: Array<ImageStyleOptionDefinition>);
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ refresh(): void;
41
+ /**
42
+ * Executes the command and applies the style to the currently selected image:
43
+ *
44
+ * ```ts
45
+ * editor.execute( 'imageStyle', { value: 'side' } );
46
+ * ```
47
+ *
48
+ * **Note**: Executing this command may change the image model element if the desired style requires an image
49
+ * of a different type. Learn more about {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements model element}
50
+ * configuration for the style option.
51
+ *
52
+ * @param options.value The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).
53
+ * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.
54
+ * The default is `true`.
55
+ * @fires execute
56
+ */
57
+ execute(options?: {
58
+ value?: string;
59
+ setImageSizes?: boolean;
60
+ }): void;
61
+ /**
62
+ * Returns `true` if requested style change would trigger the image type change.
63
+ *
64
+ * @param requestedStyle The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).
65
+ * @param imageElement The image model element.
66
+ */
67
+ shouldConvertImageType(requestedStyle: string, imageElement: Element): boolean;
68
+ }