@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,329 +1,329 @@
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/utils
7
- */
8
- import { icons } from 'ckeditor5/src/core';
9
- import { logWarning } from 'ckeditor5/src/utils';
10
- const { objectFullWidth, objectInline, objectLeft, objectRight, objectCenter, objectBlockLeft, objectBlockRight } = icons;
11
- /**
12
- * Default image style options provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}
13
- * configuration.
14
- *
15
- * There are available 5 styles focused on formatting:
16
- *
17
- * * **`'alignLeft'`** aligns the inline or block image to the left and wraps it with the text using the `image-style-align-left` class,
18
- * * **`'alignRight'`** aligns the inline or block image to the right and wraps it with the text using the `image-style-align-right` class,
19
- * * **`'alignCenter'`** centers the block image using the `image-style-align-center` class,
20
- * * **`'alignBlockLeft'`** aligns the block image to the left using the `image-style-block-align-left` class,
21
- * * **`'alignBlockRight'`** aligns the block image to the right using the `image-style-block-align-right` class,
22
- *
23
- * and 3 semantic styles:
24
- *
25
- * * **`'inline'`** is an inline image without any CSS class,
26
- * * **`'block'`** is a block image without any CSS class,
27
- * * **`'side'`** is a block image styled with the `image-style-side` CSS class.
28
- */
29
- export const DEFAULT_OPTIONS = {
30
- // This style represents an image placed in the line of text.
31
- get inline() {
32
- return {
33
- name: 'inline',
34
- title: 'In line',
35
- icon: objectInline,
36
- modelElements: ['imageInline'],
37
- isDefault: true
38
- };
39
- },
40
- // This style represents an image aligned to the left and wrapped with text.
41
- get alignLeft() {
42
- return {
43
- name: 'alignLeft',
44
- title: 'Left aligned image',
45
- icon: objectLeft,
46
- modelElements: ['imageBlock', 'imageInline'],
47
- className: 'image-style-align-left'
48
- };
49
- },
50
- // This style represents an image aligned to the left.
51
- get alignBlockLeft() {
52
- return {
53
- name: 'alignBlockLeft',
54
- title: 'Left aligned image',
55
- icon: objectBlockLeft,
56
- modelElements: ['imageBlock'],
57
- className: 'image-style-block-align-left'
58
- };
59
- },
60
- // This style represents a centered image.
61
- get alignCenter() {
62
- return {
63
- name: 'alignCenter',
64
- title: 'Centered image',
65
- icon: objectCenter,
66
- modelElements: ['imageBlock'],
67
- className: 'image-style-align-center'
68
- };
69
- },
70
- // This style represents an image aligned to the right and wrapped with text.
71
- get alignRight() {
72
- return {
73
- name: 'alignRight',
74
- title: 'Right aligned image',
75
- icon: objectRight,
76
- modelElements: ['imageBlock', 'imageInline'],
77
- className: 'image-style-align-right'
78
- };
79
- },
80
- // This style represents an image aligned to the right.
81
- get alignBlockRight() {
82
- return {
83
- name: 'alignBlockRight',
84
- title: 'Right aligned image',
85
- icon: objectBlockRight,
86
- modelElements: ['imageBlock'],
87
- className: 'image-style-block-align-right'
88
- };
89
- },
90
- // This option is equal to the situation when no style is applied.
91
- get block() {
92
- return {
93
- name: 'block',
94
- title: 'Centered image',
95
- icon: objectCenter,
96
- modelElements: ['imageBlock'],
97
- isDefault: true
98
- };
99
- },
100
- // This represents a side image.
101
- get side() {
102
- return {
103
- name: 'side',
104
- title: 'Side image',
105
- icon: objectRight,
106
- modelElements: ['imageBlock'],
107
- className: 'image-style-side'
108
- };
109
- }
110
- };
111
- /**
112
- * Default image style icons provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}
113
- * configuration.
114
- *
115
- * See {@link module:image/imageconfig~ImageStyleOptionDefinition#icon} to learn more.
116
- *
117
- * There are 7 default icons available: `'full'`, `'left'`, `'inlineLeft'`, `'center'`, `'right'`, `'inlineRight'`, and `'inline'`.
118
- */
119
- export const DEFAULT_ICONS = {
120
- full: objectFullWidth,
121
- left: objectBlockLeft,
122
- right: objectBlockRight,
123
- center: objectCenter,
124
- inlineLeft: objectLeft,
125
- inlineRight: objectRight,
126
- inline: objectInline
127
- };
128
- /**
129
- * Default drop-downs provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#toolbar}
130
- * configuration. The drop-downs are containers for the {@link module:image/imageconfig~ImageStyleConfig#options image style options}.
131
- *
132
- * If both of the `ImageEditing` plugins are loaded, there are 2 predefined drop-downs available:
133
- *
134
- * * **`'imageStyle:wrapText'`**, which contains the `alignLeft` and `alignRight` options, that is,
135
- * those that wraps the text around the image,
136
- * * **`'imageStyle:breakText'`**, which contains the `alignBlockLeft`, `alignCenter` and `alignBlockRight` options, that is,
137
- * those that breaks the text around the image.
138
- */
139
- export const DEFAULT_DROPDOWN_DEFINITIONS = [{
140
- name: 'imageStyle:wrapText',
141
- title: 'Wrap text',
142
- defaultItem: 'imageStyle:alignLeft',
143
- items: ['imageStyle:alignLeft', 'imageStyle:alignRight']
144
- }, {
145
- name: 'imageStyle:breakText',
146
- title: 'Break text',
147
- defaultItem: 'imageStyle:block',
148
- items: ['imageStyle:alignBlockLeft', 'imageStyle:block', 'imageStyle:alignBlockRight']
149
- }];
150
- /**
151
- * Returns a list of the normalized and validated image style options.
152
- *
153
- * @param config
154
- * @param config.isInlinePluginLoaded
155
- * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.
156
- * @param config.isBlockPluginLoaded
157
- * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.
158
- * @param config.configuredStyles
159
- * The image styles configuration provided in the image styles {@link module:image/imageconfig~ImageConfig#styles configuration}
160
- * as a default or custom value.
161
- * @returns
162
- * * Each of options contains a complete icon markup.
163
- * * The image style options not supported by any of the loaded plugins are filtered out.
164
- */
165
- function normalizeStyles(config) {
166
- const configuredStyles = config.configuredStyles.options || [];
167
- const styles = configuredStyles
168
- .map(arrangement => normalizeDefinition(arrangement))
169
- .filter(arrangement => isValidOption(arrangement, config));
170
- return styles;
171
- }
172
- /**
173
- * Returns the default image styles configuration depending on the loaded image editing plugins.
174
- *
175
- * @param isInlinePluginLoaded
176
- * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.
177
- *
178
- * @param isBlockPluginLoaded
179
- * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.
180
- *
181
- * @returns
182
- * It returns an object with the lists of the image style options and groups defined as strings related to the
183
- * {@link module:image/imagestyle/utils#DEFAULT_OPTIONS default options}
184
- */
185
- function getDefaultStylesConfiguration(isBlockPluginLoaded, isInlinePluginLoaded) {
186
- if (isBlockPluginLoaded && isInlinePluginLoaded) {
187
- return {
188
- options: [
189
- 'inline', 'alignLeft', 'alignRight',
190
- 'alignCenter', 'alignBlockLeft', 'alignBlockRight',
191
- 'block', 'side'
192
- ]
193
- };
194
- }
195
- else if (isBlockPluginLoaded) {
196
- return {
197
- options: ['block', 'side']
198
- };
199
- }
200
- else if (isInlinePluginLoaded) {
201
- return {
202
- options: ['inline', 'alignLeft', 'alignRight']
203
- };
204
- }
205
- return {};
206
- }
207
- /**
208
- * Returns a list of the available predefined drop-downs' definitions depending on the loaded image editing plugins.
209
- */
210
- function getDefaultDropdownDefinitions(pluginCollection) {
211
- if (pluginCollection.has('ImageBlockEditing') && pluginCollection.has('ImageInlineEditing')) {
212
- return [...DEFAULT_DROPDOWN_DEFINITIONS];
213
- }
214
- else {
215
- return [];
216
- }
217
- }
218
- /**
219
- * Normalizes an image style option or group provided in the {@link module:image/imageconfig~ImageConfig#styles}
220
- * and returns it in a {@link module:image/imageconfig~ImageStyleOptionDefinition}/
221
- */
222
- function normalizeDefinition(definition) {
223
- if (typeof definition === 'string') {
224
- // Just the name of the style has been passed, but none of the defaults.
225
- if (!DEFAULT_OPTIONS[definition]) {
226
- // Normalize the style anyway to prevent errors.
227
- definition = { name: definition };
228
- }
229
- // Just the name of the style has been passed and it's one of the defaults, just use it.
230
- // Clone the style to avoid overriding defaults.
231
- else {
232
- definition = { ...DEFAULT_OPTIONS[definition] };
233
- }
234
- }
235
- else {
236
- // If an object style has been passed and if the name matches one of the defaults,
237
- // extend it with defaults – the user wants to customize a default style.
238
- // Note: Don't override the user–defined style object, clone it instead.
239
- definition = extendStyle(DEFAULT_OPTIONS[definition.name], definition);
240
- }
241
- // If an icon is defined as a string and correspond with a name
242
- // in default icons, use the default icon provided by the plugin.
243
- if (typeof definition.icon === 'string') {
244
- definition.icon = DEFAULT_ICONS[definition.icon] || definition.icon;
245
- }
246
- return definition;
247
- }
248
- /**
249
- * Checks if the image style option is valid:
250
- * * if it has the modelElements fields defined and filled,
251
- * * if the defined modelElements are supported by any of the loaded image editing plugins.
252
- * It also displays a console warning these conditions are not met.
253
- *
254
- * @param option image style option
255
- */
256
- function isValidOption(option, { isBlockPluginLoaded, isInlinePluginLoaded }) {
257
- const { modelElements, name } = option;
258
- if (!modelElements || !modelElements.length || !name) {
259
- warnInvalidStyle({ style: option });
260
- return false;
261
- }
262
- else {
263
- const supportedElements = [isBlockPluginLoaded ? 'imageBlock' : null, isInlinePluginLoaded ? 'imageInline' : null];
264
- // Check if the option is supported by any of the loaded plugins.
265
- if (!modelElements.some(elementName => supportedElements.includes(elementName))) {
266
- /**
267
- * In order to work correctly, each image style {@link module:image/imageconfig~ImageStyleOptionDefinition option}
268
- * requires specific model elements (also: types of images) to be supported by the editor.
269
- *
270
- * Model element names to which the image style option can be applied are defined in the
271
- * {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements} property of the style option
272
- * definition.
273
- *
274
- * Explore the warning in the console to find out precisely which option is not supported and which editor plugins
275
- * are missing. Make sure these plugins are loaded in your editor to get this image style option working.
276
- *
277
- * @error image-style-missing-dependency
278
- * @param {String} [option] The name of the unsupported option.
279
- * @param {String} [missingPlugins] The names of the plugins one of which has to be loaded for the particular option.
280
- */
281
- logWarning('image-style-missing-dependency', {
282
- style: option,
283
- missingPlugins: modelElements.map(name => name === 'imageBlock' ? 'ImageBlockEditing' : 'ImageInlineEditing')
284
- });
285
- return false;
286
- }
287
- }
288
- return true;
289
- }
290
- /**
291
- * Extends the default style with a style provided by the developer.
292
- * Note: Don't override the custom–defined style object, clone it instead.
293
- */
294
- function extendStyle(source, style) {
295
- const extendedStyle = { ...style };
296
- for (const prop in source) {
297
- if (!Object.prototype.hasOwnProperty.call(style, prop)) {
298
- extendedStyle[prop] = source[prop];
299
- }
300
- }
301
- return extendedStyle;
302
- }
303
- /**
304
- * Displays a console warning with the 'image-style-configuration-definition-invalid' error.
305
- */
306
- function warnInvalidStyle(info) {
307
- /**
308
- * The image style definition provided in the configuration is invalid.
309
- *
310
- * Please make sure the definition implements properly one of the following:
311
- *
312
- * * {@link module:image/imageconfig~ImageStyleOptionDefinition image style option definition},
313
- * * {@link module:image/imageconfig~ImageStyleDropdownDefinition image style dropdown definition}
314
- *
315
- * @error image-style-configuration-definition-invalid
316
- * @param {String} [dropdown] The name of the invalid drop-down
317
- * @param {String} [style] The name of the invalid image style option
318
- */
319
- logWarning('image-style-configuration-definition-invalid', info);
320
- }
321
- export default {
322
- normalizeStyles,
323
- getDefaultStylesConfiguration,
324
- getDefaultDropdownDefinitions,
325
- warnInvalidStyle,
326
- DEFAULT_OPTIONS,
327
- DEFAULT_ICONS,
328
- DEFAULT_DROPDOWN_DEFINITIONS
329
- };
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/utils
7
+ */
8
+ import { icons } from 'ckeditor5/src/core';
9
+ import { logWarning } from 'ckeditor5/src/utils';
10
+ const { objectFullWidth, objectInline, objectLeft, objectRight, objectCenter, objectBlockLeft, objectBlockRight } = icons;
11
+ /**
12
+ * Default image style options provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}
13
+ * configuration.
14
+ *
15
+ * There are available 5 styles focused on formatting:
16
+ *
17
+ * * **`'alignLeft'`** aligns the inline or block image to the left and wraps it with the text using the `image-style-align-left` class,
18
+ * * **`'alignRight'`** aligns the inline or block image to the right and wraps it with the text using the `image-style-align-right` class,
19
+ * * **`'alignCenter'`** centers the block image using the `image-style-align-center` class,
20
+ * * **`'alignBlockLeft'`** aligns the block image to the left using the `image-style-block-align-left` class,
21
+ * * **`'alignBlockRight'`** aligns the block image to the right using the `image-style-block-align-right` class,
22
+ *
23
+ * and 3 semantic styles:
24
+ *
25
+ * * **`'inline'`** is an inline image without any CSS class,
26
+ * * **`'block'`** is a block image without any CSS class,
27
+ * * **`'side'`** is a block image styled with the `image-style-side` CSS class.
28
+ */
29
+ export const DEFAULT_OPTIONS = {
30
+ // This style represents an image placed in the line of text.
31
+ get inline() {
32
+ return {
33
+ name: 'inline',
34
+ title: 'In line',
35
+ icon: objectInline,
36
+ modelElements: ['imageInline'],
37
+ isDefault: true
38
+ };
39
+ },
40
+ // This style represents an image aligned to the left and wrapped with text.
41
+ get alignLeft() {
42
+ return {
43
+ name: 'alignLeft',
44
+ title: 'Left aligned image',
45
+ icon: objectLeft,
46
+ modelElements: ['imageBlock', 'imageInline'],
47
+ className: 'image-style-align-left'
48
+ };
49
+ },
50
+ // This style represents an image aligned to the left.
51
+ get alignBlockLeft() {
52
+ return {
53
+ name: 'alignBlockLeft',
54
+ title: 'Left aligned image',
55
+ icon: objectBlockLeft,
56
+ modelElements: ['imageBlock'],
57
+ className: 'image-style-block-align-left'
58
+ };
59
+ },
60
+ // This style represents a centered image.
61
+ get alignCenter() {
62
+ return {
63
+ name: 'alignCenter',
64
+ title: 'Centered image',
65
+ icon: objectCenter,
66
+ modelElements: ['imageBlock'],
67
+ className: 'image-style-align-center'
68
+ };
69
+ },
70
+ // This style represents an image aligned to the right and wrapped with text.
71
+ get alignRight() {
72
+ return {
73
+ name: 'alignRight',
74
+ title: 'Right aligned image',
75
+ icon: objectRight,
76
+ modelElements: ['imageBlock', 'imageInline'],
77
+ className: 'image-style-align-right'
78
+ };
79
+ },
80
+ // This style represents an image aligned to the right.
81
+ get alignBlockRight() {
82
+ return {
83
+ name: 'alignBlockRight',
84
+ title: 'Right aligned image',
85
+ icon: objectBlockRight,
86
+ modelElements: ['imageBlock'],
87
+ className: 'image-style-block-align-right'
88
+ };
89
+ },
90
+ // This option is equal to the situation when no style is applied.
91
+ get block() {
92
+ return {
93
+ name: 'block',
94
+ title: 'Centered image',
95
+ icon: objectCenter,
96
+ modelElements: ['imageBlock'],
97
+ isDefault: true
98
+ };
99
+ },
100
+ // This represents a side image.
101
+ get side() {
102
+ return {
103
+ name: 'side',
104
+ title: 'Side image',
105
+ icon: objectRight,
106
+ modelElements: ['imageBlock'],
107
+ className: 'image-style-side'
108
+ };
109
+ }
110
+ };
111
+ /**
112
+ * Default image style icons provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#styles}
113
+ * configuration.
114
+ *
115
+ * See {@link module:image/imageconfig~ImageStyleOptionDefinition#icon} to learn more.
116
+ *
117
+ * There are 7 default icons available: `'full'`, `'left'`, `'inlineLeft'`, `'center'`, `'right'`, `'inlineRight'`, and `'inline'`.
118
+ */
119
+ export const DEFAULT_ICONS = {
120
+ full: objectFullWidth,
121
+ left: objectBlockLeft,
122
+ right: objectBlockRight,
123
+ center: objectCenter,
124
+ inlineLeft: objectLeft,
125
+ inlineRight: objectRight,
126
+ inline: objectInline
127
+ };
128
+ /**
129
+ * Default drop-downs provided by the plugin that can be referred in the {@link module:image/imageconfig~ImageConfig#toolbar}
130
+ * configuration. The drop-downs are containers for the {@link module:image/imageconfig~ImageStyleConfig#options image style options}.
131
+ *
132
+ * If both of the `ImageEditing` plugins are loaded, there are 2 predefined drop-downs available:
133
+ *
134
+ * * **`'imageStyle:wrapText'`**, which contains the `alignLeft` and `alignRight` options, that is,
135
+ * those that wraps the text around the image,
136
+ * * **`'imageStyle:breakText'`**, which contains the `alignBlockLeft`, `alignCenter` and `alignBlockRight` options, that is,
137
+ * those that breaks the text around the image.
138
+ */
139
+ export const DEFAULT_DROPDOWN_DEFINITIONS = [{
140
+ name: 'imageStyle:wrapText',
141
+ title: 'Wrap text',
142
+ defaultItem: 'imageStyle:alignLeft',
143
+ items: ['imageStyle:alignLeft', 'imageStyle:alignRight']
144
+ }, {
145
+ name: 'imageStyle:breakText',
146
+ title: 'Break text',
147
+ defaultItem: 'imageStyle:block',
148
+ items: ['imageStyle:alignBlockLeft', 'imageStyle:block', 'imageStyle:alignBlockRight']
149
+ }];
150
+ /**
151
+ * Returns a list of the normalized and validated image style options.
152
+ *
153
+ * @param config
154
+ * @param config.isInlinePluginLoaded
155
+ * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.
156
+ * @param config.isBlockPluginLoaded
157
+ * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.
158
+ * @param config.configuredStyles
159
+ * The image styles configuration provided in the image styles {@link module:image/imageconfig~ImageConfig#styles configuration}
160
+ * as a default or custom value.
161
+ * @returns
162
+ * * Each of options contains a complete icon markup.
163
+ * * The image style options not supported by any of the loaded plugins are filtered out.
164
+ */
165
+ function normalizeStyles(config) {
166
+ const configuredStyles = config.configuredStyles.options || [];
167
+ const styles = configuredStyles
168
+ .map(arrangement => normalizeDefinition(arrangement))
169
+ .filter(arrangement => isValidOption(arrangement, config));
170
+ return styles;
171
+ }
172
+ /**
173
+ * Returns the default image styles configuration depending on the loaded image editing plugins.
174
+ *
175
+ * @param isInlinePluginLoaded
176
+ * Determines whether the {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugin has been loaded.
177
+ *
178
+ * @param isBlockPluginLoaded
179
+ * Determines whether the {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`} plugin has been loaded.
180
+ *
181
+ * @returns
182
+ * It returns an object with the lists of the image style options and groups defined as strings related to the
183
+ * {@link module:image/imagestyle/utils#DEFAULT_OPTIONS default options}
184
+ */
185
+ function getDefaultStylesConfiguration(isBlockPluginLoaded, isInlinePluginLoaded) {
186
+ if (isBlockPluginLoaded && isInlinePluginLoaded) {
187
+ return {
188
+ options: [
189
+ 'inline', 'alignLeft', 'alignRight',
190
+ 'alignCenter', 'alignBlockLeft', 'alignBlockRight',
191
+ 'block', 'side'
192
+ ]
193
+ };
194
+ }
195
+ else if (isBlockPluginLoaded) {
196
+ return {
197
+ options: ['block', 'side']
198
+ };
199
+ }
200
+ else if (isInlinePluginLoaded) {
201
+ return {
202
+ options: ['inline', 'alignLeft', 'alignRight']
203
+ };
204
+ }
205
+ return {};
206
+ }
207
+ /**
208
+ * Returns a list of the available predefined drop-downs' definitions depending on the loaded image editing plugins.
209
+ */
210
+ function getDefaultDropdownDefinitions(pluginCollection) {
211
+ if (pluginCollection.has('ImageBlockEditing') && pluginCollection.has('ImageInlineEditing')) {
212
+ return [...DEFAULT_DROPDOWN_DEFINITIONS];
213
+ }
214
+ else {
215
+ return [];
216
+ }
217
+ }
218
+ /**
219
+ * Normalizes an image style option or group provided in the {@link module:image/imageconfig~ImageConfig#styles}
220
+ * and returns it in a {@link module:image/imageconfig~ImageStyleOptionDefinition}/
221
+ */
222
+ function normalizeDefinition(definition) {
223
+ if (typeof definition === 'string') {
224
+ // Just the name of the style has been passed, but none of the defaults.
225
+ if (!DEFAULT_OPTIONS[definition]) {
226
+ // Normalize the style anyway to prevent errors.
227
+ definition = { name: definition };
228
+ }
229
+ // Just the name of the style has been passed and it's one of the defaults, just use it.
230
+ // Clone the style to avoid overriding defaults.
231
+ else {
232
+ definition = { ...DEFAULT_OPTIONS[definition] };
233
+ }
234
+ }
235
+ else {
236
+ // If an object style has been passed and if the name matches one of the defaults,
237
+ // extend it with defaults – the user wants to customize a default style.
238
+ // Note: Don't override the user–defined style object, clone it instead.
239
+ definition = extendStyle(DEFAULT_OPTIONS[definition.name], definition);
240
+ }
241
+ // If an icon is defined as a string and correspond with a name
242
+ // in default icons, use the default icon provided by the plugin.
243
+ if (typeof definition.icon === 'string') {
244
+ definition.icon = DEFAULT_ICONS[definition.icon] || definition.icon;
245
+ }
246
+ return definition;
247
+ }
248
+ /**
249
+ * Checks if the image style option is valid:
250
+ * * if it has the modelElements fields defined and filled,
251
+ * * if the defined modelElements are supported by any of the loaded image editing plugins.
252
+ * It also displays a console warning these conditions are not met.
253
+ *
254
+ * @param option image style option
255
+ */
256
+ function isValidOption(option, { isBlockPluginLoaded, isInlinePluginLoaded }) {
257
+ const { modelElements, name } = option;
258
+ if (!modelElements || !modelElements.length || !name) {
259
+ warnInvalidStyle({ style: option });
260
+ return false;
261
+ }
262
+ else {
263
+ const supportedElements = [isBlockPluginLoaded ? 'imageBlock' : null, isInlinePluginLoaded ? 'imageInline' : null];
264
+ // Check if the option is supported by any of the loaded plugins.
265
+ if (!modelElements.some(elementName => supportedElements.includes(elementName))) {
266
+ /**
267
+ * In order to work correctly, each image style {@link module:image/imageconfig~ImageStyleOptionDefinition option}
268
+ * requires specific model elements (also: types of images) to be supported by the editor.
269
+ *
270
+ * Model element names to which the image style option can be applied are defined in the
271
+ * {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements} property of the style option
272
+ * definition.
273
+ *
274
+ * Explore the warning in the console to find out precisely which option is not supported and which editor plugins
275
+ * are missing. Make sure these plugins are loaded in your editor to get this image style option working.
276
+ *
277
+ * @error image-style-missing-dependency
278
+ * @param {String} [option] The name of the unsupported option.
279
+ * @param {String} [missingPlugins] The names of the plugins one of which has to be loaded for the particular option.
280
+ */
281
+ logWarning('image-style-missing-dependency', {
282
+ style: option,
283
+ missingPlugins: modelElements.map(name => name === 'imageBlock' ? 'ImageBlockEditing' : 'ImageInlineEditing')
284
+ });
285
+ return false;
286
+ }
287
+ }
288
+ return true;
289
+ }
290
+ /**
291
+ * Extends the default style with a style provided by the developer.
292
+ * Note: Don't override the custom–defined style object, clone it instead.
293
+ */
294
+ function extendStyle(source, style) {
295
+ const extendedStyle = { ...style };
296
+ for (const prop in source) {
297
+ if (!Object.prototype.hasOwnProperty.call(style, prop)) {
298
+ extendedStyle[prop] = source[prop];
299
+ }
300
+ }
301
+ return extendedStyle;
302
+ }
303
+ /**
304
+ * Displays a console warning with the 'image-style-configuration-definition-invalid' error.
305
+ */
306
+ function warnInvalidStyle(info) {
307
+ /**
308
+ * The image style definition provided in the configuration is invalid.
309
+ *
310
+ * Please make sure the definition implements properly one of the following:
311
+ *
312
+ * * {@link module:image/imageconfig~ImageStyleOptionDefinition image style option definition},
313
+ * * {@link module:image/imageconfig~ImageStyleDropdownDefinition image style dropdown definition}
314
+ *
315
+ * @error image-style-configuration-definition-invalid
316
+ * @param {String} [dropdown] The name of the invalid drop-down
317
+ * @param {String} [style] The name of the invalid image style option
318
+ */
319
+ logWarning('image-style-configuration-definition-invalid', info);
320
+ }
321
+ export default {
322
+ normalizeStyles,
323
+ getDefaultStylesConfiguration,
324
+ getDefaultDropdownDefinitions,
325
+ warnInvalidStyle,
326
+ DEFAULT_OPTIONS,
327
+ DEFAULT_ICONS,
328
+ DEFAULT_DROPDOWN_DEFINITIONS
329
+ };