jodit-pro 4.15.19 → 4.15.21

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 (316) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +4 -4
  3. package/es2015/jodit.js +164 -46
  4. package/es2015/jodit.min.js +6 -6
  5. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  8. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  11. package/es2015/plugins/backup/backup.css +1 -1
  12. package/es2015/plugins/backup/backup.js +1 -1
  13. package/es2015/plugins/backup/backup.min.js +1 -1
  14. package/es2015/plugins/button-generator/button-generator.css +1 -1
  15. package/es2015/plugins/button-generator/button-generator.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  17. package/es2015/plugins/change-case/change-case.js +1 -1
  18. package/es2015/plugins/change-case/change-case.min.js +1 -1
  19. package/es2015/plugins/color-picker/color-picker.css +1 -1
  20. package/es2015/plugins/color-picker/color-picker.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  22. package/es2015/plugins/emoji/emoji.css +1 -1
  23. package/es2015/plugins/emoji/emoji.js +1 -1
  24. package/es2015/plugins/emoji/emoji.min.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.js +1 -1
  26. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  27. package/es2015/plugins/finder/finder.css +1 -1
  28. package/es2015/plugins/finder/finder.js +1 -1
  29. package/es2015/plugins/finder/finder.min.js +1 -1
  30. package/es2015/plugins/google-maps/google-maps.css +1 -1
  31. package/es2015/plugins/google-maps/google-maps.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  33. package/es2015/plugins/google-search/google-search.js +1 -1
  34. package/es2015/plugins/google-search/google-search.min.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  36. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  40. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  41. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  43. package/es2015/plugins/keyboard/keyboard.css +1 -1
  44. package/es2015/plugins/keyboard/keyboard.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  46. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  47. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  48. package/es2015/plugins/page-break/page-break.js +1 -1
  49. package/es2015/plugins/page-break/page-break.min.js +1 -1
  50. package/es2015/plugins/paste-code/paste-code.css +1 -1
  51. package/es2015/plugins/paste-code/paste-code.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  53. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  54. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  55. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  56. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  57. package/es2015/plugins/style/style.css +1 -1
  58. package/es2015/plugins/style/style.js +1 -1
  59. package/es2015/plugins/style/style.min.js +1 -1
  60. package/es2015/plugins/templates/templates.css +1 -1
  61. package/es2015/plugins/templates/templates.js +1 -1
  62. package/es2015/plugins/templates/templates.min.js +1 -1
  63. package/es2015/plugins/todo-list/todo-list.css +1 -1
  64. package/es2015/plugins/todo-list/todo-list.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  66. package/es2015/plugins/translate/translate.css +1 -1
  67. package/es2015/plugins/translate/translate.js +1 -1
  68. package/es2015/plugins/translate/translate.min.js +1 -1
  69. package/es2015/plugins/tune-block/tune-block.css +1 -1
  70. package/es2015/plugins/tune-block/tune-block.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  72. package/es2018/jodit.fat.min.js +4 -4
  73. package/es2018/jodit.min.js +6 -6
  74. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  75. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  76. package/es2018/plugins/backup/backup.min.js +1 -1
  77. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  78. package/es2018/plugins/change-case/change-case.min.js +1 -1
  79. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  80. package/es2018/plugins/emoji/emoji.min.js +1 -1
  81. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  82. package/es2018/plugins/finder/finder.min.js +1 -1
  83. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  84. package/es2018/plugins/google-search/google-search.min.js +1 -1
  85. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  86. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  87. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  88. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  89. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  90. package/es2018/plugins/page-break/page-break.min.js +1 -1
  91. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  92. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  93. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  94. package/es2018/plugins/style/style.min.js +1 -1
  95. package/es2018/plugins/templates/templates.min.js +1 -1
  96. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  97. package/es2018/plugins/translate/translate.min.js +1 -1
  98. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  99. package/es2021/jodit.css +1 -1
  100. package/es2021/jodit.fat.min.js +8 -8
  101. package/es2021/jodit.js +164 -46
  102. package/es2021/jodit.min.js +11 -11
  103. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  104. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  105. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  106. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  107. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  108. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  109. package/es2021/plugins/backup/backup.css +1 -1
  110. package/es2021/plugins/backup/backup.js +1 -1
  111. package/es2021/plugins/backup/backup.min.js +1 -1
  112. package/es2021/plugins/button-generator/button-generator.css +1 -1
  113. package/es2021/plugins/button-generator/button-generator.js +1 -1
  114. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  115. package/es2021/plugins/change-case/change-case.js +1 -1
  116. package/es2021/plugins/change-case/change-case.min.js +1 -1
  117. package/es2021/plugins/color-picker/color-picker.css +1 -1
  118. package/es2021/plugins/color-picker/color-picker.js +1 -1
  119. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  120. package/es2021/plugins/emoji/emoji.css +1 -1
  121. package/es2021/plugins/emoji/emoji.js +1 -1
  122. package/es2021/plugins/emoji/emoji.min.js +1 -1
  123. package/es2021/plugins/export-docs/export-docs.js +1 -1
  124. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  125. package/es2021/plugins/finder/finder.css +1 -1
  126. package/es2021/plugins/finder/finder.js +1 -1
  127. package/es2021/plugins/finder/finder.min.js +1 -1
  128. package/es2021/plugins/google-maps/google-maps.css +1 -1
  129. package/es2021/plugins/google-maps/google-maps.js +1 -1
  130. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  131. package/es2021/plugins/google-search/google-search.js +1 -1
  132. package/es2021/plugins/google-search/google-search.min.js +1 -1
  133. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  134. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  135. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  136. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  137. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  138. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  139. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  140. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  141. package/es2021/plugins/keyboard/keyboard.css +1 -1
  142. package/es2021/plugins/keyboard/keyboard.js +1 -1
  143. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  144. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  145. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  146. package/es2021/plugins/page-break/page-break.js +1 -1
  147. package/es2021/plugins/page-break/page-break.min.js +1 -1
  148. package/es2021/plugins/paste-code/paste-code.css +1 -1
  149. package/es2021/plugins/paste-code/paste-code.js +1 -1
  150. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  151. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  152. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  153. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  154. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  155. package/es2021/plugins/style/style.css +1 -1
  156. package/es2021/plugins/style/style.js +1 -1
  157. package/es2021/plugins/style/style.min.js +1 -1
  158. package/es2021/plugins/templates/templates.css +1 -1
  159. package/es2021/plugins/templates/templates.js +1 -1
  160. package/es2021/plugins/templates/templates.min.js +1 -1
  161. package/es2021/plugins/todo-list/todo-list.css +1 -1
  162. package/es2021/plugins/todo-list/todo-list.js +1 -1
  163. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  164. package/es2021/plugins/translate/translate.css +1 -1
  165. package/es2021/plugins/translate/translate.js +1 -1
  166. package/es2021/plugins/translate/translate.min.js +1 -1
  167. package/es2021/plugins/tune-block/tune-block.css +1 -1
  168. package/es2021/plugins/tune-block/tune-block.js +1 -1
  169. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  170. package/es2021.en/jodit.css +1 -1
  171. package/es2021.en/jodit.fat.min.js +8 -8
  172. package/es2021.en/jodit.js +164 -46
  173. package/es2021.en/jodit.min.js +11 -11
  174. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  175. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  176. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  177. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  178. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  179. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  180. package/es2021.en/plugins/backup/backup.css +1 -1
  181. package/es2021.en/plugins/backup/backup.js +1 -1
  182. package/es2021.en/plugins/backup/backup.min.js +1 -1
  183. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  184. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  185. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  186. package/es2021.en/plugins/change-case/change-case.js +1 -1
  187. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  188. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  189. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  190. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  191. package/es2021.en/plugins/emoji/emoji.css +1 -1
  192. package/es2021.en/plugins/emoji/emoji.js +1 -1
  193. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  194. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  195. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  196. package/es2021.en/plugins/finder/finder.css +1 -1
  197. package/es2021.en/plugins/finder/finder.js +1 -1
  198. package/es2021.en/plugins/finder/finder.min.js +1 -1
  199. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  200. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  201. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  202. package/es2021.en/plugins/google-search/google-search.js +1 -1
  203. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  204. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  205. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  206. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  207. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  208. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  209. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  210. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  211. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  212. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  213. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  214. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  215. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  216. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  217. package/es2021.en/plugins/page-break/page-break.js +1 -1
  218. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  219. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  220. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  221. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  222. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  223. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  224. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  225. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  226. package/es2021.en/plugins/style/style.css +1 -1
  227. package/es2021.en/plugins/style/style.js +1 -1
  228. package/es2021.en/plugins/style/style.min.js +1 -1
  229. package/es2021.en/plugins/templates/templates.css +1 -1
  230. package/es2021.en/plugins/templates/templates.js +1 -1
  231. package/es2021.en/plugins/templates/templates.min.js +1 -1
  232. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  233. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  234. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  235. package/es2021.en/plugins/translate/translate.css +1 -1
  236. package/es2021.en/plugins/translate/translate.js +1 -1
  237. package/es2021.en/plugins/translate/translate.min.js +1 -1
  238. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  239. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  240. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  241. package/es5/jodit.css +2 -2
  242. package/es5/jodit.fat.min.js +2 -2
  243. package/es5/jodit.js +254 -48
  244. package/es5/jodit.min.css +2 -2
  245. package/es5/jodit.min.js +2 -2
  246. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  247. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  248. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  249. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  250. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  251. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  252. package/es5/plugins/backup/backup.css +1 -1
  253. package/es5/plugins/backup/backup.js +1 -1
  254. package/es5/plugins/backup/backup.min.js +1 -1
  255. package/es5/plugins/button-generator/button-generator.css +1 -1
  256. package/es5/plugins/button-generator/button-generator.js +1 -1
  257. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  258. package/es5/plugins/change-case/change-case.js +1 -1
  259. package/es5/plugins/change-case/change-case.min.js +1 -1
  260. package/es5/plugins/color-picker/color-picker.css +1 -1
  261. package/es5/plugins/color-picker/color-picker.js +1 -1
  262. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  263. package/es5/plugins/emoji/emoji.css +1 -1
  264. package/es5/plugins/emoji/emoji.js +1 -1
  265. package/es5/plugins/emoji/emoji.min.js +1 -1
  266. package/es5/plugins/export-docs/export-docs.js +1 -1
  267. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  268. package/es5/plugins/finder/finder.css +1 -1
  269. package/es5/plugins/finder/finder.js +1 -1
  270. package/es5/plugins/finder/finder.min.js +1 -1
  271. package/es5/plugins/google-maps/google-maps.css +1 -1
  272. package/es5/plugins/google-maps/google-maps.js +1 -1
  273. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  274. package/es5/plugins/google-search/google-search.js +1 -1
  275. package/es5/plugins/google-search/google-search.min.js +1 -1
  276. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  277. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  278. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  279. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  280. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  281. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  282. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  283. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  284. package/es5/plugins/keyboard/keyboard.css +1 -1
  285. package/es5/plugins/keyboard/keyboard.js +1 -1
  286. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  287. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  288. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  289. package/es5/plugins/page-break/page-break.js +1 -1
  290. package/es5/plugins/page-break/page-break.min.js +1 -1
  291. package/es5/plugins/paste-code/paste-code.css +1 -1
  292. package/es5/plugins/paste-code/paste-code.js +1 -1
  293. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  294. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  295. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  296. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  297. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  298. package/es5/plugins/style/style.css +1 -1
  299. package/es5/plugins/style/style.js +1 -1
  300. package/es5/plugins/style/style.min.js +1 -1
  301. package/es5/plugins/templates/templates.css +1 -1
  302. package/es5/plugins/templates/templates.js +1 -1
  303. package/es5/plugins/templates/templates.min.js +1 -1
  304. package/es5/plugins/todo-list/todo-list.css +1 -1
  305. package/es5/plugins/todo-list/todo-list.js +1 -1
  306. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  307. package/es5/plugins/translate/translate.css +1 -1
  308. package/es5/plugins/translate/translate.js +1 -1
  309. package/es5/plugins/translate/translate.min.js +1 -1
  310. package/es5/plugins/tune-block/tune-block.css +1 -1
  311. package/es5/plugins/tune-block/tune-block.js +1 -1
  312. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  313. package/es5/polyfills.fat.min.js +1 -1
  314. package/es5/polyfills.js +1 -1
  315. package/es5/polyfills.min.js +1 -1
  316. package/package.json +1 -1
package/es5/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.15.19
4
+ * Version: v4.15.21
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -738,6 +738,25 @@ var ConfigPrototype = {};
738
738
  /**
739
739
  * Default width (in pixels) applied to images inserted into the editor
740
740
  */ this.imageDefaultWidth = 300;
741
+ /**
742
+ * Alignment given to images inserted into the editor. `'normal'` leaves
743
+ * them unaligned
744
+ */ this.imageDefaultAlign = 'normal';
745
+ /**
746
+ * Class names to align images with, instead of an inline `float` or
747
+ * `margin`. Aligning an image removes every class listed here and adds the
748
+ * chosen alignment's, which can be several separated by spaces.
749
+ *
750
+ * ```javascript
751
+ * Jodit.make('#editor', {
752
+ * imageAlignClasses: {
753
+ * left: 'align-left',
754
+ * right: 'align-right',
755
+ * center: 'align-center'
756
+ * }
757
+ * });
758
+ * ```
759
+ */ this.imageAlignClasses = null;
741
760
  /**
742
761
  * Do not display these buttons that are on the list
743
762
  *
@@ -2289,7 +2308,7 @@ function _unsupported_iterable_to_array(o, minLen) {
2289
2308
  if (n === "Map" || n === "Set") return Array.from(n);
2290
2309
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
2291
2310
  }
2292
- var APP_VERSION = "4.15.19";
2311
+ var APP_VERSION = "4.15.21";
2293
2312
  // prettier-ignore
2294
2313
  var ES = "es5";
2295
2314
  var IS_ES_MODERN = false;
@@ -8085,6 +8104,7 @@ __webpack_require__.r(__webpack_exports__);
8085
8104
  /* harmony export */ getContentWidth: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getContentWidth; },
8086
8105
  /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getDataTransfer; },
8087
8106
  /* harmony export */ getFixedPositionOffset: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getFixedPositionOffset; },
8107
+ /* harmony export */ getHAlign: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getHAlign; },
8088
8108
  /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getPropertyDescriptor; },
8089
8109
  /* harmony export */ getScrollParent: function() { return /* reexport safe */ _size_index_js__WEBPACK_IMPORTED_MODULE_6__.getScrollParent; },
8090
8110
  /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _utils_index_js__WEBPACK_IMPORTED_MODULE_8__.getXPathByElement; },
@@ -9189,21 +9209,71 @@ function trimChars(value, chars) {
9189
9209
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9190
9210
  /* harmony export */ alignElement: function() { return /* binding */ alignElement; },
9191
9211
  /* harmony export */ clearAlign: function() { return /* binding */ clearAlign; },
9212
+ /* harmony export */ getHAlign: function() { return /* binding */ getHAlign; },
9192
9213
  /* harmony export */ hAlignElement: function() { return /* binding */ hAlignElement; }
9193
9214
  /* harmony export */ });
9194
9215
  /* harmony import */ var _dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
9195
9216
  /* harmony import */ var _attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
9196
9217
  /* harmony import */ var _css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
9218
+ function _array_like_to_array(arr, len) {
9219
+ if (len == null || len > arr.length) len = arr.length;
9220
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
9221
+ return arr2;
9222
+ }
9223
+ function _array_without_holes(arr) {
9224
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
9225
+ }
9226
+ function _iterable_to_array(iter) {
9227
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
9228
+ return Array.from(iter);
9229
+ }
9230
+ }
9231
+ function _non_iterable_spread() {
9232
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
9233
+ }
9234
+ function _to_consumable_array(arr) {
9235
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
9236
+ }
9237
+ function _unsupported_iterable_to_array(o, minLen) {
9238
+ if (!o) return;
9239
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
9240
+ var n = Object.prototype.toString.call(o).slice(8, -1);
9241
+ if (n === "Object" && o.constructor) n = o.constructor.name;
9242
+ if (n === "Map" || n === "Set") return Array.from(n);
9243
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
9244
+ }
9197
9245
  /*!
9198
9246
  * Jodit Editor (https://xdsoft.net/jodit/)
9199
9247
  * Released under MIT see LICENSE.txt in the project root for license information.
9200
9248
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
9201
- */
9249
+ */ ;
9202
9250
 
9203
9251
 
9252
+ var classNames = function classNames(value) {
9253
+ return (value !== null && value !== void 0 ? value : '').split(/\s+/).filter(Boolean);
9254
+ };
9204
9255
  /**
9205
- * Align image
9206
- */ function hAlignElement(image, align) {
9256
+ * Align image, with `classes` (see `imageAlignClasses`) instead of inline
9257
+ * styles when they are given
9258
+ */ function hAlignElement(image, align, classes) {
9259
+ if (classes) {
9260
+ var _image_classList, _image_classList1;
9261
+ hAlignElement(image, 'normal');
9262
+ Object.values(classes).forEach(function(value) {
9263
+ return (_image_classList = image.classList).remove.apply(_image_classList, _to_consumable_array(classNames(value)));
9264
+ });
9265
+ (_image_classList1 = image.classList).add.apply(_image_classList1, _to_consumable_array(classNames(classes[align || 'normal'])));
9266
+ [
9267
+ 'class',
9268
+ 'style'
9269
+ ].forEach(function(name) {
9270
+ var _a;
9271
+ if (!((_a = (0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, name)) === null || _a === void 0 ? void 0 : _a.trim())) {
9272
+ (0,_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, name, null);
9273
+ }
9274
+ });
9275
+ return;
9276
+ }
9207
9277
  if (align && align !== 'normal') {
9208
9278
  if (align !== 'center') {
9209
9279
  (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(image, 'float', align);
@@ -9226,6 +9296,34 @@ function trimChars(value, chars) {
9226
9296
  ;(0,_css_js__WEBPACK_IMPORTED_MODULE_2__.clearCenterAlign)(image);
9227
9297
  }
9228
9298
  }
9299
+ /**
9300
+ * The alignment `hAlignElement` has set on an element
9301
+ */ function getHAlign(elm, classes) {
9302
+ if (classes) {
9303
+ for(var _i = 0, _iter = [
9304
+ 'left',
9305
+ 'right',
9306
+ 'center',
9307
+ 'normal'
9308
+ ]; _i < _iter.length; _i++){
9309
+ var align = _iter[_i];
9310
+ var names = classNames(classes[align]);
9311
+ if (names.length && names.every(function(name) {
9312
+ return elm.classList.contains(name);
9313
+ })) {
9314
+ return align;
9315
+ }
9316
+ }
9317
+ }
9318
+ var float = (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'float').toLowerCase();
9319
+ if (float === 'left' || float === 'right') {
9320
+ return float;
9321
+ }
9322
+ if ((0,_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(elm, 'display') === 'block' && (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'margin-left') === 'auto' && (0,_css_js__WEBPACK_IMPORTED_MODULE_2__.cssInline)(elm, 'margin-right') === 'auto') {
9323
+ return 'center';
9324
+ }
9325
+ return 'normal';
9326
+ }
9229
9327
  /**
9230
9328
  * Remove text-align style for all selected children
9231
9329
  */ function clearAlign(node) {
@@ -10731,6 +10829,7 @@ var getClassName = function getClassName(obj) {
10731
10829
  /* harmony export */ get: function() { return /* reexport safe */ _get_js__WEBPACK_IMPORTED_MODULE_15__.get; },
10732
10830
  /* harmony export */ getClassName: function() { return /* reexport safe */ _get_class_name_js__WEBPACK_IMPORTED_MODULE_16__.getClassName; },
10733
10831
  /* harmony export */ getDataTransfer: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getDataTransfer; },
10832
+ /* harmony export */ getHAlign: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.getHAlign; },
10734
10833
  /* harmony export */ getPropertyDescriptor: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_27__.getPropertyDescriptor; },
10735
10834
  /* harmony export */ getXPathByElement: function() { return /* reexport safe */ _selector_js__WEBPACK_IMPORTED_MODULE_24__.getXPathByElement; },
10736
10835
  /* harmony export */ hAlignElement: function() { return /* reexport safe */ _align_js__WEBPACK_IMPORTED_MODULE_0__.hAlignElement; },
@@ -13630,10 +13729,11 @@ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild,
13630
13729
  /* harmony import */ var _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
13631
13730
  /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
13632
13731
  /* harmony import */ var _helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27613);
13633
- /* harmony import */ var _helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(38837);
13634
- /* harmony import */ var _helpers_move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(43463);
13635
- /* harmony import */ var _style_commit_style_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(25639);
13636
- /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(45124);
13732
+ /* harmony import */ var _helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(25726);
13733
+ /* harmony import */ var _helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(38837);
13734
+ /* harmony import */ var _helpers_move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(43463);
13735
+ /* harmony import */ var _style_commit_style_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(25639);
13736
+ /* harmony import */ var _helpers_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(45124);
13637
13737
  function _array_like_to_array(arr, len) {
13638
13738
  if (len == null || len > arr.length) len = arr.length;
13639
13739
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -13835,6 +13935,7 @@ function _unsupported_iterable_to_array(o, minLen) {
13835
13935
 
13836
13936
 
13837
13937
 
13938
+
13838
13939
  var Selection = /*#__PURE__*/ function() {
13839
13940
  "use strict";
13840
13941
  function Selection(jodit) {
@@ -14414,7 +14515,7 @@ var Selection = /*#__PURE__*/ function() {
14414
14515
  return node;
14415
14516
  }
14416
14517
  if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(node)) {
14417
- var ret = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.findCorrectCurrentNode)(node, range, rightMode, sel.isCollapsed, checkChild, child);
14518
+ var ret = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_9__.findCorrectCurrentNode)(node, range, rightMode, sel.isCollapsed, checkChild, child);
14418
14519
  node = ret.node;
14419
14520
  rightMode = ret.rightMode;
14420
14521
  }
@@ -14575,6 +14676,10 @@ var Selection = /*#__PURE__*/ function() {
14575
14676
  if (styles && (typeof styles === "undefined" ? "undefined" : _type_of(styles)) === 'object') {
14576
14677
  (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, styles);
14577
14678
  }
14679
+ var _this_j_o = this.j.o, imageDefaultAlign = _this_j_o.imageDefaultAlign, imageAlignClasses = _this_j_o.imageAlignClasses;
14680
+ if (imageDefaultAlign && imageDefaultAlign !== 'normal') {
14681
+ (0,_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_5__.hAlignElement)(image, imageDefaultAlign, imageAlignClasses);
14682
+ }
14578
14683
  var onload = function onload1() {
14579
14684
  if (image.naturalHeight < image.offsetHeight || image.naturalWidth < image.offsetWidth) {
14580
14685
  (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, {
@@ -14730,7 +14835,7 @@ var Selection = /*#__PURE__*/ function() {
14730
14835
  };
14731
14836
  // check right offset
14732
14837
  if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(container)) {
14733
- if ((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_8__.cursorInTheEdgeOfString)(container, offset, start, end)) {
14838
+ if ((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_9__.cursorInTheEdgeOfString)(container, offset, start, end)) {
14734
14839
  return false;
14735
14840
  }
14736
14841
  } else {
@@ -15341,8 +15446,8 @@ var Selection = /*#__PURE__*/ function() {
15341
15446
  * ```
15342
15447
  */ key: "commitStyle",
15343
15448
  value: function commitStyle(options) {
15344
- ;(0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_5__.assert)((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.size)(options) > 0, 'Need to pass at least one option');
15345
- var styleElm = new _style_commit_style_js__WEBPACK_IMPORTED_MODULE_7__.CommitStyle(options);
15449
+ ;(0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_6__.assert)((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.size)(options) > 0, 'Need to pass at least one option');
15450
+ var styleElm = new _style_commit_style_js__WEBPACK_IMPORTED_MODULE_8__.CommitStyle(options);
15346
15451
  styleElm.apply(this.j);
15347
15452
  }
15348
15453
  },
@@ -15403,7 +15508,7 @@ var Selection = /*#__PURE__*/ function() {
15403
15508
  return _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isEmptyTextNode(node) && _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(node);
15404
15509
  });
15405
15510
  };
15406
- (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_5__.assert)(currentBox.parentNode, 'Splitting fails');
15511
+ (0,_helpers_utils_assert_js__WEBPACK_IMPORTED_MODULE_6__.assert)(currentBox.parentNode, 'Splitting fails');
15407
15512
  try {
15408
15513
  clearEmpties(fragment);
15409
15514
  clearEmpties(currentBox);
@@ -15466,7 +15571,7 @@ var Selection = /*#__PURE__*/ function() {
15466
15571
  var r = range.cloneRange();
15467
15572
  r.collapse(start);
15468
15573
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeInsertNode(r, fake);
15469
- (0,_helpers_move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_6__.moveTheNodeAlongTheEdgeOutward)(fake, start, _this.j.editor);
15574
+ (0,_helpers_move_the_node_along_the_edge_outward_js__WEBPACK_IMPORTED_MODULE_7__.moveTheNodeAlongTheEdgeOutward)(fake, start, _this.j.editor);
15470
15575
  return fake;
15471
15576
  };
15472
15577
  var leftFake = moveMaxEdgeFake(true);
@@ -51836,14 +51941,28 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
51836
51941
  */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.saveSelectionOnBlur = true;
51837
51942
  function focus(editor) {
51838
51943
  if (editor.o.saveSelectionOnBlur) {
51944
+ // A click that brings focus back places the caret itself, and Chrome
51945
+ // has already placed it when focus fires, so restoring would move it
51946
+ // back to the old selection. The saved markers are dropped instead.
51947
+ var focusByPointer = false;
51839
51948
  editor.e.on('blur', function() {
51949
+ // A press that never brought the focus back must not decide
51950
+ // what the next focus does
51951
+ focusByPointer = false;
51840
51952
  if (editor.isEditorMode()) {
51841
51953
  editor.s.save(true);
51842
51954
  }
51955
+ }).on('mousedown touchstart', function() {
51956
+ focusByPointer = !editor.editorIsActive;
51843
51957
  }).on('focus', function() {
51844
51958
  if (editor.isEditorMode()) {
51845
- editor.s.restore();
51959
+ if (focusByPointer) {
51960
+ editor.s.removeMarkers();
51961
+ } else {
51962
+ editor.s.restore();
51963
+ }
51846
51964
  }
51965
+ focusByPointer = false;
51847
51966
  });
51848
51967
  }
51849
51968
  var _$focus = function focus() {
@@ -53105,11 +53224,12 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.imageProcessor = {
53105
53224
  /* unused harmony export imageProcessor */
53106
53225
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
53107
53226
  /* harmony import */ var _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65478);
53108
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
53109
- /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
53110
- /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50911);
53111
- /* harmony import */ var _modules_uploader_helpers_data_uri_to_blob_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(74569);
53112
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(85745);
53227
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
53228
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
53229
+ /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(21537);
53230
+ /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50911);
53231
+ /* harmony import */ var _modules_uploader_helpers_data_uri_to_blob_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74569);
53232
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85745);
53113
53233
  function _assert_this_initialized(self) {
53114
53234
  if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
53115
53235
  return self;
@@ -53362,6 +53482,7 @@ function _wrap_native_super(Class) {
53362
53482
 
53363
53483
 
53364
53484
 
53485
+
53365
53486
  var JODIT_IMAGE_PROCESSOR_BINDED = '__jodit_imageprocessor_binded';
53366
53487
  var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53367
53488
  /**
@@ -53464,9 +53585,9 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53464
53585
  2
53465
53586
  ];
53466
53587
  }
53467
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('img', editor.editor).forEach(function(elm) {
53468
- if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(elm, JODIT_IMAGE_PROCESSOR_BINDED)) {
53469
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(elm, JODIT_IMAGE_PROCESSOR_BINDED, true);
53588
+ ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.$$)('img', editor.editor).forEach(function(elm) {
53589
+ if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.dataBind)(elm, JODIT_IMAGE_PROCESSOR_BINDED)) {
53590
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.dataBind)(elm, JODIT_IMAGE_PROCESSOR_BINDED, true);
53470
53591
  if (!elm.complete) {
53471
53592
  editor.e.on(elm, 'load', function ElementOnLoad() {
53472
53593
  var _a;
@@ -53478,6 +53599,7 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53478
53599
  replaceDataURIToBlobUUID(editor, elm);
53479
53600
  }
53480
53601
  editor.e.on(elm, 'mousedown touchstart', function() {
53602
+ removeCaretText(elm);
53481
53603
  editor.s.select(elm);
53482
53604
  });
53483
53605
  }
@@ -53491,7 +53613,7 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53491
53613
  }
53492
53614
  ]);
53493
53615
  return imageProcessor;
53494
- }(_wrap_native_super(_core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugin));
53616
+ }(_wrap_native_super(_core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plugin));
53495
53617
  __decorate([
53496
53618
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)(':afterGetValueFromEditor')
53497
53619
  ], imageProcessor.prototype, "onAfterGetValueFromEditor", null);
@@ -53506,6 +53628,25 @@ __decorate([
53506
53628
  ]),
53507
53629
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.debounce)()
53508
53630
  ], imageProcessor.prototype, "afterChange", null);
53631
+ /**
53632
+ * Remove the invisible-space text beside an image, which only held a caret.
53633
+ * Selecting the image replaces the caret, and with the text still after a
53634
+ * block image, Safari highlights the rest of the image's line. See #1512
53635
+ */ function removeCaretText(elm) {
53636
+ var _a;
53637
+ for(var _i = 0, _iter = [
53638
+ 'previousSibling',
53639
+ 'nextSibling'
53640
+ ]; _i < _iter.length; _i++){
53641
+ var side = _iter[_i];
53642
+ var node = elm[side];
53643
+ while(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(node) && !((_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.replace((0,_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP)(), ''))){
53644
+ var next = node[side];
53645
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.safeRemove(node);
53646
+ node = next;
53647
+ }
53648
+ }
53649
+ }
53509
53650
  function replaceDataURIToBlobUUID(editor, elm) {
53510
53651
  if (!editor.o.imageProcessor.replaceDataURIToBlobIdInView) {
53511
53652
  return;
@@ -53516,7 +53657,7 @@ function replaceDataURIToBlobUUID(editor, elm) {
53516
53657
  var dataUri = elm.src;
53517
53658
  var blob;
53518
53659
  try {
53519
- blob = (0,_modules_uploader_helpers_data_uri_to_blob_js__WEBPACK_IMPORTED_MODULE_5__.dataURItoBlob)(dataUri);
53660
+ blob = (0,_modules_uploader_helpers_data_uri_to_blob_js__WEBPACK_IMPORTED_MODULE_6__.dataURItoBlob)(dataUri);
53520
53661
  } catch (_a) {
53521
53662
  // A data URI the browser accepts but we cannot decode is not worth
53522
53663
  // breaking the editor over — keep the image as it is
@@ -53529,7 +53670,7 @@ function replaceDataURIToBlobUUID(editor, elm) {
53529
53670
  list[elm.src] = dataUri;
53530
53671
  editor.buffer.set(JODIT_IMAGE_BLOB_ID, list);
53531
53672
  }
53532
- _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProcessor', imageProcessor);
53673
+ _core_global_js__WEBPACK_IMPORTED_MODULE_3__.pluginSystem.add('imageProcessor', imageProcessor);
53533
53674
 
53534
53675
 
53535
53676
  /***/ }),
@@ -54169,7 +54310,7 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
54169
54310
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
54170
54311
  /* harmony export */ readAlign: function() { return /* binding */ readAlign; }
54171
54312
  /* harmony export */ });
54172
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41180);
54313
+ /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25726);
54173
54314
  /*!
54174
54315
  * Jodit Editor (https://xdsoft.net/jodit/)
54175
54316
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -54177,20 +54318,9 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
54177
54318
  */
54178
54319
  /**
54179
54320
  * @private
54180
- */ function readAlign(image, values) {
54181
- // Align
54182
- if ((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'float') && [
54183
- 'left',
54184
- 'right'
54185
- ].indexOf((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'float').toLowerCase()) !== -1) {
54186
- values.align = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, 'float');
54187
- } else {
54188
- if ((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, 'display') === 'block' && (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'margin-left') === 'auto' && (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'margin-right') === 'auto') {
54189
- values.align = 'center';
54190
- } else {
54191
- values.align = '';
54192
- }
54193
- }
54321
+ */ function readAlign(image, values, classes) {
54322
+ var align = (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_0__.getHAlign)(image, classes);
54323
+ values.align = align === 'normal' ? '' : align;
54194
54324
  }
54195
54325
 
54196
54326
 
@@ -54351,7 +54481,7 @@ function _ts_generator(thisArg, body) {
54351
54481
  var image, values;
54352
54482
  return _ts_generator(this, function(_state) {
54353
54483
  image = state.sourceImage, values = state.values;
54354
- (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values);
54484
+ (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values, j.o.imageAlignClasses);
54355
54485
  // Border radius
54356
54486
  values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.cssInline)(image, 'border-radius') || '0', 10) || 0;
54357
54487
  // Id
@@ -56279,7 +56409,7 @@ function _ts_generator(thisArg, body) {
56279
56409
  (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id', id || null);
56280
56410
  }
56281
56411
  if (opt.image.editAlign) {
56282
- (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.hAlignElement)(image, align);
56412
+ (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.hAlignElement)(image, align, j.o.imageAlignClasses);
56283
56413
  }
56284
56414
  }
56285
56415
 
@@ -56346,10 +56476,12 @@ function _ts_generator(thisArg, body) {
56346
56476
  marginBottom,
56347
56477
  marginLeft
56348
56478
  ];
56479
+ // Compared with the inline value, which is what `readMargins` showed, so a
56480
+ // margin from a stylesheet is not overwritten when the field is unchanged
56349
56481
  var applyMargin = function applyMargin(key, value) {
56350
- var oldValue = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, key);
56482
+ var oldValue = (0,_utils_utils_js__WEBPACK_IMPORTED_MODULE_1__.normalSizeToString)((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, key) || 0);
56351
56483
  var v = (0,_utils_utils_js__WEBPACK_IMPORTED_MODULE_1__.normalSizeToString)(value);
56352
- if (oldValue.toString() !== v.toString()) {
56484
+ if (oldValue !== v) {
56353
56485
  (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, key, v);
56354
56486
  }
56355
56487
  };
@@ -57170,14 +57302,68 @@ var cmd = function cmd(control) {
57170
57302
  /* harmony import */ var _core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70799);
57171
57303
  /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25726);
57172
57304
  /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(41180);
57305
+ function _array_like_to_array(arr, len) {
57306
+ if (len == null || len > arr.length) len = arr.length;
57307
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
57308
+ return arr2;
57309
+ }
57310
+ function _array_with_holes(arr) {
57311
+ if (Array.isArray(arr)) return arr;
57312
+ }
57313
+ function _iterable_to_array_limit(arr, i) {
57314
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
57315
+ if (_i == null) return;
57316
+ var _arr = [];
57317
+ var _n = true;
57318
+ var _d = false;
57319
+ var _s, _e;
57320
+ try {
57321
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
57322
+ _arr.push(_s.value);
57323
+ if (i && _arr.length === i) break;
57324
+ }
57325
+ } catch (err) {
57326
+ _d = true;
57327
+ _e = err;
57328
+ } finally{
57329
+ try {
57330
+ if (!_n && _i["return"] != null) _i["return"]();
57331
+ } finally{
57332
+ if (_d) throw _e;
57333
+ }
57334
+ }
57335
+ return _arr;
57336
+ }
57337
+ function _non_iterable_rest() {
57338
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
57339
+ }
57340
+ function _sliced_to_array(arr, i) {
57341
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
57342
+ }
57343
+ function _unsupported_iterable_to_array(o, minLen) {
57344
+ if (!o) return;
57345
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
57346
+ var n = Object.prototype.toString.call(o).slice(8, -1);
57347
+ if (n === "Object" && o.constructor) n = o.constructor.name;
57348
+ if (n === "Map" || n === "Set") return Array.from(n);
57349
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
57350
+ }
57173
57351
  /*!
57174
57352
  * Jodit Editor (https://xdsoft.net/jodit/)
57175
57353
  * Released under MIT see LICENSE.txt in the project root for license information.
57176
57354
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
57177
- */
57355
+ */ ;
57178
57356
 
57179
57357
 
57180
57358
 
57359
+ // Images align with `imageAlignClasses`; the wrappers of iframes and media
57360
+ // keep inline styles
57361
+ var alignClasses = function alignClasses(editor, elm) {
57362
+ return _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, 'img') ? editor.o.imageAlignClasses : null;
57363
+ };
57364
+ var currentAlign = function currentAlign(editor, elm) {
57365
+ return elm ? (0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.getHAlign)(elm, alignClasses(editor, elm)) : 'normal';
57366
+ };
57181
57367
  var align = {
57182
57368
  name: 'left',
57183
57369
  childTemplate: function childTemplate(_, __, value) {
@@ -57189,6 +57375,18 @@ var align = {
57189
57375
  'Center',
57190
57376
  'Normal'
57191
57377
  ],
57378
+ update: function update(editor, button) {
57379
+ var current = currentAlign(editor, button.target);
57380
+ button.state.icon.name = current === 'normal' ? 'left' : current;
57381
+ },
57382
+ isActive: function isActive(editor, button) {
57383
+ return currentAlign(editor, button.target) !== 'normal';
57384
+ },
57385
+ isChildActive: function isChildActive(editor, button) {
57386
+ var _a;
57387
+ var _ref = _sliced_to_array((_a = button.control.args) !== null && _a !== void 0 ? _a : [], 1), value = _ref[0];
57388
+ return (0,_core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__.isString)(value) && currentAlign(editor, button.target) === value.toLowerCase();
57389
+ },
57192
57390
  exec: function exec(editor, elm, param) {
57193
57391
  var control = param.control;
57194
57392
  if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
@@ -57202,7 +57400,7 @@ var align = {
57202
57400
  if (!command) {
57203
57401
  return false;
57204
57402
  }
57205
- ;(0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm, command);
57403
+ ;(0,_core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__.hAlignElement)(elm, command, alignClasses(editor, elm));
57206
57404
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
57207
57405
  'jodit',
57208
57406
  'jodit-media'
@@ -57242,6 +57440,14 @@ var align = {
57242
57440
  'Normal'
57243
57441
  ],
57244
57442
  tooltip: 'Vertical align',
57443
+ // `vertical-align` only moves an image in the line, not a floated or block one
57444
+ isDisabled: function isDisabled(editor, button) {
57445
+ var image = button.target;
57446
+ return Boolean(image && ([
57447
+ 'left',
57448
+ 'right'
57449
+ ].includes((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'float')) || (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_3__.css)(image, 'display') === 'block'));
57450
+ },
57245
57451
  exec: function exec(editor, image, param) {
57246
57452
  var control = param.control;
57247
57453
  if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(image, 'img')) {
package/es5/jodit.min.css CHANGED
@@ -1,14 +1,14 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.15.19
4
+ * Version: v4.15.21
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
8
8
  /*!
9
9
  * jodit-pro - PRO Version of Jodit Editor
10
10
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
11
- * Version: v4.15.19
11
+ * Version: v4.15.21
12
12
  * Url: https://xdsoft.net/jodit/pro/
13
13
  * License(s): SEE LICENSE IN LICENSE.md
14
14
  */