@ckeditor/ckeditor5-image 0.0.0-internal-20241017.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 (526) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +26 -0
  4. package/build/image.js +5 -0
  5. package/build/translations/ar.js +1 -0
  6. package/build/translations/ast.js +1 -0
  7. package/build/translations/az.js +1 -0
  8. package/build/translations/bg.js +1 -0
  9. package/build/translations/bn.js +1 -0
  10. package/build/translations/bs.js +1 -0
  11. package/build/translations/ca.js +1 -0
  12. package/build/translations/cs.js +1 -0
  13. package/build/translations/da.js +1 -0
  14. package/build/translations/de-ch.js +1 -0
  15. package/build/translations/de.js +1 -0
  16. package/build/translations/el.js +1 -0
  17. package/build/translations/en-au.js +1 -0
  18. package/build/translations/en-gb.js +1 -0
  19. package/build/translations/eo.js +1 -0
  20. package/build/translations/es.js +1 -0
  21. package/build/translations/et.js +1 -0
  22. package/build/translations/eu.js +1 -0
  23. package/build/translations/fa.js +1 -0
  24. package/build/translations/fi.js +1 -0
  25. package/build/translations/fr.js +1 -0
  26. package/build/translations/gl.js +1 -0
  27. package/build/translations/he.js +1 -0
  28. package/build/translations/hi.js +1 -0
  29. package/build/translations/hr.js +1 -0
  30. package/build/translations/hu.js +1 -0
  31. package/build/translations/id.js +1 -0
  32. package/build/translations/it.js +1 -0
  33. package/build/translations/ja.js +1 -0
  34. package/build/translations/jv.js +1 -0
  35. package/build/translations/km.js +1 -0
  36. package/build/translations/kn.js +1 -0
  37. package/build/translations/ko.js +1 -0
  38. package/build/translations/ku.js +1 -0
  39. package/build/translations/lt.js +1 -0
  40. package/build/translations/lv.js +1 -0
  41. package/build/translations/ms.js +1 -0
  42. package/build/translations/nb.js +1 -0
  43. package/build/translations/ne.js +1 -0
  44. package/build/translations/nl.js +1 -0
  45. package/build/translations/no.js +1 -0
  46. package/build/translations/pl.js +1 -0
  47. package/build/translations/pt-br.js +1 -0
  48. package/build/translations/pt.js +1 -0
  49. package/build/translations/ro.js +1 -0
  50. package/build/translations/ru.js +1 -0
  51. package/build/translations/si.js +1 -0
  52. package/build/translations/sk.js +1 -0
  53. package/build/translations/sq.js +1 -0
  54. package/build/translations/sr-latn.js +1 -0
  55. package/build/translations/sr.js +1 -0
  56. package/build/translations/sv.js +1 -0
  57. package/build/translations/th.js +1 -0
  58. package/build/translations/ti.js +1 -0
  59. package/build/translations/tk.js +1 -0
  60. package/build/translations/tr.js +1 -0
  61. package/build/translations/ug.js +1 -0
  62. package/build/translations/uk.js +1 -0
  63. package/build/translations/ur.js +1 -0
  64. package/build/translations/uz.js +1 -0
  65. package/build/translations/vi.js +1 -0
  66. package/build/translations/zh-cn.js +1 -0
  67. package/build/translations/zh.js +1 -0
  68. package/ckeditor5-metadata.json +270 -0
  69. package/dist/augmentation.d.ts +61 -0
  70. package/dist/autoimage.d.ts +60 -0
  71. package/dist/image/converters.d.ts +70 -0
  72. package/dist/image/imageblockediting.d.ts +67 -0
  73. package/dist/image/imageediting.d.ts +38 -0
  74. package/dist/image/imageinlineediting.d.ts +68 -0
  75. package/dist/image/imageloadobserver.d.ts +52 -0
  76. package/dist/image/imageplaceholder.d.ts +47 -0
  77. package/dist/image/imagetypecommand.d.ts +48 -0
  78. package/dist/image/insertimagecommand.d.ts +72 -0
  79. package/dist/image/replaceimagesourcecommand.d.ts +55 -0
  80. package/dist/image/ui/utils.d.ts +29 -0
  81. package/dist/image/utils.d.ts +68 -0
  82. package/dist/image.d.ts +42 -0
  83. package/dist/imageblock.d.ts +42 -0
  84. package/dist/imagecaption/imagecaptionediting.d.ts +97 -0
  85. package/dist/imagecaption/imagecaptionui.d.ts +34 -0
  86. package/dist/imagecaption/imagecaptionutils.d.ts +46 -0
  87. package/dist/imagecaption/toggleimagecaptioncommand.d.ts +70 -0
  88. package/dist/imagecaption.d.ts +34 -0
  89. package/dist/imageconfig.d.ts +716 -0
  90. package/dist/imageinline.d.ts +42 -0
  91. package/dist/imageinsert/imageinsertui.d.ts +90 -0
  92. package/dist/imageinsert/imageinsertviaurlui.d.ts +74 -0
  93. package/dist/imageinsert/ui/imageinsertformview.d.ts +60 -0
  94. package/dist/imageinsert/ui/imageinserturlview.d.ts +68 -0
  95. package/dist/imageinsert.d.ts +41 -0
  96. package/dist/imageinsertviaurl.d.ts +39 -0
  97. package/dist/imageresize/imagecustomresizeui.d.ts +69 -0
  98. package/dist/imageresize/imageresizebuttons.d.ts +72 -0
  99. package/dist/imageresize/imageresizeediting.d.ts +49 -0
  100. package/dist/imageresize/imageresizehandles.d.ts +39 -0
  101. package/dist/imageresize/resizeimagecommand.d.ts +46 -0
  102. package/dist/imageresize/ui/imagecustomresizeformview.d.ts +133 -0
  103. package/dist/imageresize/utils/getselectedimageeditornodes.d.ts +28 -0
  104. package/dist/imageresize/utils/getselectedimagepossibleresizerange.d.ts +28 -0
  105. package/dist/imageresize/utils/getselectedimagewidthinunits.d.ts +22 -0
  106. package/dist/imageresize/utils/tryparsedimensionwithunit.d.ts +41 -0
  107. package/dist/imageresize.d.ts +36 -0
  108. package/dist/imagesizeattributes.d.ts +42 -0
  109. package/dist/imagestyle/converters.d.ts +28 -0
  110. package/dist/imagestyle/imagestylecommand.d.ts +72 -0
  111. package/dist/imagestyle/imagestyleediting.d.ts +58 -0
  112. package/dist/imagestyle/imagestyleui.d.ts +64 -0
  113. package/dist/imagestyle/utils.d.ts +105 -0
  114. package/dist/imagestyle.d.ts +40 -0
  115. package/dist/imagetextalternative/imagetextalternativecommand.d.ts +38 -0
  116. package/dist/imagetextalternative/imagetextalternativeediting.d.ts +36 -0
  117. package/dist/imagetextalternative/imagetextalternativeui.d.ts +76 -0
  118. package/dist/imagetextalternative/ui/textalternativeformview.d.ts +94 -0
  119. package/dist/imagetextalternative.d.ts +37 -0
  120. package/dist/imagetoolbar.d.ts +43 -0
  121. package/dist/imageupload/imageuploadediting.d.ts +119 -0
  122. package/dist/imageupload/imageuploadprogress.d.ts +50 -0
  123. package/dist/imageupload/imageuploadui.d.ts +55 -0
  124. package/dist/imageupload/uploadimagecommand.d.ts +78 -0
  125. package/dist/imageupload/utils.d.ts +37 -0
  126. package/dist/imageupload.d.ts +40 -0
  127. package/dist/imageutils.d.ts +133 -0
  128. package/dist/index-content.css +150 -0
  129. package/dist/index-editor.css +248 -0
  130. package/dist/index.css +579 -0
  131. package/dist/index.css.map +1 -0
  132. package/dist/index.d.ts +54 -0
  133. package/dist/index.js +6383 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/pictureediting.d.ts +96 -0
  136. package/dist/translations/ar.d.ts +8 -0
  137. package/dist/translations/ar.js +5 -0
  138. package/dist/translations/ar.umd.js +11 -0
  139. package/dist/translations/ast.d.ts +8 -0
  140. package/dist/translations/ast.js +5 -0
  141. package/dist/translations/ast.umd.js +11 -0
  142. package/dist/translations/az.d.ts +8 -0
  143. package/dist/translations/az.js +5 -0
  144. package/dist/translations/az.umd.js +11 -0
  145. package/dist/translations/bg.d.ts +8 -0
  146. package/dist/translations/bg.js +5 -0
  147. package/dist/translations/bg.umd.js +11 -0
  148. package/dist/translations/bn.d.ts +8 -0
  149. package/dist/translations/bn.js +5 -0
  150. package/dist/translations/bn.umd.js +11 -0
  151. package/dist/translations/bs.d.ts +8 -0
  152. package/dist/translations/bs.js +5 -0
  153. package/dist/translations/bs.umd.js +11 -0
  154. package/dist/translations/ca.d.ts +8 -0
  155. package/dist/translations/ca.js +5 -0
  156. package/dist/translations/ca.umd.js +11 -0
  157. package/dist/translations/cs.d.ts +8 -0
  158. package/dist/translations/cs.js +5 -0
  159. package/dist/translations/cs.umd.js +11 -0
  160. package/dist/translations/da.d.ts +8 -0
  161. package/dist/translations/da.js +5 -0
  162. package/dist/translations/da.umd.js +11 -0
  163. package/dist/translations/de-ch.d.ts +8 -0
  164. package/dist/translations/de-ch.js +5 -0
  165. package/dist/translations/de-ch.umd.js +11 -0
  166. package/dist/translations/de.d.ts +8 -0
  167. package/dist/translations/de.js +5 -0
  168. package/dist/translations/de.umd.js +11 -0
  169. package/dist/translations/el.d.ts +8 -0
  170. package/dist/translations/el.js +5 -0
  171. package/dist/translations/el.umd.js +11 -0
  172. package/dist/translations/en-au.d.ts +8 -0
  173. package/dist/translations/en-au.js +5 -0
  174. package/dist/translations/en-au.umd.js +11 -0
  175. package/dist/translations/en-gb.d.ts +8 -0
  176. package/dist/translations/en-gb.js +5 -0
  177. package/dist/translations/en-gb.umd.js +11 -0
  178. package/dist/translations/en.d.ts +8 -0
  179. package/dist/translations/en.js +5 -0
  180. package/dist/translations/en.umd.js +11 -0
  181. package/dist/translations/eo.d.ts +8 -0
  182. package/dist/translations/eo.js +5 -0
  183. package/dist/translations/eo.umd.js +11 -0
  184. package/dist/translations/es.d.ts +8 -0
  185. package/dist/translations/es.js +5 -0
  186. package/dist/translations/es.umd.js +11 -0
  187. package/dist/translations/et.d.ts +8 -0
  188. package/dist/translations/et.js +5 -0
  189. package/dist/translations/et.umd.js +11 -0
  190. package/dist/translations/eu.d.ts +8 -0
  191. package/dist/translations/eu.js +5 -0
  192. package/dist/translations/eu.umd.js +11 -0
  193. package/dist/translations/fa.d.ts +8 -0
  194. package/dist/translations/fa.js +5 -0
  195. package/dist/translations/fa.umd.js +11 -0
  196. package/dist/translations/fi.d.ts +8 -0
  197. package/dist/translations/fi.js +5 -0
  198. package/dist/translations/fi.umd.js +11 -0
  199. package/dist/translations/fr.d.ts +8 -0
  200. package/dist/translations/fr.js +5 -0
  201. package/dist/translations/fr.umd.js +11 -0
  202. package/dist/translations/gl.d.ts +8 -0
  203. package/dist/translations/gl.js +5 -0
  204. package/dist/translations/gl.umd.js +11 -0
  205. package/dist/translations/he.d.ts +8 -0
  206. package/dist/translations/he.js +5 -0
  207. package/dist/translations/he.umd.js +11 -0
  208. package/dist/translations/hi.d.ts +8 -0
  209. package/dist/translations/hi.js +5 -0
  210. package/dist/translations/hi.umd.js +11 -0
  211. package/dist/translations/hr.d.ts +8 -0
  212. package/dist/translations/hr.js +5 -0
  213. package/dist/translations/hr.umd.js +11 -0
  214. package/dist/translations/hu.d.ts +8 -0
  215. package/dist/translations/hu.js +5 -0
  216. package/dist/translations/hu.umd.js +11 -0
  217. package/dist/translations/id.d.ts +8 -0
  218. package/dist/translations/id.js +5 -0
  219. package/dist/translations/id.umd.js +11 -0
  220. package/dist/translations/it.d.ts +8 -0
  221. package/dist/translations/it.js +5 -0
  222. package/dist/translations/it.umd.js +11 -0
  223. package/dist/translations/ja.d.ts +8 -0
  224. package/dist/translations/ja.js +5 -0
  225. package/dist/translations/ja.umd.js +11 -0
  226. package/dist/translations/jv.d.ts +8 -0
  227. package/dist/translations/jv.js +5 -0
  228. package/dist/translations/jv.umd.js +11 -0
  229. package/dist/translations/km.d.ts +8 -0
  230. package/dist/translations/km.js +5 -0
  231. package/dist/translations/km.umd.js +11 -0
  232. package/dist/translations/kn.d.ts +8 -0
  233. package/dist/translations/kn.js +5 -0
  234. package/dist/translations/kn.umd.js +11 -0
  235. package/dist/translations/ko.d.ts +8 -0
  236. package/dist/translations/ko.js +5 -0
  237. package/dist/translations/ko.umd.js +11 -0
  238. package/dist/translations/ku.d.ts +8 -0
  239. package/dist/translations/ku.js +5 -0
  240. package/dist/translations/ku.umd.js +11 -0
  241. package/dist/translations/lt.d.ts +8 -0
  242. package/dist/translations/lt.js +5 -0
  243. package/dist/translations/lt.umd.js +11 -0
  244. package/dist/translations/lv.d.ts +8 -0
  245. package/dist/translations/lv.js +5 -0
  246. package/dist/translations/lv.umd.js +11 -0
  247. package/dist/translations/ms.d.ts +8 -0
  248. package/dist/translations/ms.js +5 -0
  249. package/dist/translations/ms.umd.js +11 -0
  250. package/dist/translations/nb.d.ts +8 -0
  251. package/dist/translations/nb.js +5 -0
  252. package/dist/translations/nb.umd.js +11 -0
  253. package/dist/translations/ne.d.ts +8 -0
  254. package/dist/translations/ne.js +5 -0
  255. package/dist/translations/ne.umd.js +11 -0
  256. package/dist/translations/nl.d.ts +8 -0
  257. package/dist/translations/nl.js +5 -0
  258. package/dist/translations/nl.umd.js +11 -0
  259. package/dist/translations/no.d.ts +8 -0
  260. package/dist/translations/no.js +5 -0
  261. package/dist/translations/no.umd.js +11 -0
  262. package/dist/translations/pl.d.ts +8 -0
  263. package/dist/translations/pl.js +5 -0
  264. package/dist/translations/pl.umd.js +11 -0
  265. package/dist/translations/pt-br.d.ts +8 -0
  266. package/dist/translations/pt-br.js +5 -0
  267. package/dist/translations/pt-br.umd.js +11 -0
  268. package/dist/translations/pt.d.ts +8 -0
  269. package/dist/translations/pt.js +5 -0
  270. package/dist/translations/pt.umd.js +11 -0
  271. package/dist/translations/ro.d.ts +8 -0
  272. package/dist/translations/ro.js +5 -0
  273. package/dist/translations/ro.umd.js +11 -0
  274. package/dist/translations/ru.d.ts +8 -0
  275. package/dist/translations/ru.js +5 -0
  276. package/dist/translations/ru.umd.js +11 -0
  277. package/dist/translations/si.d.ts +8 -0
  278. package/dist/translations/si.js +5 -0
  279. package/dist/translations/si.umd.js +11 -0
  280. package/dist/translations/sk.d.ts +8 -0
  281. package/dist/translations/sk.js +5 -0
  282. package/dist/translations/sk.umd.js +11 -0
  283. package/dist/translations/sq.d.ts +8 -0
  284. package/dist/translations/sq.js +5 -0
  285. package/dist/translations/sq.umd.js +11 -0
  286. package/dist/translations/sr-latn.d.ts +8 -0
  287. package/dist/translations/sr-latn.js +5 -0
  288. package/dist/translations/sr-latn.umd.js +11 -0
  289. package/dist/translations/sr.d.ts +8 -0
  290. package/dist/translations/sr.js +5 -0
  291. package/dist/translations/sr.umd.js +11 -0
  292. package/dist/translations/sv.d.ts +8 -0
  293. package/dist/translations/sv.js +5 -0
  294. package/dist/translations/sv.umd.js +11 -0
  295. package/dist/translations/th.d.ts +8 -0
  296. package/dist/translations/th.js +5 -0
  297. package/dist/translations/th.umd.js +11 -0
  298. package/dist/translations/ti.d.ts +8 -0
  299. package/dist/translations/ti.js +5 -0
  300. package/dist/translations/ti.umd.js +11 -0
  301. package/dist/translations/tk.d.ts +8 -0
  302. package/dist/translations/tk.js +5 -0
  303. package/dist/translations/tk.umd.js +11 -0
  304. package/dist/translations/tr.d.ts +8 -0
  305. package/dist/translations/tr.js +5 -0
  306. package/dist/translations/tr.umd.js +11 -0
  307. package/dist/translations/ug.d.ts +8 -0
  308. package/dist/translations/ug.js +5 -0
  309. package/dist/translations/ug.umd.js +11 -0
  310. package/dist/translations/uk.d.ts +8 -0
  311. package/dist/translations/uk.js +5 -0
  312. package/dist/translations/uk.umd.js +11 -0
  313. package/dist/translations/ur.d.ts +8 -0
  314. package/dist/translations/ur.js +5 -0
  315. package/dist/translations/ur.umd.js +11 -0
  316. package/dist/translations/uz.d.ts +8 -0
  317. package/dist/translations/uz.js +5 -0
  318. package/dist/translations/uz.umd.js +11 -0
  319. package/dist/translations/vi.d.ts +8 -0
  320. package/dist/translations/vi.js +5 -0
  321. package/dist/translations/vi.umd.js +11 -0
  322. package/dist/translations/zh-cn.d.ts +8 -0
  323. package/dist/translations/zh-cn.js +5 -0
  324. package/dist/translations/zh-cn.umd.js +11 -0
  325. package/dist/translations/zh.d.ts +8 -0
  326. package/dist/translations/zh.js +5 -0
  327. package/dist/translations/zh.umd.js +11 -0
  328. package/lang/contexts.json +46 -0
  329. package/lang/translations/ar.po +194 -0
  330. package/lang/translations/ast.po +194 -0
  331. package/lang/translations/az.po +194 -0
  332. package/lang/translations/bg.po +194 -0
  333. package/lang/translations/bn.po +194 -0
  334. package/lang/translations/bs.po +194 -0
  335. package/lang/translations/ca.po +194 -0
  336. package/lang/translations/cs.po +194 -0
  337. package/lang/translations/da.po +194 -0
  338. package/lang/translations/de-ch.po +194 -0
  339. package/lang/translations/de.po +194 -0
  340. package/lang/translations/el.po +194 -0
  341. package/lang/translations/en-au.po +194 -0
  342. package/lang/translations/en-gb.po +194 -0
  343. package/lang/translations/en.po +194 -0
  344. package/lang/translations/eo.po +194 -0
  345. package/lang/translations/es.po +194 -0
  346. package/lang/translations/et.po +194 -0
  347. package/lang/translations/eu.po +194 -0
  348. package/lang/translations/fa.po +194 -0
  349. package/lang/translations/fi.po +194 -0
  350. package/lang/translations/fr.po +194 -0
  351. package/lang/translations/gl.po +194 -0
  352. package/lang/translations/he.po +194 -0
  353. package/lang/translations/hi.po +194 -0
  354. package/lang/translations/hr.po +194 -0
  355. package/lang/translations/hu.po +194 -0
  356. package/lang/translations/id.po +194 -0
  357. package/lang/translations/it.po +194 -0
  358. package/lang/translations/ja.po +194 -0
  359. package/lang/translations/jv.po +194 -0
  360. package/lang/translations/km.po +194 -0
  361. package/lang/translations/kn.po +194 -0
  362. package/lang/translations/ko.po +194 -0
  363. package/lang/translations/ku.po +194 -0
  364. package/lang/translations/lt.po +194 -0
  365. package/lang/translations/lv.po +194 -0
  366. package/lang/translations/ms.po +194 -0
  367. package/lang/translations/nb.po +194 -0
  368. package/lang/translations/ne.po +194 -0
  369. package/lang/translations/nl.po +194 -0
  370. package/lang/translations/no.po +194 -0
  371. package/lang/translations/pl.po +194 -0
  372. package/lang/translations/pt-br.po +194 -0
  373. package/lang/translations/pt.po +194 -0
  374. package/lang/translations/ro.po +194 -0
  375. package/lang/translations/ru.po +194 -0
  376. package/lang/translations/si.po +194 -0
  377. package/lang/translations/sk.po +194 -0
  378. package/lang/translations/sq.po +194 -0
  379. package/lang/translations/sr-latn.po +194 -0
  380. package/lang/translations/sr.po +194 -0
  381. package/lang/translations/sv.po +194 -0
  382. package/lang/translations/th.po +194 -0
  383. package/lang/translations/ti.po +194 -0
  384. package/lang/translations/tk.po +194 -0
  385. package/lang/translations/tr.po +194 -0
  386. package/lang/translations/ug.po +194 -0
  387. package/lang/translations/uk.po +194 -0
  388. package/lang/translations/ur.po +194 -0
  389. package/lang/translations/uz.po +194 -0
  390. package/lang/translations/vi.po +194 -0
  391. package/lang/translations/zh-cn.po +194 -0
  392. package/lang/translations/zh.po +194 -0
  393. package/package.json +48 -0
  394. package/src/augmentation.d.ts +57 -0
  395. package/src/augmentation.js +5 -0
  396. package/src/autoimage.d.ts +56 -0
  397. package/src/autoimage.js +138 -0
  398. package/src/image/converters.d.ts +66 -0
  399. package/src/image/converters.js +232 -0
  400. package/src/image/imageblockediting.d.ts +63 -0
  401. package/src/image/imageblockediting.js +159 -0
  402. package/src/image/imageediting.d.ts +34 -0
  403. package/src/image/imageediting.js +69 -0
  404. package/src/image/imageinlineediting.d.ts +64 -0
  405. package/src/image/imageinlineediting.js +178 -0
  406. package/src/image/imageloadobserver.d.ts +48 -0
  407. package/src/image/imageloadobserver.js +52 -0
  408. package/src/image/imageplaceholder.d.ts +43 -0
  409. package/src/image/imageplaceholder.js +119 -0
  410. package/src/image/imagetypecommand.d.ts +44 -0
  411. package/src/image/imagetypecommand.js +80 -0
  412. package/src/image/insertimagecommand.d.ts +68 -0
  413. package/src/image/insertimagecommand.js +121 -0
  414. package/src/image/replaceimagesourcecommand.d.ts +51 -0
  415. package/src/image/replaceimagesourcecommand.js +75 -0
  416. package/src/image/ui/utils.d.ts +25 -0
  417. package/src/image/ui/utils.js +44 -0
  418. package/src/image/utils.d.ts +64 -0
  419. package/src/image/utils.js +121 -0
  420. package/src/image.d.ts +38 -0
  421. package/src/image.js +44 -0
  422. package/src/imageblock.d.ts +38 -0
  423. package/src/imageblock.js +44 -0
  424. package/src/imagecaption/imagecaptionediting.d.ts +93 -0
  425. package/src/imagecaption/imagecaptionediting.js +231 -0
  426. package/src/imagecaption/imagecaptionui.d.ts +30 -0
  427. package/src/imagecaption/imagecaptionui.js +67 -0
  428. package/src/imagecaption/imagecaptionutils.d.ts +42 -0
  429. package/src/imagecaption/imagecaptionutils.js +68 -0
  430. package/src/imagecaption/toggleimagecaptioncommand.d.ts +66 -0
  431. package/src/imagecaption/toggleimagecaptioncommand.js +138 -0
  432. package/src/imagecaption.d.ts +30 -0
  433. package/src/imagecaption.js +36 -0
  434. package/src/imageconfig.d.ts +712 -0
  435. package/src/imageconfig.js +5 -0
  436. package/src/imageinline.d.ts +38 -0
  437. package/src/imageinline.js +44 -0
  438. package/src/imageinsert/imageinsertui.d.ts +86 -0
  439. package/src/imageinsert/imageinsertui.js +217 -0
  440. package/src/imageinsert/imageinsertviaurlui.d.ts +70 -0
  441. package/src/imageinsert/imageinsertviaurlui.js +174 -0
  442. package/src/imageinsert/ui/imageinsertformview.d.ts +56 -0
  443. package/src/imageinsert/ui/imageinsertformview.js +95 -0
  444. package/src/imageinsert/ui/imageinserturlview.d.ts +64 -0
  445. package/src/imageinsert/ui/imageinserturlview.js +88 -0
  446. package/src/imageinsert.d.ts +37 -0
  447. package/src/imageinsert.js +43 -0
  448. package/src/imageinsertviaurl.d.ts +35 -0
  449. package/src/imageinsertviaurl.js +41 -0
  450. package/src/imageresize/imagecustomresizeui.d.ts +65 -0
  451. package/src/imageresize/imagecustomresizeui.js +174 -0
  452. package/src/imageresize/imageresizebuttons.d.ts +68 -0
  453. package/src/imageresize/imageresizebuttons.js +295 -0
  454. package/src/imageresize/imageresizeediting.d.ts +45 -0
  455. package/src/imageresize/imageresizeediting.js +183 -0
  456. package/src/imageresize/imageresizehandles.d.ts +35 -0
  457. package/src/imageresize/imageresizehandles.js +118 -0
  458. package/src/imageresize/resizeimagecommand.d.ts +42 -0
  459. package/src/imageresize/resizeimagecommand.js +63 -0
  460. package/src/imageresize/ui/imagecustomresizeformview.d.ts +129 -0
  461. package/src/imageresize/ui/imagecustomresizeformview.js +186 -0
  462. package/src/imageresize/utils/getselectedimageeditornodes.d.ts +24 -0
  463. package/src/imageresize/utils/getselectedimageeditornodes.js +24 -0
  464. package/src/imageresize/utils/getselectedimagepossibleresizerange.d.ts +24 -0
  465. package/src/imageresize/utils/getselectedimagepossibleresizerange.js +32 -0
  466. package/src/imageresize/utils/getselectedimagewidthinunits.d.ts +18 -0
  467. package/src/imageresize/utils/getselectedimagewidthinunits.js +41 -0
  468. package/src/imageresize/utils/tryparsedimensionwithunit.d.ts +37 -0
  469. package/src/imageresize/utils/tryparsedimensionwithunit.js +56 -0
  470. package/src/imageresize.d.ts +32 -0
  471. package/src/imageresize.js +38 -0
  472. package/src/imagesizeattributes.d.ts +38 -0
  473. package/src/imagesizeattributes.js +148 -0
  474. package/src/imagestyle/converters.d.ts +24 -0
  475. package/src/imagestyle/converters.js +79 -0
  476. package/src/imagestyle/imagestylecommand.d.ts +68 -0
  477. package/src/imagestyle/imagestylecommand.js +107 -0
  478. package/src/imagestyle/imagestyleediting.d.ts +54 -0
  479. package/src/imagestyle/imagestyleediting.js +114 -0
  480. package/src/imagestyle/imagestyleui.d.ts +60 -0
  481. package/src/imagestyle/imagestyleui.js +198 -0
  482. package/src/imagestyle/utils.d.ts +101 -0
  483. package/src/imagestyle/utils.js +328 -0
  484. package/src/imagestyle.d.ts +36 -0
  485. package/src/imagestyle.js +42 -0
  486. package/src/imagetextalternative/imagetextalternativecommand.d.ts +34 -0
  487. package/src/imagetextalternative/imagetextalternativecommand.js +44 -0
  488. package/src/imagetextalternative/imagetextalternativeediting.d.ts +32 -0
  489. package/src/imagetextalternative/imagetextalternativeediting.js +41 -0
  490. package/src/imagetextalternative/imagetextalternativeui.d.ts +72 -0
  491. package/src/imagetextalternative/imagetextalternativeui.js +179 -0
  492. package/src/imagetextalternative/ui/textalternativeformview.d.ts +90 -0
  493. package/src/imagetextalternative/ui/textalternativeformview.js +121 -0
  494. package/src/imagetextalternative.d.ts +33 -0
  495. package/src/imagetextalternative.js +39 -0
  496. package/src/imagetoolbar.d.ts +39 -0
  497. package/src/imagetoolbar.js +63 -0
  498. package/src/imageupload/imageuploadediting.d.ts +115 -0
  499. package/src/imageupload/imageuploadediting.js +361 -0
  500. package/src/imageupload/imageuploadprogress.d.ts +46 -0
  501. package/src/imageupload/imageuploadprogress.js +217 -0
  502. package/src/imageupload/imageuploadui.d.ts +51 -0
  503. package/src/imageupload/imageuploadui.js +134 -0
  504. package/src/imageupload/uploadimagecommand.d.ts +74 -0
  505. package/src/imageupload/uploadimagecommand.js +110 -0
  506. package/src/imageupload/utils.d.ts +33 -0
  507. package/src/imageupload/utils.js +112 -0
  508. package/src/imageupload.d.ts +36 -0
  509. package/src/imageupload.js +42 -0
  510. package/src/imageutils.d.ts +129 -0
  511. package/src/imageutils.js +312 -0
  512. package/src/index.d.ts +50 -0
  513. package/src/index.js +41 -0
  514. package/src/pictureediting.d.ts +92 -0
  515. package/src/pictureediting.js +136 -0
  516. package/theme/image.css +143 -0
  517. package/theme/imagecaption.css +51 -0
  518. package/theme/imagecustomresizeform.css +33 -0
  519. package/theme/imageinsert.css +14 -0
  520. package/theme/imageplaceholder.css +10 -0
  521. package/theme/imageresize.css +53 -0
  522. package/theme/imagestyle.css +120 -0
  523. package/theme/imageuploadicon.css +23 -0
  524. package/theme/imageuploadloader.css +18 -0
  525. package/theme/imageuploadprogress.css +19 -0
  526. package/theme/textalternativeform.css +32 -0
@@ -0,0 +1,159 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageblockediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';
10
+ import { UpcastWriter } from 'ckeditor5/src/engine.js';
11
+ import { downcastImageAttribute, downcastSrcsetAttribute, upcastImageFigure } from './converters.js';
12
+ import ImageEditing from './imageediting.js';
13
+ import ImageSizeAttributes from '../imagesizeattributes.js';
14
+ import ImageTypeCommand from './imagetypecommand.js';
15
+ import ImageUtils from '../imageutils.js';
16
+ import { getImgViewElementMatcher, createBlockImageViewElement, determineImageTypeForInsertionAtSelection } from './utils.js';
17
+ import ImagePlaceholder from './imageplaceholder.js';
18
+ /**
19
+ * The image block plugin.
20
+ *
21
+ * It registers:
22
+ *
23
+ * * `<imageBlock>` as a block element in the document schema, and allows `alt`, `src` and `srcset` attributes.
24
+ * * converters for editing and data pipelines.,
25
+ * * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeBlock'`} command that converts inline images into
26
+ * block images.
27
+ */
28
+ export default class ImageBlockEditing extends Plugin {
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get requires() {
33
+ return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];
34
+ }
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ static get pluginName() {
39
+ return 'ImageBlockEditing';
40
+ }
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ static get isOfficialPlugin() {
45
+ return true;
46
+ }
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ init() {
51
+ const editor = this.editor;
52
+ const schema = editor.model.schema;
53
+ // Converters 'alt' and 'srcset' are added in 'ImageEditing' plugin.
54
+ schema.register('imageBlock', {
55
+ inheritAllFrom: '$blockObject',
56
+ allowAttributes: ['alt', 'src', 'srcset']
57
+ });
58
+ this._setupConversion();
59
+ if (editor.plugins.has('ImageInlineEditing')) {
60
+ editor.commands.add('imageTypeBlock', new ImageTypeCommand(this.editor, 'imageBlock'));
61
+ this._setupClipboardIntegration();
62
+ }
63
+ }
64
+ /**
65
+ * Configures conversion pipelines to support upcasting and downcasting
66
+ * block images (block image widgets) and their attributes.
67
+ */
68
+ _setupConversion() {
69
+ const editor = this.editor;
70
+ const t = editor.t;
71
+ const conversion = editor.conversion;
72
+ const imageUtils = editor.plugins.get('ImageUtils');
73
+ conversion.for('dataDowncast')
74
+ .elementToStructure({
75
+ model: 'imageBlock',
76
+ view: (modelElement, { writer }) => createBlockImageViewElement(writer)
77
+ });
78
+ conversion.for('editingDowncast')
79
+ .elementToStructure({
80
+ model: 'imageBlock',
81
+ view: (modelElement, { writer }) => imageUtils.toImageWidget(createBlockImageViewElement(writer), writer, t('image widget'))
82
+ });
83
+ conversion.for('downcast')
84
+ .add(downcastImageAttribute(imageUtils, 'imageBlock', 'src'))
85
+ .add(downcastImageAttribute(imageUtils, 'imageBlock', 'alt'))
86
+ .add(downcastSrcsetAttribute(imageUtils, 'imageBlock'));
87
+ // More image related upcasts are in 'ImageEditing' plugin.
88
+ conversion.for('upcast')
89
+ .elementToElement({
90
+ view: getImgViewElementMatcher(editor, 'imageBlock'),
91
+ model: (viewImage, { writer }) => writer.createElement('imageBlock', viewImage.hasAttribute('src') ? { src: viewImage.getAttribute('src') } : undefined)
92
+ })
93
+ .add(upcastImageFigure(imageUtils));
94
+ }
95
+ /**
96
+ * Integrates the plugin with the clipboard pipeline.
97
+ *
98
+ * Idea is that the feature should recognize the user's intent when an **inline** image is
99
+ * pasted or dropped. If such an image is pasted/dropped:
100
+ *
101
+ * * into an empty block (e.g. an empty paragraph),
102
+ * * on another object (e.g. some block widget).
103
+ *
104
+ * it gets converted into a block image on the fly. We assume this is the user's intent
105
+ * if they decided to put their image there.
106
+ *
107
+ * See the `ImageInlineEditing` for the similar integration that works in the opposite direction.
108
+ *
109
+ * The feature also sets image `width` and `height` attributes on paste.
110
+ */
111
+ _setupClipboardIntegration() {
112
+ const editor = this.editor;
113
+ const model = editor.model;
114
+ const editingView = editor.editing.view;
115
+ const imageUtils = editor.plugins.get('ImageUtils');
116
+ const clipboardPipeline = editor.plugins.get('ClipboardPipeline');
117
+ this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {
118
+ const docFragmentChildren = Array.from(data.content.getChildren());
119
+ let modelRange;
120
+ // Make sure only <img> elements are dropped or pasted. Otherwise, if there some other HTML
121
+ // mixed up, this should be handled as a regular paste.
122
+ if (!docFragmentChildren.every(imageUtils.isInlineImageView)) {
123
+ return;
124
+ }
125
+ // When drag and dropping, data.targetRanges specifies where to drop because
126
+ // this is usually a different place than the current model selection (the user
127
+ // uses a drop marker to specify the drop location).
128
+ if (data.targetRanges) {
129
+ modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);
130
+ }
131
+ // Pasting, however, always occurs at the current model selection.
132
+ else {
133
+ modelRange = model.document.selection.getFirstRange();
134
+ }
135
+ const selection = model.createSelection(modelRange);
136
+ // Convert inline images into block images only when the currently selected block is empty
137
+ // (e.g. an empty paragraph) or some object is selected (to replace it).
138
+ if (determineImageTypeForInsertionAtSelection(model.schema, selection) === 'imageBlock') {
139
+ const writer = new UpcastWriter(editingView.document);
140
+ // Wrap <img ... /> -> <figure class="image"><img .../></figure>
141
+ const blockViewImages = docFragmentChildren.map(inlineViewImage => writer.createElement('figure', { class: 'image' }, inlineViewImage));
142
+ data.content = writer.createDocumentFragment(blockViewImages);
143
+ }
144
+ });
145
+ this.listenTo(clipboardPipeline, 'contentInsertion', (evt, data) => {
146
+ if (data.method !== 'paste') {
147
+ return;
148
+ }
149
+ model.change(writer => {
150
+ const range = writer.createRangeIn(data.content);
151
+ for (const item of range.getItems()) {
152
+ if (item.is('element', 'imageBlock')) {
153
+ imageUtils.setImageNaturalSizeAttributes(item);
154
+ }
155
+ }
156
+ });
157
+ });
158
+ }
159
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import ImageUtils from '../imageutils.js';
10
+ /**
11
+ * The image engine plugin. This module loads common code shared between
12
+ * {@link module:image/image/imageinlineediting~ImageInlineEditing} and
13
+ * {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
14
+ *
15
+ * This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
16
+ */
17
+ export default class ImageEditing extends Plugin {
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ static get requires(): readonly [typeof ImageUtils];
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ static get pluginName(): "ImageEditing";
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ static get isOfficialPlugin(): true;
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ init(): void;
34
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import ImageLoadObserver from './imageloadobserver.js';
10
+ import InsertImageCommand from './insertimagecommand.js';
11
+ import ReplaceImageSourceCommand from './replaceimagesourcecommand.js';
12
+ import ImageUtils from '../imageutils.js';
13
+ /**
14
+ * The image engine plugin. This module loads common code shared between
15
+ * {@link module:image/image/imageinlineediting~ImageInlineEditing} and
16
+ * {@link module:image/image/imageblockediting~ImageBlockEditing} plugins.
17
+ *
18
+ * This plugin registers the {@link module:image/image/insertimagecommand~InsertImageCommand 'insertImage'} command.
19
+ */
20
+ export default class ImageEditing extends Plugin {
21
+ /**
22
+ * @inheritDoc
23
+ */
24
+ static get requires() {
25
+ return [ImageUtils];
26
+ }
27
+ /**
28
+ * @inheritDoc
29
+ */
30
+ static get pluginName() {
31
+ return 'ImageEditing';
32
+ }
33
+ /**
34
+ * @inheritDoc
35
+ */
36
+ static get isOfficialPlugin() {
37
+ return true;
38
+ }
39
+ /**
40
+ * @inheritDoc
41
+ */
42
+ init() {
43
+ const editor = this.editor;
44
+ const conversion = editor.conversion;
45
+ // See https://github.com/ckeditor/ckeditor5-image/issues/142.
46
+ editor.editing.view.addObserver(ImageLoadObserver);
47
+ conversion.for('upcast')
48
+ .attributeToAttribute({
49
+ view: {
50
+ name: 'img',
51
+ key: 'alt'
52
+ },
53
+ model: 'alt'
54
+ })
55
+ .attributeToAttribute({
56
+ view: {
57
+ name: 'img',
58
+ key: 'srcset'
59
+ },
60
+ model: 'srcset'
61
+ });
62
+ const insertImageCommand = new InsertImageCommand(editor);
63
+ const replaceImageSourceCommand = new ReplaceImageSourceCommand(editor);
64
+ editor.commands.add('insertImage', insertImageCommand);
65
+ editor.commands.add('replaceImageSource', replaceImageSourceCommand);
66
+ // `imageInsert` is an alias for backward compatibility.
67
+ editor.commands.add('imageInsert', insertImageCommand);
68
+ }
69
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageinlineediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';
10
+ import ImageEditing from './imageediting.js';
11
+ import ImageSizeAttributes from '../imagesizeattributes.js';
12
+ import ImageUtils from '../imageutils.js';
13
+ import ImagePlaceholder from './imageplaceholder.js';
14
+ /**
15
+ * The image inline plugin.
16
+ *
17
+ * It registers:
18
+ *
19
+ * * `<imageInline>` as an inline element in the document schema, and allows `alt`, `src` and `srcset` attributes.
20
+ * * converters for editing and data pipelines.
21
+ * * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeInline'`} command that converts block images into
22
+ * inline images.
23
+ */
24
+ export default class ImageInlineEditing extends Plugin {
25
+ /**
26
+ * @inheritDoc
27
+ */
28
+ static get requires(): readonly [typeof ImageEditing, typeof ImageSizeAttributes, typeof ImageUtils, typeof ImagePlaceholder, typeof ClipboardPipeline];
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get pluginName(): "ImageInlineEditing";
33
+ /**
34
+ * @inheritDoc
35
+ */
36
+ static get isOfficialPlugin(): true;
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ init(): void;
41
+ /**
42
+ * Configures conversion pipelines to support upcasting and downcasting
43
+ * inline images (inline image widgets) and their attributes.
44
+ */
45
+ private _setupConversion;
46
+ /**
47
+ * Integrates the plugin with the clipboard pipeline.
48
+ *
49
+ * Idea is that the feature should recognize the user's intent when an **block** image is
50
+ * pasted or dropped. If such an image is pasted/dropped into a non-empty block
51
+ * (e.g. a paragraph with some text) it gets converted into an inline image on the fly.
52
+ *
53
+ * We assume this is the user's intent if they decided to put their image there.
54
+ *
55
+ * **Note**: If a block image has a caption, it will not be converted to an inline image
56
+ * to avoid the confusion. Captions are added on purpose and they should never be lost
57
+ * in the clipboard pipeline.
58
+ *
59
+ * See the `ImageBlockEditing` for the similar integration that works in the opposite direction.
60
+ *
61
+ * The feature also sets image `width` and `height` attributes when pasting.
62
+ */
63
+ private _setupClipboardIntegration;
64
+ }
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageinlineediting
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import { ClipboardPipeline } from 'ckeditor5/src/clipboard.js';
10
+ import { UpcastWriter } from 'ckeditor5/src/engine.js';
11
+ import { downcastImageAttribute, downcastSrcsetAttribute } from './converters.js';
12
+ import ImageEditing from './imageediting.js';
13
+ import ImageSizeAttributes from '../imagesizeattributes.js';
14
+ import ImageTypeCommand from './imagetypecommand.js';
15
+ import ImageUtils from '../imageutils.js';
16
+ import { getImgViewElementMatcher, createInlineImageViewElement, determineImageTypeForInsertionAtSelection } from './utils.js';
17
+ import ImagePlaceholder from './imageplaceholder.js';
18
+ /**
19
+ * The image inline plugin.
20
+ *
21
+ * It registers:
22
+ *
23
+ * * `<imageInline>` as an inline element in the document schema, and allows `alt`, `src` and `srcset` attributes.
24
+ * * converters for editing and data pipelines.
25
+ * * {@link module:image/image/imagetypecommand~ImageTypeCommand `'imageTypeInline'`} command that converts block images into
26
+ * inline images.
27
+ */
28
+ export default class ImageInlineEditing extends Plugin {
29
+ /**
30
+ * @inheritDoc
31
+ */
32
+ static get requires() {
33
+ return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];
34
+ }
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ static get pluginName() {
39
+ return 'ImageInlineEditing';
40
+ }
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ static get isOfficialPlugin() {
45
+ return true;
46
+ }
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ init() {
51
+ const editor = this.editor;
52
+ const schema = editor.model.schema;
53
+ // Converters 'alt' and 'srcset' are added in 'ImageEditing' plugin.
54
+ schema.register('imageInline', {
55
+ inheritAllFrom: '$inlineObject',
56
+ allowAttributes: ['alt', 'src', 'srcset'],
57
+ // Disallow inline images in captions (at least for now).
58
+ // This is the best spot to do that because independent packages can introduce captions (ImageCaption, TableCaption, etc.).
59
+ disallowIn: ['caption']
60
+ });
61
+ this._setupConversion();
62
+ if (editor.plugins.has('ImageBlockEditing')) {
63
+ editor.commands.add('imageTypeInline', new ImageTypeCommand(this.editor, 'imageInline'));
64
+ this._setupClipboardIntegration();
65
+ }
66
+ }
67
+ /**
68
+ * Configures conversion pipelines to support upcasting and downcasting
69
+ * inline images (inline image widgets) and their attributes.
70
+ */
71
+ _setupConversion() {
72
+ const editor = this.editor;
73
+ const t = editor.t;
74
+ const conversion = editor.conversion;
75
+ const imageUtils = editor.plugins.get('ImageUtils');
76
+ conversion.for('dataDowncast')
77
+ .elementToElement({
78
+ model: 'imageInline',
79
+ view: (modelElement, { writer }) => writer.createEmptyElement('img')
80
+ });
81
+ conversion.for('editingDowncast')
82
+ .elementToStructure({
83
+ model: 'imageInline',
84
+ view: (modelElement, { writer }) => imageUtils.toImageWidget(createInlineImageViewElement(writer), writer, t('image widget'))
85
+ });
86
+ conversion.for('downcast')
87
+ .add(downcastImageAttribute(imageUtils, 'imageInline', 'src'))
88
+ .add(downcastImageAttribute(imageUtils, 'imageInline', 'alt'))
89
+ .add(downcastSrcsetAttribute(imageUtils, 'imageInline'));
90
+ // More image related upcasts are in 'ImageEditing' plugin.
91
+ conversion.for('upcast')
92
+ .elementToElement({
93
+ view: getImgViewElementMatcher(editor, 'imageInline'),
94
+ model: (viewImage, { writer }) => writer.createElement('imageInline', viewImage.hasAttribute('src') ? { src: viewImage.getAttribute('src') } : undefined)
95
+ });
96
+ }
97
+ /**
98
+ * Integrates the plugin with the clipboard pipeline.
99
+ *
100
+ * Idea is that the feature should recognize the user's intent when an **block** image is
101
+ * pasted or dropped. If such an image is pasted/dropped into a non-empty block
102
+ * (e.g. a paragraph with some text) it gets converted into an inline image on the fly.
103
+ *
104
+ * We assume this is the user's intent if they decided to put their image there.
105
+ *
106
+ * **Note**: If a block image has a caption, it will not be converted to an inline image
107
+ * to avoid the confusion. Captions are added on purpose and they should never be lost
108
+ * in the clipboard pipeline.
109
+ *
110
+ * See the `ImageBlockEditing` for the similar integration that works in the opposite direction.
111
+ *
112
+ * The feature also sets image `width` and `height` attributes when pasting.
113
+ */
114
+ _setupClipboardIntegration() {
115
+ const editor = this.editor;
116
+ const model = editor.model;
117
+ const editingView = editor.editing.view;
118
+ const imageUtils = editor.plugins.get('ImageUtils');
119
+ const clipboardPipeline = editor.plugins.get('ClipboardPipeline');
120
+ this.listenTo(clipboardPipeline, 'inputTransformation', (evt, data) => {
121
+ const docFragmentChildren = Array.from(data.content.getChildren());
122
+ let modelRange;
123
+ // Make sure only <figure class="image"></figure> elements are dropped or pasted. Otherwise, if there some other HTML
124
+ // mixed up, this should be handled as a regular paste.
125
+ if (!docFragmentChildren.every(imageUtils.isBlockImageView)) {
126
+ return;
127
+ }
128
+ // When drag and dropping, data.targetRanges specifies where to drop because
129
+ // this is usually a different place than the current model selection (the user
130
+ // uses a drop marker to specify the drop location).
131
+ if (data.targetRanges) {
132
+ modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);
133
+ }
134
+ // Pasting, however, always occurs at the current model selection.
135
+ else {
136
+ modelRange = model.document.selection.getFirstRange();
137
+ }
138
+ const selection = model.createSelection(modelRange);
139
+ // Convert block images into inline images only when pasting or dropping into non-empty blocks
140
+ // and when the block is not an object (e.g. pasting to replace another widget).
141
+ if (determineImageTypeForInsertionAtSelection(model.schema, selection) === 'imageInline') {
142
+ const writer = new UpcastWriter(editingView.document);
143
+ // Unwrap <figure class="image"><img .../></figure> -> <img ... />
144
+ // but <figure class="image"><img .../><figcaption>...</figcaption></figure> -> stays the same
145
+ const inlineViewImages = docFragmentChildren.map(blockViewImage => {
146
+ // If there's just one child, it can be either <img /> or <a><img></a>.
147
+ // If there are other children than <img>, this means that the block image
148
+ // has a caption or some other features and this kind of image should be
149
+ // pasted/dropped without modifications.
150
+ if (blockViewImage.childCount === 1) {
151
+ // Pass the attributes which are present only in the <figure> to the <img>
152
+ // (e.g. the style="width:10%" attribute applied by the ImageResize plugin).
153
+ Array.from(blockViewImage.getAttributes())
154
+ .forEach(attribute => writer.setAttribute(...attribute, imageUtils.findViewImgElement(blockViewImage)));
155
+ return blockViewImage.getChild(0);
156
+ }
157
+ else {
158
+ return blockViewImage;
159
+ }
160
+ });
161
+ data.content = writer.createDocumentFragment(inlineViewImages);
162
+ }
163
+ });
164
+ this.listenTo(clipboardPipeline, 'contentInsertion', (evt, data) => {
165
+ if (data.method !== 'paste') {
166
+ return;
167
+ }
168
+ model.change(writer => {
169
+ const range = writer.createRangeIn(data.content);
170
+ for (const item of range.getItems()) {
171
+ if (item.is('element', 'imageInline')) {
172
+ imageUtils.setImageNaturalSizeAttributes(item);
173
+ }
174
+ }
175
+ });
176
+ });
177
+ }
178
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageloadobserver
7
+ */
8
+ import { Observer } from 'ckeditor5/src/engine.js';
9
+ /**
10
+ * Observes all new images added to the {@link module:engine/view/document~Document},
11
+ * fires {@link module:engine/view/document~Document#event:imageLoaded} and
12
+ * {@link module:engine/view/document~Document#event:layoutChanged} event every time when the new image
13
+ * has been loaded.
14
+ *
15
+ * **Note:** This event is not fired for images that has been added to the document and rendered as `complete` (already loaded).
16
+ */
17
+ export default class ImageLoadObserver extends Observer {
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ observe(domRoot: HTMLElement): void;
22
+ /**
23
+ * @inheritDoc
24
+ */
25
+ stopObserving(domRoot: HTMLElement): void;
26
+ /**
27
+ * Fires {@link module:engine/view/document~Document#event:layoutChanged} and
28
+ * {@link module:engine/view/document~Document#event:imageLoaded}
29
+ * if observer {@link #isEnabled is enabled}.
30
+ *
31
+ * @param domEvent The DOM event.
32
+ */
33
+ private _fireEvents;
34
+ }
35
+ /**
36
+ * Fired when an <img/> DOM element has been loaded in the DOM root.
37
+ *
38
+ * Introduced by {@link module:image/image/imageloadobserver~ImageLoadObserver}.
39
+ *
40
+ * @see module:image/image/imageloadobserver~ImageLoadObserver
41
+ *
42
+ * @eventName module:engine/view/document~Document#imageLoaded
43
+ * @param data Event data.
44
+ */
45
+ export type ImageLoadedEvent = {
46
+ name: 'imageLoaded';
47
+ args: [Event];
48
+ };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageloadobserver
7
+ */
8
+ import { Observer } from 'ckeditor5/src/engine.js';
9
+ /**
10
+ * Observes all new images added to the {@link module:engine/view/document~Document},
11
+ * fires {@link module:engine/view/document~Document#event:imageLoaded} and
12
+ * {@link module:engine/view/document~Document#event:layoutChanged} event every time when the new image
13
+ * has been loaded.
14
+ *
15
+ * **Note:** This event is not fired for images that has been added to the document and rendered as `complete` (already loaded).
16
+ */
17
+ export default class ImageLoadObserver extends Observer {
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ observe(domRoot) {
22
+ this.listenTo(domRoot, 'load', (event, domEvent) => {
23
+ const domElement = domEvent.target;
24
+ if (this.checkShouldIgnoreEventFromTarget(domElement)) {
25
+ return;
26
+ }
27
+ if (domElement.tagName == 'IMG') {
28
+ this._fireEvents(domEvent);
29
+ }
30
+ // Use capture phase for better performance (#4504).
31
+ }, { useCapture: true });
32
+ }
33
+ /**
34
+ * @inheritDoc
35
+ */
36
+ stopObserving(domRoot) {
37
+ this.stopListening(domRoot);
38
+ }
39
+ /**
40
+ * Fires {@link module:engine/view/document~Document#event:layoutChanged} and
41
+ * {@link module:engine/view/document~Document#event:imageLoaded}
42
+ * if observer {@link #isEnabled is enabled}.
43
+ *
44
+ * @param domEvent The DOM event.
45
+ */
46
+ _fireEvents(domEvent) {
47
+ if (this.isEnabled) {
48
+ this.document.fire('layoutChanged');
49
+ this.document.fire('imageLoaded', domEvent);
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ /**
6
+ * @module image/image/imageplaceholder
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core.js';
9
+ import ImageUtils from '../imageutils.js';
10
+ import '../../theme/imageplaceholder.css';
11
+ /**
12
+ * Adds support for image placeholder that is automatically removed when the image is loaded.
13
+ */
14
+ export default class ImagePlaceholder extends Plugin {
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static get requires(): readonly [typeof ImageUtils];
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ static get pluginName(): "ImagePlaceholder";
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ static get isOfficialPlugin(): true;
27
+ /**
28
+ * @inheritDoc
29
+ */
30
+ afterInit(): void;
31
+ /**
32
+ * Extends model schema.
33
+ */
34
+ private _setupSchema;
35
+ /**
36
+ * Registers converters.
37
+ */
38
+ private _setupConversion;
39
+ /**
40
+ * Prepares listener for image load.
41
+ */
42
+ private _setupLoadListener;
43
+ }