@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,165 +1,165 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- import { Plugin } from 'ckeditor5/src/core';
6
- import ImageUtils from '../imageutils';
7
- import ResizeImageCommand from './resizeimagecommand';
8
- import { widthAndHeightStylesAreBothSet } from '../image/utils';
9
- /**
10
- * The image resize editing feature.
11
- *
12
- * It adds the ability to resize each image using handles or manually by
13
- * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
14
- */
15
- export default class ImageResizeEditing extends Plugin {
16
- /**
17
- * @inheritDoc
18
- */
19
- static get requires() {
20
- return [ImageUtils];
21
- }
22
- /**
23
- * @inheritDoc
24
- */
25
- static get pluginName() {
26
- return 'ImageResizeEditing';
27
- }
28
- /**
29
- * @inheritDoc
30
- */
31
- constructor(editor) {
32
- super(editor);
33
- editor.config.define('image', {
34
- resizeUnit: '%',
35
- resizeOptions: [{
36
- name: 'resizeImage:original',
37
- value: null,
38
- icon: 'original'
39
- },
40
- {
41
- name: 'resizeImage:25',
42
- value: '25',
43
- icon: 'small'
44
- },
45
- {
46
- name: 'resizeImage:50',
47
- value: '50',
48
- icon: 'medium'
49
- },
50
- {
51
- name: 'resizeImage:75',
52
- value: '75',
53
- icon: 'large'
54
- }]
55
- });
56
- }
57
- /**
58
- * @inheritDoc
59
- */
60
- init() {
61
- const editor = this.editor;
62
- const resizeImageCommand = new ResizeImageCommand(editor);
63
- this._registerSchema();
64
- this._registerConverters('imageBlock');
65
- this._registerConverters('imageInline');
66
- // Register `resizeImage` command and add `imageResize` command as an alias for backward compatibility.
67
- editor.commands.add('resizeImage', resizeImageCommand);
68
- editor.commands.add('imageResize', resizeImageCommand);
69
- }
70
- _registerSchema() {
71
- if (this.editor.plugins.has('ImageBlockEditing')) {
72
- this.editor.model.schema.extend('imageBlock', { allowAttributes: ['resizedWidth', 'resizedHeight'] });
73
- }
74
- if (this.editor.plugins.has('ImageInlineEditing')) {
75
- this.editor.model.schema.extend('imageInline', { allowAttributes: ['resizedWidth', 'resizedHeight'] });
76
- }
77
- }
78
- /**
79
- * Registers image resize converters.
80
- *
81
- * @param imageType The type of the image.
82
- */
83
- _registerConverters(imageType) {
84
- const editor = this.editor;
85
- const imageUtils = editor.plugins.get('ImageUtils');
86
- // Dedicated converter to propagate image's attribute to the img tag.
87
- editor.conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:resizedWidth:${imageType}`, (evt, data, conversionApi) => {
88
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
89
- return;
90
- }
91
- const viewWriter = conversionApi.writer;
92
- const viewImg = conversionApi.mapper.toViewElement(data.item);
93
- if (data.attributeNewValue !== null) {
94
- viewWriter.setStyle('width', data.attributeNewValue, viewImg);
95
- viewWriter.addClass('image_resized', viewImg);
96
- }
97
- else {
98
- viewWriter.removeStyle('width', viewImg);
99
- viewWriter.removeClass('image_resized', viewImg);
100
- }
101
- }));
102
- editor.conversion.for('dataDowncast').attributeToAttribute({
103
- model: {
104
- name: imageType,
105
- key: 'resizedHeight'
106
- },
107
- view: modelAttributeValue => ({
108
- key: 'style',
109
- value: {
110
- 'height': modelAttributeValue
111
- }
112
- })
113
- });
114
- editor.conversion.for('editingDowncast').add(dispatcher => dispatcher.on(`attribute:resizedHeight:${imageType}`, (evt, data, conversionApi) => {
115
- if (!conversionApi.consumable.consume(data.item, evt.name)) {
116
- return;
117
- }
118
- const viewWriter = conversionApi.writer;
119
- const viewImg = conversionApi.mapper.toViewElement(data.item);
120
- const target = imageType === 'imageInline' ? imageUtils.findViewImgElement(viewImg) : viewImg;
121
- if (data.attributeNewValue !== null) {
122
- viewWriter.setStyle('height', data.attributeNewValue, target);
123
- }
124
- else {
125
- viewWriter.removeStyle('height', target);
126
- }
127
- }));
128
- editor.conversion.for('upcast')
129
- .attributeToAttribute({
130
- view: {
131
- name: imageType === 'imageBlock' ? 'figure' : 'img',
132
- styles: {
133
- width: /.+/
134
- }
135
- },
136
- model: {
137
- key: 'resizedWidth',
138
- value: (viewElement) => {
139
- if (widthAndHeightStylesAreBothSet(viewElement)) {
140
- return null;
141
- }
142
- return viewElement.getStyle('width');
143
- }
144
- }
145
- });
146
- editor.conversion.for('upcast')
147
- .attributeToAttribute({
148
- view: {
149
- name: imageType === 'imageBlock' ? 'figure' : 'img',
150
- styles: {
151
- height: /.+/
152
- }
153
- },
154
- model: {
155
- key: 'resizedHeight',
156
- value: (viewElement) => {
157
- if (widthAndHeightStylesAreBothSet(viewElement)) {
158
- return null;
159
- }
160
- return viewElement.getStyle('height');
161
- }
162
- }
163
- });
164
- }
165
- }
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ import { Plugin } from 'ckeditor5/src/core';
6
+ import ImageUtils from '../imageutils';
7
+ import ResizeImageCommand from './resizeimagecommand';
8
+ import { widthAndHeightStylesAreBothSet } from '../image/utils';
9
+ /**
10
+ * The image resize editing feature.
11
+ *
12
+ * It adds the ability to resize each image using handles or manually by
13
+ * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
14
+ */
15
+ export default class ImageResizeEditing extends Plugin {
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ static get requires() {
20
+ return [ImageUtils];
21
+ }
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ static get pluginName() {
26
+ return 'ImageResizeEditing';
27
+ }
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ constructor(editor) {
32
+ super(editor);
33
+ editor.config.define('image', {
34
+ resizeUnit: '%',
35
+ resizeOptions: [{
36
+ name: 'resizeImage:original',
37
+ value: null,
38
+ icon: 'original'
39
+ },
40
+ {
41
+ name: 'resizeImage:25',
42
+ value: '25',
43
+ icon: 'small'
44
+ },
45
+ {
46
+ name: 'resizeImage:50',
47
+ value: '50',
48
+ icon: 'medium'
49
+ },
50
+ {
51
+ name: 'resizeImage:75',
52
+ value: '75',
53
+ icon: 'large'
54
+ }]
55
+ });
56
+ }
57
+ /**
58
+ * @inheritDoc
59
+ */
60
+ init() {
61
+ const editor = this.editor;
62
+ const resizeImageCommand = new ResizeImageCommand(editor);
63
+ this._registerSchema();
64
+ this._registerConverters('imageBlock');
65
+ this._registerConverters('imageInline');
66
+ // Register `resizeImage` command and add `imageResize` command as an alias for backward compatibility.
67
+ editor.commands.add('resizeImage', resizeImageCommand);
68
+ editor.commands.add('imageResize', resizeImageCommand);
69
+ }
70
+ _registerSchema() {
71
+ if (this.editor.plugins.has('ImageBlockEditing')) {
72
+ this.editor.model.schema.extend('imageBlock', { allowAttributes: ['resizedWidth', 'resizedHeight'] });
73
+ }
74
+ if (this.editor.plugins.has('ImageInlineEditing')) {
75
+ this.editor.model.schema.extend('imageInline', { allowAttributes: ['resizedWidth', 'resizedHeight'] });
76
+ }
77
+ }
78
+ /**
79
+ * Registers image resize converters.
80
+ *
81
+ * @param imageType The type of the image.
82
+ */
83
+ _registerConverters(imageType) {
84
+ const editor = this.editor;
85
+ const imageUtils = editor.plugins.get('ImageUtils');
86
+ // Dedicated converter to propagate image's attribute to the img tag.
87
+ editor.conversion.for('downcast').add(dispatcher => dispatcher.on(`attribute:resizedWidth:${imageType}`, (evt, data, conversionApi) => {
88
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
89
+ return;
90
+ }
91
+ const viewWriter = conversionApi.writer;
92
+ const viewImg = conversionApi.mapper.toViewElement(data.item);
93
+ if (data.attributeNewValue !== null) {
94
+ viewWriter.setStyle('width', data.attributeNewValue, viewImg);
95
+ viewWriter.addClass('image_resized', viewImg);
96
+ }
97
+ else {
98
+ viewWriter.removeStyle('width', viewImg);
99
+ viewWriter.removeClass('image_resized', viewImg);
100
+ }
101
+ }));
102
+ editor.conversion.for('dataDowncast').attributeToAttribute({
103
+ model: {
104
+ name: imageType,
105
+ key: 'resizedHeight'
106
+ },
107
+ view: modelAttributeValue => ({
108
+ key: 'style',
109
+ value: {
110
+ 'height': modelAttributeValue
111
+ }
112
+ })
113
+ });
114
+ editor.conversion.for('editingDowncast').add(dispatcher => dispatcher.on(`attribute:resizedHeight:${imageType}`, (evt, data, conversionApi) => {
115
+ if (!conversionApi.consumable.consume(data.item, evt.name)) {
116
+ return;
117
+ }
118
+ const viewWriter = conversionApi.writer;
119
+ const viewImg = conversionApi.mapper.toViewElement(data.item);
120
+ const target = imageType === 'imageInline' ? imageUtils.findViewImgElement(viewImg) : viewImg;
121
+ if (data.attributeNewValue !== null) {
122
+ viewWriter.setStyle('height', data.attributeNewValue, target);
123
+ }
124
+ else {
125
+ viewWriter.removeStyle('height', target);
126
+ }
127
+ }));
128
+ editor.conversion.for('upcast')
129
+ .attributeToAttribute({
130
+ view: {
131
+ name: imageType === 'imageBlock' ? 'figure' : 'img',
132
+ styles: {
133
+ width: /.+/
134
+ }
135
+ },
136
+ model: {
137
+ key: 'resizedWidth',
138
+ value: (viewElement) => {
139
+ if (widthAndHeightStylesAreBothSet(viewElement)) {
140
+ return null;
141
+ }
142
+ return viewElement.getStyle('width');
143
+ }
144
+ }
145
+ });
146
+ editor.conversion.for('upcast')
147
+ .attributeToAttribute({
148
+ view: {
149
+ name: imageType === 'imageBlock' ? 'figure' : 'img',
150
+ styles: {
151
+ height: /.+/
152
+ }
153
+ },
154
+ model: {
155
+ key: 'resizedHeight',
156
+ value: (viewElement) => {
157
+ if (widthAndHeightStylesAreBothSet(viewElement)) {
158
+ return null;
159
+ }
160
+ return viewElement.getStyle('height');
161
+ }
162
+ }
163
+ });
164
+ }
165
+ }
@@ -1,31 +1,31 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- import { Plugin } from 'ckeditor5/src/core';
6
- import { WidgetResize } from 'ckeditor5/src/widget';
7
- import ImageUtils from '../imageutils';
8
- /**
9
- * The image resize by handles feature.
10
- *
11
- * It adds the ability to resize each image using handles or manually by
12
- * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
13
- */
14
- export default class ImageResizeHandles extends Plugin {
15
- /**
16
- * @inheritDoc
17
- */
18
- static get requires(): readonly [typeof WidgetResize, typeof ImageUtils];
19
- /**
20
- * @inheritDoc
21
- */
22
- static get pluginName(): "ImageResizeHandles";
23
- /**
24
- * @inheritDoc
25
- */
26
- init(): void;
27
- /**
28
- * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.
29
- */
30
- private _setupResizerCreator;
31
- }
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ import { Plugin } from 'ckeditor5/src/core';
6
+ import { WidgetResize } from 'ckeditor5/src/widget';
7
+ import ImageUtils from '../imageutils';
8
+ /**
9
+ * The image resize by handles feature.
10
+ *
11
+ * It adds the ability to resize each image using handles or manually by
12
+ * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
13
+ */
14
+ export default class ImageResizeHandles extends Plugin {
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static get requires(): readonly [typeof WidgetResize, typeof ImageUtils];
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ static get pluginName(): "ImageResizeHandles";
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ init(): void;
27
+ /**
28
+ * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.
29
+ */
30
+ private _setupResizerCreator;
31
+ }
@@ -1,114 +1,114 @@
1
- /**
2
- * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
- */
5
- import { Plugin } from 'ckeditor5/src/core';
6
- import { WidgetResize } from 'ckeditor5/src/widget';
7
- import ImageUtils from '../imageutils';
8
- import ImageLoadObserver from '../image/imageloadobserver';
9
- const RESIZABLE_IMAGES_CSS_SELECTOR = 'figure.image.ck-widget > img,' +
10
- 'figure.image.ck-widget > picture > img,' +
11
- 'figure.image.ck-widget > a > img,' +
12
- 'figure.image.ck-widget > a > picture > img,' +
13
- 'span.image-inline.ck-widget > img,' +
14
- 'span.image-inline.ck-widget > picture > img';
15
- const RESIZED_IMAGE_CLASS = 'image_resized';
16
- /**
17
- * The image resize by handles feature.
18
- *
19
- * It adds the ability to resize each image using handles or manually by
20
- * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
21
- */
22
- export default class ImageResizeHandles extends Plugin {
23
- /**
24
- * @inheritDoc
25
- */
26
- static get requires() {
27
- return [WidgetResize, ImageUtils];
28
- }
29
- /**
30
- * @inheritDoc
31
- */
32
- static get pluginName() {
33
- return 'ImageResizeHandles';
34
- }
35
- /**
36
- * @inheritDoc
37
- */
38
- init() {
39
- const command = this.editor.commands.get('resizeImage');
40
- this.bind('isEnabled').to(command);
41
- this._setupResizerCreator();
42
- }
43
- /**
44
- * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.
45
- */
46
- _setupResizerCreator() {
47
- const editor = this.editor;
48
- const editingView = editor.editing.view;
49
- const imageUtils = editor.plugins.get('ImageUtils');
50
- editingView.addObserver(ImageLoadObserver);
51
- this.listenTo(editingView.document, 'imageLoaded', (evt, domEvent) => {
52
- // The resizer must be attached only to images loaded by the `ImageInsert`, `ImageUpload` or `LinkImage` plugins.
53
- if (!domEvent.target.matches(RESIZABLE_IMAGES_CSS_SELECTOR)) {
54
- return;
55
- }
56
- const domConverter = editor.editing.view.domConverter;
57
- const imageView = domConverter.domToView(domEvent.target);
58
- const widgetView = imageUtils.getImageWidgetFromImageView(imageView);
59
- let resizer = this.editor.plugins.get(WidgetResize).getResizerByViewElement(widgetView);
60
- if (resizer) {
61
- // There are rare cases when the image will be triggered multiple times for the same widget, e.g. when
62
- // the image's source was changed after upload (https://github.com/ckeditor/ckeditor5/pull/8108#issuecomment-708302992).
63
- resizer.redraw();
64
- return;
65
- }
66
- const mapper = editor.editing.mapper;
67
- const imageModel = mapper.toModelElement(widgetView);
68
- resizer = editor.plugins
69
- .get(WidgetResize)
70
- .attachTo({
71
- unit: editor.config.get('image.resizeUnit'),
72
- modelElement: imageModel,
73
- viewElement: widgetView,
74
- editor,
75
- getHandleHost(domWidgetElement) {
76
- return domWidgetElement.querySelector('img');
77
- },
78
- getResizeHost() {
79
- // Return the model image element parent to avoid setting an inline element (<a>/<span>) as a resize host.
80
- return domConverter.mapViewToDom(mapper.toViewElement(imageModel.parent));
81
- },
82
- // TODO consider other positions.
83
- isCentered() {
84
- const imageStyle = imageModel.getAttribute('imageStyle');
85
- return !imageStyle || imageStyle == 'block' || imageStyle == 'alignCenter';
86
- },
87
- onCommit(newValue) {
88
- // Get rid of the CSS class in case the command execution that follows is unsuccessful
89
- // (e.g. Track Changes can override it and the new dimensions will not apply). Otherwise,
90
- // the presence of the class and the absence of the width style will cause it to take 100%
91
- // of the horizontal space.
92
- editingView.change(writer => {
93
- writer.removeClass(RESIZED_IMAGE_CLASS, widgetView);
94
- });
95
- editor.execute('resizeImage', { width: newValue });
96
- }
97
- });
98
- resizer.on('updateSize', () => {
99
- if (!widgetView.hasClass(RESIZED_IMAGE_CLASS)) {
100
- editingView.change(writer => {
101
- writer.addClass(RESIZED_IMAGE_CLASS, widgetView);
102
- });
103
- }
104
- const target = imageModel.name === 'imageInline' ? imageView : widgetView;
105
- if (target.getStyle('height')) {
106
- editingView.change(writer => {
107
- writer.removeStyle('height', target);
108
- });
109
- }
110
- });
111
- resizer.bind('isEnabled').to(this);
112
- });
113
- }
114
- }
1
+ /**
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ import { Plugin } from 'ckeditor5/src/core';
6
+ import { WidgetResize } from 'ckeditor5/src/widget';
7
+ import ImageUtils from '../imageutils';
8
+ import ImageLoadObserver from '../image/imageloadobserver';
9
+ const RESIZABLE_IMAGES_CSS_SELECTOR = 'figure.image.ck-widget > img,' +
10
+ 'figure.image.ck-widget > picture > img,' +
11
+ 'figure.image.ck-widget > a > img,' +
12
+ 'figure.image.ck-widget > a > picture > img,' +
13
+ 'span.image-inline.ck-widget > img,' +
14
+ 'span.image-inline.ck-widget > picture > img';
15
+ const RESIZED_IMAGE_CLASS = 'image_resized';
16
+ /**
17
+ * The image resize by handles feature.
18
+ *
19
+ * It adds the ability to resize each image using handles or manually by
20
+ * {@link module:image/imageresize/imageresizebuttons~ImageResizeButtons} buttons.
21
+ */
22
+ export default class ImageResizeHandles extends Plugin {
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ static get requires() {
27
+ return [WidgetResize, ImageUtils];
28
+ }
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get pluginName() {
33
+ return 'ImageResizeHandles';
34
+ }
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ init() {
39
+ const command = this.editor.commands.get('resizeImage');
40
+ this.bind('isEnabled').to(command);
41
+ this._setupResizerCreator();
42
+ }
43
+ /**
44
+ * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.
45
+ */
46
+ _setupResizerCreator() {
47
+ const editor = this.editor;
48
+ const editingView = editor.editing.view;
49
+ const imageUtils = editor.plugins.get('ImageUtils');
50
+ editingView.addObserver(ImageLoadObserver);
51
+ this.listenTo(editingView.document, 'imageLoaded', (evt, domEvent) => {
52
+ // The resizer must be attached only to images loaded by the `ImageInsert`, `ImageUpload` or `LinkImage` plugins.
53
+ if (!domEvent.target.matches(RESIZABLE_IMAGES_CSS_SELECTOR)) {
54
+ return;
55
+ }
56
+ const domConverter = editor.editing.view.domConverter;
57
+ const imageView = domConverter.domToView(domEvent.target);
58
+ const widgetView = imageUtils.getImageWidgetFromImageView(imageView);
59
+ let resizer = this.editor.plugins.get(WidgetResize).getResizerByViewElement(widgetView);
60
+ if (resizer) {
61
+ // There are rare cases when the image will be triggered multiple times for the same widget, e.g. when
62
+ // the image's source was changed after upload (https://github.com/ckeditor/ckeditor5/pull/8108#issuecomment-708302992).
63
+ resizer.redraw();
64
+ return;
65
+ }
66
+ const mapper = editor.editing.mapper;
67
+ const imageModel = mapper.toModelElement(widgetView);
68
+ resizer = editor.plugins
69
+ .get(WidgetResize)
70
+ .attachTo({
71
+ unit: editor.config.get('image.resizeUnit'),
72
+ modelElement: imageModel,
73
+ viewElement: widgetView,
74
+ editor,
75
+ getHandleHost(domWidgetElement) {
76
+ return domWidgetElement.querySelector('img');
77
+ },
78
+ getResizeHost() {
79
+ // Return the model image element parent to avoid setting an inline element (<a>/<span>) as a resize host.
80
+ return domConverter.mapViewToDom(mapper.toViewElement(imageModel.parent));
81
+ },
82
+ // TODO consider other positions.
83
+ isCentered() {
84
+ const imageStyle = imageModel.getAttribute('imageStyle');
85
+ return !imageStyle || imageStyle == 'block' || imageStyle == 'alignCenter';
86
+ },
87
+ onCommit(newValue) {
88
+ // Get rid of the CSS class in case the command execution that follows is unsuccessful
89
+ // (e.g. Track Changes can override it and the new dimensions will not apply). Otherwise,
90
+ // the presence of the class and the absence of the width style will cause it to take 100%
91
+ // of the horizontal space.
92
+ editingView.change(writer => {
93
+ writer.removeClass(RESIZED_IMAGE_CLASS, widgetView);
94
+ });
95
+ editor.execute('resizeImage', { width: newValue });
96
+ }
97
+ });
98
+ resizer.on('updateSize', () => {
99
+ if (!widgetView.hasClass(RESIZED_IMAGE_CLASS)) {
100
+ editingView.change(writer => {
101
+ writer.addClass(RESIZED_IMAGE_CLASS, widgetView);
102
+ });
103
+ }
104
+ const target = imageModel.name === 'imageInline' ? imageView : widgetView;
105
+ if (target.getStyle('height')) {
106
+ editingView.change(writer => {
107
+ writer.removeStyle('height', target);
108
+ });
109
+ }
110
+ });
111
+ resizer.bind('isEnabled').to(this);
112
+ });
113
+ }
114
+ }