jodit-pro 4.15.18 → 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 +183 -53
  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 +9 -9
  101. package/es2021/jodit.js +183 -53
  102. package/es2021/jodit.min.js +12 -12
  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 +9 -9
  172. package/es2021.en/jodit.js +183 -53
  173. package/es2021.en/jodit.min.js +12 -12
  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 +273 -55
  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.18
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.18";
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);
@@ -47554,7 +47659,10 @@ var cleanHtml = /*#__PURE__*/ function(Plugin) {
47554
47659
  if (!this.j.o.cleanHTML.collapseEmptyValueToEmptyString) {
47555
47660
  return;
47556
47661
  }
47557
- if (/^<([a-z][a-z0-9]*)\b[^>]*>(?:<br\/?>)?<\/\1>$/i.test(data.value.trim())) {
47662
+ // Only a text block can be an empty caret container; a lone video,
47663
+ // iframe or icon has no children but is content in itself
47664
+ var lone = /^<([a-z][a-z0-9]*)\b[^>]*>(?:<br\/?>)?<\/\1>$/i.exec(data.value.trim());
47665
+ if (lone && /^(p|div|h[1-6]|blockquote|pre)$/i.test(lone[1])) {
47558
47666
  data.value = '';
47559
47667
  }
47560
47668
  }
@@ -48904,6 +49012,15 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('color', color);
48904
49012
 
48905
49013
 
48906
49014
  _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_2__.Icon.set('brush', _brush_svg_js__WEBPACK_IMPORTED_MODULE_5__["default"]);
49015
+ /**
49016
+ * Set a color style; an empty value removes it, and with it the `style`
49017
+ * attribute once nothing else is left in it
49018
+ */ function setColorStyle(elm, key, value) {
49019
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(elm, key, value);
49020
+ if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style')) {
49021
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style', null);
49022
+ }
49023
+ }
48907
49024
  _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.brushCell = {
48908
49025
  isVisible: function isVisible(editor) {
48909
49026
  return !editor.o.disablePlugins.includes('color');
@@ -48920,7 +49037,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.brushCell = {
48920
49037
  var makeColorPicker = function makeColorPicker(key) {
48921
49038
  return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_4__.ColorPickerWidget)(editor, function(value) {
48922
49039
  selected.forEach(function(cell) {
48923
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(cell, key, value);
49040
+ setColorStyle(cell, key, value);
48924
49041
  });
48925
49042
  editor.lock();
48926
49043
  editor.synchronizeValues();
@@ -49007,7 +49124,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.brush = {
49007
49124
  if (!currentElement) {
49008
49125
  editor.execCommand('background', false, value);
49009
49126
  } else {
49010
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(currentElement, 'backgroundColor', value);
49127
+ setColorStyle(currentElement, 'backgroundColor', value);
49011
49128
  }
49012
49129
  ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.dataBind)(button, 'color', value);
49013
49130
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.dataBind)(button, 'color-mode', 'background');
@@ -49017,7 +49134,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.brush = {
49017
49134
  if (!currentElement) {
49018
49135
  editor.execCommand('forecolor', false, value);
49019
49136
  } else {
49020
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(currentElement, 'color', value);
49137
+ setColorStyle(currentElement, 'color', value);
49021
49138
  }
49022
49139
  ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.dataBind)(button, 'color', value);
49023
49140
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.dataBind)(button, 'color-mode', 'color');
@@ -49047,10 +49164,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.brush = {
49047
49164
  if (current && current !== jodit.editor && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isNode(current) && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(current)) {
49048
49165
  switch(mode){
49049
49166
  case 'color':
49050
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(current, 'color', color);
49167
+ setColorStyle(current, 'color', color);
49051
49168
  break;
49052
49169
  case 'background':
49053
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.css)(current, 'backgroundColor', color);
49170
+ setColorStyle(current, 'backgroundColor', color);
49054
49171
  break;
49055
49172
  }
49056
49173
  } else {
@@ -51824,14 +51941,28 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('file', file);
51824
51941
  */ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.saveSelectionOnBlur = true;
51825
51942
  function focus(editor) {
51826
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;
51827
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;
51828
51952
  if (editor.isEditorMode()) {
51829
51953
  editor.s.save(true);
51830
51954
  }
51955
+ }).on('mousedown touchstart', function() {
51956
+ focusByPointer = !editor.editorIsActive;
51831
51957
  }).on('focus', function() {
51832
51958
  if (editor.isEditorMode()) {
51833
- editor.s.restore();
51959
+ if (focusByPointer) {
51960
+ editor.s.removeMarkers();
51961
+ } else {
51962
+ editor.s.restore();
51963
+ }
51834
51964
  }
51965
+ focusByPointer = false;
51835
51966
  });
51836
51967
  }
51837
51968
  var _$focus = function focus() {
@@ -53093,11 +53224,12 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.imageProcessor = {
53093
53224
  /* unused harmony export imageProcessor */
53094
53225
  /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
53095
53226
  /* harmony import */ var _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65478);
53096
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
53097
- /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(21537);
53098
- /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50911);
53099
- /* harmony import */ var _modules_uploader_helpers_data_uri_to_blob_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(74569);
53100
- /* 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);
53101
53233
  function _assert_this_initialized(self) {
53102
53234
  if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
53103
53235
  return self;
@@ -53350,6 +53482,7 @@ function _wrap_native_super(Class) {
53350
53482
 
53351
53483
 
53352
53484
 
53485
+
53353
53486
  var JODIT_IMAGE_PROCESSOR_BINDED = '__jodit_imageprocessor_binded';
53354
53487
  var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53355
53488
  /**
@@ -53452,9 +53585,9 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53452
53585
  2
53453
53586
  ];
53454
53587
  }
53455
- ;(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('img', editor.editor).forEach(function(elm) {
53456
- if (!(0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(elm, JODIT_IMAGE_PROCESSOR_BINDED)) {
53457
- (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);
53458
53591
  if (!elm.complete) {
53459
53592
  editor.e.on(elm, 'load', function ElementOnLoad() {
53460
53593
  var _a;
@@ -53466,6 +53599,7 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53466
53599
  replaceDataURIToBlobUUID(editor, elm);
53467
53600
  }
53468
53601
  editor.e.on(elm, 'mousedown touchstart', function() {
53602
+ removeCaretText(elm);
53469
53603
  editor.s.select(elm);
53470
53604
  });
53471
53605
  }
@@ -53479,7 +53613,7 @@ var JODIT_IMAGE_BLOB_ID = JODIT_IMAGE_PROCESSOR_BINDED + 'blob-id';
53479
53613
  }
53480
53614
  ]);
53481
53615
  return imageProcessor;
53482
- }(_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));
53483
53617
  __decorate([
53484
53618
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)(':afterGetValueFromEditor')
53485
53619
  ], imageProcessor.prototype, "onAfterGetValueFromEditor", null);
@@ -53494,6 +53628,25 @@ __decorate([
53494
53628
  ]),
53495
53629
  (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.debounce)()
53496
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
+ }
53497
53650
  function replaceDataURIToBlobUUID(editor, elm) {
53498
53651
  if (!editor.o.imageProcessor.replaceDataURIToBlobIdInView) {
53499
53652
  return;
@@ -53504,7 +53657,7 @@ function replaceDataURIToBlobUUID(editor, elm) {
53504
53657
  var dataUri = elm.src;
53505
53658
  var blob;
53506
53659
  try {
53507
- 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);
53508
53661
  } catch (_a) {
53509
53662
  // A data URI the browser accepts but we cannot decode is not worth
53510
53663
  // breaking the editor over — keep the image as it is
@@ -53517,7 +53670,7 @@ function replaceDataURIToBlobUUID(editor, elm) {
53517
53670
  list[elm.src] = dataUri;
53518
53671
  editor.buffer.set(JODIT_IMAGE_BLOB_ID, list);
53519
53672
  }
53520
- _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProcessor', imageProcessor);
53673
+ _core_global_js__WEBPACK_IMPORTED_MODULE_3__.pluginSystem.add('imageProcessor', imageProcessor);
53521
53674
 
53522
53675
 
53523
53676
  /***/ }),
@@ -54157,7 +54310,7 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
54157
54310
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
54158
54311
  /* harmony export */ readAlign: function() { return /* binding */ readAlign; }
54159
54312
  /* harmony export */ });
54160
- /* 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);
54161
54314
  /*!
54162
54315
  * Jodit Editor (https://xdsoft.net/jodit/)
54163
54316
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -54165,20 +54318,9 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('imageProperties',
54165
54318
  */
54166
54319
  /**
54167
54320
  * @private
54168
- */ function readAlign(image, values) {
54169
- // Align
54170
- if ((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'float') && [
54171
- 'left',
54172
- 'right'
54173
- ].indexOf((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.cssInline)(image, 'float').toLowerCase()) !== -1) {
54174
- values.align = (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, 'float');
54175
- } else {
54176
- 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') {
54177
- values.align = 'center';
54178
- } else {
54179
- values.align = '';
54180
- }
54181
- }
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;
54182
54324
  }
54183
54325
 
54184
54326
 
@@ -54339,7 +54481,7 @@ function _ts_generator(thisArg, body) {
54339
54481
  var image, values;
54340
54482
  return _ts_generator(this, function(_state) {
54341
54483
  image = state.sourceImage, values = state.values;
54342
- (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values);
54484
+ (0,_align_js__WEBPACK_IMPORTED_MODULE_2__.readAlign)(image, values, j.o.imageAlignClasses);
54343
54485
  // Border radius
54344
54486
  values.borderRadius = parseInt((0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.cssInline)(image, 'border-radius') || '0', 10) || 0;
54345
54487
  // Id
@@ -56267,7 +56409,7 @@ function _ts_generator(thisArg, body) {
56267
56409
  (0,_core_helpers_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(image, 'id', id || null);
56268
56410
  }
56269
56411
  if (opt.image.editAlign) {
56270
- (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);
56271
56413
  }
56272
56414
  }
56273
56415
 
@@ -56334,10 +56476,12 @@ function _ts_generator(thisArg, body) {
56334
56476
  marginBottom,
56335
56477
  marginLeft
56336
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
56337
56481
  var applyMargin = function applyMargin(key, value) {
56338
- 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);
56339
56483
  var v = (0,_utils_utils_js__WEBPACK_IMPORTED_MODULE_1__.normalSizeToString)(value);
56340
- if (oldValue.toString() !== v.toString()) {
56484
+ if (oldValue !== v) {
56341
56485
  (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_0__.css)(image, key, v);
56342
56486
  }
56343
56487
  };
@@ -57158,14 +57302,68 @@ var cmd = function cmd(control) {
57158
57302
  /* harmony import */ var _core_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70799);
57159
57303
  /* harmony import */ var _core_helpers_utils_align_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25726);
57160
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
+ }
57161
57351
  /*!
57162
57352
  * Jodit Editor (https://xdsoft.net/jodit/)
57163
57353
  * Released under MIT see LICENSE.txt in the project root for license information.
57164
57354
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
57165
- */
57355
+ */ ;
57166
57356
 
57167
57357
 
57168
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
+ };
57169
57367
  var align = {
57170
57368
  name: 'left',
57171
57369
  childTemplate: function childTemplate(_, __, value) {
@@ -57177,6 +57375,18 @@ var align = {
57177
57375
  'Center',
57178
57376
  'Normal'
57179
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
+ },
57180
57390
  exec: function exec(editor, elm, param) {
57181
57391
  var control = param.control;
57182
57392
  if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
@@ -57190,7 +57400,7 @@ var align = {
57190
57400
  if (!command) {
57191
57401
  return false;
57192
57402
  }
57193
- ;(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));
57194
57404
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(elm, new Set([
57195
57405
  'jodit',
57196
57406
  'jodit-media'
@@ -57230,6 +57440,14 @@ var align = {
57230
57440
  'Normal'
57231
57441
  ],
57232
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
+ },
57233
57451
  exec: function exec(editor, image, param) {
57234
57452
  var control = param.control;
57235
57453
  if (!_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(image, 'img')) {
@@ -62219,7 +62437,7 @@ function _wrap_native_super(Class) {
62219
62437
  _this.placeholderElm.innerHTML = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_5__.attr)(editor.element, 'placeholder') || '';
62220
62438
  }
62221
62439
  editor.e.fire('placeholder', _this.placeholderElm.innerHTML);
62222
- editor.e.off('.placeholder').on('changePlace.placeholder', _this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder', _this.toggle).on(window, 'load', _this.toggle);
62440
+ editor.e.off('.placeholder').on('changePlace.placeholder', _this.addNativeListeners).on('change.placeholder focus.placeholder keyup.placeholder mouseup.placeholder keydown.placeholder ' + 'mousedown.placeholder afterSetMode.placeholder changePlace.placeholder ' + 'internalChange.placeholder', _this.toggle).on(window, 'load', _this.toggle);
62223
62441
  _this.addNativeListeners();
62224
62442
  _this.toggle();
62225
62443
  };
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.18
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.18
11
+ * Version: v4.15.21
12
12
  * Url: https://xdsoft.net/jodit/pro/
13
13
  * License(s): SEE LICENSE IN LICENSE.md
14
14
  */